update 工序、工艺路线更新优化

master
yinq 2 months ago
parent 54ff2eaf41
commit b3a3b4ca3c

@ -178,35 +178,29 @@ public class ProdBaseProcessInfoServiceImpl implements IProdBaseProcessInfoServi
// if (ObjectUtil.isNotEmpty(userId)) update.setCreateBy(userId);
// update.setCreateTime(DateUtils.getNowDate());
validEntityBeforeSave(update);
List<ProdBaseProcessProdLineBo> prodBaseProcessProdlineBoList = bo.getProdBaseProcessProdlineBoList();
if (ObjectUtil.isNotEmpty(prodBaseProcessProdlineBoList)) {
List<ProdBaseProcessProdLine> prodBaseProcessProdlineList = MapstructUtils.convert(prodBaseProcessProdlineBoList, ProdBaseProcessProdLine.class);
update.setProdBaseProcessProdlineList(prodBaseProcessProdlineList);
}
baseMapper.deleteProdBaseProcessProdlineByProcessId(update.getProcessId());
try {
insertProdBaseProcessProdline(update);
} catch (Exception e) {
throw new ServiceException("该工序已关联产线!");
if (!bo.getProdBaseProcessProdlineBoList().isEmpty()){
updateProdBaseProcessProdline(bo);
}
//更新工序关联资源
List<ProdBaseProcessResource> processResourceList = bo.getProdBaseProcessResourceList();
MPJLambdaWrapper<ProdBaseProcessResource> lqwRecord = JoinWrappers.lambda(ProdBaseProcessResource.class);
lqwRecord.eq(ProdBaseProcessResource::getProcessId, bo.getProcessId());
List<ProdBaseProcessResource> dataFieldList = processResourceMapper.selectList(lqwRecord);
if (!processResourceList.isEmpty()) {
for (ProdBaseProcessResource dataField : processResourceList) {
processResourceMapper.insertOrUpdate(dataField);
}
Set<Long> existingIds = processResourceList.stream()
.map(ProdBaseProcessResource::getProcessResourceId)
.collect(Collectors.toSet());
List<ProdBaseProcessResource> filteredIds = dataFieldList.stream()
.filter(field -> !existingIds.contains(field.getProcessResourceId()))
.toList();
for (ProdBaseProcessResource dataField : filteredIds) {
processResourceMapper.deleteById(dataField.getProcessResourceId());
MPJLambdaWrapper<ProdBaseProcessResource> lqwRecord = JoinWrappers.lambda(ProdBaseProcessResource.class);
lqwRecord.eq(ProdBaseProcessResource::getProcessId, bo.getProcessId());
List<ProdBaseProcessResource> dataFieldList = processResourceMapper.selectList(lqwRecord);
if (!processResourceList.isEmpty()) {
for (ProdBaseProcessResource dataField : processResourceList) {
processResourceMapper.insertOrUpdate(dataField);
}
Set<Long> existingIds = processResourceList.stream()
.map(ProdBaseProcessResource::getProcessResourceId)
.collect(Collectors.toSet());
List<ProdBaseProcessResource> filteredIds = dataFieldList.stream()
.filter(field -> !existingIds.contains(field.getProcessResourceId()))
.toList();
for (ProdBaseProcessResource dataField : filteredIds) {
processResourceMapper.deleteById(dataField.getProcessResourceId());
}
}
}
return baseMapper.updateById(update) > 0;
@ -329,5 +323,75 @@ public class ProdBaseProcessInfoServiceImpl implements IProdBaseProcessInfoServi
}
}
/**
* 线
*
* @param bo
*/
private void updateProdBaseProcessProdline(ProdBaseProcessInfoBo bo) {
List<ProdBaseProcessProdLineBo> prodlineBoList = bo.getProdBaseProcessProdlineBoList();
Long processId = bo.getProcessId();
ProdBaseProcessProdLineBo queryBo = new ProdBaseProcessProdLineBo();
queryBo.setProcessId(processId);
List<ProdBaseProcessProdLineVo> dbProdlineList = prodBaseProcessProdlineService.queryList(queryBo);
Set<String> dbKeys = dbProdlineList.stream()
.map(db -> processId + "_" + db.getProdLineId())
.collect(Collectors.toSet());
if (prodlineBoList != null && !prodlineBoList.isEmpty()) {
// 构建前端传入记录的键集合
Set<String> newKeys = new HashSet<>();
List<ProdBaseProcessProdLine> toInsertList = new ArrayList<>();
// 获取当前用户信息用于设置创建信息
String tenantId = LoginHelper.getTenantId();
Long deptId = LoginHelper.getDeptId();
Long userId = LoginHelper.getUserId();
Date now = DateUtils.getNowDate();
for (ProdBaseProcessProdLineBo prodlineBo : prodlineBoList) {
prodlineBo.setProcessId(processId);
String key = processId + "_" + prodlineBo.getProdLineId();
newKeys.add(key);
// 如果数据库中不存在该组合,则新增
if (!dbKeys.contains(key)) {
ProdBaseProcessProdLine prodline = MapstructUtils.convert(prodlineBo, ProdBaseProcessProdLine.class);
prodline.setCreateBy(userId);
prodline.setCreateTime(now);
prodline.setCreateDept(deptId);
prodline.setTenantId(tenantId);
toInsertList.add(prodline);
}
}
// 批量插入新增的记录
if (!toInsertList.isEmpty()) {
try {
prodBaseProcessProdlineMapper.insertBatch(toInsertList);
} catch (Exception e) {
throw new ServiceException("该工序已关联产线!");
}
}
// 找出需要删除的记录(在数据库中但不在新列表中的)
List<ProdBaseProcessProdLineVo> toDeleteList = dbProdlineList.stream()
.filter(db -> !newKeys.contains(processId + "_" + db.getProdLineId()))
.toList();
// 删除不再需要的记录
for (ProdBaseProcessProdLineVo toDelete : toDeleteList) {
MPJLambdaWrapper<ProdBaseProcessProdLine> deleteWrapper = JoinWrappers.lambda(ProdBaseProcessProdLine.class);
deleteWrapper.eq(ProdBaseProcessProdLine::getProcessId, processId)
.eq(ProdBaseProcessProdLine::getProdLineId, toDelete.getProdLineId());
prodBaseProcessProdlineMapper.delete(deleteWrapper);
}
} else if (dbProdlineList != null && !dbProdlineList.isEmpty()) {
// 如果前端传空,全部删除
baseMapper.deleteProdBaseProcessProdlineByProcessId(processId);
}
}
}

