From 68769974ee2f147721beb5665a24f097faeafdec Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Thu, 20 Mar 2025 23:58:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=B1=E6=B1=95=E5=B7=A5=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IMesProductionCustomContextStepService.java | 7 +- .../IMesProductionDispatchContextStepService.java | 3 + ...IMesWorkOrderCalcQtyRestoreDispatchService.java | 23 +++ .../job/IMesWorkOrderCalcQtyRestoreService.java | 13 ++ .../schedulejob/MesWorkOrderCalcQtyRestoreJob.java | 78 +++++++++ .../serviceimpl/base/ButtonDynamicExtService.java | 2 +- .../MesWorkOrderCalcQtyRestoreDispatchService.java | 67 +++++++ .../job/MesWorkOrderCalcQtyRestoreService.java | 70 ++++++++ .../step/MesAssemblySaveStepService.java | 1 + .../step/MesAssemblyShowNosortStepService.java | 3 +- .../step/MesProductSnGenerateStepService.java | 21 +-- ...oductionDataSaveBeforeLockOrderStepService.java | 24 +-- .../MesProductionRecordGenerateStepService.java | 13 +- .../step/MesWorkOrderCutSaveStepService.java | 59 ------- .../step/MesWorkOrderSaveNosortStepService.java | 164 ++++++++--------- .../step/MesWorkOrderSaveNosortStepServiceBak.java | 193 +++++++++++++++++++++ .../MesProductionCustomContextStepService.java | 25 ++- .../MesProductionDispatchContextStepService.java | 13 ++ .../MesWorkOrderCheckCompleteQtyStepService.java | 31 ++-- .../pojo/context/MesProductionProcessContext.java | 10 ++ .../pojo/context/MesProductionPsOutContext.java | 11 +- .../context/MesWorkOrderCompleteQtyContext.java | 11 -- 22 files changed, 619 insertions(+), 223 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/job/IMesWorkOrderCalcQtyRestoreDispatchService.java create mode 100644 modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/job/IMesWorkOrderCalcQtyRestoreService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesWorkOrderCalcQtyRestoreJob.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/job/MesWorkOrderCalcQtyRestoreDispatchService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/job/MesWorkOrderCalcQtyRestoreService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderSaveNosortStepServiceBak.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionCustomContextStepService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionCustomContextStepService.java index dd33c18..219a8d3 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionCustomContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionCustomContextStepService.java @@ -113,7 +113,10 @@ public interface IMesProductionCustomContextStepService { @ApiOperation(value = "删除排序线工单队列推送锁数据") void removeSortQueuePushLockContext(StationRequestBean reqBean, String queuePushId); - @ApiOperation(value = "处理工位维度的工单完成数上下文") - MesWorkOrderCompleteQtyContext dispatchWorkOrderCompleteQtyCellContext(Integer flag, Boolean isCellNoCalcQty, StationRequestBean reqBean, MesProductionPartContext productionPartContext, Double calcCompleteQty); + @ApiOperation(value = "处理工位维度的工单完成数上下文[查询]") + MesWorkOrderCompleteQtyContext dispatchWorkOrderCompleteQtyCellContext(StationRequestBean reqBean, Boolean isCellNoCalcQty, MesProductionPartContext productionPartContext); + + @ApiOperation(value = "处理工位维度的工单完成数上下文[保存]") + void dispatchWorkOrderCompleteQtyCellContext(StationRequestBean reqBean, Boolean isCellNoCalcQty, String workOrderNo, Double calcCompleteQty); } diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionDispatchContextStepService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionDispatchContextStepService.java index df51b07..b959656 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionDispatchContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionDispatchContextStepService.java @@ -28,6 +28,9 @@ public interface IMesProductionDispatchContextStepService { @ApiOperation(value = "获取上下文加工结果") String getProductResultContext(StationRequestBean reqBean); + @ApiOperation(value = "获取上下文加工结果") + Integer getProductResultQcContext(StationRequestBean reqBean); + @ApiOperation(value = "保存上下文加工结果", notes = "加工结果:成功/报废/可疑 【写入的值是变量类别代码对应的条码质量状态】【报废/可疑: 在保存逻辑条码时有特殊业务处理】") Boolean dispatchProductResultContext(StationRequestBean reqBean, String productResult); diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/job/IMesWorkOrderCalcQtyRestoreDispatchService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/job/IMesWorkOrderCalcQtyRestoreDispatchService.java new file mode 100644 index 0000000..8aec42c --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/job/IMesWorkOrderCalcQtyRestoreDispatchService.java @@ -0,0 +1,23 @@ +package cn.estsh.i3plus.ext.mes.pcn.api.job; + +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCalcQtyRecord; +import cn.estsh.i3plus.pojo.mes.bean.offline.MesWorkOrderOffline; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +public interface IMesWorkOrderCalcQtyRestoreDispatchService { + + List getWorkOrderCalcQtyRecordList(String organizeCode, Integer qty); + + @Transactional(propagation = Propagation.NOT_SUPPORTED) + MesWorkOrder getWorkOrderDb(String organizeCode, Long workOrderId); + + @Transactional(propagation = Propagation.REQUIRES_NEW, noRollbackFor = {ImppBusiException.class, Exception.class}) + void doRestoreWorkOrderCalcQty(MesWorkOrderOffline workOrderOffline, Boolean result); + + +} diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/job/IMesWorkOrderCalcQtyRestoreService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/job/IMesWorkOrderCalcQtyRestoreService.java new file mode 100644 index 0000000..a431157 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/job/IMesWorkOrderCalcQtyRestoreService.java @@ -0,0 +1,13 @@ +package cn.estsh.i3plus.ext.mes.pcn.api.job; + +import java.util.Map; + +public interface IMesWorkOrderCalcQtyRestoreService { + + /** + * 补录离线生产工单数据JOB + * @param paramMap + */ + void doRestoreWorkOrderCalcQty(Map paramMap); + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesWorkOrderCalcQtyRestoreJob.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesWorkOrderCalcQtyRestoreJob.java new file mode 100644 index 0000000..f0ef9ee --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesWorkOrderCalcQtyRestoreJob.java @@ -0,0 +1,78 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.schedulejob; + + +import cn.estsh.i3plus.ext.mes.pcn.api.job.IMesWorkOrderCalcQtyRestoreService; +import cn.estsh.i3plus.ext.mes.pcn.api.job.IMesWorkOrderOfflineRestoreService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.impp.framework.boot.init.ApplicationProperties; +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.quartz.DisallowConcurrentExecution; +import org.quartz.JobExecutionContext; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StopWatch; +import org.springframework.util.StringUtils; + +import java.util.Map; + +/** + * @author wangjie + * @Description 生产工单计数补录JOB + * @version 1.0 + * @date 2021/2/2 16:44 + **/ +@Slf4j +@DisallowConcurrentExecution +@Component +@ApiOperation("补录生产工单计数JOB") +public class MesWorkOrderCalcQtyRestoreJob extends BaseMesScheduleJob { + + public MesWorkOrderCalcQtyRestoreJob() { + super(MesWorkOrderCalcQtyRestoreJob.class, "补录生产工单计数JOB"); + } + + @Autowired + private IMesWorkOrderCalcQtyRestoreService workOrderCalcQtyRestoreService; + + @Override + public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) { + + String jobParam = this.getJobParam(); + if (StringUtils.isEmpty(jobParam)) { + log.info("--- 异常 --- 补录生产工单计数JOB --- 参数为空 ---"); + return; + } + + Map paramMap = JSONObject.parseObject(jobParam, Map.class); + + if (CollectionUtils.isEmpty(paramMap) || !paramMap.containsKey(MesPcnExtConstWords.ORGANIZE_CODE)) { + log.info("--- 异常 --- 补录生产工单计数JOB --- 参数未配置:工厂代码[organizeCode] ---"); + return; + } + + StopWatch stopWatch = new StopWatch(); + + try { + + stopWatch.start(); + + workOrderCalcQtyRestoreService.doRestoreWorkOrderCalcQty(paramMap); + + } catch (Exception e) { + + log.info("--- 异常 --- 补录生产工单计数JOB --- ERROR --- {} ---", e.toString()); + + } finally { + + stopWatch.stop(); + + log.info("补录生产工单计数JOB --- END --- 耗时: {} ms ---", stopWatch.getTotalTimeMillis()); + + } + + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/ButtonDynamicExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/ButtonDynamicExtService.java index 635fe45..d2aadec 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/ButtonDynamicExtService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/ButtonDynamicExtService.java @@ -76,7 +76,7 @@ public class ButtonDynamicExtService extends ButtonDynamicService { MesConfig apiCfg = configService.getMesConfigByCfgCode(MesPcnExtConstWords.AUTO_INIT_WORK_CELL_MODULE_URL, organizeCode); if (null == configGateWay || StringUtils.isEmpty(configGateWay.getCfgValue())) return false; if (null == apiCfg || StringUtils.isEmpty(apiCfg.getCfgValue())) return false; - log.info("工厂{}生产线{}工位{}: --- 初始化工位按钮 --- START --- 执行结果:{}", organizeCode, workCenterCode, workCellCode); + log.info("工厂{}生产线{}工位{}: --- 初始化工位按钮 --- START", organizeCode, workCenterCode, workCellCode); Map paramsMap = new HashMap<>(); paramsMap.put(MesPcnExtConstWords.ORGANIZE_CODE, organizeCode); paramsMap.put(MesPcnExtConstWords.ID, id.toString()); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/job/MesWorkOrderCalcQtyRestoreDispatchService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/job/MesWorkOrderCalcQtyRestoreDispatchService.java new file mode 100644 index 0000000..dd6f587 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/job/MesWorkOrderCalcQtyRestoreDispatchService.java @@ -0,0 +1,67 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.job; + +import cn.estsh.i3plus.ext.mes.pcn.api.job.IMesWorkOrderCalcQtyRestoreDispatchService; +import cn.estsh.i3plus.ext.mes.pcn.api.job.IMesWorkOrderOfflineRestoreDispatchService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProductionRecordOfflineModel; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.bean.offline.MesWorkOrderAssemblyOffline; +import cn.estsh.i3plus.pojo.mes.bean.offline.MesWorkOrderOffline; +import cn.estsh.i3plus.pojo.mes.bean.offline.MesWorkOrderPartOffline; +import cn.estsh.i3plus.pojo.mes.repository.*; +import cn.estsh.i3plus.pojo.mes.repository.offline.MesWorkOrderAssemblyOfflineRepository; +import cn.estsh.i3plus.pojo.mes.repository.offline.MesWorkOrderOfflineRepository; +import cn.estsh.i3plus.pojo.mes.repository.offline.MesWorkOrderPartOfflineRepository; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class MesWorkOrderCalcQtyRestoreDispatchService implements IMesWorkOrderCalcQtyRestoreDispatchService { + + @Autowired + private MesWorkOrderCalcQtyRecordRepository workOrderCalcQtyRecordRepository; + + @Autowired + private MesWorkOrderRepository workOrderRepository; + + @Override + public List getWorkOrderCalcQtyRecordList(String organizeCode, Integer qty) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesPcnExtConstWords.SYSTEM_SYNC_STATUS, packBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{MesPcnExtConstWords.CREATE_DATE_TIME}, packBean); + return workOrderCalcQtyRecordRepository.findByHqlTopWhere(packBean, qty); + } + + @Override + public MesWorkOrder getWorkOrderDb(String organizeCode, Long workOrderId) { + return workOrderRepository.getByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.ID}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), workOrderId}); + } + + @Override + public void doRestoreWorkOrderCalcQty(MesWorkOrderOffline workOrderOffline, Boolean result) { + + } + + + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/job/MesWorkOrderCalcQtyRestoreService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/job/MesWorkOrderCalcQtyRestoreService.java new file mode 100644 index 0000000..d5cd941 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/job/MesWorkOrderCalcQtyRestoreService.java @@ -0,0 +1,70 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.job; + +import cn.estsh.i3plus.ext.mes.pcn.api.job.IMesWorkOrderCalcQtyRestoreDispatchService; +import cn.estsh.i3plus.ext.mes.pcn.api.job.IMesWorkOrderCalcQtyRestoreService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCalcQtyRecord; +import cn.estsh.i3plus.pojo.mes.bean.offline.MesWorkOrderOffline; +import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderCalcQtyRecordRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderRepository; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class MesWorkOrderCalcQtyRestoreService implements IMesWorkOrderCalcQtyRestoreService { + + @Autowired + private IMesWorkOrderCalcQtyRestoreDispatchService workOrderCalcQtyRestoreDispatchService; + + @Override + public void doRestoreWorkOrderCalcQty(Map paramMap) { + + //参数 工厂 + String organizeCode = paramMap.get(MesPcnExtConstWords.ORGANIZE_CODE); + + //参数 处理数据量 + Integer qty = paramMap.containsKey(MesPcnExtConstWords.QTY) ? Integer.valueOf(paramMap.get(MesPcnExtConstWords.QTY)) : MesPcnExtConstWords.ONE_HUNDRED; + + //生产工单计数记录表 + List workOrderCalcQtyRecordList = workOrderCalcQtyRestoreDispatchService.getWorkOrderCalcQtyRecordList(organizeCode, qty); + + Map> workOrderNoMap = CollectionUtils.isEmpty(workOrderCalcQtyRecordList) ? null : + workOrderCalcQtyRecordList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesWorkOrderCalcQtyRecord::getWorkOrderNo)); + + log.info("补录生产工单计数JOB --- 查询到未补录完成的记录 {} 条 --- 生产工单包含: {} ---", + CollectionUtils.isEmpty(workOrderCalcQtyRecordList) ? "[]" : workOrderCalcQtyRecordList.size(), + CollectionUtils.isEmpty(workOrderNoMap) ? "[]" : workOrderNoMap.keySet().toString()); + + if (CollectionUtils.isEmpty(workOrderNoMap)) return; + + for (Map.Entry> entry : workOrderNoMap.entrySet()) { + + if (null == entry) continue; + + //查询工单, 无事务查询 + MesWorkOrder workOrder = workOrderCalcQtyRestoreDispatchService.getWorkOrderDb(organizeCode, entry.getValue().get(0).getPid()); + + if (null == workOrder) log.info("补录生产工单计数JOB --- 补录 {} START --- ID: {} 信息不存在 ---", entry.getKey(), entry.getValue().get(0).getPid()); + else log.info("补录生产工单计数JOB --- 补录 {} START --- ID: {} --- ---", entry.getKey(), entry.getValue().get(0).getPid()); + + workOrderCalcQtyRestoreDispatchService.doRestoreWorkOrderCalcQty(organizeCode, workOrder, entry.getValue()); + + + + } + + + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveStepService.java index fc20a1b..09f2c43 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveStepService.java @@ -86,6 +86,7 @@ public class MesAssemblySaveStepService extends BaseStepService { if (CollectionUtils.isEmpty(productionPsOutContextList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前不存在产出零件条码信息,请重置工序解决!"); + //获取上下文工位扫描监控信息 MesScanMonitorContext scanMonitorContext = productionProcessContextStepService.dispatchScanMonitorContext(reqBean, true); //从上下文中取出工位当前要使用的设备 diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowNosortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowNosortStepService.java index c1fdadc..7ebe1a1 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowNosortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowNosortStepService.java @@ -105,7 +105,8 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { doHandleProdRuleData(reqBean, resultBean, stepResult, workCenter, productionProcessContext, cellEquipContext, prodRuleContextList, productionPartContextList, productionPsInContextList); //验证加工单完成数量, 验证的前提条件: 每腔均已匹配到加工规则 - workOrderCheckCompleteQtyStepService.dispatchWorkOrderCompleteQtyContext(reqBean, resultBean, stepResult, productionProcessContext, productionPartContextList, productionPsInContextList); + workOrderCheckCompleteQtyStepService.dispatchWorkOrderCompleteQtyContext( + reqBean, resultBean, stepResult, productionProcessContext, productionPartContextList, productionPsInContextList); //匹配失败需要清除本次扫描/读取信息 if (!stepResult.isCompleted() && workOrderCheckCompleteQtyStepService.doBusiCheckToDelete(reqBean, stepResult, productionPartContextList, productionPsInContextList)) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnGenerateStepService.java index 016aa67..547f50a 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnGenerateStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnGenerateStepService.java @@ -159,8 +159,8 @@ public class MesProductSnGenerateStepService extends BaseStepService { //验证进料零件与产出零件是否一致 Boolean isSamePart = workOrderCheckCompleteQtyStepService.isSamePart(productionPsInContext, productionPartContext, prodRuleContext); - //工位是否不累计工单完成数 - Boolean isCellNoCalcQty = workOrderCheckCompleteQtyStepService.isCellNoCalcQty(workCell.getNoCalcOrderQty()); + //验证是否计数 + Boolean isCalcCompleteQty = workOrderCheckCompleteQtyStepService.isCalcCompleteQty(isSamePart, productionPsInContext, productionPartContext); MesProduceSn produceSn; //进出一致, 不累计工单完成数量 在显示装配件工步中已经验证了 进出一致 进出存在工单则必须一致 @@ -226,9 +226,9 @@ public class MesProductSnGenerateStepService extends BaseStepService { produceSn = produceSnExtService.insert(produceSn); } else produceSnExtService.updateNoSync(produceSn); + //isCalcCompleteQty=true的情况下【工位是否不累计工单完成数isCellNoCalcQty=true最终不会实际累加到工单上】【isCellNoCalcQty=false代表生产线维度的统计,才会实际累加到工单上】 MesProductionPsOutContext productionPsOutContext = new MesProductionPsOutContext() - .copy(produceSn, prodRuleContext.getForeignKey()) - .isCalcCompleteQty(isCalcCompleteQty(isCellNoCalcQty, isSamePart, productionPartContext)); + .copy(produceSn, prodRuleContext.getForeignKey()).isCalcCompleteQty(isCalcCompleteQty, isSamePart, workCell.getNoCalcOrderQty()); log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- MesProduceSn:{} --- MesProductionPsOutContext:{}", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), @@ -262,17 +262,4 @@ public class MesProductSnGenerateStepService extends BaseStepService { return part.getProductMatchRule(); } - //判断是否累计工单完成数 - private Boolean isCalcCompleteQty(Boolean isCellNoCalcQty, Boolean isSamePart, MesProductionPartContext productionPartContext) { - //工位不消耗工单完成数 - if (isCellNoCalcQty) return false; - //未选工单场景 - if (null == productionPartContext || StringUtils.isEmpty(productionPartContext.getWorkOrderNo())) return false; - return isSamePart ? false : true; - } - - //TODO 问题点 未知 自进自出 会导致不计数 【再上面未知的地方判断 工序空,已打印状态, 并且自进自出 直接标记需要计数】--- 可以跟下面的合并逻辑进行修改 - //TODO 打印件 已经是产成, 当时实际需要计数, 但是实际不会被计算上去 【再上面判断是否存在ID 工序空,已打印状态, 并且自进自出 直接标记需要计数】 - //TODO 自进自出, 此前没有被计数, 这个时候也不再会被计数 【目前无解, 业务上进行规避】 - } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionDataSaveBeforeLockOrderStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionDataSaveBeforeLockOrderStepService.java index 393547e..8631098 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionDataSaveBeforeLockOrderStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionDataSaveBeforeLockOrderStepService.java @@ -1,18 +1,14 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.method.MesWorkOrderCheckCompleteQtyStepService; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsInContext; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesWorkOrderCompleteQtyContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService; -import cn.estsh.i3plus.platform.common.tool.MathOperation; -import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean; import cn.estsh.i3plus.pojo.mes.model.StepResult; @@ -20,8 +16,6 @@ import cn.estsh.impp.framework.boot.util.SpringContextsUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.util.CollectionUtils; -import org.springframework.util.StringUtils; import java.util.List; import java.util.StringJoiner; @@ -41,9 +35,6 @@ public class MesProductionDataSaveBeforeLockOrderStepService extends BaseStepSer private IMesProductionDispatchContextStepService productionDispatchContextStepService; @Autowired - private IMesProductionCustomContextStepService productionCustomContextStepService; - - @Autowired private MesWorkOrderCheckCompleteQtyStepService workOrderCheckCompleteQtyStepService; @Override @@ -71,24 +62,15 @@ public class MesProductionDataSaveBeforeLockOrderStepService extends BaseStepSer synchronized (new StringJoiner(MesPcnExtConstWords.COLON).add(reqBean.getOrganizeCode()).add(reqBean.getWorkCenterCode()).add(MesPcnExtConstWords.WORK_ORDER_COMPLETE_CONTEXT).toString().intern()) { //验证加工单完成数量 - List workOrderCompleteQtyContextList = workOrderCheckCompleteQtyStepService - .dispatchWorkOrderCompleteQtyContext(reqBean, resultBean, stepResult, productionProcessContext, productionPartContextList, productionPsInContextList); + workOrderCheckCompleteQtyStepService.dispatchWorkOrderCompleteQtyContext( + reqBean, resultBean, stepResult, productionProcessContext, productionPartContextList, productionPsInContextList); //匹配失败需要清除本次扫描/读取信息 if (!stepResult.isCompleted() && workOrderCheckCompleteQtyStepService.doBusiCheckToDelete(reqBean, stepResult, productionPartContextList, productionPsInContextList)) return stepResult.nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_PART_NO); - reqBean.getDataMap().put(MesPcnExtConstWords.WORK_ORDER_COMPLETE_CONTEXT, CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr()); //非排序线 保存加工结果工步 execute 方法 使用的是 新事务 - ((IStepService) SpringContextsUtil.getBean("mesProductionDataSaveStepService")).execute(reqBean); - - for (MesWorkOrderCompleteQtyContext workOrderCompleteQtyContext : workOrderCompleteQtyContextList) { - if (null == workOrderCompleteQtyContext) continue; - if (MathOperation.compareTo(workOrderCompleteQtyContext.getCalcCompleteQty(), new Double(MesPcnExtConstWords.ZERO)) == 0) continue; - //保存加工单完成数量 - //【isCellNoCalcQty=true代表工位维度的统计,最终不一定会实际累加到工单上】【isCellNoCalcQty=false代表生产线维度的统计】 - productionCustomContextStepService.dispatchWorkOrderCompleteQtyCellContext(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), workOrderCompleteQtyContext.getIsCellNoCalcQty(), reqBean, productionPartContextList.get(0), workOrderCompleteQtyContext.getCalcCompleteQty()); - } + stepResult = ((IStepService) SpringContextsUtil.getBean("mesProductionDataSaveStepService")).execute(reqBean); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionRecordGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionRecordGenerateStepService.java index 00dcc01..ef056d1 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionRecordGenerateStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionRecordGenerateStepService.java @@ -102,8 +102,13 @@ public class MesProductionRecordGenerateStepService extends BaseStepService { //获取上下文(头道)模具号 String mouldNo = getMouldNo(reqBean, workCenter, prodRuleContextList); + //获取上下文工位扫描监控信息 + MesScanMonitorContext scanMonitorContext = productionProcessContextStepService.dispatchScanMonitorContext(reqBean, true); + //生成加工记录 - productionPsOutContextList.stream().filter(o -> null != o).forEach(o -> saveProductionRecordData(reqBean, workCenter, mouldNo, prodRuleContextList, productionProcessContext, o, prMap, cellEquipContext, CollectionUtils.isEmpty(psiMap) ? null : psiMap.get(o.getForeignKey()))); + productionPsOutContextList.stream().filter(o -> null != o).forEach(o -> + saveProductionRecordData(reqBean, workCenter, scanMonitorContext, mouldNo, prodRuleContextList, productionProcessContext, o, prMap, cellEquipContext, CollectionUtils.isEmpty(psiMap) ? null : psiMap.get(o.getForeignKey())) + ); //保存上下文产品加工规则信息集合 productionDispatchContextStepService.dispatchProdRuleDataContext(reqBean, prodRuleContextList); @@ -119,8 +124,9 @@ public class MesProductionRecordGenerateStepService extends BaseStepService { } - private void saveProductionRecordData(StationRequestBean reqBean, MesWorkCenter workCenter, String mouldNo, List prodRuleContextList, MesProductionProcessContext productionProcessContext, - MesProductionPsOutContext productionPsOutContext, Map prMap, MesCellEquipContext cellEquipContext, MesProductionPsInContext productionPsInContext) { + private void saveProductionRecordData(StationRequestBean reqBean, MesWorkCenter workCenter, MesScanMonitorContext scanMonitorContext, String mouldNo, + List prodRuleContextList, MesProductionProcessContext productionProcessContext, MesProductionPsOutContext productionPsOutContext, + Map prMap, MesCellEquipContext cellEquipContext, MesProductionPsInContext productionPsInContext) { MesProdRuleContext prodRuleContext = CollectionUtils.isEmpty(prMap) ? null : prMap.get(productionPsOutContext.getForeignKey()); @@ -163,7 +169,6 @@ public class MesProductionRecordGenerateStepService extends BaseStepService { productionRecord.setProcessCode(reqBean.getProcessCode()); productionRecord.setCraftCode(productionProcessContext.getCraftCode()); - MesScanMonitorContext scanMonitorContext = productionProcessContextStepService.dispatchScanMonitorContext(reqBean, true); if (null != scanMonitorContext) { productionRecord.setMouldRecordId(scanMonitorContext.getMouldRecordId()); productionRecord.setStartDateTime(scanMonitorContext.getStartDateTime()); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutSaveStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutSaveStepService.java index 624cb57..1d3dee8 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutSaveStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCutSaveStepService.java @@ -1,24 +1,14 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; -import cn.estsh.i3plus.ext.mes.pcn.api.busi.*; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService; -import cn.estsh.i3plus.platform.common.convert.ConvertBean; -import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; -import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean; import cn.estsh.i3plus.pojo.mes.model.StepResult; -import cn.estsh.i3plus.pojo.mes.repository.MesProductionAssemblyRepository; -import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.impp.framework.boot.util.SpringContextsUtil; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; - -import java.util.*; /** * @Description : 裁片工单保存加工结果工步【非排序】 * @Author : wangjie @@ -27,12 +17,6 @@ import java.util.*; @Service("mesWorkOrderCutSaveStepService") public class MesWorkOrderCutSaveStepService extends BaseStepService { - @Autowired - private IMesProductionProcessContextStepService productionProcessContextStepService; - - @Autowired - private MesProductionAssemblyRepository productionAssemblyRepository; - @Override public StepResult execute(StationRequestBean reqBean) { @@ -54,48 +38,5 @@ public class MesWorkOrderCutSaveStepService extends BaseStepService { return stepSuccessCompleteAndSendMsgReturn(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), "保存加工结果成功!"); } - private void saveProductionAssembly(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, - MesCellEquipContext cellEquipContext, MesProdRuleContext mesProdRuleContext, - MesProductionPsOutContext productionPsOutContext) { - - MesProductionAssembly productionAssembly = new MesProductionAssembly(); - - productionAssembly.setAssemblySn(""); - productionAssembly.setDataSource(MesExtEnumUtil.PRODUCTION_ASSEMBLY_DATA_SOURCE.NOSORT.getValue()); - productionAssembly.setIsOrigSn(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); - productionAssembly.setIsSkip(CommonEnumUtil.FALSE); - - productionAssembly.setAreaCode(reqBean.getAreaCode()); - productionAssembly.setWorkCenterCode(reqBean.getWorkCenterCode()); - productionAssembly.setWorkCellCode(reqBean.getWorkCellCode()); - productionAssembly.setProcessCode(reqBean.getProcessCode()); - - productionAssembly.setProcessName(productionProcessContext.getProcessName()); - productionAssembly.setCraftCode(productionProcessContext.getCraftCode()); - productionAssembly.setCraftName(productionProcessContext.getCraftName()); - - productionAssembly.setEquipmentCode(cellEquipContext.getEquipmentCode()); - - productionAssembly.setProductionRecordId(mesProdRuleContext.getProductionRecordId()); - productionAssembly.setMouldNo(mesProdRuleContext.getMouldNo()); - - if (null != productionPsOutContext) { - productionAssembly.setPartNo(productionPsOutContext.getPartNo()); - productionAssembly.setPartName(productionPsOutContext.getPartName()); - productionAssembly.setSerialNumber(productionPsOutContext.getSerialNumber()); - productionAssembly.setProductSn(productionPsOutContext.getProductSn()); - productionAssembly.setCustSn(productionPsOutContext.getCustSn()); - } - - MesScanMonitorContext scanMonitorContext = productionProcessContextStepService.dispatchScanMonitorContext(reqBean, true); - if (null != scanMonitorContext) productionAssembly.setMouldRecordId(scanMonitorContext.getMouldRecordId()); - - productionAssembly.setOrganizeCode(reqBean.getOrganizeCode()); - ConvertBean.serviceModelInitialize(productionAssembly, reqBean.getUserInfo()); - - productionAssembly.setFid(UUID.randomUUID().toString()); - - productionAssemblyRepository.insert(productionAssembly); - } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderSaveNosortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderSaveNosortStepService.java index a86f452..5990572 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderSaveNosortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderSaveNosortStepService.java @@ -1,22 +1,25 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderExtService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.method.MesWorkOrderCheckCompleteQtyStepService; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesScanMonitorContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.mes.pcn.util.StringUtil; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.MathOperation; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; -import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCalcQtyRecord; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean; import cn.estsh.i3plus.pojo.mes.model.StepResult; -import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderCalcQtyRecordRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; @@ -25,9 +28,11 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; -import javax.persistence.EntityManager; import java.text.SimpleDateFormat; -import java.util.*; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Objects; import java.util.stream.Collectors; /** @@ -48,13 +53,13 @@ public class MesWorkOrderSaveNosortStepService extends BaseStepService { private IMesProductionDispatchContextStepService productionDispatchContextStepService; @Autowired - private IMesWorkOrderExtService workOrderExtService; + private MesWorkOrderCheckCompleteQtyStepService workOrderCheckCompleteQtyStepService; @Autowired - private MesWorkOrderRepository workOrderRepository; + private MesWorkOrderCalcQtyRecordRepository workOrderCalcQtyRecordRepository; @Autowired - private EntityManager entityManager; + private IMesProductionCustomContextStepService productionCustomContextStepService; @Override public StepResult execute(StationRequestBean reqBean) { @@ -83,28 +88,31 @@ public class MesWorkOrderSaveNosortStepService extends BaseStepService { List productionPsOutContextList = productionDispatchContextStepService.getProductionPsOutContext(reqBean); //保存生产工单数据 - doHandleWorkOrderData(reqBean, resultBean, productionPartContextList, productionPsOutContextList); - - //【非排序线】WORK_ORDER_COMPLETE_CONTEXT由验证加工单数量后保存加工结果工步[MesProductionDataSaveBeforeLockOrderStepService]标记 - // true的情况下赋值 stepAfterState, 当前工步集执行结束后会执行当前工步重写的executeStepAfterState方法 - Boolean isNeedDispatchWorkOrderCompleteContext = !reqBean.getDataMap().containsKey(MesPcnExtConstWords.WORK_ORDER_COMPLETE_CONTEXT); - if (!isNeedDispatchWorkOrderCompleteContext) reqBean.getDataMap().remove(MesPcnExtConstWords.WORK_ORDER_COMPLETE_CONTEXT); - else stepResult.stepAfterState(StringUtil.toLowerCaseFirst(this.getClass().getSimpleName())); + doHandleWorkOrderData(reqBean, resultBean, stepResult, productionProcessContext, productionPartContextList, productionPsOutContextList); return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult, "保存加工单信息成功!"); } //保存生产工单数据 - private void doHandleWorkOrderData(StationRequestBean reqBean, StationResultBean resultBean, List productionPartContextList, List productionPsOutContextList) { + private void doHandleWorkOrderData(StationRequestBean reqBean, StationResultBean resultBean, + StepResult stepResult, MesProductionProcessContext productionProcessContext, + List productionPartContextList, List productionPsOutContextList) { + + //工位是否不累计工单完成数 + Boolean isCellNoCalcQty = workOrderCheckCompleteQtyStepService.isCellNoCalcQty(productionProcessContext.getWorkCell().getNoCalcOrderQty()); + + //获取上下文工位扫描监控信息 + MesScanMonitorContext scanMonitorContext = productionProcessContextStepService.dispatchScanMonitorContext(reqBean, true); //产出零件信息根据生产工单分组 Map> ppMap = productionPartContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).collect(Collectors.groupingBy(MesProductionPartContext::getWorkOrderNo)); //产出条码 根据生产工单分组 - Map> proMap = productionPsOutContextList.stream().filter(Objects::nonNull).collect(Collectors.groupingBy(MesProductionPsOutContext::getWorkOrderNo)); + Map> proMap = productionPsOutContextList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesProductionPsOutContext::getWorkOrderNo)); - String productResult = productionDispatchContextStepService.getProductResultContext(reqBean); + //获取上下文加工结果 + Integer productResult = productionDispatchContextStepService.getProductResultQcContext(reqBean); //遍历产出零件信息 for(Map.Entry> entry : ppMap.entrySet()) { @@ -113,84 +121,54 @@ public class MesWorkOrderSaveNosortStepService extends BaseStepService { //获取对应的加工规则 List produceSnContextList = proMap.get(entry.getKey()); //生产数量 - Integer calcCompleteQty = 0; + Double calcCompleteQty = new Double(MesPcnExtConstWords.ZERO); //遍历产出物料 for (MesProductionPsOutContext productionPsOutContext : produceSnContextList) { if (null == productionPsOutContext) continue; - //产出零件是否是 - if (productionPsOutContext.getIsCalcCompleteQty() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) calcCompleteQty += 1; + //产出零件需要计算工单完成数量 + if (productionPsOutContext.getIsCalcCompleteQty() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) calcCompleteQty = MathOperation.add(calcCompleteQty, new Double(MesPcnExtConstWords.ONE)); } - if (calcCompleteQty.compareTo(MesPcnExtConstWords.ZERO) == 0) continue; - - MesWorkOrder workOrder = workOrderExtService.getWorkOrder(reqBean.getOrganizeCode(), entry.getValue().get(0).getId()); - - if (null == workOrder) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查工单信息,加工单[%s]信息不存在!", entry.getKey())); - - //工单状态分 排序工单 和非排序工单; 现在必须是非排序工单 - if (!MesExtEnumUtil.ORDER_STATUS.checkNosortAllowStatus(workOrder.getWorkOrderStatus())) - stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查工单信息,加工单[%s]信息工单状态[%s]!", entry.getKey(), MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus()))); - //工单产线要和当前产线一致 - if (!workOrder.getWorkCenterCode().equals(reqBean.getWorkCenterCode())) - stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查工单信息,加工单[%s]信息所属生产线[%s]与当前生产线[%s]不一致!", entry.getKey(), workOrder.getWorkCenterCode(), reqBean.getWorkCenterCode())); + if (MathOperation.compareTo(calcCompleteQty, new Double(MesPcnExtConstWords.ZERO)) == 0) continue; - Map propertyMap = new HashMap<>(); + // 赋值 stepAfterState, 当前工步集执行结束后会执行当前工步重写的executeStepAfterState方法 + if (StringUtils.isEmpty(stepResult.getStepAfterState())) stepResult.stepAfterState(StringUtil.toLowerCaseFirst(this.getClass().getSimpleName())); - //修改完成数量 - propertyMap.put(MesPcnExtConstWords.COMPLETE_QTY, MathOperation.add(workOrder.getCompleteQty(), calcCompleteQty)); + //TODO 排序考虑多工位扫描可疑码; 非排序考虑自进自出可疑或报废; 可疑数/报废数是否需要增加的问题[条码+零件+质量状态 增加履历] - //修改未完成数量 - if (workOrder.getUnCompleteQty().compareTo(new Double(0)) > 0 && MathOperation.compareTo(MathOperation.sub(workOrder.getUnCompleteQty(), new Double(calcCompleteQty)), new Double(0)) >= 0) { - propertyMap.put(MesPcnExtConstWords.UN_COMPLETE_QTY, MathOperation.sub(workOrder.getUnCompleteQty(), new Double(calcCompleteQty))); - } + //工位不累计工单完成数 + if (isCellNoCalcQty) continue; - /** - * 可疑品、报废数量、上下线时间; - * sql改成修改固定字段 - * 在上下文中获取busi中获取prodResult上下文 是数字 (标志着条码质量状态,与条码质量状态枚举一致) - * 上下文中 已经按照工单分组了,因为有一模多腔问题 - */ - - if (!StringUtils.isEmpty(productResult)) { - //可疑品 - if (Integer.valueOf(productResult).compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue()) == 0 && !CollectionUtils.isEmpty(productionPsOutContextList)){ - propertyMap.put(MesPcnExtConstWords.SUSPICIOUS_PART_QTY, MathOperation.add(workOrder.getSuspiciousPartQty(), new Double(productionPsOutContextList.size()))); - } - //报废数量 - if (Integer.valueOf(productResult).compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.SCRAP.getValue()) == 0 && !CollectionUtils.isEmpty(productionPsOutContextList)){ - propertyMap.put(MesPcnExtConstWords.SCRAP_PART_QTY, MathOperation.add(workOrder.getScrapPartQty(), new Double(productionPsOutContextList.size()))); - } + MesWorkOrderCalcQtyRecord workOrderCalcQtyRecord = new MesWorkOrderCalcQtyRecord(); + workOrderCalcQtyRecord.setOrganizeCode(reqBean.getOrganizeCode()); + workOrderCalcQtyRecord.setWorkCenterCode(reqBean.getWorkCenterCode()); + workOrderCalcQtyRecord.setWorkCellCode(reqBean.getWorkCellCode()); + workOrderCalcQtyRecord.setWorkOrderNo(entry.getKey()); + workOrderCalcQtyRecord.setPid(entry.getValue().get(0).getId()); + workOrderCalcQtyRecord.setCompleteQty(calcCompleteQty); + //可疑数量 + if (!StringUtils.isEmpty(productResult) && productResult.compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue()) == 0) { + workOrderCalcQtyRecord.setSuspiciousPartQty(calcCompleteQty); } - - if (MathOperation.compareTo(MathOperation.add(workOrder.getCompleteQty(), calcCompleteQty), workOrder.getQty()) >= 0 && workOrder.getWorkOrderStatus().compareTo(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()) != 0) { - propertyMap.put(MesPcnExtConstWords.WORK_ORDER_STATUS, MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); - } else if (workOrder.getCompleteQty() >= 0 && workOrder.getWorkOrderStatus() == MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()) { - propertyMap.put(MesPcnExtConstWords.WORK_ORDER_STATUS, MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()); + //报废数量 + if (!StringUtils.isEmpty(productResult) && productResult.compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.SCRAP.getValue()) == 0) { + workOrderCalcQtyRecord.setScrapPartQty(calcCompleteQty); } - if (CollectionUtils.isEmpty(propertyMap)) continue; - - propertyMap.put(MesPcnExtConstWords.MODIFY_DATE_TIME, (new SimpleDateFormat(MesPcnExtConstWords.DATE_FORMAT_SSS)).format(new Date())); - propertyMap.put(MesPcnExtConstWords.MODIFY_USER, reqBean.getUserInfo()); - propertyMap.put(MesPcnExtConstWords.SYSTEM_SYNC_STATUS, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); - propertyMap.put(MesPcnExtConstWords.SYSTEM_SYNC_DATE_TIME, MesPcnExtConstWords.EMPTY); + if (null != scanMonitorContext) workOrderCalcQtyRecord.setMouldRecordId(scanMonitorContext.getMouldRecordId()); - String[] propertyName = new String[propertyMap.size()]; - Object[] propertyValue = new Object[propertyMap.size()]; + workOrderCalcQtyRecord.setCreateUser(reqBean.getUserInfo()); + workOrderCalcQtyRecord.setModifyUser(reqBean.getUserInfo()); + workOrderCalcQtyRecord.setCreateDatetime((new SimpleDateFormat(MesPcnExtConstWords.DATE_FORMAT_SSS)).format(new Date())); + workOrderCalcQtyRecord.setModifyDatetime(workOrderCalcQtyRecord.getCreateDatetime()); + workOrderCalcQtyRecord.setIsValid(CommonEnumUtil.IS_VAILD.VAILD.getValue()); + workOrderCalcQtyRecord.setIsDeleted(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); - Integer index = 0; - for (Map.Entry innerEntry : propertyMap.entrySet()) { - if (null == innerEntry) continue; - propertyName[index] = innerEntry.getKey(); - propertyValue[index] = innerEntry.getValue(); - index ++; - } - - workOrderRepository.updateByPropertiesNoSync(new String[]{MesPcnExtConstWords.ID, MesPcnExtConstWords.ORGANIZE_CODE}, new Object[]{workOrder.getId(), reqBean.getOrganizeCode()}, propertyName, propertyValue); + workOrderCalcQtyRecord = workOrderCalcQtyRecordRepository.insert(workOrderCalcQtyRecord); - log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- ORDER:{} --- QUERY:{} --- calcCompleteQty:{} --- productResult:{} --- UPDATE:{}", + log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- ORDER:{} --- QUERY_CompleteQty:{} --- productResult:{} --- MesWorkOrderCalcQtyRecord:{}", reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), - StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), workOrder.getWorkOrderNo(), JSONObject.toJSONString(workOrder), calcCompleteQty, productResult, JSONObject.toJSONString(propertyMap)); + StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), entry.getKey(), entry.getValue().get(0).getCompleteQty(), productResult, JSONObject.toJSONString(workOrderCalcQtyRecord)); } } @@ -199,6 +177,32 @@ public class MesWorkOrderSaveNosortStepService extends BaseStepService { @Override public void executeStepAfterState(StationRequestBean reqBean, StepResult stepResult) { if (!stepResult.isCompleted()) return; + + //获取上下文产出零件数据信息集合 + List productionPsOutContextList = productionDispatchContextStepService.getProductionPsOutContext(reqBean); + if (CollectionUtils.isEmpty(productionPsOutContextList)) return; + + //工位是否不累计工单完成数 + Boolean isCellNoCalcQty = workOrderCheckCompleteQtyStepService.isCellNoCalcQty(productionPsOutContextList.get(0).getNoCalcOrderQty()); + + //产出条码 根据生产工单分组 + Map> proMap = productionPsOutContextList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesProductionPsOutContext::getWorkOrderNo)); + + //遍历产出物料 + for (Map.Entry> entry : proMap.entrySet()) { + if (null == entry) continue; + //生产数量 + Double calcCompleteQty = new Double(MesPcnExtConstWords.ZERO); + for (MesProductionPsOutContext productionPsOutContext : entry.getValue()) { + if (null == productionPsOutContext) continue; + //产出零件需要计算工单完成数量 + if (productionPsOutContext.getIsCalcCompleteQty() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) calcCompleteQty = MathOperation.add(calcCompleteQty, new Double(MesPcnExtConstWords.ONE)); + } + if (MathOperation.compareTo(calcCompleteQty, new Double(MesPcnExtConstWords.ZERO)) == 0) continue; + //处理工位维度的工单完成数上下文[保存] + productionCustomContextStepService.dispatchWorkOrderCompleteQtyCellContext(reqBean, isCellNoCalcQty, productionPsOutContextList.get(0).getWorkOrderNo(), calcCompleteQty); + } + } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderSaveNosortStepServiceBak.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderSaveNosortStepServiceBak.java new file mode 100644 index 0000000..36be4f8 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderSaveNosortStepServiceBak.java @@ -0,0 +1,193 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderExtService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; +import cn.estsh.i3plus.mes.pcn.util.StringUtil; +import cn.estsh.i3plus.platform.common.tool.MathOperation; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import cn.estsh.i3plus.pojo.mes.model.StationResultBean; +import cn.estsh.i3plus.pojo.mes.model.StepResult; +import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderRepository; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import javax.persistence.EntityManager; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Description : 保存加工单信息工步 【非排序】 + * @Reference : + * @Author : wangjie + * @CreateDate : 2024/6/11 18:50 + * @Modify: + **/ +@Slf4j +@Service("mesWorkOrderSaveNosortStepServiceBak") +public class MesWorkOrderSaveNosortStepServiceBak extends BaseStepService { + + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + @Autowired + private IMesWorkOrderExtService workOrderExtService; + + @Autowired + private MesWorkOrderRepository workOrderRepository; + + @Autowired + private EntityManager entityManager; + + @Override + public StepResult execute(StationRequestBean reqBean) { + + StationResultBean resultBean = new StationResultBean(); + + StepResult stepResult = StepResult.getSuccessComplete(); + + //获取上下文信息 + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean); + + //配置错误 抛出异常 + if (!productionProcessContext.getSuccess()) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + + //存储生产过程上下文对象 + productionProcessContextStepService.dispatchProductionProcessContext(reqBean, productionProcessContext); + + //获取上下文产出零件数据信息集合 + List productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean); + + //没有产出零件或者没有工单 + if (CollectionUtils.isEmpty(productionPartContextList) || StringUtils.isEmpty( + productionPartContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).findFirst().get().getWorkOrderNo())) return stepResult; + + //获取上下文产出零件数据信息集合 + List productionPsOutContextList = productionDispatchContextStepService.getProductionPsOutContext(reqBean); + + //保存生产工单数据 + doHandleWorkOrderData(reqBean, resultBean, productionPartContextList, productionPsOutContextList); + + return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult, "保存加工单信息成功!"); + + } + + //保存生产工单数据 + private void doHandleWorkOrderData(StationRequestBean reqBean, StationResultBean resultBean, List productionPartContextList, List productionPsOutContextList) { + + //产出零件信息根据生产工单分组 + Map> ppMap = productionPartContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).collect(Collectors.groupingBy(MesProductionPartContext::getWorkOrderNo)); + + //产出条码 根据生产工单分组 + Map> proMap = productionPsOutContextList.stream().filter(Objects::nonNull).collect(Collectors.groupingBy(MesProductionPsOutContext::getWorkOrderNo)); + + String productResult = productionDispatchContextStepService.getProductResultContext(reqBean); + + //遍历产出零件信息 + for(Map.Entry> entry : ppMap.entrySet()) { + + if (null == entry) continue; + //获取对应的加工规则 + List produceSnContextList = proMap.get(entry.getKey()); + //生产数量 + Integer calcCompleteQty = 0; + //遍历产出物料 + for (MesProductionPsOutContext productionPsOutContext : produceSnContextList) { + if (null == productionPsOutContext) continue; + //产出零件是否是 + if (productionPsOutContext.getIsCalcCompleteQty() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) calcCompleteQty += 1; + } + + if (calcCompleteQty.compareTo(MesPcnExtConstWords.ZERO) == 0) continue; + + MesWorkOrder workOrder = workOrderExtService.getWorkOrder(reqBean.getOrganizeCode(), entry.getValue().get(0).getId()); + + if (null == workOrder) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查工单信息,加工单[%s]信息不存在!", entry.getKey())); + + //工单状态分 排序工单 和非排序工单; 现在必须是非排序工单 + if (!MesExtEnumUtil.ORDER_STATUS.checkNosortAllowStatus(workOrder.getWorkOrderStatus())) + stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查工单信息,加工单[%s]信息工单状态[%s]!", entry.getKey(), MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus()))); + //工单产线要和当前产线一致 + if (!workOrder.getWorkCenterCode().equals(reqBean.getWorkCenterCode())) + stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查工单信息,加工单[%s]信息所属生产线[%s]与当前生产线[%s]不一致!", entry.getKey(), workOrder.getWorkCenterCode(), reqBean.getWorkCenterCode())); + + Map propertyMap = new HashMap<>(); + + //修改完成数量 + propertyMap.put(MesPcnExtConstWords.COMPLETE_QTY, MathOperation.add(workOrder.getCompleteQty(), calcCompleteQty)); + + //修改未完成数量 + if (workOrder.getUnCompleteQty().compareTo(new Double(0)) > 0 && MathOperation.compareTo(MathOperation.sub(workOrder.getUnCompleteQty(), new Double(calcCompleteQty)), new Double(0)) >= 0) { + propertyMap.put(MesPcnExtConstWords.UN_COMPLETE_QTY, MathOperation.sub(workOrder.getUnCompleteQty(), new Double(calcCompleteQty))); + } + + /** + * 可疑品、报废数量、上下线时间; + * sql改成修改固定字段 + * 在上下文中获取busi中获取prodResult上下文 是数字 (标志着条码质量状态,与条码质量状态枚举一致) + * 上下文中 已经按照工单分组了,因为有一模多腔问题 + */ + + if (!StringUtils.isEmpty(productResult)) { + //可疑品 + if (Integer.valueOf(productResult).compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue()) == 0 && !CollectionUtils.isEmpty(productionPsOutContextList)){ + propertyMap.put(MesPcnExtConstWords.SUSPICIOUS_PART_QTY, MathOperation.add(workOrder.getSuspiciousPartQty(), new Double(productionPsOutContextList.size()))); + } + //报废数量 + if (Integer.valueOf(productResult).compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.SCRAP.getValue()) == 0 && !CollectionUtils.isEmpty(productionPsOutContextList)){ + propertyMap.put(MesPcnExtConstWords.SCRAP_PART_QTY, MathOperation.add(workOrder.getScrapPartQty(), new Double(productionPsOutContextList.size()))); + } + } + + if (MathOperation.compareTo(MathOperation.add(workOrder.getCompleteQty(), calcCompleteQty), workOrder.getQty()) >= 0 && workOrder.getWorkOrderStatus().compareTo(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()) != 0) { + propertyMap.put(MesPcnExtConstWords.WORK_ORDER_STATUS, MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); + } else if (workOrder.getCompleteQty() >= 0 && workOrder.getWorkOrderStatus() == MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()) { + propertyMap.put(MesPcnExtConstWords.WORK_ORDER_STATUS, MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()); + } + + if (CollectionUtils.isEmpty(propertyMap)) continue; + + propertyMap.put(MesPcnExtConstWords.MODIFY_DATE_TIME, (new SimpleDateFormat(MesPcnExtConstWords.DATE_FORMAT_SSS)).format(new Date())); + propertyMap.put(MesPcnExtConstWords.MODIFY_USER, reqBean.getUserInfo()); + propertyMap.put(MesPcnExtConstWords.SYSTEM_SYNC_STATUS, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + propertyMap.put(MesPcnExtConstWords.SYSTEM_SYNC_DATE_TIME, MesPcnExtConstWords.EMPTY); + + String[] propertyName = new String[propertyMap.size()]; + Object[] propertyValue = new Object[propertyMap.size()]; + + Integer index = 0; + for (Map.Entry innerEntry : propertyMap.entrySet()) { + if (null == innerEntry) continue; + propertyName[index] = innerEntry.getKey(); + propertyValue[index] = innerEntry.getValue(); + index ++; + } + + workOrderRepository.updateByPropertiesNoSync(new String[]{MesPcnExtConstWords.ID, MesPcnExtConstWords.ORGANIZE_CODE}, new Object[]{workOrder.getId(), reqBean.getOrganizeCode()}, propertyName, propertyValue); + + log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- ORDER:{} --- QUERY:{} --- calcCompleteQty:{} --- productResult:{} --- UPDATE:{}", + reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), + StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), workOrder.getWorkOrderNo(), JSONObject.toJSONString(workOrder), calcCompleteQty, productResult, JSONObject.toJSONString(propertyMap)); + + } + } + +} + diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionCustomContextStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionCustomContextStepService.java index 2dd5a00..6c49094 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionCustomContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionCustomContextStepService.java @@ -333,25 +333,32 @@ public class MesProductionCustomContextStepService extends BaseStepService imple return sj.add(MesPcnExtConstWords.WORK_ORDER_COMPLETE_CONTEXT).add(workOrderNo).toString(); } - //处理工位维度的工单完成数上下文, 有效期三天 - //flag查询=1;保存=2 - //【isCellNoCalcQty=true代表工位维度的统计,最终不一定会实际累加到工单上】【isCellNoCalcQty=false代表生产线维度的统计】 + //处理工位维度的工单完成数上下文[查询], 有效期三天 @Override - public MesWorkOrderCompleteQtyContext dispatchWorkOrderCompleteQtyCellContext(Integer flag, Boolean isCellNoCalcQty, StationRequestBean reqBean, MesProductionPartContext productionPartContext, Double calcCompleteQty) { + public MesWorkOrderCompleteQtyContext dispatchWorkOrderCompleteQtyCellContext(StationRequestBean reqBean, Boolean isCellNoCalcQty, MesProductionPartContext productionPartContext) { String key = getWorkOrderCompleteQtyContextCellKey(reqBean, isCellNoCalcQty, productionPartContext.getWorkOrderNo()); String context = getFsmBusiData(reqBean.getOrganizeCode(), key); MesWorkOrderCompleteQtyContext workOrderCompleteQtyContext = !StringUtils.isEmpty(context) ? JSONObject.parseObject(context, MesWorkOrderCompleteQtyContext.class) : new MesWorkOrderCompleteQtyContext(productionPartContext.getWorkOrderNo(), productionPartContext.getQty(), productionPartContext.getCompleteQty()); //假如缓存中的完成数小于当前传参工单的完成数,则覆盖 - if (!StringUtils.isEmpty(context) && MathOperation.compareTo(productionPartContext.getCompleteQty(), workOrderCompleteQtyContext.getCompleteQty()) > 0) workOrderCompleteQtyContext.overrideCompleteQty(productionPartContext.getCompleteQty()); - //判断标志当前是否是累计上下文的完成数 - if (flag == CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) workOrderCompleteQtyContext.overrideCompleteQty(MathOperation.add(workOrderCompleteQtyContext.getCompleteQty(), calcCompleteQty)); + Boolean isNeedSave = !StringUtils.isEmpty(context) && MathOperation.compareTo(productionPartContext.getCompleteQty(), workOrderCompleteQtyContext.getCompleteQty()) > 0; + if (isNeedSave) workOrderCompleteQtyContext.overrideCompleteQty(productionPartContext.getCompleteQty()); //判断是否需要存储 - if (StringUtils.isEmpty(context) || flag == CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) dispatchFsmBusiData(reqBean.getOrganizeCode(), key, JSONObject.toJSONString(workOrderCompleteQtyContext), MesPcnEnumUtil.EXPIRE_TIME.THREE_DAY.getValue()); + if (StringUtils.isEmpty(context) || isNeedSave) dispatchFsmBusiData(reqBean.getOrganizeCode(), key, JSONObject.toJSONString(workOrderCompleteQtyContext), MesPcnEnumUtil.EXPIRE_TIME.THREE_DAY.getValue()); return workOrderCompleteQtyContext; } - + //处理工位维度的工单完成数上下文[保存], 有效期三天 + //【isCellNoCalcQty=true代表工位维度的统计,最终不一定会实际累加到工单上】【isCellNoCalcQty=false代表生产线维度的统计】 + @Override + public void dispatchWorkOrderCompleteQtyCellContext(StationRequestBean reqBean, Boolean isCellNoCalcQty, String workOrderNo, Double calcCompleteQty) { + String key = getWorkOrderCompleteQtyContextCellKey(reqBean, isCellNoCalcQty, workOrderNo); + String context = getFsmBusiData(reqBean.getOrganizeCode(), key); + MesWorkOrderCompleteQtyContext workOrderCompleteQtyContext = !StringUtils.isEmpty(context) ? JSONObject.parseObject(context, MesWorkOrderCompleteQtyContext.class) : null; + if (null == workOrderCompleteQtyContext) return; + workOrderCompleteQtyContext.overrideCompleteQty(MathOperation.add(workOrderCompleteQtyContext.getCompleteQty(), calcCompleteQty)); + dispatchFsmBusiData(reqBean.getOrganizeCode(), key, JSONObject.toJSONString(workOrderCompleteQtyContext), MesPcnEnumUtil.EXPIRE_TIME.THREE_DAY.getValue()); + } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionDispatchContextStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionDispatchContextStepService.java index 79c3b3a..4541dee 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionDispatchContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionDispatchContextStepService.java @@ -11,6 +11,7 @@ import cn.estsh.i3plus.pojo.mes.bean.MesRawPartCharging; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingQueue; import cn.estsh.i3plus.pojo.mes.model.StationKvBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; import lombok.extern.slf4j.Slf4j; @@ -63,6 +64,18 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp return getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCT_RESULT_CONTEXT); } + //获取上下文加工结果 + @Override + public Integer getProductResultQcContext(StationRequestBean reqBean) { + String productResult = getProductResultContext(reqBean); + if (StringUtils.isEmpty(productResult)) return MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue(); + try { + return Integer.valueOf(productResult); + } catch (NumberFormatException e) { + return MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue(); + } + } + //保存上下文加工结果 加工结果:成功/报废/可疑 【写入的值是变量类别代码对应的条码质量状态】【报废/可疑: 在保存逻辑条码时有特殊业务处理】 @Override public Boolean dispatchProductResultContext(StationRequestBean reqBean, String productResult) { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/MesWorkOrderCheckCompleteQtyStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/MesWorkOrderCheckCompleteQtyStepService.java index d00a4f7..208b527 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/MesWorkOrderCheckCompleteQtyStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/MesWorkOrderCheckCompleteQtyStepService.java @@ -44,8 +44,8 @@ public class MesWorkOrderCheckCompleteQtyStepService extends BaseStepService { //验证加工单完成数量, 验证的前提条件: 每腔均已匹配到加工规则;存在工单; public List dispatchWorkOrderCompleteQtyContext(StationRequestBean reqBean, StationResultBean resultBean, - StepResult stepResult, MesProductionProcessContext productionProcessContext, - List productionPartContextList, List productionPsInContextList) { + StepResult stepResult, MesProductionProcessContext productionProcessContext, + List productionPartContextList, List productionPsInContextList) { //是否存在产成零件信息 if (!stepResult.isCompleted() || CollectionUtils.isEmpty(productionPartContextList)) return null; @@ -101,8 +101,8 @@ public class MesWorkOrderCheckCompleteQtyStepService extends BaseStepService { //验证加工单完成数量 private MesWorkOrderCompleteQtyContext dispatchWorkOrderCompleteQty(StationRequestBean reqBean, StationResultBean resultBean, - StepResult stepResult, MesWorkCenter workCenter, Boolean isCellNoCalcQty, - List productionPartContextList, Map productionPsInContextMap) { + StepResult stepResult, MesWorkCenter workCenter, Boolean isCellNoCalcQty, + List productionPartContextList, Map productionPsInContextMap) { Double calcCompleteQty = new Double(MesPcnExtConstWords.ZERO); for (MesProductionPartContext productionPartContext : productionPartContextList) { MesProductionPsInContext productionPsInContext = getProductionPsInContext(productionPsInContextMap, productionPartContext.getForeignKey()); @@ -116,18 +116,15 @@ public class MesWorkOrderCheckCompleteQtyStepService extends BaseStepService { if (MathOperation.compareTo(calcCompleteQty, new Double(MesPcnExtConstWords.ZERO)) == 0) return null; //处理工位维度的工单完成数上下文; - //flag查询=1;保存=2 - //【isCellNoCalcQty=true代表工位维度的统计,最终不一定会实际累加到工单上】【isCellNoCalcQty=false代表生产线维度的统计】 - MesWorkOrderCompleteQtyContext workOrderCompleteQtyContext = productionCustomContextStepService.dispatchWorkOrderCompleteQtyCellContext(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), isCellNoCalcQty, reqBean, productionPartContextList.get(0), calcCompleteQty); + //flag查询=2;保存=1 + //【isCellNoCalcQty=true代表工位维度的统计,最终不会实际累加到工单上】【isCellNoCalcQty=false代表生产线维度的统计,才会实际累加到工单上】 + MesWorkOrderCompleteQtyContext workOrderCompleteQtyContext = productionCustomContextStepService.dispatchWorkOrderCompleteQtyCellContext(reqBean, isCellNoCalcQty, productionPartContextList.get(0)); //验证工单完成数 checkWorkOrderCompleteQty(reqBean, resultBean, stepResult, workCenter, workOrderCompleteQtyContext, calcCompleteQty); if (!stepResult.isCompleted()) return null; - //标记累加数量 - workOrderCompleteQtyContext.calcCompleteQty(calcCompleteQty, isCellNoCalcQty); - return workOrderCompleteQtyContext; } @@ -137,12 +134,6 @@ public class MesWorkOrderCheckCompleteQtyStepService extends BaseStepService { return (!StringUtils.isEmpty(noCalcOrderQty) && noCalcOrderQty.compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) ? true : false; } - //根据数据关联键获取进料零件信息 - private MesProductionPsInContext getProductionPsInContext(Map productionPsInContextMap, Integer foreignKey) { - if (CollectionUtils.isEmpty(productionPsInContextMap) || StringUtils.isEmpty(foreignKey)) return null; - return productionPsInContextMap.get(foreignKey); - } - //验证进料零件与产出零件是否一致 public Boolean isSamePart(MesProductionPsInContext productionPsInContext, MesProductionPartContext productionPartContext, MesProdRuleContext prodRuleContext) { if (null == productionPsInContext) return false; @@ -157,7 +148,7 @@ public class MesWorkOrderCheckCompleteQtyStepService extends BaseStepService { } //验证是否计数 - private Boolean isCalcCompleteQty(Boolean isSamePart, MesProductionPsInContext productionPsInContext, MesProductionPartContext productionPartContext) { + public Boolean isCalcCompleteQty(Boolean isSamePart, MesProductionPsInContext productionPsInContext, MesProductionPartContext productionPartContext) { //未选工单场景 if (null == productionPartContext || StringUtils.isEmpty(productionPartContext.getWorkOrderNo())) return false; //进出不一致 @@ -171,6 +162,12 @@ public class MesWorkOrderCheckCompleteQtyStepService extends BaseStepService { return false; } + //根据数据关联键获取进料零件信息 + private MesProductionPsInContext getProductionPsInContext(Map productionPsInContextMap, Integer foreignKey) { + if (CollectionUtils.isEmpty(productionPsInContextMap) || StringUtils.isEmpty(foreignKey)) return null; + return productionPsInContextMap.get(foreignKey); + } + //验证工单完成数 private void checkWorkOrderCompleteQty(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesWorkOrderCompleteQtyContext workOrderCompleteQtyContext, Double calcCompleteQty) { diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionProcessContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionProcessContext.java index 32fa4eb..99e8d91 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionProcessContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionProcessContext.java @@ -1,6 +1,7 @@ package cn.estsh.i3plus.ext.mes.pcn.pojo.context; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg; import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; @@ -171,6 +172,9 @@ public class MesProductionProcessContext implements Serializable { //上下文赋值生产线对象 public MesProductionProcessContext workCenterJson(MesWorkCenter workCenter) { + if (StringUtils.isEmpty(workCenter.getIsCheckOrderQty())) workCenter.setIsCheckOrderQty(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + if (StringUtils.isEmpty(workCenter.getIsIgnoreQc())) workCenter.setIsCheckOrderQty(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + if (StringUtils.isEmpty(workCenter.getIsPushQueue())) workCenter.setIsPushQueue(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); this.workCenterJson = null != workCenter ? JSONObject.toJSONString(workCenter) : null; return this.isNeedCache(); } @@ -184,6 +188,12 @@ public class MesProductionProcessContext implements Serializable { //上下文赋值工位对象 public MesProductionProcessContext workCellJson(MesWorkCell workCell) { + if (StringUtils.isEmpty(workCell.getIsCheckSeq())) workCell.setIsCheckSeq(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + if (StringUtils.isEmpty(workCell.getIsCheckCraft())) workCell.setIsCheckCraft(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + if (StringUtils.isEmpty(workCell.getIsSeqScan())) workCell.setIsCheckSeq(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + if (StringUtils.isEmpty(workCell.getIsResetScan())) workCell.setIsResetScan(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + if (StringUtils.isEmpty(workCell.getNoCalcOrderQty())) workCell.setNoCalcOrderQty(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + if (StringUtils.isEmpty(workCell.getIsEndWorkCell())) workCell.setIsEndWorkCell(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); this.workCellJson = null != workCell ? JSONObject.toJSONString(workCell) : null; return this.isNeedCache(); } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsOutContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsOutContext.java index 3abbfe3..9731f5d 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsOutContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPsOutContext.java @@ -1,5 +1,6 @@ package cn.estsh.i3plus.ext.mes.pcn.pojo.context; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import io.swagger.annotations.ApiParam; @@ -22,6 +23,12 @@ public class MesProductionPsOutContext extends MesProduceSn implements Serializa @ApiParam(name = "是否计算工单完成数量") private Integer isCalcCompleteQty = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(); + @ApiParam(name = "是否进出一致") + private Integer isSamePart = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(); + + @ApiParam(name = "是否不累计工单完成数") + private Integer noCalcOrderQty = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(); + public MesProductionPsOutContext() {} public MesProductionPsOutContext copy(MesProduceSn produceSn, Integer foreignKey) { @@ -41,8 +48,10 @@ public class MesProductionPsOutContext extends MesProduceSn implements Serializa return this; } - public MesProductionPsOutContext isCalcCompleteQty(Boolean isCalcCompleteQty) { + public MesProductionPsOutContext isCalcCompleteQty(Boolean isCalcCompleteQty, Boolean isSamePart, Integer noCalcOrderQty) { if (isCalcCompleteQty) this.isCalcCompleteQty = CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(); + if (isSamePart) this.isSamePart = CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(); + this.noCalcOrderQty = noCalcOrderQty; return this; } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesWorkOrderCompleteQtyContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesWorkOrderCompleteQtyContext.java index 8ba09e2..c825cfe 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesWorkOrderCompleteQtyContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesWorkOrderCompleteQtyContext.java @@ -24,12 +24,6 @@ public class MesWorkOrderCompleteQtyContext implements Serializable { @ApiParam("完成数量") private Double completeQty; - @ApiParam("累加数量") - private Double calcCompleteQty = new Double(MesPcnExtConstWords.ZERO); - - @ApiParam(name = "是否不累计工单完成数") - private Boolean isCellNoCalcQty; - public MesWorkOrderCompleteQtyContext(String workOrderNo, Double qty, Double completeQty) { this.workOrderNo = workOrderNo; this.qty = qty; @@ -41,9 +35,4 @@ public class MesWorkOrderCompleteQtyContext implements Serializable { return this; } - public MesWorkOrderCompleteQtyContext calcCompleteQty(Double calcCompleteQty, Boolean isCellNoCalcQty) { - this.calcCompleteQty = calcCompleteQty; - this.isCellNoCalcQty = isCellNoCalcQty; - return this; - } }