From 16d03491d302f070f15cc46748d83772efb4b46a Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Fri, 22 Nov 2024 09:34:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=93=E5=8D=B0=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E9=9B=B6=E4=BB=B6=E6=9D=A1=E7=A0=81=E5=8F=82=E6=95=B0=E5=B1=9E?= =?UTF-8?q?=E6=80=A7=EF=BC=9B=E7=A6=BB=E7=BA=BF=E9=83=A8=E5=88=86=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E6=8F=90=E4=BA=A4=EF=BC=9B=E9=80=89=E6=8B=A9=E5=B7=A5?= =?UTF-8?q?=E5=8D=95=E6=8C=89=E9=92=AE=20=E5=BC=80=E5=A7=8B=E7=BB=93?= =?UTF-8?q?=E6=9D=9F=E6=9F=A5=E8=AF=A2=E6=9D=A1=E4=BB=B6=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E5=80=BC=E6=8E=A5=E5=8F=A3=E8=BF=94=E5=9B=9E;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pcn/api/base/IMesProdShiftRecordService.java | 26 +- .../ext/mes/pcn/api/base/IMesShiftService.java | 6 +- ...IMesWorkOrderOfflineRestoreDispatchService.java | 19 ++ .../job/IMesWorkOrderOfflineRestoreService.java | 2 +- .../busi/MesProdShiftRecordController.java | 55 +--- .../schedulejob/MesWorkOrderOfflineRestoreJob.java | 12 +- .../serviceimpl/base/ButtonDynamicExtService.java | 86 ++++++ .../base/MesProdShiftRecordServiceImpl.java | 93 ++++++- .../serviceimpl/base/MesShiftServiceImpl.java | 1 + .../serviceimpl/busi/MesWorkOrderService.java | 8 +- .../MesWorkOrderOfflineRestoreDispatchService.java | 306 +++++++++++++++++++++ .../job/MesWorkOrderOfflineRestoreService.java | 156 ++++------- .../print/strategy/AionPrintStrategy.java | 2 +- .../print/strategy/CustCodeWhqrPrintStrategy.java | 2 +- .../print/strategy/GqaaPrintStrategy.java | 2 +- .../print/strategy/GqxnyPrintStrategy.java | 2 +- .../strategy/InternalBarcodePrintStrategy.java | 2 +- .../print/strategy/MesCommonPrintStrategy.java | 2 +- .../strategy/MesDPBarcodeWhPrintStrategy.java | 2 +- .../print/strategy/NoSortBarCodeGzStrategy.java | 1 + .../print/strategy/WuHanLengDaoPrintStrategy.java | 2 +- .../print/strategy/WuhanSnPrintStrategy.java | 2 +- .../print/strategy/XiaoPengNewPrintStrategy.java | 1 + .../print/strategy/XiaoPengPrintStrategy.java | 1 + .../station/MesProductionNoSortModuleService.java | 56 +--- .../station/MesProductionSortModuleService.java | 47 +--- .../MesFunctionChooseCavityOrderService.java | 36 ++- .../step/MesProductSnGenerateStepService.java | 2 +- .../model/MesProductionRecordOfflineModel.java | 25 ++ .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 7 + 30 files changed, 692 insertions(+), 272 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/job/IMesWorkOrderOfflineRestoreDispatchService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/ButtonDynamicExtService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/job/MesWorkOrderOfflineRestoreDispatchService.java create mode 100644 modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesProductionRecordOfflineModel.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesProdShiftRecordService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesProdShiftRecordService.java index c8f7926..76fc589 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesProdShiftRecordService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesProdShiftRecordService.java @@ -4,8 +4,11 @@ package cn.estsh.i3plus.ext.mes.pcn.api.base; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.mes.bean.MesProdShiftRecord; +import cn.estsh.i3plus.pojo.mes.model.StationKvBean; import io.swagger.annotations.ApiOperation; +import java.util.List; + /** * @Description: 开关班记录 * @Author: gsz @@ -14,12 +17,27 @@ import io.swagger.annotations.ApiOperation; */ public interface IMesProdShiftRecordService { - @ApiOperation(value = "查询开关班记录") - public ListPager queryMesProdShiftRecordByPager(MesProdShiftRecord partInspection, Pager pager); + @ApiOperation(value = "分页查询开关班记录") + ListPager queryMesProdShiftRecordByPager(MesProdShiftRecord partInspection, Pager pager); - void insertMesProdShiftRecord(MesProdShiftRecord item, String organizeCode); + //缓存班次数据 + @ApiOperation(value = "新增开关班记录") + void insertMesProdShiftRecord(MesProdShiftRecord item); - void saveMesProdShiftRecord(MesProdShiftRecord item, String organizeCode); + //如果结班,会清除缓存中的班次数据 + @ApiOperation(value = "保存开关班记录") + void saveMesProdShiftRecord(MesProdShiftRecord item); + @ApiOperation(value = "查询开关班记录") MesProdShiftRecord queryMesProdShiftRecord(MesProdShiftRecord mesProdShiftRecord); + + @ApiOperation(value = "查询最新的开班记录") + MesProdShiftRecord getProdShiftRecordOpenStatus(String organizeCode, String workCenterCode); + + @ApiOperation(value = "封装展示组件班组班次内容") + List getProdShiftData(MesProdShiftRecord record); + + @ApiOperation(value = "获取展示组件班组班次内容") + List getShiftRecordStationKvBeans(String organizeCode, String workCenterCode); + } diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesShiftService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesShiftService.java index ba61f15..995ecc2 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesShiftService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesShiftService.java @@ -18,14 +18,14 @@ import java.util.Map; */ public interface IMesShiftService { - @ApiOperation(value = "查询产线与班次的对应关系") - public ListPager queryMesShiftByPager(MesShift mesShift, Pager pager); + ListPager queryMesShiftByPager(MesShift mesShift, Pager pager); @ApiOperation(value = "查询产线与班次的对应关系") - public List queryMesShift(String organizeCode, String workCenterCode); + List queryMesShift(String organizeCode, String workCenterCode); @ApiOperation(value = "获取当前班次时间日期") Map getShiftTimeMap(MesProdShiftRecord record); + } diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/job/IMesWorkOrderOfflineRestoreDispatchService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/job/IMesWorkOrderOfflineRestoreDispatchService.java new file mode 100644 index 0000000..e4e66bf --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/job/IMesWorkOrderOfflineRestoreDispatchService.java @@ -0,0 +1,19 @@ +package cn.estsh.i3plus.ext.mes.pcn.api.job; + +import cn.estsh.i3plus.pojo.mes.bean.offline.MesWorkOrderAssemblyOffline; +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 IMesWorkOrderOfflineRestoreDispatchService { + + @Transactional(propagation = Propagation.REQUIRES_NEW, noRollbackFor = {ImppBusiException.class, Exception.class}) + void saveWorkOrderOffline(MesWorkOrderOffline workOrderOffline, Boolean result); + + @Transactional(propagation = Propagation.REQUIRES_NEW, noRollbackFor = {ImppBusiException.class, Exception.class}) + Boolean doRestoreWorkOrderOfflineData(String organizeCode, MesWorkOrderOffline workOrderOffline, List workOrderAssemblyOfflineList, String now); + +} diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/job/IMesWorkOrderOfflineRestoreService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/job/IMesWorkOrderOfflineRestoreService.java index 2f1eb58..21630a7 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/job/IMesWorkOrderOfflineRestoreService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/job/IMesWorkOrderOfflineRestoreService.java @@ -5,7 +5,7 @@ import java.util.Map; public interface IMesWorkOrderOfflineRestoreService { /** - * 补录离线生产数据JOB + * 补录离线生产工单数据JOB * @param paramMap */ void doRestoreWorkOrderOfflineData(Map paramMap); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesProdShiftRecordController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesProdShiftRecordController.java index 12f01c5..b77dfa9 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesProdShiftRecordController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesProdShiftRecordController.java @@ -1,31 +1,19 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdShiftRecordService; -import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesShiftService; -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService; import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; -import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; -import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesProdShiftRecord; -import cn.estsh.i3plus.pojo.mes.model.StationKvBean; -import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; -import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.util.ResultBean; import cn.estsh.impp.framework.boot.util.ValidatorBean; -import com.google.common.base.Objects; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - /** * @Description: 开关班记录 * @Author: gsz @@ -35,20 +23,14 @@ import java.util.Map; @RestController @RequestMapping(MesCommonConstant.MES_YANFEN + "/mesProdShiftRecord") public class MesProdShiftRecordController { - @Autowired - private IMesProdShiftRecordService mesProdShiftRecordService; @Autowired - private IMesProductionCustomContextStepService productionCustomContextStepService; - - @Autowired - private IMesShiftService mesShiftService; + private IMesProdShiftRecordService mesProdShiftRecordService; @GetMapping("/query-pager") @ApiOperation(value = "查询开关班记录") public ResultBean queryMesProdShiftRecordByPager(MesProdShiftRecord mesProdShiftRecord, Pager pager) { try { - mesProdShiftRecord.setOrganizeCode(AuthUtil.getOrganizeCode()); ListPager partInspectionListPager = mesProdShiftRecordService.queryMesProdShiftRecordByPager(mesProdShiftRecord, pager); return ResultBean.success("查询成功").setListPager(partInspectionListPager); } catch (ImppBusiException imppException) { @@ -65,16 +47,12 @@ public class MesProdShiftRecordController { try { // 数据校验 ValidatorBean.checkNotNull(item.getOrganizeCode(), "工厂号不能为空"); + ValidatorBean.checkNotNull(item.getUserInfo(), "操作人不能为空"); ValidatorBean.checkNotNull(item.getWorkCenterCode(), "workCenterCode不能为空" ); ValidatorBean.checkNotNull(item.getShiftGroup(), "shiftGroup不能为空"); ValidatorBean.checkNotNull(item.getShiftCode(), "shiftCode不能为空"); - - mesProdShiftRecordService.insertMesProdShiftRecord(item, AuthUtil.getOrganizeCode()); - - List getProdShiftData = getProdShiftData(item); - - productionCustomContextStepService.dispatchProdShiftDataContext(item.getOrganizeCode(), item.getWorkCenterCode(), getProdShiftData); + mesProdShiftRecordService.insertMesProdShiftRecord(item); return ResultBean.success("保存开关班记录成功"); } catch (ImppBusiException imppException) { @@ -91,15 +69,12 @@ public class MesProdShiftRecordController { try { // 数据校验 ValidatorBean.checkNotNull(item.getOrganizeCode(), "工厂号不能为空"); + ValidatorBean.checkNotNull(item.getUserInfo(), "操作人不能为空"); ValidatorBean.checkNotNull(item.getWorkCenterCode(), "workCenterCode不能为空" ); ValidatorBean.checkNotNull(item.getShiftGroup(), "shiftGroup不能为空"); ValidatorBean.checkNotNull(item.getShiftCode(), "shiftCode不能为空"); - mesProdShiftRecordService.saveMesProdShiftRecord(item, AuthUtil.getOrganizeCode()); - - if (Objects.equal(MesExtEnumUtil.WORK_STATUS.END.getValue(), item.getWorkStatus())) { - productionCustomContextStepService.removeProdShiftDataContext(item.getOrganizeCode(), item.getWorkCenterCode()); - } + mesProdShiftRecordService.saveMesProdShiftRecord(item); return ResultBean.success("保存开关班记录成功"); } catch (ImppBusiException imppException) { @@ -108,11 +83,11 @@ public class MesProdShiftRecordController { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } + @GetMapping(value = "/query-prod-shift-record") - @ApiOperation(value = "查询零件生产组") + @ApiOperation(value = "查询开关班记录") public ResultBean queryMesProdShiftRecord(MesProdShiftRecord mesProdShiftRecord) { try { - mesProdShiftRecord.setOrganizeCode(mesProdShiftRecord.getOrganizeCode()); //查询汇总工单数量 MesProdShiftRecord mesPartProdGroup= mesProdShiftRecordService.queryMesProdShiftRecord(mesProdShiftRecord); return ResultBean.success("查询成功") @@ -124,20 +99,4 @@ public class MesProdShiftRecordController { } } - //封装展示组件班组班次内容 - private List getProdShiftData(MesProdShiftRecord record) { - List stationKvBeans = StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), - new StationKvBean("shiftGroup", "班组", record.getShiftGroup()), - new StationKvBean("shiftGroupName", "班组名称", record.getShiftGroup()), - new StationKvBean("shiftCode", "班次", record.getShiftCode()), - new StationKvBean("shiftName", "班次名称", record.getShiftName())); - //班次开始时间 ,班次结束时间 - Map shiftTimeMap = mesShiftService.getShiftTimeMap(record); - if (!java.util.Objects.isNull(shiftTimeMap)) { - StationKvBeanUtil.addStationKvBeanList(stationKvBeans, - new StationKvBean(MesPcnExtConstWords.START_TIME,"开始时间",shiftTimeMap.get(MesPcnExtConstWords.START_TIME)), - new StationKvBean(MesPcnExtConstWords.END_TIME,"结束时间",shiftTimeMap.get(MesPcnExtConstWords.END_TIME))); - } - return stationKvBeans; - } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesWorkOrderOfflineRestoreJob.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesWorkOrderOfflineRestoreJob.java index 9c06618..e724f24 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesWorkOrderOfflineRestoreJob.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesWorkOrderOfflineRestoreJob.java @@ -26,11 +26,11 @@ import java.util.Map; @Slf4j @DisallowConcurrentExecution @Component -@ApiOperation("补录离线生产数据JOB") +@ApiOperation("补录离线生产工单数据JOB") public class MesWorkOrderOfflineRestoreJob extends BaseMesScheduleJob { public MesWorkOrderOfflineRestoreJob() { - super(MesWorkOrderOfflineRestoreJob.class, "补录离线生产数据JOB"); + super(MesWorkOrderOfflineRestoreJob.class, "补录离线生产工单数据JOB"); } @Autowired @@ -41,14 +41,14 @@ public class MesWorkOrderOfflineRestoreJob extends BaseMesScheduleJob { String jobParam = this.getJobParam(); if (StringUtils.isEmpty(jobParam)) { - log.info("补录离线生产数据JOB --- 参数为空 ---"); + log.info("--- 异常 --- 补录离线生产工单数据JOB --- 参数为空 ---"); return; } Map paramMap = JSONObject.parseObject(jobParam, Map.class); if (CollectionUtils.isEmpty(paramMap) || !paramMap.containsKey(MesPcnExtConstWords.ORGANIZE_CODE)) { - log.info("补录离线生产数据JOB --- 参数未配置:工厂代码[organizeCode] ---"); + log.info("--- 异常 --- 补录离线生产工单数据JOB --- 参数未配置:工厂代码[organizeCode] ---"); return; } @@ -62,13 +62,13 @@ public class MesWorkOrderOfflineRestoreJob extends BaseMesScheduleJob { } catch (Exception e) { - log.info("补录离线生产数据JOB --- ERROR --- {} ---", e.toString()); + log.info("--- 异常 --- 补录离线生产工单数据JOB --- ERROR --- {} ---", e.toString()); } finally { stopWatch.stop(); - log.info("补录离线生产数据JOB --- END --- 耗时: {} ms ---", stopWatch.getTotalTimeMillis()); + 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 new file mode 100644 index 0000000..b5e8249 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/ButtonDynamicExtService.java @@ -0,0 +1,86 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdOrgExtService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.mes.pcn.api.iservice.base.IConfigService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.base.ButtonDynamicService; +import cn.estsh.i3plus.mes.pcn.util.PcnHttpUtil; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.MesEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesConfig; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkModule; +import cn.estsh.i3plus.pojo.mes.model.ButtonDynamicModel; +import cn.estsh.i3plus.pojo.mes.repository.MesWorkModuleRepository; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Description: 动态按钮 + * @Author: wangjie + * @Date: 2020/3/17 3:53 下午 + * @Modify: + */ +@Slf4j +@Primary +@Service +public class ButtonDynamicExtService extends ButtonDynamicService { + + @Autowired + private MesWorkModuleRepository workModuleRepository; + + @Autowired + private IMesProdOrgExtService prodOrgExtService; + + @Autowired + private IConfigService configService; + + @Override + public List filterButtonDynamicModelList(String organizeCode, String workCenterCode, String workCellCode, String windowNo, List buttonDynamicModelList) { + if (CollectionUtils.isEmpty(buttonDynamicModelList)) { + MesWorkCell workCell = prodOrgExtService.getWorkCellDb(organizeCode, workCenterCode, workCellCode); + if (null != workCell && !StringUtils.isEmpty(workCell.getGrade()) && workCell.getGrade().compareTo(MesExtEnumUtil.WORK_CELL_GRADE.SCAN.getValue()) == 0) { + buttonDynamicModelList = findWorkModuleList(organizeCode, windowNo); + if (!CollectionUtils.isEmpty(buttonDynamicModelList)) doAutoInitWorkCellModuleData(organizeCode, workCell.getId()); + } + } + return super.filterButtonDynamicModelList(organizeCode, workCenterCode, workCellCode, windowNo, buttonDynamicModelList); + } + + private List findWorkModuleList(String organizeCode, String windowNo) { + List workModuleList = getWorkModuleButtonList(organizeCode); + if (CollectionUtils.isEmpty(workModuleList)) return null; + List buttonDynamicModelList = new ArrayList<>(); + workModuleList.forEach(o -> buttonDynamicModelList.add(new ButtonDynamicModel(o.getId(), o.getModuleCode(), o.getModuleName(), windowNo, null, o.getSeq(), o.getColor(), o.getMenuCode()))); + return buttonDynamicModelList; + } + + private List getWorkModuleButtonList(String organizeCode) { + return workModuleRepository.findByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.MODULE_TYPE}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), MesEnumUtil.WORK_MODULE_TYPE.BUTTON_MODULE.getValue()}); + } + + private void doAutoInitWorkCellModuleData(String organizeCode, Long id) { + MesConfig configGateWay = configService.getMesConfigByCfgCode(MesPcnEnumUtil.CONFIG_TYPE.GATEWAY_IP.getCode(), organizeCode); + MesConfig apiCfg = configService.getMesConfigByCfgCode(MesPcnExtConstWords.AUTO_INIT_WORK_CELL_MODULE_URL, organizeCode); + if (null == configGateWay || StringUtils.isEmpty(configGateWay.getCfgValue())) return; + if (null == apiCfg || StringUtils.isEmpty(apiCfg.getCfgValue())) return; + Map paramsMap = new HashMap<>(); + paramsMap.put(MesPcnExtConstWords.ORGANIZE_CODE, organizeCode); + paramsMap.put(MesPcnExtConstWords.ID, id.toString()); + PcnHttpUtil.doPost(configGateWay.getCfgValue() + apiCfg.getCfgValue(), paramsMap); + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesProdShiftRecordServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesProdShiftRecordServiceImpl.java index e400a83..f2c08e1 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesProdShiftRecordServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesProdShiftRecordServiceImpl.java @@ -2,8 +2,11 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesEquipmentExtService; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdShiftRecordService; +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesShiftService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService; import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; @@ -14,11 +17,13 @@ import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.model.StationKvBean; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.repository.MesConfigRepository; import cn.estsh.i3plus.pojo.mes.repository.MesDowntimeRecordRepository; import cn.estsh.i3plus.pojo.mes.repository.MesProdShiftRecordRepository; import cn.estsh.i3plus.pojo.mes.repository.MesWcEquipmentRepository; -import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -26,7 +31,9 @@ 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.Objects; @@ -55,6 +62,12 @@ public class MesProdShiftRecordServiceImpl implements IMesProdShiftRecordService @Autowired private IMesEquipmentExtService mesEquipmentExtService; + @Autowired + private IMesShiftService mesShiftService; + + @Autowired + private IMesProductionCustomContextStepService productionCustomContextStepService; + @Override public ListPager queryMesProdShiftRecordByPager(MesProdShiftRecord bean, Pager pager) { @@ -75,7 +88,7 @@ public class MesProdShiftRecordServiceImpl implements IMesProdShiftRecordService } @Override - public void insertMesProdShiftRecord(MesProdShiftRecord item, String organizeCode) { + public void insertMesProdShiftRecord(MesProdShiftRecord item) { //唯一性校验 DdlPackBean packBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(item.getWorkCenterCode(), "workCenterCode", packBean); @@ -91,12 +104,17 @@ public class MesProdShiftRecordServiceImpl implements IMesProdShiftRecordService item.getWorkCenterCode(), item.getShiftGroup()) .build(); } - ConvertBean.serviceModelInitialize(item, AuthUtil.getSessionUser().getUserName()); + ConvertBean.serviceModelInitialize(item, item.getUserInfo()); mesProdShiftRecordRDao.insert(item); + + //缓存班次数据 + productionCustomContextStepService.dispatchProdShiftDataContext(item.getOrganizeCode(), item.getWorkCenterCode(), getProdShiftData(item)); + } + //如果结班,会清除缓存中的班次数据 @Override - public void saveMesProdShiftRecord(MesProdShiftRecord item, String organizeCode) { + public void saveMesProdShiftRecord(MesProdShiftRecord item) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(item.getWorkCenterCode(), "workCenterCode", packBean); DdlPreparedPack.getStringEqualPack(item.getShiftGroup(), "shiftGroup", packBean); @@ -117,12 +135,12 @@ public class MesProdShiftRecordServiceImpl implements IMesProdShiftRecordService mesProdShiftRecord.setShiftCode(item.getShiftCode()); mesProdShiftRecord.setEndTime(item.getEndTime()); mesProdShiftRecord.setWorkStatus(item.getWorkStatus()); - ConvertBean.serviceModelUpdate(mesProdShiftRecord, AuthUtil.getSessionUser().getUserName()); + ConvertBean.serviceModelUpdate(mesProdShiftRecord, item.getUserInfo()); mesProdShiftRecordRDao.update(mesProdShiftRecord); //结班后, 系统生产一条停机记录,原因:无订单停机 MesConfig reasonCfg = configRepository.getByProperty( new String[]{"cfgKey", "organizeCode", "isValid", "isDeleted"}, - new Object[]{ "MES_DOWNTIME_RECORD_SHIFT_REASON", organizeCode, CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.IS_DEAL.NO.getValue()}); + new Object[]{ "MES_DOWNTIME_RECORD_SHIFT_REASON", item.getOrganizeCode(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.IS_DEAL.NO.getValue()}); String reason = ""; if (!Objects.isNull(reasonCfg) && StringUtils.isEmpty(reasonCfg.getCfgValue())) { @@ -130,19 +148,19 @@ public class MesProdShiftRecordServiceImpl implements IMesProdShiftRecordService } MesConfig typeCfg = configRepository.getByProperty( new String[]{"cfgKey", "organizeCode", "isValid", "isDeleted"}, - new Object[]{"MES_DOWNTIME_RECORD_SHIFT_TYPE", organizeCode, CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.IS_DEAL.NO.getValue()}); + new Object[]{"MES_DOWNTIME_RECORD_SHIFT_TYPE", item.getOrganizeCode(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), CommonEnumUtil.IS_DEAL.NO.getValue()}); String type = ""; if (!Objects.isNull(typeCfg) && StringUtils.isEmpty(typeCfg.getCfgValue())) { type = typeCfg.getCfgValue(); } List wcEquipmentDbList = wcEquipmentRepository.findByProperty( new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.WORK_CENTER_CODE}, - new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), item.getWorkCenterCode()}); + new Object[]{item.getOrganizeCode(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), item.getWorkCenterCode()}); if (CollectionUtils.isEmpty(wcEquipmentDbList)) { MesPcnException.throwMesBusiException("产线【%s】工位设备信息不存在", item.getWorkCenterCode()); } for (MesWcEquipment mesWcEquipment : wcEquipmentDbList) { - DdlPackBean ddlPackBeanDowntime = DdlPackBean.getDdlPackBean(organizeCode); + DdlPackBean ddlPackBeanDowntime = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(mesWcEquipment.getEquipmentCode(), "equipmentCode", ddlPackBeanDowntime); if (!StringUtil.isEmpty(reason)) { DdlPreparedPack.getStringEqualPack(reason, "reasonCode", ddlPackBeanDowntime); @@ -152,13 +170,13 @@ public class MesProdShiftRecordServiceImpl implements IMesProdShiftRecordService } MesDowntimeRecord mesDowntimeRecordDao = mesDowntimeRecordRDao.getByProperty(ddlPackBeanDowntime); if (Objects.isNull(mesDowntimeRecordDao)) { - MesEquipment mesEquipment = mesEquipmentExtService.getMesEquipment(organizeCode, mesWcEquipment.getEquipmentCode()); + MesEquipment mesEquipment = mesEquipmentExtService.getMesEquipment(item.getOrganizeCode(), mesWcEquipment.getEquipmentCode()); if (Objects.isNull(mesEquipment)) { MesPcnException.throwMesBusiException("设备【%s】信息不存在", mesWcEquipment.getEquipmentCode()); } //新增设备停机记录 MesDowntimeRecord mesDowntimeRecord = new MesDowntimeRecord(); - mesDowntimeRecord.setOrganizeCode(organizeCode); + mesDowntimeRecord.setOrganizeCode(item.getOrganizeCode()); mesDowntimeRecord.setEquipId(mesEquipment.getEquipId()); mesDowntimeRecord.setEquipmentCode(mesEquipment.getEquipmentCode()); mesDowntimeRecord.setAreaCode(item.getAreaCode()); @@ -166,7 +184,7 @@ public class MesProdShiftRecordServiceImpl implements IMesProdShiftRecordService mesDowntimeRecord.setWorkCellCode(mesWcEquipment.getWorkCellCode()); mesDowntimeRecord.setReasonCode(StringUtil.isEmpty(reason) ? "" : reason); mesDowntimeRecord.setReasonTypeCode(StringUtil.isEmpty(type) ? "" : type); - ConvertBean.serviceModelInitialize(mesDowntimeRecord, AuthUtil.getSessionUser().getUserName()); + ConvertBean.serviceModelInitialize(mesDowntimeRecord, item.getUserInfo()); mesDowntimeRecordRDao.insert(mesDowntimeRecord); // //将当前新增数据的create_date_time时间些到上一条记录的modify_date_time字段 @@ -185,6 +203,10 @@ public class MesProdShiftRecordServiceImpl implements IMesProdShiftRecordService } } + //如果结班,会清除缓存中的班次数据 + if (item.getWorkStatus().compareTo(MesExtEnumUtil.WORK_STATUS.END.getValue()) == 0) { + productionCustomContextStepService.removeProdShiftDataContext(item.getOrganizeCode(), item.getWorkCenterCode()); + } } @@ -200,4 +222,51 @@ public class MesProdShiftRecordServiceImpl implements IMesProdShiftRecordService return mesProdShiftRecordRDao.getByProperty(packBean); } + + @Override + public MesProdShiftRecord getProdShiftRecordOpenStatus(String organizeCode, String workCenterCode) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", packBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{MesPcnExtConstWords.CREATE_DATE_TIME}, packBean); + MesProdShiftRecord prodShiftRecord = mesProdShiftRecordRDao.getByProperty(packBean); + if (prodShiftRecord != null && !StringUtils.isEmpty(prodShiftRecord.getWorkStatus()) && prodShiftRecord.getWorkStatus().compareTo(MesExtEnumUtil.WORK_STATUS.START.getValue()) == 0) return prodShiftRecord; + return null; + } + + //封装展示组件班组班次内容 + @Override + public List getProdShiftData(MesProdShiftRecord record) { + if (null == record) return null; + List stationKvBeans = StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), + new StationKvBean(MesPcnExtConstWords.SHIFT_GROUP, "班组", record.getShiftGroup()), + new StationKvBean(MesPcnExtConstWords.SHIFT_GROUP_NAME, "班组名称", record.getShiftGroupName()), + new StationKvBean(MesPcnExtConstWords.SHIFT_CODE, "班次", record.getShiftCode()), + new StationKvBean(MesPcnExtConstWords.SHIFT_NAME, "班次名称", record.getShiftName())); + + //班次开始时间 ,班次结束时间 + Map shiftTimeMap = mesShiftService.getShiftTimeMap(record); + if (!java.util.Objects.isNull(shiftTimeMap)) { + StationKvBeanUtil.addStationKvBeanList(stationKvBeans, + new StationKvBean(MesPcnExtConstWords.START_TIME,"开始时间", shiftTimeMap.get(MesPcnExtConstWords.START_TIME)), + new StationKvBean(MesPcnExtConstWords.END_TIME,"结束时间",shiftTimeMap.get(MesPcnExtConstWords.END_TIME))); + } + + return stationKvBeans; + } + + //获取展示组件班组班次内容 + @Override + public List getShiftRecordStationKvBeans(String organizeCode, String workCenterCode) { + // 获取班次信息 redis + List prodShiftDataContext = productionCustomContextStepService.getProdShiftDataContext(organizeCode, workCenterCode); + if (CollectionUtils.isEmpty(prodShiftDataContext)) { + // 查询数据库 + MesProdShiftRecord prodShiftRecord = getProdShiftRecordOpenStatus(organizeCode, workCenterCode); + if (prodShiftRecord != null) { + prodShiftDataContext = getProdShiftData(prodShiftRecord); + productionCustomContextStepService.dispatchProdShiftDataContext(organizeCode, workCenterCode, prodShiftDataContext); + } + } + return prodShiftDataContext; + } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesShiftServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesShiftServiceImpl.java index 687b13a..adae0cf 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesShiftServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesShiftServiceImpl.java @@ -86,4 +86,5 @@ public class MesShiftServiceImpl implements IMesShiftService { shiftTimeMap.put(MesPcnExtConstWords.END_TIME, endTime); return shiftTimeMap; } + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java index 58b8ae1..c13daee 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java @@ -957,7 +957,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { } mesWorkOrderDb.setCompleteQty(mesWorkOrderDb.getReportedQty()); mesWorkOrderDb.setRemark(mesWorkOrder.getRemark()); - String sn = getReportSn(mesWorkOrder.getOrganizeCode(),userName); + String sn = getReportSn(mesWorkOrder.getOrganizeCode(), userName, mesPart); //更新工单 updateMesWorkOrder(mesWorkOrderDb, userName,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.REPORT,mesWorkOrder.getNum()); //记录条码表&加工记录表 @@ -987,7 +987,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { if (mesWorkOrder.getAdjustQty() > mesWorkOrder.getReportedQty()) { MesPcnException.throwMesBusiException("冲销数量【%s】大于工单完成数量【%s】,不允许冲销", mesWorkOrder.getAdjustQty(), mesWorkOrder.getReportedQty()); } - String sn = getReportSn(mesWorkOrder.getOrganizeCode(), userName); + String sn = getReportSn(mesWorkOrder.getOrganizeCode(), userName, mesPart); //更新工单 updateMesWorkOrder(mesWorkOrder, userName, MesExtEnumUtil.WORK_ORDER_LOG_TYPE.REPORT_ADJUST,mesWorkOrder.getNum()); //试制单不报工 @@ -1245,8 +1245,8 @@ public class MesWorkOrderService implements IMesWorkOrderService { return DateUtil.parse(dateStr, (DateParser) DatePattern.NORM_DATETIME_FORMAT); } - private String getReportSn(String organizeCode,String userName) { - return syncFuncService.syncSerialNo(new GenSerialNoModel(MesCommonConstant.REPORT_SN).organizeCode(organizeCode),userName, organizeCode, 1).getResultList().iterator().next().toString(); + private String getReportSn(String organizeCode, String userName, MesPart part) { + return syncFuncService.syncSerialNo(new GenSerialNoModel(MesCommonConstant.REPORT_SN).partSnParam(part.getPartSnParam()).organizeCode(organizeCode),userName, organizeCode, 1).getResultList().iterator().next().toString(); } private MesProductOffLine creatMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/job/MesWorkOrderOfflineRestoreDispatchService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/job/MesWorkOrderOfflineRestoreDispatchService.java new file mode 100644 index 0000000..ec72b45 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/job/MesWorkOrderOfflineRestoreDispatchService.java @@ -0,0 +1,306 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.job; + +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.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +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 MesWorkOrderOfflineRestoreDispatchService implements IMesWorkOrderOfflineRestoreDispatchService { + + @Autowired + private MesWorkOrderAssemblyOfflineRepository workOrderAssemblyOfflineRepository; + + @Autowired + private MesWorkOrderOfflineRepository workOrderOfflineRepository; + + @Autowired + private MesWorkOrderPartOfflineRepository workOrderPartOfflineRepository; + + @Autowired + private MesWorkOrderAssemblyRepository workOrderAssemblyRepository; + + @Autowired + private MesProductionAssemblyRepository productionAssemblyRepository; + + @Autowired + private MesWorkOrderRepository workOrderRepository; + + @Autowired + private MesWorkOrderPartRepository workOrderPartRepository; + + @Autowired + private MesProduceSnRepository produceSnRepository; + + @Autowired + private MesProductionRecordRepository productionRecordRepository; + + @Autowired + private SnowflakeIdMaker snowflakeIdMaker; + + @Override + public void saveWorkOrderOffline(MesWorkOrderOffline workOrderOffline, Boolean result) { + ConvertBean.serviceModelUpdate(workOrderOffline, MesPcnExtConstWords.JOB); + if (result) workOrderOffline.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + workOrderOfflineRepository.updateNoSync(workOrderOffline); + } + + @Override + public Boolean doRestoreWorkOrderOfflineData(String organizeCode, MesWorkOrderOffline workOrderOffline, List workOrderAssemblyOfflineList, String now) { + + //写入工单; 写入条码 + if (StringUtils.isEmpty(workOrderOffline.getWorkOrderId())) { + insertOrderAndPs(workOrderOffline, now); + } + + //写入工单零件 + if (StringUtils.isEmpty(workOrderOffline.getOrderPartStatus()) || workOrderOffline.getOrderPartStatus().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0) { + insertOrderPart(organizeCode, workOrderOffline, now); + } + + insertAssemblyRecord(organizeCode, workOrderOffline, workOrderAssemblyOfflineList, now); + + if (!StringUtils.isEmpty(workOrderOffline.getReportCellCode()) && + !StringUtils.isEmpty(workOrderOffline.getOrderPartStatus()) && workOrderOffline.getOrderPartStatus().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 && + (StringUtils.isEmpty(workOrderOffline.getReportCellStatus()) || workOrderOffline.getReportCellStatus().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)) { + saveProductionRecordReportStatus(organizeCode, workOrderOffline); + } + + return (StringUtils.isEmpty(workOrderOffline.getReportCellStatus()) || workOrderOffline.getReportCellStatus().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0) ? false : true; + + } + + private void insertOrderAndPs(MesWorkOrderOffline workOrderOffline, String now) { + //写入工单 + MesWorkOrder workOrder = new MesWorkOrder(); + BeanUtils.copyProperties(workOrderOffline, workOrder, MesPcnExtConstWords.ID); + workOrder.setScrapPartQty(new Double(0)); + workOrder.setSuspiciousPartQty(new Double(0)); + workOrder.setDisassemblyQty(new Double(0)); + workOrder.setAdjustQty(new Double(0)); + workOrder.setReportedQty(new Double(0)); + workOrder.setUnCompleteQty(new Double(0)); + workOrder.setCompleteQty(new Double(1)); + workOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); + workOrder.setCcscStatus(MesExtEnumUtil.OK_NOK.OK.getValue()); + workOrder.setOnlineTime(workOrderOffline.getCreateDatetime()); + workOrder.setOfflineTime(workOrderOffline.getCreateDatetime()); + workOrder.setStartTime(workOrderOffline.getCreateDatetime()); + workOrder.setEndTime(workOrderOffline.getCreateDatetime()); + workOrder.setModifyDatetime(now); + workOrder.setModifyUser(MesPcnExtConstWords.JOB); + workOrder.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + workOrder = workOrderRepository.insert(workOrder); + + //写入条码 + MesProduceSn produceSn = new MesProduceSn(); + BeanUtils.copyProperties(workOrder, produceSn, MesPcnExtConstWords.ID); + produceSn.setSerialNumber(workOrder.getWorkOrderNo()); + produceSn.setProductSn(workOrder.getWorkOrderNo()); + produceSn.setCustSn(workOrder.getCustSn()); + produceSn.setQty(new Double(1)); + produceSn.setSnType(MesExtEnumUtil.PRODUCE_SN_TYPE.STANDARD.getValue()); + produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()); + produceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); + produceSn.setPrintCount(MesPcnExtConstWords.ONE); + produceSn.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue()); + produceSn.setLotNo(workOrderOffline.getCreateDatetime().substring(0, 10)); + produceSn.setInWorkCenterTime(workOrderOffline.getCreateDatetime()); + produceSn.setOutWorkCenterTime(workOrderOffline.getCreateDatetime()); + produceSn.setFid(UUID.randomUUID().toString()); + produceSn = produceSnRepository.insert(produceSn); + + //离线工单记录进行赋值 + workOrderOffline.setWorkOrderId(workOrder.getId().toString()); + workOrderOffline.setProduceSnId(produceSn.getId().toString()); + } + + private void insertOrderPart(String organizeCode, MesWorkOrderOffline workOrderOffline, String now) { + if (StringUtils.isEmpty(workOrderOffline.getOrderPartCount()) || workOrderOffline.getOrderPartCount().compareTo(MesPcnExtConstWords.ZERO) <= 0) { + log.info("--- 异常 --- 补录离线生产工单数据JOB --- 工单:{} --- 工单零件信息数据量[ORDER_PART_COUNT]值异常 ---", workOrderOffline.getWorkOrderNo()); + return; + } + List workOrderPartOfflineList = workOrderPartOfflineRepository.findByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.WORK_ORDER_NO}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), workOrderOffline.getWorkOrderNo()}); + if (CollectionUtils.isEmpty(workOrderPartOfflineList) || workOrderPartOfflineList.size() != workOrderOffline.getOrderPartCount()) { + log.info("--- 异常 --- 补录离线生产工单数据JOB --- 工单:{} --- 工单零件信息数据量[ORDER_PART_COUNT]值[{}]与当前查询到的生产工单零件离线信息数据量[{}]不相等 ---", + workOrderOffline.getWorkOrderNo(), workOrderOffline.getOrderPartCount(), CollectionUtils.isEmpty(workOrderPartOfflineList) ? MesPcnExtConstWords.ZERO : workOrderPartOfflineList.size()); + return; + } + + for (MesWorkOrderPartOffline workOrderPartOffline : workOrderPartOfflineList) { + MesWorkOrderPart workOrderPart = new MesWorkOrderPart(); + BeanUtils.copyProperties(workOrderPartOffline, workOrderPart, MesPcnExtConstWords.ID); + workOrderPart.setModifyUser(MesPcnExtConstWords.JOB); + workOrderPart.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + workOrderPartRepository.insert(workOrderPart); + } + workOrderOffline.setOrderPartStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + } + + private void insertAssemblyRecord(String organizeCode, MesWorkOrderOffline workOrderOffline, List workOrderAssemblyOfflineList, String now) { + if (CollectionUtils.isEmpty(workOrderAssemblyOfflineList)) { + log.info("--- 异常 --- 补录离线生产工单数据JOB --- 工单:{} --- 当前没有需要补录的工单装配件离线数据 ---", workOrderOffline.getWorkOrderNo()); + return; + } + + //工单装配件离线数据根据工位进行分组 + Map> cellMap = CollectionUtils.isEmpty(workOrderAssemblyOfflineList) ? null : + workOrderAssemblyOfflineList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesWorkOrderAssemblyOffline::getWorkCellCode)); + + //解析加工记录工位字段信息 拼接新增过的工位加工记录 [{"id":"1","workCellCode":"100-10"},{"id":"2","workCellCode":"100-20"}....] + List productionRecordOfflineModelList = StringUtils.isEmpty(workOrderOffline.getProductionRecord()) ? new ArrayList<>() : JSONObject.parseArray(workOrderOffline.getProductionRecord(), MesProductionRecordOfflineModel.class); + Map productionRecordOfflineMap = CollectionUtils.isEmpty(productionRecordOfflineModelList) ? null : + productionRecordOfflineModelList.stream().filter(o -> null != o).collect(Collectors.toMap(MesProductionRecordOfflineModel::getWorkCellCode, MesProductionRecordOfflineModel::getId)); + + for (Map.Entry> entry : cellMap.entrySet()) { + if (null == entry) continue; + + List assemblyOfflineList = entry.getValue(); + + Boolean isExistProductionRecord = (CollectionUtils.isEmpty(productionRecordOfflineMap) || !productionRecordOfflineMap.containsKey(entry.getKey())) ? false : true; + Long productionRecordId = isExistProductionRecord ? snowflakeIdMaker.nextId() : Long.valueOf(productionRecordOfflineMap.get(entry.getKey())); + + //写入加工记录 + MesProductionRecord productionRecord; + if (!isExistProductionRecord) { + productionRecord = new MesProductionRecord(); + productionRecord.setId(productionRecordId); + productionRecord.setSerialNumber(workOrderOffline.getWorkOrderNo()); + productionRecord.setProductSn(workOrderOffline.getWorkOrderNo()); + productionRecord.setCustSn(workOrderOffline.getCustSn()); + productionRecord.setWorkOrderNo(workOrderOffline.getWorkOrderNo()); + productionRecord.setPartNo(workOrderOffline.getPartNo()); + productionRecord.setPartName(workOrderOffline.getPartName()); + productionRecord.setAreaCode(assemblyOfflineList.get(0).getAreaCode()); + productionRecord.setWorkCenterCode(workOrderOffline.getWorkCenterCode()); + productionRecord.setWorkCellCode(entry.getKey()); + productionRecord.setQty(workOrderOffline.getQty()); + productionRecord.setLotNo(workOrderOffline.getCreateDatetime().substring(0, 10)); + productionRecord.setShiftCode(workOrderOffline.getShiftCode()); + productionRecord.setProcessCode(assemblyOfflineList.get(0).getProcessCode()); + productionRecord.setCraftCode(assemblyOfflineList.get(0).getCraftCode()); + productionRecord.setEquipmentCode(assemblyOfflineList.get(0).getEquipmentCode()); + productionRecord.setMouldRecordId(snowflakeIdMaker.nextId()); + productionRecord.setIsComplete(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + productionRecord.setStartDateTime(workOrderOffline.getCreateDatetime()); + productionRecord.setCompleteDateTime(workOrderOffline.getCreateDatetime()); + productionRecord.setReportType(MesExtEnumUtil.MES_REPORT_TYPE.NO_REPORT.getValue()); + productionRecord.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_30.getValue()); + productionRecord.setModuleStatisticsStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + productionRecord.setFid(UUID.randomUUID().toString()); + productionRecord.setOneMouldMoreId(UUID.randomUUID().toString()); + productionRecord.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + ConvertBean.serviceModelInitialize(productionRecord, MesPcnExtConstWords.JOB); + } else { + productionRecord = productionRecordRepository.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(), productionRecordId}); + } + + for (MesWorkOrderAssemblyOffline assemblyOffline : assemblyOfflineList) { + if (null == assemblyOffline) continue; + + //写入工单装配件 + MesWorkOrderAssembly workOrderAssembly = new MesWorkOrderAssembly(); + BeanUtils.copyProperties(assemblyOffline, workOrderAssembly, MesPcnExtConstWords.ID); + workOrderAssembly.setModifyDatetime(now); + workOrderAssembly.setModifyUser(MesPcnExtConstWords.JOB); + workOrderAssembly.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + workOrderAssemblyRepository.insert(workOrderAssembly); + + MesProductionAssembly productionAssembly = new MesProductionAssembly(); + BeanUtils.copyProperties(workOrderAssembly, productionAssembly, MesPcnExtConstWords.ID); + productionAssembly.setCustSn(workOrderOffline.getCustSn()); + productionAssembly.setModifyDatetime(now); + productionAssembly.setModifyUser(MesPcnExtConstWords.JOB); + productionAssembly.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + productionAssembly.setFid(UUID.randomUUID().toString()); + productionAssembly.setMouldRecordId(productionRecord.getMouldRecordId()); + productionAssembly.setProductionRecordId(productionRecord.getId()); + productionAssemblyRepository.insert(productionAssembly); + + //工单装配件离线数据改已同步 + assemblyOffline.setSystemSyncDatetime(now); + assemblyOffline.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + workOrderAssemblyOfflineRepository.updateNoSync(assemblyOffline); + + if (StringUtils.isEmpty(workOrderOffline.getReportCellCode()) && !StringUtils.isEmpty(assemblyOffline.getReportType()) && assemblyOffline.getReportType().compareTo(MesExtEnumUtil.MES_REPORT_TYPE.NO_REPORT.getValue()) != 0) { + workOrderOffline.setReportCellCode(entry.getKey()); + workOrderOffline.setReportType(assemblyOffline.getReportType()); + workOrderOffline.setReportPartNo(!StringUtils.isEmpty(assemblyOffline.getReportPartNo()) ? assemblyOffline.getReportPartNo() : workOrderOffline.getPartNo()); + } + + } + + //判断是否写入汇报状态 + if (!StringUtils.isEmpty(workOrderOffline.getReportCellCode()) && workOrderOffline.getReportCellCode().equals(entry.getKey()) && + !StringUtils.isEmpty(workOrderOffline.getOrderPartStatus()) && workOrderOffline.getOrderPartStatus().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 && + (StringUtils.isEmpty(workOrderOffline.getReportCellStatus()) || workOrderOffline.getReportCellStatus().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)) { + productionRecord.setReportType(workOrderOffline.getReportType()); + productionRecord.setReportPartNo(workOrderOffline.getReportPartNo()); + productionRecord.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue()); + if (isExistProductionRecord) { + productionRecord.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + ConvertBean.serviceModelUpdate(productionRecord, MesPcnExtConstWords.JOB); + } + workOrderOffline.setReportCellStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + } + + if (isExistProductionRecord) { + productionRecordRepository.updateNoSync(productionRecord); + } else { + productionRecordRepository.insert(productionRecord); + productionRecordOfflineModelList.add(new MesProductionRecordOfflineModel(entry.getKey(), productionRecord.getId().toString())); + workOrderOffline.setProductionRecord(JSONObject.toJSONString(productionRecordOfflineModelList)); + } + + } + + } + + private void saveProductionRecordReportStatus(String organizeCode, MesWorkOrderOffline workOrderOffline) { + List productionRecordOfflineModelList = JSONObject.parseArray(workOrderOffline.getProductionRecord(), MesProductionRecordOfflineModel.class); + String productionRecordId = productionRecordOfflineModelList.stream().filter(o -> (null != o && o.getWorkCellCode().equals(workOrderOffline.getReportCellCode()))).findFirst().get().getId(); + MesProductionRecord productionRecord = productionRecordRepository.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(), productionRecordId}); + + productionRecord.setReportType(workOrderOffline.getReportType()); + productionRecord.setReportPartNo(workOrderOffline.getReportPartNo()); + productionRecord.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue()); + productionRecord.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + ConvertBean.serviceModelUpdate(productionRecord, MesPcnExtConstWords.JOB); + productionRecordRepository.updateNoSync(productionRecord); + + workOrderOffline.setReportCellStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/job/MesWorkOrderOfflineRestoreService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/job/MesWorkOrderOfflineRestoreService.java index 169e483..857753c 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/job/MesWorkOrderOfflineRestoreService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/job/MesWorkOrderOfflineRestoreService.java @@ -1,31 +1,25 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.job; +import cn.estsh.i3plus.ext.mes.pcn.api.job.IMesWorkOrderOfflineRestoreDispatchService; import cn.estsh.i3plus.ext.mes.pcn.api.job.IMesWorkOrderOfflineRestoreService; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; -import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.TimeTool; 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.MesWorkOrderAssembly; 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.MesWorkOrderOfflineRestoreRecord; -import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderAssemblyRepository; -import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderRepository; 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.MesWorkOrderOfflineRestoreRecordRepository; -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.*; +import java.util.List; +import java.util.Map; import java.util.stream.Collectors; @Slf4j @@ -39,133 +33,97 @@ public class MesWorkOrderOfflineRestoreService implements IMesWorkOrderOfflineRe private MesWorkOrderOfflineRepository workOrderOfflineRepository; @Autowired - private MesWorkOrderOfflineRestoreRecordRepository workOrderOfflineRestoreRecordRepository; - - @Autowired - private MesWorkOrderAssemblyRepository workOrderAssemblyRepository; - - @Autowired - private MesWorkOrderRepository workOrderRepository; + private IMesWorkOrderOfflineRestoreDispatchService workOrderOfflineRestoreDispatchService; @Override public void doRestoreWorkOrderOfflineData(Map paramMap) { + //参数 工厂 String organizeCode = paramMap.get(MesPcnExtConstWords.ORGANIZE_CODE); + //参数 处理数据量 Integer qty = paramMap.containsKey(MesPcnExtConstWords.QTY) ? Integer.valueOf(paramMap.get(MesPcnExtConstWords.QTY)) : MesPcnExtConstWords.ONE_HUNDRED; - Map> workOrderAssemblyOfflineMap = getWorkOrderAssemblyOfflineMap(organizeCode, qty); + //查询工单离线数据 + List workOrderOfflineList = getWorkOrderOfflineList(organizeCode, qty); - if (CollectionUtils.isEmpty(workOrderAssemblyOfflineMap)) return; + List workOrderNoList = CollectionUtils.isEmpty(workOrderOfflineList) ? null : + workOrderOfflineList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getWorkOrderNo()))).map(MesWorkOrderOffline::getWorkOrderNo).collect(Collectors.toList()); - List workOrderNoList = new ArrayList<>(workOrderAssemblyOfflineMap.keySet()); + log.info("补录离线生产工单数据JOB --- 查询到未补录完成的生产工单包含: {} ---", CollectionUtils.isEmpty(workOrderNoList) ? "[]" : workOrderNoList.toString()); - Map workOrderOfflineRestoreRecordMap = getWorkOrderOfflineRestoreRecordMap(organizeCode, workOrderNoList); + //查询工单装配件离线数据 + List workOrderAssemblyOfflineList = getWorkOrderAssemblyOfflineList(organizeCode, qty); - Map workOrderOfflineMap = getWorkOrderOfflineMap(organizeCode, workOrderNoList); + if (CollectionUtils.isEmpty(workOrderNoList) && CollectionUtils.isEmpty(workOrderAssemblyOfflineList)) return; String now = TimeTool.getNowTime(true); - for (Map.Entry> entry : workOrderAssemblyOfflineMap.entrySet()) { - - if (null == entry) continue; - - MesWorkOrderOfflineRestoreRecord workOrderOfflineRestoreRecord = CollectionUtils.isEmpty(workOrderOfflineRestoreRecordMap) ? null : workOrderOfflineRestoreRecordMap.get(entry.getKey()); - - for (MesWorkOrderAssemblyOffline workOrderAssemblyOffline : entry.getValue()) { - if (null == workOrderAssemblyOffline) continue; - MesWorkOrderAssembly workOrderAssembly = new MesWorkOrderAssembly(); - BeanUtils.copyProperties(workOrderAssemblyOffline, workOrderAssembly, MesPcnExtConstWords.ID); - workOrderAssembly.setModifyDatetime(now); - workOrderAssembly.setModifyUser(MesPcnExtConstWords.JOB); - workOrderAssembly.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); - workOrderAssemblyRepository.insert(workOrderAssembly); + if (CollectionUtils.isEmpty(workOrderNoList)) { + //查询排序工单装配件离线数据[未同步的数据] 根据工单号分组 + Map> workOrderAssemblyOfflineMap = getWorkOrderAssemblyOfflineMap(organizeCode, workOrderNoList); - workOrderAssemblyOffline.setSystemSyncDatetime(now); - workOrderAssemblyOffline.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); - workOrderAssemblyOfflineRepository.updateNoSync(workOrderAssemblyOffline); - - if (null == workOrderOfflineRestoreRecord) { - workOrderOfflineRestoreRecord = new MesWorkOrderOfflineRestoreRecord(); - workOrderOfflineRestoreRecord.setOrganizeCode(organizeCode); - workOrderOfflineRestoreRecord.setWorkOrderNo(workOrderAssemblyOffline.getWorkOrderNo()); - workOrderOfflineRestoreRecord.setCustPartNo(workOrderAssemblyOffline.getCustPartNo()); - workOrderOfflineRestoreRecord.setWorkCenterCode(workOrderAssemblyOffline.getWorkCenterCode()); - } - } - - if (StringUtils.isEmpty(workOrderOfflineRestoreRecord.getWorkOrderId()) && !CollectionUtils.isEmpty(workOrderOfflineMap) && workOrderOfflineMap.containsKey(entry.getKey())) { - - MesWorkOrderOffline workOrderOffline = workOrderOfflineMap.get(entry.getKey()); + //补录生产数据 + workOrderOfflineList.forEach(o -> doRestoreWorkOrderOfflineData(organizeCode, o, getWorkOrderAssemblyOfflineList(workOrderAssemblyOfflineMap, o.getWorkOrderNo()), now)); + } - MesWorkOrder workOrder = new MesWorkOrder(); - BeanUtils.copyProperties(workOrderOffline, workOrder, MesPcnExtConstWords.ID); - workOrder.setUnCompleteQty(new Double(0)); - workOrder.setScrapPartQty(new Double(0)); - workOrder.setSuspiciousPartQty(new Double(0)); - workOrder.setDisassemblyQty(new Double(0)); - workOrder.setReportedQty(new Double(0)); - workOrder.setCompleteQty(new Double(1)); - workOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); - workOrder.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); - workOrder.setModifyDatetime(now); - workOrder.setModifyUser(MesPcnExtConstWords.JOB); - workOrder.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); - workOrder = workOrderRepository.insert(workOrder); + workOrderAssemblyOfflineList = CollectionUtils.isEmpty(workOrderAssemblyOfflineList) ? null : + workOrderAssemblyOfflineList.stream().filter(o -> (null != o && !workOrderNoList.contains(o.getWorkOrderNo()))).collect(Collectors.toList()); - workOrderOffline.setSystemSyncDatetime(now); - workOrderOffline.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); - workOrderOfflineRepository.updateNoSync(workOrderOffline); + if (CollectionUtils.isEmpty(workOrderAssemblyOfflineList)) return; - workOrderOfflineRestoreRecord.setWorkOrderId(workOrder.getId().toString()); - workOrderOfflineRestoreRecord.setCustSn(workOrder.getCustSn()); - workOrderOfflineRestoreRecord.setPartNo(workOrder.getPartNo()); - } - } + } + //查询工单离线数据 + private List getWorkOrderOfflineList(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.MODIFY_DATE_TIME}, packBean); + List workOrderOfflineList = workOrderOfflineRepository.findByHqlTopWhere(packBean, qty); + return workOrderOfflineList; } - //查询排序工单装配件离线数据[未同步的数据] - private Map> getWorkOrderAssemblyOfflineMap(String organizeCode, Integer qty) { + //查询工单装配件离线数据 + private List getWorkOrderAssemblyOfflineList(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.MODIFY_DATE_TIME}, packBean); List workOrderAssemblyOfflineList = workOrderAssemblyOfflineRepository.findByHqlTopWhere(packBean, qty); - if (CollectionUtils.isEmpty(workOrderAssemblyOfflineList)) log.info("补录离线生产数据JOB --- 当前没有需要补录的工单装配件离线数据 ---"); - return workOrderAssemblyOfflineList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesWorkOrderAssemblyOffline::getWorkOrderNo)); + return workOrderAssemblyOfflineList; } - //查询离线工单补录记录 - private Map getWorkOrderOfflineRestoreRecordMap(String organizeCode, List workOrderNoList) { + //查询排序工单装配件离线数据[未同步的数据] + private Map> getWorkOrderAssemblyOfflineMap(String organizeCode, List workOrderNoList) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesPcnExtConstWords.SYSTEM_SYNC_STATUS, packBean); DdlPreparedPack.getInPackList(workOrderNoList, MesPcnExtConstWords.WORK_ORDER_NO, packBean); - List workOrderOfflineRestoreRecordList = workOrderOfflineRestoreRecordRepository.findByHqlWhere(packBean); - if (CollectionUtils.isEmpty(workOrderOfflineRestoreRecordList)) return null; - workOrderOfflineRestoreRecordList = workOrderOfflineRestoreRecordList.stream().filter(o -> null != o). - collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(MesWorkOrderOfflineRestoreRecord::getWorkOrderNo))), ArrayList::new)); - Map workOrderOfflineRestoreRecordMap = workOrderOfflineRestoreRecordList.stream().filter(o -> null != o).collect(Collectors.toMap(MesWorkOrderOfflineRestoreRecord::getWorkOrderNo, o -> o)); - log.info("补录离线生产数据JOB --- 查询到已补录过的生产工单包含: {} ---", workOrderOfflineRestoreRecordMap.keySet().toString()); - return workOrderOfflineRestoreRecordMap; + List workOrderAssemblyOfflineList = workOrderAssemblyOfflineRepository.findByHqlWhere(packBean); + if (CollectionUtils.isEmpty(workOrderAssemblyOfflineList)) log.info("--- 异常 --- 补录离线生产工单数据JOB --- 当前没有需要补录的工单装配件离线数据 ---"); + return workOrderAssemblyOfflineList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesWorkOrderAssemblyOffline::getWorkOrderNo)); } - //查询离线工单 - private Map getWorkOrderOfflineMap(String organizeCode, List workOrderNoList) { - DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getInPackList(workOrderNoList, MesPcnExtConstWords.WORK_ORDER_NO, packBean); - DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesPcnExtConstWords.SYSTEM_SYNC_STATUS, packBean); - List workOrderOfflineList = workOrderOfflineRepository.findByHqlWhere(packBean); - if (CollectionUtils.isEmpty(workOrderOfflineList)) return null; - workOrderOfflineList = workOrderOfflineList.stream().filter(o -> null != o). - collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(MesWorkOrderOffline::getWorkOrderNo))), ArrayList::new)); - Map workOrderOfflineMap = workOrderOfflineList.stream().filter(o -> null != o).collect(Collectors.toMap(MesWorkOrderOffline::getWorkOrderNo, o -> o)); - log.info("补录离线生产数据JOB --- 查询到未补录过的生产工单包含: {} ---", workOrderOfflineMap.keySet().toString()); - return workOrderOfflineMap; + private List getWorkOrderAssemblyOfflineList(Map> workOrderAssemblyOfflineMap, String workOrderNo) { + return CollectionUtils.isEmpty(workOrderAssemblyOfflineMap) ? null : workOrderAssemblyOfflineMap.get(workOrderNo); + } + //补录生产数据 + private void doRestoreWorkOrderOfflineData(String organizeCode, MesWorkOrderOffline workOrderOffline, List workOrderAssemblyOfflineList, String now) { + log.info("补录离线生产工单数据JOB --- 工单:{} --- START ---", workOrderOffline.getWorkOrderNo()); + Boolean result = false; + try { + result = workOrderOfflineRestoreDispatchService.doRestoreWorkOrderOfflineData(organizeCode, workOrderOffline, workOrderAssemblyOfflineList, now); + } catch (Exception e) { + log.info("--- 异常 --- 补录离线生产工单数据JOB --- 工单:{} --- ERROR --- {}", workOrderOffline.getWorkOrderNo(), e.toString()); + } finally { + workOrderOfflineRestoreDispatchService.saveWorkOrderOffline(workOrderOffline, result); + log.info("补录离线生产工单数据JOB --- 工单:{} --- END --- result={} --- MesWorkOrderOffline={}", workOrderOffline.getWorkOrderNo(), result, JSONObject.toJSONString(workOrderOffline)); + } } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/AionPrintStrategy.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/AionPrintStrategy.java index fbdd3fc..b876eda 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/AionPrintStrategy.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/AionPrintStrategy.java @@ -83,7 +83,7 @@ public class AionPrintStrategy implements IPrintTemplateStrategyService { MesPart mesPart = mesPartService.getMesPartByPartNo(mesProduceSnPrintModel.getPartNo(), organizeCode); if (!isStep){ for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) { - ResultBean resultBean = syncFuncService.syncSerialNo(genSerialNoModel, mesProduceSnPrintModel.getUserName(), organizeCode, 1); + ResultBean resultBean = syncFuncService.syncSerialNo(genSerialNoModel.partSnParam(mesPart.getPartSnParam()), mesProduceSnPrintModel.getUserName(), organizeCode, 1); //保存条码信息 MesProduceSn produceSn = generateMesProduceSn(mesPart, resultBean.getResultList().get(0).toString(), mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty()); //封装打印信息 diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/CustCodeWhqrPrintStrategy.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/CustCodeWhqrPrintStrategy.java index cef3dfa..693c833 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/CustCodeWhqrPrintStrategy.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/CustCodeWhqrPrintStrategy.java @@ -74,7 +74,7 @@ public class CustCodeWhqrPrintStrategy implements IPrintTemplateStrategyService } if (!isStep) { genSerialNoModel.putDataMap(MesCustomerPart.class.getSimpleName(), customerPart); - genSerialNoModel.setCustPartNo(customerPart.getCustPartNo()); + genSerialNoModel.partSnParam(mesPart.getPartSnParam()).setCustPartNo(customerPart.getCustPartNo()); for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) { //保存条码信息 MesProduceSn produceSn = generateMesProduceSn(mesPart, syncFuncService.syncSerialNo(genSerialNoModel, mesProduceSnPrintModel.getUserName(), organizeCode, 1).getResultList().get(0).toString(), mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty()); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/GqaaPrintStrategy.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/GqaaPrintStrategy.java index 5a7c7c8..3c14ed7 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/GqaaPrintStrategy.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/GqaaPrintStrategy.java @@ -81,7 +81,7 @@ public class GqaaPrintStrategy implements IPrintTemplateStrategyService { MesPart mesPart = mesPartService.getMesPartByPartNo(mesProduceSnPrintModel.getPartNo(), organizeCode); if (!isStep){ for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) { - ResultBean resultBean = syncFuncService.syncSerialNo(genSerialNoModel, mesProduceSnPrintModel.getUserName(), organizeCode, 1); + ResultBean resultBean = syncFuncService.syncSerialNo(genSerialNoModel.partSnParam(mesPart.getPartSnParam()), mesProduceSnPrintModel.getUserName(), organizeCode, 1); //保存条码信息 MesProduceSn produceSn = generateMesProduceSn(mesPart, resultBean.getResultList().get(0).toString(), mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty()); //封装打印信息 diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/GqxnyPrintStrategy.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/GqxnyPrintStrategy.java index 591fd9a..fb0b4c1 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/GqxnyPrintStrategy.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/GqxnyPrintStrategy.java @@ -95,7 +95,7 @@ public class GqxnyPrintStrategy implements IPrintTemplateStrategyService { * 客户零件号 + 固定三位横杠 */ //String custPartNoFormat = stringFormat(custPartNo, 17); - genSerialNoModel.setCustPartNo(custPartNo); + genSerialNoModel.partSnParam(mesPart.getPartSnParam()).setCustPartNo(custPartNo); //拓展位 2位 00 包含0~9,A~Z 不使用时,补“0”填充 {SPILTRULE} //供应商代码 7位 供应商代码 0~9,A~Z;不足7位 右测补* MesConfig supplierConfig = configService.getMesConfigByCfgCodeKeyOrg(MesPcnExtConstWords.SUPPLIER_CODE, MesExtEnumUtil.MES_PRINT_TEMPLATE.GQXNY.getValue(), organizeCode); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/InternalBarcodePrintStrategy.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/InternalBarcodePrintStrategy.java index bc4cde4..d766e34 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/InternalBarcodePrintStrategy.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/InternalBarcodePrintStrategy.java @@ -69,7 +69,7 @@ public class InternalBarcodePrintStrategy implements IPrintTemplateStrategyServi } for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) { //保存条码信息 - MesProduceSn produceSn = generateMesProduceSn(mesPart, syncFuncService.syncSerialNo(genSerialNoModel, mesProduceSnPrintModel.getUserName(), organizeCode, 1).getResultList().get(0).toString(), mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty()); + MesProduceSn produceSn = generateMesProduceSn(mesPart, syncFuncService.syncSerialNo(genSerialNoModel.partSnParam(mesPart.getPartSnParam()), mesProduceSnPrintModel.getUserName(), organizeCode, 1).getResultList().get(0).toString(), mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty()); //封装打印信息 MesProduceSnPrintDataModel printDataModel = getModel(produceSn, customerPart); mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().add(printDataModel); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/MesCommonPrintStrategy.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/MesCommonPrintStrategy.java index b37b6af..dcd886e 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/MesCommonPrintStrategy.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/MesCommonPrintStrategy.java @@ -64,7 +64,7 @@ public class MesCommonPrintStrategy implements IPrintTemplateStrategyService { } for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) { //保存条码信息 - MesProduceSn produceSn = generateMesProduceSn(mesPart, syncFuncService.syncSerialNo(genSerialNoModel, mesProduceSnPrintModel.getUserName(), organizeCode, 1).getResultList().get(0).toString(), mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty()); + MesProduceSn produceSn = generateMesProduceSn(mesPart, syncFuncService.syncSerialNo(genSerialNoModel.partSnParam(mesPart.getPartSnParam()), mesProduceSnPrintModel.getUserName(), organizeCode, 1).getResultList().get(0).toString(), mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty()); //封装打印信息 MesProduceSnPrintDataModel printDataModel = getModel(produceSn, customerPart); mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().add(printDataModel); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/MesDPBarcodeWhPrintStrategy.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/MesDPBarcodeWhPrintStrategy.java index 8fd877e..db75b50 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/MesDPBarcodeWhPrintStrategy.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/MesDPBarcodeWhPrintStrategy.java @@ -65,7 +65,7 @@ public class MesDPBarcodeWhPrintStrategy implements IPrintTemplateStrategyServic if (StringUtils.isEmpty(genSerialNoModel.getShiftCode()) || Objects.isNull(customerPart)) { MesPcnException.throwMesBusiException("班次代码或客户零件号未维护"); } - genSerialNoModel.setCustPartNo(customerPart.getCustPartNo()); + genSerialNoModel.partSnParam(mesPart.getPartSnParam()).setCustPartNo(customerPart.getCustPartNo()); for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) { //保存条码信息 MesProduceSn produceSn = generateMesProduceSn(mesPart, syncFuncService.syncSerialNo(genSerialNoModel, mesProduceSnPrintModel.getUserName(), organizeCode, 1).getResultList().get(0).toString(), mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty()); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/NoSortBarCodeGzStrategy.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/NoSortBarCodeGzStrategy.java index 4410bd1..e423dfe 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/NoSortBarCodeGzStrategy.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/NoSortBarCodeGzStrategy.java @@ -74,6 +74,7 @@ public class NoSortBarCodeGzStrategy implements IPrintTemplateStrategyService { String organizeName = mesConfig.getCfgValue(); genSerialNoModel.setRuleCode(numberRule.getRuleCode()); genSerialNoModel.setPartNo(partNo); + genSerialNoModel.setPartSnParam(mesPart.getPartSnParam()); //年月日 yyyyMMdd //流水号 4位 每天从1开始 for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/WuHanLengDaoPrintStrategy.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/WuHanLengDaoPrintStrategy.java index 41adeea..1008f87 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/WuHanLengDaoPrintStrategy.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/WuHanLengDaoPrintStrategy.java @@ -65,7 +65,7 @@ public class WuHanLengDaoPrintStrategy implements IPrintTemplateStrategyService } for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) { //保存条码信息 - MesProduceSn produceSn = generateMesProduceSn(mesPart, syncFuncService.syncSerialNo(genSerialNoModel, mesProduceSnPrintModel.getUserName(), organizeCode, 1).getResultList().get(0).toString(), mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty()); + MesProduceSn produceSn = generateMesProduceSn(mesPart, syncFuncService.syncSerialNo(genSerialNoModel.partSnParam(mesPart.getPartSnParam()), mesProduceSnPrintModel.getUserName(), organizeCode, 1).getResultList().get(0).toString(), mesProduceSnPrintModel.getUserName(), mesProduceSnPrintModel.getQty()); //封装打印信息 MesProduceSnPrintDataModel printDataModel = getModel(produceSn, customerPart); mesProduceSnPrintModel.getMesProduceSnPrintDataModelList().add(printDataModel); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/WuhanSnPrintStrategy.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/WuhanSnPrintStrategy.java index 0c4cb87..03e82ee 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/WuhanSnPrintStrategy.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/WuhanSnPrintStrategy.java @@ -80,7 +80,7 @@ public class WuhanSnPrintStrategy implements IPrintTemplateStrategyService { // 返回的结果集合 List> printDataMapList = new ArrayList<>(); if (!isStep) { - genSerialNoModel.putDataMap(MesCustomerPart.class.getSimpleName(),customerPart); + genSerialNoModel.putDataMap(MesCustomerPart.class.getSimpleName(),customerPart).partSnParam(mesPart.getPartSnParam()); for (int i = 0; i < model.getPrintQty(); i++) { //保存条码信息 MesProduceSn produceSn = generateMesProduceSn(mesPart, syncFuncService.syncSerialNo(genSerialNoModel, model.getUserName(), model.getOrganizeCode(), 1).getResultList().get(0).toString(), model.getUserName(), model.getQty()); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/XiaoPengNewPrintStrategy.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/XiaoPengNewPrintStrategy.java index e6924e8..da4c691 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/XiaoPengNewPrintStrategy.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/XiaoPengNewPrintStrategy.java @@ -81,6 +81,7 @@ public class XiaoPengNewPrintStrategy implements IPrintTemplateStrategyService { genSerialNoModel.setMonth(getMonthShort(date)); genSerialNoModel.setDay(getDayShort(date)); genSerialNoModel.setRuleCode(numberRule.getRuleCode()); + genSerialNoModel.setPartSnParam(mesPart.getPartSnParam()); //流水号 5位 每天从1开始 for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) { ResultBean resultBean = syncFuncService.syncSerialNo(genSerialNoModel, mesProduceSnPrintModel.getUserName(), organizeCode, 1); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/XiaoPengPrintStrategy.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/XiaoPengPrintStrategy.java index 0d3ad4b..4e1926e 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/XiaoPengPrintStrategy.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/XiaoPengPrintStrategy.java @@ -82,6 +82,7 @@ public class XiaoPengPrintStrategy implements IPrintTemplateStrategyService { genSerialNoModel.setDay(getDayShort(date)); genSerialNoModel.setRuleCode(numberRule.getRuleCode()); genSerialNoModel.setCustPartNo(custPartNo); + genSerialNoModel.setPartSnParam(mesPart.getPartSnParam()); //流水号 5位 每天从1开始 for (int i = 0; i < mesProduceSnPrintModel.getPrintQty(); i++) { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java index c9dad0f..25524c3 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java @@ -1,7 +1,6 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdShiftRecordService; -import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesShiftService; 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; @@ -18,7 +17,10 @@ import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; -import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.bean.MesFile; +import cn.estsh.i3plus.pojo.mes.bean.MesStateMachineStatus; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; import cn.estsh.i3plus.pojo.mes.model.StationKvBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean; @@ -33,7 +35,10 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.StringJoiner; /** * @Description : 展示组件:非排序生产 @@ -53,7 +58,7 @@ public class MesProductionNoSortModuleService extends BaseModuleService { private IMesProductionCustomContextStepService productionCustomContextStepService; @Autowired - private IMesProdShiftRecordService mesProdShiftRecordService; + private IMesProdShiftRecordService prodShiftRecordService; @Autowired private IMesWorkOrderExtService workOrderExtService; @@ -61,13 +66,8 @@ public class MesProductionNoSortModuleService extends BaseModuleService { @Autowired private MesFileRepository mesFileRepository; - @Autowired - private IMesShiftService mesShiftService; - @Override public void init(StationRequestBean reqBean) { - // 获取工单信息 - List> moduleContentContext = productionDispatchContextStepService.getModuleContentContext(reqBean); //获取上下文信息 MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getProductionProcessContext(reqBean, false); @@ -77,8 +77,11 @@ public class MesProductionNoSortModuleService extends BaseModuleService { MesPcnException.throwBusiException(productionProcessContext.getMessage()); } + // 获取工单信息 + List> moduleContentContext = productionDispatchContextStepService.getModuleContentContext(reqBean); + //获取班次信息,先查询缓存,缓存没有在查询数据库 - List prodShiftDataContext = getShiftRecordStationKvBeans(reqBean); + List prodShiftDataContext = prodShiftRecordService.getShiftRecordStationKvBeans(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()); if (CollectionUtils.isEmpty(prodShiftDataContext)) { this.sendMessage(reqBean, new StationResultBean().writeDbLog(), "请先开班!", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); MesPcnException.throwBusiException("请先开班!"); @@ -108,22 +111,6 @@ public class MesProductionNoSortModuleService extends BaseModuleService { ((IStepService) SpringContextsUtil.getBean("mesEquipByPassReadStepService")).executeInState(reqBean); } - private List getShiftRecordStationKvBeans(StationRequestBean reqBean) { - // 获取班次信息 redis - List prodShiftDataContext = productionCustomContextStepService.getProdShiftDataContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()); - if (CollectionUtils.isEmpty(prodShiftDataContext)) { - MesProdShiftRecord shiftRecord = new MesProdShiftRecord(); - shiftRecord.setWorkCenterCode(reqBean.getWorkCenterCode()); - shiftRecord.setWorkStatus(MesExtEnumUtil.WORK_STATUS.START.getValue()); - // 查询数据库 - MesProdShiftRecord prodShiftRecord = mesProdShiftRecordService.queryMesProdShiftRecord(shiftRecord); - if (prodShiftRecord != null) { - prodShiftDataContext = getProdShiftData(prodShiftRecord); - productionCustomContextStepService.dispatchProdShiftDataContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(),prodShiftDataContext); - } - } - return prodShiftDataContext; - } private StationResultBean getStationResultBean(StationRequestBean reqBean, List> moduleContentContext, List prodShiftDataContext) { StationResultBean resultBean = new StationResultBean(); @@ -132,7 +119,6 @@ public class MesProductionNoSortModuleService extends BaseModuleService { resultBean.setCustomPageName(MesPcnExtConstWords.CUSTOM_PAGE_NAME_DEFAULT); resultBean.setSpecialDisplayData(getStepColIndent(reqBean)); - resultBean.setResultObj(prodShiftDataContext); resultBean.setResultList(moduleContentContext); return resultBean; @@ -205,20 +191,4 @@ public class MesProductionNoSortModuleService extends BaseModuleService { return true; } - //封装展示组件班组班次内容 - private List getProdShiftData(MesProdShiftRecord record) { - List stationKvBeans = StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), - new StationKvBean(MesPcnExtConstWords.SHIFT_GROUP, "班组", record.getShiftGroup()), - new StationKvBean(MesPcnExtConstWords.SHIFT_GROUP_NAME, "班组名称", record.getShiftGroupName()), - new StationKvBean(MesPcnExtConstWords.SHIFT_CODE, "班次", record.getShiftCode()), - new StationKvBean(MesPcnExtConstWords.SHIFT_NAME, "班次名称", record.getShiftName())); - //班次开始时间 ,班次结束时间 - Map shiftTimeMap = mesShiftService.getShiftTimeMap(record); - if (!java.util.Objects.isNull(shiftTimeMap)) { - StationKvBeanUtil.addStationKvBeanList(stationKvBeans, - new StationKvBean(MesPcnExtConstWords.START_TIME,"开始时间",shiftTimeMap.get(MesPcnExtConstWords.START_TIME)), - new StationKvBean(MesPcnExtConstWords.END_TIME,"结束时间",shiftTimeMap.get(MesPcnExtConstWords.END_TIME))); - } - return stationKvBeans; - } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionSortModuleService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionSortModuleService.java index 6b61c88..309fcdc 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionSortModuleService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionSortModuleService.java @@ -1,24 +1,22 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdShiftRecordService; -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.util.MesPcnException; 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.model.MesQueueOrderModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseModuleService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService; import cn.estsh.i3plus.mes.pcn.util.PojoAttrUtil; -import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil; import cn.estsh.i3plus.platform.common.tool.CheckTool; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; -import cn.estsh.i3plus.pojo.mes.bean.MesProdShiftRecord; import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrder; import cn.estsh.i3plus.pojo.mes.model.AttrBean; import cn.estsh.i3plus.pojo.mes.model.StationKvBean; @@ -54,16 +52,22 @@ public class MesProductionSortModuleService extends BaseModuleService { private IMesProductionDispatchContextStepService productionDispatchContextStepService; @Autowired - private IMesProductionCustomContextStepService productionCustomContextStepService; - - @Autowired - private IMesProdShiftRecordService mesProdShiftRecordService; + private IMesProdShiftRecordService prodShiftRecordService; @Autowired private MesQueueOrderRepository queueOrderRepository; @Override public void init(StationRequestBean reqBean) { + + //获取上下文信息 + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getProductionProcessContext(reqBean, false); + //配置错误 抛出异常 + if (!productionProcessContext.getSuccess()) { + this.sendMessage(reqBean, new StationResultBean().writeDbLog(), productionProcessContext.getMessage(), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + MesPcnException.throwBusiException(productionProcessContext.getMessage()); + } + // 获取工单信息 List> moduleContentContext = productionDispatchContextStepService.getModuleContentContext(reqBean); @@ -73,7 +77,7 @@ public class MesProductionSortModuleService extends BaseModuleService { productionPartContext = CollectionUtils.isEmpty(productionPartContext) ? null : productionPartContext.stream().filter(o -> o.getForeignKey() != null).collect(Collectors.toList()); //获取班次信息,先查询缓存,缓存没有在查询数据库 - List prodShiftDataContext = getShiftRecordStationKvBeans(reqBean); + List prodShiftDataContext = prodShiftRecordService.getShiftRecordStationKvBeans(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()); if (CollectionUtils.isEmpty(prodShiftDataContext)) { this.sendMessage(reqBean, new StationResultBean().writeDbLog(), "请先开班!", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); MesPcnException.throwBusiException("请先开班!"); @@ -174,23 +178,6 @@ public class MesProductionSortModuleService extends BaseModuleService { return queueOrderRepository.getByProperty(packBean); } - private List getShiftRecordStationKvBeans(StationRequestBean reqBean) { - // 获取班次信息 redis - List prodShiftDataContext = productionCustomContextStepService.getProdShiftDataContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()); - if (CollectionUtils.isEmpty(prodShiftDataContext)) { - MesProdShiftRecord shiftRecord = new MesProdShiftRecord(); - shiftRecord.setWorkCenterCode(reqBean.getWorkCenterCode()); - shiftRecord.setWorkStatus(MesExtEnumUtil.WORK_STATUS.START.getValue()); - // 查询数据库 - MesProdShiftRecord prodShiftRecord = mesProdShiftRecordService.queryMesProdShiftRecord(shiftRecord); - if (prodShiftRecord != null) { - prodShiftDataContext = getProdShiftData(prodShiftRecord); - productionCustomContextStepService.dispatchProdShiftDataContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(),prodShiftDataContext); - } - } - return prodShiftDataContext; - } - private StationResultBean getStationResultBean(StationRequestBean reqBean, List> moduleContentContext, List prodShiftDataContext) { StationResultBean resultBean = new StationResultBean(); resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.MODULE_CONTENT.getValue()); @@ -198,19 +185,9 @@ public class MesProductionSortModuleService extends BaseModuleService { resultBean.setCustomPageName(MesPcnExtConstWords.CUSTOM_PAGE_NAME_DEFAULT); resultBean.setSpecialDisplayData(getStepColIndent(reqBean)); - resultBean.setResultObj(prodShiftDataContext); resultBean.setResultList(moduleContentContext); return resultBean; } - //封装展示组件班组班次内容 - private List getProdShiftData(MesProdShiftRecord record) { - - return StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), - new StationKvBean(MesPcnExtConstWords.SHIFT_GROUP, "班组", record.getShiftGroup()), - new StationKvBean(MesPcnExtConstWords.SHIFT_GROUP_NAME, "班组名称", record.getShiftGroupName()), - new StationKvBean(MesPcnExtConstWords.SHIFT_CODE, "班次", record.getShiftCode()), - new StationKvBean(MesPcnExtConstWords.SHIFT_NAME, "班次名称", record.getShiftName())); - } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionChooseCavityOrderService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionChooseCavityOrderService.java index 594e05e..bc15344 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionChooseCavityOrderService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionChooseCavityOrderService.java @@ -1,5 +1,6 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station.function; +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdShiftRecordService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; @@ -8,6 +9,7 @@ import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseSwsService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IShippingDispatchService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService; import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil; +import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.platform.common.util.MesPcnConstWords; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; @@ -21,9 +23,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; /** @@ -36,6 +36,9 @@ public class MesFunctionChooseCavityOrderService extends BaseSwsService implemen private IMesProductionProcessContextStepService productionProcessContextStepService; @Autowired + private IMesProdShiftRecordService prodShiftRecordService; + + @Autowired private IShippingDispatchService shippingDispatchService; @Override @@ -112,16 +115,35 @@ public class MesFunctionChooseCavityOrderService extends BaseSwsService implemen @Override public Object doCustomApiDispatch(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel) { + Map resultMap = new HashMap<>(); + //获取生产过程上下文对象 MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getProductionProcessContext(reqBean); - if (!productionProcessContext.getSuccess()) return MesPcnExtConstWords.ONE; + //获取班次信息 + List prodShiftDataContext = prodShiftRecordService.getShiftRecordStationKvBeans(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()); - MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); + if (!productionProcessContext.getSuccess()) resultMap.put(MesPcnExtConstWords.CAVITY, MesPcnExtConstWords.ONE); + else { + MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); + if (null == cellEquipContext) resultMap.put(MesPcnExtConstWords.CAVITY, MesPcnExtConstWords.ONE); + else resultMap.put(MesPcnExtConstWords.CAVITY, cellEquipContext.getCavity()); + } + + Optional startTime = CollectionUtils.isEmpty(prodShiftDataContext) ? null : + prodShiftDataContext.stream().filter(o -> (null != o && o.getKey().equals(MesPcnExtConstWords.START_TIME))).findFirst(); + Optional endTime = CollectionUtils.isEmpty(prodShiftDataContext) ? null : + prodShiftDataContext.stream().filter(o -> (null != o && o.getKey().equals(MesPcnExtConstWords.END_TIME))).findFirst(); + if (null == startTime || !startTime.isPresent() || null == endTime || !endTime.isPresent()) { + resultMap.put(MesPcnExtConstWords.START_TIME, TimeTool.getToday() + MesPcnExtConstWords.DATE_FORMAT_APPEND_0); + resultMap.put(MesPcnExtConstWords.END_TIME, TimeTool.getToday() + MesPcnExtConstWords.DATE_FORMAT_APPEND_24); + } else { + resultMap.put(MesPcnExtConstWords.START_TIME, startTime.get().getValue()); + resultMap.put(MesPcnExtConstWords.END_TIME, endTime.get().getValue()); + } - if (null == cellEquipContext) return MesPcnExtConstWords.ONE; + return resultMap; - return cellEquipContext.getCavity(); } } 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 37632ef..5c0ba2f 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 @@ -233,7 +233,7 @@ public class MesProductSnGenerateStepService extends BaseStepService { } private GenSerialNoModel generateGenSerialNoModel(StationRequestBean reqBean, StationResultBean resultBean, String ruleCode, MesPart part) { - return new GenSerialNoModel(ruleCode).prodLocation(reqBean.getWorkCenterCode()).partNo(part.getPartNo()) + return new GenSerialNoModel(ruleCode).prodLocation(reqBean.getWorkCenterCode()).partNo(part.getPartNo()).partSnParam(part.getPartSnParam()) .putDataMap(MesPart.class.getSimpleName(), part).basicInfo(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()); } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesProductionRecordOfflineModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesProductionRecordOfflineModel.java new file mode 100644 index 0000000..ebd3250 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesProductionRecordOfflineModel.java @@ -0,0 +1,25 @@ +package cn.estsh.i3plus.ext.mes.pcn.pojo.model; + +import io.swagger.annotations.ApiParam; +import lombok.Data; + +import java.io.Serializable; + +@Data +public class MesProductionRecordOfflineModel implements Serializable { + + private static final long serialVersionUID = 5839349920749583082L; + + @ApiParam("工位代码") + private String workCellCode; + + @ApiParam("加工记录ID") + private String id; + + public MesProductionRecordOfflineModel() {} + + public MesProductionRecordOfflineModel(String workCellCode, String id) { + this.workCellCode = workCellCode; + this.id = id; + } +} diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java index ed99a85..22f77a6 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java @@ -269,6 +269,8 @@ public class MesPcnExtConstWords { public static final String OBJECT_CODE = "objectCode"; //影响数量 public static final String EFFECT_NUM = "effectNum"; + //组件类型 + public static final String MODULE_TYPE = "moduleType"; //BaseBean字段不包含工厂, 用于对象复制剔除属性BeanUtils.copyProperties(Object source, Object target, String... ignoreProperties) @@ -301,6 +303,8 @@ public class MesPcnExtConstWords { public static final String DATE_FORMAT_POINT = "yyyy.MM.dd"; public static final String DATE_FORMAT_SLASH = "yyyy/MM/dd"; public static final String DATE_FORMAT_YY = "yy"; + public static final String DATE_FORMAT_APPEND_0 = " 00:00:00"; + public static final String DATE_FORMAT_APPEND_24 = " 23:59:59"; //设备数据变量读写访问配置 @@ -449,6 +453,9 @@ public class MesPcnExtConstWords { //. public static final String DECIMAL_POINT = "."; + // 自动初始化工位按钮URL + public static final String AUTO_INIT_WORK_CELL_MODULE_URL = "AUTO_INIT_WORK_CELL_MODULE_URL"; + // 分表配置 public static final String MES_SHARDING_TABLES_OBJECT_CFG = "MES_SHARDING_TABLES_OBJECT_CFG";