This commit is contained in:
lym
2025-02-14 15:16:03 +08:00
47 changed files with 1516 additions and 377 deletions
@@ -111,6 +111,7 @@ public class OrderController {
public static final String ORDER_PLATE_MODEL = "imes_order_plate_model";
public static final String ORDER_PLATE_MODEL_COMPRESS = "imes_order_plate_model_compress";
public static final String ORDER_PARTS_REMARK_MODEL = "imes_order_parts_remark_model";
@PutMapping("/update")
@Operation(summary = "更新生产单")
@PreAuthorize("@ss.hasPermission('production:manager-list:edit')")
@@ -231,6 +232,7 @@ public class OrderController {
if (orderDO == null) {
orderInputProcessor.deleteByOrderId(orderId, ORDER_PLATE_MODEL);
orderInputProcessor.deleteByOrderId(orderId, ORDER_PLATE_MODEL_COMPRESS);
orderInputProcessor.deleteByOrderId(orderId, ORDER_PARTS_REMARK_MODEL);
}
Throwable cause = e.getCause();
@@ -380,6 +382,7 @@ public class OrderController {
Long deleteOrderId = orderDO.getId();
orderInputProcessor.deleteByOrderId(deleteOrderId, ORDER_PLATE_MODEL);
orderInputProcessor.deleteByOrderId(deleteOrderId, ORDER_PLATE_MODEL_COMPRESS);
orderInputProcessor.deleteByOrderId(deleteOrderId, ORDER_PARTS_REMARK_MODEL);
}
} finally {
@@ -174,7 +174,7 @@ public interface PlateMapper extends BaseMapperX<PlateDO> {
List<PlateDetailRespVO> selectPlateListByGoodsIds(@Param("orderIds") List<Long> orderIds,@Param("goodsIdList") List<Long> goodsIdList, @Param("organId") Long organId);
List<PlateDetailRespVO> selectPlateListByGoodsIds(@Param("orderIds") List<Long> orderIds, @Param("organId") Long organId);
List<PlateDetailRespVO> selectNoPlanPlate(@Param("orderIds") List<Long> orderIds, @Param("ids") List<Long> ids, @Param("organId") Long organId);
@@ -166,15 +166,17 @@ public class OrderNoGenerateRuleServiceImpl implements CustomPlateNoGenerateRule
private int resetByYear(int curr, CustomPlateNoSeqDTO orgCustomPlateNoSeqRespDTO, CustomPlateNoRuleVO plateNoRule) {
// 上一次的年
Integer lastYear = orgCustomPlateNoSeqRespDTO.getLastYear();
// 初始值
Integer initValue = plateNoRule.getInitValue();
String nowYearFormat = plateNoRule.getNow().format(YEAR_FORMATTER);
if (ObjectUtil.notEqual(String.valueOf(lastYear), nowYearFormat)) {
int nowDayNum = Integer.parseInt(nowYearFormat);
// 跨年,把上一次的年设成当前年,后续不再跨年
orgCustomPlateNoSeqRespDTO.setLastYear(nowDayNum);
// 复位
return nowDayNum;
return initValue;
}
return curr;
return curr + plateNoRule.getIncrementStep();
}
/**
@@ -188,15 +190,17 @@ public class OrderNoGenerateRuleServiceImpl implements CustomPlateNoGenerateRule
private int resetByMonth(int curr, CustomPlateNoSeqDTO orgCustomPlateNoSeqRespDTO, CustomPlateNoRuleVO plateNoRule) {
// 上一次的月
Integer lastMonth = orgCustomPlateNoSeqRespDTO.getLastMonth();
// 初始值
Integer initValue = plateNoRule.getInitValue();
String nowMonthFormat = plateNoRule.getNow().format(MONTH_FORMATTER);
if (ObjectUtil.notEqual(String.valueOf(lastMonth), nowMonthFormat)) {
int nowDayNum = Integer.parseInt(nowMonthFormat);
// 跨月,把上一次的月设成当前月,后续不再跨月
orgCustomPlateNoSeqRespDTO.setLastMonth(nowDayNum);
// 复位
return nowDayNum;
return initValue;
}
return curr;
return curr + plateNoRule.getIncrementStep();
}
/**
@@ -210,14 +214,16 @@ public class OrderNoGenerateRuleServiceImpl implements CustomPlateNoGenerateRule
private int resetByDay(int curr, CustomPlateNoSeqDTO orgCustomPlateNoSeqRespDTO, CustomPlateNoRuleVO plateNoRule) {
// 上一次的天
Integer lastDay = orgCustomPlateNoSeqRespDTO.getLastDay();
// 初始值
Integer initValue = plateNoRule.getInitValue();
String nowDayFormat = plateNoRule.getNow().format(DAY_FORMATTER);
if (ObjectUtil.notEqual(String.valueOf(lastDay), nowDayFormat)) {
int nowDayNum = Integer.parseInt(nowDayFormat);
// 跨月,把上一次的月设成当前月,后续不再跨月
orgCustomPlateNoSeqRespDTO.setLastDay(nowDayNum);
// 复位
return nowDayNum;
return initValue;
}
return curr;
return curr + plateNoRule.getIncrementStep();
}
}
@@ -492,9 +492,9 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
List<GoodsReqVO> goodsDOS = goodsMapper.selectGoodsList(orderId,getUserOrganId());
List<Long> goodsIds = goodsDOS.stream().map(GoodsReqVO::getId).distinct().toList();
AssertUtils.notEmpty(goodsDOS,THIS_ORDER_NOT_PLATE_DATA);
List<PlateDetailRespVO> plateDOS = plateMapper.selectPlateListByGoodsIds(Collections.singletonList(orderId),goodsIds,getUserOrganId());
List<PlateDetailRespVO> plateDOS = plateMapper.selectPlateListByGoodsIds(Collections.singletonList(orderId),getUserOrganId());
AssertUtils.notEmpty(plateDOS,ORDER_PLATE_ERROR);
@@ -673,7 +673,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
List<OptimizeBoardModelDO> optimizeBoardModelDOS = esUtils.getEsDocument(FIELD_PLAN_CONFIG_ID,FIELD_PLAN_ID,req.getPlanConfigId(), planId, ORDER_OPTIMIZE_PLATE_MODEL, OptimizeBoardModelDO.class);
List<Boolean> isLocks = new ArrayList<>();
// List<Boolean> isLocks = new ArrayList<>();
// 查询原优化信息然后进行判断
if(CollUtil.isNotEmpty(optimizeBoardModelDOS)){
@@ -682,7 +682,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
throw exception(THIS_PLAN_OPTIMIZE_DATA_ERROR);
}
isLocks.addAll(optimizeBoardModelDOS.stream().map(OptimizeBoardModelDO::getIsLock).distinct().toList());
// isLocks.addAll(optimizeBoardModelDOS.stream().map(OptimizeBoardModelDO::getIsLock).distinct().toList());
OptimizeBoardModelDO optimizeBoardModelDO = optimizeBoardModelDOS.get(0);
@@ -702,27 +702,25 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
List<PlateDO> plateDOS = planItemMapper.selectOrderPlanPlateListByPlanId(planId,getUserOrganId());
AssertUtils.notEmpty(plateDOS,THIS_PLAN_PLATE_DATA_ERROR);
if(CollUtil.isNotEmpty(plateDOS)) {
plateDOS.forEach(f -> {
f.setIsOptimized(true);
});
if(processId != null && !planDO.getProcessId().equals(processId)) {
validatePlanStatus(planDO,isLocks);
planMapper.updateById(planDO.setProcessId(processId));
plateMapper.updateBatch(plateDOS);
}
// 这个逻辑暂时先不用,等后面方案组逻辑完善后可加入
// if(processId != null && !planDO.getProcessId().equals(processId)) {
//
// validatePlanStatus(planDO,isLocks);
//
// planMapper.updateById(planDO.setProcessId(processId));
//
// }
plateDOS.forEach(f->{
f.setIsOptimized(true);
});
plateMapper.updateBatch(plateDOS);
// Long planConfigId = req.getPlanConfigId();
// esUtils.deleteEsDocument(FIELD_PLAN_CONFIG_ID,FIELD_PLAN_ID,planConfigId,planId,ORDER_OPTIMIZE_PLATE_MODEL);
esUtils.deleteEsDocument(FIELD_PLAN_ID,FIELD_PLAN_CONFIG_ID,planId,req.getPlanConfigId(),ORDER_OPTIMIZE_PLATE_MODEL);
// 保存优化后的大板数据
esUtils.saveEsDocument(ORDER_OPTIMIZE_PLATE_MODEL,req.getOptimizeBoardModelDOS());
@@ -743,66 +741,106 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
List<SaveProcessSchemeModelDO> modelDOList = saveProcessSchemeReqVO.getModelDOList();
Long planId = modelDOList.stream().map(SaveProcessSchemeModelDO::getPlanId).distinct().toList().get(0);
List<SaveProcessSchemeModelDO> schemeModelDOS = new ArrayList<>(modelDOList.stream().filter(Objects::nonNull).toList());
SaveProcessSchemeModelDO saveProcessSchemeModelDO = Optional.ofNullable(schemeModelDOS.get(0)).orElseThrow(() -> new ServiceException(THIS_PLAN_SCHEME_DATA_ERROR));
Long planId = Optional.ofNullable(saveProcessSchemeModelDO.getPlanId()).orElseThrow(() -> new ServiceException(THIS_PLAN_SCHEME_DATA_ERROR));
PlanDO planDO = planMapper.selectById(planId);
AssertUtils.notEmpty(planDO,PLAN_NOT_EXISTS);
List<Long> planConfigIds = modelDOList.stream().map(SaveProcessSchemeModelDO::getPlanConfigId).distinct().toList();
List<Long> planConfigIds = schemeModelDOS.stream().map(SaveProcessSchemeModelDO::getPlanConfigId).distinct().toList();
List<PlateDO> plateDOS = planItemMapper.selectOrderPlanPlateListByPlanId(planId,getUserOrganId());
AssertUtils.notEmpty(plateDOS,THIS_PLAN_PLATE_DATA_ERROR);
plateDOS.forEach(f->{
f.setIsOptimized(true);
});
plateMapper.updateBatch(plateDOS);
// 不能加非空判断,因为方案组里可能没有优化信息
List<OptimizeBoardModelDO> optimizeBoardModelDOS = esUtils.getEsDocument(FIELD_PLAN_ID, planId, ORDER_OPTIMIZE_PLATE_MODEL, OptimizeBoardModelDO.class);
List<Boolean> isLocks = new ArrayList<>();
if(CollUtil.isNotEmpty(optimizeBoardModelDOS)){
optimizeBoardModelDOS.forEach(f->{
isLocks.add(Optional.ofNullable(f.getIsLock()).orElse(false));
modelDOList.add(SaveProcessSchemeModelDO.builder()
.planConfigId(f.getPlanConfigId())
.planName(f.getPlanConfigName())
.plateNum(f.getPlaceBlockNumber())
.goodsNum(f.getBoardCount())
.isOptimized(true)
.build());
if(CollUtil.isNotEmpty(plateDOS)) {
plateDOS.forEach(f -> {
f.setIsOptimized(true);
});
plateMapper.updateBatch(plateDOS);
}
// 如果方案组ID不相等,就删除旧的方案组信息,再保存新的加工方案组ID
if(!planDO.getProcessId().equals(processId)){
validatePlanStatus(planDO,isLocks);
// validatePlanStatus(planDO,isLocks);
if(planDO.getStatus().equals(PlanStatusEnum.OPENING.getStatus()) || planDO.getStatus().equals(PlanStatusEnum.OPENED.getStatus())){
throw exception(THIS_PLAN_PLATE_IS_CUT);
}
// todo 是否全部执行的判断,需要等前端完善加工方案那边的逻辑后,再判断
// Integer processSize = systemConfigApi.getProcessSizeByIds(Collections.singletonList(planDO.getProcessId())).getCheckedData();
//
// List<SaveProcessSchemeModelDO> processSchemeModelDOS = esUtils.getEsDocument(FIELD_PLAN_ID, planId, processSize, PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL, SaveProcessSchemeModelDO.class);
//
// if(CollUtil.isNotEmpty(processSchemeModelDOS) && processSize == processSchemeModelDOS.size()){
// throw exception(THIS_PLAN_SCHEME_OPTIMIZE_SIZE_ERROR);
// }
planMapper.updateById(planDO.setProcessId(processId));
// 修改方案组,删除全部的方案组的优化信息
esUtils.deleteEsDocument(FIELD_PLAN_ID,planId,PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL);
// 删除全部的生产优化信息
esUtils.deleteEsDocument(FIELD_PLAN_ID,planId,ORDER_OPTIMIZE_PLATE_MODEL);
// 保存此时的方案组的优化信息
esUtils.saveEsDocument(PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL,schemeModelDOS);
return;
}
esUtils.deleteEsDocument(FIELD_PLAN_ID,FIELD_PLAN_CONFIG_ID,planId,planConfigIds,PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL);
esUtils.saveEsDocument(PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL,modelDOList);
esUtils.saveEsDocument(PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL,schemeModelDOS);
}
// // 不能加非空判断,因为方案组里可能没有优化信息
// List<OptimizeBoardModelDO> optimizeBoardModelDOS = esUtils.getEsDocument(FIELD_PLAN_ID, planId, ORDER_OPTIMIZE_PLATE_MODEL, OptimizeBoardModelDO.class);
//
//// List<Boolean> isLocks = new ArrayList<>();
//
// if(CollUtil.isNotEmpty(optimizeBoardModelDOS)){
//
// optimizeBoardModelDOS.forEach(f->{
//
//// isLocks.add(Optional.ofNullable(f.getIsLock()).orElse(false));
//
// schemeModelDOS.add(SaveProcessSchemeModelDO.builder()
// .planConfigId(f.getPlanConfigId())
// .planName(f.getPlanConfigName())
// .plateNum(f.getPlaceBlockNumber())
// .goodsNum(f.getBoardCount())
// .isOptimized(true)
// .build());
//
// });
//
// }
@Override
public PlanProcessSchemeList getProcessSchemeConfig(Long processId,Long planId) {
@@ -816,55 +854,82 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
validatePlanExists(planId);
// 查询排单对应的方案组信息
List<SaveProcessSchemeModelDO> saveProcessSchemeReqVOS = Optional.ofNullable(esUtils.getEsDocument(FIELD_PLAN_ID, planId, PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL, SaveProcessSchemeModelDO.class)).orElse(new ArrayList<>());
// List<SaveProcessSchemeModelDO> saveProcessSchemeReqVOS = Optional.ofNullable(esUtils.getEsDocument(FIELD_PLAN_ID, planId, PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL, SaveProcessSchemeModelDO.class)).orElse(new ArrayList<>());
List<SaveProcessSchemeModelDO> saveProcessSchemeReqVOS = esUtils.getEsDocument(FIELD_PLAN_ID, planId, PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL, SaveProcessSchemeModelDO.class);
// 查询排单对应的优化信息
List<OptimizeBoardModelDO> optimizeBoardModelDOS = esUtils.getEsDocument(FIELD_PLAN_ID, planId, schemeDTOList.size(), ORDER_OPTIMIZE_PLATE_MODEL, OptimizeBoardModelDO.class);
if(CollUtil.isNotEmpty(saveProcessSchemeReqVOS)){
// 查询排单对应的优化信息
List<OptimizeBoardModelDO> optimizeBoardModelDOS = esUtils.getEsDocument(FIELD_PLAN_ID, planId, schemeDTOList.size(), ORDER_OPTIMIZE_PLATE_MODEL, OptimizeBoardModelDO.class);
if (CollUtil.isNotEmpty(optimizeBoardModelDOS)) {
if (CollUtil.isNotEmpty(saveProcessSchemeReqVOS)) {
if(CollUtil.isNotEmpty(optimizeBoardModelDOS)){
saveProcessSchemeReqVOS.forEach(f -> {
List<OptimizeBoardModelDO> modelDOList = optimizeBoardModelDOS.stream().filter(o -> o.getPlanConfigId().equals(f.getPlanConfigId())).toList();
if (CollUtil.isNotEmpty(modelDOList)) {
String jsonString = toJsonString(modelDOList.get(0));
OptimizeBoardModelDO optimizeBoardModelDO = modelDOList.get(0);
String jsonString = toJsonString(optimizeBoardModelDO);
f.setPlanOptimize(jsonString);
f.setGoodsNum(optimizeBoardModelDO.getBoardCount());
}
});
} else {
optimizeBoardModelDOS.forEach(f -> {
saveProcessSchemeReqVOS.add(SaveProcessSchemeModelDO.builder()
.planConfigId(f.getPlanConfigId())
.planName(f.getPlanConfigName())
.planId(f.getPlanId())
.plateNum(f.getPlaceBlockNumber())
.goodsNum(f.getBoardCount())
.planOptimize(toJsonString(f))
.build());
});
}
}
planProcessSchemeList.setSaveProcessSchemeReqVOS(saveProcessSchemeReqVOS);
return planProcessSchemeList;
}
//
// // 查询排单对应的优化信息
// List<OptimizeBoardModelDO> optimizeBoardModelDOS = esUtils.getEsDocument(FIELD_PLAN_ID, planId, schemeDTOList.size(), ORDER_OPTIMIZE_PLATE_MODEL, OptimizeBoardModelDO.class);
//
//
// if (CollUtil.isNotEmpty(optimizeBoardModelDOS)) {
//
//
// if (CollUtil.isNotEmpty(saveProcessSchemeReqVOS)) {
//
// saveProcessSchemeReqVOS.forEach(f -> {
//
// List<OptimizeBoardModelDO> modelDOList = optimizeBoardModelDOS.stream().filter(o -> o.getPlanConfigId().equals(f.getPlanConfigId())).toList();
// if (CollUtil.isNotEmpty(modelDOList)) {
//
// String jsonString = toJsonString(modelDOList.get(0));
//
// f.setPlanOptimize(jsonString);
// }
// });
// } else {
// optimizeBoardModelDOS.forEach(f -> {
//
// saveProcessSchemeReqVOS.add(SaveProcessSchemeModelDO.builder()
// .planConfigId(f.getPlanConfigId())
// .planName(f.getPlanConfigName())
// .planId(f.getPlanId())
// .plateNum(f.getPlaceBlockNumber())
// .goodsNum(f.getBoardCount())
// .planOptimize(toJsonString(f))
// .build());
//
// });
// }
// }
@Override
@@ -449,7 +449,7 @@ public class OrderServiceImpl implements OrderService {
// 配件信息
List<PartsDO> partsDOS = getPartsGoods(partsDO);
customPlateNoGenerateService.generateCustomPlateNo(order, plateDO, false);
customPlateNoGenerateService.generateCustomPlateNo(order, plateDO, true);
orderMapper.insert(order);
orderInputProcessor.batchInsert(rawGoodsDO, bodyDO, groupDO, partsDO, plateDO, itemDO, goodsDO, plateGoodDOS, partsDOS);
List<OrderModelDO> orderModelDOs = BeanUtils.toBean(plateDetail, OrderModelDO.class);
@@ -1252,7 +1252,7 @@ public class OrderServiceImpl implements OrderService {
String orderPlateModeList = toJsonString(BeanUtils.toBean(orderModelDOs, OrderPlateList.class));
orderModelCompressDO.setOrderModelZip(zipString(orderPlateModeList));
// 板材造型数据添加 大板分类ID,实际ID,优化信息(默认为 false
// 板材造型数据添加 大板分类ID,实际ID
List<OrderGoodsPlateIds> orderGoodsPlateIds = BeanUtils.toBean(plateDO, OrderGoodsPlateIds.class);
List<GoodsDO> finalGoodsDO = goodsDO;
orderGoodsPlateIds.forEach(f->
@@ -1261,7 +1261,7 @@ public class OrderServiceImpl implements OrderService {
orderModelDOs.forEach(f->{
f.setGoodsId(orderGoodsPlateIds.stream().filter(fo->fo.getId().equals(f.getPlateId())).map(OrderGoodsPlateIds::getActualGoodsId).toList().get(0));
f.setPlateGoodsId(orderGoodsPlateIds.stream().filter(fo->fo.getId().equals(f.getPlateId())).map(OrderGoodsPlateIds::getGoodsId).toList().get(0));
// f.setIsOptimized(false);
});
}
@@ -386,6 +386,7 @@ public class PlanServiceImpl implements PlanService {
if(CollUtil.isEmpty(orderIds)){
planMapper.deleteBatchIds(planDOS);
return;
}
@@ -540,7 +541,7 @@ public class PlanServiceImpl implements PlanService {
// 根据排单ID查询ES中的优化数据
List<OptimizeBoardModelDO> optimizeBoardModelDOS = esUtils.getEsDocument(FIELD_PLANID, planIds, planIds.size(), ORDER_REMAIN_PLATE_MODEL, OptimizeBoardModelDO.class);
List<OptimizeBoardModelDO> optimizeBoardModelDOS = esUtils.getEsDocument(FIELD_PLANID, planIds, 999, ORDER_REMAIN_PLATE_MODEL, OptimizeBoardModelDO.class);
// 获取排单对应的生产单的信息
@@ -394,6 +394,7 @@
where opi.organ_id = #{organId}
and opi.plan_id = #{planId}
and op.is_optimized = false
</select>
@@ -445,11 +445,6 @@
#{orderIds}
</foreach>
and op.goods_id in
<foreach collection="goodsIdList" item="goodsIdList" open="(" close=")" separator=",">
#{goodsIdList}
</foreach>
</select>