系统配置-方案组字段校验,修改开料状态逻辑更改

This commit is contained in:
liuzhaotian
2025-01-13 17:58:16 +08:00
parent 12b6de75fd
commit 765b0c3a47
11 changed files with 299 additions and 152 deletions
@@ -56,6 +56,14 @@ public class PlateDetailRespVO {
private String name;
@Schema(description = "板颜色", requiredMode = Schema.RequiredMode.REQUIRED)
private String color;
@Schema(description = "板材质", requiredMode = Schema.RequiredMode.REQUIRED)
private String material;
@Schema(description = "板长", requiredMode = Schema.RequiredMode.REQUIRED)
private Double height;
@@ -180,10 +188,6 @@ public class PlateDetailRespVO {
private Integer type;
// @Schema(description = "加工组ID", requiredMode = Schema.RequiredMode.REQUIRED)
// private String processGroupId;
@Schema(description = "加工组名称", requiredMode = Schema.RequiredMode.REQUIRED)
private String processGroupName;
@@ -201,9 +205,5 @@ public class PlateDetailRespVO {
@Schema(description = "加工组名称", requiredMode = Schema.RequiredMode.REQUIRED)
private List<ProcessGroupList> processGroupLists;
// @Schema(description = "生产单明细ID", requiredMode = Schema.RequiredMode.REQUIRED)
// private Long itemId;
}
@@ -61,6 +61,10 @@ public class OptimizeBoardModelDO extends ESDocument {
private Long cutedBoardNumber;
@Schema(description = "已开料的小板数量")
private Long cutedBlockNumber;
// 新的数据集需要去除
@Schema(description = "排单优化的大板数量")
private Long placeBoardNumber;
@@ -266,4 +266,28 @@ public interface PlateMapper extends BaseMapperX<PlateDO> {
}
default List<PlateDO> selectIsOptimizedPlate(List<Long> orderId,List<Long> ids, Long organId) {
return selectList(new LambdaQueryWrapperX<PlateDO>()
.eq(PlateDO::getOrganId,organId)
.eq(PlateDO::getDeleted,false)
.inIfPresent(PlateDO::getOrderId,orderId)
.inIfPresent(PlateDO::getGoodsId,ids)
.eq(PlateDO::getIsOptimized,true)
.select(PlateDO::getId,PlateDO::getId));
}
default List<PlateDO> selectPlateIsCuttingStatus(List<Long> orderIds,Long organId) {
return selectList(new LambdaQueryWrapperX<PlateDO>()
.eq(PlateDO::getOrganId,organId)
.in(PlateDO::getOrderId,orderIds)
.eq(PlateDO::getDeleted,false)
.in(PlateDO::getIsCutted, Arrays.asList(OrderPlateCutStatusEnum.OPENED.getStatus(),OrderPlateCutStatusEnum.OPENING.getStatus()))
.select(PlateDO::getId,PlateDO::getOrderId));
}
}
@@ -400,17 +400,17 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
Long planId = respVO.getPlanId();
List<String> goodsIds = respVO.getGoodsId();
List<Integer> goodsNo = respVO.getGoodsNo();
Integer cutedType = respVO.getCutedType();
if(goodsIds.isEmpty()){
return;
}
Date date = new Date();
PlanDO planDO = validatePlanExists(planId);
List<Long> orderIds = JSON.parseArray(planDO.getOrderNos()).toJavaList(Long.class).stream().distinct().toList();
List<Long> orderIds = new ArrayList<>(JSON.parseArray(planDO.getOrderNos()).toJavaList(Long.class).stream().distinct().toList());
List<OptimizeBoardModelDO> optimizeBoardModelDOS = esUtils.getEsDocument(FIELD_PLAN_CONFIG_ID,FIELD_PLAN_ID,respVO.getPlanConfigId(), planId, ORDER_OPTIMIZE_PLATE_MODEL, OptimizeBoardModelDO.class);
@@ -421,161 +421,92 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
String remainBoardInfo = optimizeBoardModelDO.getRemainBoardInfo();
Integer boardCount = optimizeBoardModelDO.getBoardCount();
List<RemainBoardInfo> remainBoardInfos = parseArray(remainBoardInfo, RemainBoardInfo.class);
List<String> planNo = new ArrayList<>();
remainBoardInfos.forEach(f->{
Long goodsNum = updatePlanOptimizeData(remainBoardInfos, optimizeBoardModelDO, orderIds, goodsIds, goodsNo, cutedType);
if(goodsIds.contains(f.getGoodsId())){
f.getPlaceBoardList().forEach(p->{
if(OrderPlateCutStatusEnum.NOCUTTING.getStatus().equals(cutedType)){
if(goodsNo.contains(p.getBoardId())) {
p.setCutedType(respVO.getCutedType());
planNo.addAll(p.getBlocks().stream().map(RemainBoardInfo.Blocks::getBlockId).toList());
}
});
planDO.setStatus(PlanStatusEnum.OPENING.getStatus());
if(goodsNum.equals(0L)){
planDO.setStatus(PlanStatusEnum.PUTINTOPRODUCTION.getStatus());
}
});
planMapper.updateById(planDO);
// 更新开料相关的数据
HashMap<String, Object> objectObjectHashMap = new HashMap<>();
objectObjectHashMap.put("remainBoardInfo", toJsonString(remainBoardInfos));
objectObjectHashMap.put("updateTime",simpleDateFormat.format(date));
List<PlateDO> plateDOS = plateMapper.selectPlateIsCuttingStatus(orderIds, getUserOrganId());
List<Long> orderIdList = plateDOS.stream().map(PlateDO::getOrderId).distinct().toList();
try {
orderIds.removeAll(orderIdList);
esDocumentService.updateById(ORDER_OPTIMIZE_PLATE_MODEL, optimizeBoardModelDO.getId(), HashMap.class, objectObjectHashMap);
if(CollUtil.isNotEmpty(orderIds)){
List<OrderDO> orderDOS = orderMapper.selectBatchIds(orderIds);
orderDOS.forEach(f->f.setStatus(OrderStatusEnum.SORTED.getStatus()));
orderMapper.updateBatch(orderDOS);
}
return;
} catch (IOException e) {
log.error(e.getMessage());
throw new ServiceException(ES_DATA_ERROR);
}
List<PlateDO> plateDOS = plateMapper.selectPlateByPlateNo(orderIds, planNo, getUserOrganId());
plateDOS.forEach(f->{
f.setIsCutted(respVO.getCutedType());
});
plateMapper.updateBatch(plateDOS);
//
// List<PlateDO> plateDOS = getPlanGoodsPlateList(goodsNo,planDO,optimizeBoardModelDOS);
//
//
// List<Long> orderIds = new ArrayList<>(plateDOS.stream().map(PlateDO::getOrderId).distinct().toList());
//
//
// // 修改生产单的状态
// orderMapper.updateOrderListStatus(orderIds,OrderStatusEnum.IN_PRODUCTION.getStatus(),getUserOrganId());
//
//
// // 修改小板的开料状态
// plateDOS.forEach(f->f.setIsCutted(OrderPlateCutStatusEnum.NOCUTTING.getStatus()));
// plateMapper.updateBatch(plateDOS);
//
//
// OptimizeBoardModelDO optimizeBoardModelDO = optimizeBoardModelDOS.get(0);
//
//
// List<CutedBoardInfo> cutedBoardInfoList = Optional.ofNullable(optimizeBoardModelDO.getCutedBoardInfo()).orElse(new ArrayList<>());
//
// List<CutedBoardInfo> cutedBoardInfos = cutedBoardInfoList.stream().filter(f -> f.getGoodsId().equals(goodsId)).toList();
//
// AssertUtils.notEmpty(cutedBoardInfos,ORDER_PLAN_OPTIMIZE_ERROR);
//
// CutedBoardInfo cutedBoardInfo = cutedBoardInfos.get(0);
//
//
// if(cutedBoardInfo.getCutedBoardNumber() != null) {
// // 已经开料的大板信息
// List<Long> cutedBoardList = cutedBoardInfo.getCutedBoardList();
// // 开料的大板数量
// long cutedBoardNumber = cutedBoardInfo.getCutedBoardNumber();
//
// // 移除取消开料的数据
// cutedBoardList.removeAll(goodsNo);
//
// // 减去取消开料的大板数量
// cutedBoardNumber -= goodsNo.size();
//
// if(CollUtil.isEmpty(cutedBoardList)){
// cutedBoardNumber = 0;
// }
//
// // 将需要更新的数据更新到原数据中
// cutedBoardInfo.setCutedBoardNumber(cutedBoardNumber);
// cutedBoardInfo.setCutedBoardList(cutedBoardList);
//
//
// // 更新开料相关的数据
// HashMap<String, Object> objectObjectHashMap = new HashMap<>();
// objectObjectHashMap.put("cutedBoardInfo", cutedBoardInfo);
// objectObjectHashMap.put("updateTime",simpleDateFormat.format(date));
//
// try {
//
// esDocumentService.updateById(ORDER_OPTIMIZE_PLATE_MODEL, optimizeBoardModelDO.getId(), HashMap.class, objectObjectHashMap);
//
// } catch (IOException e) {
// log.error(e.getMessage());
// throw new ServiceException(ES_DATA_ERROR);
// }
//
// if(cutedBoardInfo.getCutedBoardNumber() == 0){
//
// planMapper.updatePlanStatus(planId,PlanStatusEnum.NOCUTTING.getStatus(),getUserOrganId());
//
// }else {
//
// planMapper.updatePlanStatus(planId,PlanStatusEnum.OPENING.getStatus(), getUserOrganId());
//
// }
//
//
// List<OrderDO> orderDOS = orderMapper.selectBatchIds(orderIds);
//
// orderDOS.forEach(f->f.setFinishTime(null));
//
//
// List<PlateDO> plateDOList = plateMapper.selectIsCutPlateByPlateId(orderIds, getUserOrganId());
//
// List<Long> orderIdList = plateDOList.stream().map(PlateDO::getOrderId).distinct().toList();
//
// orderIds.removeAll(orderIdList);
//
//
//
// if(CollUtil.isNotEmpty(orderIds)) {
//
// List<OrderDO> orderDOList = orderDOS.stream().filter(f -> orderIds.contains(f.getId())).toList();
//
// orderDOList.forEach(f -> f.setStatus(OrderStatusEnum.SORTED.getStatus()));
// }
//
// if(CollUtil.isNotEmpty(orderIdList)) {
//
// List<OrderDO> orderDOList1 = orderDOS.stream().filter(f -> orderIdList.contains(f.getId())).toList();
//
// orderDOList1.forEach(f -> f.setStatus(OrderStatusEnum.IN_PRODUCTION.getStatus()));
// }
//
//
// }
if(OrderPlateCutStatusEnum.OPENING.getStatus().equals(cutedType)){
planDO.setStatus(PlanStatusEnum.OPENING.getStatus());
List<OrderDO> orderDOS = orderMapper.selectBatchIds(orderIds);
orderDOS.forEach(f->f.setStatus(OrderStatusEnum.IN_PRODUCTION.getStatus()));
planMapper.updateById(planDO);
orderMapper.updateBatch(orderDOS);
return;
}
if(OrderPlateCutStatusEnum.OPENED.getStatus().equals(cutedType)){
List<PlateDO> plateDOList = plateMapper.selectNoCutPlateByPlateId(orderIds, getUserOrganId());
List<Long> orderIdList = plateDOList.stream().map(PlateDO::getOrderId).distinct().toList();
orderIds.removeAll(orderIdList);
if(CollUtil.isNotEmpty(orderIds)){
// 查询生产单的打包状态是否为已打包
List<OrderDO> orderDOS = orderMapper.selectOrderPackList(orderIds, getUserOrganId());
if (CollUtil.isNotEmpty(orderDOS)) {
orderDOS.forEach(f -> {
f.setStatus(OrderStatusEnum.FINISH_PRODUCTION.getStatus());
f.setFinishTime(LocalDateTime.now());
});
orderMapper.updateBatch(orderDOS);
}
}
if(goodsNum.equals(Long.valueOf(boardCount))) {
planDO.setStatus(PlanStatusEnum.OPENED.getStatus());
planDO.setProduceTime(LocalDateTime.now());
planMapper.updateById(planDO);
}
}
}
// 计算工资金额
public List<ProcessStepSalaryIds> calculateSalary(List<Long> processStepId){
@@ -1508,4 +1439,104 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
}
private Long updatePlanOptimizeData(List<RemainBoardInfo> remainBoardInfos,
OptimizeBoardModelDO optimizeBoardModelDO,
List<Long> orderIds,
List<String> goodsIds,
List<Integer> goodsNo,
Integer cutedType){
Date date = new Date();
Long goodsNum = null;
List<String> planNo = new ArrayList<>();
remainBoardInfos.forEach(f->{
if(goodsIds.contains(f.getGoodsId())){
f.getPlaceBoardList().forEach(p->{
if(goodsNo.contains(p.getBoardId())) {
p.setCutedType(cutedType);
planNo.addAll(p.getBlocks().stream().map(RemainBoardInfo.Blocks::getBlockId).toList());
}
});
}
});
// 更新开料相关的数据
HashMap<String, Object> objectObjectHashMap = new HashMap<>();
if(OrderPlateCutStatusEnum.NOCUTTING.getStatus().equals(cutedType)){
Long cutedBoardNumber = Optional.ofNullable(optimizeBoardModelDO.getCutedBoardNumber()).orElseThrow(()-> new ServiceException(UPDATE_NO_PLAN_PLATE_DATA_ERROR));
Long cutedBlockNumber = Optional.ofNullable(optimizeBoardModelDO.getCutedBlockNumber()).orElseThrow(()-> new ServiceException(UPDATE_NO_PLAN_PLATE_DATA_ERROR));
cutedBoardNumber -= goodsNo.size();
cutedBlockNumber -= planNo.size();
goodsNum = cutedBoardNumber;
objectObjectHashMap.put("cutedBoardNumber", cutedBoardNumber);
objectObjectHashMap.put("cutedBlockNumber", cutedBlockNumber);
}
if(OrderPlateCutStatusEnum.OPENED.getStatus().equals(cutedType)){
long cutedBoardNumber = Optional.ofNullable(optimizeBoardModelDO.getCutedBoardNumber()).orElse(0L);
long cutedBlockNumber = Optional.ofNullable(optimizeBoardModelDO.getCutedBlockNumber()).orElse(0L);
cutedBoardNumber += goodsNo.size();
cutedBlockNumber += planNo.size();
goodsNum = cutedBoardNumber;
objectObjectHashMap.put("cutedBoardNumber", cutedBoardNumber);
objectObjectHashMap.put("cutedBlockNumber", cutedBlockNumber);
}
objectObjectHashMap.put("remainBoardInfo", toJsonString(remainBoardInfos));
objectObjectHashMap.put("updateTime",simpleDateFormat.format(date));
try {
esDocumentService.updateById(ORDER_OPTIMIZE_PLATE_MODEL, optimizeBoardModelDO.getId(), HashMap.class, objectObjectHashMap);
} catch (IOException e) {
log.error(e.getMessage());
throw new ServiceException(ES_DATA_ERROR);
}
List<PlateDO> plateDOS = plateMapper.selectPlateByPlateNo(orderIds, planNo, getUserOrganId());
plateDOS.forEach(f->{
f.setIsCutted(cutedType);
});
plateMapper.updateBatch(plateDOS);
return goodsNum;
}
}
@@ -279,6 +279,9 @@ public class PlanServiceImpl implements PlanService {
}
List<PlateDO> plateDOS = plateMapper.selectIsOptimizedPlate(orderIds, ids, getUserOrganId());
AssertUtils.empty(plateDOS,CREAT_PLAN_PLATE_DATA_ERROR);
List<OrderDO> orderDOList = orderMapper.selectBatchIds(orderIds);
@@ -169,9 +169,9 @@
from orders o
left join order_goods og on o.organ_id = og.organ_id and o.id = og.order_id
left join order_plan_item opi on og.organ_id = opi.organ_id and og.order_id = opi.order_id and og.id = opi.goods_id
left join order_plate op on og.organ_id = op.organ_id and og.order_id = op.order_id and og.id = op.goods_id
left join order_item oi on op.organ_id = oi.organ_id and op.order_id = oi.order_id and op.id = oi.plate_id
left join order_plan_item opi on op.organ_id = opi.organ_id and op.order_id = opi.order_id and op.id = opi.plate_id
${ew.customSqlSegment}
@@ -194,8 +194,8 @@
from orders o
left join order_goods og on o.organ_id = og.organ_id and o.id = og.order_id
left join order_plan_item opi on og.organ_id = opi.organ_id and og.order_id = opi.order_id and og.id = opi.goods_id
left join order_plate op on og.organ_id = op.organ_id and og.order_id = op.order_id and og.id = op.goods_id
left join order_plan_item opi on op.organ_id = opi.organ_id and op.order_id = opi.order_id and op.id = opi.plate_id
${ew.customSqlSegment}
@@ -222,9 +222,9 @@
from orders o
left join order_goods og on o.organ_id = og.organ_id and o.id = og.order_id
left join order_plan_item opi on og.organ_id = opi.organ_id and og.order_id = opi.order_id and og.id = opi.goods_id
left join order_plate op on og.organ_id = op.organ_id and og.order_id = op.order_id and og.id = op.goods_id
left join order_item oi on op.organ_id = oi.organ_id and op.order_id = oi.order_id and op.id = oi.plate_id
left join order_plan_item opi on op.organ_id = opi.organ_id and op.order_id = opi.order_id and op.id = opi.plate_id
${ew.customSqlSegment}
@@ -29,6 +29,8 @@
<result property="plateNo" column="plateNo"/>
<result property="customPlateNo" column="customPlateNo"/>
<result property="name" column="name"/>
<result property="color" column="color"/>
<result property="material" column="material"/>
<result property="height" column="height"/>
<result property="width" column="width"/>
<result property="thickness" column="thickness"/>
@@ -386,6 +388,8 @@
ogs.goods_id as plateGoodsId,
ogs.goods_name as goodsName,
ogs.color as color,
ogs.material as material,
op.id as plateId,
op.order_id as orderId,
op.name as name,