From b8448a1e5fd1800049cc56594c495c31e3bc7118 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B6=9B?= Date: Thu, 14 May 2026 19:39:17 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E4=BA=A7=E7=AE=A1=E7=90=86=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../desk/produce/pojo/entity/WorkOrder.java | 4 +- .../desk/quality/pojo/dto/ReviewDutyDTO.java | 8 +- .../desk/quality/pojo/dto/ReviewFaultDTO.java | 8 +- .../desk/quality/pojo/dto/ReviewSheetDTO.java | 16 +- .../pojo/entity/WorkOrderEntity.java | 4 +- .../service/impl/YieldOrderServiceImpl.java | 2933 +++++++++-------- .../service/impl/WorkOrderServiceImpl.java | 55 +- .../service/impl/ReviewSheetServiceImpl.java | 9 +- 8 files changed, 1523 insertions(+), 1514 deletions(-) diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkOrder.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkOrder.java index 217cb231..1544f151 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkOrder.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/entity/WorkOrder.java @@ -398,9 +398,9 @@ public class WorkOrder extends BaseEntity { @Schema(description = "打印编码") private String printCode; /** - * 关闭时间 + * 交接时间 */ - @Schema(description = "关闭时间") + @Schema(description = "交接时间") private Date handoverTime; /** * 关闭时间 diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/dto/ReviewDutyDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/dto/ReviewDutyDTO.java index 70b0d707..4d4c5879 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/dto/ReviewDutyDTO.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/dto/ReviewDutyDTO.java @@ -1,6 +1,3 @@ -/** - * Author: Tom Shuo - */ package org.springblade.desk.quality.pojo.dto; import lombok.Data; @@ -16,10 +13,7 @@ import java.io.Serial; * @since 2026-01-06 */ @Data -@EqualsAndHashCode(callSuper = true) -public class ReviewDutyDTO extends ReviewDuty { - @Serial - private static final long serialVersionUID = 1L; +public class ReviewDutyDTO { /** * 审理单Id */ diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/dto/ReviewFaultDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/dto/ReviewFaultDTO.java index 4529ce19..fd977236 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/dto/ReviewFaultDTO.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/dto/ReviewFaultDTO.java @@ -1,6 +1,3 @@ -/** - * Author: Tom Shuo - */ package org.springblade.desk.quality.pojo.dto; import lombok.Data; @@ -16,10 +13,7 @@ import java.io.Serial; * @since 2026-01-06 */ @Data -@EqualsAndHashCode(callSuper = true) -public class ReviewFaultDTO extends ReviewFault { - @Serial - private static final long serialVersionUID = 1L; +public class ReviewFaultDTO { /** * 审理单Id */ diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/dto/ReviewSheetDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/dto/ReviewSheetDTO.java index d5d1860a..216fa936 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/dto/ReviewSheetDTO.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/dto/ReviewSheetDTO.java @@ -1,13 +1,6 @@ -/** - * Author: Tom Shuo - */ package org.springblade.desk.quality.pojo.dto; import lombok.Data; -import lombok.EqualsAndHashCode; -import org.springblade.desk.quality.pojo.entity.ReviewSheet; - -import java.io.Serial; /** * [生产处置单] 数据传输对象实体类 @@ -16,10 +9,7 @@ import java.io.Serial; * @since 2026-01-06 */ @Data -@EqualsAndHashCode(callSuper = true) -public class ReviewSheetDTO extends ReviewSheet { - @Serial - private static final long serialVersionUID = 1L; +public class ReviewSheetDTO{ /** * 批次号 @@ -113,5 +103,9 @@ public class ReviewSheetDTO extends ReviewSheet { * 处置单类型(1-提交质保/2-提交工艺/3-提交设计) */ private String hearDis; + /** + * 检验时间 + */ + private String checkDate; } diff --git a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/WorkOrderEntity.java b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/WorkOrderEntity.java index db6fc10f..d75f0246 100644 --- a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/WorkOrderEntity.java +++ b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/pojo/entity/WorkOrderEntity.java @@ -303,9 +303,9 @@ public class WorkOrderEntity extends BaseEntity { @Schema(description = "打印编码") private String printCode; /** - * 关闭时间 + * 交接时间 */ - @Schema(description = "关闭时间") + @Schema(description = "交接时间") private Date handoverTime; /** * 关闭时间 diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java index bd6ff2a6..995e918a 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/YieldOrderServiceImpl.java @@ -80,304 +80,304 @@ import java.util.stream.Collectors; @Service public class YieldOrderServiceImpl extends BaseServiceImpl implements IYieldOrderService { - @Autowired - private IYieldOrderCraftService yieldOrderCraftService; - - @Autowired - private IDsPartService dsPartService; - - @Autowired - private IDsCraftService dsCraftService; - - @Autowired - private IDsProcessService dsProcessService; - - @Autowired - private WorkOrderMapper workOrderMapper; - - @Autowired - private YieldPlanMapper yieldPlanMapper; - - @Autowired - private IErpYieldOrderClient yieldOrderClient; - - @Autowired - private IPrYieldOrderService yieldOrderService; - - @Autowired - private IQualityGradeService qualityGradeService; - - @Autowired - private IDsPartRelationService partRelationService; - - @Autowired - private IDsPartVersionService partVersionService; - - @Autowired - private MoldDemandMapper moldDemandMapper; - - @Autowired - private IPlateGoodsRecordService plateGoodsRecordService; - - @Autowired - private IWorkCenterService workCenterService; - - @Lazy - @Autowired - private IDsTaskingService dsTaskingService; - - @Autowired - private ILocallyPlatedPartService locallyPlatedPartService; - - @Value("${business.oldMes.url}") - private String oldMesUrl; - @Value("${business.oldMes.syncOrderList}") - private String addrSyncOrderList; - @Value("${business.oldMes.pushSyncResult}") - private String addrPushSyncResult; - - @Override - public IPage selectPage(IPage page, YieldOrderDto entity) { - List dataList = baseMapper.selectPage(page, entity, null); - return page.setRecords(dataList); - } - - @Override - public IPage selectPageElectroplate(IPage page, YieldOrderDto entity) { - List yieldTypeList = new ArrayList<>(); - yieldTypeList.add(YieldOrderEnum.YIELD_TYPE_1); - List dataList = baseMapper.selectPage(page, entity, yieldTypeList); - return page.setRecords(dataList); - } - - @Override - public IPage selectPageSintering(IPage page, YieldOrderDto entity) { - List yieldTypeList = new ArrayList<>(); - if (ObjectUtil.isEmpty(entity.getYieldType())) { - yieldTypeList.add(YieldOrderEnum.YIELD_TYPE_2); - yieldTypeList.add(YieldOrderEnum.YIELD_TYPE_3); - yieldTypeList.add(YieldOrderEnum.YIELD_TYPE_4); - yieldTypeList.add(YieldOrderEnum.YIELD_TYPE_5); - yieldTypeList.add(YieldOrderEnum.YIELD_TYPE_6); - } else { - yieldTypeList.add(YieldOrderEnum.getEnum(entity.getYieldType())); - } - - List dataList = baseMapper.selectPage(page, entity, yieldTypeList); - return page.setRecords(dataList); - } - - @Override - public IPage pageMaterialApply(IPage page, Long wcId, String plateGoodsCode, Integer overHalfMon) { - // 只有电镀的需要镀层物料,故只查询电镀的订单 - List yieldTypeList = new ArrayList<>(); - yieldTypeList.add(YieldOrderEnum.YIELD_TYPE_1); - - // 只有未开始加工的订单需要申请,已加工及之后状态的不需要申请 - List yieldStatusList = new ArrayList<>(); - yieldStatusList.add(YieldOrderEnum.STATUS_NORMAL); - yieldStatusList.add(YieldOrderEnum.STATUS_EXCEPTION); - yieldStatusList.add(YieldOrderEnum.STATUS_NO_ISSUED); - yieldStatusList.add(YieldOrderEnum.STATUS_APS); - yieldStatusList.add(YieldOrderEnum.STATUS_PROCESS_WAITING); - - YieldOrder entity = new YieldOrder(); - entity.setWorkCenterId(wcId); - // TODO 1. 金钾银钾如何区分,使用工艺编制中的物料编号,其中只有金钾、银钾的选项 - List dataList = baseMapper.pageMaterialApply(page, wcId, plateGoodsCode, overHalfMon, yieldTypeList, yieldStatusList); - return page.setRecords(dataList); - } - - @Override - public List findByPartCodeAndMemo(String partCode, String memo) { - LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(YieldOrder.class) - .eq(YieldOrder::getIsDeleted, CommonConstant.DELETE_FALSE) - .eq(YieldOrder::getPartCode, partCode) - .eq(YieldOrder::getMemo, memo); - List yieldOrderList = baseMapper.selectList(queryWrapper); - return yieldOrderList; - } - - @Override - public String dataVerify(List ids) { - // 先根据ID查询订单列表 - log.info("先根据ID查询订单列表:{}",ids); - LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(YieldOrder.class).eq(YieldOrder::getIsDeleted, CommonConstant.DELETE_FALSE).in(YieldOrder::getId, ids); - List yieldOrderList = baseMapper.selectList(queryWrapper); - - // 遍历订单列表,根据异常钻状态,判断调用的校验方法 - log.info("遍历订单列表,根据异常钻状态,判断调用的校验方法"); - for (YieldOrder yieldOrder : yieldOrderList) { - if (YieldOrderEnum.VALIDATION_NO.getCode() == yieldOrder.getValidationResult() || YieldOrderEnum.VALIDATION_RESULT_LESS_DATA.getCode() == yieldOrder.getValidationResult()) { - // 进行数据校验,验证不通过,不进行后续验证,直接返回; - log.info("进行数据校验,验证不通过,不进行后续验证,直接返回"); - if (!this.verifyYieldOrderData(yieldOrder)) { - continue; - } - // 进行工艺校验,验证不通过,不进行后续验证,直接返回; - log.info("进行工艺校验,验证不通过,不进行后续验证,直接返回"); - if (!this.verifyYieldOrderCraft(yieldOrder)) { - continue; - } - // 进行资源校验,验证不通过,不进行后续验证,直接返回; + @Autowired + private IYieldOrderCraftService yieldOrderCraftService; + + @Autowired + private IDsPartService dsPartService; + + @Autowired + private IDsCraftService dsCraftService; + + @Autowired + private IDsProcessService dsProcessService; + + @Autowired + private WorkOrderMapper workOrderMapper; + + @Autowired + private YieldPlanMapper yieldPlanMapper; + + @Autowired + private IErpYieldOrderClient yieldOrderClient; + + @Autowired + private IPrYieldOrderService yieldOrderService; + + @Autowired + private IQualityGradeService qualityGradeService; + + @Autowired + private IDsPartRelationService partRelationService; + + @Autowired + private IDsPartVersionService partVersionService; + + @Autowired + private MoldDemandMapper moldDemandMapper; + + @Autowired + private IPlateGoodsRecordService plateGoodsRecordService; + + @Autowired + private IWorkCenterService workCenterService; + + @Lazy + @Autowired + private IDsTaskingService dsTaskingService; + + @Autowired + private ILocallyPlatedPartService locallyPlatedPartService; + + @Value("${business.oldMes.url}") + private String oldMesUrl; + @Value("${business.oldMes.syncOrderList}") + private String addrSyncOrderList; + @Value("${business.oldMes.pushSyncResult}") + private String addrPushSyncResult; + + @Override + public IPage selectPage(IPage page, YieldOrderDto entity) { + List dataList = baseMapper.selectPage(page, entity, null); + return page.setRecords(dataList); + } + + @Override + public IPage selectPageElectroplate(IPage page, YieldOrderDto entity) { + List yieldTypeList = new ArrayList<>(); + yieldTypeList.add(YieldOrderEnum.YIELD_TYPE_1); + List dataList = baseMapper.selectPage(page, entity, yieldTypeList); + return page.setRecords(dataList); + } + + @Override + public IPage selectPageSintering(IPage page, YieldOrderDto entity) { + List yieldTypeList = new ArrayList<>(); + if (ObjectUtil.isEmpty(entity.getYieldType())) { + yieldTypeList.add(YieldOrderEnum.YIELD_TYPE_2); + yieldTypeList.add(YieldOrderEnum.YIELD_TYPE_3); + yieldTypeList.add(YieldOrderEnum.YIELD_TYPE_4); + yieldTypeList.add(YieldOrderEnum.YIELD_TYPE_5); + yieldTypeList.add(YieldOrderEnum.YIELD_TYPE_6); + } else { + yieldTypeList.add(YieldOrderEnum.getEnum(entity.getYieldType())); + } + + List dataList = baseMapper.selectPage(page, entity, yieldTypeList); + return page.setRecords(dataList); + } + + @Override + public IPage pageMaterialApply(IPage page, Long wcId, String plateGoodsCode, Integer overHalfMon) { + // 只有电镀的需要镀层物料,故只查询电镀的订单 + List yieldTypeList = new ArrayList<>(); + yieldTypeList.add(YieldOrderEnum.YIELD_TYPE_1); + + // 只有未开始加工的订单需要申请,已加工及之后状态的不需要申请 + List yieldStatusList = new ArrayList<>(); + yieldStatusList.add(YieldOrderEnum.STATUS_NORMAL); + yieldStatusList.add(YieldOrderEnum.STATUS_EXCEPTION); + yieldStatusList.add(YieldOrderEnum.STATUS_NO_ISSUED); + yieldStatusList.add(YieldOrderEnum.STATUS_APS); + yieldStatusList.add(YieldOrderEnum.STATUS_PROCESS_WAITING); + + YieldOrder entity = new YieldOrder(); + entity.setWorkCenterId(wcId); + // TODO 1. 金钾银钾如何区分,使用工艺编制中的物料编号,其中只有金钾、银钾的选项 + List dataList = baseMapper.pageMaterialApply(page, wcId, plateGoodsCode, overHalfMon, yieldTypeList, yieldStatusList); + return page.setRecords(dataList); + } + + @Override + public List findByPartCodeAndMemo(String partCode, String memo) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(YieldOrder.class) + .eq(YieldOrder::getIsDeleted, CommonConstant.DELETE_FALSE) + .eq(YieldOrder::getPartCode, partCode) + .eq(YieldOrder::getMemo, memo); + List yieldOrderList = baseMapper.selectList(queryWrapper); + return yieldOrderList; + } + + @Override + public String dataVerify(List ids) { + // 先根据ID查询订单列表 + log.info("先根据ID查询订单列表:{}", ids); + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(YieldOrder.class).eq(YieldOrder::getIsDeleted, CommonConstant.DELETE_FALSE).in(YieldOrder::getId, ids); + List yieldOrderList = baseMapper.selectList(queryWrapper); + + // 遍历订单列表,根据异常钻状态,判断调用的校验方法 + log.info("遍历订单列表,根据异常钻状态,判断调用的校验方法"); + for (YieldOrder yieldOrder : yieldOrderList) { + if (YieldOrderEnum.VALIDATION_NO.getCode() == yieldOrder.getValidationResult() || YieldOrderEnum.VALIDATION_RESULT_LESS_DATA.getCode() == yieldOrder.getValidationResult()) { + // 进行数据校验,验证不通过,不进行后续验证,直接返回; + log.info("进行数据校验,验证不通过,不进行后续验证,直接返回"); + if (!this.verifyYieldOrderData(yieldOrder)) { + continue; + } + // 进行工艺校验,验证不通过,不进行后续验证,直接返回; + log.info("进行工艺校验,验证不通过,不进行后续验证,直接返回"); + if (!this.verifyYieldOrderCraft(yieldOrder)) { + continue; + } + // 进行资源校验,验证不通过,不进行后续验证,直接返回; // log.info("进行资源校验,验证不通过,不进行后续验证,直接返回;"); // if (!this.verifyYieldOrderResource(yieldOrder)) { // continue; // } - // 最后进行超期校验 + // 最后进行超期校验 // this.verifyYieldOrderDelivery(yieldOrder); - } else if (YieldOrderEnum.VALIDATION_RESULT_LESS_CRAFT.getCode() == yieldOrder.getValidationResult()) { - // 进行工艺校验,验证不通过,不进行后续验证,直接返回; - if (!this.verifyYieldOrderCraft(yieldOrder)) { - continue; - } - // 进行资源校验,验证不通过,不进行后续验证,直接返回; + } else if (YieldOrderEnum.VALIDATION_RESULT_LESS_CRAFT.getCode() == yieldOrder.getValidationResult()) { + // 进行工艺校验,验证不通过,不进行后续验证,直接返回; + if (!this.verifyYieldOrderCraft(yieldOrder)) { + continue; + } + // 进行资源校验,验证不通过,不进行后续验证,直接返回; // if (!this.verifyYieldOrderResource(yieldOrder)) { // continue; // } - // 最后进行超期校验 + // 最后进行超期校验 // this.verifyYieldOrderDelivery(yieldOrder); - } else if (YieldOrderEnum.VALIDATION_RESULT_LESS_RESOURCE.getCode() == yieldOrder.getValidationResult()) { - // 进行资源校验,验证不通过,不进行后续验证,直接返回; + } else if (YieldOrderEnum.VALIDATION_RESULT_LESS_RESOURCE.getCode() == yieldOrder.getValidationResult()) { + // 进行资源校验,验证不通过,不进行后续验证,直接返回; // if (!this.verifyYieldOrderResource(yieldOrder)) { // continue; // } - // 最后进行超期校验 + // 最后进行超期校验 // this.verifyYieldOrderDelivery(yieldOrder); - } - yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_PASS.getCode()); - this.updateById(yieldOrder); - - if(yieldOrder.getReceiveStatus() != null && - yieldOrder.getValidationResult().equals(YieldOrderEnum.VALIDATION_RESULT_PASS.getCode()) && - yieldOrder.getReceiveStatus().equals(YieldOrderEnum.RECEIVE_STATUS_YES.getCode())){ - //订单状态为验证完成并且已接收 进行分派 - boolean result = this.verifyYieldOrderResource(yieldOrder); - if(!result){ - throw new ServiceException("分派异常请及时处理"); - } - } - } + } + yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_PASS.getCode()); + this.updateById(yieldOrder); + + if (yieldOrder.getReceiveStatus() != null && + yieldOrder.getValidationResult().equals(YieldOrderEnum.VALIDATION_RESULT_PASS.getCode()) && + yieldOrder.getReceiveStatus().equals(YieldOrderEnum.RECEIVE_STATUS_YES.getCode())) { + //订单状态为验证完成并且已接收 进行分派 + boolean result = this.verifyYieldOrderResource(yieldOrder); + if (!result) { + throw new ServiceException("分派异常请及时处理"); + } + } + } - return "校验成功"; - } + return "校验成功"; + } + + @Override + public boolean confirmBatch(List ids) { + List yieldOrderList = new ArrayList<>(); + for (Long id : ids) { + YieldOrder yieldOrder = this.getById(id); + if (!this.verifyYieldOrderResource(yieldOrder)) { + return false; + } + yieldOrder.setReceiveStatus(YieldOrderEnum.RECEIVE_STATUS_YES.getCode()); + yieldOrderList.add(yieldOrder); + } - @Override - public boolean confirmBatch(List ids) { - List yieldOrderList = new ArrayList<>(); - for(Long id : ids){ - YieldOrder yieldOrder = this.getById(id); - if (!this.verifyYieldOrderResource(yieldOrder)) { - return false; - } - yieldOrder.setReceiveStatus(YieldOrderEnum.RECEIVE_STATUS_YES.getCode()); - yieldOrderList.add(yieldOrder); - } - - return this.updateBatchById(yieldOrderList); - } - - @Override - public boolean updatePreferenceBatch(List ids, Integer priority) { - List yieldOrderList = new ArrayList<>(); - - ids.forEach(id -> { - YieldOrder yieldOrder = new YieldOrder(); - yieldOrder.setId(id); - yieldOrder.setPriorityAps(priority); - yieldOrderList.add(yieldOrder); - }); - - return this.updateBatchById(yieldOrderList); - } - - @Override - public Boolean checkCode(String yieldOrderId, String yieldOrderCode) { - LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(YieldOrder.class) - .ne(YieldOrder::getId, yieldOrderId) - .eq(YieldOrder::getYoCode, yieldOrderCode); - YieldOrder yieldPlan = baseMapper.selectOne(queryWrapper); - return ObjectUtil.isNotEmpty(yieldPlan); - } - - @Override - public Boolean createSubOrder(YieldOrder yieldOrder) { - // 4. 如果是烧结订单并且不是返工单据,则需要验证子件清单是否存在,存在跳过,不存在则新增 - if (yieldOrder.getYieldType().equals(YieldOrderEnum.YIELD_TYPE_2.getCode()) - && StringUtils.isBlank(yieldOrder.getReworkCode())) { - //验证订单是否存在当前B号,如果不存在则不能下发 - if (StringUtils.isBlank(yieldOrder.getRoamNo())) { - yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_DATA.getCode()); - yieldOrder.setValidationTime(DateUtil.now()); - yieldOrder.setValidationMomo("订单不存在B号,请手动匹配B号!"); - this.updateById(yieldOrder); - return false; - } + return this.updateBatchById(yieldOrderList); + } + + @Override + public boolean updatePreferenceBatch(List ids, Integer priority) { + List yieldOrderList = new ArrayList<>(); + + ids.forEach(id -> { + YieldOrder yieldOrder = new YieldOrder(); + yieldOrder.setId(id); + yieldOrder.setPriorityAps(priority); + yieldOrderList.add(yieldOrder); + }); + + return this.updateBatchById(yieldOrderList); + } + + @Override + public Boolean checkCode(String yieldOrderId, String yieldOrderCode) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(YieldOrder.class) + .ne(YieldOrder::getId, yieldOrderId) + .eq(YieldOrder::getYoCode, yieldOrderCode); + YieldOrder yieldPlan = baseMapper.selectOne(queryWrapper); + return ObjectUtil.isNotEmpty(yieldPlan); + } + + @Override + public Boolean createSubOrder(YieldOrder yieldOrder) { + // 4. 如果是烧结订单并且不是返工单据,则需要验证子件清单是否存在,存在跳过,不存在则新增 + if (yieldOrder.getYieldType().equals(YieldOrderEnum.YIELD_TYPE_2.getCode()) + && StringUtils.isBlank(yieldOrder.getReworkCode())) { + //验证订单是否存在当前B号,如果不存在则不能下发 + if (StringUtils.isBlank(yieldOrder.getRoamNo())) { + yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_DATA.getCode()); + yieldOrder.setValidationTime(DateUtil.now()); + yieldOrder.setValidationMomo("订单不存在B号,请手动匹配B号!"); + this.updateById(yieldOrder); + return false; + } + + // 取工艺路线,并不是下级B号 + String primaryCraft = yieldOrder.getPrimaryCraft(); + if (StringUtils.isBlank(primaryCraft)) { + yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_DATA.getCode()); + yieldOrder.setValidationTime(DateUtil.now()); + yieldOrder.setValidationMomo("未找到ERP一级B号路线,请核查!"); + this.updateById(yieldOrder); + } + // 验证烧结订单的b号描述,如果包含封接字样则验证子件,不包含则不验证 + if (primaryCraft.contains(YieldOrderConst.ROAMNO_TEXT_FJ)) { + try { + this.saveSubYieldOrder(yieldOrder, Boolean.FALSE, yieldOrder.getReceiveUser()); + } catch (BusinessException e) { + yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_DATA.getCode()); + yieldOrder.setValidationTime(DateUtil.now()); + yieldOrder.setValidationMomo(e.getErrorMessage()); + this.updateById(yieldOrder); + } + } + + return true; + } - // 取工艺路线,并不是下级B号 - String primaryCraft = yieldOrder.getPrimaryCraft(); - if (StringUtils.isBlank(primaryCraft)) { - yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_DATA.getCode()); - yieldOrder.setValidationTime(DateUtil.now()); - yieldOrder.setValidationMomo("未找到ERP一级B号路线,请核查!"); - this.updateById(yieldOrder); - } - // 验证烧结订单的b号描述,如果包含封接字样则验证子件,不包含则不验证 - if (primaryCraft.contains(YieldOrderConst.ROAMNO_TEXT_FJ)) { - try { - this.saveSubYieldOrder(yieldOrder, Boolean.FALSE, yieldOrder.getReceiveUser()); - } catch (BusinessException e) { - yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_DATA.getCode()); - yieldOrder.setValidationTime(DateUtil.now()); - yieldOrder.setValidationMomo(e.getErrorMessage()); - this.updateById(yieldOrder); - } - } + log.info("订单{}不是烧结订单,无需生成子件订单", yieldOrder.getYoCode()); + return false; + } + + @Override + public Boolean verifyYieldOrderData(YieldOrder yieldOrder) { + // 1. 验证是否已有该流程卡号的数据, 若已有 + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(YieldOrder.class) + .eq(YieldOrder::getIsDeleted, CommonConstant.DELETE_FALSE) + .eq(YieldOrder::getCardNo, yieldOrder.getCardNo()) + .ne(YieldOrder::getId, yieldOrder.getId()); + List yieldOrderCheckList = baseMapper.selectList(wrapper); + if (CollectionUtils.isNotEmpty(yieldOrderCheckList)) { + yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_DATA.getCode()); + yieldOrder.setValidationTime(DateUtil.now()); + yieldOrder.setValidationMomo("已存在该流程卡号的数据"); + this.updateById(yieldOrder); + return false; + } - return true; - } - - log.info("订单{}不是烧结订单,无需生成子件订单", yieldOrder.getYoCode()); - return false; - } - - @Override - public Boolean verifyYieldOrderData(YieldOrder yieldOrder) { - // 1. 验证是否已有该流程卡号的数据, 若已有 - LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(YieldOrder.class) - .eq(YieldOrder::getIsDeleted, CommonConstant.DELETE_FALSE) - .eq(YieldOrder::getCardNo, yieldOrder.getCardNo()) - .ne(YieldOrder::getId, yieldOrder.getId()); - List yieldOrderCheckList = baseMapper.selectList(wrapper); - if (CollectionUtils.isNotEmpty(yieldOrderCheckList)) { - yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_DATA.getCode()); - yieldOrder.setValidationTime(DateUtil.now()); - yieldOrder.setValidationMomo("已存在该流程卡号的数据"); - this.updateById(yieldOrder); - return false; - } - - //校验批次号、生产标识、使用部门、数量、计划员、计划下达时间、需求交期字段是否为空,为空标记为【数据缺失-16002】 - List emptyFields = new ArrayList<>(); - if (StringUtils.isEmpty(yieldOrder.getBatchNo())) emptyFields.add("批次号"); - if (StringUtils.isEmpty(yieldOrder.getProductIdent())) emptyFields.add("生产标识"); - if (StringUtils.isEmpty(yieldOrder.getUseDept())) emptyFields.add("使用部门"); - if (Objects.isNull(yieldOrder.getYpQty()) || yieldOrder.getYpQty() == 0.0) emptyFields.add("数量"); - if (StringUtils.isEmpty(yieldOrder.getPlanUser())) emptyFields.add("计划员"); - if (Objects.isNull(yieldOrder.getReleaseDate())) emptyFields.add("计划下达时间"); - if (Objects.isNull(yieldOrder.getDemandDate())) emptyFields.add("需求交期"); - if (StringUtils.isEmpty(yieldOrder.getUseDeptCode())) emptyFields.add("使用部门代码"); - if (StringUtils.isEmpty(yieldOrder.getPlanDeptCode())) emptyFields.add("计划部门"); - if (!emptyFields.isEmpty()) { - String errorMsg = "以下字段不能为空:" + String.join("、", emptyFields); - yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_DATA.getCode()); - yieldOrder.setValidationTime(DateUtil.now()); - yieldOrder.setValidationMomo(errorMsg); - this.updateById(yieldOrder); - return false; - } - - //在工艺校验中处理 + //校验批次号、生产标识、使用部门、数量、计划员、计划下达时间、需求交期字段是否为空,为空标记为【数据缺失-16002】 + List emptyFields = new ArrayList<>(); + if (StringUtils.isEmpty(yieldOrder.getBatchNo())) emptyFields.add("批次号"); + if (StringUtils.isEmpty(yieldOrder.getProductIdent())) emptyFields.add("生产标识"); + if (StringUtils.isEmpty(yieldOrder.getUseDept())) emptyFields.add("使用部门"); + if (Objects.isNull(yieldOrder.getYpQty()) || yieldOrder.getYpQty() == 0.0) emptyFields.add("数量"); + if (StringUtils.isEmpty(yieldOrder.getPlanUser())) emptyFields.add("计划员"); + if (Objects.isNull(yieldOrder.getReleaseDate())) emptyFields.add("计划下达时间"); + if (Objects.isNull(yieldOrder.getDemandDate())) emptyFields.add("需求交期"); + if (StringUtils.isEmpty(yieldOrder.getUseDeptCode())) emptyFields.add("使用部门代码"); + if (StringUtils.isEmpty(yieldOrder.getPlanDeptCode())) emptyFields.add("计划部门"); + if (!emptyFields.isEmpty()) { + String errorMsg = "以下字段不能为空:" + String.join("、", emptyFields); + yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_DATA.getCode()); + yieldOrder.setValidationTime(DateUtil.now()); + yieldOrder.setValidationMomo(errorMsg); + this.updateById(yieldOrder); + return false; + } + + //在工艺校验中处理 // // 2. 当生产订单类型为:表处理,壳体,插针订单,当镀种为空或面积为0时,不得自动分派并提示 // if (YieldOrderEnum.YIELD_TYPE_1.equals(yieldOrder.getYieldType()) // || YieldOrderEnum.YIELD_TYPE_4.equals(yieldOrder.getYieldType()) @@ -391,1133 +391,1140 @@ public class YieldOrderServiceImpl extends BaseServiceImpl dsProcessEntityList = dsProcessService.selectDsProcessByCraftId(craft.getId()); - //删除之前的 - yieldOrderCraftService.deleteByYoId(yieldOrder.getId()); - List yieldOrderCraftList = new ArrayList<>(); - if (dsProcessEntityList != null && dsProcessEntityList.size() > 0) { - //没有执行update - if (DsCraftConstant.PRIORITY_THIS_USE.equals(craft.getRank())) { - craft.setPrority(DsCraftConstant.PRIORITY_TEMPORARY); - } + // 同步零件前置 防止烧结订单没有零件信息 + DsPartEntity partEntity = dsPartService.selectDsPartByPatCodeAndVersion(yieldOrder.getPartCode(), yieldOrder.getPartVersion()); + //如果零件信息为null,调用 + if (partEntity == null) { + log.info("零件信息为null,从老mes同步零件信息"); + boolean result = dsTaskingService.syncPart(null, null, yieldOrder.getPartCode()); + if (!result) { + yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_CRAFT.getCode()); + yieldOrder.setValidationTime(DateUtil.now()); + yieldOrder.setValidationMomo("未查询到零件信息!"); + this.updateById(yieldOrder); + return null; + } + } - for (DsProcessEntity processEntity : dsProcessEntityList) { - YieldOrderCraft yieldOrderCraft = new YieldOrderCraft(); - yieldOrderCraft.setYoId(yieldOrder.getId()); - yieldOrderCraft.setCraftNo(craft.getCraftNo()); - yieldOrderCraft.setPid(processEntity.getId()); - yieldOrderCraft.setProcessNo(processEntity.getProcessNo()); - yieldOrderCraft.setProcessCode(processEntity.getProcessCode()); - yieldOrderCraft.setProcessName(processEntity.getProcessName()); - yieldOrderCraft.setMakeMemo(processEntity.getRemarks()); - yieldOrderCraft.setHourQuota(processEntity.getProHours()); - yieldOrderCraft.setPpsId(processEntity.getPpsId()); - yieldOrderCraft.setCaId(processEntity.getCaId()); - yieldOrderCraftList.add(yieldOrderCraft); - } - boolean saveBatch = yieldOrderCraftService.saveBatch(yieldOrderCraftList); - log.info("添加数据返回结果:{}",saveBatch); - } - //镀层物料需求 + Integer rank; + // 先判断是否是热表订单 不是返回二级工艺 + if (YieldOrderEnum.YIELD_TYPE_1.getCode() != yieldOrder.getYieldType()) { + rank = DsCraftEnum.RANK_TWO.getCode(); + } else { + rank = judgeRank(yieldOrder); + } + String rankStr = rank == null ? null : String.valueOf(rank); + log.info("工艺传参零件号:{},{},{}", partCode, roamNo, rankStr); + PartCraftVO craftVO = dsPartService.selectPartCraft(yieldOrder, partCode, roamNo, rankStr, null); + log.info("工艺返回:{}", craftVO != null); + + if (ObjectUtil.isEmpty(craftVO) || PartCraftStatusEnum.SUCCESS.getCode() != craftVO.getCode()) { + String errMsg = "工艺匹配失败,原因:" + PartCraftStatusEnum.getMsg(craftVO.getCode()); + yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_CRAFT.getCode()); + yieldOrder.setValidationTime(DateUtil.now()); + yieldOrder.setValidationMomo(errMsg); + this.updateById(yieldOrder); + return Boolean.FALSE; + } + + DsCraftEntity craft = craftVO.getCraft(); + DsPartEntity part = dsPartService.getById(craft.getPartId()); + // 2. 当生产订单类型为:表处理,壳体,插针订单,当镀种为空或面积为0时,不得自动分派并提示 + // 判断热表零件面积和镀种不能为空 + Integer yieldType = yieldOrder.getYieldType(); + if (yieldType != null && + (yieldType.equals(YieldOrderEnum.YIELD_TYPE_1.getCode()) + || yieldType.equals(YieldOrderEnum.YIELD_TYPE_4.getCode()) + || yieldType.equals(YieldOrderEnum.YIELD_TYPE_5.getCode()))) { + if (StringUtils.isBlank(part.getPlate()) || part.getArea() == 0) { + yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_CRAFT.getCode()); + yieldOrder.setValidationTime(DateUtil.now()); + yieldOrder.setValidationMomo("工艺匹配失败,原因:工艺镀种或面积为空"); + this.updateById(yieldOrder); + return Boolean.FALSE; + } + } + + yieldOrder.setYpArea(part.getArea() == null ? 0D : part.getArea()); + yieldOrder.setPlate(part.getPlate()); + yieldOrder.setCraftId(craft.getId()); + yieldOrder.setRank(craft.getRank()); + yieldOrder.setProductType(part.getProductType()); + yieldOrder.setPartName(part.getPartName()); + yieldOrder.setPrimaryCraft(part.getCraftWay()); + yieldOrder.setTsbNum(part.getTsbNum()); + yieldOrder.setTsdNum(part.getTsdNum()); + yieldOrder.setTjtNum(part.getTjtNum()); + DsPartVersionEntity partVersionEntity = partVersionService.selectByPartId(part.getId()); + if (null != partVersionEntity) { + yieldOrder.setPartVersion(partVersionEntity.getPartVersion()); + } + + List dsProcessEntityList = dsProcessService.selectDsProcessByCraftId(craft.getId()); + //删除之前的 + yieldOrderCraftService.deleteByYoId(yieldOrder.getId()); + List yieldOrderCraftList = new ArrayList<>(); + if (dsProcessEntityList != null && dsProcessEntityList.size() > 0) { + //没有执行update + if (DsCraftConstant.PRIORITY_THIS_USE.equals(craft.getRank())) { + craft.setPrority(DsCraftConstant.PRIORITY_TEMPORARY); + } + + for (DsProcessEntity processEntity : dsProcessEntityList) { + YieldOrderCraft yieldOrderCraft = new YieldOrderCraft(); + yieldOrderCraft.setYoId(yieldOrder.getId()); + yieldOrderCraft.setCraftNo(craft.getCraftNo()); + yieldOrderCraft.setPid(processEntity.getId()); + yieldOrderCraft.setProcessNo(processEntity.getProcessNo()); + yieldOrderCraft.setProcessCode(processEntity.getProcessCode()); + yieldOrderCraft.setProcessName(processEntity.getProcessName()); + yieldOrderCraft.setMakeMemo(processEntity.getRemarks()); + yieldOrderCraft.setHourQuota(processEntity.getProHours()); + yieldOrderCraft.setPpsId(processEntity.getPpsId()); + yieldOrderCraft.setCaId(processEntity.getCaId()); + yieldOrderCraftList.add(yieldOrderCraft); + } + boolean saveBatch = yieldOrderCraftService.saveBatch(yieldOrderCraftList); + log.info("添加数据返回结果:{}", saveBatch); + } + //镀层物料需求 /*if(YieldOrderEnum.YIELD_TYPE_1.getCode() == yieldOrder.getYieldType()){ boolean result = plateGoodsRecordService.calculateCoatingMaterial(yieldOrder); if(!result){ return false; } }*/ - // 生成子件订单 - createSubOrder(yieldOrder); - //部件生产订单获取石墨模生成烧结磨具计划,玻璃饼订单获取压饼模生成烧结磨具计划 - if(YieldOrderEnum.YIELD_TYPE_2.getCode() == yieldOrder.getYieldType()){ - List subPartList = dsPartService.getPartSubList(yieldOrder.getPartCode(),yieldOrder.getPartVersion()); - if(CollectionUtils.isNotEmpty(subPartList)){ - for(DsPartEntity subPart : subPartList){ - if(DsPartConstant.SIN_TER_TYPE_SMM == subPart.getSinTerType() && subPart.getQuota() != 0){ - MoldDemand moldDemand = moldDemandMapper.selectOne(Wrappers.lambdaQuery().eq(MoldDemand::getToolCode,subPart.getPartCode()).eq(MoldDemand::getMafStatus,MoldDemandEnum.MAF_STATUS_CREATE.getCode())); - if(moldDemand == null){ - moldDemand = new MoldDemand(); - moldDemand.setMoCode(null); - moldDemand.setPartCode(yieldOrder.getPartCode()); - moldDemand.setPartName(yieldOrder.getPartName()); - moldDemand.setToolCode(subPart.getPartCode()); - moldDemand.setToolName(subPart.getPartName()); - moldDemand.setDemandNum(subPart.getQuota() * yieldOrder.getYpQty()); - moldDemand.setLinkOrderIds(yieldOrder.getId().toString()); + // 生成子件订单 + createSubOrder(yieldOrder); + //部件生产订单获取石墨模生成烧结磨具计划,玻璃饼订单获取压饼模生成烧结磨具计划 + if (YieldOrderEnum.YIELD_TYPE_2.getCode() == yieldOrder.getYieldType()) { + List subPartList = dsPartService.getPartSubList(yieldOrder.getPartCode(), yieldOrder.getPartVersion()); + if (CollectionUtils.isNotEmpty(subPartList)) { + for (DsPartEntity subPart : subPartList) { + if (DsPartConstant.SIN_TER_TYPE_SMM == subPart.getSinTerType() && subPart.getQuota() != 0) { + MoldDemand moldDemand = moldDemandMapper.selectOne(Wrappers.lambdaQuery().eq(MoldDemand::getToolCode, subPart.getPartCode()).eq(MoldDemand::getMafStatus, MoldDemandEnum.MAF_STATUS_CREATE.getCode())); + if (moldDemand == null) { + moldDemand = new MoldDemand(); + moldDemand.setMoCode(null); + moldDemand.setPartCode(yieldOrder.getPartCode()); + moldDemand.setPartName(yieldOrder.getPartName()); + moldDemand.setToolCode(subPart.getPartCode()); + moldDemand.setToolName(subPart.getPartName()); + moldDemand.setDemandNum(subPart.getQuota() * yieldOrder.getYpQty()); + moldDemand.setLinkOrderIds(yieldOrder.getId().toString()); // moldDemand.setStatus(MoldDemandEnum.STATUS_WAITING.getCode()); - moldDemand.setMafStatus(MoldDemandEnum.MAF_STATUS_CREATE.getCode()); - moldDemand.setMafType(MoldDemandEnum.MAF_TYPE_RB.getCode()); - moldDemand.setNeedDate(yieldOrder.getDemandDate()); - moldDemand.setQuaLevel(yieldOrder.getProductIdent()); - moldDemand.setMdCode(generateMdCode()); - moldDemand.setIsDeleted(0); - moldDemandMapper.insert(moldDemand); - }else{ - moldDemand.setDemandNum(moldDemand.getDemandNum() + subPart.getQuota() * yieldOrder.getYpQty()); - moldDemand.setLinkOrderIds(moldDemand.getLinkOrderIds().concat(",").concat(yieldOrder.getId().toString())); - moldDemandMapper.updateById(moldDemand); - } - yieldOrder.setToolsDemand(BigDecimal.valueOf(moldDemand.getDemandNum())); - this.updateById(yieldOrder); - - } - } - - } - }else if(YieldOrderEnum.YIELD_TYPE_3.getCode() == yieldOrder.getYieldType()){ - List processMoldToolList = dsPartService.getClassCakeWork(yieldOrder.getPartCode(),yieldOrder.getRoamNo(),yieldOrder.getPartVersion()); - if(CollectionUtils.isNotEmpty(processMoldToolList)){ - for (DsProcessMoldToolEntity dsProcessMoldToolEntity : processMoldToolList) { - MoldDemand moldDemand = moldDemandMapper.selectOne(Wrappers.lambdaQuery().eq(MoldDemand::getToolCode,dsProcessMoldToolEntity.getMoldCode()).eq(MoldDemand::getMafStatus,MoldDemandEnum.MAF_STATUS_CREATE.getCode())); - if(moldDemand == null){ - moldDemand = new MoldDemand(); - moldDemand.setMoCode(null); - moldDemand.setPartCode(yieldOrder.getPartCode()); - moldDemand.setPartName(yieldOrder.getPartName()); - moldDemand.setDemandNum(yieldOrder.getYpQty()); - moldDemand.setToolCode(processMoldToolList.get(0).getMoldCode()); - moldDemand.setToolName(processMoldToolList.get(0).getMoldName()); - moldDemand.setLinkOrderIds(yieldOrder.getId().toString()); + moldDemand.setMafStatus(MoldDemandEnum.MAF_STATUS_CREATE.getCode()); + moldDemand.setMafType(MoldDemandEnum.MAF_TYPE_RB.getCode()); + moldDemand.setNeedDate(yieldOrder.getDemandDate()); + moldDemand.setQuaLevel(yieldOrder.getProductIdent()); + moldDemand.setMdCode(generateMdCode()); + moldDemand.setIsDeleted(0); + moldDemandMapper.insert(moldDemand); + } else { + moldDemand.setDemandNum(moldDemand.getDemandNum() + subPart.getQuota() * yieldOrder.getYpQty()); + moldDemand.setLinkOrderIds(moldDemand.getLinkOrderIds().concat(",").concat(yieldOrder.getId().toString())); + moldDemandMapper.updateById(moldDemand); + } + yieldOrder.setToolsDemand(BigDecimal.valueOf(moldDemand.getDemandNum())); + this.updateById(yieldOrder); + + } + } + + } + } else if (YieldOrderEnum.YIELD_TYPE_3.getCode() == yieldOrder.getYieldType()) { + List processMoldToolList = dsPartService.getClassCakeWork(yieldOrder.getPartCode(), yieldOrder.getRoamNo(), yieldOrder.getPartVersion()); + if (CollectionUtils.isNotEmpty(processMoldToolList)) { + for (DsProcessMoldToolEntity dsProcessMoldToolEntity : processMoldToolList) { + MoldDemand moldDemand = moldDemandMapper.selectOne(Wrappers.lambdaQuery().eq(MoldDemand::getToolCode, dsProcessMoldToolEntity.getMoldCode()).eq(MoldDemand::getMafStatus, MoldDemandEnum.MAF_STATUS_CREATE.getCode())); + if (moldDemand == null) { + moldDemand = new MoldDemand(); + moldDemand.setMoCode(null); + moldDemand.setPartCode(yieldOrder.getPartCode()); + moldDemand.setPartName(yieldOrder.getPartName()); + moldDemand.setDemandNum(yieldOrder.getYpQty()); + moldDemand.setToolCode(processMoldToolList.get(0).getMoldCode()); + moldDemand.setToolName(processMoldToolList.get(0).getMoldName()); + moldDemand.setLinkOrderIds(yieldOrder.getId().toString()); // moldDemand.setStatus(MoldDemandEnum.STATUS_WAITING.getCode()); - moldDemand.setMafStatus(MoldDemandEnum.MAF_STATUS_CREATE.getCode()); - moldDemand.setMafType(MoldDemandEnum.MAF_TYPE_RB.getCode()); - moldDemand.setNeedDate(yieldOrder.getDemandDate()); - moldDemand.setQuaLevel(yieldOrder.getProductIdent()); - moldDemand.setMdCode(generateMdCode()); - moldDemand.setIsDeleted(0); - moldDemandMapper.insert(moldDemand); - }else{ - moldDemand.setDemandNum(moldDemand.getDemandNum() + yieldOrder.getYpQty()); - moldDemand.setLinkOrderIds(moldDemand.getLinkOrderIds().concat(",").concat(yieldOrder.getId().toString())); - moldDemandMapper.updateById(moldDemand); - } - yieldOrder.setToolsDemand(BigDecimal.valueOf(moldDemand.getDemandNum())); - this.updateById(yieldOrder); - } - } - }else if(YieldOrderEnum.YIELD_TYPE_6.getCode() == yieldOrder.getYieldType()){ - List subPartList = dsPartService.getPartSubList(yieldOrder.getPartCode(),yieldOrder.getPartVersion()); - if(CollectionUtils.isNotEmpty(subPartList)){ - for(DsPartEntity subPart : subPartList){ - MoldDemand moldDemand = moldDemandMapper.selectOne(Wrappers.lambdaQuery().eq(MoldDemand::getToolCode,subPart.getPartCode()).eq(MoldDemand::getMafStatus,MoldDemandEnum.MAF_STATUS_CREATE.getCode())); - if(moldDemand == null){ - moldDemand = new MoldDemand(); - moldDemand.setMoCode(null); - moldDemand.setPartCode(yieldOrder.getPartCode()); - moldDemand.setPartName(yieldOrder.getPartName()); - moldDemand.setToolCode(subPart.getPartCode()); - moldDemand.setToolName(subPart.getPartName()); - moldDemand.setDemandNum(subPart.getQuota() * yieldOrder.getYpQty()); - moldDemand.setLinkOrderIds(yieldOrder.getId().toString()); - moldDemand.setMafStatus(MoldDemandEnum.MAF_STATUS_CREATE.getCode()); - moldDemand.setMafType(MoldDemandEnum.MAF_TYPE_RB.getCode()); - moldDemand.setNeedDate(yieldOrder.getDemandDate()); - moldDemand.setQuaLevel(yieldOrder.getProductIdent()); - moldDemand.setMdCode(generateMdCode()); - moldDemand.setIsDeleted(0); - moldDemandMapper.insert(moldDemand); - }else{ - moldDemand.setDemandNum(moldDemand.getDemandNum() + subPart.getQuota() * yieldOrder.getYpQty()); - moldDemand.setLinkOrderIds(moldDemand.getLinkOrderIds().concat(",").concat(yieldOrder.getId().toString())); - moldDemandMapper.updateById(moldDemand); - } - yieldOrder.setToolsDemand(BigDecimal.valueOf(moldDemand.getDemandNum())); - this.updateById(yieldOrder); - - } + moldDemand.setMafStatus(MoldDemandEnum.MAF_STATUS_CREATE.getCode()); + moldDemand.setMafType(MoldDemandEnum.MAF_TYPE_RB.getCode()); + moldDemand.setNeedDate(yieldOrder.getDemandDate()); + moldDemand.setQuaLevel(yieldOrder.getProductIdent()); + moldDemand.setMdCode(generateMdCode()); + moldDemand.setIsDeleted(0); + moldDemandMapper.insert(moldDemand); + } else { + moldDemand.setDemandNum(moldDemand.getDemandNum() + yieldOrder.getYpQty()); + moldDemand.setLinkOrderIds(moldDemand.getLinkOrderIds().concat(",").concat(yieldOrder.getId().toString())); + moldDemandMapper.updateById(moldDemand); + } + yieldOrder.setToolsDemand(BigDecimal.valueOf(moldDemand.getDemandNum())); + this.updateById(yieldOrder); + } + } + } else if (YieldOrderEnum.YIELD_TYPE_6.getCode() == yieldOrder.getYieldType()) { + List subPartList = dsPartService.getPartSubList(yieldOrder.getPartCode(), yieldOrder.getPartVersion()); + if (CollectionUtils.isNotEmpty(subPartList)) { + for (DsPartEntity subPart : subPartList) { + MoldDemand moldDemand = moldDemandMapper.selectOne(Wrappers.lambdaQuery().eq(MoldDemand::getToolCode, subPart.getPartCode()).eq(MoldDemand::getMafStatus, MoldDemandEnum.MAF_STATUS_CREATE.getCode())); + if (moldDemand == null) { + moldDemand = new MoldDemand(); + moldDemand.setMoCode(null); + moldDemand.setPartCode(yieldOrder.getPartCode()); + moldDemand.setPartName(yieldOrder.getPartName()); + moldDemand.setToolCode(subPart.getPartCode()); + moldDemand.setToolName(subPart.getPartName()); + moldDemand.setDemandNum(subPart.getQuota() * yieldOrder.getYpQty()); + moldDemand.setLinkOrderIds(yieldOrder.getId().toString()); + moldDemand.setMafStatus(MoldDemandEnum.MAF_STATUS_CREATE.getCode()); + moldDemand.setMafType(MoldDemandEnum.MAF_TYPE_RB.getCode()); + moldDemand.setNeedDate(yieldOrder.getDemandDate()); + moldDemand.setQuaLevel(yieldOrder.getProductIdent()); + moldDemand.setMdCode(generateMdCode()); + moldDemand.setIsDeleted(0); + moldDemandMapper.insert(moldDemand); + } else { + moldDemand.setDemandNum(moldDemand.getDemandNum() + subPart.getQuota() * yieldOrder.getYpQty()); + moldDemand.setLinkOrderIds(moldDemand.getLinkOrderIds().concat(",").concat(yieldOrder.getId().toString())); + moldDemandMapper.updateById(moldDemand); + } + yieldOrder.setToolsDemand(BigDecimal.valueOf(moldDemand.getDemandNum())); + this.updateById(yieldOrder); + + } + + } + } + return Boolean.TRUE; + } + + @Autowired + private RedisTemplate redisTemplate; + + /** + * 生成模具单号 + * + * @return 单号 例:202604280001 + */ + @Override + public String generateMdCode() { + // 1. 获取当前日期(用于单号中的日期部分) + String today = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); + + // 2. 获取当天的流水号 + String key = "md_code:" + today; + Long seq = redisTemplate.opsForValue().increment(key); + + // 3. 如果是当天第一个,设置过期时间为2天(避免Redis内存堆积) + if (seq == 1) { + redisTemplate.expire(key, 2, TimeUnit.DAYS); + // 同时从数据库查询当天最大流水号(防止Redis数据丢失后重复) + seq = getMaxSeqFromDb(today) + 1; + redisTemplate.opsForValue().set(key, String.valueOf(seq), 2, TimeUnit.DAYS); + } - } - } - return Boolean.TRUE; - } - - @Autowired - private RedisTemplate redisTemplate; - - /** - * 生成模具单号 - * @return 单号 例:202604280001 - */ - @Override - public String generateMdCode() { - // 1. 获取当前日期(用于单号中的日期部分) - String today = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); - - // 2. 获取当天的流水号 - String key = "md_code:" + today; - Long seq = redisTemplate.opsForValue().increment(key); - - // 3. 如果是当天第一个,设置过期时间为2天(避免Redis内存堆积) - if (seq == 1) { - redisTemplate.expire(key, 2, TimeUnit.DAYS); - // 同时从数据库查询当天最大流水号(防止Redis数据丢失后重复) - seq = getMaxSeqFromDb(today) + 1; - redisTemplate.opsForValue().set(key, String.valueOf(seq), 2, TimeUnit.DAYS); - } - - // 4. 格式化流水号(4位,不足补0) - String serial = String.format("%04d", seq); - - // 5. 拼接单号 - return today + serial; - } - - /** - * 从数据库查询当天最大流水号(用于重启后恢复) - */ - private Long getMaxSeqFromDb(String today) { - String maxCode = moldDemandMapper.getMaxMdCodeByDate(today); - if (maxCode == null || maxCode.isEmpty()) { - return 0L; - } - // 提取流水号部分(日期共8位,后面的是流水号) - String serialStr = maxCode.substring(today.length()); - return Long.parseLong(serialStr); - } - - @Override - public Boolean verifyYieldOrderResource(YieldOrder yieldOrder) { - // 根据生产订单,给各工序分派作业中心||外协 - List craftList = yieldOrderCraftService.listByYoId(yieldOrder.getId()); - try { - yieldOrderCraftService.automaticDispatch(craftList, yieldOrder, null, null); - } catch (Exception e) { - yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_RESOURCE.getCode()); - yieldOrder.setValidationTime(DateUtil.now()); - yieldOrder.setValidationMomo(e.getMessage()); - this.updateById(yieldOrder); - return Boolean.FALSE; - } + // 4. 格式化流水号(4位,不足补0) + String serial = String.format("%04d", seq); + + // 5. 拼接单号 + return today + serial; + } + + /** + * 从数据库查询当天最大流水号(用于重启后恢复) + */ + private Long getMaxSeqFromDb(String today) { + String maxCode = moldDemandMapper.getMaxMdCodeByDate(today); + if (maxCode == null || maxCode.isEmpty()) { + return 0L; + } + // 提取流水号部分(日期共8位,后面的是流水号) + String serialStr = maxCode.substring(today.length()); + return Long.parseLong(serialStr); + } + + @Override + public Boolean verifyYieldOrderResource(YieldOrder yieldOrder) { + // 根据生产订单,给各工序分派作业中心||外协 + List craftList = yieldOrderCraftService.listByYoId(yieldOrder.getId()); + try { + yieldOrderCraftService.automaticDispatch(craftList, yieldOrder, null, null); + } catch (Exception e) { + yieldOrder.setValidationResult(YieldOrderEnum.VALIDATION_RESULT_LESS_RESOURCE.getCode()); + yieldOrder.setValidationTime(DateUtil.now()); + yieldOrder.setValidationMomo(e.getMessage()); + this.updateById(yieldOrder); + return Boolean.FALSE; + } // yieldOrder.setReceiveTime(new Date()); // yieldOrder.setReceiveUser(AuthUtil.getUserId()); // yieldOrder.setReceiveStatus(YieldOrderEnum.RECEIVE_STATUS_YES.getCode()); - if(yieldOrder.getYieldType() != YieldOrderEnum.YIELD_TYPE_2.getCode()){ - yieldOrder.setStatus(YieldOrderEnum.STATUS_APS.getCode()); - } - this.updateById(yieldOrder); - return Boolean.TRUE; - } - - @Override - public Boolean verifyYieldOrderDelivery(YieldOrder yieldOrder) { - // 根据工艺, 计算订单的额定加工时长 - - // 交期时间-当前时间, 与 额定加工时长对比, 判断是否有超期风险 - return Boolean.TRUE; - } - - @Override - public void saveSubYieldOrder(YieldOrder yieldOrder, Boolean isManual, Long receiveUser) throws BusinessException { - // 验证是否存在玻璃饼子件信息 + if (yieldOrder.getYieldType() != YieldOrderEnum.YIELD_TYPE_2.getCode()) { + yieldOrder.setStatus(YieldOrderEnum.STATUS_APS.getCode()); + } + this.updateById(yieldOrder); + return Boolean.TRUE; + } + + @Override + public Boolean verifyYieldOrderDelivery(YieldOrder yieldOrder) { + // 根据工艺, 计算订单的额定加工时长 + + // 交期时间-当前时间, 与 额定加工时长对比, 判断是否有超期风险 + return Boolean.TRUE; + } + + @Override + public void saveSubYieldOrder(YieldOrder yieldOrder, Boolean isManual, Long receiveUser) throws BusinessException { + // 验证是否存在玻璃饼子件信息 // this.checkSub(yieldOrder.getPartCode(), DsPartConstant.SIN_TER_TYPE_BLB, "玻璃饼"); - //查询所有的烧结子件清单 + //查询所有的烧结子件清单 // List subList = new ArrayList<>(); // subList.addAll(this.checkSub(yieldOrder.getPartCode(), DsPartConstant.SIN_TER_TYPE_SMM, "石墨模")); // subList.addAll(this.checkSub(yieldOrder.getPartCode(), DsPartConstant.SIN_TER_TYPE_KT, "壳体")); // subList.addAll(this.checkSub(yieldOrder.getPartCode(), DsPartConstant.SIN_TER_TYPE_CZ, "插针")); - DsPartVersionEntity partVersion = partVersionService.getOne(Wrappers.lambdaQuery() - .eq(DsPartVersionEntity::getPartCode,yieldOrder.getPartCode()) - .eq(DsPartVersionEntity::getPartVersion,yieldOrder.getPartVersion())); - List partRelationList = partRelationService.list(Wrappers.lambdaQuery().eq(DsPartRelationEntity::getPartId,partVersion.getPartId())); - List childPartIdList = partRelationList.stream().map(DsPartRelationEntity::getChildPartId).collect(Collectors.toList()); - List subList = dsPartService.list(Wrappers.lambdaQuery().in(BaseEntity::getId,childPartIdList)); - if (subList.size() == 0) { - throw new BusinessException("未找到烧结前处理子件信息,请联系工艺编制!"); - } - //获取已经产生的烧结子件清单 - List subYieldOrderList = this.listByFatherYoId(yieldOrder.getId()); - List keyLst = new ArrayList<>(); - List returnList = new ArrayList<>(); - if (subYieldOrderList.size() > 0) { - //组装已生成的子件号和父级订单id - for (YieldOrder yo : subYieldOrderList) { - keyLst.add(yieldOrder.getId() + "_" + yo.getPartCode()); - } - //剔除已经生成生成订单的子件 - for (DsPartEntity sub : subList) { - if (!keyLst.contains(yieldOrder.getId() + "_" + sub.getPartCode())) { - returnList.add(sub); - } - } - } else { - returnList.addAll(subList); - } - if (returnList != null && returnList.size() > 0) { - this.createSubYieldOrder(yieldOrder, returnList, isManual, receiveUser); - } - } - - @Override - public List listByFatherYoId(Long fatherYoId) { - LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(YieldOrder.class).eq(YieldOrder::getFatherYoId, fatherYoId); - List subYieldOrderList = this.list(wrapper); - return subYieldOrderList; - } - - @Override - public List syncYieldOrderFromOldMes() { - List cardNoList = new ArrayList<>(); - - String url = oldMesUrl + addrSyncOrderList; - String syncResult = HttpUtil.post(url, StringPool.EMPTY); - JSONObject jsonObject = JSON.parseObject(syncResult); - if (jsonObject.getInteger("code") == 0) { - JSONArray dataList = jsonObject.getJSONArray("data"); - if (ObjectUtil.isEmpty(dataList)) { - return cardNoList; - } - - for (Object dataItem : dataList) { - JSONObject jsonItem = JSON.parseObject(JSON.toJSONString(dataItem)); - - // 构建生产订单信息并保存 - JSONObject yieldJson = jsonItem.getJSONObject("order"); - YieldOrder yieldOrder = JSON.parseObject(JSON.toJSONString(yieldJson), YieldOrder.class); - yieldOrder.setYpCode(yieldJson.getString("poCode")); - yieldOrder.setYpArea(yieldJson.getDouble("poArea")); - yieldOrder.setYpQty(yieldJson.getDouble("poQty")); - yieldOrder.setYpProductLine(yieldJson.getString("poProdLine")); - yieldOrder.setYpMemo(yieldJson.getString("poMemo")); - yieldOrder.setProductIdent(yieldJson.getString("prodIdent")); - yieldOrder.setRoamNoNext(yieldJson.getString("nextRoam")); - yieldOrder.setPriorityErp(yieldJson.getInteger("priority")); - if (YieldOrderEnum.PRIORITY_ERP_NORMAL.equals(yieldOrder.getPriorityErp())) { - yieldOrder.setPriorityAps(YieldOrderEnum.PRIORITY_APS_NORMAL.getCode()); - } else { - yieldOrder.setPriorityAps(YieldOrderEnum.PRIORITY_APS_LOW.getCode()); - } - yieldOrder.setNewLevFlag(yieldJson.getString("newlevFlag")); - yieldOrder.setUseDeptCode(yieldJson.getString("useDeptcode")); - yieldOrder.setReceiveStatus(YieldOrderEnum.RECEIVE_STATUS_YES.getCode()); - yieldOrder.setReceiveUser(yieldJson.getLong("failureMan")); - yieldOrder.setReceiveTime(yieldJson.getDate("failureTime")); - yieldOrder.setStatus(YieldOrderEnum.STATUS_APS.getCode()); - - // 先根据流程卡号验证订单是否重复,如果重复则不保存 - List orderList = baseMapper.selectList(Wrappers.lambdaQuery(YieldOrder.class).eq(YieldOrder::getCardNo, yieldOrder.getCardNo())); - if(orderList.size() == 0) { - this.save(yieldOrder); - } else { - yieldOrder.setId(orderList.get(0).getId()); - this.updateById(yieldOrder); - - // 先删除原有的订单工艺信息 - yieldOrderCraftService.remove(Wrappers.lambdaQuery(YieldOrderCraft.class).eq(YieldOrderCraft::getYoId, yieldOrder.getId())); - } - - // 构建生产订单工艺信息并保存 - JSONArray craftArray = jsonItem.getJSONArray("craftList"); - System.out.println(craftArray); - List craftList = new ArrayList<>(); - for (Object craftItem : craftArray) { - JSONObject craftJson = JSON.parseObject(JSON.toJSONString(craftItem)); - YieldOrderCraft craft = new YieldOrderCraft(); - craft.setYoId(yieldOrder.getId()); - craft.setCraftNo(craftJson.getString("craftNo")); - craft.setProcessNo(craftJson.getString("processNo")); - if (ObjectUtil.isEmpty(craft.getProcessNo())) { - craft.setProcessNo(StringPool.EMPTY); - } - craft.setStartTime(craftJson.getDate("startTime")); - craft.setEndTime(craftJson.getDate("endTime")); - craft.setHourQuota(craftJson.getDouble("hourQuota")); - if (ObjectUtil.isEmpty(craft.getHourQuota())) { - craft.setHourQuota(0D); - } - craft.setMakeMemo(craftJson.getString("makeMemo")); - craft.setPid(craftJson.getLong("pid")); - craft.setRpId(craftJson.getLong("rpId")); - craft.setPpsId(craftJson.getLong("ppsId")); - if (ObjectUtil.isEmpty(craft.getPpsId())) { - craft.setPpsId(0L); - } - craft.setMakeTeam(craftJson.getLong("makeTeam")); - craft.setWorkCenterId(craftJson.getLong("wcId")); - craft.setOcId(craftJson.getLong("ocId")); - craft.setCaId(craftJson.getLong("caId")); - - craftList.add(craft); - } - yieldOrderCraftService.saveBatch(craftList); - - cardNoList.add(yieldOrder.getCardNo()); - } - } - return cardNoList; - } - - @Override - public void syncYieldOrderResultToOldMes(List cardNoList) { - String url = oldMesUrl + addrPushSyncResult; - HttpUtil.post(url, JSON.toJSONString(cardNoList)); - } - - @Override - public void receiveOrderFromOldMes(JSONArray dataList) { - if (ObjectUtil.isEmpty(dataList)) { - return; - } - - for (Object dataItem : dataList) { - JSONObject jsonItem = JSON.parseObject(JSON.toJSONString(dataItem)); - - // 构建生产订单信息并保存 - JSONObject yieldJson = jsonItem.getJSONObject("order"); - YieldOrder yieldOrder = JSON.parseObject(JSON.toJSONString(yieldJson), YieldOrder.class); - if(yieldOrder.getYieldType() == 1){ - yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_1.getCode()); - } - if(yieldOrder.getYieldType() == 2){ - yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_2.getCode()); - } - if(yieldOrder.getYieldType() == 3){ - yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_3.getCode()); - } - if(yieldOrder.getYieldType() == 4){ - yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_4.getCode()); - } - if(yieldOrder.getYieldType() == 5){ - yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_5.getCode()); - } - if(yieldOrder.getYieldType() == 6){ - yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_6.getCode()); - } - yieldOrder.setYpCode(yieldJson.getString("poCode")); - yieldOrder.setYpArea(yieldJson.getDouble("poArea")); - yieldOrder.setYpQty(yieldJson.getDouble("poQty")); - yieldOrder.setYpProductLine(yieldJson.getString("poProdLine")); - yieldOrder.setYpMemo(yieldJson.getString("poMemo")); - yieldOrder.setProductIdent(yieldJson.getString("prodIdent")); - yieldOrder.setRoamNoNext(yieldJson.getString("nextRoam")); - yieldOrder.setPriorityErp(yieldJson.getInteger("priority")); - if (YieldOrderEnum.PRIORITY_ERP_NORMAL.equals(yieldOrder.getPriorityErp())) { - yieldOrder.setPriorityAps(YieldOrderEnum.PRIORITY_APS_NORMAL.getCode()); - } else { - yieldOrder.setPriorityAps(YieldOrderEnum.PRIORITY_APS_LOW.getCode()); - } - yieldOrder.setNewLevFlag(yieldJson.getString("newlevFlag")); - yieldOrder.setUseDeptCode(yieldJson.getString("useDeptcode")); - yieldOrder.setReceiveStatus(YieldOrderEnum.RECEIVE_STATUS_YES.getCode()); - yieldOrder.setReceiveUser(yieldJson.getLong("failureMan")); - yieldOrder.setReceiveTime(yieldJson.getDate("failureTime")); - yieldOrder.setStatus(YieldOrderEnum.STATUS_APS.getCode()); - yieldOrder.setPriorityErp(yieldJson.getInteger("priority") + 14000); - yieldOrder.setPriorityAps(YieldOrderEnum.PRIORITY_APS_NORMAL.getCode()); - //零件版本暂时设置为1 - yieldOrder.setPartVersion("1"); - // 工艺级别默认2 - yieldOrder.setRank("2"); - // 若任务下达时间为空, 取从erp同步的时间 - if (ObjectUtil.isEmpty(yieldOrder.getReleaseDate())) { - yieldOrder.setReleaseDate(yieldJson.getDate("syncTime")); - } - - // 先根据流程卡号验证订单是否重复,如果重复则不保存 - List orderList = baseMapper.selectList(Wrappers.lambdaQuery(YieldOrder.class).eq(YieldOrder::getCardNo, yieldOrder.getCardNo())); - if (orderList.size() == 0) { - this.save(yieldOrder); - } else { - yieldOrder.setId(orderList.get(0).getId()); - this.updateById(yieldOrder); - } + DsPartVersionEntity partVersion = partVersionService.getOne(Wrappers.lambdaQuery() + .eq(DsPartVersionEntity::getPartCode, yieldOrder.getPartCode()) + .eq(DsPartVersionEntity::getPartVersion, yieldOrder.getPartVersion())); + List partRelationList = partRelationService.list(Wrappers.lambdaQuery().eq(DsPartRelationEntity::getPartId, partVersion.getPartId())); + List childPartIdList = partRelationList.stream().map(DsPartRelationEntity::getChildPartId).collect(Collectors.toList()); + List subList = dsPartService.list(Wrappers.lambdaQuery().in(BaseEntity::getId, childPartIdList)); + if (subList.size() == 0) { + throw new BusinessException("未找到烧结前处理子件信息,请联系工艺编制!"); + } + //获取已经产生的烧结子件清单 + List subYieldOrderList = this.listByFatherYoId(yieldOrder.getId()); + List keyLst = new ArrayList<>(); + List returnList = new ArrayList<>(); + if (subYieldOrderList.size() > 0) { + //组装已生成的子件号和父级订单id + for (YieldOrder yo : subYieldOrderList) { + keyLst.add(yieldOrder.getId() + "_" + yo.getPartCode()); + } + //剔除已经生成生成订单的子件 + for (DsPartEntity sub : subList) { + if (!keyLst.contains(yieldOrder.getId() + "_" + sub.getPartCode())) { + returnList.add(sub); + } + } + } else { + returnList.addAll(subList); + } + if (returnList != null && returnList.size() > 0) { + this.createSubYieldOrder(yieldOrder, returnList, isManual, receiveUser); + } + } + + @Override + public List listByFatherYoId(Long fatherYoId) { + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(YieldOrder.class).eq(YieldOrder::getFatherYoId, fatherYoId); + List subYieldOrderList = this.list(wrapper); + return subYieldOrderList; + } + + @Override + public List syncYieldOrderFromOldMes() { + List cardNoList = new ArrayList<>(); + + String url = oldMesUrl + addrSyncOrderList; + String syncResult = HttpUtil.post(url, StringPool.EMPTY); + JSONObject jsonObject = JSON.parseObject(syncResult); + if (jsonObject.getInteger("code") == 0) { + JSONArray dataList = jsonObject.getJSONArray("data"); + if (ObjectUtil.isEmpty(dataList)) { + return cardNoList; + } + + for (Object dataItem : dataList) { + JSONObject jsonItem = JSON.parseObject(JSON.toJSONString(dataItem)); + + // 构建生产订单信息并保存 + JSONObject yieldJson = jsonItem.getJSONObject("order"); + YieldOrder yieldOrder = JSON.parseObject(JSON.toJSONString(yieldJson), YieldOrder.class); + yieldOrder.setYpCode(yieldJson.getString("poCode")); + yieldOrder.setYpArea(yieldJson.getDouble("poArea")); + yieldOrder.setYpQty(yieldJson.getDouble("poQty")); + yieldOrder.setYpProductLine(yieldJson.getString("poProdLine")); + yieldOrder.setYpMemo(yieldJson.getString("poMemo")); + yieldOrder.setProductIdent(yieldJson.getString("prodIdent")); + yieldOrder.setRoamNoNext(yieldJson.getString("nextRoam")); + yieldOrder.setPriorityErp(yieldJson.getInteger("priority")); + if (YieldOrderEnum.PRIORITY_ERP_NORMAL.equals(yieldOrder.getPriorityErp())) { + yieldOrder.setPriorityAps(YieldOrderEnum.PRIORITY_APS_NORMAL.getCode()); + } else { + yieldOrder.setPriorityAps(YieldOrderEnum.PRIORITY_APS_LOW.getCode()); + } + yieldOrder.setNewLevFlag(yieldJson.getString("newlevFlag")); + yieldOrder.setUseDeptCode(yieldJson.getString("useDeptcode")); + yieldOrder.setReceiveStatus(YieldOrderEnum.RECEIVE_STATUS_YES.getCode()); + yieldOrder.setReceiveUser(yieldJson.getLong("failureMan")); + yieldOrder.setReceiveTime(yieldJson.getDate("failureTime")); + yieldOrder.setStatus(YieldOrderEnum.STATUS_APS.getCode()); + + // 先根据流程卡号验证订单是否重复,如果重复则不保存 + List orderList = baseMapper.selectList(Wrappers.lambdaQuery(YieldOrder.class).eq(YieldOrder::getCardNo, yieldOrder.getCardNo())); + if (orderList.size() == 0) { + this.save(yieldOrder); + } else { + yieldOrder.setId(orderList.get(0).getId()); + this.updateById(yieldOrder); + + // 先删除原有的订单工艺信息 + yieldOrderCraftService.remove(Wrappers.lambdaQuery(YieldOrderCraft.class).eq(YieldOrderCraft::getYoId, yieldOrder.getId())); + } + + // 构建生产订单工艺信息并保存 + JSONArray craftArray = jsonItem.getJSONArray("craftList"); + System.out.println(craftArray); + List craftList = new ArrayList<>(); + for (Object craftItem : craftArray) { + JSONObject craftJson = JSON.parseObject(JSON.toJSONString(craftItem)); + YieldOrderCraft craft = new YieldOrderCraft(); + craft.setYoId(yieldOrder.getId()); + craft.setCraftNo(craftJson.getString("craftNo")); + craft.setProcessNo(craftJson.getString("processNo")); + if (ObjectUtil.isEmpty(craft.getProcessNo())) { + craft.setProcessNo(StringPool.EMPTY); + } + craft.setStartTime(craftJson.getDate("startTime")); + craft.setEndTime(craftJson.getDate("endTime")); + craft.setHourQuota(craftJson.getDouble("hourQuota")); + if (ObjectUtil.isEmpty(craft.getHourQuota())) { + craft.setHourQuota(0D); + } + craft.setMakeMemo(craftJson.getString("makeMemo")); + craft.setPid(craftJson.getLong("pid")); + craft.setRpId(craftJson.getLong("rpId")); + craft.setPpsId(craftJson.getLong("ppsId")); + if (ObjectUtil.isEmpty(craft.getPpsId())) { + craft.setPpsId(0L); + } + craft.setMakeTeam(craftJson.getLong("makeTeam")); + craft.setWorkCenterId(craftJson.getLong("wcId")); + craft.setOcId(craftJson.getLong("ocId")); + craft.setCaId(craftJson.getLong("caId")); + + craftList.add(craft); + } + yieldOrderCraftService.saveBatch(craftList); + + cardNoList.add(yieldOrder.getCardNo()); + } + } + return cardNoList; + } + + @Override + public void syncYieldOrderResultToOldMes(List cardNoList) { + String url = oldMesUrl + addrPushSyncResult; + HttpUtil.post(url, JSON.toJSONString(cardNoList)); + } + + @Override + public void receiveOrderFromOldMes(JSONArray dataList) { + if (ObjectUtil.isEmpty(dataList)) { + return; + } - // 先查询原有的订单工艺信息 - List craftOldList = yieldOrderCraftService.list(Wrappers.lambdaQuery(YieldOrderCraft.class) - .eq(YieldOrderCraft::getYoId, yieldOrder.getId())); - // 构建生产订单工艺信息并保存 - JSONArray craftArray = jsonItem.getJSONArray("craftList"); - List craftList = new ArrayList<>(); - for (Object craftItem : craftArray) { - JSONObject craftJson = JSON.parseObject(JSON.toJSONString(craftItem)); - YieldOrderCraft craft = new YieldOrderCraft(); - craft.setYoId(yieldOrder.getId()); - craft.setCraftNo(craftJson.getString("craftNo")); - craft.setProcessNo(craftJson.getString("processNo")); - craft.setPpsId(craftJson.getLong("ppsId")); - if (6 == craft.getPpsId()) { - craft.setPpsId(1044L); - } else if (8 == craft.getPpsId()) { - craft.setPpsId(1045L); - } - craft.setStartTime(craftJson.getDate("startTime")); - craft.setEndTime(craftJson.getDate("endTime")); - craft.setHourQuota(craftJson.getDouble("hourQuota")); - craft.setMakeMemo(craftJson.getString("makeMemo")); - craft.setPid(craftJson.getLong("pid")); - craft.setRpId(craftJson.getLong("rpId")); - craft.setMakeTeam(craftJson.getLong("makeTeam")); - craft.setWorkCenterId(craftJson.getLong("wcId")); - craft.setOcId(craftJson.getLong("ocId")); - craft.setCaId(craftJson.getLong("caId")); - craft.setIsOutsource(craftJson.getBoolean("isOutsource")); - - // 若工艺ID或工艺排序为空, 则不保存 - if (ObjectUtil.isEmpty(craft.getProcessNo()) || ObjectUtil.isEmpty(craft.getPpsId())) { - continue; - } - - // 若已经保存过该工序, 则本次不保存 - if (craftOldList.stream().anyMatch(craftOld -> craftOld.getProcessNo().equals(craft.getProcessNo()) - && craftOld.getPpsId().equals(craft.getPpsId()))) { - continue; - } - - if (ObjectUtil.isEmpty(craft.getHourQuota())) { - craft.setHourQuota(0D); - } - - craftList.add(craft); - } - yieldOrderCraftService.saveBatch(craftList); - } - } - - @Override - public void receiveOrderStatusFromOldMes(String cardNo, Integer statusCode) { - // 先根据流程卡号查询订单,如果查不到则不处理 - List orderList = baseMapper.selectList(Wrappers.lambdaQuery(YieldOrder.class).eq(YieldOrder::getCardNo, cardNo)); - if (orderList.size() > 0) { - YieldOrder yieldOrder = orderList.get(0); - switch (statusCode) { - case 15: - yieldOrder.setStatus(YieldOrderEnum.STATUS_COMPLETED.getCode()); - break; - case 21: - yieldOrder.setStatus(YieldOrderEnum.STATUS_CLOSED.getCode()); - break; - default: - break; - } - this.updateById(yieldOrder); - } - } - - @Override - public YieldOrder getYoByCardNo(String cardNo) { - LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(YieldOrder.class).eq(YieldOrder::getCardNo, cardNo); - List yieldOrders = baseMapper.selectList(queryWrapper); - // TODO : 待完善 - if (CollectionUtils.isEmpty(yieldOrders)) { - throw new ServiceException("生产订单未同步,请稍后操作"); - } - return yieldOrders.get(0); - } - - @Override - public void updateYieldStatus(Long yoId, Integer curStatus, double v) { - YieldOrder yo = this.getById(yoId); - if (YieldOrder.CUR_STATUS_NORMAL.equals(curStatus)) { - yo.setStatus(curStatus); - yo.setReceiveTime(null); - yo.setYpMemo(null); - yo.setReceiveUser(null); - } else if (YieldOrder.CUR_STATUS_PROCESSING.equals(curStatus)) { - yo.setStatus(curStatus); + for (Object dataItem : dataList) { + JSONObject jsonItem = JSON.parseObject(JSON.toJSONString(dataItem)); + + // 构建生产订单信息并保存 + JSONObject yieldJson = jsonItem.getJSONObject("order"); + YieldOrder yieldOrder = JSON.parseObject(JSON.toJSONString(yieldJson), YieldOrder.class); + if (yieldOrder.getYieldType() == 1) { + yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_1.getCode()); + } + if (yieldOrder.getYieldType() == 2) { + yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_2.getCode()); + } + if (yieldOrder.getYieldType() == 3) { + yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_3.getCode()); + } + if (yieldOrder.getYieldType() == 4) { + yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_4.getCode()); + } + if (yieldOrder.getYieldType() == 5) { + yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_5.getCode()); + } + if (yieldOrder.getYieldType() == 6) { + yieldOrder.setYieldType(YieldOrderEnum.YIELD_TYPE_6.getCode()); + } + yieldOrder.setYpCode(yieldJson.getString("poCode")); + yieldOrder.setYpArea(yieldJson.getDouble("poArea")); + yieldOrder.setYpQty(yieldJson.getDouble("poQty")); + yieldOrder.setYpProductLine(yieldJson.getString("poProdLine")); + yieldOrder.setYpMemo(yieldJson.getString("poMemo")); + yieldOrder.setProductIdent(yieldJson.getString("prodIdent")); + yieldOrder.setRoamNoNext(yieldJson.getString("nextRoam")); + yieldOrder.setPriorityErp(yieldJson.getInteger("priority")); + if (YieldOrderEnum.PRIORITY_ERP_NORMAL.equals(yieldOrder.getPriorityErp())) { + yieldOrder.setPriorityAps(YieldOrderEnum.PRIORITY_APS_NORMAL.getCode()); + } else { + yieldOrder.setPriorityAps(YieldOrderEnum.PRIORITY_APS_LOW.getCode()); + } + yieldOrder.setNewLevFlag(yieldJson.getString("newlevFlag")); + yieldOrder.setUseDeptCode(yieldJson.getString("useDeptcode")); + yieldOrder.setReceiveStatus(YieldOrderEnum.RECEIVE_STATUS_YES.getCode()); + yieldOrder.setReceiveUser(yieldJson.getLong("failureMan")); + yieldOrder.setReceiveTime(yieldJson.getDate("failureTime")); + yieldOrder.setStatus(YieldOrderEnum.STATUS_APS.getCode()); + yieldOrder.setPriorityErp(yieldJson.getInteger("priority") + 14000); + yieldOrder.setPriorityAps(YieldOrderEnum.PRIORITY_APS_NORMAL.getCode()); + //零件版本暂时设置为1 + yieldOrder.setPartVersion("1"); + // 工艺级别默认2 + yieldOrder.setRank("2"); + // 若任务下达时间为空, 取从erp同步的时间 + if (ObjectUtil.isEmpty(yieldOrder.getReleaseDate())) { + yieldOrder.setReleaseDate(yieldJson.getDate("syncTime")); + } + + // 先根据流程卡号验证订单是否重复,如果重复则不保存 + List orderList = baseMapper.selectList(Wrappers.lambdaQuery(YieldOrder.class).eq(YieldOrder::getCardNo, yieldOrder.getCardNo())); + if (orderList.size() == 0) { + this.save(yieldOrder); + } else { + yieldOrder.setId(orderList.get(0).getId()); + this.updateById(yieldOrder); + } + + // 先查询原有的订单工艺信息 + List craftOldList = yieldOrderCraftService.list(Wrappers.lambdaQuery(YieldOrderCraft.class) + .eq(YieldOrderCraft::getYoId, yieldOrder.getId())); + // 构建生产订单工艺信息并保存 + JSONArray craftArray = jsonItem.getJSONArray("craftList"); + List craftList = new ArrayList<>(); + for (Object craftItem : craftArray) { + JSONObject craftJson = JSON.parseObject(JSON.toJSONString(craftItem)); + YieldOrderCraft craft = new YieldOrderCraft(); + craft.setYoId(yieldOrder.getId()); + craft.setCraftNo(craftJson.getString("craftNo")); + craft.setProcessNo(craftJson.getString("processNo")); + craft.setPpsId(craftJson.getLong("ppsId")); + if (6 == craft.getPpsId()) { + craft.setPpsId(1044L); + } else if (8 == craft.getPpsId()) { + craft.setPpsId(1045L); + } + craft.setStartTime(craftJson.getDate("startTime")); + craft.setEndTime(craftJson.getDate("endTime")); + craft.setHourQuota(craftJson.getDouble("hourQuota")); + craft.setMakeMemo(craftJson.getString("makeMemo")); + craft.setPid(craftJson.getLong("pid")); + craft.setRpId(craftJson.getLong("rpId")); + craft.setMakeTeam(craftJson.getLong("makeTeam")); + craft.setWorkCenterId(craftJson.getLong("wcId")); + craft.setOcId(craftJson.getLong("ocId")); + craft.setCaId(craftJson.getLong("caId")); + craft.setIsOutsource(craftJson.getBoolean("isOutsource")); + + // 若工艺ID或工艺排序为空, 则不保存 + if (ObjectUtil.isEmpty(craft.getProcessNo()) || ObjectUtil.isEmpty(craft.getPpsId())) { + continue; + } + + // 若已经保存过该工序, 则本次不保存 + if (craftOldList.stream().anyMatch(craftOld -> craftOld.getProcessNo().equals(craft.getProcessNo()) + && craftOld.getPpsId().equals(craft.getPpsId()))) { + continue; + } + + if (ObjectUtil.isEmpty(craft.getHourQuota())) { + craft.setHourQuota(0D); + } + + craftList.add(craft); + } + yieldOrderCraftService.saveBatch(craftList); + } + } + + @Override + public void receiveOrderStatusFromOldMes(String cardNo, Integer statusCode) { + // 先根据流程卡号查询订单,如果查不到则不处理 + List orderList = baseMapper.selectList(Wrappers.lambdaQuery(YieldOrder.class).eq(YieldOrder::getCardNo, cardNo)); + if (orderList.size() > 0) { + YieldOrder yieldOrder = orderList.get(0); + switch (statusCode) { + case 15: + yieldOrder.setStatus(YieldOrderEnum.STATUS_COMPLETED.getCode()); + break; + case 21: + yieldOrder.setStatus(YieldOrderEnum.STATUS_CLOSED.getCode()); + break; + default: + break; + } + this.updateById(yieldOrder); + } + } + + @Override + public YieldOrder getYoByCardNo(String cardNo) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(YieldOrder.class).eq(YieldOrder::getCardNo, cardNo); + List yieldOrders = baseMapper.selectList(queryWrapper); + // TODO : 待完善 + if (CollectionUtils.isEmpty(yieldOrders)) { + throw new ServiceException("生产订单未同步,请稍后操作"); + } + return yieldOrders.get(0); + } + + @Override + public void updateYieldStatus(Long yoId, Integer curStatus, double v) { + YieldOrder yo = this.getById(yoId); + if (YieldOrder.CUR_STATUS_NORMAL.equals(curStatus)) { + yo.setStatus(curStatus); + yo.setReceiveTime(null); + yo.setYpMemo(null); + yo.setReceiveUser(null); + } else if (YieldOrder.CUR_STATUS_PROCESSING.equals(curStatus)) { + yo.setStatus(curStatus); // if (po != null) { // po.setStatus(YieldPlanEnum.STATUS_PROCESSING.getCode()); // } - } else if (YieldOrder.CUR_STATUS_COMPLETED.equals(curStatus)) { - List listWo = workOrderMapper.listByYoId(yo.getId()); - boolean completed = listWo.stream().map(wo -> wo.getRunStatus() >= WorkOrder.RUN_STATUS_COMPLETED).findAny().isPresent(); - if (completed) { - yo.setStatus(curStatus); - } - } else if (YieldOrder.CUR_STATUS_VOIDED.equals(curStatus)) { - //整单报废 - List listWo = workOrderMapper.selectList(Wrappers.lambdaQuery(WorkOrder.class).eq(WorkOrder::getYoId, yo.getId())); - boolean completed = listWo.stream().map(wo -> WorkOrder.RUN_STATUS_VOIDED.equals(wo.getRunStatus())).findAny().isPresent(); - if (completed) { - yo.setStatus(curStatus); - } - } - this.updateById(yo); - } - - @Override - public boolean sendKit(Long yoId) { - YieldOrder yieldOrder = this.getById(yoId); - if (yieldOrder == null) { - throw new ServiceException("生产订单不存在"); - } - yieldOrder.setSjKitPreparation(2L); - yieldOrder.setKitPreparationMan(AuthUtil.getUserId()); - yieldOrder.setKitPreparationTime(new Date()); - return this.updateById(yieldOrder); - } - - @Override - public boolean moldComplete(Long yoId) { - YieldOrder yieldOrder = this.getById(yoId); - if (yieldOrder == null) { - throw new ServiceException("生产订单不存在"); - } - yieldOrder.setSjMoldPreparation(2L); - return this.updateById(yieldOrder); - } - - @Override - public String getMaxCardNo() { - return workOrderMapper.getMaxCardNo(); - } - - @Override - public YieldOrder selectByPartCOdeAndBatchNo(String partCode, String batchNo, String reworkOrder) { - return workOrderMapper.selectByPartCOdeAndBatchNo(partCode, batchNo, reworkOrder); - } - - @Override - public String getNewCardNo(String cardNo) { - YieldOrder yieldOrder = this.getOne(Wrappers.lambdaQuery(YieldOrder.class).eq(YieldOrder::getCardNo, cardNo)); - if (yieldOrder != null) { - return yieldOrder.getCardNo(); - } - // todo 通过旧路线卡号去erp获取新的 - return ""; - } - - @Override - public Long getWcId(Long orderId) { + } else if (YieldOrder.CUR_STATUS_COMPLETED.equals(curStatus)) { + List listWo = workOrderMapper.listByYoId(yo.getId()); + boolean completed = listWo.stream().map(wo -> wo.getRunStatus() >= WorkOrder.RUN_STATUS_COMPLETED).findAny().isPresent(); + if (completed) { + yo.setStatus(curStatus); + } + } else if (YieldOrder.CUR_STATUS_VOIDED.equals(curStatus)) { + //整单报废 + List listWo = workOrderMapper.selectList(Wrappers.lambdaQuery(WorkOrder.class).eq(WorkOrder::getYoId, yo.getId())); + boolean completed = listWo.stream().map(wo -> WorkOrder.RUN_STATUS_VOIDED.equals(wo.getRunStatus())).findAny().isPresent(); + if (completed) { + yo.setStatus(curStatus); + } + } + this.updateById(yo); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean sendKit(Long yoId) { + YieldOrder yieldOrder = this.getById(yoId); + if (yieldOrder == null) { + throw new ServiceException("生产订单不存在"); + } + yieldOrder.setSjKitPreparation(2L); + yieldOrder.setKitPreparationMan(AuthUtil.getUserId()); + yieldOrder.setKitPreparationTime(new Date()); + boolean b = this.updateById(yieldOrder); + if (b) { + // 订单接收 + this.confirm(yieldOrder.getCardNo(), "0"); + } + return b; + } + + @Override + public boolean moldComplete(Long yoId) { + YieldOrder yieldOrder = this.getById(yoId); + if (yieldOrder == null) { + throw new ServiceException("生产订单不存在"); + } + yieldOrder.setSjMoldPreparation(2L); + return this.updateById(yieldOrder); + } + + @Override + public String getMaxCardNo() { + return workOrderMapper.getMaxCardNo(); + } + + @Override + public YieldOrder selectByPartCOdeAndBatchNo(String partCode, String batchNo, String reworkOrder) { + return workOrderMapper.selectByPartCOdeAndBatchNo(partCode, batchNo, reworkOrder); + } + + @Override + public String getNewCardNo(String cardNo) { + YieldOrder yieldOrder = this.getOne(Wrappers.lambdaQuery(YieldOrder.class).eq(YieldOrder::getCardNo, cardNo)); + if (yieldOrder != null) { + return yieldOrder.getCardNo(); + } + // todo 通过旧路线卡号去erp获取新的 + return ""; + } + + @Override + public Long getWcId(Long orderId) { // return baseMapper.getWcId(orderId); - List list = list(new LambdaQueryWrapper().eq(YieldOrder::getId, orderId)); - if (list!=null&&!list.isEmpty()) { + List list = list(new LambdaQueryWrapper().eq(YieldOrder::getId, orderId)); + if (list != null && !list.isEmpty()) { return list.get(0).getWorkCenterId(); } - return null; - } - - @Override - public void saveGlassCake(YieldPlan yieldPlan, DsPartEntity dsPart) { - String yoCode = this.nextBlbCode(0); - String cardNo = this.nextBlbCode(1); - String batchNo = this.nextBlbCode(2); - this.saveGlassCake(yoCode, cardNo, batchNo, yieldPlan, dsPart); - } - - @Override - public void saveGlassCake(String yoCode, String cardNo, String batchNo, YieldPlan po, DsPartEntity dsPartSub) { - yieldOrderClient.saveGlassCake(yoCode, cardNo, batchNo, po.getProductIdent(), po.getDemandDate(), po.getPlanUser().toString(), - po.getYpCode(), po.getYpQty(), dsPartSub.getPartCode(), dsPartSub.getQuota()); - } - - @Override - public Long getCount(String yoCode, String cardNo, String batchNo, String roamNo) { - return this.count(Wrappers.lambdaQuery().eq(YieldOrder::getYoCode, yoCode) - .eq(YieldOrder::getCardNo, cardNo) - .eq(YieldOrder::getBatchNo, batchNo) - .eq(YieldOrder::getRoamNo, roamNo)); - } - - @Override - public R getCardNo(String cardNo) { + return null; + } + + @Override + public void saveGlassCake(YieldPlan yieldPlan, DsPartEntity dsPart) { + String yoCode = this.nextBlbCode(0); + String cardNo = this.nextBlbCode(1); + String batchNo = this.nextBlbCode(2); + this.saveGlassCake(yoCode, cardNo, batchNo, yieldPlan, dsPart); + } + + @Override + public void saveGlassCake(String yoCode, String cardNo, String batchNo, YieldPlan po, DsPartEntity dsPartSub) { + yieldOrderClient.saveGlassCake(yoCode, cardNo, batchNo, po.getProductIdent(), po.getDemandDate(), po.getPlanUser().toString(), + po.getYpCode(), po.getYpQty(), dsPartSub.getPartCode(), dsPartSub.getQuota()); + } + + @Override + public Long getCount(String yoCode, String cardNo, String batchNo, String roamNo) { + return this.count(Wrappers.lambdaQuery().eq(YieldOrder::getYoCode, yoCode) + .eq(YieldOrder::getCardNo, cardNo) + .eq(YieldOrder::getBatchNo, batchNo) + .eq(YieldOrder::getRoamNo, roamNo)); + } + + @Override + public R getCardNo(String cardNo) { if (cardNo.isEmpty()) { - return R.fail("路线卡号不能为空"); + return R.fail("路线卡号不能为空"); } - List list = list(new LambdaQueryWrapper().eq(YieldOrder::getCardNo, cardNo)); - if (list==null||list.size()==0) { + List list = list(new LambdaQueryWrapper().eq(YieldOrder::getCardNo, cardNo)); + if (list == null || list.size() == 0) { // return R.fail("路线卡号未查询到详情"); - List yieldOrderList = yieldOrderService.list(new LambdaQueryWrapper().eq(PrYieldOrder::getCardNo, cardNo)); - if (yieldOrderList==null||yieldOrderList.size()==0) { - return R.fail("路线卡号未查询到详情"); - } - return R.data(yieldOrderList.get(0)); - } - - return R.data(list.get(0)); - } - - @Override - public void saveOrder(List yieldOrderList) { - yieldOrderList.forEach(order -> { - Long vCount = 0L; - //1.从生产订单表中查询订单 - vCount = this.getCount(order.getYoCode(), order.getCardNo(), order.getBatchNo(), order.getRoamNo()); - if (vCount > 0) { - //2.判断是否查询到订单,若查询到,直接退出 - log.error(String.format("零件号【%s】,批号【%s】工单已转交,请勿重复转交!", order.getPartCode(), order.getBatchNo())); - } - //3.按零级号查询零件信息,零件信息处理 - order.setYpArea((double) 0); - List dsPartList = dsPartService.list(new QueryWrapper().lambda() - .eq(DsPartEntity::getPartCode, order.getPartCode())); - if (dsPartList != null && dsPartList.size() > 0) { - DsPartEntity dsPartEntity = dsPartList.get(0); - order.setProductType(dsPartEntity.getProductType()); - order.setPartName(dsPartEntity.getPartName()); - if (dsPartEntity.getArea() != null) { - order.setYpArea(dsPartEntity.getArea()); - } - order.setPrimaryCraft(dsPartEntity.getCraftWay()); - order.setPlate(dsPartEntity.getPlate()); - } - //4.查询是否为会议急件 - Long vPriority = yieldPlanMapper.getMaxPriority(order.getYpCode()); - order.setPriorityErp(vPriority.intValue()); - //5. 厂内生产急件标识赋值 - Long count = yieldPlanMapper.getCount(order.getYpCode(), order.getPartCode(), order.getBatchNo()); - if (count > 0) { - order.setSiteWork(true); - order.setPriorityErp(5); - } - //6.对优先级字段进行转换,新旧mes中订单优先级的值不一致 - vPriority += 14000; - order.setPriorityErp(Integer.parseInt(vPriority.toString())); - //7.烧结订单处理, -- 默认厂内加工 - if ("2".equals(order.getYieldType()) || "3".equals(order.getYieldType())) { - order.setSiteWork(true); - } - //8.玻璃饼订单自动入库, 更新接收状态 - order.setReceiveStatus(11000); - if ("3".equals(order.getYieldType())) { - order.setStatus(11001); - //对接受人赋值 - Long receiveUser = yieldPlanMapper.getReceiveUser(); - order.setReceiveUser(receiveUser); - //对接收时间进行赋值 - order.setReceiveTime(new Date()); - } - //9.从生产计划中查询产品系列和订单备注 - LineMemoVo lineMemoVo = yieldPlanMapper.getLineMemo(order.getYpCode()); - if (lineMemoVo != null && lineMemoVo.getSum() == 0) { - order.setMemo(""); - order.setYpProductLine(""); - } else { - order.setMemo(lineMemoVo.getMemo()); - order.setYpProductLine(lineMemoVo.getProdLine()); - } - }); - this.saveBatch(yieldOrderList); - } - - @Override - public List getToolByPartCode(String partCode) { - List list = new ArrayList<>(); - DsPartEntity part = dsPartService.selectDsPartByPatCodeAndVersion(partCode, null); - if(null == part){ - return list; - } - if("1".equals(part.getIsSintering()) && "0".equals(part.getIsGlassCake())){ - List subPartList = dsPartService.getPartSubList(partCode,null); - list = subPartList.stream().filter(item -> DsPartConstant.SIN_TER_TYPE_SMM.equals(item.getSinTerType())).map(DsPartEntity::getPartCode).collect(Collectors.toList()); - } - if(DsPartConstant.SIN_TER_TYPE_SMM.equals(part.getSinTerType())){ - List subPartList = dsPartService.getPartSubList(partCode,null); - list = subPartList.stream().map(DsPartEntity::getPartCode).collect(Collectors.toList()); - } - if(DsPartConstant.SIN_TER_TYPE_BLB.equals(part.getSinTerType())){ - List processMoldToolList = dsPartService.getClassCakeWork(partCode,null,null); - if(CollectionUtils.isNotEmpty(processMoldToolList)){ - list = processMoldToolList.stream().map(DsProcessMoldToolEntity::getMoldCode).collect(Collectors.toList()); - } - } - return list; - } - - @Override - public void calculateCoatingMaterial() { - LocalDate today = LocalDate.now(); - LocalDateTime startOfDay = today.atStartOfDay(); - LocalDateTime endOfDay = today.atTime(LocalTime.MAX); - LambdaQueryWrapper wrapper = Wrappers.query().lambda() - .between(YieldOrder::getReceiveTime, - DateUtil.toDate(startOfDay), - DateUtil.toDate(endOfDay)).isNull(YieldOrder::getGoodsDemand); - List list = this.list(wrapper); - log.info("需要计算镀层物料需求的物料数量是:"+list.size()); - if(CollectionUtils.isNotEmpty(list)){ - for(YieldOrder yieldOrder : list){ - plateGoodsRecordService.calculateCoatingMaterial(yieldOrder); - } - } - } - - @Override - public List confirm(String cardNo,String mark) { - YieldOrder yieldOrder = this.getOne(Wrappers.lambdaQuery().eq(YieldOrder::getCardNo,cardNo)); - if(null == yieldOrder){ - throw new ServiceException("未找到订单("+cardNo+")!"); - } - if("1".equals(mark)){ - yieldOrder.setSiteWork(true); - } - - // 接收订单前置 - yieldOrder.setReceiveTime(new Date()); - yieldOrder.setReceiveUser(AuthUtil.getUserId()); - yieldOrder.setReceiveStatus(YieldOrderEnum.RECEIVE_STATUS_YES.getCode()); - this.updateById(yieldOrder); - - // 校验合规性校验是否通过 - if(!yieldOrder.getValidationResult().equals(YieldOrderEnum.VALIDATION_RESULT_PASS.getCode())){ - throw new ServiceException("订单接收成功,校验异常请及时处理"); - } - - boolean result = this.verifyYieldOrderResource(yieldOrder); - if(result){ - List list = yieldOrderCraftService.list(Wrappers.lambdaQuery().eq(YieldOrderCraft::getYoId,yieldOrder.getId()).orderByAsc(YieldOrderCraft::getProcessNo)); - list.stream().forEach(craft -> { - if(craft.getWorkCenterId() != null){ - WorkCenter workCenter = workCenterService.getById(craft.getWorkCenterId()); - craft.setWorkCenterName(workCenter.getWcName()); - } - }); - return list; - }else { - throw new ServiceException("订单接收成功,分派异常请及时处理"); - } - } - - /** - * 验证零件子件信息 - * - * @param partCode - * @param sinTerType - * @param text - */ - private List checkSub(String partCode, Integer sinTerType, String text) throws BusinessException { - // 按零件号查询子件 - List lst = dsPartService.selectDsPartByPatCode(partCode, sinTerType); - if (lst == null || lst.size() == 0) { - String errMsg = MessageFormat.format("未找到{0}子件信息!", text); - throw new BusinessException(errMsg); - } - return lst; - } - - /** - * 验证并创建子件 - * - * @param yieldOrder - * @param subList - * @param receiveUser - */ - private void createSubYieldOrder(YieldOrder yieldOrder, List subList, Boolean isManual, Long receiveUser) throws BusinessException { - List dsCraftList; - List idList = new ArrayList<>(); - for (DsPartEntity dsPartSub : subList) { - //如果子件号为空或者是无,则跳过 - if (StringUtils.isBlank(dsPartSub.getPartCode()) || dsPartSub.getPartCode().equals("无")) { - continue; - } + List yieldOrderList = yieldOrderService.list(new LambdaQueryWrapper().eq(PrYieldOrder::getCardNo, cardNo)); + if (yieldOrderList == null || yieldOrderList.size() == 0) { + return R.fail("路线卡号未查询到详情"); + } + return R.data(yieldOrderList.get(0)); + } - DsPartEntity dsPart = dsPartService.selectDsPartByPatCodeAndVersion(dsPartSub.getPartCode(),null); - //验证子件是否存在对应零件,不存在则提示异常。 - if (dsPart == null) { - String errMsg = MessageFormat.format("子件{}未编制!", dsPartSub.getPartCode()); - throw new BusinessException(errMsg); - } - Integer yieldType = null; - if (DsPartConstant.SIN_TER_TYPE_KT.equals(dsPartSub.getSinTerType())) { - yieldType = YieldOrderEnum.YIELD_TYPE_4.getCode(); - } else if (DsPartConstant.SIN_TER_TYPE_CZ.equals(dsPartSub.getSinTerType())) { - yieldType = YieldOrderEnum.YIELD_TYPE_5.getCode(); - }else if (DsPartConstant.SIN_TER_TYPE_BLB.equals(dsPartSub.getSinTerType())) { - yieldType = YieldOrderEnum.YIELD_TYPE_3.getCode(); - } else if (DsPartConstant.SIN_TER_TYPE_SMM.equals(dsPartSub.getSinTerType())) { - yieldType = YieldOrderEnum.YIELD_TYPE_6.getCode(); - } - if(null == yieldType){ - //如果子件类型为空 或者是其他 不生成子件订单 直接跳过 - continue; - } - //非石墨模玻璃饼子件,面积不允许为空 - boolean isGraphiteMoldGlassPart = yieldType.equals(YieldOrderEnum.YIELD_TYPE_6.getCode()) - || yieldType.equals(YieldOrderEnum.YIELD_TYPE_3.getCode()); - if (!isGraphiteMoldGlassPart && dsPart.getArea() == null) { - throw new BusinessException("非石墨模玻璃饼子件面积为空无法创建生产订单!"); - } - //验证子件是否存在二级工艺路线 + return R.data(list.get(0)); + } + + @Override + public void saveOrder(List yieldOrderList) { + yieldOrderList.forEach(order -> { + Long vCount = 0L; + //1.从生产订单表中查询订单 + vCount = this.getCount(order.getYoCode(), order.getCardNo(), order.getBatchNo(), order.getRoamNo()); + if (vCount > 0) { + //2.判断是否查询到订单,若查询到,直接退出 + log.error(String.format("零件号【%s】,批号【%s】工单已转交,请勿重复转交!", order.getPartCode(), order.getBatchNo())); + } + //3.按零级号查询零件信息,零件信息处理 + order.setYpArea((double) 0); + List dsPartList = dsPartService.list(new QueryWrapper().lambda() + .eq(DsPartEntity::getPartCode, order.getPartCode())); + if (dsPartList != null && dsPartList.size() > 0) { + DsPartEntity dsPartEntity = dsPartList.get(0); + order.setProductType(dsPartEntity.getProductType()); + order.setPartName(dsPartEntity.getPartName()); + if (dsPartEntity.getArea() != null) { + order.setYpArea(dsPartEntity.getArea()); + } + order.setPrimaryCraft(dsPartEntity.getCraftWay()); + order.setPlate(dsPartEntity.getPlate()); + } + //4.查询是否为会议急件 + Long vPriority = yieldPlanMapper.getMaxPriority(order.getYpCode()); + order.setPriorityErp(vPriority.intValue()); + //5. 厂内生产急件标识赋值 + Long count = yieldPlanMapper.getCount(order.getYpCode(), order.getPartCode(), order.getBatchNo()); + if (count > 0) { + order.setSiteWork(true); + order.setPriorityErp(5); + } + //6.对优先级字段进行转换,新旧mes中订单优先级的值不一致 + vPriority += 14000; + order.setPriorityErp(Integer.parseInt(vPriority.toString())); + //7.烧结订单处理, -- 默认厂内加工 + if ("2".equals(order.getYieldType()) || "3".equals(order.getYieldType())) { + order.setSiteWork(true); + } + //8.玻璃饼订单自动入库, 更新接收状态 + order.setReceiveStatus(11000); + if ("3".equals(order.getYieldType())) { + order.setStatus(11001); + //对接受人赋值 + Long receiveUser = yieldPlanMapper.getReceiveUser(); + order.setReceiveUser(receiveUser); + //对接收时间进行赋值 + order.setReceiveTime(new Date()); + } + //9.从生产计划中查询产品系列和订单备注 + LineMemoVo lineMemoVo = yieldPlanMapper.getLineMemo(order.getYpCode()); + if (lineMemoVo != null && lineMemoVo.getSum() == 0) { + order.setMemo(""); + order.setYpProductLine(""); + } else { + order.setMemo(lineMemoVo.getMemo()); + order.setYpProductLine(lineMemoVo.getProdLine()); + } + }); + this.saveBatch(yieldOrderList); + } + + @Override + public List getToolByPartCode(String partCode) { + List list = new ArrayList<>(); + DsPartEntity part = dsPartService.selectDsPartByPatCodeAndVersion(partCode, null); + if (null == part) { + return list; + } + if ("1".equals(part.getIsSintering()) && "0".equals(part.getIsGlassCake())) { + List subPartList = dsPartService.getPartSubList(partCode, null); + list = subPartList.stream().filter(item -> DsPartConstant.SIN_TER_TYPE_SMM.equals(item.getSinTerType())).map(DsPartEntity::getPartCode).collect(Collectors.toList()); + } + if (DsPartConstant.SIN_TER_TYPE_SMM.equals(part.getSinTerType())) { + List subPartList = dsPartService.getPartSubList(partCode, null); + list = subPartList.stream().map(DsPartEntity::getPartCode).collect(Collectors.toList()); + } + if (DsPartConstant.SIN_TER_TYPE_BLB.equals(part.getSinTerType())) { + List processMoldToolList = dsPartService.getClassCakeWork(partCode, null, null); + if (CollectionUtils.isNotEmpty(processMoldToolList)) { + list = processMoldToolList.stream().map(DsProcessMoldToolEntity::getMoldCode).collect(Collectors.toList()); + } + } + return list; + } + + @Override + public void calculateCoatingMaterial() { + LocalDate today = LocalDate.now(); + LocalDateTime startOfDay = today.atStartOfDay(); + LocalDateTime endOfDay = today.atTime(LocalTime.MAX); + LambdaQueryWrapper wrapper = Wrappers.query().lambda() + .between(YieldOrder::getReceiveTime, + DateUtil.toDate(startOfDay), + DateUtil.toDate(endOfDay)).isNull(YieldOrder::getGoodsDemand); + List list = this.list(wrapper); + log.info("需要计算镀层物料需求的物料数量是:" + list.size()); + if (CollectionUtils.isNotEmpty(list)) { + for (YieldOrder yieldOrder : list) { + plateGoodsRecordService.calculateCoatingMaterial(yieldOrder); + } + } + } + + @Override + public List confirm(String cardNo, String mark) { + YieldOrder yieldOrder = this.getOne(Wrappers.lambdaQuery().eq(YieldOrder::getCardNo, cardNo)); + if (null == yieldOrder) { + throw new ServiceException("未找到订单(" + cardNo + ")!"); + } + if ("1".equals(mark)) { + yieldOrder.setSiteWork(true); + } + + // 接收订单前置 + yieldOrder.setReceiveTime(new Date()); + yieldOrder.setReceiveUser(AuthUtil.getUserId()); + yieldOrder.setReceiveStatus(YieldOrderEnum.RECEIVE_STATUS_YES.getCode()); + this.updateById(yieldOrder); + + // 校验合规性校验是否通过 + if (!yieldOrder.getValidationResult().equals(YieldOrderEnum.VALIDATION_RESULT_PASS.getCode())) { + throw new ServiceException("订单接收成功,校验异常请及时处理"); + } + + boolean result = this.verifyYieldOrderResource(yieldOrder); + if (result) { + List list = yieldOrderCraftService.list(Wrappers.lambdaQuery().eq(YieldOrderCraft::getYoId, yieldOrder.getId()).orderByAsc(YieldOrderCraft::getProcessNo)); + list.stream().forEach(craft -> { + if (craft.getWorkCenterId() != null) { + WorkCenter workCenter = workCenterService.getById(craft.getWorkCenterId()); + craft.setWorkCenterName(workCenter.getWcName()); + } + }); + return list; + } else { + throw new ServiceException("订单接收成功,分派异常请及时处理"); + } + } + + /** + * 验证零件子件信息 + * + * @param partCode + * @param sinTerType + * @param text + */ + private List checkSub(String partCode, Integer sinTerType, String text) throws BusinessException { + // 按零件号查询子件 + List lst = dsPartService.selectDsPartByPatCode(partCode, sinTerType); + if (lst == null || lst.size() == 0) { + String errMsg = MessageFormat.format("未找到{0}子件信息!", text); + throw new BusinessException(errMsg); + } + return lst; + } + + /** + * 验证并创建子件 + * + * @param yieldOrder + * @param subList + * @param receiveUser + */ + private void createSubYieldOrder(YieldOrder yieldOrder, List subList, Boolean isManual, Long receiveUser) throws BusinessException { + List dsCraftList; + List idList = new ArrayList<>(); + for (DsPartEntity dsPartSub : subList) { + //如果子件号为空或者是无,则跳过 + if (StringUtils.isBlank(dsPartSub.getPartCode()) || dsPartSub.getPartCode().equals("无")) { + continue; + } + + DsPartEntity dsPart = dsPartService.selectDsPartByPatCodeAndVersion(dsPartSub.getPartCode(), null); + //验证子件是否存在对应零件,不存在则提示异常。 + if (dsPart == null) { + String errMsg = MessageFormat.format("子件{}未编制!", dsPartSub.getPartCode()); + throw new BusinessException(errMsg); + } + Integer yieldType = null; + if (DsPartConstant.SIN_TER_TYPE_KT.equals(dsPartSub.getSinTerType())) { + yieldType = YieldOrderEnum.YIELD_TYPE_4.getCode(); + } else if (DsPartConstant.SIN_TER_TYPE_CZ.equals(dsPartSub.getSinTerType())) { + yieldType = YieldOrderEnum.YIELD_TYPE_5.getCode(); + } else if (DsPartConstant.SIN_TER_TYPE_BLB.equals(dsPartSub.getSinTerType())) { + yieldType = YieldOrderEnum.YIELD_TYPE_3.getCode(); + } else if (DsPartConstant.SIN_TER_TYPE_SMM.equals(dsPartSub.getSinTerType())) { + yieldType = YieldOrderEnum.YIELD_TYPE_6.getCode(); + } + if (null == yieldType) { + //如果子件类型为空 或者是其他 不生成子件订单 直接跳过 + continue; + } + //非石墨模玻璃饼子件,面积不允许为空 + boolean isGraphiteMoldGlassPart = yieldType.equals(YieldOrderEnum.YIELD_TYPE_6.getCode()) + || yieldType.equals(YieldOrderEnum.YIELD_TYPE_3.getCode()); + if (!isGraphiteMoldGlassPart && dsPart.getArea() == null) { + throw new BusinessException("非石墨模玻璃饼子件面积为空无法创建生产订单!"); + } + //验证子件是否存在二级工艺路线 // dsCraftList = dsCraftService.listByPartId(dsPart.getId()); // if (dsCraftList == null || dsCraftList.size() == 0) { // String errMsg = MessageFormat.format("子件{}未编制二级工艺!", dsPartSub.getPartCode()); // throw new BusinessException(errMsg); // } - //获取金属件子件B号,如果未获取到,提示异常 - String roamNo = null; - if (DsPartConstant.SIN_TER_TYPE_KT.equals(dsPartSub.getSinTerType()) || - DsPartConstant.SIN_TER_TYPE_CZ.equals(dsPartSub.getSinTerType()) || - DsPartConstant.SIN_TER_TYPE_BLB.equals(dsPartSub.getSinTerType()) - ) { - roamNo = yieldOrderClient.getChildRoamNoByPartCode(dsPartSub.getPartCode()); + //获取金属件子件B号,如果未获取到,提示异常 + String roamNo = null; + if (DsPartConstant.SIN_TER_TYPE_KT.equals(dsPartSub.getSinTerType()) || + DsPartConstant.SIN_TER_TYPE_CZ.equals(dsPartSub.getSinTerType()) || + DsPartConstant.SIN_TER_TYPE_BLB.equals(dsPartSub.getSinTerType()) + ) { + roamNo = yieldOrderClient.getChildRoamNoByPartCode(dsPartSub.getPartCode()); // if (StringUtils.isBlank(roamNo)) { // String errMsg = MessageFormat.format("子件{}未找到对应B号,请在ERP核查子件一级路线!", dsPartSub.getPartCode()); // throw new BusinessException(errMsg); // } - } - YieldOrder subYield = BeanUtil.copy(yieldOrder, YieldOrder.class); - subYield.setId(null); - subYield.setFatherYoId(yieldOrder.getId()); - subYield.setYoCode(nextYieldOrderCode(yieldOrder.getYoCode())); - subYield.setPartCode(dsPart.getPartCode()); - subYield.setProductType(dsPart.getProductType()); - subYield.setPartName(dsPart.getPartName()); - subYield.setPlate(dsPart.getPlate()); - subYield.setUseDept("热表分厂"); - subYield.setYpArea(dsPart.getArea() == null ? 0d : dsPart.getArea()); - subYield.setDemandDate(DateUtil.plusDays(DateUtil.now(), 2)); - subYield.setReleaseDate(DateUtil.now()); - subYield.setCardNo(nextCardNo()); - subYield.setBatchNo(nextBatchNo()); - subYield.setSiteWork(Boolean.TRUE); - subYield.setYpQty(yieldOrder.getYpQty() * dsPartSub.getQuota()); - subYield.setPrimaryCraft(dsPart.getCraftWay()); - subYield.setRoamNo(roamNo); - subYield.setStatus(YieldOrderEnum.STATUS_NORMAL.getCode()); - subYield.setYieldType(yieldType); - subYield.setEntrustDept("热表分厂"); - subYield.setBusinessType(-1); - subYield.setPlanDeptCode("3400"); - //记录父订单的id - subYield.setParentYoId(yieldOrder.getId()); - // 父件订单中无接收人信息时, 以当前人为接收人 - if (yieldOrder.getReceiveUser() == null) { - subYield.setReceiveUser(receiveUser); - } - if (yieldOrder.getReceiveTime() == null) { - subYield.setReceiveTime(DateUtil.now()); - } - subYield.setProduceBool(Boolean.FALSE); - if (isManual) { - subYield.setManualIncrease(Boolean.TRUE); - subYield.setMemo("手动创建子件"); - } - this.save(subYield); - idList.add(subYield.getId()); - //烧结类型生产订单【玻璃饼下发状态】默认状态为【未下发】, - // 生成子件玻璃饼订单后变更为【已下发】; - // 其他类型生产订单的【玻璃饼下发状态】显示空 - if(yieldType.equals(YieldOrderEnum.YIELD_TYPE_3.getCode())){ - yieldOrder.setGlassBiscuitStatus(YieldOrder.GLASS_BISCUIT_ISSUED); - this.updateById(yieldOrder); - } - } - if(CollectionUtils.isNotEmpty(idList)){ - //生成的烧结子订单也需要进行合规性校验,另起线程异步执行 - CompletableFuture.runAsync(() -> { - this.dataVerify(idList); - }); - } - } - - private String nextYieldOrderCode(String yoCode) { - String codePattern = yoCode + "-B"; - - // 使用悲观锁查询当前最大编码 - LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(YieldOrder.class) - .likeRight(YieldOrder::getYoCode, codePattern) - .orderBy(true, false, YieldOrder::getYoCode) - .last("FOR UPDATE"); - - List list = baseMapper.selectList(wrapper); - - Integer num = 0; - if (!list.isEmpty()) { - String maxCode = list.get(0).getYoCode(); - num = Integer.parseInt(maxCode.substring(codePattern.length())); - } - - num++; - int len = Math.max(2, String.valueOf(num).length()); - return codePattern + StringPrefixUtils.prefix(String.valueOf(num), "0", len); - } - - @Override - public String nextCardNo() { - // 自增总长度 - int len = 5; - String codePattern = "R" + DateUtil.today() + StringPrefixUtils.prefix(String.valueOf(new Random().nextInt(10000)), "0", len); - - LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(YieldOrder.class) - .eq(YieldOrder::getCardNo, codePattern); - YieldOrder yieldOrder = baseMapper.selectOne(wrapper); - - if (yieldOrder != null && yieldOrder.getId() != null) { - return this.nextCardNo(); - } else { - return codePattern; - } - } - - private int getMaxCodeByPattern(String codePattern, int len){ - // 自增值 - int num = 0; - LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(YieldOrder.class) - .likeRight(YieldOrder::getBatchNo, codePattern) - .orderBy(true, false, YieldOrder::getYoCode); - List yieldOrderList = baseMapper.selectList(wrapper); - if(!CollectionUtils.isEmpty(yieldOrderList)){ - YieldOrder yieldOrder = yieldOrderList.get(0); - if (yieldOrder != null) { - num = Integer.parseInt(yieldOrder.getBatchNo().substring(codePattern.length(), codePattern.length() + len)); - } - } - num++; - return num; - } - - @Override - public String nextBatchNo() { - // 自增总长度 - int len = 3; - - // 编码模式 - String codePattern = "R" + DateUtil.today(); - int num = this.getMaxCodeByPattern(codePattern, len); - - // 下个编码 - return codePattern + StringPrefixUtils.prefix(String.valueOf(num), "0", len); - } - - /** - * @param codeType 0:订单号、1:流程卡号;2、批次号 - * @return String - * @Description: 用于给玻璃饼产生对应的订单号、 流程卡号、批次号 - * @Author dxl - * @CreateTime 2023/10/12 16:03 - */ - private String nextBlbCode(int codeType) { - // 自增总长度 - int len = 5; - if (codeType == 2) { - len = 3; - } - - // 编码模式 - String codePattern = "RB" + DateUtil.today(); - int num = this.getMaxCodeByPattern(codePattern, len); - - // 下个编码 - if (codeType == 0) { - codePattern = "WO-B" + DateUtil.today(); - } - return codePattern + StringPrefixUtils.prefix(String.valueOf(num), "0", len); - } - - /** - * 判定工艺级别 - * - * @param yieldOrder - * @return - * @throws BusinessException - */ - private Integer judgeRank(YieldOrder yieldOrder) { - DsPartEntity part = dsPartService.selectDsPartByPatCodeAndVersion(yieldOrder.getPartCode(), yieldOrder.getPartVersion()); - - // 工作订单备注中包含大小写的HTBY时,执行二级工艺 - // 取memo字段(但是从erp取数据时没有对memo赋值,所以判断不会执行) - if (yieldOrder.getMemo() != null && yieldOrder.getMemo().toLowerCase(Locale.ROOT).contains("htby")) { - return DsCraftEnum.RANK_TWO.getCode(); - } - - // 判定是否为镀金零件 - // 取局部镀零件表中数据 - LocallyPlatedPart locallyPlatedPart = locallyPlatedPartService.selectLocallyPlatedPartByPartCode(part.getPartCode()); - if (null != locallyPlatedPart) { + } + YieldOrder subYield = BeanUtil.copy(yieldOrder, YieldOrder.class); + subYield.setId(null); + subYield.setFatherYoId(yieldOrder.getId()); + subYield.setYoCode(nextYieldOrderCode(yieldOrder.getYoCode())); + subYield.setPartCode(dsPart.getPartCode()); + subYield.setProductType(dsPart.getProductType()); + subYield.setPartName(dsPart.getPartName()); + subYield.setPlate(dsPart.getPlate()); + subYield.setUseDept("热表分厂"); + subYield.setYpArea(dsPart.getArea() == null ? 0d : dsPart.getArea()); + subYield.setDemandDate(DateUtil.plusDays(DateUtil.now(), 2)); + subYield.setReleaseDate(DateUtil.now()); + subYield.setCardNo(nextCardNo()); + subYield.setBatchNo(nextBatchNo()); + subYield.setSiteWork(Boolean.TRUE); + subYield.setYpQty(yieldOrder.getYpQty() * dsPartSub.getQuota()); + subYield.setPrimaryCraft(dsPart.getCraftWay()); + subYield.setRoamNo(roamNo); + subYield.setStatus(YieldOrderEnum.STATUS_NORMAL.getCode()); + subYield.setYieldType(yieldType); + subYield.setEntrustDept("热表分厂"); + subYield.setBusinessType(-1); + subYield.setPlanDeptCode("3400"); + //记录父订单的id + subYield.setParentYoId(yieldOrder.getId()); + // 父件订单中无接收人信息时, 以当前人为接收人 + if (yieldOrder.getReceiveUser() == null) { + subYield.setReceiveUser(receiveUser); + } + if (yieldOrder.getReceiveTime() == null) { + subYield.setReceiveTime(DateUtil.now()); + } + subYield.setProduceBool(Boolean.FALSE); + if (isManual) { + subYield.setManualIncrease(Boolean.TRUE); + subYield.setMemo("手动创建子件"); + } + this.save(subYield); + idList.add(subYield.getId()); + //烧结类型生产订单【玻璃饼下发状态】默认状态为【未下发】, + // 生成子件玻璃饼订单后变更为【已下发】; + // 其他类型生产订单的【玻璃饼下发状态】显示空 + if (yieldType.equals(YieldOrderEnum.YIELD_TYPE_3.getCode())) { + yieldOrder.setGlassBiscuitStatus(YieldOrder.GLASS_BISCUIT_ISSUED); + this.updateById(yieldOrder); + } + } + if (CollectionUtils.isNotEmpty(idList)) { + //生成的烧结子订单也需要进行合规性校验,另起线程异步执行 + CompletableFuture.runAsync(() -> { + this.dataVerify(idList); + }); + } + } + + private String nextYieldOrderCode(String yoCode) { + String codePattern = yoCode + "-B"; + + // 使用悲观锁查询当前最大编码 + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(YieldOrder.class) + .likeRight(YieldOrder::getYoCode, codePattern) + .orderBy(true, false, YieldOrder::getYoCode) + .last("FOR UPDATE"); + + List list = baseMapper.selectList(wrapper); + + Integer num = 0; + if (!list.isEmpty()) { + String maxCode = list.get(0).getYoCode(); + num = Integer.parseInt(maxCode.substring(codePattern.length())); + } + + num++; + int len = Math.max(2, String.valueOf(num).length()); + return codePattern + StringPrefixUtils.prefix(String.valueOf(num), "0", len); + } + + @Override + public String nextCardNo() { + // 自增总长度 + int len = 5; + String codePattern = "R" + DateUtil.today() + StringPrefixUtils.prefix(String.valueOf(new Random().nextInt(10000)), "0", len); + + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(YieldOrder.class) + .eq(YieldOrder::getCardNo, codePattern); + YieldOrder yieldOrder = baseMapper.selectOne(wrapper); + + if (yieldOrder != null && yieldOrder.getId() != null) { + return this.nextCardNo(); + } else { + return codePattern; + } + } + + private int getMaxCodeByPattern(String codePattern, int len) { + // 自增值 + int num = 0; + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(YieldOrder.class) + .likeRight(YieldOrder::getBatchNo, codePattern) + .orderBy(true, false, YieldOrder::getYoCode); + List yieldOrderList = baseMapper.selectList(wrapper); + if (!CollectionUtils.isEmpty(yieldOrderList)) { + YieldOrder yieldOrder = yieldOrderList.get(0); + if (yieldOrder != null) { + num = Integer.parseInt(yieldOrder.getBatchNo().substring(codePattern.length(), codePattern.length() + len)); + } + } + num++; + return num; + } + + @Override + public String nextBatchNo() { + // 自增总长度 + int len = 3; + + // 编码模式 + String codePattern = "R" + DateUtil.today(); + int num = this.getMaxCodeByPattern(codePattern, len); + + // 下个编码 + return codePattern + StringPrefixUtils.prefix(String.valueOf(num), "0", len); + } + + /** + * @param codeType 0:订单号、1:流程卡号;2、批次号 + * @return String + * @Description: 用于给玻璃饼产生对应的订单号、 流程卡号、批次号 + * @Author dxl + * @CreateTime 2023/10/12 16:03 + */ + private String nextBlbCode(int codeType) { + // 自增总长度 + int len = 5; + if (codeType == 2) { + len = 3; + } + + // 编码模式 + String codePattern = "RB" + DateUtil.today(); + int num = this.getMaxCodeByPattern(codePattern, len); + + // 下个编码 + if (codeType == 0) { + codePattern = "WO-B" + DateUtil.today(); + } + return codePattern + StringPrefixUtils.prefix(String.valueOf(num), "0", len); + } + + /** + * 判定工艺级别 + * + * @param yieldOrder + * @return + * @throws BusinessException + */ + private Integer judgeRank(YieldOrder yieldOrder) { + DsPartEntity part = dsPartService.selectDsPartByPatCodeAndVersion(yieldOrder.getPartCode(), yieldOrder.getPartVersion()); + + // 工作订单备注中包含大小写的HTBY时,执行二级工艺 + // 取memo字段(但是从erp取数据时没有对memo赋值,所以判断不会执行) + if (yieldOrder.getMemo() != null && yieldOrder.getMemo().toLowerCase(Locale.ROOT).contains("htby")) { + return DsCraftEnum.RANK_TWO.getCode(); + } + + // 判定是否为镀金零件 + // 取局部镀零件表中数据 + LocallyPlatedPart locallyPlatedPart = locallyPlatedPartService.selectLocallyPlatedPartByPartCode(part.getPartCode()); + if (null != locallyPlatedPart) { // if (CommonConstant.BOOLEAN_TRUE.equals(part.getGoldMark())) { - // 获取零件工艺级别面积判定值 + // 获取零件工艺级别面积判定值 // Integer levConfirmVal = 20; // if (levConfirmVal != null) { // // 计算生产订单总面积 @@ -1532,111 +1539,111 @@ public class YieldOrderServiceImpl extends BaseServiceImpllambdaQuery().eq(QualityGradeEntity::getQualityGrade,yieldOrder.getProductIdent())); - if(qualityGrade != null && "1".equals(qualityGrade.getIsLocal())){ - // 若局部镀质量等级存在, 返回一级工艺 - return DsCraftEnum.RANK_ONE.getCode(); - } - } - } - - // 获取零件配置码 - String configNo = part.getConfigCode(); - if ("E9".equals(configNo) || "E12".equals(configNo)) { - //E9判定 - if (yieldOrder.getBatchNo().contains("MP") || yieldOrder.getBatchNo().contains("mp")) { - return DsCraftEnum.RANK_ONE.getCode(); - } - return DsCraftEnum.RANK_TWO.getCode(); - } - - return null; - } - - @Override - public String nextCode(Object obj) { - // 自增总长度 - int len = 2; - // 自增值 - Integer num = null; - - // 编码模式 - String codePattern = obj.toString() + "-B"; - - // 当前模式下最大编码 - YieldOrder yieldOrder = baseMapper.getMaxByCodePattern(codePattern); - if (yieldOrder != null) { - num = Integer.parseInt(yieldOrder.getYoCode().substring(codePattern.length())); - } - - if (num == null) { - num = 0; - } - - num++; - - // 下个编码 - return codePattern + StringPrefixUtils.prefix(String.valueOf(num), "0", len); - } - - public boolean createBlbYieldOrder(String partCode,Double qty,String memo){ - DsPartEntity dsPart = dsPartService.selectDsPartByPatCodeAndVersion(partCode,null); - String roamNo = yieldOrderClient.getChildRoamNoByPartCode(partCode); - YieldOrder order = new YieldOrder(); - order.setId(null); - order.setYoCode(nextBlbCode2(0)); - order.setPartCode(partCode); - order.setProductType(dsPart.getProductType()); - order.setPartName(dsPart.getPartName()); - order.setPlate(dsPart.getPlate()); - order.setUseDept("热表分厂"); - order.setYpArea(dsPart.getArea() == null ? 0d : dsPart.getArea()); - order.setDemandDate(DateUtil.plusDays(DateUtil.now(), 7)); - order.setReleaseDate(DateUtil.now()); - order.setCardNo(nextBlbCode2(1)); - order.setBatchNo(nextBlbCode2(2)); - order.setSiteWork(Boolean.TRUE); - order.setYpQty(qty); - order.setPrimaryCraft(dsPart.getCraftWay()); - order.setRoamNo(roamNo); - order.setStatus(YieldOrderEnum.STATUS_NORMAL.getCode()); - order.setYieldType(YieldOrderEnum.YIELD_TYPE_3.getCode()); - order.setPriorityAps(5); - order.setEntrustDept("热表分厂"); - order.setBusinessType(-1); - order.setPlanDeptCode("3400"); - order.setReceiveTime(DateUtil.now()); - order.setProduceBool(Boolean.FALSE); - order.setMemo(memo); - order.setProductIdent("JI"); - return this.save(order); - } - - /** - * @param codeType 0:订单号、1:流程卡号;2、批次号 - * @return String - * @Description: 用于给玻璃饼产生对应的订单号、 流程卡号、批次号 - * @Author dxl - * @CreateTime 2023/10/12 16:03 - */ - private String nextBlbCode2(int codeType) { - // 自增总长度 - int len = 5; - - - // 编码模式 - String codePattern = "RB" + DateUtil.today().substring(2); - int num = this.getMaxCodeByPattern(codePattern, len); - - // 下个编码 - if (codeType == 0) { - codePattern = "WO-B" + DateUtil.today().substring(2); - }else if(codeType == 2){ - codePattern = "Y" + DateUtil.today().substring(2); - } - return codePattern + StringPrefixUtils.prefix(String.valueOf(num), "0", len); - } + if (Func.isNotEmpty(yieldOrder.getProductIdent())) { + //根据订单的质量等级去质量等级表查询是否局部镀 + QualityGradeEntity qualityGrade = qualityGradeService.getOne(Wrappers.lambdaQuery().eq(QualityGradeEntity::getQualityGrade, yieldOrder.getProductIdent())); + if (qualityGrade != null && "1".equals(qualityGrade.getIsLocal())) { + // 若局部镀质量等级存在, 返回一级工艺 + return DsCraftEnum.RANK_ONE.getCode(); + } + } + } + + // 获取零件配置码 + String configNo = part.getConfigCode(); + if ("E9".equals(configNo) || "E12".equals(configNo)) { + //E9判定 + if (yieldOrder.getBatchNo().contains("MP") || yieldOrder.getBatchNo().contains("mp")) { + return DsCraftEnum.RANK_ONE.getCode(); + } + return DsCraftEnum.RANK_TWO.getCode(); + } + + return null; + } + + @Override + public String nextCode(Object obj) { + // 自增总长度 + int len = 2; + // 自增值 + Integer num = null; + + // 编码模式 + String codePattern = obj.toString() + "-B"; + + // 当前模式下最大编码 + YieldOrder yieldOrder = baseMapper.getMaxByCodePattern(codePattern); + if (yieldOrder != null) { + num = Integer.parseInt(yieldOrder.getYoCode().substring(codePattern.length())); + } + + if (num == null) { + num = 0; + } + + num++; + + // 下个编码 + return codePattern + StringPrefixUtils.prefix(String.valueOf(num), "0", len); + } + + public boolean createBlbYieldOrder(String partCode, Double qty, String memo) { + DsPartEntity dsPart = dsPartService.selectDsPartByPatCodeAndVersion(partCode, null); + String roamNo = yieldOrderClient.getChildRoamNoByPartCode(partCode); + YieldOrder order = new YieldOrder(); + order.setId(null); + order.setYoCode(nextBlbCode2(0)); + order.setPartCode(partCode); + order.setProductType(dsPart.getProductType()); + order.setPartName(dsPart.getPartName()); + order.setPlate(dsPart.getPlate()); + order.setUseDept("热表分厂"); + order.setYpArea(dsPart.getArea() == null ? 0d : dsPart.getArea()); + order.setDemandDate(DateUtil.plusDays(DateUtil.now(), 7)); + order.setReleaseDate(DateUtil.now()); + order.setCardNo(nextBlbCode2(1)); + order.setBatchNo(nextBlbCode2(2)); + order.setSiteWork(Boolean.TRUE); + order.setYpQty(qty); + order.setPrimaryCraft(dsPart.getCraftWay()); + order.setRoamNo(roamNo); + order.setStatus(YieldOrderEnum.STATUS_NORMAL.getCode()); + order.setYieldType(YieldOrderEnum.YIELD_TYPE_3.getCode()); + order.setPriorityAps(5); + order.setEntrustDept("热表分厂"); + order.setBusinessType(-1); + order.setPlanDeptCode("3400"); + order.setReceiveTime(DateUtil.now()); + order.setProduceBool(Boolean.FALSE); + order.setMemo(memo); + order.setProductIdent("JI"); + return this.save(order); + } + + /** + * @param codeType 0:订单号、1:流程卡号;2、批次号 + * @return String + * @Description: 用于给玻璃饼产生对应的订单号、 流程卡号、批次号 + * @Author dxl + * @CreateTime 2023/10/12 16:03 + */ + private String nextBlbCode2(int codeType) { + // 自增总长度 + int len = 5; + + + // 编码模式 + String codePattern = "RB" + DateUtil.today().substring(2); + int num = this.getMaxCodeByPattern(codePattern, len); + + // 下个编码 + if (codeType == 0) { + codePattern = "WO-B" + DateUtil.today().substring(2); + } else if (codeType == 2) { + codePattern = "Y" + DateUtil.today().substring(2); + } + return codePattern + StringPrefixUtils.prefix(String.valueOf(num), "0", len); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java index e750ac13..05205b40 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java @@ -73,6 +73,8 @@ import org.springblade.system.cache.UserCache; import org.springblade.system.feign.IDictClient; import org.springblade.system.pojo.entity.Dict; import org.springblade.system.pojo.entity.User; +import org.springblade.wms.feign.StGlassCakeOutClient; +import org.springblade.wms.pojo.dto.StGlassCakeOutDTO; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -105,6 +107,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl dsProcessProjectEntities = dsPartService.selectDsProcessProjectByCraftId(yieldOrder.getCraftId(),null); + List dsProcessProjectEntities = dsPartService.selectDsProcessProjectByCraftId(yieldOrder.getCraftId(), null); if (dsProcessProjectEntities == null || dsProcessProjectEntities.isEmpty()) { return false; } @@ -2654,7 +2669,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl> result = new ArrayList<>(); if (mapList != null && !mapList.isEmpty()) { - for (Map map : mapList) { + for (Map map : mapList) { Map item = new HashMap<>(); item.put("value", map.get("KEY") != null ? map.get("KEY") : ""); item.put("label", map.get("VALUE") != null ? map.get("VALUE") : ""); @@ -2665,24 +2680,24 @@ public class WorkOrderServiceImpl extends BaseServiceImpl queryAllocationMess(AllocationMessPageDTO dto) { + public Map queryAllocationMess(AllocationMessPageDTO dto) { List allocationMessList = erpDataLogisticsClient.queryAllocationMess(dto).getData(); int totalAllocationMessNum = erpDataLogisticsClient.queryAllocationMessNum(dto).getData(); - Map result = new HashMap<>(3); - result.put("current",dto.getCurrent()); - result.put("records",allocationMessList); - result.put("total",totalAllocationMessNum); + Map result = new HashMap<>(3); + result.put("current", dto.getCurrent()); + result.put("records", allocationMessList); + result.put("total", totalAllocationMessNum); return result; } @Override - public Map queryAllocationStatistics(AllocationMessPageDTO dto) { + public Map queryAllocationStatistics(AllocationMessPageDTO dto) { List allocationMessList = erpDataLogisticsClient.queryAllocationStatistics(dto).getData(); int totalAllocationMessNum = erpDataLogisticsClient.queryAllocationStatisticsNum(dto).getData(); - Map result = new HashMap<>(3); - result.put("current",dto.getCurrent()); - result.put("records",allocationMessList); - result.put("total",totalAllocationMessNum); + Map result = new HashMap<>(3); + result.put("current", dto.getCurrent()); + result.put("records", allocationMessList); + result.put("total", totalAllocationMessNum); return result; } @@ -2726,7 +2741,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl dsProcessProjectEntities = dsPartService.selectDsProcessProjectByCraftId(yieldOrder.getCraftId(),null); + List dsProcessProjectEntities = dsPartService.selectDsProcessProjectByCraftId(yieldOrder.getCraftId(), null); WorkPlan prWorkPlan = null; if (dsProcessProjectEntities != null && !dsProcessProjectEntities.isEmpty()) { for (DsProcessProjectVO dsProcessProjectEntity : dsProcessProjectEntities) { if ("承压检测".equals(dsProcessProjectEntity.getProjectName())) { prWorkPlan = workPlanService.getOne(new LambdaQueryWrapper() .eq(WorkPlan::getWoId, woId) - .eq(WorkPlan::getOrders,dsProcessProjectEntity.getProcessNo())); + .eq(WorkPlan::getOrders, dsProcessProjectEntity.getProcessNo())); } } } @@ -2771,7 +2786,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl