From 816ca4bec699ecc9d05067dc9ab09a21141028ce Mon Sep 17 00:00:00 2001 From: jun Date: Mon, 15 Jul 2024 19:39:16 +0800 Subject: [PATCH] =?UTF-8?q?=E9=97=AE=E9=A2=98=E6=B8=85=E5=8D=95=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/base/IMesEquipmentSpotCheckService.java | 7 +- .../mes/api/busi/IMesSpotCheckOrderService.java | 8 +- .../MesSendOutTimeReworkOrderEmailJob.java | 2 +- .../schedulejob/MesSpotCheckOrderGenerateJob.java | 71 +++++++++ .../base/MesEquipmentSpotCheckService.java | 6 + .../base/MesProdRuleNosortCfgService.java | 4 +- .../serviceimpl/base/MesWorkOrderService.java | 29 ++-- .../serviceimpl/busi/MesSpotCheckOrderService.java | 172 ++++++++++++++++++++- .../mes/apiservice/utils/MesTraceabilityTemp.java | 11 +- 9 files changed, 280 insertions(+), 30 deletions(-) create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesSpotCheckOrderGenerateJob.java diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesEquipmentSpotCheckService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesEquipmentSpotCheckService.java index 4f9d1c1..056f4a8 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesEquipmentSpotCheckService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesEquipmentSpotCheckService.java @@ -1,7 +1,9 @@ package cn.estsh.i3plus.ext.mes.api.base; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentSpotCheck; -import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentSpotCheckDetail; +import io.swagger.annotations.ApiModelProperty; + +import java.util.List; /** * @Description : 设备加工参数维护 @@ -12,5 +14,8 @@ import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentSpotCheckDetail; **/ public interface IMesEquipmentSpotCheckService extends IBaseMesService{ + @ApiModelProperty("查询设备点检配置") + List findMesEquipmentSpotCheck(MesEquipmentSpotCheck mesEquipmentSpotCheck); + } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesSpotCheckOrderService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesSpotCheckOrderService.java index 3675773..4228cc6 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesSpotCheckOrderService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesSpotCheckOrderService.java @@ -1,8 +1,11 @@ package cn.estsh.i3plus.ext.mes.api.busi; import cn.estsh.i3plus.ext.mes.api.base.IBaseMesService; +import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentSpotCheck; import cn.estsh.i3plus.pojo.mes.bean.MesSpotCheckOrder; -import cn.estsh.i3plus.pojo.mes.bean.MesSpotCheckOrderPart; +import io.swagger.annotations.ApiOperation; + +import java.util.List; /** * @Description : IMaximoService @@ -12,5 +15,8 @@ import cn.estsh.i3plus.pojo.mes.bean.MesSpotCheckOrderPart; **/ public interface IMesSpotCheckOrderService extends IBaseMesService { + @ApiOperation("生成点检单") + void insertMesSpotCheckOrder(List mesEquipmentSpotCheckList, String userName); + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesSendOutTimeReworkOrderEmailJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesSendOutTimeReworkOrderEmailJob.java index 413ff1e..44aba01 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesSendOutTimeReworkOrderEmailJob.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesSendOutTimeReworkOrderEmailJob.java @@ -62,6 +62,7 @@ public class MesSendOutTimeReworkOrderEmailJob extends BaseMesScheduleJob { } for (String organizeCode : jobParam.split(",")) { try { + long startTime = System.currentTimeMillis(); //超时时间 int minutes = Integer.parseInt(mesConfigService.getCfgValue(organizeCode, MesCommonConstant.OUT_TIME_REWORK_ORDER_MINUTES)); //查询超时返工单 @@ -70,7 +71,6 @@ public class MesSendOutTimeReworkOrderEmailJob extends BaseMesScheduleJob { continue; } messagePushService.pushEmail(getContent(minutes, mesReworkTaskList), "返工单超时提醒", "系统管理员", Arrays.asList(mesConfigService.getCfgValue(organizeCode, MesCommonConstant.OUT_TIME_REWORK_ORDER_SEND_URL).split(","))); - long startTime = System.currentTimeMillis(); long endTime = System.currentTimeMillis(); log.info("工厂{}返工单超过时不处理发邮件通知JOB --- END --- 耗时: {} ms", organizeCode, endTime - startTime); } catch (Exception e) { diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesSpotCheckOrderGenerateJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesSpotCheckOrderGenerateJob.java new file mode 100644 index 0000000..2915876 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesSpotCheckOrderGenerateJob.java @@ -0,0 +1,71 @@ +package cn.estsh.i3plus.ext.mes.apiservice.schedulejob; + + +import cn.estsh.i3plus.ext.mes.api.base.IMesEquipmentSpotCheckService; +import cn.estsh.i3plus.ext.mes.api.busi.IMesSpotCheckOrderService; +import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob; +import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentSpotCheck; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import cn.estsh.impp.framework.boot.init.ApplicationProperties; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.quartz.DisallowConcurrentExecution; +import org.quartz.JobExecutionContext; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; + +/** + * @Description : 定时生成点检单 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/7/15 17:08 + * @Modify: + **/ +@Slf4j +@DisallowConcurrentExecution +@Component +@ApiOperation("定时生成点检单") +public class MesSpotCheckOrderGenerateJob extends BaseMesScheduleJob { + + @Autowired + private IMesEquipmentSpotCheckService mesEquipmentSpotCheckService; + + @Autowired + private IMesSpotCheckOrderService mesSpotCheckOrderService; + + public MesSpotCheckOrderGenerateJob() { + super(MesSpotCheckOrderGenerateJob.class, "定时生成点检单"); + } + + @Override + public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) { + String jobParam = this.getJobParam(); + + if (StringUtils.isBlank(jobParam)) { + throw new IllegalArgumentException("job参数为空,请检查参数"); + } + for (String organizeCode : jobParam.split(",")) { + try { + long startTime = System.currentTimeMillis(); + MesEquipmentSpotCheck mesEquipmentSpotCheck = new MesEquipmentSpotCheck(); + mesEquipmentSpotCheck.setOrganizeCode(organizeCode); + mesEquipmentSpotCheck.setTriggerMode(MesExtEnumUtil.EQUIPMENT_CHECK_INSPECTION_TRIGGER_METHOD.TIME_TRIGGERED.getValue()); + List spotCheckList = mesEquipmentSpotCheckService.findMesEquipmentSpotCheck(mesEquipmentSpotCheck); + if (CollectionUtils.isEmpty(spotCheckList)) { + log.info("不存在触发方式为【时间触发】的设备点检配置"); + continue; + } + mesSpotCheckOrderService.insertMesSpotCheckOrder(spotCheckList, "JOB"); + long endTime = System.currentTimeMillis(); + log.info("工厂{}定时生成点检单 --- END --- 耗时: {} ms", organizeCode, endTime - startTime); + } catch (Exception e) { + log.info("工厂{}定时生成点检单 执行失败{}", organizeCode, e); + } + } + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentSpotCheckService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentSpotCheckService.java index 6530b63..aeba880 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentSpotCheckService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentSpotCheckService.java @@ -80,4 +80,10 @@ public class MesEquipmentSpotCheckService extends BaseMesService findMesEquipmentSpotCheck(MesEquipmentSpotCheck mesEquipmentSpotCheck) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesEquipmentSpotCheck.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(mesEquipmentSpotCheck.getTriggerMode(), "triggerMode", packBean); + return baseRDao.findByHqlWhere(packBean); + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProdRuleNosortCfgService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProdRuleNosortCfgService.java index 62c2db7..f5f4e1f 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProdRuleNosortCfgService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProdRuleNosortCfgService.java @@ -60,7 +60,7 @@ public class MesProdRuleNosortCfgService extends BaseMesService implements if (Objects.isNull(mesWorkOrderDb)) { MesException.throwMesBusiException("工单id为【%s】工单信息不存在", mesWorkOrder.getId()); } - //试制单不允许报工 - if(!Objects.isNull(mesWorkOrderDb.getOrderFlag()) && MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(mesWorkOrderDb.getOrderFlag())){ - MesException.throwMesBusiException("工单【%s】为试制单,不允许报工", mesWorkOrder.getWorkOrderNo()); - } //查询物料信息 MesPart mesPart = iMesPartService.getPartByPartNo(mesWorkOrderDb.getPartNo(), mesWorkOrderDb.getOrganizeCode()); //查询产线信息 @@ -891,15 +887,16 @@ public class MesWorkOrderService extends BaseMesService implements } //更新工单 updateMesWorkOrder(mesWorkOrderDb); - - //生成条码 todo 有条码 不生成 - String sn = getStringList(mesWorkOrder); - //保存数据 - List mesProductOffLineList = new ArrayList<>(); - for (MesBom mesBom : mesBoms) { - mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, false)); + //试制单不报工 + if(Objects.isNull(mesWorkOrderDb.getOrderFlag()) || !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(mesWorkOrderDb.getOrderFlag())){ + String sn = getStringList(mesWorkOrder); + //保存数据 + List mesProductOffLineList = new ArrayList<>(); + for (MesBom mesBom : mesBoms) { + mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, false)); + } + mesProductOffLineService.insertBatch(mesProductOffLineList); } - mesProductOffLineService.insertBatch(mesProductOffLineList); } @Override @@ -908,10 +905,6 @@ public class MesWorkOrderService extends BaseMesService implements if (Objects.isNull(mesWorkOrder)) { MesException.throwMesBusiException("工单id为【%s】工单信息不存在", mesWorkOrderNew.getId()); } - //试制单不允许报工 - if(!Objects.isNull(mesWorkOrder.getOrderFlag()) && MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(mesWorkOrder.getOrderFlag())){ - MesException.throwMesBusiException("工单【%s】为试制单,不允许报工", mesWorkOrder.getWorkOrderNo()); - } //查询物料信息 MesPart mesPart = iMesPartService.getPartByPartNo(mesWorkOrder.getPartNo(), mesWorkOrder.getOrganizeCode()); if (mesWorkOrderNew.getNum() <= 0) { @@ -1020,8 +1013,8 @@ public class MesWorkOrderService extends BaseMesService implements //更新工单 updateMesWorkOrder(mesWorkOrder); - //保存报工记录 - if (CollectionUtils.isNotEmpty(mesProductOffLineList)) { + //保存报工记录 试制单不报工 + if (CollectionUtils.isNotEmpty(mesProductOffLineList) && (Objects.isNull(mesWorkOrder.getOrderFlag()) || !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(mesWorkOrder.getOrderFlag()))) { mesProductOffLineService.insertBatch(mesProductOffLineList); } //保存移库记录 diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java index c7bf125..bae8137 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java @@ -8,6 +8,7 @@ import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.BaseMesService; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.icloud.core.sdk.ICoreUtilCloud; import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService; +import cn.estsh.i3plus.mes.apiservice.util.DateUtil; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; import cn.estsh.i3plus.platform.common.tool.TimeTool; @@ -22,6 +23,7 @@ import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentSpotCheckDetailRepository import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentSpotCheckPartRepository; import cn.estsh.i3plus.pojo.mes.repository.MesSpotCheckOrderPartRepository; import cn.estsh.i3plus.pojo.mes.repository.MesSpotCheckOrderResultRepository; +import cn.estsh.i3plus.pojo.mes.util.DateUtilExt; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; @@ -33,9 +35,8 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; @Service @Slf4j @@ -386,4 +387,169 @@ public class MesSpotCheckOrderService extends BaseMesService DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean); } + @Override + public void insertMesSpotCheckOrder(List mesEquipmentSpotCheckList,String userName) { + MesEquipmentSpotCheck next = mesEquipmentSpotCheckList.iterator().next(); + List spotCheckIdList = mesEquipmentSpotCheckList.stream().map(MesEquipmentSpotCheck::getId).collect(Collectors.toList()); + //查询未处理的单据 + Map spotCheckOrderMap = getMesSpotCheckOrderMap(next.getOrganizeCode(), spotCheckIdList); + //查询明细数据 + DdlPackBean packBean = DdlPackBean.getDdlPackBean(next.getOrganizeCode()); + DdlPreparedPack.getInPackList(spotCheckIdList,"pid", packBean); + List detailList = equipmentSpotCheckDetailRepository.findByHqlWhere(packBean); + Map> detailMap = null; + if (!CollectionUtils.isEmpty(detailList)) { + detailMap = detailList.stream().collect(Collectors.groupingBy(MesEquipmentSpotCheckDetail::getPid)); + } + //查询点检零件 + List equipmentSpotCheckPartList = equipmentSpotCheckPartRepository.findByHqlWhere(packBean); + Map> checkPartListMap = null; + if (!CollectionUtils.isEmpty(equipmentSpotCheckPartList)) { + checkPartListMap = equipmentSpotCheckPartList.stream().collect(Collectors.groupingBy(MesEquipmentSpotCheckPart::getPid)); + } + //属性校验 + List mesEquipmentSpotChecks = getCheckList(mesEquipmentSpotCheckList, spotCheckOrderMap, detailMap, checkPartListMap); + //保存单据 + if(mesEquipmentSpotChecks.size() > 0){ + saveOrder(userName, next, detailMap, checkPartListMap, mesEquipmentSpotChecks); + } + } + + private void saveOrder(String userName, MesEquipmentSpotCheck next, Map> detailMap, Map> checkPartListMap, List mesEquipmentSpotChecks) { + //生成单号 + GenSerialNoModel genSerialNoModel = new GenSerialNoModel(MesCommonConstant.SPOT_CHECK_ORDER_NO_RULE); + List resultList = syncFuncService.syncSerialNo(genSerialNoModel, userName, next.getOrganizeCode(), mesEquipmentSpotChecks.size()).getResultList(); + String orderNo; + int count = 0 ; + //单据生成 + for (MesEquipmentSpotCheck spotCheck : mesEquipmentSpotChecks) { + orderNo = resultList.get(count); + MesSpotCheckOrder mesSpotCheckOrder = new MesSpotCheckOrder(); + BeanUtils.copyProperties(spotCheck, mesSpotCheckOrder, "id"); + mesSpotCheckOrder.setTaskResource(MesCommonConstant.SPOT_CHECK_ORDER_TASK_RESOURCE); + mesSpotCheckOrder.setStatus(MesExtEnumUtil.SPOT_CHECK_ORDER_STATUS.CREATE.getValue()); + mesSpotCheckOrder.setSpotCheckId(spotCheck.getId()); + mesSpotCheckOrder.setSpotCheckOrderNo(orderNo); + ConvertBean.serviceModelInitialize(mesSpotCheckOrder, userName); + mesSpotCheckOrder = baseRDao.insert(mesSpotCheckOrder); + //保存单据明细 + saveMesSpotCheckOrderDetails(userName, detailMap, spotCheck.getId(), mesSpotCheckOrder); + //保存单据零件 + saveMesEquipmentSpotCheckPartList(userName, checkPartListMap, spotCheck.getId(), mesSpotCheckOrder.getId()); + ConvertBean.serviceModelUpdate(spotCheck, userName); + baseRDao.update(spotCheck); + count++; + } + } + + private List getCheckList(List mesEquipmentSpotCheckList, Map spotCheckOrderMap, Map> detailMap, Map> checkPartListMap) { + List mesEquipmentSpotChecks = new ArrayList<>(); + for (MesEquipmentSpotCheck spotCheck : mesEquipmentSpotCheckList) { + log.info("开始处理点检项目代码:{}",spotCheck.getSpotCheckCode()); + //校验是否存在未处理的单据 + if(!Objects.isNull(spotCheckOrderMap) && spotCheckOrderMap.containsKey(spotCheck.getId())){ + log.info("存在相同配置状态为{}的点检单 id:{},请检查数据",MesExtEnumUtil.SPOT_CHECK_ORDER_STATUS.CREATE.getDescription(), spotCheck.getId()); + continue; + } + //时间触发方式 + if (checkTime(spotCheck)) continue; + //明细是否存在 + if (Objects.isNull(detailMap) || !detailMap.containsKey(spotCheck.getId())) { + log.info("【{}】点检方案明细不存在,请检查数据",spotCheck.getId()); + continue; + } + //检测零件 + if(spotCheck.getSpotCheckOrderType() == MesExtEnumUtil.SPOT_CHECK_ORDER_TYPE.FIRST_PRODUCT_INSPECTION.getValue() && (Objects.isNull(checkPartListMap) || !checkPartListMap.containsKey(spotCheck.getId()))){ + log.info("【{}】点检方案类型为【{}】配置零件号为空,请检查数据", spotCheck.getId(), MesExtEnumUtil.SPOT_CHECK_ORDER_TYPE.FIRST_PRODUCT_INSPECTION.getDescription()); + continue; + } + mesEquipmentSpotChecks.add(spotCheck); + } + return mesEquipmentSpotChecks; + } + + private boolean checkTime(MesEquipmentSpotCheck spotCheck) { + if(null == MesExtEnumUtil.EQUIPMENT_CHECK_INSPECTION_TRIGGER_CONFIG.valueOfDescription(spotCheck.getTimeTriggerMode())){ + log.info("时间触发方式{}不存在,请检查数据", spotCheck.getTimeTriggerMode()); + return true; + } + //触发窗口时间 + if(MesExtEnumUtil.EQUIPMENT_CHECK_INSPECTION_TRIGGER_CONFIG.OPTION1.getValue() == spotCheck.getTimeTriggerMode()){ + try { + if(!DateUtilExt.between(DateUtil.SHORT_FORMAT_HOUR_MINUTE,TimeTool.getTimeShortWithColon(),TimeTool.pareDateToString(DateUtil.SHORT_FORMAT_HOUR_MINUTE,DateUtil.addMinutes(new Date(),30)),spotCheck.getTriggerWindowTime())){ + log.info("{},触发窗口时间{}不产生单据,请检查数据", spotCheck.getSpotCheckCode(), spotCheck.getTriggerWindowTime()); + return true; + } + } catch (Exception e) { + log.info("{},触发窗口时间格式异常", spotCheck.getSpotCheckCode()); + return true; + } + }else{ + //查询执行成功的单据信息 + MesSpotCheckOrder finishedOrder = getMesSpotCheckOrder(spotCheck); + if(!Objects.isNull(finishedOrder)){ + spotCheck.setLastSpotCheckTime(finishedOrder.getModifyDatetime()); + if(Integer.parseInt(DateUtil.minutesBetweenTwoTime(new Date(),TimeTool.stringParseToDate(finishedOrder.getModifyDatetime()))+"") < spotCheck.getTriggerWindowInterval()){ + log.info("最后点检完成时间:{},距现在不足{}分钟,不创建单据",finishedOrder.getModifyDatetime(), spotCheck.getTriggerWindowInterval()); + return true; + } + } + } + return false; + } + + private MesSpotCheckOrder getMesSpotCheckOrder(MesEquipmentSpotCheck spotCheck) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(spotCheck.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(spotCheck.getId(),"spotCheckId", packBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.SPOT_CHECK_ORDER_STATUS.COMPLETE.getValue(), "status", packBean); + DdlPreparedPack.getOrderBy("modifyDatetime",CommonEnumUtil.ASC_OR_DESC.DESC.getValue(),packBean); + return baseRDao.getByProperty(packBean); + } + + private void saveMesEquipmentSpotCheckPartList(String userName,Map> checkPartListMap, Long spotCheckId, Long spotCheckOrderId) { + if (!Objects.isNull(checkPartListMap) && checkPartListMap.containsKey(spotCheckId)) { + List spotCheckOrderPartList = new ArrayList<>(); + checkPartListMap.get(spotCheckId).forEach(k -> { + MesSpotCheckOrderPart spotCheckOrderPart = new MesSpotCheckOrderPart(); + spotCheckOrderPart.setSpotCheckOrderId(spotCheckOrderId); + BeanUtils.copyProperties(k, spotCheckOrderPart, "id"); + ConvertBean.serviceModelInitialize(spotCheckOrderPart, userName); + spotCheckOrderPartList.add(spotCheckOrderPart); + }); + spotCheckOrderPartRepository.saveAll(spotCheckOrderPartList); + } + } + + private void saveMesSpotCheckOrderDetails(String userName, Map> detailMap, Long spotCheckId, MesSpotCheckOrder mesSpotCheckOrder) { + List spotCheckOrderResults = new ArrayList<>(); + detailMap.get(spotCheckId).forEach(k -> { + MesSpotCheckOrderResult result = new MesSpotCheckOrderResult(); + BeanUtils.copyProperties(k, result, "id"); + result.setSpotCheckOrderNo(mesSpotCheckOrder.getSpotCheckOrderNo()); + result.setPid(mesSpotCheckOrder.getId()); + result.setWorkCenterCode(mesSpotCheckOrder.getWorkCenterCode()); + result.setWorkCellCode(mesSpotCheckOrder.getWorkCellCode()); + result.setSpotCheckItemId(k.getId()); + result.setTaskItemName(k.getSpotCheckItemName()); + result.setSpotCheckStandardValue(k.getStandardValue()); + ConvertBean.serviceModelInitialize(result, userName); + spotCheckOrderResults.add(result); + }); + spotCheckOrderResultRepository.saveAll(spotCheckOrderResults); + } + + private Map getMesSpotCheckOrderMap(String organizeCode, List spotCheckIdList) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(spotCheckIdList,"spotCheckId", packBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.SPOT_CHECK_ORDER_STATUS.CREATE.getValue(), "status", packBean); + List mesSpotCheckOrderList = baseRDao.findByHqlWhere(packBean); + Map spotCheckOrderMap = null; + if (!CollectionUtils.isEmpty(mesSpotCheckOrderList)) { + spotCheckOrderMap = new HashMap<>(); + for (MesSpotCheckOrder mesSpotCheckOrder : mesSpotCheckOrderList) { + spotCheckOrderMap.put(mesSpotCheckOrder.getSpotCheckId(),mesSpotCheckOrder); + } + } + return spotCheckOrderMap; + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/utils/MesTraceabilityTemp.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/utils/MesTraceabilityTemp.java index 319be2f..b25de34 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/utils/MesTraceabilityTemp.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/utils/MesTraceabilityTemp.java @@ -21,6 +21,7 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.nio.file.Files; +import java.util.Objects; import static cn.estsh.i3plus.ext.mes.apiservice.dbinterface.WmsSAPDbQuery.lz; @@ -221,7 +222,7 @@ public class MesTraceabilityTemp { tableTop2Cell10.setColspan(5); tableTop2.addCell(tableTop2Cell10); - PdfPCell tableTop2Cell11 = new PdfPCell(new Paragraph(MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(mesTraceabilityReportModel.getSnStatus()), topValueFont)); + PdfPCell tableTop2Cell11 = new PdfPCell(new Paragraph(Objects.isNull(mesTraceabilityReportModel.getSnStatus())?"":MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(mesTraceabilityReportModel.getSnStatus()), topValueFont)); tableTop2Cell11.setHorizontalAlignment(Element.ALIGN_LEFT); tableTop2Cell11.setVerticalAlignment(Element.ALIGN_MIDDLE); tableTop2Cell11.setBorder(Rectangle.NO_BORDER); @@ -391,7 +392,7 @@ public class MesTraceabilityTemp { tableTop2Cell50.setColspan(5); tableTop2.addCell(tableTop2Cell50); - PdfPCell tableTop2Cell51 = new PdfPCell(new Paragraph(MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(mesTraceabilityReportModel.getProdStatus()), topValueFont)); + PdfPCell tableTop2Cell51 = new PdfPCell(new Paragraph(Objects.isNull(mesTraceabilityReportModel.getProdStatus())?"":MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(mesTraceabilityReportModel.getProdStatus()), topValueFont)); tableTop2Cell51.setHorizontalAlignment(Element.ALIGN_LEFT); tableTop2Cell51.setVerticalAlignment(Element.ALIGN_MIDDLE); tableTop2Cell51.setBorder(Rectangle.NO_BORDER); @@ -645,8 +646,10 @@ public class MesTraceabilityTemp { MesException.throwMesBusiException("生成PDF文件失败"); } finally { //删除文件 - Files.deleteIfExists(destFile.toPath()); - Files.deleteIfExists(file.toPath()); + if(!Objects.isNull(destFile)){ + Files.deleteIfExists(destFile.toPath()); + } + file.deleteOnExit(); } return url; }