bug、优化

This commit is contained in:
zt
2025-08-25 18:32:19 +08:00
parent c26f23cfb0
commit 8e07ecc69b
12 changed files with 533 additions and 22 deletions

View File

@ -47,6 +47,16 @@ public class DesCollectCatalogue extends BaseEntity {
*/ */
private String catalogueName; private String catalogueName;
/**
* 用户id
*/
private Long userId;
/**
* 用户名
*/
private String userName;
/** /**
* 备注 * 备注
*/ */

View File

@ -49,6 +49,16 @@ public class DesCollectCatalogueBo extends BaseEntity {
@NotBlank(message = "目录名不能为空", groups = { AddGroup.class, EditGroup.class }) @NotBlank(message = "目录名不能为空", groups = { AddGroup.class, EditGroup.class })
private String catalogueName; private String catalogueName;
/**
* 用户id
*/
private Long userId;
/**
* 用户名
*/
private String userName;
/** /**
* 备注 * 备注
*/ */

View File

@ -58,6 +58,16 @@ public class DesCollectCatalogueVo implements Serializable {
@ExcelProperty(value = "目录名") @ExcelProperty(value = "目录名")
private String catalogueName; private String catalogueName;
/**
* 用户id
*/
private Long userId;
/**
* 用户名
*/
private String userName;
/** /**
* 备注 * 备注
*/ */

View File

@ -1,11 +1,15 @@
package org.dromara.land.controller; package org.dromara.land.controller;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.excel.EasyExcel;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.R; 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.AddGroup;
import org.dromara.common.core.validate.EditGroup; import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.excel.utils.ExcelUtil; 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.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController; 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.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.domain.vo.BusEnterRoadVo;
import org.dromara.land.service.IBusEnterRoadService; import org.dromara.land.service.IBusEnterRoadService;
import org.springframework.validation.annotation.Validated; 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.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.List; 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 * @date 2025-07-25
*/ */
@Validated @Validated
@Slf4j
@RequiredArgsConstructor @RequiredArgsConstructor
@RestController @RestController
@RequestMapping("/land/enterRoad") @RequestMapping("/land/enterRoad")
@ -85,6 +100,7 @@ public class BusEnterRoadController extends BaseController {
@RepeatSubmit() @RepeatSubmit()
@PostMapping() @PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody BusEnterRoadBo bo) { public R<Void> add(@Validated(AddGroup.class) @RequestBody BusEnterRoadBo bo) {
bo.setRoadCode(getRoadCode());
return toAjax(busEnterRoadService.insertByBo(bo)); return toAjax(busEnterRoadService.insertByBo(bo));
} }
@ -111,4 +127,46 @@ public class BusEnterRoadController extends BaseController {
@PathVariable Long[] ids) { @PathVariable Long[] ids) {
return toAjax(busEnterRoadService.deleteWithValidByIds(List.of(ids), true)); 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);
}
} }

View File

@ -1,11 +1,15 @@
package org.dromara.land.controller; package org.dromara.land.controller;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.excel.EasyExcel;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.R; 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.AddGroup;
import org.dromara.common.core.validate.EditGroup; import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.excel.utils.ExcelUtil; 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.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController; 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.BusLandBlockBo;
import org.dromara.land.domain.bo.BusLandBlockImportBo;
import org.dromara.land.domain.vo.BusLandBlockVo; import org.dromara.land.domain.vo.BusLandBlockVo;
import org.dromara.land.service.IBusLandBlockService; import org.dromara.land.service.IBusLandBlockService;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.multipart.MultipartFile;
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 java.io.IOException;
import java.util.List; 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 * @date 2025-07-25
*/ */
@Validated @Validated
@Slf4j
@RequiredArgsConstructor @RequiredArgsConstructor
@RestController @RestController
@RequestMapping("/land/landBlock") @RequestMapping("/land/landBlock")
@ -84,6 +90,7 @@ public class BusLandBlockController extends BaseController {
@RepeatSubmit() @RepeatSubmit()
@PostMapping() @PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody BusLandBlockBo bo) { public R<Void> add(@Validated(AddGroup.class) @RequestBody BusLandBlockBo bo) {
bo.setLandCode(getLandCode());
return toAjax(busLandBlockService.insertByBo(bo)); return toAjax(busLandBlockService.insertByBo(bo));
} }
@ -110,4 +117,47 @@ public class BusLandBlockController extends BaseController {
@PathVariable Long[] ids) { @PathVariable Long[] ids) {
return toAjax(busLandBlockService.deleteWithValidByIds(List.of(ids), true)); 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);
}
} }

