From f605d49d1d2cb6588296d247422dd406f45d35b8 Mon Sep 17 00:00:00 2001 From: jun Date: Fri, 28 Jun 2024 18:49:15 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E4=BA=A7=E5=BC=80=E6=A8=A1=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E6=95=B0=E6=8D=AE=E5=8F=91=E9=80=81=20=E8=BF=BD?= =?UTF-8?q?=E6=BA=AF=E6=8A=A5=E8=A1=A8=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/api/base/IMesCraftRouteDetailService.java | 4 + .../mes/api/base/IMesProdCraftRouteService.java | 4 + .../ext/mes/api/base/IMesProduceSnService.java | 19 +++ .../mes/api/base/IMesProductionRecordService.java | 19 +++ .../mes/api/busi/report/IMesYfReportService.java | 7 ++ .../controller/report/MesBusiReportController.java | 48 ++++++++ .../base/MesCraftRouteDetailServiceImpl.java | 17 ++- .../base/MesProdCraftRouteServiceImpl.java | 98 +++++++++++---- .../serviceimpl/base/MesProduceSnServiceImpl.java | 35 ++++++ .../base/MesProductionRecordServiceImpl.java | 37 ++++++ .../serviceimpl/report/MesYfReportServiceImpl.java | 131 +++++++++++++++++++-- 11 files changed, 383 insertions(+), 36 deletions(-) create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProduceSnService.java create mode 100644 modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProductionRecordService.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesBusiReportController.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProduceSnServiceImpl.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductionRecordServiceImpl.java diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCraftRouteDetailService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCraftRouteDetailService.java index a5fc0b5..e6a8a85 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCraftRouteDetailService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesCraftRouteDetailService.java @@ -1,6 +1,7 @@ package cn.estsh.i3plus.ext.mes.api.base; import cn.estsh.i3plus.pojo.mes.bean.MesCraftRouteDetail; +import io.swagger.annotations.ApiOperation; import java.util.List; @@ -18,4 +19,7 @@ public interface IMesCraftRouteDetailService extends IBaseMesService mesCraftRouteDetailList); void deleteMesCraftRouteDetailBatch(String organizeCode, String userName, String craftRouteCode); + + @ApiOperation("查找工艺路线") + List findProdCraftRouteDetail(String organizeCode, String workCenterCode, String partNo); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProdCraftRouteService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProdCraftRouteService.java index 8f7eb33..05cd7d4 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProdCraftRouteService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProdCraftRouteService.java @@ -1,6 +1,7 @@ package cn.estsh.i3plus.ext.mes.api.base; import cn.estsh.i3plus.pojo.mes.bean.MesProdCraftRoute; +import io.swagger.annotations.ApiOperation; /** * @Description :产品工艺路线 @@ -10,4 +11,7 @@ import cn.estsh.i3plus.pojo.mes.bean.MesProdCraftRoute; * @Modify: **/ public interface IMesProdCraftRouteService extends IBaseMesService { + + @ApiOperation("工艺路线代码") + String getCraftRouteCode(String organizeCode, String workCenterCode, String partNo); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProduceSnService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProduceSnService.java new file mode 100644 index 0000000..a935f7b --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProduceSnService.java @@ -0,0 +1,19 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +/** + * @Description : 产品条码表 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/6/28 9:20 + * @Modify: + **/ +public interface IMesProduceSnService extends IBaseMesService { + + @ApiOperation(value = "根据条码查询产品条码表") + List findMesProduceSn(String organizeCode, String sn); +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProductionRecordService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProductionRecordService.java new file mode 100644 index 0000000..b74f17a --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProductionRecordService.java @@ -0,0 +1,19 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +/** + * @Description : 设备加工记录表 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/6/28 9:20 + * @Modify: + **/ +public interface IMesProductionRecordService extends IBaseMesService { + + @ApiOperation(value = "根据条码查询设备加工记录表") + List findMesProductionRecord(String organizeCode, String sn); +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IMesYfReportService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IMesYfReportService.java index dd33377..322602f 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IMesYfReportService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IMesYfReportService.java @@ -6,7 +6,11 @@ import cn.estsh.i3plus.ext.mes.pojo.model.report.MesProdRuleReportConditionModel 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.model.report.MesTraceabilityReportModel; import cn.estsh.impp.framework.boot.util.ResultBean; +import io.swagger.annotations.ApiOperation; + +import java.util.List; /** * @Description : 报表-业务方法 @@ -34,4 +38,7 @@ public interface IMesYfReportService { ResultBean queryMesProdRuleByPager(MesProdRuleReportConditionModel queryReportModel, Pager pager); ListPager queryMesSuspiciousSnMsgByPager(MesProduceSn mesProduceSn, Pager pager); + + @ApiOperation("查询追溯报表") + List findTraceabilityReport(MesProduceSn mesProduceSn); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesBusiReportController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesBusiReportController.java new file mode 100644 index 0000000..025f2d9 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesBusiReportController.java @@ -0,0 +1,48 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.report; + +import cn.estsh.i3plus.ext.mes.api.busi.report.IMesYfReportService; +import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import cn.estsh.impp.framework.base.controller.MesBaseController; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +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 : Mes业务报表 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/6/28 14:17 + * @Modify: + **/ +@Api("Mes业务报表") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/report") +public class MesBusiReportController extends MesBaseController { + + @Autowired + private IMesYfReportService mesYfReportService; + + @ApiOperation(value = "查询追溯报表", notes = "查询追溯报表") + @GetMapping("/traceability/find") + public ResultBean findTraceabilityReport(MesProduceSn mesProduceSn) { + try { + ValidatorBean.beginValid(mesProduceSn).notNull("productSn", mesProduceSn.getProductSn()); + mesProduceSn.setOrganizeCode(AuthUtilExt.getOrganizeCode()); + return ResultBean.success("查询成功").setResultList(mesYfReportService.findTraceabilityReport(mesProduceSn)); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCraftRouteDetailServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCraftRouteDetailServiceImpl.java index 9acc7cb..8d6680f 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCraftRouteDetailServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCraftRouteDetailServiceImpl.java @@ -3,18 +3,20 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesCraftRouteDetailService; import cn.estsh.i3plus.ext.mes.api.base.IMesCraftRouteService; import cn.estsh.i3plus.ext.mes.api.base.IMesCraftService; +import cn.estsh.i3plus.ext.mes.api.base.IMesProdCraftRouteService; import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; import cn.estsh.i3plus.ext.mes.apiservice.unit.exception.MesException; -import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; 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.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.mes.bean.MesCraft; import cn.estsh.i3plus.pojo.mes.bean.MesCraftRoute; import cn.estsh.i3plus.pojo.mes.bean.MesCraftRouteDetail; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.impp.framework.boot.util.ValidatorBean; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -44,6 +46,8 @@ public class MesCraftRouteDetailServiceImpl extends BaseMesService findProdCraftRouteDetail(String organizeCode, String workCenterCode, String partNo) { + String craftRouteCode = mesProdCraftRouteService.getCraftRouteCode(organizeCode, workCenterCode, partNo); + if(StringUtil.isEmpty(craftRouteCode)){ + return null; + } + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(craftRouteCode,"craftRouteCode",packBean); + return baseRDao.findByHqlWhere(packBean); + } + private void checkCraft(List mesCraftRouteDetailList, String routeCode) { //获取工艺路线信息 MesCraftRouteDetail craftRouteDetailFist = mesCraftRouteDetailList.iterator().next(); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProdCraftRouteServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProdCraftRouteServiceImpl.java index b9cdd76..76f5dd1 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProdCraftRouteServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProdCraftRouteServiceImpl.java @@ -1,5 +1,6 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; +import cn.estsh.i3plus.ext.mes.api.base.IMesPartService; import cn.estsh.i3plus.ext.mes.api.base.IMesProdCraftRouteService; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; import cn.estsh.i3plus.platform.common.util.MesConstWords; @@ -8,6 +9,7 @@ import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.mes.bean.MesCraftRoute; +import cn.estsh.i3plus.pojo.mes.bean.MesPart; import cn.estsh.i3plus.pojo.mes.bean.MesProdCraftRoute; import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; import cn.estsh.i3plus.pojo.mes.repository.MesCraftRouteRepository; @@ -17,7 +19,10 @@ import cn.estsh.impp.framework.boot.util.ValidatorBean; import lombok.extern.slf4j.Slf4j; 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.List; import java.util.Objects; /** @@ -35,6 +40,8 @@ public class MesProdCraftRouteServiceImpl extends BaseMesService prodCraftRouteList = baseRDao.findByHqlWhere(packBean); + if (!CollectionUtils.isEmpty(prodCraftRouteList)) { + return prodCraftRouteList.iterator().next().getCraftRouteCode(); + } + + MesPart partDb = mesPartService.getPartByPartNo(partNo, organizeCode); + if (null == partDb || StringUtils.isEmpty(partDb.getPptCode())) { + return null; + } + + //按照物料产品类型查找工艺路线 + packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partDb.getPptCode(), "pptCode", packBean); + DdlPreparedPack.getIsNull(MesConstWords.PART_NO, packBean); + prodCraftRouteList = baseRDao.findByHqlWhere(packBean); + if (!CollectionUtils.isEmpty(prodCraftRouteList)) { + return prodCraftRouteList.iterator().next().getCraftRouteCode(); + } + + //按照产线查找工艺路线 + packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCode, MesConstWords.WORK_CENTER_CODE, packBean); + DdlPreparedPack.getIsNull(MesConstWords.PART_NO, packBean); + DdlPreparedPack.getIsNull("pptCode", packBean); + prodCraftRouteList = baseRDao.findByHqlWhere(packBean); + if (!CollectionUtils.isEmpty(prodCraftRouteList)) { + return prodCraftRouteList.iterator().next().getCraftRouteCode(); + } + return null; + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProduceSnServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProduceSnServiceImpl.java new file mode 100644 index 0000000..58db2c9 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProduceSnServiceImpl.java @@ -0,0 +1,35 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesProduceSnService; +import cn.estsh.i3plus.ext.mes.apiservice.unit.exception.MesException; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.List; + +/** + * @Description : 产品条码表 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/6/28 9:27 + * @Modify: + **/ +@Service +@Slf4j +public class MesProduceSnServiceImpl extends BaseMesService implements IMesProduceSnService { + + @Override + public List findMesProduceSn(String organizeCode, String sn) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(sn, "productSn", packBean); + List produceSnList = baseRDao.findByHqlWhere(packBean); + if (CollectionUtils.isEmpty(produceSnList)) { + MesException.throwMesBusiException("条码【%s】信息不存在", sn); + } + return produceSnList; + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductionRecordServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductionRecordServiceImpl.java new file mode 100644 index 0000000..ade8d60 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductionRecordServiceImpl.java @@ -0,0 +1,37 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesProductionRecordService; +import cn.estsh.i3plus.ext.mes.apiservice.unit.exception.MesException; +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.MesProductionRecord; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.List; + +/** + * @Description : 设备加工记录表 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/6/28 9:27 + * @Modify: + **/ +@Service +@Slf4j +public class MesProductionRecordServiceImpl extends BaseMesService implements IMesProductionRecordService { + + @Override + public List findMesProductionRecord(String organizeCode, String sn) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(sn, "productSn", packBean); + DdlPreparedPack.getOrderBy("createDatetime", CommonEnumUtil.ASC_OR_DESC.ASC.getValue(),packBean); + List produceSnList = baseRDao.findByHqlWhere(packBean); + if (CollectionUtils.isEmpty(produceSnList)) { + MesException.throwMesBusiException("条码【%s】加工记录信息不存在", sn); + } + return produceSnList; + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesYfReportServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesYfReportServiceImpl.java index dac50ad..03f54bb 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesYfReportServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesYfReportServiceImpl.java @@ -1,10 +1,14 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.report; +import cn.estsh.i3plus.ext.mes.api.base.IMesProduceSnService; +import cn.estsh.i3plus.ext.mes.api.base.IMesProductionRecordService; import cn.estsh.i3plus.ext.mes.api.busi.report.IMesYfReportService; import cn.estsh.i3plus.ext.mes.apiservice.dao.report.IMesYfReportDao; import cn.estsh.i3plus.ext.mes.pojo.model.report.MesDeviceDataQueryReportConditionModel; import cn.estsh.i3plus.ext.mes.pojo.model.report.MesDeviceDataQueryReportResultModel; import cn.estsh.i3plus.ext.mes.pojo.model.report.MesProdRuleReportConditionModel; +import cn.estsh.i3plus.mes.apiservice.util.DateUtil; +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; @@ -12,19 +16,25 @@ import cn.estsh.i3plus.pojo.base.common.PagerHelper; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; -import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg; -import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleSortCfg; -import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; -import cn.estsh.i3plus.pojo.mes.repository.MesProdRuleNoSortCfgRepository; -import cn.estsh.i3plus.pojo.mes.repository.MesProdRuleSortCfgRepository; -import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.model.report.MesTraceabilityReportDataModel; +import cn.estsh.i3plus.pojo.mes.model.report.MesTraceabilityReportModel; +import cn.estsh.i3plus.pojo.mes.repository.*; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.impp.framework.boot.util.ResultBean; import jodd.util.StringUtil; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; /** * @Description : 报表-业务方法实现 @@ -48,6 +58,18 @@ public class MesYfReportServiceImpl implements IMesYfReportService { @Autowired private MesProdRuleNoSortCfgRepository mesProdRuleNoSortCfgRepository; + @Autowired + private IMesProduceSnService mesProduceSnService; + + @Autowired + private IMesProductionRecordService mesProductionRecordService; + + @Autowired + private MesProductionAssemblyRepository mesProductionAssemblyRepository; + + @Autowired + private MesWorkCellScanMonitorLogRepository mesWorkCellScanMonitorLogRepository; + @Override public ListPager queryMesDeviceDataByPager(MesDeviceDataQueryReportConditionModel queryReportModel, Pager pager) { ListPager mesDeviceDataQueryReportResultModelListPager = @@ -70,7 +92,7 @@ public class MesYfReportServiceImpl implements IMesYfReportService { pager = PagerHelper.getPager(pager, mesProdRuleSortCfgRepository.findByHqlWhereCount(queryPackBean)); List mesProdRuleSortCfgList = mesProdRuleSortCfgRepository.findByHqlWherePage(queryPackBean, pager); return ResultBean.success("查询设备数据成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setListPager(new ListPager(mesProdRuleSortCfgList, pager)); - }else { + } else { //查询“非排序产品加工规则配置” DdlPreparedPack.getStringEqualPack(queryReportModel.getInPartNo(), "inPartNo", queryPackBean); DdlPreparedPack.getStringEqualPack(queryReportModel.getInPartNoRule(), "inPartNoRule", queryPackBean); @@ -91,9 +113,9 @@ public class MesYfReportServiceImpl implements IMesYfReportService { DdlPreparedPack.getStringEqualPack(bean.getWorkCenterCode(), "workCenterCode", packBean); DdlPreparedPack.getStringEqualPack(bean.getProductSn(), "productSn", packBean); DdlPreparedPack.getStringEqualPack(bean.getLotNo(), "lotNo", packBean); - if(!StringUtil.isEmpty(bean.orderBy())){ + if (!StringUtil.isEmpty(bean.orderBy())) { packBean.setOrderByStr(bean.orderBy()); - }else { + } else { DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{"createDatetime"}, packBean); } pager = PagerHelper.getPager(pager, mesProduceSnRDao.findByHqlWhereCount(packBean)); @@ -102,4 +124,95 @@ public class MesYfReportServiceImpl implements IMesYfReportService { return new ListPager<>(resultList, pager); } + + @Override + public List findTraceabilityReport(MesProduceSn mesProduceSn) { + DdlPackBean packBean = getDdlPackBean(mesProduceSn); + //查询条码记录表 + List produceSnList = mesProduceSnService.findMesProduceSn(mesProduceSn.getOrganizeCode(), mesProduceSn.getOrganizeCode()); + Map mesProduceSnMap = produceSnList.stream().collect(Collectors.toMap(MesProduceSn::getPartNo, t -> t)); + //设备加工记录表 + List productionRecordList = mesProductionRecordService.findMesProductionRecord(mesProduceSn.getOrganizeCode(), mesProduceSn.getOrganizeCode()); + Map> productionRecordMap = productionRecordList.stream().collect(Collectors.groupingBy(MesProductionRecord::getPartNo)); + //装配记录表 + List productionAssemblyList = mesProductionAssemblyRepository.findByHqlWhere(packBean); + Map> productionAssemblyMap = CollectionUtils.isEmpty(productionAssemblyList) ? null : productionAssemblyList.stream().collect(Collectors.groupingBy(t -> t.getPartNo() + t.getWorkCenterCode() + t.getWorkCellCode() + t.getEquipmentCode())); + //工位扫描监控日志 + List mesWorkCellScanMonitorLogs = mesWorkCellScanMonitorLogRepository.findByHqlWhere(packBean); + Map> mesWorkCellScanMonitorMap = CollectionUtils.isEmpty(mesWorkCellScanMonitorLogs) ? null : mesWorkCellScanMonitorLogs.stream().collect(Collectors.groupingBy(t -> t.getPartNo() + t.getWorkCenterCode() + t.getWorkCellCode() + t.getEquipmentCode())); + //数据组装 + List mesTraceabilityReportModelList = new ArrayList<>(); + for (Map.Entry produceSnEntry : mesProduceSnMap.entrySet()) { + MesTraceabilityReportModel mesTraceabilityReportModel = new MesTraceabilityReportModel(); + BeanUtils.copyProperties(produceSnEntry.getValue(), mesTraceabilityReportModel); + + if (productionRecordMap.containsKey(produceSnEntry.getKey())) { + List mesProductionRecordList = productionRecordMap.get(produceSnEntry.getKey()); + int duration = 0; + for (MesProductionRecord mesProductionRecord : mesProductionRecordList) { + MesTraceabilityReportDataModel dataModel = new MesTraceabilityReportDataModel(); + BeanUtils.copyProperties(mesProductionRecord, dataModel); + //持续时间 + if (StringUtil.isNotEmpty(dataModel.getStartDateTime()) && StringUtil.isNotEmpty(dataModel.getCompleteDateTime())) { + dataModel.setDuration(getTimeDifference(dataModel.getStartDateTime(), dataModel.getCompleteDateTime())); + dataModel.setDurationStr(dateFormat(dataModel.getDuration())); + duration += dataModel.getDuration(); + } + //装配记录表 + String key = mesProductionRecord.getPartNo() + mesProductionRecord.getWorkCenterCode() + mesProductionRecord.getWorkCellCode() + mesProductionRecord.getEquipmentCode(); + if (!Objects.isNull(productionAssemblyMap) && productionAssemblyMap.containsKey(key)) { + dataModel.setProductionAssemblyList(productionAssemblyMap.get(key)); + } + //工位扫描监控日志 + if (!Objects.isNull(mesWorkCellScanMonitorMap) && mesWorkCellScanMonitorMap.containsKey(key)) { + dataModel.setMesWorkCellScanMonitorLogs(mesWorkCellScanMonitorMap.get(key)); + } + mesTraceabilityReportModel.getMesTraceabilityReportDataModelList().add(dataModel); + } + //开始时间 + mesTraceabilityReportModel.setProduceBegin(mesProductionRecordList.iterator().next().getStartDateTime()); + //结束时间 + if (mesTraceabilityReportModel.getSnStatus() >= MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()) { + mesTraceabilityReportModel.setProduceEnd(mesProductionRecordList.get(mesProductionRecordList.size() - 1).getCompleteDateTime()); + } + mesTraceabilityReportModel.setDurationStr(dateFormat(duration)); + mesTraceabilityReportModel.setDuration(duration); + + } + mesTraceabilityReportModelList.add(mesTraceabilityReportModel); + } + + return mesTraceabilityReportModelList; + } + + private DdlPackBean getDdlPackBean(MesProduceSn mesProduceSn) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesProduceSn.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(mesProduceSn.getProductSn(), "productSn", packBean); + DdlPreparedPack.getOrderBy(null, null, packBean); + return packBean; + } + + public static String dateFormat(int secound) { + StringBuilder time = new StringBuilder(); + SimpleDateFormat destFormat = new SimpleDateFormat(DateUtil.SHORT_FORMAT_HOUR_MINUTE); + try { + // 将时间差转换为小时、分钟和秒 + long diffSeconds = (secound) % 60; + long diffMinutes = (secound / 60) % 60; + long diffHours = secound / (60 * 60); + return destFormat.format(destFormat.parse(time.append(diffHours).append(":").append(diffMinutes).append(":").append(diffSeconds).toString())); + } catch (ParseException var17) { + var17.printStackTrace(); + return null; + } + } + + public int getTimeDifference(String startTime, String endTime) { + try { + return TimeTool.getSecoundsBetweenTime(1, startTime, endTime); + } catch (ParseException var17) { + var17.printStackTrace(); + return 0; + } + } }