mirror of
http://192.168.1.205:9980/cf_devdept2/cf_imes_server.git
synced 2026-08-12 21:02:08 +08:00
1、新增排单优化保存、订单计算用板量保存、订单计算用板量查询接口;2、优化生产各种数量字段记录修改和排单分页字段补充;
This commit is contained in:
+21
@@ -1,9 +1,12 @@
|
|||||||
package com.cf.imes.module.executor.controller.admin.plan;
|
package com.cf.imes.module.executor.controller.admin.plan;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
import com.cf.imes.framework.common.pojo.CommonResult;
|
import com.cf.imes.framework.common.pojo.CommonResult;
|
||||||
import com.cf.imes.framework.common.pojo.PageResult;
|
import com.cf.imes.framework.common.pojo.PageResult;
|
||||||
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderSource;
|
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderSource;
|
||||||
import com.cf.imes.module.executor.controller.admin.plan.bo.PlanProcessSchemeList;
|
import com.cf.imes.module.executor.controller.admin.plan.bo.PlanProcessSchemeList;
|
||||||
|
import com.cf.imes.module.executor.controller.admin.plan.component.OptimizationResultsReqVO;
|
||||||
|
import com.cf.imes.module.executor.controller.admin.plan.component.OrderBoardDosageResultsReqVO;
|
||||||
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.*;
|
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.*;
|
||||||
import com.cf.imes.module.executor.controller.admin.plan.vo.*;
|
import com.cf.imes.module.executor.controller.admin.plan.vo.*;
|
||||||
import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO;
|
import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO;
|
||||||
@@ -204,5 +207,23 @@ public class OptimizePlanController {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/optimize")
|
||||||
|
@Operation(summary = "保存组件优化结果")
|
||||||
|
public CommonResult<Boolean> saveComponentOptimizeResult(@Valid @RequestBody OptimizationResultsReqVO reqVO) {
|
||||||
|
optimizePlanService.saveComponentOptimizationResults(reqVO);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/order/board/dosage")
|
||||||
|
@Operation(summary = "保存订单计算用板量")
|
||||||
|
public CommonResult<Boolean> saveOrderBoardDosageResult(@Valid @RequestBody OrderBoardDosageResultsReqVO reqVO) {
|
||||||
|
optimizePlanService.saveOrderBoardDosage(reqVO);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/order/board/dosage/{orderId}")
|
||||||
|
@Operation(summary = "查询订单计算用板量优化结果")
|
||||||
|
public CommonResult<JSONArray> getOrderBoardDosageResult(@PathVariable("orderId") Long orderId) {
|
||||||
|
return success(optimizePlanService.getOrderBoardDosage(orderId));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+89
@@ -0,0 +1,89 @@
|
|||||||
|
package com.cf.imes.module.executor.controller.admin.plan.component;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @author Gqr
|
||||||
|
* @since 2026/5/25 15:00
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class BoardLayoutResultSummary {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 名称
|
||||||
|
*/
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 长度
|
||||||
|
*/
|
||||||
|
private BigDecimal length;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 宽度
|
||||||
|
*/
|
||||||
|
private BigDecimal width;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 厚度
|
||||||
|
*/
|
||||||
|
private BigDecimal thickness;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 大板数量
|
||||||
|
*/
|
||||||
|
private Integer boardCount;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 开始开料板数量
|
||||||
|
*/
|
||||||
|
private Integer startCutBoardCount;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 结束开料板数量
|
||||||
|
*/
|
||||||
|
private Integer endCutBoardCount;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小板排版间隙
|
||||||
|
*/
|
||||||
|
private BigDecimal gap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 最大可执行修边量 mm
|
||||||
|
* (排版按此值预留内缩空间,下游修边实际值不得超过此值)
|
||||||
|
*/
|
||||||
|
private BigDecimal trimAmount;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 所有标准大板的平均利用率 (0~1),不含余料板
|
||||||
|
*/
|
||||||
|
private BigDecimal avgUtilization;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 排除末张标准大板后的平均利用率 (0~1)
|
||||||
|
*/
|
||||||
|
private BigDecimal avgUtilizationExcludeLast;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 末张标准大板的利用率 (0~1)
|
||||||
|
*/
|
||||||
|
private BigDecimal lastBoardUtilization;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 材料ID列表
|
||||||
|
*/
|
||||||
|
private List<Long> materialIds;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 已优化排版ID列表
|
||||||
|
*/
|
||||||
|
private List<String> placedBlockIds;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
+29
@@ -0,0 +1,29 @@
|
|||||||
|
package com.cf.imes.module.executor.controller.admin.plan.component;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.NotEmpty;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @author Gqr
|
||||||
|
* @since 2026/5/25 15:00
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class FlowSessionSavedContent {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工序状态
|
||||||
|
*/
|
||||||
|
@NotNull(message = "工序状态不能为空")
|
||||||
|
private Integer processStatus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 排版结果汇总
|
||||||
|
*/
|
||||||
|
@NotEmpty(message = "排版结果汇总不能为空")
|
||||||
|
private List<BoardLayoutResultSummary> layoutResultSummary;
|
||||||
|
}
|
||||||
+23
@@ -0,0 +1,23 @@
|
|||||||
|
package com.cf.imes.module.executor.controller.admin.plan.component;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @author Gqr
|
||||||
|
* @since 2026/5/25 14:55
|
||||||
|
*/
|
||||||
|
@Schema(description = "优化生产 - 组件优化生产结果保存 ReqVO")
|
||||||
|
@Data
|
||||||
|
public class OptimizationResultsReqVO {
|
||||||
|
@Schema(description = "排单ID", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
@NotNull(message = "排单ID不能为空")
|
||||||
|
private Long planId;
|
||||||
|
|
||||||
|
@Schema(description = "组件优化结果")
|
||||||
|
@NotNull(message = "优化结果不能为空")
|
||||||
|
private FlowSessionSavedContent flowSessionSavedContent;
|
||||||
|
}
|
||||||
+22
@@ -0,0 +1,22 @@
|
|||||||
|
package com.cf.imes.module.executor.controller.admin.plan.component;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @author Gqr
|
||||||
|
* @since 2026/5/25 14:55
|
||||||
|
*/
|
||||||
|
@Schema(description = "优化生产 - 订单计算用板量结果保存 ReqVO")
|
||||||
|
@Data
|
||||||
|
public class OrderBoardDosageResultsReqVO {
|
||||||
|
@Schema(description = "订单ID", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
@NotNull(message = "订单ID不能为空")
|
||||||
|
private Long orderId;
|
||||||
|
|
||||||
|
@Schema(description = "组件优化结果")
|
||||||
|
private FlowSessionSavedContent flowSessionSavedContent;
|
||||||
|
}
|
||||||
+6
-5
@@ -81,12 +81,12 @@ public class PlanRespVO {
|
|||||||
private LocalDateTime produceTime;
|
private LocalDateTime produceTime;
|
||||||
|
|
||||||
|
|
||||||
@Schema(description = "大板总数")
|
@Schema(description = "已排大板总数")
|
||||||
private Long goodsCount;
|
private Long scheduledBoardNum;
|
||||||
|
|
||||||
|
|
||||||
@Schema(description = "已开料的大板片数")
|
@Schema(description = "已开料的大板片数")
|
||||||
private Long cutGoodsCount;
|
private Long cuttedBoardNum;
|
||||||
|
|
||||||
|
|
||||||
@Schema(description = "总小板片数")
|
@Schema(description = "总小板片数")
|
||||||
@@ -98,7 +98,8 @@ public class PlanRespVO {
|
|||||||
|
|
||||||
|
|
||||||
@Schema(description = "已优化小板片数")
|
@Schema(description = "已优化小板片数")
|
||||||
private Long optimizePlateCount;
|
private Long optimizedPlateNum;
|
||||||
|
|
||||||
|
|
||||||
|
@Schema(description = "已开小板片数")
|
||||||
|
private Long cuttedPlateNum;
|
||||||
}
|
}
|
||||||
+6
@@ -167,4 +167,10 @@ public class OrderDO extends BaseDO {
|
|||||||
*/
|
*/
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
private List<OrderDO> child;
|
private List<OrderDO> child;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算用板量优化结果
|
||||||
|
*/
|
||||||
|
@TableField(typeHandler = CompressStringTypeHandler.class)
|
||||||
|
private String boardDosageResult;
|
||||||
}
|
}
|
||||||
|
|||||||
+25
@@ -111,4 +111,29 @@ public class PlanDO extends BaseDO {
|
|||||||
* 板材商品id
|
* 板材商品id
|
||||||
*/
|
*/
|
||||||
private String goodsId;
|
private String goodsId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 已优化板件数
|
||||||
|
*/
|
||||||
|
private Integer optimizedPlateNum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 板件数
|
||||||
|
*/
|
||||||
|
private Integer plateNum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 已排大板数
|
||||||
|
*/
|
||||||
|
private Integer scheduledBoardNum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 已开料大板数
|
||||||
|
*/
|
||||||
|
private Integer cuttedBoardNum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 已开板件数量
|
||||||
|
*/
|
||||||
|
private Integer cuttedPlateNum;
|
||||||
}
|
}
|
||||||
-5
@@ -212,11 +212,6 @@ public class PlateDO extends BaseDO {
|
|||||||
*/
|
*/
|
||||||
private Long planId;
|
private Long planId;
|
||||||
|
|
||||||
/**
|
|
||||||
* cad图纸数据
|
|
||||||
*/
|
|
||||||
private String cadData;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cad自定义板编号
|
* cad自定义板编号
|
||||||
*/
|
*/
|
||||||
|
|||||||
+35
@@ -402,4 +402,39 @@ public interface PlateMapper extends BaseMapperX<PlateDO> {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<OrdersViewPlatesPageDO> selectPlateGoodsByIds(@Param("orderIds") List<Long> orderIds, @Param("plateIds") List<Long> plateIds, @Param("deleted") boolean deleted);
|
List<OrdersViewPlatesPageDO> selectPlateGoodsByIds(@Param("orderIds") List<Long> orderIds, @Param("plateIds") List<Long> plateIds, @Param("deleted") boolean deleted);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新计划板件优化状态
|
||||||
|
*
|
||||||
|
* @param planId
|
||||||
|
* @param orderIds
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
int updatePlanPlateOptimizeStatus(@Param("planId") Long planId, @Param("orderIds") List<Long> orderIds, @Param("plateNos") List<String> plateNoList);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新计划板件开料状态
|
||||||
|
*
|
||||||
|
* @param planId
|
||||||
|
* @param orderIds
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
int updatePlanPlateCutStatus(@Param("planId") Long planId, @Param("orderIds") List<Long> orderIds, @Param("plateNos") List<String> plateNoList);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据板件id列表查询板件信息
|
||||||
|
*
|
||||||
|
* @param orderIds
|
||||||
|
* @param orderIds
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
int resetPlanPlateOptimizeStatus(@Param("planId") Long planId, @Param("orderIds") List<Long> orderIds);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询排单下已全部开料的订单id列表
|
||||||
|
*
|
||||||
|
* @param planId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<Long> selectPlanAllCuttedOrderIdList(@Param("planId") Long planId);
|
||||||
}
|
}
|
||||||
+34
@@ -0,0 +1,34 @@
|
|||||||
|
package com.cf.imes.module.executor.enums.plan;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @author Gqr
|
||||||
|
* @since 2026/5/25 15:01
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
public enum FlowProcessStatus {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 未开始 - 未生产/未开料
|
||||||
|
*/
|
||||||
|
NOT_STARTED(1),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 进行中 - 生产中/开始开料中
|
||||||
|
*/
|
||||||
|
IN_PROGRESS(2),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 已完成 - 生产完成/结束开料
|
||||||
|
*/
|
||||||
|
COMPLETED(3);
|
||||||
|
|
||||||
|
private final Integer status;
|
||||||
|
|
||||||
|
FlowProcessStatus(Integer status) {
|
||||||
|
this.status = status;
|
||||||
|
}
|
||||||
|
}
|
||||||
+25
@@ -1,8 +1,11 @@
|
|||||||
package com.cf.imes.module.executor.service.optimizeplan;
|
package com.cf.imes.module.executor.service.optimizeplan;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
import com.cf.imes.framework.common.pojo.PageResult;
|
import com.cf.imes.framework.common.pojo.PageResult;
|
||||||
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderSource;
|
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderSource;
|
||||||
import com.cf.imes.module.executor.controller.admin.plan.bo.PlanProcessSchemeList;
|
import com.cf.imes.module.executor.controller.admin.plan.bo.PlanProcessSchemeList;
|
||||||
|
import com.cf.imes.module.executor.controller.admin.plan.component.OptimizationResultsReqVO;
|
||||||
|
import com.cf.imes.module.executor.controller.admin.plan.component.OrderBoardDosageResultsReqVO;
|
||||||
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.*;
|
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.*;
|
||||||
import com.cf.imes.module.executor.controller.admin.plan.vo.*;
|
import com.cf.imes.module.executor.controller.admin.plan.vo.*;
|
||||||
import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO;
|
import com.cf.imes.module.executor.dal.dataobject.ordermodel.OrderModelDO;
|
||||||
@@ -50,4 +53,26 @@ public interface OptimizePlanService {
|
|||||||
void updateProcessSchemeConfig(PlanSchemeConfigReqVO reqVO);
|
void updateProcessSchemeConfig(PlanSchemeConfigReqVO reqVO);
|
||||||
|
|
||||||
PageResult<OrderGoodsResp> getGoodsPlateDataFilter(FilterDataPageReqVO pageReqVO);
|
PageResult<OrderGoodsResp> getGoodsPlateDataFilter(FilterDataPageReqVO pageReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存组件优化结果
|
||||||
|
*
|
||||||
|
* @param reqVO
|
||||||
|
*/
|
||||||
|
void saveComponentOptimizationResults(OptimizationResultsReqVO reqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存订单计算用板量结果
|
||||||
|
*
|
||||||
|
* @param reqVO
|
||||||
|
*/
|
||||||
|
void saveOrderBoardDosage(OrderBoardDosageResultsReqVO reqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取订单计算用板量结果
|
||||||
|
*
|
||||||
|
* @param orderId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
JSONArray getOrderBoardDosage(Long orderId);
|
||||||
}
|
}
|
||||||
|
|||||||
+223
-42
@@ -22,10 +22,13 @@ import co.elastic.clients.json.JsonData;
|
|||||||
import co.elastic.clients.json.JsonpMappingException;
|
import co.elastic.clients.json.JsonpMappingException;
|
||||||
import com.alibaba.cloud.commons.lang.StringUtils;
|
import com.alibaba.cloud.commons.lang.StringUtils;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
|
||||||
|
import com.cf.imes.framework.common.enums.DeletedCodeEnum;
|
||||||
import com.cf.imes.framework.common.enums.OrderPlateCutStatusEnum;
|
import com.cf.imes.framework.common.enums.OrderPlateCutStatusEnum;
|
||||||
import com.cf.imes.framework.common.enums.OrderStatusEnum;
|
import com.cf.imes.framework.common.enums.OrderStatusEnum;
|
||||||
import com.cf.imes.framework.common.enums.PlanStatusEnum;
|
import com.cf.imes.framework.common.enums.PlanStatusEnum;
|
||||||
@@ -37,15 +40,16 @@ import com.cf.imes.framework.common.util.json.JsonUtils;
|
|||||||
import com.cf.imes.framework.common.util.object.BeanUtils;
|
import com.cf.imes.framework.common.util.object.BeanUtils;
|
||||||
import com.cf.imes.framework.es.core.service.ESDocumentService;
|
import com.cf.imes.framework.es.core.service.ESDocumentService;
|
||||||
import com.cf.imes.framework.mybatis.core.query.QueryWrapperX;
|
import com.cf.imes.framework.mybatis.core.query.QueryWrapperX;
|
||||||
import com.cf.imes.framework.security.core.LoginUser;
|
|
||||||
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
|
|
||||||
import com.cf.imes.module.executor.controller.admin.orderParts.vo.OrderPartsRemark;
|
|
||||||
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderIds;
|
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderIds;
|
||||||
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderSource;
|
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderSource;
|
||||||
import com.cf.imes.module.executor.controller.admin.plan.bo.PlanProcessSchemeList;
|
import com.cf.imes.module.executor.controller.admin.plan.bo.PlanProcessSchemeList;
|
||||||
import com.cf.imes.module.executor.controller.admin.plan.bo.ProcessGroupList;
|
import com.cf.imes.module.executor.controller.admin.plan.component.BoardLayoutResultSummary;
|
||||||
|
import com.cf.imes.module.executor.controller.admin.plan.component.FlowSessionSavedContent;
|
||||||
|
import com.cf.imes.module.executor.controller.admin.plan.component.OptimizationResultsReqVO;
|
||||||
|
import com.cf.imes.module.executor.controller.admin.plan.component.OrderBoardDosageResultsReqVO;
|
||||||
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.*;
|
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.*;
|
||||||
import com.cf.imes.module.executor.controller.admin.plan.vo.*;
|
import com.cf.imes.module.executor.controller.admin.plan.vo.*;
|
||||||
|
import com.cf.imes.module.executor.dal.dataobject.goods.GoodsDO;
|
||||||
import com.cf.imes.module.executor.dal.dataobject.goods.OptimizeBoardModelDO;
|
import com.cf.imes.module.executor.dal.dataobject.goods.OptimizeBoardModelDO;
|
||||||
import com.cf.imes.module.executor.dal.dataobject.goods.PlanActualGoodsModelDO;
|
import com.cf.imes.module.executor.dal.dataobject.goods.PlanActualGoodsModelDO;
|
||||||
import com.cf.imes.module.executor.dal.dataobject.order.OrderDO;
|
import com.cf.imes.module.executor.dal.dataobject.order.OrderDO;
|
||||||
@@ -67,6 +71,7 @@ import com.cf.imes.module.executor.dal.mysql.plate.PlateGoodMapper;
|
|||||||
import com.cf.imes.module.executor.dal.mysql.plate.PlateMapper;
|
import com.cf.imes.module.executor.dal.mysql.plate.PlateMapper;
|
||||||
import com.cf.imes.module.executor.dal.mysql.remainplaten.RemainPlateMapper;
|
import com.cf.imes.module.executor.dal.mysql.remainplaten.RemainPlateMapper;
|
||||||
import com.cf.imes.module.executor.enums.ErrorCodeConstants;
|
import com.cf.imes.module.executor.enums.ErrorCodeConstants;
|
||||||
|
import com.cf.imes.module.executor.enums.plan.FlowProcessStatus;
|
||||||
import com.cf.imes.module.executor.util.elasticsearch.EsUtils;
|
import com.cf.imes.module.executor.util.elasticsearch.EsUtils;
|
||||||
import com.cf.imes.module.system.api.dataSource.DataSourceApi;
|
import com.cf.imes.module.system.api.dataSource.DataSourceApi;
|
||||||
import com.cf.imes.module.system.api.machine.MachineApi;
|
import com.cf.imes.module.system.api.machine.MachineApi;
|
||||||
@@ -1775,50 +1780,226 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private void validatePlanStatus(PlanDO planDO,List<Boolean> isLocks){
|
|
||||||
|
|
||||||
if(planDO.getStatus().equals(PlanStatusEnum.OPENING.getStatus()) || planDO.getStatus().equals(PlanStatusEnum.OPENED.getStatus())){
|
|
||||||
throw new ServiceException(PLAN_PLATE_IS_CUT);
|
|
||||||
}
|
|
||||||
|
|
||||||
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
|
|
||||||
assert loginUser != null;
|
|
||||||
|
|
||||||
Boolean data = permissionApi.hasAnyPermissions(loginUser.getId(), "placeorder:list").getCheckedData();
|
|
||||||
|
|
||||||
if(Boolean.TRUE.equals(planDO.getIsScheduled()) && isLocks.contains(true) && Boolean.FALSE.equals(data)){
|
|
||||||
throw new ServiceException(PLAN_PROCESS_SCHEME_IS_LOCK);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 拆分list,每个1000条
|
* 重置优化状态
|
||||||
*
|
*
|
||||||
* @param dataList
|
* @param planId
|
||||||
* @param <T>
|
* @param orderIds
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
private <T> List<List<T>> batchProcess(List<T> dataList) {
|
private void resetPlanPlateOptimizeStatus(Long planId, List<Long> orderIds) {
|
||||||
List<List<T>> resultList = new ArrayList<>();
|
int updatedCount;
|
||||||
if (CollUtil.isEmpty(dataList)) {
|
do {
|
||||||
return resultList;
|
// 执行批量更新,每次最多更新1000条
|
||||||
}
|
updatedCount = plateMapper.resetPlanPlateOptimizeStatus(planId, orderIds);
|
||||||
|
|
||||||
int total = dataList.size();
|
// 如果本次有更新,则继续下一轮
|
||||||
for (int i = 0; i < total; i += 1000) {
|
if (updatedCount > 0) {
|
||||||
int end = Math.min(i + 1000, total);
|
try {
|
||||||
List<T> subList = dataList.subList(i, end);
|
// 100毫秒延迟
|
||||||
|
Thread.sleep(100);
|
||||||
if (!subList.isEmpty()) {
|
} catch (InterruptedException e) {
|
||||||
resultList.add(subList);
|
Thread.currentThread().interrupt();
|
||||||
|
throw new RuntimeException("轮询更新被中断", e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
} while (updatedCount > 0); // 当返回0时表示没有更多记录需要更新
|
||||||
return resultList;
|
|
||||||
|
// 重置排单的已优化数量
|
||||||
|
planMapper.update(new LambdaUpdateWrapper<PlanDO>()
|
||||||
|
.eq(PlanDO::getId, planId)
|
||||||
|
.eq(PlanDO::getDeleted, DeletedCodeEnum.NOT_DELETED.getStatus())
|
||||||
|
.set(PlanDO::getOptimizedPlateNum, 0)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void saveComponentOptimizationResults(OptimizationResultsReqVO reqVO) {
|
||||||
|
Long planId = reqVO.getPlanId();
|
||||||
|
// todo 判空
|
||||||
|
Integer processStatus = reqVO.getFlowSessionSavedContent().getProcessStatus();
|
||||||
|
List<BoardLayoutResultSummary> layoutResultSummary = reqVO.getFlowSessionSavedContent().getLayoutResultSummary();
|
||||||
|
PlanDO planDO = planMapper.selectById(planId);
|
||||||
|
|
||||||
|
AssertUtils.notEmpty(planDO, ORDER_PLAN_DATA_ERROR);
|
||||||
|
|
||||||
|
// 校验订单信息和获取 orderId
|
||||||
|
String orderNos = Optional.ofNullable(planDO.getOrderNos()).orElseThrow(() -> new ServiceException(ORDER_PLAN_ORDERS_EMPTY));
|
||||||
|
List<Long> orderIds = new ArrayList<>(JSON.parseArray(orderNos).toJavaList(Long.class).stream().distinct().toList());
|
||||||
|
|
||||||
|
// 完成优化排版
|
||||||
|
if (FlowProcessStatus.NOT_STARTED.getStatus().equals(processStatus)) {
|
||||||
|
if(planDO.getStatus().equals(PlanStatusEnum.OPENING.getStatus()) || planDO.getStatus().equals(PlanStatusEnum.OPENED.getStatus())){
|
||||||
|
throw new ServiceException(PLAN_PLATE_IS_CUT);
|
||||||
|
}
|
||||||
|
// 重置优化状态
|
||||||
|
resetPlanPlateOptimizeStatus(planId, orderIds);
|
||||||
|
if (CollUtil.isNotEmpty(layoutResultSummary)) {
|
||||||
|
List<String> optimizatePlateNoList = layoutResultSummary.stream().flatMap(summary -> summary.getPlacedBlockIds().stream()).toList();
|
||||||
|
// 已排大板数量
|
||||||
|
int boardCount = layoutResultSummary.stream().mapToInt(BoardLayoutResultSummary::getBoardCount).sum();
|
||||||
|
|
||||||
|
// 更新参与优化的板材的优化状态
|
||||||
|
int updatedCount;
|
||||||
|
int optimizedCount = 0;
|
||||||
|
do {
|
||||||
|
// 执行批量更新,每次最多更新1000条
|
||||||
|
updatedCount = plateMapper.updatePlanPlateOptimizeStatus(planId, orderIds, optimizatePlateNoList);
|
||||||
|
optimizedCount += updatedCount;
|
||||||
|
|
||||||
|
// 如果本次有更新,则继续下一轮
|
||||||
|
if (updatedCount > 0) {
|
||||||
|
try {
|
||||||
|
// 100毫秒延迟
|
||||||
|
Thread.sleep(100);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
Thread.currentThread().interrupt();
|
||||||
|
throw new RuntimeException("轮询更新被中断", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} while (updatedCount > 0); // 当返回0时表示没有更多记录需要更新
|
||||||
|
|
||||||
|
if (optimizedCount > 0) {
|
||||||
|
planMapper.update(new LambdaUpdateWrapper<PlanDO>()
|
||||||
|
.eq(PlanDO::getId, planId)
|
||||||
|
.eq(PlanDO::getDeleted, DeletedCodeEnum.NOT_DELETED.getStatus())
|
||||||
|
.set(PlanDO::getOptimizedPlateNum, optimizedCount)
|
||||||
|
.set(PlanDO::getScheduledBoardNum, boardCount)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// 开始开料
|
||||||
|
if (FlowProcessStatus.IN_PROGRESS.getStatus().equals(processStatus)) {
|
||||||
|
if (planDO.getStatus().equals(PlanStatusEnum.OPENING.getStatus()) || planDO.getStatus().equals(PlanStatusEnum.OPENED.getStatus())) {
|
||||||
|
throw new ServiceException(PLAN_PLATE_IS_CUT);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<OrderDO> orderDOS = orderMapper.selectByIds(orderIds);
|
||||||
|
AssertUtils.notEmpty(orderDOS, ORDER_PLAN_ORDERS_EMPTY);
|
||||||
|
|
||||||
|
orderDOS.forEach(f -> f.setStatus(OrderStatusEnum.IN_PRODUCTION.getStatus()));
|
||||||
|
orderMapper.updateBatch(orderDOS);
|
||||||
|
|
||||||
|
// 更新排单状态
|
||||||
|
planMapper.update(new LambdaUpdateWrapper<PlanDO>()
|
||||||
|
.eq(PlanDO::getId, planId)
|
||||||
|
.eq(PlanDO::getDeleted, DeletedCodeEnum.NOT_DELETED.getStatus())
|
||||||
|
.set(PlanDO::getStatus, PlanStatusEnum.OPENING.getStatus())
|
||||||
|
.set(PlanDO::getProduceTime, null)
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 结束开料
|
||||||
|
if (FlowProcessStatus.COMPLETED.getStatus().equals(processStatus)) {
|
||||||
|
if (planDO.getStatus().equals(PlanStatusEnum.OPENED.getStatus())) {
|
||||||
|
throw new ServiceException(PLAN_OPTIMIZE_DATA_ALL_OPENED);
|
||||||
|
}
|
||||||
|
List<String> optimizatePlateNoList = layoutResultSummary.stream().flatMap(summary -> summary.getPlacedBlockIds().stream()).toList();
|
||||||
|
// 累计开料大板数量
|
||||||
|
int endCutBoardCount = layoutResultSummary.stream().mapToInt(BoardLayoutResultSummary::getEndCutBoardCount).sum();
|
||||||
|
|
||||||
|
// 更新开料状态
|
||||||
|
int updatedCount;
|
||||||
|
int cuttedCount = 0;
|
||||||
|
do {
|
||||||
|
// 执行批量更新,每次最多更新1000条
|
||||||
|
updatedCount = plateMapper.updatePlanPlateCutStatus(planId, orderIds, optimizatePlateNoList);
|
||||||
|
cuttedCount += updatedCount;
|
||||||
|
|
||||||
|
// 如果本次有更新,则继续下一轮
|
||||||
|
if (updatedCount > 0) {
|
||||||
|
try {
|
||||||
|
// 100毫秒延迟
|
||||||
|
Thread.sleep(100);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
Thread.currentThread().interrupt();
|
||||||
|
throw new RuntimeException("轮询更新被中断", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} while (updatedCount > 0); // 当返回0时表示没有更多记录需要更新
|
||||||
|
|
||||||
|
// 查询已全部开料的订单号
|
||||||
|
List<Long> allCuttedOrderIdList = plateMapper.selectPlanAllCuttedOrderIdList(planId);
|
||||||
|
|
||||||
|
// 更新已全部开料和全部打包的订单为生产完成
|
||||||
|
if (CollUtil.isNotEmpty(allCuttedOrderIdList)) {
|
||||||
|
// 查询订单的打包状态是否为已打包
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新排单状态
|
||||||
|
planMapper.update(new LambdaUpdateWrapper<PlanDO>()
|
||||||
|
.eq(PlanDO::getId, planId)
|
||||||
|
.eq(PlanDO::getDeleted, DeletedCodeEnum.NOT_DELETED.getStatus())
|
||||||
|
.set(PlanDO::getStatus, PlanStatusEnum.OPENED.getStatus())
|
||||||
|
.set(PlanDO::getProduceTime, LocalDateTime.now())
|
||||||
|
.set(PlanDO::getCuttedBoardNum, endCutBoardCount)
|
||||||
|
.set(PlanDO::getCuttedPlateNum, cuttedCount)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void saveOrderBoardDosage(OrderBoardDosageResultsReqVO reqVO) {
|
||||||
|
Long orderId = reqVO.getOrderId();
|
||||||
|
OrderDO orderDO = orderMapper.selectById(orderId);
|
||||||
|
|
||||||
|
AssertUtils.notEmpty(orderDO,ORDER_NOT_EXISTS);
|
||||||
|
|
||||||
|
// 从优化结果中取order_goods_id来获取大板材质
|
||||||
|
FlowSessionSavedContent flowSessionSavedContent = reqVO.getFlowSessionSavedContent();
|
||||||
|
List<BoardLayoutResultSummary> layoutResultSummary = flowSessionSavedContent.getLayoutResultSummary();
|
||||||
|
if (CollUtil.isEmpty(layoutResultSummary)) {
|
||||||
|
throw new RuntimeException();
|
||||||
|
}
|
||||||
|
|
||||||
|
JSONArray orderBoardDosageJsonArr = new JSONArray();
|
||||||
|
for (BoardLayoutResultSummary summary : layoutResultSummary) {
|
||||||
|
List<Long> materialIds = summary.getMaterialIds();
|
||||||
|
if(CollUtil.isEmpty(materialIds)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
Long orderGoodsId = materialIds.get(0);
|
||||||
|
GoodsDO goodsDO = goodsMapper.selectById(orderGoodsId);
|
||||||
|
|
||||||
|
// 提取大板计算数据
|
||||||
|
JSONObject orderBoardDosageJSON = new JSONObject();
|
||||||
|
orderBoardDosageJSON.put("avgUtilization", summary.getAvgUtilization()); // 平均利用率
|
||||||
|
orderBoardDosageJSON.put("avgUtilizationExcludeLast", summary.getAvgUtilizationExcludeLast()); // 排除末张标准大板后的平均利用率
|
||||||
|
orderBoardDosageJSON.put("trimAmount", summary.getTrimAmount()); // 最大可执行修边量
|
||||||
|
orderBoardDosageJSON.put("boardCount", summary.getBoardCount()); // 排版大板数量
|
||||||
|
orderBoardDosageJSON.put("gap", summary.getGap()); // 小板排版间隙
|
||||||
|
orderBoardDosageJSON.put(FIELD_GOODS_ID, goodsDO.getGoodsId()); // 商品编号
|
||||||
|
orderBoardDosageJSON.put("name", summary.getName()); // 大板名称
|
||||||
|
orderBoardDosageJSON.put("length", summary.getLength()); // 长
|
||||||
|
orderBoardDosageJSON.put("width", summary.getWidth()); // 宽
|
||||||
|
orderBoardDosageJSON.put("thickness", summary.getThickness()); // 厚度
|
||||||
|
orderBoardDosageJsonArr.add(orderBoardDosageJSON);
|
||||||
|
}
|
||||||
|
|
||||||
|
OrderDO update = new OrderDO();
|
||||||
|
update.setId(orderId);
|
||||||
|
update.setBoardDosageResult(orderBoardDosageJsonArr.toJSONString());
|
||||||
|
orderMapper.updateById(update);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JSONArray getOrderBoardDosage(Long orderId) {
|
||||||
|
OrderDO orderDO = orderMapper.selectById(orderId);
|
||||||
|
|
||||||
|
AssertUtils.notEmpty(orderDO, ORDER_NOT_EXISTS);
|
||||||
|
return JSON.parseArray(orderDO.getBoardDosageResult());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+45
-217
@@ -14,12 +14,10 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
|||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
|
||||||
import com.cf.imes.framework.common.enums.*;
|
import com.cf.imes.framework.common.enums.*;
|
||||||
import com.cf.imes.framework.common.exception.ServiceException;
|
import com.cf.imes.framework.common.exception.ServiceException;
|
||||||
import com.cf.imes.framework.common.pojo.PageParam;
|
|
||||||
import com.cf.imes.framework.common.pojo.PageResult;
|
import com.cf.imes.framework.common.pojo.PageResult;
|
||||||
import com.cf.imes.framework.common.util.Assert.AssertUtils;
|
import com.cf.imes.framework.common.util.Assert.AssertUtils;
|
||||||
import com.cf.imes.framework.common.util.date.LocalDateTimeUtils;
|
import com.cf.imes.framework.common.util.date.LocalDateTimeUtils;
|
||||||
import com.cf.imes.framework.common.util.object.BeanUtils;
|
import com.cf.imes.framework.common.util.object.BeanUtils;
|
||||||
import com.cf.imes.framework.es.core.service.ESDocumentService;
|
|
||||||
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
import com.cf.imes.framework.mybatis.core.query.QueryWrapperX;
|
import com.cf.imes.framework.mybatis.core.query.QueryWrapperX;
|
||||||
import com.cf.imes.framework.security.core.LoginUser;
|
import com.cf.imes.framework.security.core.LoginUser;
|
||||||
@@ -28,7 +26,6 @@ import com.cf.imes.module.executor.controller.admin.goods.vo.GoodsRespVO;
|
|||||||
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderPlanPlateNumAndAreaRespVO;
|
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderPlanPlateNumAndAreaRespVO;
|
||||||
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderRespVO;
|
import com.cf.imes.module.executor.controller.admin.order.vo.order.OrderRespVO;
|
||||||
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderRoomBodyList;
|
import com.cf.imes.module.executor.controller.admin.plan.bo.OrderRoomBodyList;
|
||||||
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.PlatePlaceInfo;
|
|
||||||
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.RemainBoardInfo;
|
import com.cf.imes.module.executor.controller.admin.plan.saveOptimize.RemainBoardInfo;
|
||||||
import com.cf.imes.module.executor.controller.admin.plan.vo.*;
|
import com.cf.imes.module.executor.controller.admin.plan.vo.*;
|
||||||
import com.cf.imes.module.executor.controller.admin.plate.vo.OrderPlateIds;
|
import com.cf.imes.module.executor.controller.admin.plate.vo.OrderPlateIds;
|
||||||
@@ -53,8 +50,6 @@ import com.cf.imes.module.executor.enums.ErrorCodeConstants;
|
|||||||
import com.cf.imes.module.executor.enums.OrderPlanQueryTypeEnum;
|
import com.cf.imes.module.executor.enums.OrderPlanQueryTypeEnum;
|
||||||
import com.cf.imes.module.executor.enums.OrderStatusEnum;
|
import com.cf.imes.module.executor.enums.OrderStatusEnum;
|
||||||
import com.cf.imes.module.executor.util.elasticsearch.EsUtils;
|
import com.cf.imes.module.executor.util.elasticsearch.EsUtils;
|
||||||
import com.cf.imes.module.system.api.systemconfig.SystemConfigApi;
|
|
||||||
import com.cf.imes.module.system.api.systemconfig.dto.SystemConfigRespDTO;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.aop.framework.AopContext;
|
import org.springframework.aop.framework.AopContext;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@@ -66,18 +61,14 @@ import jakarta.annotation.Resource;
|
|||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.DATA_DATA_ERROR;
|
import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.DATA_DATA_ERROR;
|
||||||
import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConstants.ES_DATA_ERROR;
|
|
||||||
import static com.cf.imes.framework.common.util.json.JsonUtils.parseArray;
|
import static com.cf.imes.framework.common.util.json.JsonUtils.parseArray;
|
||||||
import static com.cf.imes.framework.common.util.json.JsonUtils.toJsonString;
|
|
||||||
import static com.cf.imes.framework.common.util.string.SearchUtil.insertSeparator;
|
import static com.cf.imes.framework.common.util.string.SearchUtil.insertSeparator;
|
||||||
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
|
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
|
||||||
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.*;
|
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.*;
|
||||||
import static com.cf.imes.module.executor.enums.EsIndexEnum.*;
|
import static com.cf.imes.module.executor.enums.EsIndexEnum.*;
|
||||||
import static com.cf.imes.module.system.enums.ErrorCodeConstants.*;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 订单开料排单 Service 实现类
|
* 订单开料排单 Service 实现类
|
||||||
@@ -107,9 +98,6 @@ public class PlanServiceImpl implements PlanService {
|
|||||||
@Resource
|
@Resource
|
||||||
private PlateMapper plateMapper;
|
private PlateMapper plateMapper;
|
||||||
|
|
||||||
@Resource
|
|
||||||
private SystemConfigApi systemConfigApi;
|
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private OrderBodyMapper orderBodyMapper;
|
private OrderBodyMapper orderBodyMapper;
|
||||||
|
|
||||||
@@ -122,9 +110,6 @@ public class PlanServiceImpl implements PlanService {
|
|||||||
@Resource
|
@Resource
|
||||||
private ElasticsearchClient elasticsearchClient;
|
private ElasticsearchClient elasticsearchClient;
|
||||||
|
|
||||||
@Resource
|
|
||||||
private ESDocumentService esDocumentService;
|
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private EsUtils esUtils;
|
private EsUtils esUtils;
|
||||||
|
|
||||||
@@ -234,7 +219,7 @@ public class PlanServiceImpl implements PlanService {
|
|||||||
// 删除小板
|
// 删除小板
|
||||||
List<OrderPlateIds> deleteOrderPlateIds = Optional.ofNullable(updateReqVO.getDeleteOrderPlateIds()).orElse(new ArrayList<>());
|
List<OrderPlateIds> deleteOrderPlateIds = Optional.ofNullable(updateReqVO.getDeleteOrderPlateIds()).orElse(new ArrayList<>());
|
||||||
|
|
||||||
if(CollUtil.isNotEmpty(deleteOrderPlateIds)){
|
if (CollUtil.isNotEmpty(deleteOrderPlateIds)) {
|
||||||
|
|
||||||
PlanServiceImpl p = (PlanServiceImpl) AopContext.currentProxy();
|
PlanServiceImpl p = (PlanServiceImpl) AopContext.currentProxy();
|
||||||
p.deletePlanPlate(deleteOrderPlateIds);
|
p.deletePlanPlate(deleteOrderPlateIds);
|
||||||
@@ -248,10 +233,10 @@ public class PlanServiceImpl implements PlanService {
|
|||||||
|
|
||||||
PlanActualGoodsModelDO planActualGoodsModelDO = updateReqVO.getPlanActualGoodsModelDO();
|
PlanActualGoodsModelDO planActualGoodsModelDO = updateReqVO.getPlanActualGoodsModelDO();
|
||||||
|
|
||||||
if(CollUtil.isNotEmpty(insertOrderPlateIds)){
|
if (CollUtil.isNotEmpty(insertOrderPlateIds)) {
|
||||||
|
|
||||||
PlanServiceImpl p = (PlanServiceImpl) AopContext.currentProxy();
|
PlanServiceImpl p = (PlanServiceImpl) AopContext.currentProxy();
|
||||||
p.insertPlanPlate(insertOrderPlateIds,planActualGoodsModelDO);
|
p.insertPlanPlate(insertOrderPlateIds, planActualGoodsModelDO);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -264,12 +249,12 @@ public class PlanServiceImpl implements PlanService {
|
|||||||
// 校验存在
|
// 校验存在
|
||||||
List<PlanDO> planDOS = planMapper.selectBatchIds(planIds);
|
List<PlanDO> planDOS = planMapper.selectBatchIds(planIds);
|
||||||
|
|
||||||
AssertUtils.notEmpty(planDOS,PLAN_NOT_EXISTS);
|
AssertUtils.notEmpty(planDOS, PLAN_NOT_EXISTS);
|
||||||
|
|
||||||
// 获取排单下的订单号集合
|
// 获取排单下的订单号集合
|
||||||
planDOS.forEach(f->{
|
planDOS.forEach(f -> {
|
||||||
if ( f.getStatus().equals(PlanStatusEnum.OPENING.getStatus()) || f.getStatus().equals(PlanStatusEnum.OPENED.getStatus()) ) {
|
if (f.getStatus().equals(PlanStatusEnum.OPENING.getStatus()) || f.getStatus().equals(PlanStatusEnum.OPENED.getStatus())) {
|
||||||
throw new ServiceException(PLAN_NOT_ALLOW_DELETE,f.getId());
|
throw new ServiceException(PLAN_NOT_ALLOW_DELETE, f.getId());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -287,7 +272,7 @@ public class PlanServiceImpl implements PlanService {
|
|||||||
if (!plateDOS.isEmpty()) {
|
if (!plateDOS.isEmpty()) {
|
||||||
List<Long> plateIdList = plateDOS.stream().map(PlateDO::getId).toList();
|
List<Long> plateIdList = plateDOS.stream().map(PlateDO::getId).toList();
|
||||||
|
|
||||||
plateMapper.deleteBatchIds(plateIdList);
|
plateMapper.deleteByIds(plateIdList);
|
||||||
|
|
||||||
orderItemMapper.delete(new LambdaQueryWrapperX<OrderItemDO>()
|
orderItemMapper.delete(new LambdaQueryWrapperX<OrderItemDO>()
|
||||||
.eq(OrderItemDO::getOrganId, getUserOrganId())
|
.eq(OrderItemDO::getOrganId, getUserOrganId())
|
||||||
@@ -295,21 +280,6 @@ public class PlanServiceImpl implements PlanService {
|
|||||||
.in(OrderItemDO::getPlateId, plateIdList));
|
.in(OrderItemDO::getPlateId, plateIdList));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排单对应的优化数据删除
|
|
||||||
esUtils.deleteEsDocument(FIELD_PLANID, planIds, ORDER_OPTIMIZE_PLATE_MODEL.getIndex());
|
|
||||||
|
|
||||||
|
|
||||||
// 删除排单对应的加工方案的优化数据
|
|
||||||
esUtils.deleteEsDocument(FIELD_PLANID, planIds, PLAN_PROCESS_SCHEME_OPTIMIZE_MODEL.getIndex());
|
|
||||||
|
|
||||||
|
|
||||||
// 删除排单对应的加工方案组的配置信息
|
|
||||||
esUtils.deleteEsDocument(FIELD_PLANID, planIds, PLAN_PROCESS_SCHEME_CONFIG.getIndex());
|
|
||||||
|
|
||||||
// 去除订单板材造型对应的排单ID
|
|
||||||
// removePlateModelPlanId(orderIds,planIds,new ArrayList<>());
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -423,11 +393,6 @@ public class PlanServiceImpl implements PlanService {
|
|||||||
// 查询排单对应的大板板材信息以及 统计小板数量和面积
|
// 查询排单对应的大板板材信息以及 统计小板数量和面积
|
||||||
List<PlateInfoVO> plateInfoVOS = planItemMapper.selectOrderPlanPlateList(planIds, getUserOrganId());
|
List<PlateInfoVO> plateInfoVOS = planItemMapper.selectOrderPlanPlateList(planIds, getUserOrganId());
|
||||||
|
|
||||||
|
|
||||||
// 根据排单ID查询ES中的优化数据
|
|
||||||
List<OptimizeBoardModelDO> optimizeBoardModelDOS = esUtils.getEsDocument(FIELD_PLANID, planIds, 500, ORDER_OPTIMIZE_PLATE_MODEL.getIndex(), OptimizeBoardModelDO.class);
|
|
||||||
|
|
||||||
|
|
||||||
// 获取排单对应的订单的信息
|
// 获取排单对应的订单的信息
|
||||||
List<PlanOrderRespVO> planOrderRespVOS = orderMapper.selectPlanOrderList(planIds, getUserOrganId());
|
List<PlanOrderRespVO> planOrderRespVOS = orderMapper.selectPlanOrderList(planIds, getUserOrganId());
|
||||||
|
|
||||||
@@ -438,16 +403,8 @@ public class PlanServiceImpl implements PlanService {
|
|||||||
planRespVOPageResult.forEach(e -> {
|
planRespVOPageResult.forEach(e -> {
|
||||||
// 大板信息列表
|
// 大板信息列表
|
||||||
e.setPlateInfoList(getPlateInfoList(e.getId(), plateInfoVOS));
|
e.setPlateInfoList(getPlateInfoList(e.getId(), plateInfoVOS));
|
||||||
// 小板的总数量
|
|
||||||
e.setPlateNum(getPlateNum(e.getId(), plateInfoVOS));
|
|
||||||
// 大板总数量
|
|
||||||
e.setGoodsCount(getOptimizeGoodsCount(e.getId(), optimizeBoardModelDOS));
|
|
||||||
// 大板开料数
|
|
||||||
e.setCutGoodsCount(getCutGoodsCount(e.getId(), optimizeBoardModelDOS));
|
|
||||||
// 小板优化数量
|
|
||||||
e.setOptimizePlateCount(getOptimizePlateCount(e.getId(), optimizeBoardModelDOS));
|
|
||||||
// 未优化小板数量
|
// 未优化小板数量
|
||||||
e.setUnOptimizePlateCount(e.getPlateNum() - e.getOptimizePlateCount());
|
e.setUnOptimizePlateCount(e.getPlateNum() - e.getOptimizedPlateNum());
|
||||||
// 订单信息
|
// 订单信息
|
||||||
e.setOrderList(getOrderList(e.getId(), planOrderRespVOS));
|
e.setOrderList(getOrderList(e.getId(), planOrderRespVOS));
|
||||||
});
|
});
|
||||||
@@ -468,15 +425,8 @@ public class PlanServiceImpl implements PlanService {
|
|||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
List<Long> processIds = planDOList.stream().map(PlanDO::getProcessId).distinct().toList();
|
|
||||||
|
|
||||||
List<Long> planIds = planDOList.stream().map(PlanDO::getId).toList();
|
List<Long> planIds = planDOList.stream().map(PlanDO::getId).toList();
|
||||||
|
|
||||||
|
|
||||||
List<SystemConfigRespDTO> configDOS = systemConfigApi.getProcessByIds(processIds).getCheckedData();
|
|
||||||
|
|
||||||
|
|
||||||
// 查询排单对应的大板板材信息
|
// 查询排单对应的大板板材信息
|
||||||
List<PlateInfoVO> plateInfoVOS = goodsMapper.selectOrderGoodsPlateList(planIds, getUserOrganId());
|
List<PlateInfoVO> plateInfoVOS = goodsMapper.selectOrderGoodsPlateList(planIds, getUserOrganId());
|
||||||
|
|
||||||
@@ -493,10 +443,6 @@ public class PlanServiceImpl implements PlanService {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 根据排单ID查询ES中的优化数据
|
|
||||||
List<OptimizeBoardModelDO> optimizeBoardModelDOS = esUtils.getEsDocument(FIELD_PLANID, planIds, planIds.size(), ORDER_OPTIMIZE_PLATE_MODEL.getIndex(), OptimizeBoardModelDO.class);
|
|
||||||
|
|
||||||
|
|
||||||
// 获取排单对应的订单的信息
|
// 获取排单对应的订单的信息
|
||||||
List<PlanOrderRespVO> planOrderRespVOS = orderMapper.selectPlanOrderList(planIds, getUserOrganId());
|
List<PlanOrderRespVO> planOrderRespVOS = orderMapper.selectPlanOrderList(planIds, getUserOrganId());
|
||||||
|
|
||||||
@@ -509,14 +455,8 @@ public class PlanServiceImpl implements PlanService {
|
|||||||
e.setPlateInfoList(getPlateInfoList(e.getId(), plateInfoVOS));
|
e.setPlateInfoList(getPlateInfoList(e.getId(), plateInfoVOS));
|
||||||
// 小板总数量
|
// 小板总数量
|
||||||
e.setPlateNum(getPlateNum(e.getId(), plateInfoVOS));
|
e.setPlateNum(getPlateNum(e.getId(), plateInfoVOS));
|
||||||
// 大板总数量
|
|
||||||
e.setGoodsCount(getOptimizeGoodsCount(e.getId(), optimizeBoardModelDOS));
|
|
||||||
// 大板开料数
|
|
||||||
e.setCutGoodsCount(getCutGoodsCount(e.getId(), optimizeBoardModelDOS));
|
|
||||||
// 小板优化数量
|
|
||||||
e.setOptimizePlateCount(getOptimizePlateCount(e.getId(), optimizeBoardModelDOS));
|
|
||||||
// 未优化小板数量
|
// 未优化小板数量
|
||||||
e.setUnOptimizePlateCount(e.getPlateNum() - e.getOptimizePlateCount());
|
e.setUnOptimizePlateCount(e.getPlateNum() - e.getOptimizedPlateNum());
|
||||||
// 订单信息
|
// 订单信息
|
||||||
e.setOrderList(getOrderList(e.getId(), planOrderRespVOS));
|
e.setOrderList(getOrderList(e.getId(), planOrderRespVOS));
|
||||||
});
|
});
|
||||||
@@ -1019,15 +959,13 @@ public class PlanServiceImpl implements PlanService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private List<PlanDO> validatePlanExists(List<Long> planIds) {
|
||||||
|
|
||||||
private List<PlanDO> validatePlanExists(List<Long> planIds ) {
|
|
||||||
|
|
||||||
List<PlanDO> planDOS = new ArrayList<>();
|
List<PlanDO> planDOS = new ArrayList<>();
|
||||||
for (Long planId : planIds) {
|
for (Long planId : planIds) {
|
||||||
PlanDO planDO = planMapper.selectById(planId);
|
PlanDO planDO = planMapper.selectById(planId);
|
||||||
if(ObjectUtils.isEmpty(planDO)){
|
if (ObjectUtils.isEmpty(planDO)) {
|
||||||
throw new ServiceException(PLAN_NOT_DATA_EXISTS,planId);
|
throw new ServiceException(PLAN_NOT_DATA_EXISTS, planId);
|
||||||
}
|
}
|
||||||
planDOS.add(planDO);
|
planDOS.add(planDO);
|
||||||
}
|
}
|
||||||
@@ -1138,25 +1076,7 @@ public class PlanServiceImpl implements PlanService {
|
|||||||
|
|
||||||
List<Long> deletePlanIds = deleteOrderPlateIds.stream().map(OrderPlateIds::getPlanId).distinct().toList();
|
List<Long> deletePlanIds = deleteOrderPlateIds.stream().map(OrderPlateIds::getPlanId).distinct().toList();
|
||||||
|
|
||||||
List<PlanDO> planDOS = validatePlanExists(deletePlanIds);
|
validatePlanExists(deletePlanIds);
|
||||||
|
|
||||||
List<Long> processIds = new ArrayList<>();
|
|
||||||
planDOS.forEach(f->{
|
|
||||||
if (f.getStatus().equals(PlanStatusEnum.OPENED.getStatus())) {
|
|
||||||
throw new ServiceException(PLAN_PLATE_IS_ALL_CUT,f.getId());
|
|
||||||
}
|
|
||||||
processIds.add(Optional.ofNullable(f.getProcessId()).orElseThrow(() -> new ServiceException(PLAN_PROCESS_CONFIG_IS_NULL,f.getId())));
|
|
||||||
});
|
|
||||||
|
|
||||||
Integer processSize = systemConfigApi.getProcessSizeByIds(processIds).getCheckedData();
|
|
||||||
|
|
||||||
for (PlanDO planDO : planDOS) {
|
|
||||||
if (planDO.getStatus().equals(PlanStatusEnum.OPENED.getStatus())) {
|
|
||||||
throw new ServiceException(PLAN_PLATE_IS_ALL_CUT,planDO.getId());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
List<Integer> plateStatus = Arrays.asList(OrderPlateCutStatusEnum.OPENING.getStatus(),OrderPlateCutStatusEnum.OPENED.getStatus());
|
List<Integer> plateStatus = Arrays.asList(OrderPlateCutStatusEnum.OPENING.getStatus(),OrderPlateCutStatusEnum.OPENED.getStatus());
|
||||||
|
|
||||||
@@ -1169,7 +1089,7 @@ public class PlanServiceImpl implements PlanService {
|
|||||||
AssertUtils.notEmpty(deleteOrderIds, DELETE_PLAN_PLATE_DATA_ERROR);
|
AssertUtils.notEmpty(deleteOrderIds, DELETE_PLAN_PLATE_DATA_ERROR);
|
||||||
|
|
||||||
// 查询需要删除的小板对应的信息
|
// 查询需要删除的小板对应的信息
|
||||||
List<PlateDO> plateDOS = plateMapper.selectBatchIds(deletePlateIds);
|
List<PlateDO> plateDOS = plateMapper.selectByIds(deletePlateIds);
|
||||||
|
|
||||||
AssertUtils.notEmpty(plateDOS, DELETE_PLAN_PLATE_DATA_ERROR);
|
AssertUtils.notEmpty(plateDOS, DELETE_PLAN_PLATE_DATA_ERROR);
|
||||||
|
|
||||||
@@ -1180,63 +1100,12 @@ public class PlanServiceImpl implements PlanService {
|
|||||||
// 移除排单板件 & 重新计算订单和材质下的数量和面积
|
// 移除排单板件 & 重新计算订单和材质下的数量和面积
|
||||||
removePlanOrderAndGoodsPlate(plateDOS, deleteOrderIds);
|
removePlanOrderAndGoodsPlate(plateDOS, deleteOrderIds);
|
||||||
|
|
||||||
// 删除优化生产中未开料的小板的优化数据
|
|
||||||
List<OptimizeBoardModelDO> optimizeBoardModelDOS = esUtils.getEsDocument(FIELD_PLANID, deletePlanIds, processSize, ORDER_OPTIMIZE_PLATE_MODEL.getIndex(), OptimizeBoardModelDO.class);
|
|
||||||
|
|
||||||
if(CollUtil.isNotEmpty(optimizeBoardModelDOS)){
|
|
||||||
|
|
||||||
|
|
||||||
List<String> plateNo = plateDOS.stream().map(PlateDO::getPlateNo).toList();
|
|
||||||
|
|
||||||
optimizeBoardModelDOS.forEach(f->{
|
|
||||||
|
|
||||||
String blockPlaceInfo = Optional.ofNullable(f.getBlockPlaceInfo()).orElseThrow(() -> new ServiceException(ORDER_PLAN_OPTIMIZE_ERROR));
|
|
||||||
|
|
||||||
String remainBoardInfo = Optional.ofNullable(f.getRemainBoardInfo()).orElseThrow(() -> new ServiceException(ORDER_PLAN_OPTIMIZE_ERROR));
|
|
||||||
|
|
||||||
List<PlatePlaceInfo> asJsonObject = new ArrayList<>(parseArray(blockPlaceInfo,PlatePlaceInfo.class));
|
|
||||||
|
|
||||||
List<PlatePlaceInfo> platePlaceInfos = asJsonObject.stream()
|
|
||||||
.filter(fi -> !plateNo.contains(fi.getBo()))
|
|
||||||
.toList();
|
|
||||||
|
|
||||||
f.setBlockPlaceInfo(toJsonString(platePlaceInfos));
|
|
||||||
f.setPlaceBlockNumber((long) platePlaceInfos.size());
|
|
||||||
|
|
||||||
|
|
||||||
List<RemainBoardInfo> remainBoardInfos = new ArrayList<>(parseArray(remainBoardInfo, RemainBoardInfo.class));
|
|
||||||
|
|
||||||
remainBoardInfos.forEach(r->{
|
|
||||||
r.getPlaceBoardList().forEach(p->{
|
|
||||||
p.setBlocks(p.getBlocks().stream()
|
|
||||||
.filter(bl->!plateNo.contains(bl.getBlockId()))
|
|
||||||
.toList());
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
f.setRemainBoardInfo(toJsonString(remainBoardInfos));
|
|
||||||
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
try {
|
|
||||||
|
|
||||||
esDocumentService.bulkUpdate(ORDER_OPTIMIZE_PLATE_MODEL.getIndex(), optimizeBoardModelDOS);
|
|
||||||
|
|
||||||
}catch (Exception e){
|
|
||||||
log.error(e.getMessage(), e);
|
|
||||||
throw new ServiceException(ES_DATA_ERROR);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// 删除已无排单板件的排单
|
// 删除已无排单板件的排单
|
||||||
List<Long> deleteEmptyPlanIdList = planMapper.countDeletePlanPlate(deletePlanIds, deleteOrderIds, organId)
|
List<Long> deleteEmptyPlanIdList = planMapper.countDeletePlanPlate(deletePlanIds, deleteOrderIds, organId)
|
||||||
.stream().filter(m -> m.getCount() == 0).map(OrderPlanPlateStatisticsRespVO::getPlanId).distinct().collect(Collectors.toList());
|
.stream().filter(m -> m.getCount() == 0).map(OrderPlanPlateStatisticsRespVO::getPlanId).distinct().collect(Collectors.toList());
|
||||||
|
|
||||||
if (CollUtil.isNotEmpty(deleteEmptyPlanIdList)) {
|
if (CollUtil.isNotEmpty(deleteEmptyPlanIdList)) {
|
||||||
planMapper.deleteBatchIds(deleteEmptyPlanIdList);
|
planMapper.deleteByIds(deleteEmptyPlanIdList);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 更新排单下的订单列表
|
// 更新排单下的订单列表
|
||||||
@@ -1257,29 +1126,20 @@ public class PlanServiceImpl implements PlanService {
|
|||||||
.set(PlanDO::getOrderNos, orderNos));
|
.set(PlanDO::getOrderNos, orderNos));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 修改排单加工方案的优化状态
|
|
||||||
updateProcessSchemeStatus(deletePlanIds);
|
|
||||||
|
|
||||||
// 删除排单对应的优化生产数据
|
|
||||||
if (CollUtil.isNotEmpty(deleteEmptyPlanIdList)) {
|
|
||||||
esUtils.deleteEsDocument(FIELD_PLANID, deleteEmptyPlanIdList, ORDER_OPTIMIZE_PLATE_MODEL.getIndex());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void insertPlanPlate(List<OrderPlateIds> insertOrderPlateIds,PlanActualGoodsModelDO planActualGoodsModelDO){
|
public void insertPlanPlate(List<OrderPlateIds> insertOrderPlateIds, PlanActualGoodsModelDO planActualGoodsModelDO) {
|
||||||
|
|
||||||
// 后面还需要看看是否需要进行混单的判断
|
// 后面还需要看看是否需要进行混单的判断
|
||||||
List<Long> insertPlanIds = insertOrderPlateIds.stream().map(OrderPlateIds::getPlanId).distinct().toList();
|
List<Long> insertPlanIds = insertOrderPlateIds.stream().map(OrderPlateIds::getPlanId).distinct().toList();
|
||||||
|
|
||||||
|
|
||||||
PlanDO planDO = validatePlan(insertPlanIds.get(0));
|
PlanDO planDO = validatePlan(insertPlanIds.get(0));
|
||||||
|
|
||||||
Set<Long> orderIds = insertOrderPlateIds.stream().map(OrderPlateIds::getOrderId).collect(Collectors.toSet());
|
Set<Long> orderIds = insertOrderPlateIds.stream().map(OrderPlateIds::getOrderId).collect(Collectors.toSet());
|
||||||
|
|
||||||
if(planActualGoodsModelDO != null){
|
if (planActualGoodsModelDO != null) {
|
||||||
|
|
||||||
List<Integer> mixedTypes = insertOrderPlateIds.stream().map(OrderPlateIds::getMixedType).distinct().toList();
|
List<Integer> mixedTypes = insertOrderPlateIds.stream().map(OrderPlateIds::getMixedType).distinct().toList();
|
||||||
|
|
||||||
@@ -1287,13 +1147,10 @@ public class PlanServiceImpl implements PlanService {
|
|||||||
|
|
||||||
planDO.setType(PlanTypeEnum.MIXEDORDERPLAN.getType());
|
planDO.setType(PlanTypeEnum.MIXEDORDERPLAN.getType());
|
||||||
planDO.setFilter(mixedType);
|
planDO.setFilter(mixedType);
|
||||||
|
|
||||||
esUtils.saveEsDocument(PLAN_ACTUAL_GOODS_MODEL.getIndex(), Collections.singletonList(planActualGoodsModelDO));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 已开料排单修改为开料中
|
// 已开料排单修改为开料中
|
||||||
if(planDO.getStatus().equals(PlanStatusEnum.OPENED.getStatus())){
|
if (planDO.getStatus().equals(PlanStatusEnum.OPENED.getStatus())) {
|
||||||
|
|
||||||
planDO.setStatus(PlanStatusEnum.OPENING.getStatus());
|
planDO.setStatus(PlanStatusEnum.OPENING.getStatus());
|
||||||
planDO.setProduceTime(null);
|
planDO.setProduceTime(null);
|
||||||
@@ -1305,54 +1162,19 @@ public class PlanServiceImpl implements PlanService {
|
|||||||
planDO.setOrderNos(orderIds.stream().distinct().toList().toString());
|
planDO.setOrderNos(orderIds.stream().distinct().toList().toString());
|
||||||
|
|
||||||
planMapper.update(new LambdaUpdateWrapper<PlanDO>()
|
planMapper.update(new LambdaUpdateWrapper<PlanDO>()
|
||||||
.eq(PlanDO::getOrganId,getUserOrganId())
|
.eq(PlanDO::getOrganId, getUserOrganId())
|
||||||
.eq(PlanDO::getId,planDO.getId())
|
.eq(PlanDO::getId, planDO.getId())
|
||||||
|
|
||||||
.set(PlanDO::getProduceTime,planDO.getProduceTime())
|
.set(PlanDO::getProduceTime, planDO.getProduceTime())
|
||||||
.set(PlanDO::getStatus,planDO.getStatus())
|
.set(PlanDO::getStatus, planDO.getStatus())
|
||||||
.set(PlanDO::getType,planDO.getType())
|
.set(PlanDO::getType, planDO.getType())
|
||||||
.set(PlanDO::getOrderNos,planDO.getOrderNos())
|
.set(PlanDO::getOrderNos, planDO.getOrderNos())
|
||||||
.set(PlanDO::getFilter,planDO.getFilter())
|
.set(PlanDO::getFilter, planDO.getFilter())
|
||||||
);
|
);
|
||||||
|
|
||||||
// 新增排单板件 & 重新计算订单和材质下的数量和面积
|
// 新增排单板件 & 重新计算订单和材质下的数量和面积
|
||||||
insertPlanOrderAndGoodsPlate(planDO.getId(), insertOrderPlateIds, orderIds);
|
insertPlanOrderAndGoodsPlate(planDO.getId(), insertOrderPlateIds, orderIds);
|
||||||
|
|
||||||
// 有新添加的小板,修改优化信息的字段信息
|
|
||||||
try {
|
|
||||||
|
|
||||||
List<FieldValue> fieldValues = insertPlanIds.stream().map(FieldValue::of).toList();
|
|
||||||
|
|
||||||
UpdateByQueryRequest.Builder builder = new UpdateByQueryRequest.Builder();
|
|
||||||
|
|
||||||
builder.index(ORDER_OPTIMIZE_PLATE_MODEL.getIndex())
|
|
||||||
.query(qb -> qb.bool(bq -> bq.filter(f->{
|
|
||||||
f.terms(t->t.field(FIELD_PLANID).terms(e->e.value(fieldValues)));
|
|
||||||
return f;
|
|
||||||
})
|
|
||||||
))
|
|
||||||
.script(s -> s.inline(i -> i
|
|
||||||
.source("ctx._source.isNewInsertPlate = params.new_value")
|
|
||||||
.params(ES_FIELD_NEWVALUE, JsonData.of(Boolean.TRUE))
|
|
||||||
));
|
|
||||||
|
|
||||||
UpdateByQueryRequest request = builder.build();
|
|
||||||
|
|
||||||
elasticsearchClient.updateByQuery(request);
|
|
||||||
|
|
||||||
}catch (Exception e){
|
|
||||||
log.error(e.getMessage(), e);
|
|
||||||
throw new ServiceException(ES_DATA_ERROR);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// 修改排单加工方案的优化状态
|
|
||||||
updateProcessSchemeStatus(insertPlanIds);
|
|
||||||
|
|
||||||
// 订单板材造型信息增加排单ID
|
|
||||||
// insertPlateModelPlanId(orderIds,insertPlateIds,insertPlanIds.get(0));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1834,11 +1656,16 @@ public class PlanServiceImpl implements PlanService {
|
|||||||
|
|
||||||
Set<Long> orderIdSet = new HashSet<>();
|
Set<Long> orderIdSet = new HashSet<>();
|
||||||
|
|
||||||
planActualGoodsLists.forEach(f -> {
|
long sort = System.currentTimeMillis();
|
||||||
|
|
||||||
|
for (PlanActualGoodsList f : planActualGoodsLists) {
|
||||||
|
|
||||||
// 查找和大板分类ID相同的小板的数据
|
// 查找和大板分类ID相同的小板的数据
|
||||||
List<SavePlanPlateList.PlateItemList> plateList = plateItemList.stream().filter(p -> f.getIds().contains(p.getId())).toList();
|
List<SavePlanPlateList.PlateItemList> plateList = plateItemList.stream().filter(p -> f.getIds().contains(p.getId())).toList();
|
||||||
|
|
||||||
|
// 累计排单板件数量
|
||||||
|
Integer planPlateNum = plateList.size();
|
||||||
|
|
||||||
Set<Long> planOrderIdSet = new HashSet<>();
|
Set<Long> planOrderIdSet = new HashSet<>();
|
||||||
Map<Long, List<Long>> goodsPlateIdMap = new HashMap<>();
|
Map<Long, List<Long>> goodsPlateIdMap = new HashMap<>();
|
||||||
for (SavePlanPlateList.PlateItemList savePlanPlate : plateList) {
|
for (SavePlanPlateList.PlateItemList savePlanPlate : plateList) {
|
||||||
@@ -1850,7 +1677,7 @@ public class PlanServiceImpl implements PlanService {
|
|||||||
|
|
||||||
// 累计商品id下的订单号
|
// 累计商品id下的订单号
|
||||||
List<Long> goodsPlateIdList = goodsPlateIdMap.get(savePlanPlate.getId());
|
List<Long> goodsPlateIdList = goodsPlateIdMap.get(savePlanPlate.getId());
|
||||||
if(CollUtil.isEmpty(goodsPlateIdList)) {
|
if (CollUtil.isEmpty(goodsPlateIdList)) {
|
||||||
goodsPlateIdList = new ArrayList<>();
|
goodsPlateIdList = new ArrayList<>();
|
||||||
goodsPlateIdList.add(savePlanPlate.getPlateId());
|
goodsPlateIdList.add(savePlanPlate.getPlateId());
|
||||||
goodsPlateIdMap.put(savePlanPlate.getId(), goodsPlateIdList);
|
goodsPlateIdMap.put(savePlanPlate.getId(), goodsPlateIdList);
|
||||||
@@ -1859,9 +1686,6 @@ public class PlanServiceImpl implements PlanService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AtomicLong sort = new AtomicLong(System.currentTimeMillis());
|
|
||||||
sort.addAndGet(1);
|
|
||||||
|
|
||||||
Long planId = (Long) identifierGenerator.nextId(null);
|
Long planId = (Long) identifierGenerator.nextId(null);
|
||||||
|
|
||||||
// 大板商品id
|
// 大板商品id
|
||||||
@@ -1870,7 +1694,7 @@ public class PlanServiceImpl implements PlanService {
|
|||||||
// 创建排单
|
// 创建排单
|
||||||
planDOS.add(PlanDO.builder()
|
planDOS.add(PlanDO.builder()
|
||||||
.id(planId)
|
.id(planId)
|
||||||
.sort(sort.get())
|
.sort(++sort)
|
||||||
.type(PlanTypeEnum.MIXEDORDERPLAN.getType())
|
.type(PlanTypeEnum.MIXEDORDERPLAN.getType())
|
||||||
.processId(processId)
|
.processId(processId)
|
||||||
.processName(processName)
|
.processName(processName)
|
||||||
@@ -1880,12 +1704,13 @@ public class PlanServiceImpl implements PlanService {
|
|||||||
.operator(loginUser.getNickname())
|
.operator(loginUser.getNickname())
|
||||||
.planTime(LocalDateTime.now())
|
.planTime(LocalDateTime.now())
|
||||||
.goodsId(goodsId)
|
.goodsId(goodsId)
|
||||||
|
.plateNum(planPlateNum)
|
||||||
.build());
|
.build());
|
||||||
|
|
||||||
// 更新板件排单id & 统计更新order_goods的数量和面积
|
// 更新板件排单id & 统计更新order_goods的数量和面积
|
||||||
computePlatePlanAndComputeOrderGoodsInfo(planId, goodsPlateIdMap);
|
computePlatePlanAndComputeOrderGoodsInfo(planId, goodsPlateIdMap);
|
||||||
|
|
||||||
});
|
}
|
||||||
// 统计更新orders的小板数量和面积
|
// 统计更新orders的小板数量和面积
|
||||||
computeOrderInfo(orderIdSet);
|
computeOrderInfo(orderIdSet);
|
||||||
}
|
}
|
||||||
@@ -1901,16 +1726,20 @@ public class PlanServiceImpl implements PlanService {
|
|||||||
LoginUser loginUser,
|
LoginUser loginUser,
|
||||||
Integer planType){
|
Integer planType){
|
||||||
|
|
||||||
AtomicLong sort = new AtomicLong(System.currentTimeMillis());
|
long sort = System.currentTimeMillis();
|
||||||
|
|
||||||
Set<Long> orderIdSet = new HashSet<>();
|
Set<Long> orderIdSet = new HashSet<>();
|
||||||
|
|
||||||
// 进行数据处理:value 里为 大板的分类ID
|
// 进行数据处理:value 里为 大板的分类ID
|
||||||
grouped.forEach((key, value) -> {
|
for (Map.Entry<String, List<Long>> entry : grouped.entrySet()) {
|
||||||
|
List<Long> value = entry.getValue();
|
||||||
|
|
||||||
// 查找和大板分类ID相同的小板的数据
|
// 查找和大板分类ID相同的小板的数据
|
||||||
List<SavePlanPlateList.PlateItemList> plateList = plateItemList.stream().filter(p -> value.contains(p.getId())).toList();
|
List<SavePlanPlateList.PlateItemList> plateList = plateItemList.stream().filter(p -> value.contains(p.getId())).toList();
|
||||||
|
|
||||||
|
// 累计排单板件数
|
||||||
|
Integer planPlateNum = plateList.size();
|
||||||
|
|
||||||
Set<Long> planOrderIdSet = new HashSet<>();
|
Set<Long> planOrderIdSet = new HashSet<>();
|
||||||
Map<Long, List<Long>> goodsPlateIdMap = new HashMap<>();
|
Map<Long, List<Long>> goodsPlateIdMap = new HashMap<>();
|
||||||
for (SavePlanPlateList.PlateItemList savePlanPlate : plateList) {
|
for (SavePlanPlateList.PlateItemList savePlanPlate : plateList) {
|
||||||
@@ -1931,14 +1760,12 @@ public class PlanServiceImpl implements PlanService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sort.addAndGet(1);
|
|
||||||
|
|
||||||
Long planId = (Long) identifierGenerator.nextId(null);
|
Long planId = (Long) identifierGenerator.nextId(null);
|
||||||
|
|
||||||
// 创建排单
|
// 创建排单
|
||||||
planDOS.add(PlanDO.builder()
|
planDOS.add(PlanDO.builder()
|
||||||
.id(planId)
|
.id(planId)
|
||||||
.sort(sort.get())
|
.sort(++sort)
|
||||||
.type(planType)
|
.type(planType)
|
||||||
.processId(processId)
|
.processId(processId)
|
||||||
.processName(processName)
|
.processName(processName)
|
||||||
@@ -1947,11 +1774,12 @@ public class PlanServiceImpl implements PlanService {
|
|||||||
.status(PlanStatusEnum.NOCUTTING.getStatus())
|
.status(PlanStatusEnum.NOCUTTING.getStatus())
|
||||||
.operator(loginUser.getNickname())
|
.operator(loginUser.getNickname())
|
||||||
.planTime(LocalDateTime.now())
|
.planTime(LocalDateTime.now())
|
||||||
|
.plateNum(planPlateNum)
|
||||||
.build());
|
.build());
|
||||||
|
|
||||||
// 更新板件排单id & 统计更新order_goods的数量和面积
|
// 更新板件排单id & 统计更新order_goods的数量和面积
|
||||||
computePlatePlanAndComputeOrderGoodsInfo(planId, goodsPlateIdMap);
|
computePlatePlanAndComputeOrderGoodsInfo(planId, goodsPlateIdMap);
|
||||||
});
|
}
|
||||||
// 统计更新orders的小板数量和面积
|
// 统计更新orders的小板数量和面积
|
||||||
computeOrderInfo(orderIdSet);
|
computeOrderInfo(orderIdSet);
|
||||||
}
|
}
|
||||||
|
|||||||
+62
@@ -1477,6 +1477,68 @@
|
|||||||
</foreach>
|
</foreach>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<update id="updatePlanPlateOptimizeStatus">
|
||||||
|
UPDATE order_plate op
|
||||||
|
SET op.is_optimized = true
|
||||||
|
WHERE op.deleted = false
|
||||||
|
AND op.is_optimized = false
|
||||||
|
AND op.order_id in
|
||||||
|
<foreach collection="orderIds" item="orderId" open="(" close=")" separator=",">
|
||||||
|
#{orderId}
|
||||||
|
</foreach>
|
||||||
|
AND op.plan_id = #{planId}
|
||||||
|
AND op.plate_no in
|
||||||
|
<foreach collection="plateNos" item="plateNo" open="(" close=")" separator=",">
|
||||||
|
#{plateNo}
|
||||||
|
</foreach>
|
||||||
|
ORDER BY op.id
|
||||||
|
LIMIT 1000;
|
||||||
|
</update>
|
||||||
|
|
||||||
|
<update id="updatePlanPlateCutStatus">
|
||||||
|
UPDATE order_plate op
|
||||||
|
SET op.is_cutted = 2
|
||||||
|
WHERE op.deleted = false
|
||||||
|
AND op.is_cutted = 0
|
||||||
|
AND op.order_id in
|
||||||
|
<foreach collection="orderIds" item="orderId" open="(" close=")" separator=",">
|
||||||
|
#{orderId}
|
||||||
|
</foreach>
|
||||||
|
AND op.plan_id = #{planId}
|
||||||
|
AND op.plate_no in
|
||||||
|
<foreach collection="plateNos" item="plateNo" open="(" close=")" separator=",">
|
||||||
|
#{plateNo}
|
||||||
|
</foreach>
|
||||||
|
ORDER BY op.id
|
||||||
|
LIMIT 1000;
|
||||||
|
</update>
|
||||||
|
|
||||||
|
<update id="resetPlanPlateOptimizeStatus">
|
||||||
|
UPDATE order_plate op
|
||||||
|
SET op.is_optimized = false
|
||||||
|
WHERE op.deleted = false
|
||||||
|
AND op.is_optimized = true
|
||||||
|
AND op.order_id in
|
||||||
|
<foreach collection="orderIds" item="orderId" open="(" close=")" separator=",">
|
||||||
|
#{orderId}
|
||||||
|
</foreach>
|
||||||
|
AND op.plan_id = #{planId}
|
||||||
|
ORDER BY op.id
|
||||||
|
LIMIT 1000;
|
||||||
|
</update>
|
||||||
|
|
||||||
|
<select id="selectPlanAllCuttedOrderIdList" resultType="java.lang.Long">
|
||||||
|
SELECT distinct o.id
|
||||||
|
FROM orders o
|
||||||
|
WHERE NOT EXISTS (SELECT 1
|
||||||
|
FROM order_plate op
|
||||||
|
WHERE op.order_id = o.id
|
||||||
|
AND op.plan_id = #{planId}
|
||||||
|
AND op.deleted = false
|
||||||
|
AND op.is_cutted in (0, 1))
|
||||||
|
AND o.deleted = false
|
||||||
|
</select>
|
||||||
|
|
||||||
<resultMap id="orderItemMap" type="com.cf.imes.module.executor.controller.admin.manage.query.vo.pack.PackageDetailsRespVO">
|
<resultMap id="orderItemMap" type="com.cf.imes.module.executor.controller.admin.manage.query.vo.pack.PackageDetailsRespVO">
|
||||||
<result property="packageNo" column="packageId"/>
|
<result property="packageNo" column="packageId"/>
|
||||||
<result property="roomName" column="roomName"/>
|
<result property="roomName" column="roomName"/>
|
||||||
|
|||||||
Reference in New Issue
Block a user