View File

@ -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;
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -1,5 +1,7 @@
package org.dromara.land.service; 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.vo.BusEnterRoadVo;
import org.dromara.land.domain.bo.BusEnterRoadBo; import org.dromara.land.domain.bo.BusEnterRoadBo;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -14,7 +16,7 @@ import java.util.List;
* @author Lion Li * @author Lion Li
* @date 2025-07-25 * @date 2025-07-25
*/ */
public interface IBusEnterRoadService { public interface IBusEnterRoadService extends IService<BusEnterRoad> {
/** /**
* 查询进场道路信息 * 查询进场道路信息

View File

@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
@ -31,9 +32,7 @@ import java.util.Map;
*/ */
@RequiredArgsConstructor @RequiredArgsConstructor
@Service @Service
public class BusEnterRoadServiceImpl implements IBusEnterRoadService { public class BusEnterRoadServiceImpl extends ServiceImpl<BusEnterRoadMapper, BusEnterRoad> implements IBusEnterRoadService {
public static final String ENTER_ROAD_PREFIX = "TD-DL-";
private final BusEnterRoadMapper baseMapper; private final BusEnterRoadMapper baseMapper;
@ -123,8 +122,6 @@ public class BusEnterRoadServiceImpl implements IBusEnterRoadService {
if (flag) { if (flag) {
bo.setId(add.getId()); bo.setId(add.getId());
} }
add.setRoadCode(ENTER_ROAD_PREFIX+add.getId());
baseMapper.updateById(add);
return flag; return flag;
} }

View File

@ -37,9 +37,6 @@ import java.util.stream.Collectors;
@Service @Service
public class BusLandBlockServiceImpl extends ServiceImpl<BusLandBlockMapper, BusLandBlock> implements IBusLandBlockService { public class BusLandBlockServiceImpl extends ServiceImpl<BusLandBlockMapper, BusLandBlock> implements IBusLandBlockService {
public static final String LAND_PREFIX = "TD-DK-";
private final BusLandBlockMapper baseMapper; private final BusLandBlockMapper baseMapper;
private final IBusLandBlockUnitProjectService iBusLandBlockUnitProjectService; private final IBusLandBlockUnitProjectService iBusLandBlockUnitProjectService;
@ -120,9 +117,6 @@ public class BusLandBlockServiceImpl extends ServiceImpl<BusLandBlockMapper, Bus
if (flag) { if (flag) {
bo.setId(add.getId()); bo.setId(add.getId());
} }
add.setLandCode(LAND_PREFIX+add.getId());
baseMapper.updateById(add);
if(CollectionUtil.isNotEmpty(bo.getUnitBoList())){ if(CollectionUtil.isNotEmpty(bo.getUnitBoList())){
iBusLandBlockUnitProjectService.insertBatch(add.getId(),bo.getUnitBoList()); iBusLandBlockUnitProjectService.insertBatch(add.getId(),bo.getUnitBoList());
} }

View File

@ -267,8 +267,10 @@ public class MatMaterialReceiveServiceImpl extends ServiceImpl<MatMaterialReceiv
if (!result) { if (!result) {
throw new RuntimeException("物料接收单明细项新增失败"); throw new RuntimeException("物料接收单明细项新增失败");
} }
//生成缺货采购单 //生成缺货采购单 只有乙供才生成
purchaseDocService.create(materialReceive.getDocId(), map); if (materialReceive.getMaterialSource().equals("2")) {
purchaseDocService.create(materialReceive.getDocId(), map);
}
//生成库存 //生成库存
materialsService.create(materialReceive.getProjectId(), itemList, nickname); materialsService.create(materialReceive.getProjectId(), itemList, nickname);
} }