diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesReworkTaskService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesReworkTaskService.java index 8e72c9a..15e2a47 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesReworkTaskService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesReworkTaskService.java @@ -1,6 +1,7 @@ package cn.estsh.i3plus.ext.mes.pcn.api.base; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesReworkTaskModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesReworkTaskRequestModel; import cn.estsh.i3plus.pojo.base.bean.ListPager; @@ -39,4 +40,6 @@ public interface IMesReworkTaskService { void reworkSuccess(MesReworkTaskRequestModel requestModel); + MesProduceSnPrintModel doPrint(MesReworkTaskRequestModel requestModel); + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesReworkTaskController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesReworkTaskController.java index 28a282d..a3fe3c0 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesReworkTaskController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesReworkTaskController.java @@ -131,4 +131,20 @@ public class MesReworkTaskController { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } + + @GetMapping("/doPrint") + @ApiOperation(value = "打印") + public ResultBean doPrint(MesReworkTaskRequestModel requestModel) { + // 数据校验 + ValidatorBean.checkNotNull(requestModel.getSn(), "条码不能为空"); + ValidatorBean.checkNotNull(requestModel.getOrganizeCode(), "工厂代码不能为空"); + ValidatorBean.checkNotNull(requestModel.getUserName(), "操作人不能为空"); + try { + return ResultBean.success("打印成功").setResultObject(mesReworkTaskService.doPrint(requestModel)); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesReworkTaskServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesReworkTaskServiceImpl.java index 4548a16..93ebcfd 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesReworkTaskServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesReworkTaskServiceImpl.java @@ -1,28 +1,33 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base; +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPartService; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesReworkTaskService; +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesTemplateService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService; import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesReworkTaskModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesReworkTaskRequestModel; +import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService; 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.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.common.PagerHelper; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; -import cn.estsh.i3plus.pojo.mes.bean.MesPart; -import cn.estsh.i3plus.pojo.mes.bean.MesPartTypePicture; -import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; -import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssembly; +import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspection; import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspectionDetail; import cn.estsh.i3plus.pojo.mes.bean.rework.MesReworkTask; import cn.estsh.i3plus.pojo.mes.bean.rework.MesReworkTaskDetail; +import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; import cn.estsh.i3plus.pojo.mes.repository.*; 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.util.SpringContextsUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.map.HashedMap; import org.slf4j.Logger; @@ -34,7 +39,6 @@ import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import java.util.*; -import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.Stream; @@ -76,6 +80,21 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService { @Autowired private MesProduceSnRepository mesProduceSnRepository; + @Autowired + private IMesTemplateService mesTemplateService; + + @Autowired + private ISyncFuncService syncFuncService; + + @Autowired + private IMesPartService mesPartService; + + @Autowired + private MesMoveRepository moveRepository; + + @Autowired + private MesProductionRecordRepository mesProductionRecordRepository; + @Override public ListPager queryReworkTask(MesReworkTask mesReworkTask, Pager pager) { String organizeCode = !StringUtils.isEmpty(mesReworkTask.getOrganizeCode())?mesReworkTask.getOrganizeCode():AuthUtil.getOrganizeCode(); @@ -206,6 +225,69 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService { } @Override + public MesProduceSnPrintModel doPrint(MesReworkTaskRequestModel requestModel) { + String organizeCode = requestModel.getOrganizeCode(); + String userName = requestModel.getUserName(); + + MesReworkTask mesReworkTask = getMesReworkTask(requestModel); + List reworkTaskDetails = getMesReworkTaskDetail(mesReworkTask); + if (!CollectionUtils.isEmpty(reworkTaskDetails)) { + MesPcnException.throwFlowException("还有位置未返工完成,请检查"); + } + MesProduceSn sn = checkProduceSn(requestModel.getSn(), organizeCode); + //查询物料信息 + MesPart mesPart = mesPartService.getMesPartByPartNo(sn.getPartNo(), organizeCode); + String prodLabelTemplate = sn.getProdLabelTemplate(); + if (prodLabelTemplate == null) { + MesPcnException.throwMesBusiException("零件号[%s]的模板代码[%s]的模板信息丢失,请配置!", sn.getPartNo(), prodLabelTemplate); + } + MesProduceSnPrintModel mesProduceSnPrintModel = new MesProduceSnPrintModel(); + // 查模板代码 + MesLabelTemplate labelTemplate = mesTemplateService.getMesLabelTemplate(prodLabelTemplate,organizeCode); + //根据反射获取策略类--封装打印数据 + String methodCode = labelTemplate.getMethodCode(); + //模板信息丢失抛出异常 + if (methodCode == null) { + MesPcnException.throwMesBusiException("零件号[%s]的模板代码[%s]的反射类丢失,请配置!", sn.getPartNo(), prodLabelTemplate); + } + mesProduceSnPrintModel.setMesLabelTemplate(labelTemplate); + mesProduceSnPrintModel.setProductSn(sn.getProductSn()); + mesProduceSnPrintModel.setPartNo(sn.getPartNo()); + mesProduceSnPrintModel.setOrganizeCode(organizeCode); + List snList = new ArrayList<>(); + sn.setDescription(String.format("源条码:%s",sn.getProductSn())); + sn.setProductSn(doGererateSerialNo(mesPart, organizeCode, requestModel.getUserName())); + snList.add(sn); + mesProduceSnPrintModel.getMesProduceSnList().addAll(snList); + //发送新老条码关系给WMS + createMove(requestModel.getSn(),sn.getProductSn(),organizeCode,requestModel.getUserName()); + //更新条码 + ConvertBean.serviceModelUpdate(sn,requestModel.getUserName()); + mesProduceSnRepository.update(sn); + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(requestModel.getSn(),"productSn",packBean); + DdlPreparedPack.getStringEqualPack(sn.getPartNo(),"partNo",packBean); + //更新加工记录 + mesProductionRecordRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime","productSn","description"}, + new Object[]{userName, TimeTool.getNowTime(true),sn.getProductSn(),sn.getDescription()},packBean); + //更新装配记录 + mesProductionAssemblyRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime","productSn","description"}, + new Object[]{userName, TimeTool.getNowTime(true),sn.getProductSn(),sn.getDescription()},packBean); + //更新返工记录 + mesReworkTaskRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime","sn","description"}, + new Object[]{userName, TimeTool.getNowTime(true),sn.getProductSn(),sn.getDescription()},packBean); + IPrintTemplateStrategyService strategyService = (IPrintTemplateStrategyService) SpringContextsUtil.getBean(methodCode); + return strategyService.execute(null, mesProduceSnPrintModel, null, null, null, true); + } + + private String doGererateSerialNo(MesPart part,String organizeCode,String userName) { + if(StringUtils.isEmpty(part.getProductMatchRule())) MesPcnException.throwMesBusiException("请检查零件信息,零件[%s]信息未维护零件条码编码规则!", part.getPartNo()); + return syncFuncService.syncSerialNo( + new GenSerialNoModel(part.getProductMatchRule()).partNo(part.getPartNo()).putDataMap(MesPart.class.getSimpleName(), part).organizeCode(organizeCode), + userName, organizeCode, 1).getResultList().get(0).toString(); + } + + @Override public boolean validateSn(MesReworkTaskRequestModel requestModel) { // List snList = Arrays.asList(requestModel.getSn().split(",")); @@ -448,4 +530,17 @@ public class MesReworkTaskServiceImpl implements IMesReworkTaskService { return produceSn; } + + private MesMove createMove(String sn, String oldSn, String organizeCode, String userName) { + MesMove move = new MesMove(); + move.setOrganizeCode(organizeCode); + move.setFactoryCode(organizeCode); + move.setPostDate(TimeTool.getToday()); + move.setPostTime(TimeTool.getTimeShortWithColon()); + move.setMoveType(MesExtEnumUtil.MOVE_TYPE.REWORK_REPLACE.getValue()); + move.setProductSn(sn); + move.setProductSnOld(oldSn); + ConvertBean.serviceModelInitialize(move, userName); + return moveRepository.insert(move); + } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSortShippingCheckService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSortShippingCheckService.java index 4dff6d5..9e677f8 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSortShippingCheckService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSortShippingCheckService.java @@ -132,8 +132,8 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService //updateLoadingListClose(statusForCheckList,orderManagement,shippingOrderManagement.getModifyUser()); DdlPackBean packBean = DdlPackBean.getDdlPackBean(orderManagement.getOrganizeCode()); DdlPreparedPack.getNumEqualPack(orderManagement.getId(), "id",packBean); - shippingOrderManagementRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime","remark"}, - new Object[]{shippingOrderManagement.getModifyUser(), TimeTool.getNowTime(true),MesPcnExtConstWords.STRONGER_PASS}, packBean); + shippingOrderManagementRepository.updateByProperties(new String[]{"forceFlag","modifyUser", "modifyDatetime","remark"}, + new Object[]{MesPcnExtConstWords.STRONGER_PASS,shippingOrderManagement.getModifyUser(), TimeTool.getNowTime(true),MesPcnExtConstWords.STRONGER_PASS}, packBean); }else{ throw new ImppBusiException(String.format("【%s】发运单对应排序【%s】前存在未扫描发运的发运单,请检查数据!", orderManagement.getShippingCode(), orderManagement.getSeq())); 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 5484251..3ec0bf9 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 @@ -7,7 +7,6 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionRecordService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderExtService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderService; import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; -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.api.iservice.busi.ISyncFuncService; import cn.estsh.i3plus.platform.common.convert.ConvertBean; @@ -154,8 +153,10 @@ public class MesWorkOrderService implements IMesWorkOrderService { DdlPreparedPack.getStringLikerPack(workOrder.getWorkCellCode(), "workCellCode", packBean); DdlPreparedPack.getStringLikerPack(workOrder.getWorkOrderNo(), "workOrderNo", packBean); - if (!StringUtils.isEmpty(workOrder.getWorkOrderStatus())) DdlPreparedPack.getNumEqualPack(workOrder.getWorkOrderStatus(), "workOrderStatus", packBean); - else DdlPreparedPack.getInPackList(Stream.of(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(), MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()).collect(Collectors.toList()), "workOrderStatus", packBean); + if (!StringUtils.isEmpty(workOrder.getWorkOrderStatus())) + DdlPreparedPack.getNumEqualPack(workOrder.getWorkOrderStatus(), "workOrderStatus", packBean); + else + DdlPreparedPack.getInPackList(Stream.of(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(), MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()).collect(Collectors.toList()), "workOrderStatus", packBean); DdlPreparedPack.getStringBiggerPack(workOrder.getStartTimeStart(), "planStartTime", packBean); DdlPreparedPack.getStringSmallerPack(workOrder.getStartTimeEnd(), "planStartTime", packBean); @@ -170,31 +171,31 @@ public class MesWorkOrderService implements IMesWorkOrderService { public void doProductReport(List mesProduceSnList, String organizeCode, String userName) { //新增初始化 todo Map> mesWorkOrderMap = mesProduceSnList.stream().collect(Collectors.groupingBy(MesProduceSn::getPartNo)); - Map mesPartMap = new HashMap<>(); + Map mesPartMap = new HashMap<>(); MesPart mesPart; //查询工单状态 - Integer[] orderStatus =new Integer[]{MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(),MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()}; + Integer[] orderStatus = new Integer[]{MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(), MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()}; for (Map.Entry> mesProduceSn : mesWorkOrderMap.entrySet()) { List mesWorkOrderList = mesProduceSn.getValue(); //获取物料信息 - if(mesPartMap.containsKey(mesProduceSn.getKey())){ + if (mesPartMap.containsKey(mesProduceSn.getKey())) { mesPart = mesPartMap.get(mesProduceSn.getKey()); - }else{ + } else { //查询物料信息 DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getStringEqualPack(mesProduceSn.getKey(), "partNo", ddlPackBean); mesPart = mesPartRDao.getByProperty(ddlPackBean); - if(Objects.isNull(mesPart)){ + if (Objects.isNull(mesPart)) { throw new ImppBusiException(String.format("物料【%s】信息不存在", mesProduceSn.getKey())); } - mesPartMap.put(mesProduceSn.getKey(),mesPart); + mesPartMap.put(mesProduceSn.getKey(), mesPart); } //根据物料获取已发布的工单 DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getStringEqualPack(mesPart.getPartNo(), "partNo", ddlPackBean); DdlPreparedPack.getInPackArray(orderStatus, "workOrderStatus", ddlPackBean); MesWorkOrder oldMesWorkOrder = workOrderRepository.getByProperty(ddlPackBean); - if(Objects.isNull(oldMesWorkOrder)){ + if (Objects.isNull(oldMesWorkOrder)) { throw new ImppBusiException(String.format("物料【%s】状态未已发布的工单信息不存在", mesPart.getPartNo())); } //查询工作中心 @@ -238,13 +239,14 @@ public class MesWorkOrderService implements IMesWorkOrderService { } else { oldMesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()); } - ConvertBean.serviceModelUpdate(oldMesWorkOrder,userName); + ConvertBean.serviceModelUpdate(oldMesWorkOrder, userName); oldMesWorkOrder.setModifyDatetime((new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")).format(new Date())); workOrderExtService.update(oldMesWorkOrder); //保存数据 List mesProductOffLineList = new ArrayList<>(); MesProductOffLine newMesProductOffLine; for (MesProduceSn produceSn : mesWorkOrderList) { + String nowTime = TimeTool.getNowTime(true); for (MesBom mesBom : mesBoms) { newMesProductOffLine = new MesProductOffLine(); newMesProductOffLine.setReportPartNo(oldMesWorkOrder.getPartNo()); @@ -266,7 +268,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { newMesProductOffLine.setReportType(oldMesWorkOrder.getReportType()); newMesProductOffLine.setSapWorkCenter(oldMesWorkOrder.getErpWorkCenter()); newMesProductOffLine.setOrganizeCode(oldMesWorkOrder.getOrganizeCode()); - + newMesProductOffLine.setDescription(nowTime); ConvertBean.serviceModelInitialize(newMesProductOffLine, userName); mesProductOffLineList.add(newMesProductOffLine); } @@ -274,7 +276,8 @@ public class MesWorkOrderService implements IMesWorkOrderService { mesProductOffLineRDao.saveAll(mesProductOffLineList); } } - public void doPcnJobProductReport(List mesProductionRecordList,List mesShiftList,String organizeCode, String userName ,MesWorkOrder mesWorkOrderDb) { + + public void doPcnJobProductReport(List mesProductionRecordList, List mesShiftList, String organizeCode, String userName, MesWorkOrder mesWorkOrderDb) { //查询物料信息 DdlPackBean ddlPackBeanPart = DdlPackBean.getDdlPackBean(mesWorkOrderDb.getOrganizeCode()); @@ -294,11 +297,11 @@ public class MesWorkOrderService implements IMesWorkOrderService { //获取生产版本 MesProductVersion mesProductVersion = getMesProductVersion(mesWorkOrderDb); //物料+生产版本获取bom信息 - List mesBoms = findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList()); + List mesBoms = findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList()); LOGGER.info("产线:{} 零件:{}更新工单", mesWorkOrderDb.getWorkCenterCode(), mesWorkOrderDb.getPartNo()); //更新工单 - // updateMesWorkOrder(mesWorkOrderDb, userName ); + // updateMesWorkOrder(mesWorkOrderDb, userName ); //保存数据 // List mesProductOffLineList = new ArrayList<>(); @@ -307,7 +310,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { // } // mesProductOffLineService.insertBatch(mesProductOffLineList); - LOGGER.info("产线:{} 零件:{}更新工单mesProduceSns:{}", mesWorkOrderDb.getWorkCenterCode(), mesWorkOrderDb.getPartNo(),mesProductionRecordList.size()); + LOGGER.info("产线:{} 零件:{}更新工单mesProduceSns:{}", mesWorkOrderDb.getWorkCenterCode(), mesWorkOrderDb.getPartNo(), mesProductionRecordList.size()); //保存数据 List mesProductOffLineList = new ArrayList<>(); MesProductOffLine newMesProductOffLine; @@ -340,7 +343,8 @@ public class MesWorkOrderService implements IMesWorkOrderService { } mesProductOffLineRDao.saveAll(mesProductOffLineList); } - private void updateMesWorkOrder(MesWorkOrder mesWorkOrder, String userName ) { + + private void updateMesWorkOrder(MesWorkOrder mesWorkOrder, String userName) { //修改工单,需要重新同步 mesWorkOrder.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); ConvertBean.serviceModelUpdate(mesWorkOrder, userName); @@ -349,11 +353,13 @@ public class MesWorkOrderService implements IMesWorkOrderService { //保存记录 saveMesWorkOrderLog(mesWorkOrder); } + public void saveMesWorkOrderLog(MesWorkOrder mesWorkOrder) { MesWorkOrderLog workOrderLog = new MesWorkOrderLog(); BeanUtils.copyProperties(mesWorkOrder, workOrderLog, "id"); mesWorkOrderLogRepository.insert(workOrderLog); } + public List findBomList(String organizeCode, MesPart mesPart, String bomVersion) { List bomData = new ArrayList<>(); // 递归展开 BOM @@ -391,6 +397,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { // 返回汇总数据 return new ArrayList<>(summaryBomMap.values()); } + /** * 递归展开 BOM * @@ -399,7 +406,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { * @param bomData 存放 BOM 数据的集合 */ private void expendBomChild(String organizeCode, String partNo, String bomVersion, List bomData) { - List bomDetails = findMesBomByPartNoAndBomVersion(partNo, organizeCode, bomVersion); + List bomDetails = findMesBomByPartNoAndBomVersion(partNo, organizeCode, bomVersion); for (MesBom item : bomDetails) { MesBom newItem = new MesBom(); @@ -418,6 +425,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { } } } + public List findMesBomByPartNoAndBomVersion(String partNo, String organizeCode, String bomVersion) { DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean); @@ -432,6 +440,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { //如果存在多个bomCode取最新的一个 return mesBoms.stream().collect(Collectors.groupingBy(MesBom::getBomCode)).get(next.getBomCode()); } + private MesProductVersion getMesProductVersion(MesWorkOrder mesWorkOrder) { DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesWorkOrder.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(), "partNo", ddlPackBean); @@ -450,11 +459,11 @@ public class MesWorkOrderService implements IMesWorkOrderService { DdlPreparedPack.getNumEqualPack(id, "id", ddlPackBean); // DdlPreparedPack.getStringEqualPack(sn, "custSn", ddlPackBean); productionRecordRao.updateByPropertiesNoSync(new String[]{"modifyUser", "modifyDatetime"}, - new Object[]{userName, TimeTool.getNowTime(true)},ddlPackBean); + new Object[]{userName, TimeTool.getNowTime(true)}, ddlPackBean); } @Override - @Transactional(propagation= Propagation.REQUIRES_NEW,isolation= Isolation.READ_COMMITTED,readOnly = false,rollbackFor = Exception.class) + @Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_COMMITTED, readOnly = false, rollbackFor = Exception.class) public void doProductReportByRecord(MesProductionRecord productionRecord, String organizeCode, String userName) { //新增初始化 todo // 根据 @@ -467,7 +476,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getNumEqualPack(productionRecord.getId(), "id", ddlPackBean); productionRecordRao.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "reportStatus"}, - new Object[]{userName, TimeTool.getNowTime(true), productionRecord.getReportStatus()},ddlPackBean); + new Object[]{userName, TimeTool.getNowTime(true), productionRecord.getReportStatus()}, ddlPackBean); return; } LOGGER.error("报工条码:{}找不到加工单", productionRecord.getProductSn()); @@ -476,10 +485,9 @@ public class MesWorkOrderService implements IMesWorkOrderService { } report(productionRecord, organizeCode, userName, oldMesWorkOrderList); - } - catch (Exception e) { + } catch (Exception e) { String msg = e.getMessage(); - if (e instanceof ImppBusiException) { + if (e instanceof ImppBusiException) { msg = ((ImppBusiException) e).getErrorMsg(); } e.printStackTrace(); @@ -487,8 +495,9 @@ public class MesWorkOrderService implements IMesWorkOrderService { productionRecordService.updateProductionRecord(organizeCode, userName, productionRecord.getId(), msg); } } + @Override - @Transactional(propagation= Propagation.REQUIRES_NEW,isolation= Isolation.READ_COMMITTED,readOnly = false,rollbackFor = Exception.class) + @Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_COMMITTED, readOnly = false, rollbackFor = Exception.class) public void doProductHasOrderReportByRecord(MesProductionRecord productionRecord, String organizeCode, String userName) { //新增初始化 todo // 根据 @@ -503,7 +512,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { report(productionRecord, organizeCode, userName, oldMesWorkOrders); } catch (Exception e) { String msg = e.getMessage(); - if (e instanceof ImppBusiException) { + if (e instanceof ImppBusiException) { msg = ((ImppBusiException) e).getErrorMsg(); } e.printStackTrace(); @@ -515,6 +524,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { /** * 获取最优的工单 + * * @param oldMesWorkOrderList * @param mesWorkCenter * @return @@ -528,13 +538,13 @@ public class MesWorkOrderService implements IMesWorkOrderService { for (MesWorkOrder mesWorkOrder : oldMesWorkOrderList) { double reportdQty = MathOperation.add(1, mesWorkOrder.getReportedQty()); // 如果是允许,则需要判断是否超过比例 - if (reportdQty <= mesWorkOrder.getQty()) { + if (reportdQty <= mesWorkOrder.getQty()) { return mesWorkOrder; } - if (Objects.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(),mesWorkCenter.getIsCheckOrderQty())) { + if (Objects.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), mesWorkCenter.getIsCheckOrderQty())) { double remainQty = reportdQty - mesWorkOrder.getQty(); double rate = remainQty / mesWorkOrder.getQty(); - if (rate > mesWorkCenter.getOrderRate()/100) { + if (rate > mesWorkCenter.getOrderRate() / 100) { continue; } else { return mesWorkOrder; @@ -542,10 +552,10 @@ public class MesWorkOrderService implements IMesWorkOrderService { } } - return null; + return null; } - private void report(MesProductionRecord productionRecord, String organizeCode, String userName, List oldMesWorkOrderList) { + private void report(MesProductionRecord productionRecord, String organizeCode, String userName, List oldMesWorkOrderList) { // DdlPackBean ddlPackBean; @@ -559,7 +569,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { } MesWorkOrder oldMesWorkOrder = getBestWorkOrder(productionRecord, oldMesWorkOrderList, mesWorkCenter); if (oldMesWorkOrder == null) { - LOGGER.error(String.format("未找到匹配的加工单, 条码=%s",productionRecord.getCustSn())); + LOGGER.error(String.format("未找到匹配的加工单, 条码=%s", productionRecord.getCustSn())); return; //throw new ImppBusiException(String.format("未找到匹配的加工单")); } @@ -591,8 +601,8 @@ public class MesWorkOrderService implements IMesWorkOrderService { throw new ImppBusiException(String.format("物料【%s】生产版本【%s】对应bom信息不存在", productionRecord.getPartNo(), mesProductVersion.getProductVersion())); } - oldMesWorkOrder.setNum(oldMesWorkOrder.getNum() == null ? 1 : oldMesWorkOrder.getNum() + 1); - LOGGER.info("工单报工原数量【{}】", oldMesWorkOrder.getReportedQty()); + oldMesWorkOrder.setNum(oldMesWorkOrder.getNum() == null ? 1 : oldMesWorkOrder.getNum() + 1); + LOGGER.info("工单报工原数量【{}】", oldMesWorkOrder.getReportedQty()); oldMesWorkOrder.setReportedQty(MathOperation.add(oldMesWorkOrder.getNum(), oldMesWorkOrder.getReportedQty())); if (StringUtils.isEmpty(productionRecord.getWorkOrderNo())) { oldMesWorkOrder.setCompleteQty(oldMesWorkOrder.getReportedQty()); @@ -606,10 +616,10 @@ public class MesWorkOrderService implements IMesWorkOrderService { if (oldMesWorkOrder.getReportedQty() >= oldMesWorkOrder.getQty()) { oldMesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); - } else { + } else { oldMesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()); } - LOGGER.info("工单报工后数量【{}】", oldMesWorkOrder.getReportedQty()); + LOGGER.info("工单报工后数量【{}】", oldMesWorkOrder.getReportedQty()); ConvertBean.serviceModelUpdate(oldMesWorkOrder, userName); oldMesWorkOrder.setModifyDatetime((new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")).format(new Date())); workOrderExtService.update(oldMesWorkOrder); @@ -622,10 +632,10 @@ public class MesWorkOrderService implements IMesWorkOrderService { MesBom bom = new MesBom(); bom.setPartNo(mesBom.getPartNo()); bom.setItemPartNo(mesBom.getItemPartNo()); - return bom; + return bom; })); for (Map.Entry> entry : map.entrySet()) { - MesBom mesBom = entry.getValue().get(0); + MesBom mesBom = entry.getValue().get(0); newMesProductOffLine = new MesProductOffLine(); newMesProductOffLine.setReportPartNo(oldMesWorkOrder.getPartNo()); newMesProductOffLine.setReportPartNameRdd(oldMesWorkOrder.getPartName()); @@ -657,20 +667,21 @@ public class MesWorkOrderService implements IMesWorkOrderService { DdlPreparedPack.getNumEqualPack(productionRecord.getId(), "id", snDdlPackBean); DdlPreparedPack.getStringEqualPack(organizeCode, "organizeCode", snDdlPackBean); - mesProduceSnRao.updateByProperties(new String[]{"modifyUser", "modifyDatetime","workOrderNo"}, - new Object[]{userName, TimeTool.getNowTime(true), oldMesWorkOrder.getWorkOrderNo()},snDdlPackBean); + mesProduceSnRao.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "workOrderNo"}, + new Object[]{userName, TimeTool.getNowTime(true), oldMesWorkOrder.getWorkOrderNo()}, snDdlPackBean); DdlPackBean packBean = DdlPackBean.getDdlPackBean(); DdlPreparedPack.getNumEqualPack(productionRecord.getId(), "id", packBean); - productionRecordRao.updateByProperties(new String[]{"modifyUser", "modifyDatetime","workOrderNo", "reportStatus"}, - new Object[]{userName, TimeTool.getNowTime(true), oldMesWorkOrder.getWorkOrderNo(), MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_20.getValue()},packBean); + productionRecordRao.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "workOrderNo", "reportStatus"}, + new Object[]{userName, TimeTool.getNowTime(true), oldMesWorkOrder.getWorkOrderNo(), MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_20.getValue()}, packBean); - LOGGER.info("条码【{}】报工成功,报工工单【{}】",productionRecord.getProductSn(), oldMesWorkOrder.getWorkOrderNo()); + LOGGER.info("条码【{}】报工成功,报工工单【{}】", productionRecord.getProductSn(), oldMesWorkOrder.getWorkOrderNo()); } /** * 获取对应的工单 + * * @param productionRecord * @param organizeCode * @return @@ -695,7 +706,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", ddlPackBean); MesWorkCenter mesWorkCenter = mesWorkCenterRDao.getByProperty(ddlPackBean); if (Objects.isNull(mesWorkCenter)) { - MesPcnException.throwMesBusiException("产线【%s】不存在",workCenterCode); + MesPcnException.throwMesBusiException("产线【%s】不存在", workCenterCode); } List shiftList = mesShiftService.queryMesShift(organizeCode, workCenterCode); @@ -703,13 +714,13 @@ public class MesWorkOrderService implements IMesWorkOrderService { if (CollectionUtils.isEmpty(shiftList)) { MesPcnException.throwFlowException(String.format("班次信息未维护,产线=%s"), workCenterCode); } - List shifts = shiftList.stream().filter(mesShift -> Objects.equals(mesShift.getWorkCenterCode(), workCenterCode)).collect(Collectors.toList()); + List shifts = shiftList.stream().filter(mesShift -> Objects.equals(mesShift.getWorkCenterCode(), workCenterCode)).collect(Collectors.toList()); MesShift currentShift = shifts.stream().filter(mesShift -> Objects.equals(mesShift.getShiftCode(), shiftCode)).findFirst().orElse(null); String orderDate = productionRecord.getLotNo(); - if (currentShift.getStartTime().compareTo(currentShift.getEndTime()) > 0){ + if (currentShift.getStartTime().compareTo(currentShift.getEndTime()) > 0) { // 如果比0点大,需要找日期前一天的班次的工单号,如果是0点前,date =lotNO 如果是0点后,则找lot的前一天 int hours = transfer(productionRecord.getCompleteDateTime()).getHours(); if (hours < 12) { @@ -727,8 +738,8 @@ public class MesWorkOrderService implements IMesWorkOrderService { } // 如果找不到则再根据计划开始时间找 if (CollectionUtils.isEmpty(list)) { - list = oldMesWorkOrders.stream().filter(workOrder ->!StringUtils.isEmpty(workOrder.getPlanStartTime()) && !StringUtils.isEmpty(workOrder.getPlanEndTime()) && - transfer(productionRecord.getCompleteDateTime()).getTime() >= transfer(workOrder.getPlanStartTime()).getTime() && transfer(productionRecord.getCompleteDateTime()).getTime() <= transfer(workOrder.getPlanEndTime()).getTime()).collect(Collectors.toList()); + list = oldMesWorkOrders.stream().filter(workOrder -> !StringUtils.isEmpty(workOrder.getPlanStartTime()) && !StringUtils.isEmpty(workOrder.getPlanEndTime()) && + transfer(productionRecord.getCompleteDateTime()).getTime() >= transfer(workOrder.getPlanStartTime()).getTime() && transfer(productionRecord.getCompleteDateTime()).getTime() <= transfer(workOrder.getPlanEndTime()).getTime()).collect(Collectors.toList()); } workOrders = list; @@ -748,16 +759,16 @@ public class MesWorkOrderService implements IMesWorkOrderService { } else { date = getDate(productionRecord.getLotNo(), 0); } - String endTime = date + " " +currentShift.getStartTime(); - String startTime = date + " " +currentShift.getEndTime(); + String endTime = date + " " + currentShift.getStartTime(); + String startTime = date + " " + currentShift.getEndTime(); workOrders = oldMesWorkOrders.stream().filter(workOrder -> !StringUtils.isEmpty(workOrder.getPlanStartTime()) && !StringUtils.isEmpty(workOrder.getPlanEndTime()) && transfer(startTime).getTime() >= transfer(workOrder.getPlanStartTime()).getTime() && transfer(endTime).getTime() <= transfer(workOrder.getPlanEndTime()).getTime()).collect(Collectors.toList()); } else { // 早班或者中班 则找当天非当前班次的最早单号 - String startTime = date + " " +currentShift.getEndTime(); - String endTime = getDate(date, 2) + " " +currentShift.getStartTime(); + String startTime = date + " " + currentShift.getEndTime(); + String endTime = getDate(date, 2) + " " + currentShift.getStartTime(); for (MesWorkOrder workOrder : oldMesWorkOrders) { if (transfer(startTime).getTime() >= transfer(workOrder.getPlanStartTime()).getTime() && transfer(endTime).getTime() <= transfer(workOrder.getPlanEndTime()).getTime()) { break; @@ -799,26 +810,27 @@ public class MesWorkOrderService implements IMesWorkOrderService { /** * flag = 1 减少 1天, = 2 加一天 + * * @param lotNo * @param flag * @return */ - public String getDate(String lotNo, int flag) { - SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd"); + public String getDate(String lotNo, int flag) { + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); Date d = null; try { d = df.parse(lotNo); } catch (ParseException e) { e.printStackTrace(); } - Calendar cal=Calendar.getInstance(); + Calendar cal = Calendar.getInstance(); cal.setTime(d); if (flag == 1) { cal.add(Calendar.DATE, -1); //减1天 } else if (flag == 2) { cal.add(Calendar.DATE, 1); //加1天 } - return df.format(cal.getTime()).substring(0, 10); + return df.format(cal.getTime()).substring(0, 10); } private MesProductVersion getMesProductVersion(MesWorkOrder item, MesWorkCenter mesWorkCenter) { @@ -834,14 +846,15 @@ public class MesWorkOrderService implements IMesWorkOrderService { } return mesProductVersion; } + @Override public List getUnReportMesProduceSn(String organizeCode) { //1.获取生产加工记录production_record表中,report_status为待汇报状态的工单 DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); List statusList = Stream.of(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue(), MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_40.getValue()).collect(Collectors.toList()); - DdlPreparedPack.getInPackList( statusList,"reportStatus",ddlPackBean); - DdlPreparedPack.getIsNull("workOrderNo",ddlPackBean); + DdlPreparedPack.getInPackList(statusList, "reportStatus", ddlPackBean); + DdlPreparedPack.getIsNull("workOrderNo", ddlPackBean); String workCenterCodes = configService.getCfgValue(organizeCode, "MES_PCN_REPORT_CENTER"); if (!StringUtils.isEmpty(workCenterCodes)) { @@ -877,8 +890,8 @@ public class MesWorkOrderService implements IMesWorkOrderService { //1.获取生产加工记录production_record表中,report_status为待汇报状态的工单 DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); List statusList = Stream.of(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue(), MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_40.getValue()).collect(Collectors.toList()); - DdlPreparedPack.getInPackList( statusList,"reportStatus",ddlPackBean); - DdlPreparedPack.getIsNotNull("workOrderNo",ddlPackBean); + DdlPreparedPack.getInPackList(statusList, "reportStatus", ddlPackBean); + DdlPreparedPack.getIsNotNull("workOrderNo", ddlPackBean); String workCenterCodes = configService.getCfgValue(organizeCode, "MES_PCN_REPORT_CENTER"); //String workCenterCodes ="B19CK01A"; if (!StringUtils.isEmpty(workCenterCodes)) { @@ -912,40 +925,41 @@ public class MesWorkOrderService implements IMesWorkOrderService { @Override - public List getPreDayReportMesProductionRecord(String organizeCode,List mesShiftList, String workCenterCode ) { + public List getPreDayReportMesProductionRecord(String organizeCode, List mesShiftList, String workCenterCode) { //1.获取生产加工记录production_record表中,report_status为待汇报状态的工单 DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(workCenterCode,"workCenterCode",ddlPackBean); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", ddlPackBean); // DdlPreparedPack.getNumEqualPack( MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue(),"reportStatus",ddlPackBean); DdlPreparedPack.getInPackList( Arrays.asList(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue(), - MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_40.getValue()) ,"reportStatus",ddlPackBean); + MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_40.getValue()), "reportStatus", ddlPackBean); List collect = mesShiftList.stream().filter(s -> s.getShiftCode().equalsIgnoreCase("10")).collect(Collectors.toList()); - String startTime=" 08:00:00"; - if(!CollectionUtils.isEmpty(collect)){ - MesShift mesShift= collect.get(0); - startTime= StringUtil.isEmpty(mesShift.getStartTime())?" 08:00:00":" "+mesShift.getStartTime(); + String startTime = " 08:00:00"; + if (!CollectionUtils.isEmpty(collect)) { + MesShift mesShift = collect.get(0); + startTime = StringUtil.isEmpty(mesShift.getStartTime()) ? " 08:00:00" : " " + mesShift.getStartTime(); } //获取前一天的早班到当天早班的区间的所有加工记录,统计个数 DdlPreparedPack.timeBuilder( - new SimpleDateFormat("yyyy-MM-dd").format(TimeTool.getDateBefore(new Date(),1)) + startTime, + new SimpleDateFormat("yyyy-MM-dd").format(TimeTool.getDateBefore(new Date(), 1)) + startTime, TimeTool.getToday() + startTime, "completeDateTime", ddlPackBean, false); - return productionRecordRao.findByHqlWhere(ddlPackBean); + return productionRecordRao.findByHqlWhere(ddlPackBean); } + @Override - public List getPreDayReportMesProduceSn(String organizeCode,List mesProductionRecordList ) { + public List getPreDayReportMesProduceSn(String organizeCode, List mesProductionRecordList) { DdlPackBean snPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getInPackList(mesProductionRecordList.stream().map(MesProductionRecord::getProductSn).collect(Collectors.toList()), - "productSn",snPackBean); + "productSn", snPackBean); DdlPreparedPack.getIsNotNull("workCenterCode", snPackBean); return mesProduceSnRao.findByHqlWhere(snPackBean); } @Override - public void doProductReport(MesWorkOrder mesWorkOrder,String userName) { + public void doProductReport(MesWorkOrder mesWorkOrder, String userName) { MesWorkOrder mesWorkOrderDb = mesWorkOrderRDao.getById(mesWorkOrder.getId()); if (Objects.isNull(mesWorkOrderDb)) { MesPcnException.throwMesBusiException("工单id为【%s】工单信息不存在", mesWorkOrder.getId()); @@ -978,8 +992,8 @@ public class MesWorkOrderService implements IMesWorkOrderService { MesPcnException.throwMesBusiException("请检查工单数量,工单号[%s],工单数量[%s]报工数量[%s],且未配置超工单!", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getQty(), mesWorkOrder.getReportedQty()); } // 如果配置了超工单,且比例已经超过了配置的超工单比例,也需要阻断 - double rate = MathOperation.div((mesWorkOrderDb.getReportedQty() - mesWorkOrderDb.getQty()),mesWorkOrderDb.getQty()); - if (rate > MathOperation.div(workCenter.getOrderRate(),100)) { + double rate = MathOperation.div((mesWorkOrderDb.getReportedQty() - mesWorkOrderDb.getQty()), mesWorkOrderDb.getQty()); + if (rate > MathOperation.div(workCenter.getOrderRate(), 100)) { MesPcnException.throwMesBusiException("请检查工单数量,工单号[%s],工单数量[%s]报工数量[%s],配置了超工单,但超过了比例[%s]!", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getQty(), mesWorkOrder.getReportedQty(), workCenter.getOrderRate()); } mesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); @@ -990,18 +1004,19 @@ public class MesWorkOrderService implements IMesWorkOrderService { } mesWorkOrderDb.setCompleteQty(mesWorkOrderDb.getReportedQty()); mesWorkOrderDb.setRemark(mesWorkOrder.getRemark()); - String sn = getOrderNo(mesWorkOrder,mesPart,userName); + String sn = getOrderNo(mesWorkOrder, mesPart, userName); //更新工单 - updateMesWorkOrder(mesWorkOrderDb,userName); + updateMesWorkOrder(mesWorkOrderDb, userName); //记录条码表&加工记录表 //insertMesProductionRecord(insertMesProduceSn(mesPart, sn, userName, mesWorkOrder),mesWorkOrderDb); insertMesProduceSn(mesPart, sn, userName, mesWorkOrder); //试制单不报工 - if(Objects.isNull(mesWorkOrderDb.getOrderFlag()) || !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(mesWorkOrderDb.getOrderFlag())){ + if (Objects.isNull(mesWorkOrderDb.getOrderFlag()) || !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(mesWorkOrderDb.getOrderFlag())) { //保存数据 List mesProductOffLineList = new ArrayList<>(); + String nowTime = TimeTool.getNowTime(true); for (MesBom mesBom : mesBoms) { - mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom)); + mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, nowTime)); } mesProductOffLineRDao.saveAll(mesProductOffLineList); } @@ -1072,9 +1087,9 @@ public class MesWorkOrderService implements IMesWorkOrderService { } @Override - public List insertMesWorkOrder(List mesProductionRecordList,List mesShiftList, String organizeCode, String userName) { - List mesWorkOrderList=new ArrayList<>(); - Map> mesProductionRecordListMap = mesProductionRecordList.stream().collect(Collectors.groupingBy(sn -> sn.getWorkCenterCode() +"="+ sn.getPartNo())); + public List insertMesWorkOrder(List mesProductionRecordList, List mesShiftList, String organizeCode, String userName) { + List mesWorkOrderList = new ArrayList<>(); + Map> mesProductionRecordListMap = mesProductionRecordList.stream().collect(Collectors.groupingBy(sn -> sn.getWorkCenterCode() + "=" + sn.getPartNo())); for (Map.Entry> stringListEntry : mesProductionRecordListMap.entrySet()) { List value = stringListEntry.getValue(); MesProductionRecord mesProductionRecord = value.get(0); @@ -1086,9 +1101,9 @@ public class MesWorkOrderService implements IMesWorkOrderService { DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", ddlPackBean); MesWorkCenter mesWorkCenter = mesWorkCenterRDao.getByProperty(ddlPackBean); if (Objects.isNull(mesWorkCenter)) { - MesPcnException.throwMesBusiException("产线【%s】不存在",workCenterCode); + MesPcnException.throwMesBusiException("产线【%s】不存在", workCenterCode); } - MesWorkOrder item=new MesWorkOrder(); + MesWorkOrder item = new MesWorkOrder(); item.setOrganizeCode(organizeCode); item.setWorkCenterCode(workCenterCode); item.setErpWorkCenter(mesWorkCenter.getErpWorkCenter()); @@ -1096,21 +1111,21 @@ public class MesWorkOrderService implements IMesWorkOrderService { item.setWorkOrderType(MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue()); item.setOrderFlag(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.N.getValue()); List collect = mesShiftList.stream().filter(s -> s.getShiftCode().equalsIgnoreCase("20")).collect(Collectors.toList()); - MesShift mesShift= collect.get(0); + MesShift mesShift = collect.get(0); item.setShiftCode(mesShift.getShiftCode()); item.setShiftName(mesShift.getShiftName()); String today = TimeTool.getToday(); String dayBefore = new SimpleDateFormat("yyyy-MM-dd").format(TimeTool.getDateBefore(new Date(), 1)); - item.setPlanStartTime(dayBefore+" "+mesShift.getStartTime()); - item.setPlanEndTime(today+" "+mesShift.getEndTime()); + item.setPlanStartTime(dayBefore + " " + mesShift.getStartTime()); + item.setPlanEndTime(today + " " + mesShift.getEndTime()); //生成工单号 - List orderList=new ArrayList<>(); + List orderList = new ArrayList<>(); GenSerialNoModel genSerialNoModel = new GenSerialNoModel("MES_WORK_CENTER_ORDER_NO"); genSerialNoModel.setPartNo(workCenterCode); - orderList = syncFuncService.syncSerialNo(genSerialNoModel,userName, organizeCode, 1).getResultList(); + orderList = syncFuncService.syncSerialNo(genSerialNoModel, userName, organizeCode, 1).getResultList(); - String orderNo = "A-"+orderList.get(0); + String orderNo = "A-" + orderList.get(0); DdlPackBean orderPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(orderNo, "workOrderNo", orderPackBean); if (mesWorkOrderRDao.isExitByHql(orderPackBean)) { @@ -1141,7 +1156,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { MesProductVersion mesProductVersion = checkMesProductVersion(item); item.setProductVersion(mesProductVersion.getProductVersion()); //获取bom信息 - List bomList = findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList()); + List bomList = findMesBomByPartNoAndBomVersion(item.getPartNo(), item.getOrganizeCode(), mesProductVersion.getAlternativePartList()); //发送工单信息给WMS saveMesWorkOrderToWms.addAll(saveMesWorkOrderToWms(item, bomList)); @@ -1171,6 +1186,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { workOrderRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "workOrderStatus"}, new Object[]{"CLOSE_JOB", TimeTool.getNowTime(true), MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue()}, ddlPackBean); } + public List saveMesWorkOrderToWms(MesWorkOrder mesWorkOrder, List mesBomList) { List mesWorkOrderToWmsList = new ArrayList<>(); MesWorkOrderToWms mesWorkOrderToWms = null; @@ -1187,6 +1203,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { } return mesWorkOrderToWmsList; } + private MesProductVersion checkMesProductVersion(MesWorkOrder item) { DdlPackBean ddlPackBean; ddlPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); @@ -1199,17 +1216,18 @@ public class MesWorkOrderService implements IMesWorkOrderService { return mesProductVersion; } - private Date transfer(String dateStr){ - return DateUtil.parse(dateStr, (DateParser) DatePattern.NORM_DATETIME_FORMAT); + private Date transfer(String dateStr) { + return DateUtil.parse(dateStr, (DateParser) DatePattern.NORM_DATETIME_FORMAT); } - private String getOrderNo(MesWorkOrder mesWorkOrder,MesPart mesPart,String userName) { - if (StringUtils.isEmpty(mesPart.getProductMatchRule())) MesPcnException.throwMesBusiException("请检查零件信息,零件[%s]信息未维护零件条码编码规则!", mesPart.getPartNo()); + private String getOrderNo(MesWorkOrder mesWorkOrder, MesPart mesPart, String userName) { + if (StringUtils.isEmpty(mesPart.getProductMatchRule())) + MesPcnException.throwMesBusiException("请检查零件信息,零件[%s]信息未维护零件条码编码规则!", mesPart.getPartNo()); return syncFuncService.syncSerialNo(new GenSerialNoModel(mesPart.getProductMatchRule()).prodLocation(mesWorkOrder.getWorkCenterCode()).partNo(mesPart.getPartNo()).putDataMap(MesPart.class.getSimpleName(), mesPart).organizeCode(mesPart.getOrganizeCode()), userName, mesWorkOrder.getOrganizeCode(), 1).getResultList().get(0).toString(); } private MesProductOffLine creatMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, - String sn, MesBom mesBom) { + String sn, MesBom mesBom, String nowTime) { MesProductOffLine newMesProductOffLine; newMesProductOffLine = new MesProductOffLine(); newMesProductOffLine.setReportPartNo(mesWorkOrder.getPartNo()); @@ -1231,7 +1249,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { newMesProductOffLine.setReportType(mesWorkOrder.getReportType()); newMesProductOffLine.setSapWorkCenter(mesWorkOrder.getErpWorkCenter()); newMesProductOffLine.setOrganizeCode(mesWorkOrder.getOrganizeCode()); - + newMesProductOffLine.setDescription(nowTime); ConvertBean.serviceModelInitialize(newMesProductOffLine, mesWorkOrder.getCreateUser()); return newMesProductOffLine; } @@ -1246,7 +1264,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { mesProduceSn.setProcessLabelTemplate(mesPart.getProcessLabelTemplate()); mesProduceSn.setCustLabelTemplate(mesPart.getCustLabelTemplate()); mesProduceSn.setProdLabelTemplate(mesPart.getProductLabelTemplate()); - mesProduceSn.setQty(Double.parseDouble(mesWorkOrder.getNum()+"")); + mesProduceSn.setQty(Double.parseDouble(mesWorkOrder.getNum() + "")); mesProduceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.CREATE.getValue()); mesProduceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); mesProduceSn.setLotNo(TimeTool.getToday()); @@ -1261,7 +1279,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { return mesProduceSnRao.insert(mesProduceSn); } - private void insertMesProductionRecord(MesProduceSn mesProduceSn,MesWorkOrder mesWorkOrder) { + private void insertMesProductionRecord(MesProduceSn mesProduceSn, MesWorkOrder mesWorkOrder) { //生成加工记录 MesProductionRecord productionRecord = new MesProductionRecord(); BeanUtils.copyProperties(mesProduceSn, productionRecord); diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesReworkTaskRequestModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesReworkTaskRequestModel.java index 54d0074..35e2f2e 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesReworkTaskRequestModel.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesReworkTaskRequestModel.java @@ -52,4 +52,7 @@ public class MesReworkTaskRequestModel { @ApiModelProperty("类型") private Integer type; + @ApiModelProperty("操作人") + private String userName; + }