禅道 1083,1056,优化生产保存优化数据,方案组优化数据逻辑更改

This commit is contained in:
liuzhaotian
2025-02-10 17:40:11 +08:00
parent df1496c75c
commit 6d2904a14a
9 changed files with 116 additions and 49 deletions
@@ -61,7 +61,8 @@ public class PlanController {
@Parameter(name = "ids", description = "排单ids", required = true) @Parameter(name = "ids", description = "排单ids", required = true)
@PreAuthorize("@ss.hasPermission('placeorder:delete')") @PreAuthorize("@ss.hasPermission('placeorder:delete')")
public CommonResult<Boolean> deletePlan(@RequestParam("ids") @NotEmpty @Size(max = 20,message = "最多可同时删除20个排单") List<Long> ids) { public CommonResult<Boolean> deletePlan(@RequestParam("ids") @NotEmpty @Size(max = 20,message = "最多可同时删除20个排单") List<Long> ids) {
return success(planService.deletePlan(ids)); planService.deletePlan(ids);
return success(Boolean.TRUE);
} }
@@ -175,7 +176,7 @@ public class PlanController {
@Operation(summary = "获取未排单的生产单的柜体和房间名称") @Operation(summary = "获取未排单的生产单的柜体和房间名称")
@Parameter(name = "orderIds", description = "生产单ID", required = true) @Parameter(name = "orderIds", description = "生产单ID", required = true)
@PreAuthorize("@ss.hasPermission('unplannedOrders:query')") @PreAuthorize("@ss.hasPermission('unplannedOrders:query')")
public CommonResult<List<OrderRoomBodyList>> getOrderRoomBody(@Valid @NotEmpty(message = "生产单ID不能为空") @RequestParam @Size(max = 20,message = "最多可同时查询20个生产单信息") List<Long> orderIds) { public CommonResult<List<OrderRoomBodyList>> getOrderRoomBody(@Valid @NotEmpty(message = "生产单ID不能为空") @RequestParam List<Long> orderIds) {
return success(planService.getOrderRoomBody(orderIds)); return success(planService.getOrderRoomBody(orderIds));
} }
@@ -75,4 +75,7 @@ public interface PlanItemMapper extends BaseMapperX<PlanItemDO> {
} }
List<Long> selectOrderPlateList(@Param("orderIds") List<Long> orderIds,@Param("organId") Long organId); List<Long> selectOrderPlateList(@Param("orderIds") List<Long> orderIds,@Param("organId") Long organId);
Long selectIsCuttingPlate(@Param("planId") Long planId,@Param("organId") Long organId);
} }
@@ -269,17 +269,6 @@ public interface PlateMapper extends BaseMapperX<PlateDO> {
} }
// default List<PlateDO> selectIsOptimizedPlate(List<Long> orderId,List<Long> ids,List<Long> plateIds, 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) { default List<PlateDO> selectPlateIsCuttingStatus(List<Long> orderIds,Long organId) {
return selectList(new LambdaQueryWrapperX<PlateDO>() return selectList(new LambdaQueryWrapperX<PlateDO>()
@@ -720,7 +720,9 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
plateMapper.updateBatch(plateDOS); plateMapper.updateBatch(plateDOS);
esUtils.deleteEsDocument(FIELD_PLAN_CONFIG_ID,FIELD_PLAN_ID,req.getPlanConfigId(),planId,ORDER_OPTIMIZE_PLATE_MODEL); // Long planConfigId = req.getPlanConfigId();
// esUtils.deleteEsDocument(FIELD_PLAN_CONFIG_ID,FIELD_PLAN_ID,planConfigId,planId,ORDER_OPTIMIZE_PLATE_MODEL);
// 保存优化后的大板数据 // 保存优化后的大板数据
esUtils.saveEsDocument(ORDER_OPTIMIZE_PLATE_MODEL,req.getOptimizeBoardModelDOS()); esUtils.saveEsDocument(ORDER_OPTIMIZE_PLATE_MODEL,req.getOptimizeBoardModelDOS());
@@ -747,6 +749,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
AssertUtils.notEmpty(planDO,PLAN_NOT_EXISTS); AssertUtils.notEmpty(planDO,PLAN_NOT_EXISTS);
List<Long> planConfigIds = modelDOList.stream().map(SaveProcessSchemeModelDO::getPlanConfigId).distinct().toList();
List<PlateDO> plateDOS = planItemMapper.selectOrderPlanPlateListByPlanId(planId,getUserOrganId()); List<PlateDO> plateDOS = planItemMapper.selectOrderPlanPlateListByPlanId(planId,getUserOrganId());
@@ -791,9 +794,7 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
} }
esUtils.deleteEsDocument(FIELD_PLAN_ID,FIELD_PLAN_CONFIG_ID,planId,planConfigIds,PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL);
esUtils.deleteEsDocument(FIELD_PLAN_ID,planId,PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL);
esUtils.saveEsDocument(PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL,modelDOList); esUtils.saveEsDocument(PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL,modelDOList);
@@ -1432,14 +1433,26 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
.filter(remainBoard -> goodsIds.contains(remainBoard.getGoodsId())) .filter(remainBoard -> goodsIds.contains(remainBoard.getGoodsId()))
.flatMap(remainBoard -> remainBoard.getPlaceBoardList().stream()) .flatMap(remainBoard -> remainBoard.getPlaceBoardList().stream())
.filter(board -> goodsNo.contains(board.getBoardId()) && !board.getCutedType().equals(cutedType) && .filter(board -> goodsNo.contains(board.getBoardId()) && !board.getCutedType().equals(cutedType) &&
(cutedType.equals(OrderPlateCutStatusEnum.OPENING.getStatus()) ? (!cutedType.equals(OrderPlateCutStatusEnum.OPENING.getStatus()) || !board.getCutedType().equals(OrderPlateCutStatusEnum.OPENED.getStatus())))
!board.getCutedType().equals(OrderPlateCutStatusEnum.OPENED.getStatus()) : true))
.forEach(board -> { .forEach(board -> {
if(cutedType.equals(OrderPlateCutStatusEnum.NOCUTTING.getStatus()) ) {
if(board.getCutedType().equals(OrderPlateCutStatusEnum.OPENED.getStatus())) {
goodsCount.incrementAndGet();
}
planNos.addAll(board.getBlocks().stream()
.map(RemainBoardInfo.Blocks::getBlockId)
.toList());
board.setCutedType(cutedType);
return;
}
goodsCount.incrementAndGet(); goodsCount.incrementAndGet();
board.setCutedType(cutedType); board.setCutedType(cutedType);
planNos.addAll(board.getBlocks().stream() planNos.addAll(board.getBlocks().stream()
.map(RemainBoardInfo.Blocks::getBlockId) .map(RemainBoardInfo.Blocks::getBlockId)
.toList()); .toList());
}); });
} }
@@ -1463,6 +1476,10 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
cutedBlockNumber += blockCount; cutedBlockNumber += blockCount;
} }
cutedBoardNumber = cutedBoardNumber < 0 ? 0 : cutedBoardNumber;
cutedBlockNumber = cutedBlockNumber < 0 ? 0 : cutedBlockNumber;
optimizeBoardModelDO.setCutedBoardNumber(cutedBoardNumber); optimizeBoardModelDO.setCutedBoardNumber(cutedBoardNumber);
optimizeBoardModelDO.setCutedBlockNumber(cutedBlockNumber); optimizeBoardModelDO.setCutedBlockNumber(cutedBlockNumber);
@@ -1535,28 +1552,8 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
// 未开料 // 未开料
if(OrderPlateCutStatusEnum.NOCUTTING.getStatus().equals(cutedType)){ if(OrderPlateCutStatusEnum.NOCUTTING.getStatus().equals(cutedType)){
planDO.setStatus(PlanStatusEnum.OPENING.getStatus()); OptimizePlanServiceImpl o = (OptimizePlanServiceImpl) AopContext.currentProxy();
planDO.setProduceTime(null); o.updateOrderAndPlanByCutStatusIsNoCutting(planDO,goodsNum,orderIds);
if(goodsNum.equals(0L)){
planDO.setStatus(PlanStatusEnum.NOCUTTING.getStatus());
}
planMapper.updateById(planDO);
List<PlateDO> plateDOS = plateMapper.selectPlateIsCuttingStatus(orderIds, getUserOrganId());
List<Long> orderIdList = plateDOS.stream().map(PlateDO::getOrderId).distinct().toList();
orderIds.removeAll(orderIdList);
if(CollUtil.isNotEmpty(orderIds)){
List<OrderDO> orderDOS = orderMapper.selectBatchIds(orderIds);
AssertUtils.notEmpty(orderDOS,ORDER_PLAN_ERROR);
orderDOS.forEach(f->f.setStatus(OrderStatusEnum.SORTED.getStatus()));
orderMapper.updateBatch(orderDOS);
}
return; return;
@@ -1617,6 +1614,44 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
} }
@Transactional(rollbackFor = Exception.class)
public void updateOrderAndPlanByCutStatusIsNoCutting(PlanDO planDO,Long goodsNum,List<Long> orderIds){
planDO.setStatus(PlanStatusEnum.OPENING.getStatus());
planDO.setProduceTime(null);
if(goodsNum.equals(0L)){
Long plateId = planItemMapper.selectIsCuttingPlate(planDO.getId(), getUserOrganId());
if(plateId == null){
planDO.setStatus(PlanStatusEnum.NOCUTTING.getStatus());
}
}
planMapper.updateById(planDO);
List<PlateDO> plateDOS = plateMapper.selectPlateIsCuttingStatus(orderIds, getUserOrganId());
List<Long> orderIdList = plateDOS.stream().map(PlateDO::getOrderId).distinct().toList();
orderIds.removeAll(orderIdList);
if(CollUtil.isNotEmpty(orderIds)){
List<OrderDO> orderDOS = orderMapper.selectBatchIds(orderIds);
AssertUtils.notEmpty(orderDOS,ORDER_PLAN_ERROR);
orderDOS.forEach(f->f.setStatus(OrderStatusEnum.SORTED.getStatus()));
orderMapper.updateBatch(orderDOS);
}
}
private void validatePlanStatus(PlanDO planDO,List<Boolean> isLocks){ private void validatePlanStatus(PlanDO planDO,List<Boolean> isLocks){
if(planDO.getStatus().equals(PlanStatusEnum.OPENING.getStatus()) || planDO.getStatus().equals(PlanStatusEnum.OPENED.getStatus())){ if(planDO.getStatus().equals(PlanStatusEnum.OPENING.getStatus()) || planDO.getStatus().equals(PlanStatusEnum.OPENED.getStatus())){
@@ -35,7 +35,7 @@ public interface PlanService {
* *
* @param planIds 编号 * @param planIds 编号
*/ */
Boolean deletePlan(List<Long> planIds); void deletePlan(List<Long> planIds);
/** /**
* 获得生产单开料排单 * 获得生产单开料排单
@@ -365,7 +365,7 @@ public class PlanServiceImpl implements PlanService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Boolean deletePlan(List<Long> planIds) { public void deletePlan(List<Long> planIds) {
// 校验存在 // 校验存在
List<PlanDO> planDOS = planMapper.selectBatchIds(planIds); List<PlanDO> planDOS = planMapper.selectBatchIds(planIds);
@@ -384,6 +384,10 @@ public class PlanServiceImpl implements PlanService {
}); });
if(CollUtil.isEmpty(orderIds)){
planMapper.deleteBatchIds(planDOS);
}
// 删除排单信息,更新排单对应的余料板的排单ID为0 // 删除排单信息,更新排单对应的余料板的排单ID为0
planMapper.deleteBatchIds(planIds); planMapper.deleteBatchIds(planIds);
@@ -455,8 +459,6 @@ public class PlanServiceImpl implements PlanService {
orderMapper.updateBatch(orderList); orderMapper.updateBatch(orderList);
} }
return Boolean.TRUE;
} }
@@ -236,6 +236,27 @@ public class EsUtils {
} }
public void deleteEsDocument(String filedName1,String filedName2, Long value1,List<Long> values2, String index) {
List<FieldValue> fieldValues = values2.stream().map(FieldValue::of).toList();
DeleteByQueryRequest.Builder builder = new DeleteByQueryRequest.Builder();
builder.index(index);
builder.query(q->q.bool(b->b.filter(f->{
f.term(t->t.field(filedName1).value(value1));
f.terms(t->t.field(filedName2).terms(v2->v2.value(fieldValues)));
return f;
})));
try {
elasticsearchClient.deleteByQuery(builder.build());
} catch (IOException | ElasticsearchException e) {
log.error("ES文档删除失败:", e.getMessage());
throw new ServiceException(ES_DATA_ERROR);
}
}
public void deleteEsDocument(String filedName,List<Long> values, String index) { public void deleteEsDocument(String filedName,List<Long> values, String index) {
List<FieldValue> fieldValues = values.stream().map(FieldValue::of).toList(); List<FieldValue> fieldValues = values.stream().map(FieldValue::of).toList();
@@ -416,5 +416,20 @@
</select> </select>
<select id="selectIsCuttingPlate" resultType="java.lang.Long">
select distinct
opi.plate_id
from order_plan_item opi
left join order_plate op on opi.organ_id = op.organ_id and opi.order_id = op.order_id and opi.plate_id = op.id
where opi.organ_id = #{organId}
and opi.plan_id = #{planId}
and op.is_cutted in (1,2)
limit 1;
</select>
</mapper> </mapper>
@@ -372,4 +372,5 @@ public class ErrorCodeConstants {
public static final ErrorCode SYSTEM_PROCESS_SCHEME_CONFIG_FIELD_ERROR = new ErrorCode(1_002_040_017, "当前方案组的配置异常,请重新配置"); public static final ErrorCode SYSTEM_PROCESS_SCHEME_CONFIG_FIELD_ERROR = new ErrorCode(1_002_040_017, "当前方案组的配置异常,请重新配置");
public static final ErrorCode SYSTEM_PROCESS_SCHEME_CONFIG_IS_PLAN = new ErrorCode(1_002_040_018, "当前方案组已在排单中使用,无法删除"); public static final ErrorCode SYSTEM_PROCESS_SCHEME_CONFIG_IS_PLAN = new ErrorCode(1_002_040_018, "当前方案组已在排单中使用,无法删除");
public static final ErrorCode SYSTEM_PROCESS_SCHEME_CONFIG_MACHINE_LABEL = new ErrorCode(1_002_040_019, "当前方案组对应的解析器的机台的标签数据为空,请检查机台的标签配置信息"); public static final ErrorCode SYSTEM_PROCESS_SCHEME_CONFIG_MACHINE_LABEL = new ErrorCode(1_002_040_019, "当前方案组对应的解析器的机台的标签数据为空,请检查机台的标签配置信息");
public static final ErrorCode THIS_CONFIG_DATA_ERROR = new ErrorCode(1_002_040_020, "当前系统配置的数据有误,请重新尝试排序");
} }