bug、优化
This commit is contained in:
@ -47,6 +47,16 @@ public class DesCollectCatalogue extends BaseEntity {
|
||||
*/
|
||||
private String catalogueName;
|
||||
|
||||
/**
|
||||
* 用户id
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 用户名
|
||||
*/
|
||||
private String userName;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
|
@ -49,6 +49,16 @@ public class DesCollectCatalogueBo extends BaseEntity {
|
||||
@NotBlank(message = "目录名不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String catalogueName;
|
||||
|
||||
/**
|
||||
* 用户id
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 用户名
|
||||
*/
|
||||
private String userName;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
|
@ -58,6 +58,16 @@ public class DesCollectCatalogueVo implements Serializable {
|
||||
@ExcelProperty(value = "目录名")
|
||||
private String catalogueName;
|
||||
|
||||
/**
|
||||
* 用户id
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 用户名
|
||||
*/
|
||||
private String userName;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
|
@ -1,11 +1,15 @@
|
||||
package org.dromara.land.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.alibaba.excel.EasyExcel;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import org.dromara.common.excel.utils.ExcelUtil;
|
||||
@ -15,7 +19,12 @@ import org.dromara.common.log.enums.BusinessType;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.web.core.BaseController;
|
||||
import org.dromara.land.controller.listener.GenericExcelListener;
|
||||
import org.dromara.land.domain.BusEnterRoad;
|
||||
import org.dromara.land.domain.BusLandBlock;
|
||||
import org.dromara.land.domain.bo.BusEnterRoadBo;
|
||||
import org.dromara.land.domain.bo.BusEnterRoadImportBo;
|
||||
import org.dromara.land.domain.bo.BusLandBlockImportBo;
|
||||
import org.dromara.land.domain.vo.BusEnterRoadVo;
|
||||
import org.dromara.land.service.IBusEnterRoadService;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
@ -27,8 +36,13 @@ import org.springframework.web.bind.annotation.PutMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 进场道路信息
|
||||
@ -37,6 +51,7 @@ import java.util.List;
|
||||
* @date 2025-07-25
|
||||
*/
|
||||
@Validated
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/land/enterRoad")
|
||||
@ -85,6 +100,7 @@ public class BusEnterRoadController extends BaseController {
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody BusEnterRoadBo bo) {
|
||||
bo.setRoadCode(getRoadCode());
|
||||
return toAjax(busEnterRoadService.insertByBo(bo));
|
||||
}
|
||||
|
||||
@ -111,4 +127,46 @@ public class BusEnterRoadController extends BaseController {
|
||||
@PathVariable Long[] ids) {
|
||||
return toAjax(busEnterRoadService.deleteWithValidByIds(List.of(ids), true));
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("upload/{projectId}")
|
||||
public R<Boolean> upload(MultipartFile file, @NotNull(message = "所属项目不明确")
|
||||
@PathVariable Long projectId) {
|
||||
try {
|
||||
GenericExcelListener<BusEnterRoadImportBo, Long> listener = new GenericExcelListener<>(
|
||||
(productList, supId) -> {
|
||||
List<BusEnterRoad> busEnterRoads = productList.stream()
|
||||
.map(product -> {
|
||||
BusEnterRoad busEnterRoad = BeanUtil.copyProperties(product, BusEnterRoad.class);
|
||||
busEnterRoad.setRoadCode(getRoadCode());
|
||||
busEnterRoad.setProjectId(projectId);
|
||||
return busEnterRoad;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
busEnterRoadService.saveBatch(busEnterRoads);
|
||||
},
|
||||
projectId,
|
||||
500 // 自定义批量大小
|
||||
);
|
||||
|
||||
EasyExcel.read(file.getInputStream(), BusEnterRoadImportBo.class, listener)
|
||||
.sheet("Sheet1")
|
||||
.doRead();
|
||||
// 检查是否有错误发生
|
||||
if (listener.hasError()) {
|
||||
throw new ServiceException("Excel导入失败");
|
||||
}
|
||||
|
||||
log.info("道路数据导入完成,成功: {},失败: {}",
|
||||
listener.getSuccessCount(), listener.getFailCount());
|
||||
} catch (IOException e) {
|
||||
log.error("读取文件失败: {}", e.getMessage());
|
||||
return R.fail("导入失败");
|
||||
}
|
||||
return R.ok();
|
||||
}
|
||||
public String getRoadCode() {
|
||||
return "TD-DL-" + UUID.randomUUID().toString().replace("-", "").substring(0, 12).toUpperCase();
|
||||
//return "TD-DL-"+ System.currentTimeMillis() + ThreadLocalRandom.current().nextInt(1000, 9999);
|
||||
}
|
||||
}
|
||||
|
@ -1,11 +1,15 @@
|
||||
package org.dromara.land.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.alibaba.excel.EasyExcel;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import org.dromara.common.excel.utils.ExcelUtil;
|
||||
@ -15,20 +19,21 @@ import org.dromara.common.log.enums.BusinessType;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.web.core.BaseController;
|
||||
import org.dromara.land.controller.listener.GenericExcelListener;
|
||||
import org.dromara.land.domain.BusLandBlock;
|
||||
import org.dromara.land.domain.bo.BusLandBlockBo;
|
||||
import org.dromara.land.domain.bo.BusLandBlockImportBo;
|
||||
import org.dromara.land.domain.vo.BusLandBlockVo;
|
||||
import org.dromara.land.service.IBusLandBlockService;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.PutMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 地块信息
|
||||
@ -37,6 +42,7 @@ import java.util.List;
|
||||
* @date 2025-07-25
|
||||
*/
|
||||
@Validated
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/land/landBlock")
|
||||
@ -84,6 +90,7 @@ public class BusLandBlockController extends BaseController {
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody BusLandBlockBo bo) {
|
||||
bo.setLandCode(getLandCode());
|
||||
return toAjax(busLandBlockService.insertByBo(bo));
|
||||
}
|
||||
|
||||
@ -110,4 +117,47 @@ public class BusLandBlockController extends BaseController {
|
||||
@PathVariable Long[] ids) {
|
||||
return toAjax(busLandBlockService.deleteWithValidByIds(List.of(ids), true));
|
||||
}
|
||||
|
||||
@PostMapping("upload/{projectId}")
|
||||
public R<Boolean> upload(MultipartFile file,@NotNull(message = "所属项目不明确")
|
||||
@PathVariable Long projectId) {
|
||||
try {
|
||||
GenericExcelListener<BusLandBlockImportBo, Long> listener = new GenericExcelListener<>(
|
||||
(productList, supId) -> {
|
||||
List<BusLandBlock> busLandBlocks = productList.stream()
|
||||
.map(product -> {
|
||||
BusLandBlock busLandBlock = BeanUtil.copyProperties(product, BusLandBlock.class);
|
||||
busLandBlock.setLandCode(getLandCode());
|
||||
busLandBlock.setProjectId(projectId);
|
||||
return busLandBlock;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
busLandBlockService.saveBatch(busLandBlocks);
|
||||
},
|
||||
projectId,
|
||||
500 // 自定义批量大小
|
||||
);
|
||||
|
||||
EasyExcel.read(file.getInputStream(), BusLandBlockImportBo.class, listener)
|
||||
.sheet("Sheet1")
|
||||
.doRead();
|
||||
// 检查是否有错误发生
|
||||
if (listener.hasError()) {
|
||||
throw new ServiceException("Excel导入失败");
|
||||
}
|
||||
|
||||
log.info("地块数据导入完成,成功: {},失败: {}",
|
||||
listener.getSuccessCount(), listener.getFailCount());
|
||||
} catch (IOException e) {
|
||||
log.error("读取文件失败: {}", e.getMessage());
|
||||
return R.fail("导入失败");
|
||||
}
|
||||
return R.ok();
|
||||
}
|
||||
public String getLandCode() {
|
||||
return "TD-DL-" + UUID.randomUUID().toString().replace("-", "").substring(0, 12).toUpperCase();
|
||||
//return "TD-DK-"+ System.currentTimeMillis() + ThreadLocalRandom.current().nextInt(1000, 9999);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -0,0 +1,266 @@
|
||||
package org.dromara.land.controller.listener;
|
||||
|
||||
import com.alibaba.excel.context.AnalysisContext;
|
||||
import com.alibaba.excel.event.AnalysisEventListener;
|
||||
import com.alibaba.excel.exception.ExcelDataConvertException;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.transaction.interceptor.TransactionAspectSupport;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.BiConsumer;
|
||||
|
||||
/**
|
||||
* 通用Excel导入监听器(支持事务性导入)
|
||||
* @param <T> 数据类型
|
||||
* @param <P> 额外参数类型
|
||||
*/
|
||||
public class GenericExcelListener<T, P> extends AnalysisEventListener<T> {
|
||||
private static final Logger logger = LoggerFactory.getLogger(GenericExcelListener.class);
|
||||
|
||||
/**
|
||||
* 默认批量处理大小
|
||||
*/
|
||||
private static final int DEFAULT_BATCH_SIZE = 1000;
|
||||
|
||||
/**
|
||||
* 批量处理大小
|
||||
*/
|
||||
private final int batchSize;
|
||||
|
||||
/**
|
||||
* 临时存储数据列表
|
||||
*/
|
||||
private List<T> dataList;
|
||||
|
||||
/**
|
||||
* 数据处理器(接收额外参数)
|
||||
*/
|
||||
private final BiConsumer<List<T>, P> dataConsumer;
|
||||
|
||||
/**
|
||||
* 额外参数
|
||||
*/
|
||||
private final P extraParam;
|
||||
|
||||
/**
|
||||
* 成功计数
|
||||
*/
|
||||
private int successCount = 0;
|
||||
|
||||
/**
|
||||
* 失败计数
|
||||
*/
|
||||
private int failCount = 0;
|
||||
|
||||
/**
|
||||
* 表头信息
|
||||
*/
|
||||
private List<String> headerList;
|
||||
|
||||
/**
|
||||
* 当前工作表名称
|
||||
*/
|
||||
private String sheetName;
|
||||
|
||||
/**
|
||||
* 是否发生异常
|
||||
*/
|
||||
private boolean hasError = false;
|
||||
|
||||
/**
|
||||
* 异常信息
|
||||
*/
|
||||
private Exception exception;
|
||||
|
||||
/**
|
||||
* 使用默认批量大小的构造函数
|
||||
* @param dataConsumer 数据处理函数(接收额外参数)
|
||||
* @param extraParam 额外参数
|
||||
*/
|
||||
public GenericExcelListener(BiConsumer<List<T>, P> dataConsumer, P extraParam) {
|
||||
this(dataConsumer, extraParam, DEFAULT_BATCH_SIZE);
|
||||
}
|
||||
|
||||
/**
|
||||
* 自定义批量大小的构造函数
|
||||
* @param dataConsumer 数据处理函数(接收额外参数)
|
||||
* @param extraParam 额外参数
|
||||
* @param batchSize 批量大小
|
||||
*/
|
||||
public GenericExcelListener(BiConsumer<List<T>, P> dataConsumer, P extraParam, int batchSize) {
|
||||
this.dataConsumer = dataConsumer;
|
||||
this.extraParam = extraParam;
|
||||
this.batchSize = batchSize;
|
||||
this.dataList = new ArrayList<>(batchSize);
|
||||
}
|
||||
|
||||
/**
|
||||
* 每一条数据解析都会来调用
|
||||
* @param data 一行数据
|
||||
* @param context 分析上下文
|
||||
*/
|
||||
@Override
|
||||
public void invoke(T data, AnalysisContext context) {
|
||||
// 如果已经发生错误,停止处理后续数据
|
||||
if (hasError) {
|
||||
return;
|
||||
}
|
||||
|
||||
dataList.add(data);
|
||||
// 达到batchSize了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
|
||||
if (dataList.size() >= batchSize) {
|
||||
saveData();
|
||||
// 存储完成清理list
|
||||
dataList.clear();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 所有数据解析完成后调用
|
||||
* @param context 分析上下文
|
||||
*/
|
||||
@Override
|
||||
public void doAfterAllAnalysed(AnalysisContext context) {
|
||||
// 如果已经发生错误,不再处理剩余数据
|
||||
if (hasError) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 确保所有数据都能持久化
|
||||
if (!dataList.isEmpty()) {
|
||||
saveData();
|
||||
dataList.clear();
|
||||
}
|
||||
|
||||
if (hasError) {
|
||||
logger.error("Excel导入失败,共处理: {} 条数据,成功: {} 条,失败: {} 条",
|
||||
successCount + failCount, successCount, failCount);
|
||||
throw new RuntimeException("Excel导入失败: " + exception.getMessage(), exception);
|
||||
} else {
|
||||
logger.info("Excel导入成功,共处理: {} 条数据", successCount);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 在读取表头时调用
|
||||
* @param headMap 表头映射
|
||||
* @param context 分析上下文
|
||||
*/
|
||||
@Override
|
||||
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
|
||||
this.headerList = new ArrayList<>(headMap.values());
|
||||
this.sheetName = context.readSheetHolder().getSheetName();
|
||||
logger.info("开始解析工作表: {}", sheetName);
|
||||
logger.info("表头信息: {}", String.join(",", headerList));
|
||||
}
|
||||
|
||||
/**
|
||||
* 在异常处理时调用
|
||||
* @param exception 异常信息
|
||||
* @param context 分析上下文
|
||||
*/
|
||||
@Override
|
||||
public void onException(Exception exception, AnalysisContext context) {
|
||||
logger.error("解析失败: {}", exception.getMessage());
|
||||
|
||||
if (exception instanceof ExcelDataConvertException) {
|
||||
ExcelDataConvertException excelDataConvertException = (ExcelDataConvertException) exception;
|
||||
logger.error("第{}行,第{}列解析异常,数据为: {}",
|
||||
excelDataConvertException.getRowIndex(),
|
||||
excelDataConvertException.getColumnIndex(),
|
||||
excelDataConvertException.getCellData());
|
||||
}
|
||||
|
||||
// 标记错误状态
|
||||
this.hasError = true;
|
||||
this.exception = exception;
|
||||
// 手动回滚事务
|
||||
try {
|
||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||
} catch (Exception e) {
|
||||
logger.warn("无法设置事务回滚,可能不在事务上下文中: {}", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存数据
|
||||
* 移除了@Transactional注解,改为在外部方法上控制事务
|
||||
*/
|
||||
private void saveData() {
|
||||
if (dataList.isEmpty() || hasError) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
logger.info("正在批量处理 {} 条数据", dataList.size());
|
||||
dataConsumer.accept(dataList, extraParam);
|
||||
successCount += dataList.size();
|
||||
logger.info("成功处理 {} 条数据", dataList.size());
|
||||
} catch (Exception e) {
|
||||
logger.error("数据处理失败: {}", e.getMessage());
|
||||
// 标记错误状态
|
||||
this.hasError = true;
|
||||
this.exception = e;
|
||||
// 手动回滚事务
|
||||
try {
|
||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||
} catch (Exception ex) {
|
||||
logger.warn("无法设置事务回滚,可能不在事务上下文中: {}", ex.getMessage());
|
||||
}
|
||||
// 抛出异常,确保事务回滚
|
||||
throw new RuntimeException("数据处理失败", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取成功计数
|
||||
* @return 成功处理的数据条数
|
||||
*/
|
||||
public int getSuccessCount() {
|
||||
return successCount;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取失败计数
|
||||
* @return 处理失败的数据条数
|
||||
*/
|
||||
public int getFailCount() {
|
||||
return failCount;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取表头信息
|
||||
* @return 表头列表
|
||||
*/
|
||||
public List<String> getHeaderList() {
|
||||
return headerList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取工作表名称
|
||||
* @return 工作表名称
|
||||
*/
|
||||
public String getSheetName() {
|
||||
return sheetName;
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查是否有错误发生
|
||||
* @return 是否有错误
|
||||
*/
|
||||
public boolean hasError() {
|
||||
return hasError;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取异常信息
|
||||
* @return 异常信息
|
||||
*/
|
||||
public Exception getException() {
|
||||
return exception;
|
||||
}
|
||||
}
|
@ -0,0 +1,60 @@
|
||||
package org.dromara.land.domain.bo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||
import org.dromara.land.domain.BusEnterRoad;
|
||||
|
||||
/**
|
||||
* 进场道路信息业务对象 bus_enter_road
|
||||
*
|
||||
* @author Lion Li
|
||||
* @date 2025-07-25
|
||||
*/
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@EqualsAndHashCode
|
||||
public class BusEnterRoadImportBo extends BaseEntity {
|
||||
|
||||
|
||||
/**
|
||||
* 道路名称
|
||||
*/
|
||||
@ExcelProperty("道路名称")
|
||||
private String roadName;
|
||||
|
||||
/**
|
||||
* 设计新建道路长度(米)
|
||||
*/
|
||||
@ExcelProperty("设计新建道路长度")
|
||||
private String designCreateLength;
|
||||
|
||||
/**
|
||||
* 设计改扩建长度(米)
|
||||
*/
|
||||
@ExcelProperty("设计改扩建长度")
|
||||
private String designUpdateLength;
|
||||
|
||||
/**
|
||||
* 需流转总长度(米)
|
||||
*/
|
||||
@ExcelProperty("需流转总长度")
|
||||
private String changeLength;
|
||||
|
||||
/**
|
||||
* 需要流转总面积
|
||||
*/
|
||||
@ExcelProperty("需要流转总面积")
|
||||
private String changeArea;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,52 @@
|
||||
package org.dromara.land.domain.bo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@EqualsAndHashCode
|
||||
public class BusLandBlockImportBo {
|
||||
|
||||
|
||||
/**
|
||||
* 地块名称
|
||||
*/
|
||||
@ExcelProperty("地块名称")
|
||||
private String landName;
|
||||
|
||||
/**
|
||||
* 所属村委会
|
||||
*/
|
||||
@ExcelProperty("所属村委会")
|
||||
private String villageCommittee;
|
||||
|
||||
/**
|
||||
* 设计面积(亩)
|
||||
*/
|
||||
@ExcelProperty("设计面积(亩)")
|
||||
private String designArea;
|
||||
|
||||
/**
|
||||
* 地块数
|
||||
*/
|
||||
@ExcelProperty("地块数")
|
||||
private Long blockCount;
|
||||
|
||||
/**
|
||||
* 农户数
|
||||
*/
|
||||
@ExcelProperty("农户数")
|
||||
private Long farmerCount;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@ExcelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
|
||||
}
|
@ -1,5 +1,7 @@
|
||||
package org.dromara.land.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.dromara.land.domain.BusEnterRoad;
|
||||
import org.dromara.land.domain.vo.BusEnterRoadVo;
|
||||
import org.dromara.land.domain.bo.BusEnterRoadBo;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
@ -14,7 +16,7 @@ import java.util.List;
|
||||
* @author Lion Li
|
||||
* @date 2025-07-25
|
||||
*/
|
||||
public interface IBusEnterRoadService {
|
||||
public interface IBusEnterRoadService extends IService<BusEnterRoad> {
|
||||
|
||||
/**
|
||||
* 查询进场道路信息
|
||||
|
@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.utils.MapstructUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
@ -31,9 +32,7 @@ import java.util.Map;
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class BusEnterRoadServiceImpl implements IBusEnterRoadService {
|
||||
|
||||
public static final String ENTER_ROAD_PREFIX = "TD-DL-";
|
||||
public class BusEnterRoadServiceImpl extends ServiceImpl<BusEnterRoadMapper, BusEnterRoad> implements IBusEnterRoadService {
|
||||
|
||||
private final BusEnterRoadMapper baseMapper;
|
||||
|
||||
@ -123,8 +122,6 @@ public class BusEnterRoadServiceImpl implements IBusEnterRoadService {
|
||||
if (flag) {
|
||||
bo.setId(add.getId());
|
||||
}
|
||||
add.setRoadCode(ENTER_ROAD_PREFIX+add.getId());
|
||||
baseMapper.updateById(add);
|
||||
return flag;
|
||||
}
|
||||
|
||||
|
@ -37,9 +37,6 @@ import java.util.stream.Collectors;
|
||||
@Service
|
||||
public class BusLandBlockServiceImpl extends ServiceImpl<BusLandBlockMapper, BusLandBlock> implements IBusLandBlockService {
|
||||
|
||||
|
||||
public static final String LAND_PREFIX = "TD-DK-";
|
||||
|
||||
private final BusLandBlockMapper baseMapper;
|
||||
|
||||
private final IBusLandBlockUnitProjectService iBusLandBlockUnitProjectService;
|
||||
@ -120,9 +117,6 @@ public class BusLandBlockServiceImpl extends ServiceImpl<BusLandBlockMapper, Bus
|
||||
if (flag) {
|
||||
bo.setId(add.getId());
|
||||
}
|
||||
add.setLandCode(LAND_PREFIX+add.getId());
|
||||
baseMapper.updateById(add);
|
||||
|
||||
if(CollectionUtil.isNotEmpty(bo.getUnitBoList())){
|
||||
iBusLandBlockUnitProjectService.insertBatch(add.getId(),bo.getUnitBoList());
|
||||
}
|
||||
|
@ -267,8 +267,10 @@ public class MatMaterialReceiveServiceImpl extends ServiceImpl<MatMaterialReceiv
|
||||
if (!result) {
|
||||
throw new RuntimeException("物料接收单明细项新增失败");
|
||||
}
|
||||
//生成缺货采购单
|
||||
purchaseDocService.create(materialReceive.getDocId(), map);
|
||||
//生成缺货采购单 只有乙供才生成
|
||||
if (materialReceive.getMaterialSource().equals("2")) {
|
||||
purchaseDocService.create(materialReceive.getDocId(), map);
|
||||
}
|
||||
//生成库存
|
||||
materialsService.create(materialReceive.getProjectId(), itemList, nickname);
|
||||
}
|
||||
|
Reference in New Issue
Block a user