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..f8293a2 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,13 @@ 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/controller/busi/MesProduceSnPrintController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesProduceSnPrintController.java index 24a2907..fd7ed9a 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesProduceSnPrintController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesProduceSnPrintController.java @@ -144,7 +144,6 @@ public class MesProduceSnPrintController { try { ValidatorBean.checkNotNull(printQueue.getPrintQueueType(), "打印类型不能为空"); - MesRedisLockUtil mesRedisLockUtil = new MesRedisLockUtil(); String workCenterCodeQuery = printQueue.getWorkCenterCodeQuery(); String partProdGroupCodeQuery = printQueue.getPartProdGroupCodeQuery(); if (printQueue.getPrintQueueType() == MesExtEnumUtil.PRINT_QUEUE_TYPE.WORK_ORDER_ASSEMBLY.getValue()) { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/spot/MesSpotCheckOrderController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/spot/MesSpotCheckOrderController.java index 7461784..c5ac761 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/spot/MesSpotCheckOrderController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/spot/MesSpotCheckOrderController.java @@ -5,6 +5,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.spot.IMesSpotCheckOrderService; import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesSpotCheckOrderModel; import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentSpotCheck; import cn.estsh.i3plus.pojo.mes.bean.MesSpotCheckOrder; import cn.estsh.impp.framework.boot.auth.AuthUtil; @@ -111,7 +112,7 @@ public class MesSpotCheckOrderController { try { - if (StringUtils.isEmpty(model.getSpotCheckOrder())) { + if (StringUtils.isEmpty(model.getSpotCheckOrder()) || StringUtil.isEmpty(model.getSpotCheckOrder().getId())) { throw new ImppBusiException("点检单不能为空"); } if (StringUtils.isEmpty(model.getProduceSn())) { @@ -135,7 +136,7 @@ public class MesSpotCheckOrderController { try { - if (StringUtils.isEmpty(model.getSpotCheckOrder())) { + if (StringUtils.isEmpty(model.getSpotCheckOrder())|| StringUtil.isEmpty(model.getSpotCheckOrder().getId())) { throw new ImppBusiException("点检单不能为空"); } if (CollectionUtils.isEmpty(model.getOrderResultList())) { @@ -155,7 +156,7 @@ public class MesSpotCheckOrderController { try { - if (StringUtils.isEmpty(model.getSpotCheckOrder())) { + if (StringUtils.isEmpty(model.getSpotCheckOrder()) || StringUtil.isEmpty(model.getSpotCheckOrder().getId())) { throw new ImppBusiException("点检单不能为空"); } @@ -178,7 +179,7 @@ public class MesSpotCheckOrderController { try { - if (StringUtils.isEmpty(model.getSpotCheckOrder().getId())) { + if (StringUtils.isEmpty(model.getSpotCheckOrder()) || StringUtils.isEmpty(model.getSpotCheckOrder().getId())) { throw new ImppBusiException("点检单不能为空"); } 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..ccc1ae6 --- /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,88 @@ +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) { + if (doAutoInitWorkCellModuleData(organizeCode, workCenterCode, workCellCode, workCell.getId())) buttonDynamicModelList = findWorkModuleList(organizeCode, windowNo); + } + } + 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 Boolean doAutoInitWorkCellModuleData(String organizeCode, String workCenterCode, String workCellCode, 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 false; + if (null == apiCfg || StringUtils.isEmpty(apiCfg.getCfgValue())) return false; + log.info("工厂{}生产线{}工位{}: --- 初始化工位按钮 --- START --- 执行结果:{}", organizeCode, workCenterCode, workCellCode); + Map paramsMap = new HashMap<>(); + paramsMap.put(MesPcnExtConstWords.ORGANIZE_CODE, organizeCode); + paramsMap.put(MesPcnExtConstWords.ID, id.toString()); + String data = PcnHttpUtil.doPost(configGateWay.getCfgValue() + apiCfg.getCfgValue(), paramsMap); + log.info("工厂{}生产线{}工位{}: --- 初始化工位按钮 --- END --- 执行结果:{}", organizeCode, workCenterCode, workCellCode, data); + return true; + } + +} 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..2af058b 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,12 @@ 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.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 +30,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 +61,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 +87,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 +103,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 +134,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 +147,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 +169,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 +183,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 +202,10 @@ public class MesProdShiftRecordServiceImpl implements IMesProdShiftRecordService } } + //如果结班,会清除缓存中的班次数据 + if (item.getWorkStatus().compareTo(MesExtEnumUtil.WORK_STATUS.END.getValue()) == 0) { + productionCustomContextStepService.removeProdShiftDataContext(item.getOrganizeCode(), item.getWorkCenterCode()); + } } @@ -200,4 +221,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 (!CollectionUtils.isEmpty(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/MesSpotCheckOrderService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java index 08c16e6..80de6c1 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java @@ -622,7 +622,7 @@ public class MesSpotCheckOrderService implements IMesSpotCheckOrderService { DdlPreparedPack.getStringLikerPack(spotCheckOrder.getWorkCellCode(), "workCellCode", packBean); DdlPreparedPack.getStringLikerPack(spotCheckOrder.getSpotCheckOrderNo(), "spotCheckOrderNo", packBean); DdlPreparedPack.getStringEqualPack(spotCheckOrder.getEquipCode(), "equipCode", packBean); - packBean.setWhereAppend(packBean.getWhereAppend() + String.format(" and (model.status = %s or (model.status = %s and model.createDatetime >= %s))", MesExtEnumUtil.SPOT_CHECK_ORDER_STATUS.CREATE.getValue(), MesExtEnumUtil.SPOT_CHECK_ORDER_STATUS.COMPLETE.getValue(), createDateTime)); + packBean.setWhereAppend(packBean.getWhereAppend() + String.format(" and (model.status = %s or (model.status = %s and model.createDatetime >= '%s'))", MesExtEnumUtil.SPOT_CHECK_ORDER_STATUS.CREATE.getValue(), MesExtEnumUtil.SPOT_CHECK_ORDER_STATUS.COMPLETE.getValue(), createDateTime)); return packBean; } 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/busi/printqueue/strategy/WorkOrderAssemblyPrintQueueStrategyService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/printqueue/strategy/WorkOrderAssemblyPrintQueueStrategyService.java index 656ceec..ef50ea1 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/printqueue/strategy/WorkOrderAssemblyPrintQueueStrategyService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/printqueue/strategy/WorkOrderAssemblyPrintQueueStrategyService.java @@ -68,10 +68,17 @@ public class WorkOrderAssemblyPrintQueueStrategyService implements IPrintQueueSt List printQueueList = getMesPrintQueues(model); // 无打印直接返回 - if (CollectionUtils.isEmpty(printQueueList)) return null; + if (CollectionUtils.isEmpty(printQueueList)){ + log.info("无待打印的数据"); + return null; + } // 获取工单信息 List workOrderList = getMesWorkOrders(model, printQueueList); + if(CollectionUtils.isEmpty(workOrderList)) { + log.info("工单信息不存在"); + return null; + } // 产线代码集合 List workCenterCodeList = workOrderList.stream().map(MesWorkOrder::getWorkCenterCode).distinct().collect(Collectors.toList()); @@ -80,13 +87,17 @@ public class WorkOrderAssemblyPrintQueueStrategyService implements IPrintQueueSt List mesWorkCenters = workCenterService.queryMesWorkCenterList(workCenterCodeList, model.getOrganizeCode()); // 产线名称集合 - Map workCenterNameMap = mesWorkCenters.stream().collect(Collectors.toMap(MesWorkCenter::getWorkCenterCode, MesWorkCenter::getWorkCenterName, (x, y) -> y)); + Map workCenterNameMap = CollectionUtils.isEmpty(mesWorkCenters) ? null : mesWorkCenters.stream().collect(Collectors.toMap(MesWorkCenter::getWorkCenterCode, MesWorkCenter::getWorkCenterName, (x, y) -> y)); // 根据工单号对工单分组 Map workOrderMapByWorkOrderNo = workOrderList.stream().collect(Collectors.toMap(MesWorkOrder::getWorkOrderNo, Function.identity(), (x, y) -> y)); // 根据零件生产组代码分组 Map partProdGroupMap = getMesPartProdGroupMap(model, printQueueList); + if(Objects.isNull(partProdGroupMap)){ + log.info("零件生产组信息不存在"); + return null; + } // 客户车型配置名称MAP Map carModelMapByCode = getMesCustomerCarModelMap(model, workOrderList); @@ -102,18 +113,25 @@ public class WorkOrderAssemblyPrintQueueStrategyService implements IPrintQueueSt for (MesPrintQueue printQueue : printQueueList) { - MesWorkOrder mesWorkOrder = workOrderMapByWorkOrderNo.get(printQueue.getWorkOrderNo()); + MesWorkOrder mesWorkOrder = workOrderMapByWorkOrderNo.getOrDefault(printQueue.getWorkOrderNo(), null); if (mesWorkOrder == null) { log.info("WorkOrderAssemblyPrintQueueStrategyService --- 工单{}为空 暂不输出打印", printQueue.getWorkOrderNo()); continue; } - mesWorkOrder.setWorkCenterName(workCenterNameMap.get(printQueue.getWorkCenterCode())); + mesWorkOrder.setWorkCenterName(Objects.isNull(workCenterNameMap) || !workCenterNameMap.containsKey(printQueue.getWorkCenterCode()) ? "" : workCenterNameMap.get(printQueue.getWorkCenterCode())); printQueue.setWorkOrderTypeName(MesExtEnumUtil.ORDER_TYPE.valueOfDescription(mesWorkOrder.getWorkOrderType())); - MesPartProdGroup mesPartProdGroup = partProdGroupMap.get(printQueue.getPartProdGroupCode()); + MesPartProdGroup mesPartProdGroup = partProdGroupMap.getOrDefault(printQueue.getPartProdGroupCode(), null); + if(Objects.isNull(mesPartProdGroup)){ + printQueue.setRemark("生产组信息不存在"); + printQueue.setSystemSyncStatus(CommonEnumUtil.FALSE); + ConvertBean.serviceModelUpdate(printQueue, model.getModifyUser()); + log.info("WorkOrderAssemblyPrintQueueStrategyService --- 生产组{}为空 暂不输出打印", printQueue.getPartProdGroupCode()); + continue; + } String printTemplate = mesPartProdGroup.getPrintTemplate(); @@ -126,12 +144,9 @@ public class WorkOrderAssemblyPrintQueueStrategyService implements IPrintQueueSt MesLabelTemplate labelTemplate = mesTemplateService.getLabelTemplate(printTemplate, model.getOrganizeCode()); - //根据反射获取策略类--封装打印数据 - String methodCode = labelTemplate.getMethodCode(); - //模板信息丢失抛出异常 - if (StringUtils.isEmpty(methodCode)) { - printQueue.setRemark(String.format("模板代码[%s]方法类为空,请配置!", labelTemplate.getTemplateCode())); + if (StringUtils.isEmpty(labelTemplate) || StringUtils.isEmpty(labelTemplate.getMethodCode())) { + printQueue.setRemark(String.format("模板代码[%s]方法类为空,请配置!", printTemplate)); printQueue.setSystemSyncStatus(CommonEnumUtil.FALSE); ConvertBean.serviceModelUpdate(printQueue, model.getModifyUser()); continue; @@ -141,11 +156,11 @@ public class WorkOrderAssemblyPrintQueueStrategyService implements IPrintQueueSt modelMap.put("mesWorkOrder", mesWorkOrder); modelMap.put("mesPartProdGroup", mesPartProdGroup); - MesCustomerCarModel customerCarModel = carModelMapByCode.get(mesWorkOrder.getCarModelCode()); + MesCustomerCarModel customerCarModel = Objects.isNull(carModelMapByCode) || !carModelMapByCode.containsKey(mesWorkOrder.getCarModelCode()) ? null : carModelMapByCode.get(mesWorkOrder.getCarModelCode()); if (customerCarModel != null) { modelMap.put("mesCustomerCarModel", customerCarModel); } - List workOrderAssemblyListByWorkOrderNo = workOrderAssemblyMapByWorkOrderNo.get(printQueue.getWorkOrderNo()); + List workOrderAssemblyListByWorkOrderNo = Objects.isNull(workOrderAssemblyMapByWorkOrderNo) || !workOrderAssemblyMapByWorkOrderNo.containsKey(printQueue.getWorkOrderNo()) ? null : workOrderAssemblyMapByWorkOrderNo.get(printQueue.getWorkOrderNo()); if (!CollectionUtils.isEmpty(workOrderAssemblyListByWorkOrderNo)) { modelMap.put("mesWorkOrderAssemblyList", workOrderAssemblyListByWorkOrderNo); } @@ -158,7 +173,7 @@ public class WorkOrderAssemblyPrintQueueStrategyService implements IPrintQueueSt MesProduceSnPrintModel snPrintModel = null; try { - IPrintTemplateStrategyService strategyService = (IPrintTemplateStrategyService) SpringContextsUtil.getBean(methodCode); + IPrintTemplateStrategyService strategyService = (IPrintTemplateStrategyService) SpringContextsUtil.getBean(labelTemplate.getMethodCode()); snPrintModel = strategyService.execute(null, mesProduceSnPrintModel, null, null, null ,false); } catch (BeansException e) { printQueue.setRemark(String.format("模板代码[%s]方法类[%s]执行异常,请配置!", labelTemplate.getTemplateCode(), labelTemplate.getMethodCode())); @@ -196,8 +211,7 @@ public class WorkOrderAssemblyPrintQueueStrategyService implements IPrintQueueSt DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); DdlPreparedPack.getInPackList(workOrderNoList, MesPcnExtConstWords.WORK_ORDER_NO, packBean); List workOrderAssemblyList = workOrderAssemblyRepository.findByHqlWhere(packBean); - Map> workOrderAssemblyMapByWorkOrderNo = workOrderAssemblyList.stream().collect(Collectors.groupingBy(MesWorkOrderAssembly::getWorkOrderNo)); - return workOrderAssemblyMapByWorkOrderNo; + return CollectionUtils.isEmpty(workOrderAssemblyList) ? null : workOrderAssemblyList.stream().collect(Collectors.groupingBy(MesWorkOrderAssembly::getWorkOrderNo)); } private Map getMesCustomerCarModelMap(MesPrintQueue model, List workOrderList) { @@ -206,9 +220,7 @@ public class WorkOrderAssemblyPrintQueueStrategyService implements IPrintQueueSt DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); DdlPreparedPack.getInPackList(carModelCodeList, MesPcnExtConstWords.CAR_MODEL_CODE, packBean); List customerCarModelList = customerCarModelRepository.findByHqlWhere(packBean); - - Map carModelMapByCode = customerCarModelList.stream().collect(Collectors.toMap(MesCustomerCarModel::getCarModelCode, Function.identity(), (x, y) -> y)); - return carModelMapByCode; + return CollectionUtils.isEmpty(customerCarModelList) ? null : customerCarModelList.stream().collect(Collectors.toMap(MesCustomerCarModel::getCarModelCode, Function.identity(), (x, y) -> y)); } private Map getMesPartProdGroupMap(MesPrintQueue model, List printQueueList) { @@ -218,7 +230,7 @@ public class WorkOrderAssemblyPrintQueueStrategyService implements IPrintQueueSt //DdlPreparedPack.getInPackList(workCenterCodeList, MesPcnExtConstWords.WORK_CENTER_CODE, packBean); DdlPreparedPack.getInPackList(partProdGroupCodeList, MesPcnExtConstWords.PART_PROD_GROUP_CODE, packBean); List partProdGroupList = partProdGroupRepository.findByHqlWhere(packBean); - return partProdGroupList.stream().collect(Collectors.toMap(MesPartProdGroup::getPartProdGroupCode, Function.identity(), (x,y) -> y)); + return CollectionUtils.isEmpty(partProdGroupList) ? null : partProdGroupList.stream().collect(Collectors.toMap(MesPartProdGroup::getPartProdGroupCode, Function.identity(), (x, y) -> y)); } private List getMesWorkOrders(MesPrintQueue model, List printQueueList) { @@ -229,17 +241,13 @@ public class WorkOrderAssemblyPrintQueueStrategyService implements IPrintQueueSt } private List getMesPrintQueues(MesPrintQueue model) { - Pager pager = new Pager(); - pager.setStartRow(1); - pager.setCurrentPage(1); - pager.setPageSize(30); DdlPackBean packBean = DdlPackBean.getDdlPackBean(model.getOrganizeCode()); DdlPreparedPack.getInPackList(Arrays.asList(model.getWorkCenterCodeQuery().split(MesPcnExtConstWords.COMMA)), MesPcnExtConstWords.WORK_CENTER_CODE, packBean); DdlPreparedPack.getInPackList(Arrays.asList(model.getPartProdGroupCodeQuery().split(MesPcnExtConstWords.COMMA)), MesPcnExtConstWords.PART_PROD_GROUP_CODE, packBean); DdlPreparedPack.getIsNull(MesPcnExtConstWords.REMARK, packBean); DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PRINT_QUEUE_TYPE.WORK_ORDER_ASSEMBLY.getValue(), MesPcnExtConstWords.PRINT_QUEUE_TYPE, packBean); DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue(), MesPcnExtConstWords.PRINT_STATUS, packBean); - return printQueueRepository.findByHqlWherePage(packBean, pager); + return printQueueRepository.findByHqlTopWhere(packBean, MesPcnExtConstWords.FOUR); } } 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/numberrule/InternalBarcodeNumberRuleStrategyService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/numberrule/InternalBarcodeNumberRuleStrategyService.java index 03cb847..9f4e21c 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/numberrule/InternalBarcodeNumberRuleStrategyService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/numberrule/InternalBarcodeNumberRuleStrategyService.java @@ -25,10 +25,10 @@ public class InternalBarcodeNumberRuleStrategyService implements INumberRulePack @Override public GenSerialNoModel execute(GenSerialNoModel genSerialNoModel) { - if (StringUtils.isEmpty(genSerialNoModel.getShiftCode()) || StringUtils.isEmpty(genSerialNoModel.getPartNo())) { - MesPcnException.throwMesBusiException("班次代码或零件号未维护"); + if (StringUtils.isEmpty(genSerialNoModel.getShiftCode())) { + MesPcnException.throwMesBusiException("班次代码未维护"); } - genSerialNoModel.setDynamicRule(new StringJoiner(MesPcnExtConstWords.COMMA).add(genSerialNoModel.getPartNo().substring(genSerialNoModel.getPartNo().length() - 4)).add(genSerialNoModel.getShiftCode()).toString()); + genSerialNoModel.setDynamicRule(genSerialNoModel.getShiftCode()); Date date = new Date(); //年月日缩写 genSerialNoModel.setYear(getYearShort(date)); 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..d532366 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 @@ -61,15 +61,15 @@ public class InternalBarcodePrintStrategy implements IPrintTemplateStrategyServi MesPart mesPart = mesPartService.getMesPartByPartNo(mesProduceSnPrintModel.getPartNo(), organizeCode); MesCustomerPart customerPart = (!Objects.isNull(genSerialNoModel) && !CollectionUtils.isEmpty(genSerialNoModel.getDataMap()) && genSerialNoModel.getDataMap().containsKey(MesCustomerPart.class.getSimpleName())) ? (MesCustomerPart) genSerialNoModel.getDataMap().get(MesCustomerPart.class.getSimpleName()) : mesCustomerPartService.getMesCustomerPart(organizeCode,mesProduceSnPrintModel.getPartNo()); if (!isStep){ - if (StringUtils.isEmpty(genSerialNoModel.getShiftCode()) || StringUtils.isEmpty(genSerialNoModel.getPartNo())) { - MesPcnException.throwMesBusiException("班次代码或零件号未维护"); + if (StringUtils.isEmpty(genSerialNoModel.getShiftCode())) { + MesPcnException.throwMesBusiException("班次代码未维护"); } if (!Objects.isNull(customerPart)) { genSerialNoModel.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()); + 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..84df841 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,25 +66,25 @@ 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); //配置错误 抛出异常 if (!productionProcessContext.getSuccess()) { + this.sendMessage(reqBean, new StationResultBean().resultObj(MesPcnExtConstWords.STEP_DISABLE_SCAN), String.format("信息: %s!", productionProcessContext.getMessage()), MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_TITLE, MesPcnEnumUtil.STATION_DATA_TYPE.TITLE); 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); + //获取班次信息,先查询缓存,缓存没有在查询数据库 - List prodShiftDataContext = getShiftRecordStationKvBeans(reqBean); + List prodShiftDataContext = prodShiftRecordService.getShiftRecordStationKvBeans(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()); if (CollectionUtils.isEmpty(prodShiftDataContext)) { + this.sendMessage(reqBean, new StationResultBean().resultObj(MesPcnExtConstWords.STEP_DISABLE_SCAN), "信息: 请先开班!", MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_TITLE, MesPcnEnumUtil.STATION_DATA_TYPE.TITLE); this.sendMessage(reqBean, new StationResultBean().writeDbLog(), "请先开班!", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); MesPcnException.throwBusiException("请先开班!"); } @@ -108,22 +113,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 +121,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 +193,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..6c3da5e 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,23 @@ 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().resultObj(MesPcnExtConstWords.STEP_DISABLE_SCAN), String.format("信息: %s!", productionProcessContext.getMessage()), MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_TITLE, MesPcnEnumUtil.STATION_DATA_TYPE.TITLE); + 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,8 +78,9 @@ 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().resultObj(MesPcnExtConstWords.STEP_DISABLE_SCAN), "信息: 请先开班!", MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_TITLE, MesPcnEnumUtil.STATION_DATA_TYPE.TITLE); this.sendMessage(reqBean, new StationResultBean().writeDbLog(), "请先开班!", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); MesPcnException.throwBusiException("请先开班!"); } @@ -174,23 +180,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 +187,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-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckSortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckSortStepService.java index 33fd7d5..a0ff84d 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckSortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckSortStepService.java @@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil; +import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; @@ -213,13 +214,16 @@ public class MesWorkOrderCheckSortStepService extends MesWorkOrderCheckStepServi //封装产成零件 MesProductionPartContext productionPartContext = new MesProductionPartContext().copyPartNo(workOrder, equipVariableCollectContextList.get(0).getMessageSource()).isCheck(productionProcessContext.getWorkCell()); + if (StringUtils.isEmpty(productionPartContext.getOnlineTime())) productionPartContext.setOnlineTime(TimeTool.getNowTime(true)); productionPartContextList.add(productionPartContext); //封装产品条码 productionPsInContextList.add(new MesProductionPsInContext(produceSn).isCheck(productionProcessContext.getWorkCell()).messageSource(equipVariableCollectContextList.get(0).getMessageSource()).relateId(queueOrder.getId())); //封装产出条码 - productionPsOutContextList.add(new MesProductionPsOutContext().copy(produceSn)); + MesProductionPsOutContext productionPsOutContext = new MesProductionPsOutContext().copy(produceSn); + if (StringUtils.isEmpty(productionPsOutContext.getInWorkCenterTime())) productionPsOutContext.setInWorkCenterTime(productionPartContext.getOnlineTime()); + productionPsOutContextList.add(productionPsOutContext); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderSaveSortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderSaveSortStepService.java index 01a72dc..b49453c 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderSaveSortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderSaveSortStepService.java @@ -98,19 +98,24 @@ public class MesWorkOrderSaveSortStepService extends BaseStepService { if (!isEndWorkCell && productionPartContext.getWorkOrderStatus().compareTo(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()) == 0) continue; if (!isEndWorkCell) { - if (StringUtils.isEmpty(productionPartContext.getOnlineTime())) productionPartContext.setOnlineTime(TimeTool.getNowTime(true)); workOrderRepository.updateByProperties( new String[]{MesPcnExtConstWords.ID, MesPcnExtConstWords.ORGANIZE_CODE}, new Object[]{productionPartContext.getId(), reqBean.getOrganizeCode()}, - new String[]{MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.WORK_ORDER_STATUS, MesPcnExtConstWords.START_TIME, MesPcnExtConstWords.ONLINE_TIME}, - new Object[]{reqBean.getUserInfo(), (new SimpleDateFormat(MesPcnExtConstWords.DATE_FORMAT_SSS)).format(new Date()), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue(), productionPartContext.getOnlineTime(), productionPartContext.getOnlineTime()}); + new String[]{MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, + MesPcnExtConstWords.WORK_ORDER_STATUS, MesPcnExtConstWords.START_TIME, MesPcnExtConstWords.ONLINE_TIME}, + new Object[]{reqBean.getUserInfo(), (new SimpleDateFormat(MesPcnExtConstWords.DATE_FORMAT_SSS)).format(new Date()), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), + MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue(), productionPartContext.getOnlineTime(), productionPartContext.getOnlineTime()}); } else { productionPartContext.setOfflineTime(TimeTool.getNowTime(true)); workOrderRepository.updateByProperties( new String[]{MesPcnExtConstWords.ID, MesPcnExtConstWords.ORGANIZE_CODE}, new Object[]{productionPartContext.getId(), reqBean.getOrganizeCode()}, - new String[]{MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.WORK_ORDER_STATUS, MesPcnExtConstWords.COMPLETE_QTY, MesPcnExtConstWords.UN_COMPLETE_QTY, MesPcnExtConstWords.END_TIME, MesPcnExtConstWords.OFFLINE_TIME}, - new Object[]{reqBean.getUserInfo(), (new SimpleDateFormat(MesPcnExtConstWords.DATE_FORMAT_SSS)).format(new Date()), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue(), new Double(1), new Double(0), productionPartContext.getOfflineTime(), productionPartContext.getOfflineTime()}); + new String[]{MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, + MesPcnExtConstWords.WORK_ORDER_STATUS, MesPcnExtConstWords.COMPLETE_QTY, MesPcnExtConstWords.UN_COMPLETE_QTY, + MesPcnExtConstWords.START_TIME, MesPcnExtConstWords.ONLINE_TIME, MesPcnExtConstWords.END_TIME, MesPcnExtConstWords.OFFLINE_TIME}, + new Object[]{reqBean.getUserInfo(), (new SimpleDateFormat(MesPcnExtConstWords.DATE_FORMAT_SSS)).format(new Date()), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), + MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue(), new Double(1), new Double(0), + productionPartContext.getOnlineTime(), productionPartContext.getOnlineTime(), productionPartContext.getOfflineTime(), productionPartContext.getOfflineTime()}); } log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- ORDER:{} --- UPDATE:[{}:{}]", 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";