@ -146,40 +146,42 @@ public class ProdBaseRouteServiceImpl implements IProdBaseRouteService {
public Boolean updateByBo(ProdBaseRouteBo bo) {
ProdBaseRoute update = MapstructUtils.convert(bo, ProdBaseRoute.class);
int updateResult = routeMapper.updateById(update);
Long routeId = bo.getRouteId();
routeMapper.deleteProdBaseRouteProcessByRouteId(routeId);
insertProdBaseRouteProcess(bo);
validEntityBeforeSave(update);
if (!bo.getRouteProcessList().isEmpty()) {
updateProdBaseRouteProcess(bo);
}
// 更新工艺路线关联物料
List<ProdBaseRouteMaterial> materialList = bo.getProdBaseRouteMaterialList();
MPJLambdaWrapper<ProdBaseRouteMaterial> lqwMaterial = JoinWrappers.lambda(ProdBaseRouteMaterial.class);
lqwMaterial.eq(ProdBaseRouteMaterial::getRouteId, bo.getRouteId());
List<ProdBaseRouteMaterial> dbMaterialList = routeMaterialMapper.selectList(lqwMaterial);
if (materialList != null && !materialList.isEmpty()) {
for (ProdBaseRouteMaterial material : materialList) {
material.setRouteId(bo.getRouteId());
if (material.getRouteMaterialId() == null) {
routeMaterialMapper.insert(material);
} else {
routeMaterialMapper.updateById(material);
if (!materialList.isEmpty()) {
MPJLambdaWrapper<ProdBaseRouteMaterial> lqwMaterial = JoinWrappers.lambda(ProdBaseRouteMaterial.class);
lqwMaterial.eq(ProdBaseRouteMaterial::getRouteId, bo.getRouteId());
List<ProdBaseRouteMaterial> dbMaterialList = routeMaterialMapper.selectList(lqwMaterial);
if (materialList != null && !materialList.isEmpty()) {
for (ProdBaseRouteMaterial material : materialList) {
material.setRouteId(bo.getRouteId());
if (material.getRouteMaterialId() == null) {
routeMaterialMapper.insert(material);
} else {
routeMaterialMapper.updateById(material);
}
}
Set<Long> existingIds = materialList.stream()
.filter(m -> m.getRouteMaterialId() != null)
.map(ProdBaseRouteMaterial::getRouteMaterialId)
.collect(Collectors.toSet());
List<ProdBaseRouteMaterial> filteredIds = dbMaterialList.stream()
.filter(field -> !existingIds.contains(field.getRouteMaterialId()))
.toList();
for (ProdBaseRouteMaterial material : filteredIds) {
routeMaterialMapper.deleteById(material.getRouteMaterialId());
}
} else if (dbMaterialList != null && !dbMaterialList.isEmpty()) {
// 如果前端传空,全部删除
for (ProdBaseRouteMaterial material : dbMaterialList) {
routeMaterialMapper.deleteById(material.getRouteMaterialId());
}
}
Set<Long> existingIds = materialList.stream()
.filter(m -> m.getRouteMaterialId() != null)
.map(ProdBaseRouteMaterial::getRouteMaterialId)
.collect(Collectors.toSet());
List<ProdBaseRouteMaterial> filteredIds = dbMaterialList.stream()
.filter(field -> !existingIds.contains(field.getRouteMaterialId()))
.toList();
for (ProdBaseRouteMaterial material : filteredIds) {
routeMaterialMapper.deleteById(material.getRouteMaterialId());
}
} else if (dbMaterialList != null && !dbMaterialList.isEmpty()) {
// 如果前端传空,全部删除
for (ProdBaseRouteMaterial material : dbMaterialList) {
routeMaterialMapper.deleteById(material.getRouteMaterialId());
}
}
validEntityBeforeSave(update);
return updateResult > 0;
}
@ -237,6 +239,50 @@ public class ProdBaseRouteServiceImpl implements IProdBaseRouteService {
}
}
/**
*
*
* @param bo 线
*/
private void updateProdBaseRouteProcess(ProdBaseRouteBo bo) {
List<ProdBaseRouteProcessBo> processList = bo.getRouteProcessList();
Long routeId = bo.getRouteId();
ProdBaseRouteProcessBo queryBo = new ProdBaseRouteProcessBo();
queryBo.setRouteId(routeId);
List<ProdBaseRouteProcessVo> dbProcessList = routeProcessService.queryList(queryBo);
if (processList != null && !processList.isEmpty()) {
for (ProdBaseRouteProcessBo process : processList) {
process.setRouteId(routeId);
if (process.getRouteProcessId() == null) {
routeProcessService.insertByBo(process);
} else {
routeProcessService.updateByBo(process);
}
}
// 收集前端传入的已有工艺步骤ID集合
Set<Long> existingIds = processList.stream()
.filter(p -> p.getRouteProcessId() != null)
.map(ProdBaseRouteProcessBo::getRouteProcessId)
.collect(Collectors.toSet());
// 找出需要删除的工艺步骤
List<ProdBaseRouteProcessVo> toDeleteList = dbProcessList.stream()
.filter(dbProcess -> !existingIds.contains(dbProcess.getRouteProcessId()))
.toList();
// 批量删除不再需要的工艺步骤
if (!toDeleteList.isEmpty()) {
List<Long> deleteIds = toDeleteList.stream()
.map(ProdBaseRouteProcessVo::getRouteProcessId)
.toList();
routeProcessService.deleteWithValidByIds(deleteIds, false);
}
} else if (dbProcessList != null && !dbProcessList.isEmpty()) {
List<Long> deleteIds = dbProcessList.stream()
.map(ProdBaseRouteProcessVo::getRouteProcessId)
.toList();
routeProcessService.deleteWithValidByIds(deleteIds, false);
}
}
/**
* 线ID
*

Loading…
Cancel
Save