From fd2cf6d6958ba52a3889ab4e9ae47c73c3c307e4 Mon Sep 17 00:00:00 2001 From: jun Date: Wed, 7 Aug 2024 04:27:09 +0800 Subject: [PATCH] =?UTF-8?q?PDA=E4=BA=A7=E5=93=81=E5=8A=A0=E5=B7=A5?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E6=9F=A5=E8=AF=A2&PCN=E6=8A=A5=E5=B7=A5?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/pcn/api/busi/IMesProduceSnExtService.java | 4 ++ .../pcn/api/busi/IMesProductionRecordService.java | 4 ++ .../controller/busi/MesBusiController.java | 62 +++++++++++++++++++++ .../controller/busi/MesWorkOrderController.java | 2 +- .../serviceimpl/busi/MesProduceSnExtService.java | 14 +++++ .../busi/MesProductionRecordService.java | 64 +++++++++++++++++++++- .../serviceimpl/busi/MesWorkOrderService.java | 51 ++++++++++++++++- 7 files changed, 196 insertions(+), 5 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesBusiController.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProduceSnExtService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProduceSnExtService.java index 7a022e0..e8e0a7f 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProduceSnExtService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProduceSnExtService.java @@ -1,5 +1,7 @@ package cn.estsh.i3plus.ext.mes.pcn.api.busi; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrder; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; @@ -40,4 +42,6 @@ public interface IMesProduceSnExtService { void updateNoSync(MesProduceSn item); + @ApiOperation(value = "根据零件条码信息") + ListPager queryMesProduceSn(MesProduceSn mesProduceSn, Pager pager); } diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionRecordService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionRecordService.java index 60f7d61..15b2d64 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionRecordService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionRecordService.java @@ -1,6 +1,7 @@ package cn.estsh.i3plus.ext.mes.pcn.api.busi; import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; +import cn.estsh.i3plus.pojo.mes.model.MesProductionRecordModel; import io.swagger.annotations.ApiOperation; import java.util.List; @@ -29,4 +30,7 @@ public interface IMesProductionRecordService { void updateProductionRecord(String organizeCode, String userName, String sn); void updateProductionRecord(String organizeCode, String userName, Long id, String errorMsg); + + @ApiOperation(value = "根据零件条码查询加工记录信息") + List findMesProductionRecordList(String organizeCode, String productSn); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesBusiController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesBusiController.java new file mode 100644 index 0000000..74311eb --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesBusiController.java @@ -0,0 +1,62 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionRecordService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; +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 io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 业务信息 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/8/6 20:45 + * @Modify: + **/ +@RestController +@Api(tags = "业务信息") +@RequestMapping(MesCommonConstant.MES_YANFEN + "/busi") +@Slf4j +public class MesBusiController { + + @Autowired + private IMesProduceSnExtService mesProduceSnExtService; + + @Autowired + private IMesProductionRecordService mesProductionRecordService; + + @GetMapping("/mesProduceSn/query") + @ApiOperation(value = "查询条码信息") + public ResultBean queryMesProduceSn(MesProduceSn mesProduceSn, Pager pager) { + try { + return ResultBean.success("查询成功").setListPager(mesProduceSnExtService.queryMesProduceSn(mesProduceSn, pager)); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping("/mesProductionRecord/query") + @ApiOperation(value = "查询加工记录信息") + public ResultBean queryMesProductionRecord(MesProductionRecord mesProductionRecord) { + try { + return ResultBean.success("查询成功").setResultList(mesProductionRecordService.findMesProductionRecordList(mesProductionRecord.getOrganizeCode(), mesProductionRecord.getProductSn())); + } 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/controller/busi/MesWorkOrderController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesWorkOrderController.java index 0d8323c..f1a374a 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesWorkOrderController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesWorkOrderController.java @@ -66,7 +66,7 @@ public class MesWorkOrderController { public ResultBean doProductReport(MesWorkOrder mesWorkOrder) { try { workOrderService.doProductReport(mesWorkOrder, AuthUtil.getSessionUser().getUserName()); - return ResultBean.success("操作成功") + return ResultBean.success("报工成功") .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); } catch (ImppBusiException e) { return ResultBean.fail(e).build(); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnExtService.java index c10620a..3b8585a 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnExtService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnExtService.java @@ -5,8 +5,12 @@ import cn.estsh.i3plus.ext.mes.pcn.apiservice.aspect.MonitorLog; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; 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.MesProdShiftRecord; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrder; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; @@ -148,4 +152,14 @@ public class MesProduceSnExtService implements IMesProduceSnExtService { produceSnRepository.updateNoSync(item); } + @Override + public ListPager queryMesProduceSn(MesProduceSn mesProduceSn, Pager pager) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesProduceSn.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(mesProduceSn.getWorkOrderNo(),"workOrderNo",packBean); + DdlPreparedPack.getStringEqualPack(mesProduceSn.getPartNo(),"partNo",packBean); + DdlPreparedPack.getStringEqualPack(mesProduceSn.getPartName(),"partName",packBean); + pager = PagerHelper.getPager(pager, produceSnRepository.findByHqlWhereCount(packBean)); + List resultList = produceSnRepository.findByHqlWherePage(packBean, pager); + return new ListPager<>(resultList, pager); + } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProductionRecordService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProductionRecordService.java index 28cbf38..2856d62 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProductionRecordService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProductionRecordService.java @@ -6,16 +6,23 @@ 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.MesCraft; +import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; -import cn.estsh.i3plus.pojo.mes.repository.MesProductionAssemblyRepository; -import cn.estsh.i3plus.pojo.mes.repository.MesProductionRecordRepository; -import cn.estsh.i3plus.pojo.mes.repository.MesTimeEfficientCfgRepository; +import cn.estsh.i3plus.pojo.mes.model.MesProductionRecordModel; +import cn.estsh.i3plus.pojo.mes.repository.*; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +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.Objects; +import java.util.stream.Collectors; /** * @Description : @@ -36,6 +43,12 @@ public class MesProductionRecordService implements IMesProductionRecordService { @Autowired private MesProductionAssemblyRepository productionAssemblyRepository; + @Autowired + private MesCraftRepository mesCraftRepository; + + @Autowired + private MesProduceSnRepository mesProduceSnRepository; + @Override public List findProductionRecordList(String organizeCode, String productSn) { if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(productSn)) return null; @@ -84,4 +97,49 @@ public class MesProductionRecordService implements IMesProductionRecordService { productionRecordRepository.updateByProperties(new String[]{"modifyUser", "modifyDatetime","reportStatus", "remark"}, new Object[]{userName, TimeTool.getNowTime(true), MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_40.getValue(), errorMsg },ddlPackBean); } + + @Override + public List findMesProductionRecordList(String organizeCode, String productSn) { + List productionRecordList = findProductionRecordList(organizeCode, productSn); + List mesProductionRecordModelList = new ArrayList<>(); + if (!CollectionUtils.isEmpty(productionRecordList)) { + Map craftMap = getStringMesCraftMap(organizeCode, productionRecordList.stream().map(MesProductionRecord::getCraftCode).distinct().collect(Collectors.toList())); + Map produceSnMap = getStringMesProduceSn(organizeCode, productionRecordList.stream().map(MesProductionRecord::getSerialNumber).distinct().collect(Collectors.toList())); + MesProductionRecordModel mesProductionRecordModel = null; + for (MesProductionRecord mesProductionRecord : productionRecordList) { + mesProductionRecordModel = new MesProductionRecordModel(); + BeanUtils.copyProperties(mesProductionRecord, mesProductionRecordModel); + MesCraft mesCraft = Objects.isNull(craftMap) ? null : craftMap.get(mesProductionRecord.getCraftCode()); + mesProductionRecordModel.setCraftName(Objects.isNull(mesCraft) ? "" : mesCraft.getCraftName()); + MesProduceSn produceSn = Objects.isNull(produceSnMap) ? null : produceSnMap.get(mesProductionRecord.getSerialNumber()); + mesProductionRecordModel.setSnStatus(Objects.isNull(produceSn) ? 0 : produceSn.getSnStatus()); + mesProductionRecordModel.setSnStatusDesc(Objects.isNull(produceSn) ? "" :MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSn.getSnStatus())); + mesProductionRecordModel.setReportStatusDesc(MesExtEnumUtil.REPORT_STATUS.valueOfDescription(mesProductionRecordModel.getReportStatus())); + mesProductionRecordModelList.add(mesProductionRecordModel); + } + } + return mesProductionRecordModelList; + } + + private Map getStringMesCraftMap(String organizeCode, List craftCodeList) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(craftCodeList, "craftCode",packBean); + List craftList = mesCraftRepository.findByHqlWhere(packBean); + Map craftMap = null; + if(!CollectionUtils.isEmpty(craftList)){ + craftMap = craftList.stream().collect(Collectors.toMap(MesCraft::getCraftCode, t -> t)); + } + return craftMap; + } + + private Map getStringMesProduceSn(String organizeCode, List snList) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(snList, "serialNumber",packBean); + List mesProduceSns = mesProduceSnRepository.findByHqlWhere(packBean); + Map mesProduceSnMap = null; + if(!CollectionUtils.isEmpty(mesProduceSns)){ + mesProduceSnMap = mesProduceSns.stream().collect(Collectors.toMap(MesProduceSn::getSerialNumber, t -> t)); + } + return mesProduceSnMap; + } } 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 9b8ef5c..39aaeaa 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 @@ -8,12 +8,14 @@ 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; import cn.estsh.i3plus.platform.common.tool.MathOperation; 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.codemaker.SnowflakeIdMaker; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.common.PagerHelper; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; @@ -108,6 +110,9 @@ public class MesWorkOrderService implements IMesWorkOrderService { @Autowired private IMesProductionRecordService productionRecordService; + @Autowired + private SnowflakeIdMaker snowflakeIdMaker; + @Override public MesWorkOrder queryMesWorkOrder(MesWorkOrder workOrder) { @@ -968,11 +973,13 @@ public class MesWorkOrderService implements IMesWorkOrderService { } mesWorkOrderDb.setCompleteQty(mesWorkOrderDb.getReportedQty()); mesWorkOrderDb.setRemark(mesWorkOrder.getRemark()); + String sn = getOrderNo(mesWorkOrder); //更新工单 updateMesWorkOrder(mesWorkOrderDb,userName); + //记录条码表&加工记录表 + insertMesProductionRecord(insertMesProduceSn(mesPart, sn, userName, mesWorkOrder),mesWorkOrderDb); //试制单不报工 if(Objects.isNull(mesWorkOrderDb.getOrderFlag()) || !MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue().equals(mesWorkOrderDb.getOrderFlag())){ - String sn = getOrderNo(mesWorkOrder); //保存数据 List mesProductOffLineList = new ArrayList<>(); for (MesBom mesBom : mesBoms) { @@ -1212,4 +1219,46 @@ public class MesWorkOrderService implements IMesWorkOrderService { return newMesProductOffLine; } + private MesProduceSn insertMesProduceSn(MesPart mesPart, String sn, String userName, MesWorkOrder mesWorkOrder) { + MesProduceSn mesProduceSn = new MesProduceSn(); + mesProduceSn.setSerialNumber(snowflakeIdMaker.nextId() + ""); + mesProduceSn.setProductSn(sn); + mesProduceSn.setCustSn(sn); + mesProduceSn.setPartNo(mesPart.getPartNo()); + mesProduceSn.setPartName(mesPart.getPartName()); + mesProduceSn.setProcessLabelTemplate(mesPart.getProcessLabelTemplate()); + mesProduceSn.setCustLabelTemplate(mesPart.getCustLabelTemplate()); + mesProduceSn.setProdLabelTemplate(mesPart.getProductLabelTemplate()); + 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()); + mesProduceSn.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + mesProduceSn.setWorkCenterCode(mesWorkOrder.getWorkCenterCode()); + mesProduceSn.setPrintCount(MesPcnExtConstWords.ONE); + mesProduceSn.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue()); + mesProduceSn.setOrganizeCode(mesPart.getOrganizeCode()); + mesProduceSn.setFid(UUID.randomUUID().toString()); + ConvertBean.serviceModelInitialize(mesProduceSn, userName); + return mesProduceSnRao.insert(mesProduceSn); + } + + private void insertMesProductionRecord(MesProduceSn mesProduceSn,MesWorkOrder mesWorkOrder) { + //生成加工记录 + MesProductionRecord productionRecord = new MesProductionRecord(); + BeanUtils.copyProperties(mesProduceSn, productionRecord); + productionRecord.setReportType(MesExtEnumUtil.NOSORT_REPORT_TYPE.REPORT.getValue()); + productionRecord.setReportStatus(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_20.getValue()); + productionRecord.setModuleStatisticsStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + productionRecord.setAreaCode(mesWorkOrder.getAreaCode()); + productionRecord.setWorkCenterCode(mesWorkOrder.getWorkCenterCode()); + productionRecord.setWorkCellCode(mesWorkOrder.getWorkCellCode()); + productionRecord.setIsComplete(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + productionRecord.setCompleteDateTime(productionRecord.getModifyDatetime()); + productionRecord.setFid(UUID.randomUUID().toString()); + productionRecord.setOneMouldMoreId(UUID.randomUUID().toString()); + productionRecordRao.insert(productionRecord); + } + + }