From ae7bb006a5a47fc9347cfe5803a27e601ef67652 Mon Sep 17 00:00:00 2001 From: jun Date: Tue, 10 Sep 2024 08:43:48 +0800 Subject: [PATCH 01/25] =?UTF-8?q?=E9=9B=B6=E4=BB=B6=E6=9D=A1=E7=A0=81?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E5=A2=9E=E5=8A=A0custSn=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/apiservice/serviceimpl/report/MesYfReportServiceImpl.java | 1 + 1 file changed, 1 insertion(+) 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 cacafaf..b323582 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 @@ -276,6 +276,7 @@ public class MesYfReportServiceImpl implements IMesYfReportService { private DdlPackBean getMesProduceSnPackBean(MesProduceSn mesProduceSn) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesProduceSn.getOrganizeCode()); DdlPreparedPack.getStringLikerPack(mesProduceSn.getProductSn(), "productSn", packBean); + DdlPreparedPack.getStringLikerPack(mesProduceSn.getCustSn(), "custSn", packBean); DdlPreparedPack.getStringLikerPack(mesProduceSn.getWorkOrderNo(), "workOrderNo", packBean); DdlPreparedPack.getStringBiggerPack(mesProduceSn.getCreateDateTimeStart(), "createDatetime", packBean); DdlPreparedPack.getStringSmallerPack(mesProduceSn.getCreateDateTimeEnd(), "createDatetime", packBean); From 46c4bdded3d5bdf953e271271ec48a75f272d1d2 Mon Sep 17 00:00:00 2001 From: gsz Date: Tue, 10 Sep 2024 13:58:22 +0800 Subject: [PATCH 02/25] =?UTF-8?q?42966=20=E8=AE=BE=E5=A4=87=E5=AE=9E?= =?UTF-8?q?=E6=97=B6=E6=9F=A5=E8=AF=A2=E6=8A=A5=E8=A1=A8-=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E5=8F=98=E9=87=8F=E5=90=8D=E7=A7=B0=E3=80=81=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E5=8F=98=E9=87=8FID=E5=8F=AF=E4=BB=A5=E5=A4=9A?= =?UTF-8?q?=E9=80=89=E6=9F=A5=E8=AF=A2=EF=BC=8C=E8=BE=93=E5=85=A5=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E7=94=A8=E9=80=97=E5=8F=B7=E9=9A=94=E5=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/api/base/IMesPartInspectionService.java | 3 ++ .../base/MesPartInspectionController.java | 23 +++++++++++ .../serviceimpl/base/MesPartInspectionService.java | 46 +++++++++++++++++++++- .../report/MesEquipmentLogDetailService.java | 10 ++++- 4 files changed, 79 insertions(+), 3 deletions(-) diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartInspectionService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartInspectionService.java index b16b48c..d197332 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartInspectionService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartInspectionService.java @@ -1,5 +1,7 @@ package cn.estsh.i3plus.ext.mes.api.base; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspection; /** @@ -10,4 +12,5 @@ import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspection; public interface IMesPartInspectionService extends IBaseMesService { + ListPager queryMesPartInspectionParamByPager(MesPartInspection mesPartInspection, Pager pager); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPartInspectionController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPartInspectionController.java index 1834a31..aa6b659 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPartInspectionController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPartInspectionController.java @@ -1,8 +1,16 @@ package cn.estsh.i3plus.ext.mes.apiservice.controller.base; +import cn.estsh.i3plus.ext.mes.api.base.IMesPartInspectionService; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspection; +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 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; @@ -14,4 +22,19 @@ import org.springframework.web.bind.annotation.RestController; @RequestMapping(MesCommonConstant.MES_YANFEN + "/mesPartInspection") public class MesPartInspectionController extends BaseMesController { + @Autowired + private IMesPartInspectionService mesPartInspectionService; + + @GetMapping("/query-param") + @ApiOperation(value = "查询零件检测") + public ResultBean queryMesPartInspectionParamByPager(MesPartInspection mesPartInspection, Pager pager) { + + try { + return ResultBean.success("查询成功").setListPager(mesPartInspectionService.queryMesPartInspectionParamByPager(mesPartInspection, pager)); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } 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/MesPartInspectionService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartInspectionService.java index 68e037b..b7c1eb0 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartInspectionService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartInspectionService.java @@ -1,17 +1,29 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesPartInspectionService; +import cn.estsh.i3plus.platform.common.util.MesConstWords; 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.MesWorkCenter; import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspection; +import cn.estsh.i3plus.pojo.mes.repository.MesWorkCenterRepository; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.util.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.List; + @Service @Slf4j public class MesPartInspectionService extends BaseMesService implements IMesPartInspectionService { - + @Autowired + private MesWorkCenterRepository mesWorkCenterRDao; @Override protected void setPackQueryBean(MesPartInspection bean, DdlPackBean packBean) { DdlPreparedPack.getStringEqualPack(bean.getSn(), "sn", packBean); @@ -28,4 +40,36 @@ public class MesPartInspectionService extends BaseMesService // DdlPreparedPack.getStringLikerPack(bean.getInspectionDate(), "inspectionDate", packBean); } + @Override + public ListPager queryMesPartInspectionParamByPager(MesPartInspection bean, Pager pager) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(bean.getSn(), "sn", packBean); + DdlPreparedPack.getStringLikerPack(bean.getPartNo(), "partNo", packBean); + DdlPreparedPack.getStringLikerPack(bean.getPartName(), "partName", packBean); + DdlPreparedPack.getStringLikerPack(bean.getWorkCenterCode(), "workCenterCode", packBean); + DdlPreparedPack.getNumEqualPack(bean.getNcStatus(), "ncStatus", packBean); + if (StringUtils.isNotBlank(bean.getCreateDateTimeStart()) && StringUtils.isNotBlank(bean.getCreateDateTimeEnd())) { + DdlPreparedPack.timeBuilder(bean.getCreateDateTimeStart(), bean.getCreateDateTimeEnd(), "createDatetime", packBean, true); + } + if (StringUtils.isNotBlank(bean.getModifyDateTimeStart()) && StringUtils.isNotBlank(bean.getModifyDateTimeEnd())) { + DdlPreparedPack.timeBuilder(bean.getModifyDateTimeStart(), bean.getModifyDateTimeEnd(), "modifyDatetime", packBean, true); + } + pager = PagerHelper.getPager(pager, baseRDao.findByHqlWhereCount(packBean)); + + List resultList = baseRDao.findByHqlWherePage(packBean, pager); + if (!CollectionUtils.isEmpty(resultList)){ + for (MesPartInspection mesPartInspection : resultList) { + if (!StringUtils.isEmpty(mesPartInspection.getWorkCenterCode())){ + MesWorkCenter mesWorkCenter = mesWorkCenterRDao.getByProperty( + new String[]{MesConstWords.ORGANIZE_CODE, MesConstWords.IS_DELETED, MesConstWords.IS_VALID, "workCenterCode"}, + new Object[]{bean.getOrganizeCode(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), + CommonEnumUtil.IS_VAILD.VAILD.getValue(), mesPartInspection.getWorkCenterCode()}); + if (null != mesWorkCenter) { + mesPartInspection.setWorkCenterName(mesWorkCenter.getWorkCenterName()); + } + } + } + } + return new ListPager<>(resultList, pager); + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesEquipmentLogDetailService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesEquipmentLogDetailService.java index 21c9e0a..750a8b2 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesEquipmentLogDetailService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesEquipmentLogDetailService.java @@ -30,9 +30,15 @@ public class MesEquipmentLogDetailService extends BaseMesService 1) { + DdlPreparedPack.getInPackList(Arrays.asList(bean.getEquipVariableName().split(",")), MesExtConstWords.EQUIP_VARIABLE_NAME, packBean); + } else { + DdlPreparedPack.getStringLikerPack(bean.getEquipVariableName(), MesExtConstWords.EQUIP_VARIABLE_NAME, packBean); + } DdlPreparedPack.timeBuilder(bean.getCreateDateTimeStart(), bean.getCreateDateTimeEnd(), MesExtConstWords.CREATE_DATE_TIME, packBean, true); DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{MesExtConstWords.CREATE_DATE_TIME}, packBean); } From 66b81a0fcb0b8d95d860e62fd8107be06c7958cf Mon Sep 17 00:00:00 2001 From: "xiangwei.zhang" <752558143@qq.com> Date: Wed, 11 Sep 2024 09:39:39 +0800 Subject: [PATCH 03/25] =?UTF-8?q?=E6=8A=A5=E5=B7=A5=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/api/base/IMesWorkOrderService.java | 2 + .../apiservice/controller/busi/TestController.java | 23 ++++ .../schedulejob/MesWorkOrderUpdateQtyJob.java | 148 +++++++++++++++++++++ .../serviceimpl/base/MesWorkOrderService.java | 9 ++ 4 files changed, 182 insertions(+) create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/TestController.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderUpdateQtyJob.java diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java index 68b8cb1..d7c9353 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java @@ -36,6 +36,8 @@ public interface IMesWorkOrderService extends IBaseMesService { @ApiOperation("ccscTest") List queryMesWorkOrderProcessToSap(String organizeCode); + MesWorkOrder getWorkOrder(String organizeCode, String workOrderNo); + @ApiOperation("反向冲销") void doReportWorkReversal(WmsProductModel model); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/TestController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/TestController.java new file mode 100644 index 0000000..0b43ca1 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/TestController.java @@ -0,0 +1,23 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.busi; + +import cn.estsh.i3plus.ext.mes.apiservice.schedulejob.MesWorkOrderUpdateQtyJob; +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; + +@RestController +@RequestMapping("/test") +public class TestController { + + + @Autowired + private MesWorkOrderUpdateQtyJob mesWorkOrderUpdateQtyJob; + + @GetMapping("/reportOrder") + @ApiOperation(value = "报工") + public void reportOrder() { + mesWorkOrderUpdateQtyJob.executeMesJob(null, null); + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderUpdateQtyJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderUpdateQtyJob.java new file mode 100644 index 0000000..8a0dc15 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderUpdateQtyJob.java @@ -0,0 +1,148 @@ +package cn.estsh.i3plus.ext.mes.apiservice.schedulejob; + +import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService; +import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderService; +import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderToSapService; +import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob; +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 cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; +import cn.estsh.i3plus.pojo.mes.model.MesWorkOrderModel; +import cn.estsh.i3plus.pojo.mes.repository.MesProductionRecordRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderRepository; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import cn.estsh.impp.framework.boot.init.ApplicationProperties; +import com.google.common.base.Objects; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; +import org.quartz.DisallowConcurrentExecution; +import org.quartz.JobExecutionContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * @Description : 汇总工单给SAP + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/5/11 15:58 + * @Modify: + **/ +// 禁止 JOB 并发执行 +@DisallowConcurrentExecution +@ApiOperation("汇总工单报工数量") +@Service +public class MesWorkOrderUpdateQtyJob extends BaseMesScheduleJob { + + public static final Logger LOGGER = LoggerFactory.getLogger(MesWorkOrderUpdateQtyJob.class); + + private static final long serialVersionUID = 9072058154235836696L; + + @Autowired + private IMesWorkOrderService mesWorkOrderService; + + @Autowired + private MesProductionRecordRepository productionRecordRao; + + @Autowired + private MesWorkOrderRepository workOrderRepository; + + public MesWorkOrderUpdateQtyJob() { + super(MesWorkOrderUpdateQtyJob.class, "汇总工单报工数量"); + this.setMultiInstance(true); + } + + @Override + public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) { + try { + //String jobParam = this.getJobParam(); + String jobParam = "CK01"; + if (StringUtils.isBlank(jobParam)) { + throw new IllegalArgumentException("job参数为空,请检查参数"); + } + String[] organizeCodeList = jobParam.split(","); + LOGGER.info("汇总工单报工数量开始 -----start"); + String userName = "job"; + for (String organizeCode : organizeCodeList) { + List recordList = getUnReportMesProduceSn(organizeCode, null); + if (CollectionUtils.isEmpty(recordList)) { + continue; + } + Map> map = recordList.stream().collect(Collectors.groupingBy(MesProductionRecord::getWorkOrderNo)); + List orders = new ArrayList<>(); + map.forEach((k,v) -> { + MesWorkOrder workOrder = mesWorkOrderService.getWorkOrder(organizeCode, k); + + List productionRecords = getUnReportMesProduceSn(organizeCode, workOrder.getWorkOrderNo()); + + workOrder.setReportedQty(Double.valueOf(productionRecords.size())); + workOrder.setCompleteQty(Double.valueOf(productionRecords.size())); + Double uncompleteQty = workOrder.getQty() - Double.valueOf(productionRecords.size()); + if (uncompleteQty < 0) { + uncompleteQty = 0d; + } + List list = Stream.of(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(), MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue(), MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()).collect(Collectors.toList()); + + if (!list.contains(workOrder.getWorkOrderStatus())) { + workOrder.setSystemSyncStatus(1); + orders.add(workOrder); + LOGGER.info("工单号【{}】状态不是已发布、加工中、已完成,不进行累积"); + } else { + // 如果工单是已发布则修改成加工中 + if (Objects.equal(workOrder.getWorkOrderStatus(), MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue())) { + workOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()); + } + // 如果数量满足,则修改成已完成 + if (workOrder.getQty() <= workOrder.getReportedQty()) { + workOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); + } + + workOrder.setUnCompleteQty(uncompleteQty); + workOrder.setSystemSyncStatus(1); + orders.add(workOrder); + } + }); + workOrderRepository.saveAll(orders); + } + LOGGER.info("汇总工单报工数量结束 ----- end"); + + } catch (Exception e) { + LOGGER.error("汇总工单报工数量结束e:{}", e.toString()); + } + } + + public List getUnReportMesProduceSn(String organizeCode, String workOrderNo) { + + //1.获取生产加工记录production_record表中,report_status为待汇报状态的工单 + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + + DdlPreparedPack.getIsNotNull("workOrderNo", ddlPackBean); + if (!StringUtils.isEmpty(workOrderNo)) { + DdlPreparedPack.getStringEqualPack(workOrderNo, "workOrderNo", ddlPackBean); + } else { + DdlPreparedPack.getNumEqualPack(2,"systemSyncStatus", ddlPackBean); + } + + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_20.getValue(), "reportStatus", ddlPackBean); + + + List mesProductionRecordList = productionRecordRao.findByHqlTopWhere(ddlPackBean, 500); + List recordList = new ArrayList<>(); + + recordList.addAll(mesProductionRecordList); + + return recordList; + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index e75e9e0..0a95afd 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -1312,6 +1312,15 @@ public class MesWorkOrderService extends BaseMesService implements return mesWorkOrderRDao.findByHqlWhere(packBean); } + @Override + public MesWorkOrder getWorkOrder(String organizeCode, String workOrderNo) { +// statusList.add(MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue()); + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + + DdlPreparedPack.getStringEqualPack(workOrderNo, "workOrderNo", packBean); + return mesWorkOrderRDao.getByProperty(packBean); + } + private MesMove createMove(MesPartSap mesPart, String source, String target, String org, String workCenterCode, double qty, String sn, Integer moveType) { MesMove move = new MesMove(); if (!Objects.isNull(mesPart)) { From bc8279cb105b94ab23eb790ccb47d1fd28188183 Mon Sep 17 00:00:00 2001 From: jun Date: Wed, 11 Sep 2024 13:38:48 +0800 Subject: [PATCH 04/25] =?UTF-8?q?43045=20ERP=E7=89=A9=E6=96=99=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E6=94=AF=E6=8C=81=E9=9B=B6=E4=BB=B6=E5=90=8D=E7=A7=B0?= =?UTF-8?q?=E6=A8=A1=E7=B3=8A=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../i3plus/ext/mes/apiservice/serviceimpl/base/MesPartSapService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartSapService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartSapService.java index 21a4d2c..bfd7fbe 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartSapService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartSapService.java @@ -23,8 +23,8 @@ public class MesPartSapService extends BaseMesService implements IMe protected void setPackQueryBean(MesPartSap bean, DdlPackBean packBean) { DdlPreparedPack.getNumEqualPack(bean.getIsTestPiece(), "isTestPiece", packBean); DdlPreparedPack.getStringLikerPack(bean.getPartNo(), "partNo", packBean); - DdlPreparedPack.getStringLikeEqualPack(bean.getPartName(), "partName", packBean); - DdlPreparedPack.getStringLikeEqualPack(bean.getPartStatus(), "partStatus", packBean); + DdlPreparedPack.getStringLikerPack(bean.getPartName(), "partName", packBean); + DdlPreparedPack.getStringLikerPack(bean.getPartStatus(), "partStatus", packBean); } @Override From 9895965c75c0d95ee34240ca7cae51b5aadadb0a Mon Sep 17 00:00:00 2001 From: gsz Date: Fri, 13 Sep 2024 14:17:16 +0800 Subject: [PATCH 05/25] =?UTF-8?q?43050=20=E6=8A=A5=E5=BA=9F=E6=9D=A1?= =?UTF-8?q?=E7=A0=81=E7=9A=84=E6=9F=A5=E8=AF=A2=E4=B8=8E=E6=8A=A5=E8=A1=A8?= =?UTF-8?q?=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/MesPartInspectionService.java | 34 +++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartInspectionService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartInspectionService.java index b7c1eb0..851876d 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartInspectionService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartInspectionService.java @@ -8,8 +8,11 @@ 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.base.util.StringUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesOrg; import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspection; +import cn.estsh.i3plus.pojo.mes.repository.MesOrgRepository; import cn.estsh.i3plus.pojo.mes.repository.MesWorkCenterRepository; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -17,13 +20,18 @@ import org.apache.shiro.util.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; @Service @Slf4j public class MesPartInspectionService extends BaseMesService implements IMesPartInspectionService { @Autowired private MesWorkCenterRepository mesWorkCenterRDao; + + @Autowired + private MesOrgRepository mesOrgRDao; @Override protected void setPackQueryBean(MesPartInspection bean, DdlPackBean packBean) { DdlPreparedPack.getStringEqualPack(bean.getSn(), "sn", packBean); @@ -46,7 +54,11 @@ public class MesPartInspectionService extends BaseMesService DdlPreparedPack.getStringEqualPack(bean.getSn(), "sn", packBean); DdlPreparedPack.getStringLikerPack(bean.getPartNo(), "partNo", packBean); DdlPreparedPack.getStringLikerPack(bean.getPartName(), "partName", packBean); - DdlPreparedPack.getStringLikerPack(bean.getWorkCenterCode(), "workCenterCode", packBean); + //3.增加产线查询条件,选用下拉框,支持多选 + if(!StringUtil.isEmpty(bean.getWorkCenterCode())){ + DdlPreparedPack.getInPackList(Arrays.asList(bean.getWorkCenterCode().split(",")), "workCenterCode", packBean); + } +// DdlPreparedPack.getStringLikerPack(bean.getWorkCenterCode(), "workCenterCode", packBean); DdlPreparedPack.getNumEqualPack(bean.getNcStatus(), "ncStatus", packBean); if (StringUtils.isNotBlank(bean.getCreateDateTimeStart()) && StringUtils.isNotBlank(bean.getCreateDateTimeEnd())) { DdlPreparedPack.timeBuilder(bean.getCreateDateTimeStart(), bean.getCreateDateTimeEnd(), "createDatetime", packBean, true); @@ -54,6 +66,17 @@ public class MesPartInspectionService extends BaseMesService if (StringUtils.isNotBlank(bean.getModifyDateTimeStart()) && StringUtils.isNotBlank(bean.getModifyDateTimeEnd())) { DdlPreparedPack.timeBuilder(bean.getModifyDateTimeStart(), bean.getModifyDateTimeEnd(), "modifyDatetime", packBean, true); } + DdlPackBean packBeanLo = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); +// DdlPreparedPack.getStringLikerPack(bean.getInventoryLocationCode(), "responsibleParty", packBeanLo); + List orgList = mesOrgRDao.findByHqlWhere(packBeanLo); + //2.增加库区查询条件,文本框,支持模糊输入 + if(!StringUtil.isEmpty(bean.getInventoryLocationCode())){ + if (!CollectionUtils.isEmpty(orgList)){ + DdlPreparedPack.getInPackList(orgList.stream().map(MesOrg::getResponsibleParty). + filter(responsibleParty ->bean.getInventoryLocationCode().equals(responsibleParty)).collect(Collectors.toList()), + "responsibleParty", packBean); + } + } pager = PagerHelper.getPager(pager, baseRDao.findByHqlWhereCount(packBean)); List resultList = baseRDao.findByHqlWherePage(packBean, pager); @@ -68,6 +91,15 @@ public class MesPartInspectionService extends BaseMesService mesPartInspection.setWorkCenterName(mesWorkCenter.getWorkCenterName()); } } + //1.页面增加库区字段(库区根据报废选择的责任人关联查询) + if (!StringUtils.isEmpty(mesPartInspection.getResponsibleParty())){ + if (!CollectionUtils.isEmpty(orgList)){ + List collect = orgList.stream().filter(a -> bean.getResponsibleParty().equals(a.getResponsibleParty())).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(collect)){ + mesPartInspection.setInventoryLocationCode(collect.get(0).getInventoryLocationCode()); + } + } + } } } return new ListPager<>(resultList, pager); From 97a1df04d83448c982eb9e7c5447738a4d94533a Mon Sep 17 00:00:00 2001 From: gsz Date: Fri, 13 Sep 2024 16:49:42 +0800 Subject: [PATCH 06/25] =?UTF-8?q?43100=20=E8=AE=BE=E5=A4=87=E7=82=B9?= =?UTF-8?q?=E6=A3=80=E8=AE=BE=E7=BD=AE=E6=98=8E=E7=BB=86=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=90=8E=EF=BC=8C=E6=9C=9F=E6=9C=9B=E5=BA=8F?= =?UTF-8?q?=E5=88=97=E5=8F=B7=E5=8F=AF=E4=BB=A5=E6=AD=A3=E6=8E=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiservice/serviceimpl/base/MesEquipmentSpotCheckDetailService.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentSpotCheckDetailService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentSpotCheckDetailService.java index 9fe35cb..b2e483e 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentSpotCheckDetailService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentSpotCheckDetailService.java @@ -42,6 +42,8 @@ public class MesEquipmentSpotCheckDetailService extends BaseMesService Date: Sat, 14 Sep 2024 17:18:52 +0800 Subject: [PATCH 07/25] =?UTF-8?q?=E5=AF=B9=E8=B4=A6=E5=8D=95=E4=BF=A1?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/api/base/IMesProductionRecordService.java | 6 + .../apiservice/controller/busi/TestController.java | 10 + .../controller/report/MesBusiReportController.java | 16 ++ .../mes/apiservice/schedulejob/MesAccountJob.java | 159 +++++++++++ .../schedulejob/MesGenerateAccountJob.java | 160 +++++++++++ .../base/MesProductionRecordServiceImpl.java | 124 +++++++++ .../serviceimpl/busi/MesSpotCheckOrderService.java | 2 +- .../src/main/resources/application-71.properties | 11 + .../src/main/resources/application-88.properties | 297 +++++++++++++++++++++ .../main/resources/application-cus-71.properties | 10 + .../main/resources/application-cus-88.properties | 64 +++++ .../src/main/resources/application.properties | 2 +- 12 files changed, 859 insertions(+), 2 deletions(-) create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesAccountJob.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesGenerateAccountJob.java create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/resources/application-88.properties create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/resources/application-cus-88.properties 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 index 992ea9c..4dd4f6f 100644 --- 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 @@ -4,6 +4,8 @@ import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; import cn.estsh.i3plus.pojo.mes.model.MesProductionRecordModel; +import cn.estsh.i3plus.pojo.mes.model.report.MesProductAccountModel; +import cn.estsh.i3plus.pojo.mes.model.report.MesProductAccountResModel; import io.swagger.annotations.ApiOperation; import java.util.List; @@ -24,4 +26,8 @@ public interface IMesProductionRecordService extends IBaseMesService queryMesProductionOffLine(MesProductionRecordModel mesProductionRecordModel,Pager pager); + + @ApiOperation(value = "线边库存报表") + ListPager queryProductAccount(MesProductAccountModel productAccountModel, Pager pager); + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/TestController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/TestController.java index 0b43ca1..86bd0d5 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/TestController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/TestController.java @@ -1,5 +1,6 @@ package cn.estsh.i3plus.ext.mes.apiservice.controller.busi; +import cn.estsh.i3plus.ext.mes.apiservice.schedulejob.MesAccountJob; import cn.estsh.i3plus.ext.mes.apiservice.schedulejob.MesWorkOrderUpdateQtyJob; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -15,9 +16,18 @@ public class TestController { @Autowired private MesWorkOrderUpdateQtyJob mesWorkOrderUpdateQtyJob; + @Autowired + private MesAccountJob mesAccountJob; + @GetMapping("/reportOrder") @ApiOperation(value = "报工") public void reportOrder() { mesWorkOrderUpdateQtyJob.executeMesJob(null, null); } + + @GetMapping("/mesAccount") + @ApiOperation(value = "报工") + public void mesAccount() { + mesAccountJob.executeMesJob(null, null); + } } 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 index 19796db..90e3967 100644 --- 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 @@ -8,6 +8,7 @@ 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.i3plus.pojo.mes.model.MesProductionRecordModel; +import cn.estsh.i3plus.pojo.mes.model.report.MesProductAccountModel; import cn.estsh.impp.framework.base.controller.MesBaseController; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; @@ -95,4 +96,19 @@ public class MesBusiReportController extends MesBaseController { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } + + @ApiOperation(value = "对账报表", notes = "对账报表") + @GetMapping("/product/account/query") + public ResultBean queryProductAccount(MesProductAccountModel productAccountModel, Pager pager) { + try { + ValidatorBean.beginValid(productAccountModel) + .notNull("equipmentCode", productAccountModel.getEquipmentCode()); + + return ResultBean.success("查询成功").setListPager(mesProductionRecordService.queryProductAccount(productAccountModel, pager)); + } 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/schedulejob/MesAccountJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesAccountJob.java new file mode 100644 index 0000000..b4f7e06 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesAccountJob.java @@ -0,0 +1,159 @@ +package cn.estsh.i3plus.ext.mes.apiservice.schedulejob; + + +import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob; +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.*; +import cn.estsh.i3plus.pojo.mes.repository.*; +import cn.estsh.impp.framework.boot.init.ApplicationProperties; +import cn.hutool.json.JSONObject; +import com.google.common.base.Objects; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.beanutils.BeanUtils; +import org.mvel2.util.Make; +import org.quartz.DisallowConcurrentExecution; +import org.quartz.JobExecutionContext; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * @author castle, 暂时没有客供品移库 + * @version 1.0 + * @date 2021/2/2 16:44 + **/ +@Slf4j +@DisallowConcurrentExecution +@Component +@ApiOperation("生成对账数据job") +public class MesAccountJob extends BaseMesScheduleJob { + + @Autowired + private MesProductRecordLogRepository mesProductRecordLogRepository; + + @Autowired + private MesProductionRecordRepository mesProductionRecordRepository; + + @Autowired + private MesEquipmentLogDetailRepository mesEquipmentLogDetailRepository; + + @Autowired + private MesEquipmentRepository mesEquipmentRepository; + + @Autowired + private MesMouldMultiCavityRepository mesMouldMultiCavityRepository; + + public MesAccountJob() { + super(MesAccountJob.class, "生成对账数据job"); + } + + @Override + @Transactional + public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) { + JSONObject jsonObject = new JSONObject(); + + jsonObject.putIfAbsent("organizeCode", "CK01"); + jsonObject.putIfAbsent("userName", "job"); + + String organizeCode = jsonObject.getStr("organizeCode"); + String userName = jsonObject.getStr("userName"); + if (null == organizeCode) { + log.error("请添加需要对账的工厂代码!"); + return; + } + if (null == userName) { + userName = "JOB"; + } + List list = Stream.of("760BFoaming").collect(Collectors.toList()); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(list, "equipmentCode", ddlPackBean); + DdlPreparedPack.getNumEqualPack(10, "equipmentType", ddlPackBean); + + List equipments = mesEquipmentRepository.findByHqlWhere(ddlPackBean); + if (CollectionUtils.isEmpty(equipments)) { + return; + } + try { + for (MesEquipment equipment : equipments) { + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(equipment.getEquipmentCode(), "equipmentCode", packBean); + + DdlPreparedPack.getStringSmallerNotEqualPack("2024-09-13 08:00:00", "createDatetime", packBean); + DdlPreparedPack.getStringBiggerPack("2024-09-12 08:00:00", "createDatetime", packBean); + + DdlPreparedPack.getOrderBy("createDatetime", CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), packBean); + List recordLogs = mesProductRecordLogRepository.findByHqlWhere(packBean); + recordLogs = recordLogs.stream().filter(productRecordLog ->(!Objects.equal(productRecordLog.getType(), "record") && !Objects.equal(productRecordLog.getType(), "logdetail")) + || (Objects.equal(productRecordLog.getType(), "logdetail") && StringUtils.isEmpty(productRecordLog.getPartNo()))).collect(Collectors.toList()); + + if (CollectionUtils.isEmpty(recordLogs)) { + return; + } + if (equipment.getEquipmentCode().contains("HT")) { + String partNo = ""; + List productRecordLogList = new ArrayList<>(); + + for (MesProductRecordLog log : recordLogs) { + if (!StringUtils.isEmpty(log.getPartNo()) && log.getEquipVariableName() != null + && !log.getEquipVariableName().contains("InjDataSeries")) { + continue; + } + if (log.getType().equals("logdetail") && log.getEquipVariableName().contains("InjDataSeries")) { + if (StringUtils.isEmpty(log.getEquipVariableValue())) { + continue; + } + DdlPackBean mouldMultipackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(log.getEquipVariableValue(), "mouldNo", mouldMultipackBean); + List mesMouldMultiCavities = mesMouldMultiCavityRepository.findByHqlWhere(mouldMultipackBean); + if (CollectionUtils.isEmpty(mesMouldMultiCavities)) { + continue; + } else { + List partList = mesMouldMultiCavities.stream().map(MesMouldMultiCavity::getPartNo).distinct().collect(Collectors.toList()); + partNo = String.join(",", partList); + log.setPartNo(partNo); + } + } else { + log.setPartNo(partNo); + if (!StringUtils.isEmpty(partNo)) { + productRecordLogList.add(log); + } + } + } + mesProductRecordLogRepository.saveAll(productRecordLogList); + } else { + String partNo = ""; + List productRecordLogs = new ArrayList<>(); + for (MesProductRecordLog log : recordLogs) { + + if (log.getType().equals("monitor") && !StringUtils.isEmpty(log.getPartNo())) { + partNo = log.getPartNo(); + } else { + + log.setPartNo(partNo); + if (!StringUtils.isEmpty(partNo)) { + productRecordLogs.add(log); + } + + } + } + mesProductRecordLogRepository.saveAll(productRecordLogs); + } + } + }catch (Exception e) { + e.printStackTrace(); + } + // + } +} + diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesGenerateAccountJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesGenerateAccountJob.java new file mode 100644 index 0000000..f7f840d --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesGenerateAccountJob.java @@ -0,0 +1,160 @@ +package cn.estsh.i3plus.ext.mes.apiservice.schedulejob; + + +import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob; +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.*; +import cn.estsh.i3plus.pojo.mes.repository.*; +import cn.estsh.impp.framework.boot.init.ApplicationProperties; +import cn.hutool.json.JSONObject; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.beanutils.BeanUtils; +import org.quartz.DisallowConcurrentExecution; +import org.quartz.JobExecutionContext; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * @author castle, 暂时没有客供品移库 + * @version 1.0 + * @date 2021/2/2 16:44 + **/ +@Slf4j +@DisallowConcurrentExecution +@Component +@ApiOperation("生成对账数据job") +public class MesGenerateAccountJob extends BaseMesScheduleJob { + + @Autowired + private MesProductRecordLogRepository mesProductRecordLogRepository; + + @Autowired + private MesProductionRecordRepository mesProductionRecordRepository; + + @Autowired + private MesEquipmentLogDetailRepository mesEquipmentLogDetailRepository; + + @Autowired + private MesEquipmentRepository mesEquipmentRepository; + + @Autowired + private MesMouldMultiCavityRepository mesMouldMultiCavityRepository; + + public MesGenerateAccountJob() { + super(MesGenerateAccountJob.class, "生成对账数据job"); + } + + @Override + @Transactional + public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) { + JSONObject jsonObject = new JSONObject(); + + jsonObject.putIfAbsent("organizeCode", "CK01"); + jsonObject.putIfAbsent("userName", "job"); + + String organizeCode = jsonObject.getStr("organizeCode"); + String userName = jsonObject.getStr("userName"); + if (null == organizeCode) { + log.error("请添加需要对账的工厂代码!"); + return; + } + if (null == userName) { + userName = "JOB"; + } + List list = Stream.of("HT1400", "50THotPress").collect(Collectors.toList()); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(list, "equipmentCode", ddlPackBean); + + List equipments = mesEquipmentRepository.findByHqlWhere(ddlPackBean); + if (CollectionUtils.isEmpty(equipments)) { + return; + } + for (MesEquipment equipment : equipments) { + if (equipment.getEquipmentName().contains("HT")) { + // 插入加工记录 + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(equipment.getEquipmentCode(), "equipmentCode", packBean); + DdlPreparedPack.getStringBiggerNotEqualPack("2024-09-12 00:00:00", "createDatetime", packBean); + + List productionRecords = mesProductionRecordRepository.findByHqlWhere(packBean); + List mesProductRecordLogs = new ArrayList<>(); + if (!CollectionUtils.isEmpty(productionRecords)) { + for (MesProductionRecord productionRecord : productionRecords) { + MesProductRecordLog mesProductRecordLog = new MesProductRecordLog(); + try { + BeanUtils.copyProperties(productionRecord, mesProductRecordLog); + mesProductRecordLog.setType("加工记录"); + mesProductRecordLogs.add(mesProductRecordLog); + } catch (Exception e) { + e.printStackTrace(); + } + } + + } + // 插入opc logdetail数据 + DdlPackBean mesEquipmentLogDetailBean = DdlPackBean.getDdlPackBean(organizeCode); + + DdlPreparedPack.getStringEqualPack(equipment.getEquipmentCode(), "equipmentCode", mesEquipmentLogDetailBean); + DdlPreparedPack.getStringLikeEqualPack("ShotCounter", "equipVariableName", mesEquipmentLogDetailBean); + DdlPreparedPack.getStringBiggerNotEqualPack("2024-09-12 00:00:00", "createDatetime", mesEquipmentLogDetailBean); + + List equipmentLogDetails = mesEquipmentLogDetailRepository.findByHqlWhere(mesEquipmentLogDetailBean); + if (!CollectionUtils.isEmpty(equipmentLogDetails)) { + for (MesEquipmentLogDetail mesEquipmentLogDetail : equipmentLogDetails) { + MesProductRecordLog mesProductRecordLog = new MesProductRecordLog(); + try { + BeanUtils.copyProperties(mesEquipmentLogDetail, mesProductRecordLog); + mesProductRecordLog.setType("设备日志信息"); + mesProductRecordLogs.add(mesProductRecordLog); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + // 更新磨具号数据得到的partNo + DdlPackBean mesEquipmentDetailBean = DdlPackBean.getDdlPackBean(organizeCode); + + DdlPreparedPack.getStringEqualPack(equipment.getEquipmentCode(), "equipmentCode", mesEquipmentDetailBean); + DdlPreparedPack.getStringLikeEqualPack("InjDataSeries", "equipVariableName", mesEquipmentDetailBean); + DdlPreparedPack.getStringSmallerNotEqualPack("2024-09-12 00:00:00", "createDatetime", mesEquipmentDetailBean); + DdlPreparedPack.getOrderBy("createDatetime", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), mesEquipmentDetailBean); + + List equipmentLogDetailList = mesEquipmentLogDetailRepository.findByHqlTopWhere(mesEquipmentLogDetailBean, 20); + if (!CollectionUtils.isEmpty(equipmentLogDetailList)) { + for (MesEquipmentLogDetail mesEquipmentLogDetail : equipmentLogDetails) { + MesProductRecordLog mesProductRecordLog = new MesProductRecordLog(); + try { + BeanUtils.copyProperties(mesEquipmentLogDetail, mesProductRecordLog); + mesProductRecordLog.setType("模具号"); + + DdlPackBean mouldMultipackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(mesEquipmentLogDetail.getEquipVariableValue(),"mouldNo", mouldMultipackBean); + List mesMouldMultiCavities = mesMouldMultiCavityRepository.findByHqlWhere(mouldMultipackBean); + + mesProductRecordLogs.add(mesProductRecordLog); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + mesProductRecordLogRepository.saveAll(mesProductRecordLogs); + + + } + } + // + + } +} + 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 index 7eadfe3..784d26c 100644 --- 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 @@ -4,6 +4,7 @@ import cn.estsh.i3plus.ext.mes.api.base.IMesProductionRecordService; import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesProdRuleNosortCfgDao; import cn.estsh.i3plus.ext.mes.apiservice.utils.BeanUtil; import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; +import cn.estsh.i3plus.ext.mes.pojo.model.MesLoadingListDetailModel; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; @@ -14,16 +15,21 @@ import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingListDetail; import cn.estsh.i3plus.pojo.mes.model.MesProductionRecordModel; +import cn.estsh.i3plus.pojo.mes.model.report.MesProductAccountModel; +import cn.estsh.i3plus.pojo.mes.model.report.MesProductAccountResModel; import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import lombok.extern.slf4j.Slf4j; import org.hibernate.SQLQuery; import org.hibernate.transform.Transformers; +import org.mvel2.util.Make; 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 javax.persistence.EntityManager; import javax.persistence.Query; @@ -105,6 +111,124 @@ public class MesProductionRecordServiceImpl extends BaseMesService queryProductAccount(MesProductAccountModel productAccountModel, Pager pager) { + String sqlStr = "SELECT\n" + + "\tmpr.part_no,\n" + + "\tmpr.equipment_code,\n" + + "\tme.equipment_name,\n" + + "\tme.work_cell_code,\n" + + "\tme.work_center_code,\n" + + "\tmpr.product_count,\n" + + "\tmpr.detail_count\n" + + "\t\n" + + "FROM\n" + + "\t(\n" + + "\tSELECT\n" + + "\t\tequipment_code,\n" + + "\t\tpart_no,\n" + + "\t\tsum( CASE WHEN type = 'record' THEN 1 ELSE 0 END ) product_count,\n" + + "\t\tsum( CASE WHEN type = 'logdetail' THEN 1 ELSE 0 END ) detail_count \n" + + "\tFROM\n" + + "\t\tmes_product_record_log \n" + + "\tWHERE\n" + + "\t\tequipment_code LIKE '%HT%' \n"; + + if (!StringUtils.isEmpty(productAccountModel.getEquipmentCode())) { + sqlStr += " and equipment_code = :equipmentCode "; + } if (!StringUtils.isEmpty(productAccountModel.getPartNo())) { + sqlStr += " and part_no=:partNo "; + } if (!StringUtils.isEmpty(productAccountModel.getStartTime())) { + sqlStr += " and create_date_time >= :startTime "; + } if (!StringUtils.isEmpty(productAccountModel.getEndTime())) { + sqlStr += " and create_date_time < :endTime "; + } + + + sqlStr += + "\t\tAND part_no IS NOT NULL \n" + + "\tGROUP BY\n" + + "\t\tequipment_code,\n" + + "\t\tpart_no \n" + + "\t) mpr\n" + + "\tLEFT JOIN mes_wc_equipment me ON mpr.equipment_code = me.equipment_code \n" + + "\n" + + "\n" + + "UNION\n" + + "SELECT\n" + + "\tmprnc.out_part_no,\n" + + "\tmprnc.equipment_code,\n" + + "\tme.equipment_name,\n" + + "\tme.work_cell_code,\n" + + "\tme.work_center_code,\n" + + "\teqcount.product_count,\n" + + "\teqcount.detail_count \n" + + "FROM\n" + + "\tmes_prod_rule_nosort_cfg mprnc\n" + + "\tLEFT JOIN mes_wc_equipment me ON mprnc.equipment_code = me.equipment_code \n" + + "\tLEFT JOIN (\n" + + "\tSELECT\n" + + "\t\tequipment_code,\n" + + "\t\tpart_no,\n" + + "\t\tsum( CASE WHEN type = 'record' THEN 1 ELSE 0 END ) product_count,\n" + + "\t\tsum(\n" + + "\t\tCASE\n" + + "\t\t\t\t\n" + + "\t\t\t\tWHEN type = 'logdetail' \n" + + "\t\t\t\tAND CATEGORY_LEVEL_TWO IN ( 'Product_finish', 'PART_OK', 'Part_Finish', 'Product_OK' ) \n" + + "\t\t\t\tAND EQUIP_VARIABLE_VALUE = 'True' THEN\n" + + "\t\t\t\t\t1 ELSE 0 \n" + + "\t\t\t\tEND \n" + + "\t\t\t\t) detail_count \n" + + "\t\t\tFROM\n" + + "\t\t\t\tmes_product_record_log \n" + + "\t\t\tWHERE 1 = 1 \n"; + if (!StringUtils.isEmpty(productAccountModel.getEquipmentCode())) { + sqlStr += "\t\t\t and equipment_code = :equipmentCode \n"; + } if (!StringUtils.isEmpty(productAccountModel.getPartNo())) { + sqlStr += "\t\t\t and part_no= :partNo \n"; + } if (!StringUtils.isEmpty(productAccountModel.getStartTime())) { + sqlStr += "\t\t\t and create_date_time >= :startTime \n"; + } if (!StringUtils.isEmpty(productAccountModel.getEndTime())) { + sqlStr += "\t\t\t and create_date_time < :endTime \n"; + } + sqlStr += + "\t\t\t and \n" + + "\t\t\t\tpart_no IS NOT NULL \n" + + "\t\t\tGROUP BY\n" + + "\t\t\t\tequipment_code,\n" + + "\t\t\t\tpart_no \n" + + "\t\t\t) eqcount ON mprnc.equipment_code = eqcount.equipment_code \n" + + "\t AND mprnc.out_part_no = eqcount.part_no where 1=1 "; + if (!StringUtils.isEmpty(productAccountModel.getEquipmentCode())) { + sqlStr += "and mprnc.equipment_code= :equipmentCode "; + } + sqlStr += "\tand eqcount.product_count is not null and eqcount.detail_count is not null"; + + + Query query = entityManager.createNativeQuery(sqlStr); + if (!StringUtils.isEmpty(productAccountModel.getEquipmentCode())) { + query.setParameter("equipmentCode", productAccountModel.getEquipmentCode()); + } + if (!StringUtils.isEmpty(productAccountModel.getPartNo())) { + query.setParameter("partNo", productAccountModel.getPartNo()); + } + if (!StringUtils.isEmpty(productAccountModel.getStartTime())) { + query.setParameter("startTime", productAccountModel.getStartTime()); + } + if (!StringUtils.isEmpty(productAccountModel.getEndTime())) { + query.setParameter("endTime", productAccountModel.getEndTime()); + } + + List list = query.getResultList(); + + + + return new ListPager<>(list,pager); + } + private List getMesProduceSnList(MesProductionRecordModel mesProductionRecordModel) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesProductionRecordModel.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(mesProductionRecordModel.getPartNo(),"partNo",packBean); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java index a67a8d5..810defc 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java @@ -330,7 +330,7 @@ public class MesSpotCheckOrderService extends BaseMesService .setErrorDetail("【%s】点检单状态为【%s】不允许修改,请检查数据", bean.getSpotCheckId(), MesExtEnumUtil.SPOT_CHECK_ORDER_STATUS.valueOfDescription(bean.getStatus())) .build(); } - + bean.setSystemSyncStatus(CommonEnumUtil.FALSE); bean.setIsDeleted(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); ConvertBean.serviceModelUpdate(bean, AuthUtil.getSessionUser().getUserName()); //获取点检方案明细 diff --git a/modules/i3plus-ext-mes-apiservice/src/main/resources/application-71.properties b/modules/i3plus-ext-mes-apiservice/src/main/resources/application-71.properties index 6054a3f..6bfbb74 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/resources/application-71.properties +++ b/modules/i3plus-ext-mes-apiservice/src/main/resources/application-71.properties @@ -240,6 +240,17 @@ spring.shardingsphere.datasource.slave.max-lifetime=7000000 spring.shardingsphere.datasource.slave.connection-test-query=select 1 spring.shardingsphere.datasource.slave.keep-alive-time=3500000 + +impp.pisces1.datasource.isopen = false +#spring.shardingsphere.sharding.tables.mes_equipment_log_detail.actual-data-nodes=ds0.mes_equipment_log_detail_$->{[152,156,300]} +spring.shardingsphere.sharding.tables.mes_equipment_log_detail.actual-data-nodes=ds0.mes_equipment_log_detail_$->{['ck01_152','ck01_156','ck01_300']} +spring.shardingsphere.sharding.tables.mes_equipment_log_detail.table-strategy.inline.sharding-column=equip_id +spring.shardingsphere.sharding.tables.mes_equipment_log_detail.table-strategy.inline.algorithm-expression=mes_equipment_log_detail_$->{equip_id} + +#\u7ED1\u5B9A\u8868 +spring.shardingsphere.sharding.binding-tables[0]=mes_equipment_log,mes_equipment_log_detail + + #impp.write.datasource.driver-class-name=com.mysql.jdbc.Driver #impp.write.datasource.jdbc-url=jdbc:mysql://10.195.88.71:3316/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=true #impp.write.datasource.username=root diff --git a/modules/i3plus-ext-mes-apiservice/src/main/resources/application-88.properties b/modules/i3plus-ext-mes-apiservice/src/main/resources/application-88.properties new file mode 100644 index 0000000..a3ff47e --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/resources/application-88.properties @@ -0,0 +1,297 @@ +#\u9879\u76EE\u7AEF\u53E3 +server.port=8300 +#\u672C\u673Aip +impp.server.ip=localhost +#\u94FE\u8DEF\u8FFD\u8E2Azipkin\u63A7\u5236\u53F0ip\u5730\u5740 +impp.console.ip=http://10.195.88.71:8010 +################ \u529F\u80FD\u914D\u7F6E1 ################ +#mes webservice\u5F00\u5173 +mes.webservice.open=true +#\u5DE5\u4F5C\u533AID,\u4E0D\u540C\u670D\u52A1\u5668\u4E0D\u540CID 0 - 31 +impp.snowflake.work.id=19 +#\u6570\u636E\u4ED3\u533AID 0 - 31 \u6709\u9ED8\u8BA4\u56FA\u5B9AID +impp.snowflake.database.id=11 +#\u82E5\u65E0\u6CD5\u8FDE\u63A5\u6CE8\u518C\u4E2D\u5FC3\uFF0C\u662F\u5426\u9700\u8981\u4E00\u76F4\u68C0\u6D4B\u52A0\u5165 +impp.cluster.fetch=false +#\u670D\u52A1\u6CE8\u518C\u4E2D\u5FC3 +impp.cluster.regist.center=http://10.195.88.71:8000/eureka/ +#\u65E5\u5FD7\u9ED8\u8BA4\u4F7F\u7528log4j2 +logging.config=classpath:log4j2-spring.xml +########\u5E73\u53F0\u76F8\u5173\u53C2\u6570########## +#\u662F\u5426\u5F00\u542Fredis\u7F13\u5B58 +impp.config.redis=true +#\u662F\u5426\u5F00\u542Fmongo +impp.config.mongo=true +#\u662F\u5426\u5F00\u542FrabbitMQ +impp.config.rabbitmq=false +#\u662F\u5426\u5F00\u542Fswagger +impp.config.swagger=true +#\u662F\u5426\u5F00\u542Fwebsocket +impp.config.websocket=true +#\u662F\u5426\u5F00\u542F\u6587\u4EF6\u670D\u52A1 +impp.config.fileserver=fastdfs +#\u662F\u5426\u5BF9\u53D1\u5E03\u670D\u52A1\u8FDB\u884C\u8BE6\u7EC6\u65E5\u5FD7\u5206\u6790 +impp.log.detail.controller=false +#\u662F\u5426\u5BF9\u8C03\u7528\u670D\u52A1\u8FDB\u884C\u8BE6\u7EC6\u65E5\u5FD7\u5206\u6790 +impp.log.detail.service=false +################ \u961F\u5217\u5904\u7406 ################ +#\u7AD9\u5185\u4FE1 +impp.mq.queue.letter=true +#\u90AE\u4EF6 +impp.mq.queue.mail=true +#\u5B9A\u65F6\u4EFB\u52A1 +impp.mq.queue.schedule=true +#SWEB\u901A\u77E5\u5904\u7406\u961F\u5217 +impp.mq.queue.sweb.notice=true +################################ \u5176\u4ED6\u529F\u80FD\u8BBE\u7F6E ################################ +#elasticsearch ip \u591A\u4E2A\u7528\u9017\u53F7\u9694\u5F00 +elasticsearch.ip=10.195.88.71:9200 +################ FastDfs \u914D\u7F6E ################ +#tracker\u670D\u52A1\u5668ip +fastdfs.tracker_servers=10.195.88.71:22122 +# tracker\u7684http\u7AEF\u53E3 +fastdfs.http_tracker_http_port=22122 +# \u4F7F\u7528\u81EA\u5B9A\u4E49\u5DE5\u5177\u83B7\u53D6\u6587\u4EF6\u5C55\u793A\u5730\u5740 +fastdfs.http.ui.host=http://dfs.estsh.com +#\u5BC6\u7801 +#fastdfs.http.secret_key= +#\u8FDE\u63A5\u8D85\u65F6 +fastdfs.connect_timeout_in_seconds=500000 +#\u4F20\u8F93\u8D85\u65F6 +fastdfs.network_timeout_in_seconds=60000000 +fastdfs.charset=UTF-8 +# token \u9632\u76D7\u94FE\u529F\u80FD +fastdfs.http_anti_steal_token=no +#redisIP +redis.hostName=10.195.88.71 +#\u7AEF\u53E3\u53F7 +redis.port=6379 +#\u5982\u679C\u6709\u5BC6\u7801 +redis.password=Admin123! +##\u5176\u4ED6redis\u914D\u7F6E\u9700\u8981\u8C03\u6574\u7684\u52A0\u5728\u6B64\u5904 +################## rabbitMQ\u914D\u7F6E #################### +spring.rabbitmq.vhost=/ +spring.rabbitmq.host=10.195.88.71 +spring.rabbitmq.port=5672 +spring.rabbitmq.username=estsh +spring.rabbitmq.password=estsh123 +##\u5176\u4ED6rabbitMq\u914D\u7F6E\u9700\u8981\u8C03\u6574\u7684\u52A0\u5728\u6B64\u5904 +################ \u529F\u80FD\u914D\u7F6E2 ################ +#\u662F\u5426\u5F00\u542Fredis +mes.redis.open=true +#\u662F\u5426\u5141\u8BB8\u524D\u7AEF\u8DE8\u57DF\u63D0\u4EA4 +impp.web.cross=true +################ \u6388\u6743\u8FC7\u6EE4\u914D\u7F6E ################ +#\u7528\u6237\u6388\u6743\u8FC7\u6EE4\u8DEF\u5F84 +filter.shiro.user.filteruri=/mes/operate/* +#\u7528\u6237\u6388\u6743\u8FC7\u6EE4\u8DEF\u5F84 +filter.shiro.admin.filteruri=/mes/adoperate/* +#\u7528\u6237\u6388\u6743\u8FC7\u6EE4\u8DEF\u5F84 +filter.shiro.saadmin.filteruri=/mes/saoperate/* +################ \u4E91\u914D\u7F6E \uFF08\u4EE5projectName\u4F5C\u4E3A\u5E94\u7528\u540D\uFF09 ################ +#\u662F\u5426\u5F00\u542F\u5FAE\u670D +eureka.client.enabled=false +#\uFF08\u53C2\u6570\u914D\u7F6E\uFF09\u6CE8\u518C\u4E2D\u5FC3\u5730\u5740 -\u300B i3plus-ics\uFF0C\u591A\u4E2A\u7528\u9017\u53F7\u5206\u9694 +eureka.client.service-url.defaultZone=${impp.cluster.regist.center} +#\u533A\u57DF\uFF08\u6E90\u7801\u4E2D\u5305\u542BdefaultZone\uFF0C\u6240\u4EE5\u9ED8\u8BA4\u4F7F\u7528defaultZone\uFF09 +#eureka.client.region=estsh +#eureka.client.service-url.estsh:http://192.168.1.20:8000/eureka/,http://192.168.1.20:8001/eureka/ +################ \u672C\u673A\u5FAE\u670D\u914D\u7F6E ################ +#\u672C\u670D\u52A1\u4E3B\u673Aip\uFF08\u82E5\u591A\u4E2A\u7F51\u5361\uFF0C\u5219\u9700\u8981\u8BBE\u7F6E\u672C\u670D\u52A1ip\uFF09 +eureka.instance.ip-address=${impp.server.ip} +#\u672C\u670D\u52A1\u5B9E\u4F8BID +eureka.instance.instance-id=${impp.server.ip}:${server.port} +#\u672C\u670D\u52A1\u4E3B\u673A\u540D +eureka.instance.hostname=${impp.server.ip} +#\u672C\u670D\u52A1\u72B6\u6001\u9875\u9762 +eureka.instance.status-page-url=http://${impp.server.ip}:${server.port}/swagger-ui.html +#\u5C06\u81EA\u5DF1\u7684IP\u6CE8\u518C\u5230Eureka Server\u3002\u82E5\u4E0D\u914D\u7F6E\u6216\u8BBE\u7F6E\u4E3Afalse\uFF0C\u8868\u793A\u6CE8\u518C\u5FAE\u670D\u52A1\u6240\u5728\u64CD\u4F5C\u7CFB\u7EDF\u7684hostname\u5230Eureka Server +eureka.instance.prefer-ip-address=true +#\u662F\u5426\u8FDB\u884C\u5065\u5EB7\u68C0\u67E5 +eureka.client.healthcheck.enabled=true +################ \u68C0\u6D4B\u673A\u5236 ################ +#\u5FC3\u8DF3\u95F4\u9694\u5468\u671F\uFF0C\u5B95\u673A\u9650\u5236\uFF08\u79D2\uFF09\uFF0C30\u79D2\u6CA1\u53CD\u5E94\u89C6\u4E3A\u5B95\u673A +eureka.instance.lease-expiration-duration-in-seconds=30 +#\u5FC3\u8DF3\u5468\u671F +eureka.instance.lease-renewal-interval-in-seconds=20 +#client\u8FDE\u63A5Eureka\u670D\u52A1\u7AEF\u540E\u7684\u7A7A\u95F2\u7B49\u5F85\u65F6\u95F4\uFF0C\u9ED8\u8BA4\u4E3A30 \u79D2 +eureka.client.eureka-connection-idle-timeout-seconds=1 +#\u6700\u521D\u590D\u5236\u5B9E\u4F8B\u4FE1\u606F\u5230eureka\u670D\u52A1\u5668\u6240\u9700\u7684\u65F6\u95F4\uFF08s\uFF09\uFF0C\u9ED8\u8BA4\u4E3A40\u79D2 +eureka.client.initial-instance-info-replication-interval-seconds=1 +#\u95F4\u9694\u591A\u957F\u65F6\u95F4\u518D\u6B21\u590D\u5236\u5B9E\u4F8B\u4FE1\u606F\u5230eureka\u670D\u52A1\u5668\uFF0C\u9ED8\u8BA4\u4E3A30\u79D2 +eureka.client.instance-info-replication-interval-seconds=1 +#\u4ECEeureka\u670D\u52A1\u5668\u6CE8\u518C\u8868\u4E2D\u83B7\u53D6\u6CE8\u518C\u4FE1\u606F\u7684\u65F6\u95F4\u95F4\u9694\uFF08s\uFF09\uFF0C\u9ED8\u8BA4\u4E3A30\u79D2 +eureka.client.registry-fetch-interval-seconds=1 +################ \u6253\u5F00feign\u7684\u7194\u65AD ################ +feign.hystrix.enabled=true +#\u8BFB\u53D6\u6570\u636E\u65F6\u957F +ribbon.ReadTimeout=100000 +#\u8FDE\u63A5\u65F6\u957F +ribbon.ConnectTimeout=100000 +#\u91CD\u8BD5 +ribbon.maxAutoRetries=2 +#\u54CD\u5E94\u8D85\u8FC7\u65F6\u957F\uFF0C\u8FDB\u884C\u7194\u65AD\uFF08\u7194\u65AD\u8D85\u65F6\u9700\u8981\u5927\u4E8E\u8BFB\u53D6\u65F6\u957F\u53CA\u8FDE\u63A5\u65F6\u957F\uFF09 +hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=150000 +#\u96C6\u7FA4\u540D +eureka.instance.metadata-map.cluster=impp_cluster +################ \u94FE\u8DEF\u8FFD\u8E2A ################ +#\u4F7F\u7528web\u65B9\u5F0F\u4F20\u8F93\u4FE1\u606F +spring.zipkin.sender.type=web +#\u94FE\u8DEF\u8FFD\u8E2A\u670D\u52A1\u7684\u5730\u5740 +spring.zipkin.base-url=${impp.console.ip} +#\u8FFD\u8E2A\u6DF1\u5EA6\uFF0C\u767E\u5206\u6BD4\uFF0C1\u662F\u5168\u90E8 +spring.sleuth.sampler.probability=1.0 +################ \u65E5\u5FD7\u636E\u6E90 ################ +spring.data.mongodb.database=mongoDBSource +spring.data.mongodb.uri=10.195.88.71:27017 +spring.data.mongodb.username=sa +spring.data.mongodb.password=i3plus +spring.data.mongodb.port=27017 +################ \u4E3B\u6570\u636E\u6E90 ################ + +##############\u5B9A\u65F6\u4EFB\u52A1\u6301\u4E45\u5316############## +impp.schedule.open=true +impp.schedule.datasource.driver-class-name=com.mysql.jdbc.Driver +impp.schedule.datasource.jdbc-url=jdbc:mysql://10.195.88.71:3306/impp_i3_schedule?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +impp.schedule.datasource.username=root +impp.schedule.datasource.password=@E#e7@saWE!293**((367 +impp.schedule.datasource.max-connections=20 +#\u5B9A\u65F6\u4EFB\u52A1\u5728\u670D\u52A1\u542F\u52A8\u540E\u591A\u5C11\u79D2\u6267\u884C +impp.schedule.start.after-second=20 +#\u662F\u5426\u96C6\u7FA4\u90E8\u7F72 +impp.schedule.datasource.is-clustered=true +#\u6267\u884C\u68C0\u6D4B\uFF08\u6BEB\u79D2\uFF09\uFF0C\u82E5\u5B95\u673A\u7531\u5176\u4ED6\u5B9A\u65F6\u5668\u6267\u884C +impp.schedule.datasource.cluster-checkin-interval=30000 +#\u7EBF\u7A0B\u6570 +impp.schedule.thread-count=10 +#\u7EBF\u7A0B\u4F18\u5148\u7EA7\uFF081-10\uFF09\u9ED8\u8BA4\u4E3A5 +impp.schedule.thread-priority=5 +################ \u6570\u636E\u6C60\u8BBE\u7F6E ################ +## \u8FDE\u63A5\u6C60\u6700\u5927\u8FDE\u63A5\u6570\uFF0C\u9ED8\u8BA4\u662F10 +spring.datasource.hikari.maximum-pool-size=100 +## \u6700\u5C0F\u7A7A\u95F2\u8FDE\u63A5\u6570\u91CF +spring.datasource.hikari.minimum-idle=10 +## \u7A7A\u95F2\u8FDE\u63A5\u5B58\u6D3B\u6700\u5927\u65F6\u95F4\uFF0C\u9ED8\u8BA4600000\uFF0810\u5206\u949F\uFF09 +spring.datasource.hikari.idle-timeout=600000 +## \u6B64\u5C5E\u6027\u63A7\u5236\u6C60\u4E2D\u8FDE\u63A5\u7684\u6700\u957F\u751F\u547D\u5468\u671F\uFF0C\u503C0\u8868\u793A\u65E0\u9650\u751F\u547D\u5468\u671F\uFF0C\u9ED8\u8BA41800000\u537330\u5206\u949F +spring.datasource.hikari.max-lifetime=1800000 +## \u6570\u636E\u5E93\u8FDE\u63A5\u8D85\u65F6\u65F6\u95F4,\u9ED8\u8BA430\u79D2\uFF0C\u537330000 +spring.datasource.hikari.connection-timeout=30000 +################ JPA\u8BBE\u7F6E\u8BBE\u7F6E ################ +# mysql +spring.jpa.database=MYSQL +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect +##Sql-server## +#spring.jpa.database=sql_server +#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.SQLServerDialect +##oracle## +#spring.jpa.database=oracle +#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect +# mysql +spring.datasource.validationQuery=SELECT 1 +##Sql-server## +# spring.datasource.validationQuery=SELECT 1 +##oracle## +# spring.datasource.validationQuery=SELECT 1 FROM DUAL +#ImprovedNamingStrategy / physical_naming_strategy java\u5C5E\u6027\u6620\u5C04\u5230\u6570\u636E\u5E93\u5B57\u6BB5\u65F6\u547D\u540D\u89C4\u5219 +# spring.jpa.properties.hibernate.physical_naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy/org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl +#\u8868\u5173\u7CFBcreate,create-drop,update,validate +spring.jpa.properties.hibernate.hbm2ddl.auto=none +#\u662F\u5426\u663E\u793Asql +spring.jpa.show-sql=true +################ \u6388\u6743\u914D\u7F6E ################ +slm.api.password=4C9479EBEFA6FA6E232EF25EFA49C4D2 +slm.app.id=20190513 +###################\uFFFD\uFFFD\u013F\uFFFD\uFFFD\uFFFD\u077F\uFFFD\u02B5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00B7\uFFFD\uFFFD################################################## +project.entity.path=cn.estsh.i3plus.pojo + + +############################????####################################### +###spring.shardingsphere.datasource.names=master,slave +spring.shardingsphere.datasource.names=master,slave +##?? +spring.shardingsphere.datasource.master.type=com.zaxxer.hikari.HikariDataSource +spring.shardingsphere.datasource.master.driver-class-name= com.mysql.jdbc.Driver +spring.shardingsphere.datasource.master.JdbcUrl=jdbc:mysql://10.193.8.88:3306/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +spring.shardingsphere.datasource.master.username=root +spring.shardingsphere.datasource.master.password=@E#e7@saWE!293**((367 + +spring.shardingsphere.datasource.master.maximum-pool-size=200 +spring.shardingsphere.datasource.master.minimum-idle=200 +spring.shardingsphere.datasource.master.idle-timeout=500000 +spring.shardingsphere.datasource.master.connection-timeout=600000 +spring.shardingsphere.datasource.master.max-lifetime=7000000 +spring.shardingsphere.datasource.master.connection-test-query=select 1 +spring.shardingsphere.datasource.master.keep-alive-time=3500000 + + +##?? +spring.shardingsphere.datasource.slave.type=com.zaxxer.hikari.HikariDataSource +spring.shardingsphere.datasource.slave.driver-class-name= com.mysql.jdbc.Driver +spring.shardingsphere.datasource.slave.JdbcUrl=jdbc:mysql://10.193.8.88:3306/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +spring.shardingsphere.datasource.slave.username=root +spring.shardingsphere.datasource.slave.password=@E#e7@saWE!293**((367 + +spring.shardingsphere.datasource.slave.maximum-pool-size=200 +spring.shardingsphere.datasource.slave.minimum-idle=200 +spring.shardingsphere.datasource.slave.idle-timeout=500000 +spring.shardingsphere.datasource.slave.connection-timeout=600000 +spring.shardingsphere.datasource.slave.max-lifetime=7000000 +spring.shardingsphere.datasource.slave.connection-test-query=select 1 +spring.shardingsphere.datasource.slave.keep-alive-time=3500000 + + +impp.pisces1.datasource.isopen = false +#spring.shardingsphere.sharding.tables.mes_equipment_log_detail.actual-data-nodes=ds0.mes_equipment_log_detail_$->{[152,156,300]} +spring.shardingsphere.sharding.tables.mes_equipment_log_detail.actual-data-nodes=ds0.mes_equipment_log_detail_$->{['ck01_152','ck01_156','ck01_300']} +spring.shardingsphere.sharding.tables.mes_equipment_log_detail.table-strategy.inline.sharding-column=equip_id +spring.shardingsphere.sharding.tables.mes_equipment_log_detail.table-strategy.inline.algorithm-expression=mes_equipment_log_detail_$->{equip_id} + +#\u7ED1\u5B9A\u8868 +spring.shardingsphere.sharding.binding-tables[0]=mes_equipment_log,mes_equipment_log_detail + + +#impp.write.datasource.driver-class-name=com.mysql.jdbc.Driver +#impp.write.datasource.jdbc-url=jdbc:mysql://10.195.88.71:3316/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=true +#impp.write.datasource.username=root +#impp.write.datasource.password=estsh123 +#impp.read.datasource.type=com.zaxxer.hikari.HikariDataSource +#impp.read.datasource.driver-class-name=com.mysql.jdbc.Driver +#impp.read.datasource.jdbc-url=jdbc:mysql://10.195.88.71:3336/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=true +#impp.read.datasource.username=root +#impp.read.datasource.password=estsh123 + + +##?????? +spring.shardingsphere.sharding.master-slave-rules.ds0.master-data-source-name=master +spring.shardingsphere.sharding.master-slave-rules.ds0.slave-data-source-names=slave +#??datasource ???????????????? +#??? gg +#spring.shardingsphere.sharding.default-data-source-name=ds0 +#??????????sql?? +spring.shardingsphere.props.sql.show = false + +spring.shardingsphere.props.max.connections.size.per.query = 10 + +impp.schedule.scheduleType=xxljob +xxl.job.admin.addresses=http://10.195.88.71:10010/xxl-job-admin +### xxl-job, access token +xxl.job.accessToken= +### xxl-job executor appname +#xxl.job.executor.appname=${project.name} +xxl.job.executor.appname=i3mes-castle +### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null +xxl.job.executor.address= +### xxl-job executor server-info +xxl.job.executor.ip=172.24.96.1 +#xxl.job.executor.ip= +#xxl.job.executor.port=9999 +xxl.job.executor.port=8888 +### xxl-job executor log-path +xxl.job.executor.logpath= +### xxl-job executor log-retention-days +xxl.job.executor.logretentiondays=10 +xxl.job.basePackage=cn.estsh.i3plus.ext.mes.apiservice.schedulejob + + +impp.app.ext.base-packages=cn.estsh.i3plus.ext.mes.apiservice \ No newline at end of file diff --git a/modules/i3plus-ext-mes-apiservice/src/main/resources/application-cus-71.properties b/modules/i3plus-ext-mes-apiservice/src/main/resources/application-cus-71.properties index 6f19115..0d948a1 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/resources/application-cus-71.properties +++ b/modules/i3plus-ext-mes-apiservice/src/main/resources/application-cus-71.properties @@ -21,6 +21,8 @@ impp.yfas.datasource.jdbc-url=jdbc:mysql://10.195.88.71:3316/impp_i3_wms_sap_if? impp.yfas.datasource.username=root impp.yfas.datasource.password=estsh123 + + #\u6570\u636E\u6E90\u7684\u522B\u540D #impp.wms.datasource.isopen=true #impp.wms.datasource.alias=wmsDataSource @@ -45,6 +47,14 @@ impp.pisces.datasource.jdbc-url=jdbc:sqlserver://172.28.239.113:1433;SelectMetho impp.pisces.datasource.username=sa impp.pisces.datasource.password=sahasnopassword +#Pisces数据源 +impp.pisces1.datasource.isopen=true +impp.pisces1.datasource.alias=piscesDataSource +impp.pisces1.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver +impp.pisces1.datasource.jdbc-url=jdbc:sqlserver://172.28.239.113:1433;SelectMethod=cursor;DatabaseName=PiscesTest;applicationIntent=schemaOnly;selectedSchema=MES +impp.pisces1.datasource.username=sa +impp.pisces1.datasource.password=sahasnopassword + #Pisces中间表数据源 impp.pisces1.datasource.isopen=true impp.pisces1.datasource.alias=pisces1DataSource diff --git a/modules/i3plus-ext-mes-apiservice/src/main/resources/application-cus-88.properties b/modules/i3plus-ext-mes-apiservice/src/main/resources/application-cus-88.properties new file mode 100644 index 0000000..9e9f96e --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/resources/application-cus-88.properties @@ -0,0 +1,64 @@ +#\u5B89\u9053\u62D3\u6570\u636E\u6E90 +impp.yfas.datasource.isopen=true +#WMS\u6570\u636E\u6E90 +impp.mes.datasource.isopen=true +#\u6570\u636E\u6E90\u7684\u522B\u540D +impp.mes.datasource.alias=mesDataSource +impp.mes.datasource.driver-class-name=com.mysql.jdbc.Driver +impp.mes.datasource.jdbc-url=jdbc:mysql://10.195.88.71:3306/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=true +#impp.mes.datasource.jdbc-url=jdbc:sqlserver://139.224.200.147:20037;DatabaseName=impp_i3_mes; +impp.mes.datasource.username=root +#impp.mes.datasource.password=Test123! +impp.mes.datasource.password=estsh123 +#Admin123! + + +#\u6570\u636E\u6E90\u7684\u522B\u540D +impp.yfas.datasource.alias=yfasDataSource +impp.yfas.datasource.driver-class-name=com.mysql.jdbc.Driver +impp.yfas.datasource.jdbc-url=jdbc:mysql://10.195.88.71:3316/impp_i3_wms_sap_if?autoReconnect=true&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=true +#impp.yfas.datasource.jdbc-url=jdbc:sqlserver://139.224.200.147:20037;DatabaseName=impp_i3_mes; +impp.yfas.datasource.username=root +impp.yfas.datasource.password=estsh123 + + + +#\u6570\u636E\u6E90\u7684\u522B\u540D +#impp.wms.datasource.isopen=true +#impp.wms.datasource.alias=wmsDataSource +#impp.wms.datasource.driver-class-name=com.mysql.jdbc.Driver +#impp.wms.datasource.jdbc-url=jdbc:mysql://dbmaster:3306/impp_i3_wms?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +#impp.wms.datasource.username=root +#impp.wms.datasource.password=estsh123 +# +##SWEB?????????? +#impp.sweb.datasource.isopen=true +#impp.sweb.datasource.alias=swebDataSource +#impp.sweb.datasource.driver-class-name=com.mysql.jdbc.Driver +#impp.sweb.datasource.jdbc-url=jdbc:mysql://dbmaster:3306/impp_i3_wms?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +#impp.sweb.datasource.username=root +#impp.sweb.datasource.password=estsh123 + +#PiscesԴ +impp.pisces.datasource.isopen=true +impp.pisces.datasource.alias=piscesDataSource +impp.pisces.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver +impp.pisces.datasource.jdbc-url=jdbc:sqlserver://172.28.239.113:1433;SelectMethod=cursor;DatabaseName=PiscesTest;applicationIntent=schemaOnly;selectedSchema=MES +impp.pisces.datasource.username=sa +impp.pisces.datasource.password=sahasnopassword + +#PiscesԴ +impp.pisces1.datasource.isopen=true +impp.pisces1.datasource.alias=piscesDataSource +impp.pisces1.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver +impp.pisces1.datasource.jdbc-url=jdbc:sqlserver://172.28.239.113:1433;SelectMethod=cursor;DatabaseName=PiscesTest;applicationIntent=schemaOnly;selectedSchema=MES +impp.pisces1.datasource.username=sa +impp.pisces1.datasource.password=sahasnopassword + +#PiscesмԴ +impp.pisces1.datasource.isopen=true +impp.pisces1.datasource.alias=pisces1DataSource +impp.pisces1.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver +impp.pisces1.datasource.jdbc-url=jdbc:sqlserver://172.28.16.73:1433;SelectMethod=cursor;DatabaseName=YFMES_DATACENTER;applicationIntent=schemaOnly;selectedSchema=MES +impp.pisces1.datasource.username=sa +impp.pisces1.datasource.password=sahasnopassword \ No newline at end of file diff --git a/modules/i3plus-ext-mes-apiservice/src/main/resources/application.properties b/modules/i3plus-ext-mes-apiservice/src/main/resources/application.properties index d72832f..1980f4d 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/resources/application.properties +++ b/modules/i3plus-ext-mes-apiservice/src/main/resources/application.properties @@ -1,7 +1,7 @@ #\u9879\u76EE\u540D\u79F0 spring.application.name=i3mes #\u4F7F\u7528\u914D\u7F6E -spring.profiles.active=docker,cus-docker +spring.profiles.active=88,cus-88 ######### \u81EA\u5B9A\u4E49\u53C2\u6570 ######### #\u9879\u76EE\u63CF\u8FF0\u4FE1\u606F\uFF08swagger\u4E2D\u663E\u5F0F\uFF09\uFF0C\u4E2D\u6587\u4F7F\u7528uncode\u8F6C desc.application.name=\u751F\u4EA7\u6267\u884C\u7CFB\u7EDF From 111b90fcb30e76bf4e220db3503a7e2eaa7928b4 Mon Sep 17 00:00:00 2001 From: "xiangwei.zhang" <752558143@qq.com> Date: Mon, 16 Sep 2024 18:45:56 +0800 Subject: [PATCH 08/25] =?UTF-8?q?=E5=AF=B9=E8=B4=A6=E5=8D=95=E4=BF=A1?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/api/base/IMesProductionRecordService.java | 5 + .../apiservice/controller/busi/TestController.java | 10 + .../controller/report/MesBusiReportController.java | 13 +- .../report/MesProductAccountController.java | 12 + .../mes/apiservice/schedulejob/MesAccountJob.java | 19 +- .../schedulejob/MesGenerateAccountJob.java | 280 +++++++++---- .../base/MesProductionRecordServiceImpl.java | 448 ++++++++++++++++++++- 7 files changed, 693 insertions(+), 94 deletions(-) create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesProductAccountController.java 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 index 4dd4f6f..715cc85 100644 --- 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 @@ -30,4 +30,9 @@ public interface IMesProductionRecordService extends IBaseMesService queryProductAccount(MesProductAccountModel productAccountModel, Pager pager); + @ApiOperation(value = "线边库存报表") + List queryProductAccount(MesProductAccountModel productAccountModel); + + @ApiOperation(value = "线边库存报表") + List transferAccount(List list,MesProductAccountModel productAccountModel); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/TestController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/TestController.java index 86bd0d5..1dd91c9 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/TestController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/TestController.java @@ -1,6 +1,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.controller.busi; import cn.estsh.i3plus.ext.mes.apiservice.schedulejob.MesAccountJob; +import cn.estsh.i3plus.ext.mes.apiservice.schedulejob.MesGenerateAccountJob; import cn.estsh.i3plus.ext.mes.apiservice.schedulejob.MesWorkOrderUpdateQtyJob; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -19,6 +20,9 @@ public class TestController { @Autowired private MesAccountJob mesAccountJob; + @Autowired + private MesGenerateAccountJob mesGenerateAccountJob; + @GetMapping("/reportOrder") @ApiOperation(value = "报工") public void reportOrder() { @@ -30,4 +34,10 @@ public class TestController { public void mesAccount() { mesAccountJob.executeMesJob(null, null); } + + @GetMapping("/generateMesAccount") + @ApiOperation(value = "generateMesAccount") + public void generateMesAccount() { + mesGenerateAccountJob.executeMesJob(null, null); + } } 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 index 90e3967..4e1857d 100644 --- 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 @@ -9,6 +9,7 @@ import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; import cn.estsh.i3plus.pojo.mes.model.MesProductionRecordModel; import cn.estsh.i3plus.pojo.mes.model.report.MesProductAccountModel; +import cn.estsh.i3plus.pojo.mes.model.report.MesProductAccountResModel; import cn.estsh.impp.framework.base.controller.MesBaseController; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; @@ -21,6 +22,8 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** * @Description : Mes业务报表 * @Reference : @@ -103,8 +106,16 @@ public class MesBusiReportController extends MesBaseController { try { ValidatorBean.beginValid(productAccountModel) .notNull("equipmentCode", productAccountModel.getEquipmentCode()); + /*productAccountModel.setStartTime("2024-09-12 08:00:00"); + productAccountModel.setEndTime("2024-09-13 08:00:00"); + productAccountModel.setEquipmentCode("760BFoaming"); + productAccountModel.setPartNo("Z0020667");*/ + + List mesProductAccountResModels = mesProductionRecordService.queryProductAccount(productAccountModel); + + List mesProductAccountResModelsRes = mesProductionRecordService.transferAccount(mesProductAccountResModels,productAccountModel); - return ResultBean.success("查询成功").setListPager(mesProductionRecordService.queryProductAccount(productAccountModel, pager)); + return ResultBean.success("查询成功").setResultList(mesProductAccountResModelsRes); } catch (ImppBusiException e) { return ResultBean.fail(e); } catch (Exception e) { diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesProductAccountController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesProductAccountController.java new file mode 100644 index 0000000..3995b0d --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesProductAccountController.java @@ -0,0 +1,12 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.report; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Api("Mes业务报表") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/") +public class MesProductAccountController { +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesAccountJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesAccountJob.java index b4f7e06..d0764a2 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesAccountJob.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesAccountJob.java @@ -2,6 +2,8 @@ package cn.estsh.i3plus.ext.mes.apiservice.schedulejob; import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob; +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.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; @@ -23,10 +25,14 @@ import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; +import static cn.estsh.i3plus.mes.apiservice.util.DateUtil.FORMAT_HH_MM; +import static cn.estsh.i3plus.mes.apiservice.util.DateUtil.FORMAT_YYYY_MM_DD; + /** * @author castle, 暂时没有客供品移库 * @version 1.0 @@ -74,9 +80,14 @@ public class MesAccountJob extends BaseMesScheduleJob { if (null == userName) { userName = "JOB"; } - List list = Stream.of("760BFoaming").collect(Collectors.toList()); + Date yesterday = TimeTool.getDateBefore(new Date(), 1); + //String startDateTime = FORMAT_YYYY_MM_DD.format(yesterday) + " " + " 07:50:00"; + //String endDateTime = TimeTool.getToday() + " 08:00:00"; + String startDateTime = "2024-09-15 07:50:00"; + String endDateTime = "2024-09-16 08:00:00"; + // List list = Stream.of("760BFoaming").collect(Collectors.toList()); DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getInPackList(list, "equipmentCode", ddlPackBean); + //DdlPreparedPack.getInPackList(list, "equipmentCode", ddlPackBean); DdlPreparedPack.getNumEqualPack(10, "equipmentType", ddlPackBean); List equipments = mesEquipmentRepository.findByHqlWhere(ddlPackBean); @@ -89,8 +100,8 @@ public class MesAccountJob extends BaseMesScheduleJob { DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getStringEqualPack(equipment.getEquipmentCode(), "equipmentCode", packBean); - DdlPreparedPack.getStringSmallerNotEqualPack("2024-09-13 08:00:00", "createDatetime", packBean); - DdlPreparedPack.getStringBiggerPack("2024-09-12 08:00:00", "createDatetime", packBean); + DdlPreparedPack.getStringSmallerNotEqualPack(endDateTime, "createDatetime", packBean); + DdlPreparedPack.getStringBiggerPack(startDateTime, "createDatetime", packBean); DdlPreparedPack.getOrderBy("createDatetime", CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), packBean); List recordLogs = mesProductRecordLogRepository.findByHqlWhere(packBean); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesGenerateAccountJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesGenerateAccountJob.java index f7f840d..2fd1566 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesGenerateAccountJob.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesGenerateAccountJob.java @@ -1,14 +1,18 @@ package cn.estsh.i3plus.ext.mes.apiservice.schedulejob; +import cn.estsh.i3plus.ext.mes.api.base.IMesProductionRecordService; import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob; 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.*; +import cn.estsh.i3plus.pojo.mes.model.report.MesProductAccountModel; +import cn.estsh.i3plus.pojo.mes.model.report.MesProductAccountResModel; import cn.estsh.i3plus.pojo.mes.repository.*; import cn.estsh.impp.framework.boot.init.ApplicationProperties; import cn.hutool.json.JSONObject; +import com.google.common.base.Objects; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.beanutils.BeanUtils; @@ -18,6 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; import java.util.ArrayList; import java.util.List; @@ -50,6 +55,9 @@ public class MesGenerateAccountJob extends BaseMesScheduleJob { @Autowired private MesMouldMultiCavityRepository mesMouldMultiCavityRepository; + @Autowired + private IMesProductionRecordService mesProductionRecordService; + public MesGenerateAccountJob() { super(MesGenerateAccountJob.class, "生成对账数据job"); } @@ -71,90 +79,222 @@ public class MesGenerateAccountJob extends BaseMesScheduleJob { if (null == userName) { userName = "JOB"; } - List list = Stream.of("HT1400", "50THotPress").collect(Collectors.toList()); - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getInPackList(list, "equipmentCode", ddlPackBean); - - List equipments = mesEquipmentRepository.findByHqlWhere(ddlPackBean); - if (CollectionUtils.isEmpty(equipments)) { - return; + /** + * 760B_A58_ReMaoHan 只有finish信号 + * 760BFoaming + * 760B_LaserCutting + * ZhenKong + */ + List equimentList = Stream.of("760B_A58_ReMaoHan","760BFoaming","760B_LaserCutting","ZhenKong").collect(Collectors.toList()); + MesProductAccountModel productAccountModel = new MesProductAccountModel(); + productAccountModel.setStartTime("2024-09-12 08:00:00"); + productAccountModel.setEndTime("2024-09-13 08:00:00"); + productAccountModel.setEquipmentCode("HT2400APrinter_MixUA"); + productAccountModel.setPartNo("Y0556325-01"); + List mesProductAccountResModels = mesProductionRecordService.queryProductAccount(productAccountModel); + if (!CollectionUtils.isEmpty(mesProductAccountResModels)) { + mesProductAccountResModels = mesProductAccountResModels.stream().filter(mesProductAccountResModel -> mesProductAccountResModel.getDetailCount().compareTo(mesProductAccountResModel.getProductCount())> 0) .collect(Collectors.toList()); } - for (MesEquipment equipment : equipments) { - if (equipment.getEquipmentName().contains("HT")) { - // 插入加工记录 + if (!CollectionUtils.isEmpty(mesProductAccountResModels)) { + for (MesProductAccountResModel mesProductAccountResModel : mesProductAccountResModels) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(equipment.getEquipmentCode(), "equipmentCode", packBean); - DdlPreparedPack.getStringBiggerNotEqualPack("2024-09-12 00:00:00", "createDatetime", packBean); - - List productionRecords = mesProductionRecordRepository.findByHqlWhere(packBean); - List mesProductRecordLogs = new ArrayList<>(); - if (!CollectionUtils.isEmpty(productionRecords)) { - for (MesProductionRecord productionRecord : productionRecords) { - MesProductRecordLog mesProductRecordLog = new MesProductRecordLog(); - try { - BeanUtils.copyProperties(productionRecord, mesProductRecordLog); - mesProductRecordLog.setType("加工记录"); - mesProductRecordLogs.add(mesProductRecordLog); - } catch (Exception e) { - e.printStackTrace(); - } - } + DdlPreparedPack.getStringEqualPack(mesProductAccountResModel.getEquipmentCode(), "equipmentCode", packBean); + + DdlPreparedPack.getStringSmallerNotEqualPack(productAccountModel.getEndTime(), "createDatetime", packBean); + DdlPreparedPack.getStringBiggerPack(productAccountModel.getStartTime(), "createDatetime", packBean); + DdlPreparedPack.getStringEqualPack(mesProductAccountResModel.getPartNo(), "partNo", packBean); + DdlPreparedPack.getOrderBy("createDatetime", CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), packBean); + List recordLogs = mesProductRecordLogRepository.findByHqlWhere(packBean); + if (mesProductAccountResModel.getEquipmentCode().contains("HT")) { + // 1 判断2个 shotcount之间有没有加工记录,如果没有,就需要看 设备是不是192,然后看是否是网络原因 + + String reason = handleHT(recordLogs); + mesProductAccountResModel.setErrorReason(reason); + } else if (equimentList.contains(mesProductAccountResModel.getEquipmentCode())) { + // 1 判断2个 shotcount之间有没有加工记录,如果没有,就需要看 设备是不是192,然后看是否是网络原因 + String reason =handleNotHT(recordLogs); + mesProductAccountResModel.setErrorReason(reason); + } else { + String reason =handleNotHTAndHasRelease(recordLogs); + mesProductAccountResModel.setErrorReason(reason); } - // 插入opc logdetail数据 - DdlPackBean mesEquipmentLogDetailBean = DdlPackBean.getDdlPackBean(organizeCode); - - DdlPreparedPack.getStringEqualPack(equipment.getEquipmentCode(), "equipmentCode", mesEquipmentLogDetailBean); - DdlPreparedPack.getStringLikeEqualPack("ShotCounter", "equipVariableName", mesEquipmentLogDetailBean); - DdlPreparedPack.getStringBiggerNotEqualPack("2024-09-12 00:00:00", "createDatetime", mesEquipmentLogDetailBean); - - List equipmentLogDetails = mesEquipmentLogDetailRepository.findByHqlWhere(mesEquipmentLogDetailBean); - if (!CollectionUtils.isEmpty(equipmentLogDetails)) { - for (MesEquipmentLogDetail mesEquipmentLogDetail : equipmentLogDetails) { - MesProductRecordLog mesProductRecordLog = new MesProductRecordLog(); - try { - BeanUtils.copyProperties(mesEquipmentLogDetail, mesProductRecordLog); - mesProductRecordLog.setType("设备日志信息"); - mesProductRecordLogs.add(mesProductRecordLog); - } catch (Exception e) { - e.printStackTrace(); - } + } + } + } + + private String handleNotHT(List recordLogs) { + int result = 0; + String startTime = ""; + String endTime = ""; + int errorCount = 0; + String reason = ""; + String reasonOffline = "【%s】到【%s】,客户端下线,导致【%s】个完成信号丢失"; + String reasonQuality = "【%s】到【%s】设备信号质量有问题,导致【%s】个完成信号丢失"; + String reasonBypass = "【%s】到【%s】设备信号Bypass,【%s】个完成信号丢失"; + boolean bypassFlag = false; + + List finishList = Stream.of("Product_finish","PART_OK","Part_Finish","Product_OK").collect(Collectors.toList()); + + for (MesProductRecordLog recordLog : recordLogs) { + if (Objects.equal(recordLog.getCategoryLevelTwo(), "BYPASS")) { + if (Objects.equal(recordLog.getEquipVariableValue(), "True")) { + if (StringUtils.isEmpty(startTime)) { + startTime = recordLog.getCreateDatetime(); + } + endTime = recordLog.getCreateDatetime(); + // 每次都取反,第一次是打开,那第二次就是关闭了 + bypassFlag = true; + continue; + } else { + if (bypassFlag) { + bypassFlag = false; + errorCount = 0; + continue; } } - // 更新磨具号数据得到的partNo - DdlPackBean mesEquipmentDetailBean = DdlPackBean.getDdlPackBean(organizeCode); - - DdlPreparedPack.getStringEqualPack(equipment.getEquipmentCode(), "equipmentCode", mesEquipmentDetailBean); - DdlPreparedPack.getStringLikeEqualPack("InjDataSeries", "equipVariableName", mesEquipmentDetailBean); - DdlPreparedPack.getStringSmallerNotEqualPack("2024-09-12 00:00:00", "createDatetime", mesEquipmentDetailBean); - DdlPreparedPack.getOrderBy("createDatetime", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), mesEquipmentDetailBean); - - List equipmentLogDetailList = mesEquipmentLogDetailRepository.findByHqlTopWhere(mesEquipmentLogDetailBean, 20); - if (!CollectionUtils.isEmpty(equipmentLogDetailList)) { - for (MesEquipmentLogDetail mesEquipmentLogDetail : equipmentLogDetails) { - MesProductRecordLog mesProductRecordLog = new MesProductRecordLog(); - try { - BeanUtils.copyProperties(mesEquipmentLogDetail, mesProductRecordLog); - mesProductRecordLog.setType("模具号"); - - DdlPackBean mouldMultipackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(mesEquipmentLogDetail.getEquipVariableValue(),"mouldNo", mouldMultipackBean); - List mesMouldMultiCavities = mesMouldMultiCavityRepository.findByHqlWhere(mouldMultipackBean); - - mesProductRecordLogs.add(mesProductRecordLog); - } catch (Exception e) { - e.printStackTrace(); - } + } + if (bypassFlag && recordLog.getType().equals("record")) { + errorCount ++; + reason = String.format(reasonBypass,startTime, endTime, errorCount +""); + continue; + } + + + if (result == 0) { + if (!finishList.contains(recordLog.getCategoryLevelTwo()) || !Objects.equal(recordLog.getEquipVariableValue(), "True")) { + continue; + } + result ++; + } else { + if (finishList.contains(recordLog.getCategoryLevelTwo()) && Objects.equal(recordLog.getEquipVariableValue(), "True")) { + if (StringUtils.isEmpty(startTime)) { + startTime = recordLog.getCreateDatetime(); } + errorCount ++; + endTime = recordLog.getCreateDatetime(); + if (Objects.equal(recordLog.getQuality(), "192")) { + reason += String.format(reasonOffline,startTime, endTime, errorCount +""); + } else { + reason += String.format(reasonQuality,startTime, endTime, errorCount +""); + } + } + if (recordLog.getType().equals("record")) { + result --; } + } + } + return reason; + } + + private String handleNotHTAndHasRelease(List recordLogs) { + int result = 0; + String startTime = ""; + String endTime = ""; + int errorCount = 0; + String reason = ""; + String reasonOffline = "【%s】到【%s】,客户端下线,导致【%s】个完成信号丢失"; + String reasonQuality = "【%s】到【%s】设备信号质量有问题,导致【%s】个完成信号丢失"; + String reasonBypass = "【%s】到【%s】设备信号Bypass,【%s】个完成信号丢失"; + String releaseBypass = "【%s】到【%s】设备信号没有个release就给了完成新号,导致【%s】个完成信号丢失"; + + + + boolean bypassFlag = false; + boolean releaseFlag = false; - mesProductRecordLogRepository.saveAll(mesProductRecordLogs); + List finishList = Stream.of("Product_finish","PART_OK","Part_Finish","Product_OK").collect(Collectors.toList()); + for (MesProductRecordLog recordLog : recordLogs) { + if (Objects.equal(recordLog.getCategoryLevelTwo(), "BYPASS") && Objects.equal(recordLog.getEquipVariableValue(), "True")) { + if (StringUtils.isEmpty(startTime)) { + startTime = recordLog.getCreateDatetime(); + } + endTime = recordLog.getCreateDatetime(); + // 每次都取反,第一次是打开,那第二次就是关闭了 + bypassFlag = !bypassFlag; + if (!bypassFlag) { + errorCount = 0; + } + continue; + } + if (bypassFlag && recordLog.getType().equals("record")) { + errorCount ++; + reason = String.format(reasonBypass,startTime, endTime, errorCount +""); + continue; + } + + if (result == 0) { + if (Objects.equal(recordLog.getCategoryLevelTwo(), "Work_Allow") && Objects.equal(recordLog.getEquipVariableValue(), "True")) { + releaseFlag = true; + continue; + } + if (!finishList.contains(recordLog.getCategoryLevelTwo()) || !Objects.equal(recordLog.getEquipVariableValue(), "True")) { + continue; + } + result ++; + } else { + if (finishList.contains(recordLog.getCategoryLevelTwo()) && Objects.equal(recordLog.getEquipVariableValue(), "True")) { + if (StringUtils.isEmpty(startTime)) { + startTime = recordLog.getCreateDatetime(); + } + errorCount ++; + endTime = recordLog.getCreateDatetime(); + if (!releaseFlag) { + reason = String.format(releaseBypass,startTime, endTime, errorCount +""); + } else { + if (Objects.equal(recordLog.getQuality(), "192")) { + reason = String.format(reasonOffline,startTime, endTime, errorCount +""); + } else { + reason = String.format(reasonQuality,startTime, endTime, errorCount +""); + } + } + } + if (recordLog.getType().equals("record")) { + result --; + } } } - // + return reason; + } + + private String handleHT(List recordLogs) { + int result = 0; + String startTime = ""; + String endTime = ""; + int errorCount = 0; + String reason = ""; + String reasonOffline = "【%s】到【%s】,客户端下线,导致【%s】个完成信号丢失"; + String reasonQuality = "【%s】到【%s】设备信号质量有问题,导致【%s】个完成信号丢失"; + for (MesProductRecordLog recordLog : recordLogs) { + if (result == 0) { + if (!Objects.equal(recordLog.getCategoryLevelTwo(),"shot_counter") ) { + continue; + } + if (recordLog.getEquipVariableValue().compareTo("0") > 0) { + result ++; + } + } else { + if (Objects.equal(recordLog.getCategoryLevelTwo(),"shot_counter") && recordLog.getEquipVariableValue().compareTo("0") > 0) { + if (StringUtils.isEmpty(startTime)) { + startTime = recordLog.getCreateDatetime(); + } + errorCount ++; + endTime = recordLog.getCreateDatetime(); + if (Objects.equal(recordLog.getQuality(), "192")) { + reason = String.format(reasonOffline,startTime, endTime, errorCount +""); + } else { + reason = String.format(reasonQuality,startTime, endTime, errorCount +""); + } + } + if (recordLog.getType().equals("record")) { + result --; + } + } + } + return reason; } } 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 index 784d26c..0b014c8 100644 --- 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 @@ -5,6 +5,7 @@ import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesProdRuleNosortCfgDao; import cn.estsh.i3plus.ext.mes.apiservice.utils.BeanUtil; import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; import cn.estsh.i3plus.ext.mes.pojo.model.MesLoadingListDetailModel; +import cn.estsh.i3plus.ext.mes.pojo.model.MesShippingOrderManagementDetailModel; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; @@ -14,15 +15,19 @@ import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import cn.estsh.i3plus.pojo.mes.bean.MesProductRecordLog; import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingListDetail; import cn.estsh.i3plus.pojo.mes.model.MesProductionRecordModel; import cn.estsh.i3plus.pojo.mes.model.report.MesProductAccountModel; import cn.estsh.i3plus.pojo.mes.model.report.MesProductAccountResModel; import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesProductRecordLogRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import com.google.common.base.Objects; import lombok.extern.slf4j.Slf4j; import org.hibernate.SQLQuery; +import org.hibernate.query.internal.NativeQueryImpl; import org.hibernate.transform.Transformers; import org.mvel2.util.Make; import org.springframework.beans.BeanUtils; @@ -38,6 +43,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import java.util.stream.Stream; /** * @Description : 设备加工记录表 @@ -58,6 +64,9 @@ public class MesProductionRecordServiceImpl extends BaseMesService findMesProductionRecord(String organizeCode, String sn) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); @@ -115,14 +124,20 @@ public class MesProductionRecordServiceImpl extends BaseMesService queryProductAccount(MesProductAccountModel productAccountModel, Pager pager) { - String sqlStr = "SELECT\n" + - "\tmpr.part_no,\n" + - "\tmpr.equipment_code,\n" + - "\tme.equipment_name,\n" + - "\tme.work_cell_code,\n" + - "\tme.work_center_code,\n" + - "\tmpr.product_count,\n" + - "\tmpr.detail_count\n" + + List resList = new ArrayList<>(); + + String sqlStr = "select mpr.part_no,mpr.equipment_code,mpr.equipment_name,mpr.work_cell_code,mpr.work_center_code," + + "mpr.product_count,mpr.detail_count,error_reason from (\n" + + "\n" + + "SELECT\n" + + "\tmpr.part_no ,\n" + + "\tmpr.equipment_code ,\n" + + "\tme.equipment_name ,\n" + + "\tme.work_cell_code ,\n" + + "\tme.work_center_code ,\n" + + "\tmpr.product_count ,\n" + + "\tmpr.detail_count , \n" + + "\t null error_reason\n" + "\t\n" + "FROM\n" + "\t(\n" + @@ -158,16 +173,17 @@ public class MesProductionRecordServiceImpl extends BaseMesService results = query.getResultList();*/ + List results = query.getResultList(); + for (Object result : results) { + Object[] cells = (Object[]) result; + MesProductAccountResModel model = new MesProductAccountResModel(); + model.setPartNo(StringUtils.isEmpty(cells[0]) ? "" : String.valueOf(cells[0])); + model.setEquipmentCode(StringUtils.isEmpty(cells[1]) ? "" : String.valueOf(cells[1])); + model.setWorkCellCode(StringUtils.isEmpty(cells[3]) ? "" : String.valueOf(cells[3])); + model.setWorkCenterCode(StringUtils.isEmpty(cells[4]) ? "" : String.valueOf(cells[4])); + model.setProductCount(StringUtils.isEmpty(cells[5]) ? "" : String.valueOf(cells[5])); + model.setDetailCount(StringUtils.isEmpty(cells[6]) ? "" : String.valueOf(cells[6])); + model.setErrorReason(StringUtils.isEmpty(cells[7]) ? "" : String.valueOf(cells[7])); + + resList.add(model); + } + + //query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(MesProductAccountResModel.class)); + //List results = query.getResultList(); + + + + return new ListPager<>(resList,pager); + } + + @Override + public List queryProductAccount(MesProductAccountModel productAccountModel) { + List resList = new ArrayList<>(); + + String sqlStr = "select mpr.part_no,mpr.equipment_code,mpr.equipment_name,mpr.work_cell_code,mpr.work_center_code," + + "mpr.product_count,mpr.detail_count,error_reason from (\n" + + "\n" + + "SELECT\n" + + "\tmpr.part_no ,\n" + + "\tmpr.equipment_code ,\n" + + "\tme.equipment_name ,\n" + + "\tme.work_cell_code ,\n" + + "\tme.work_center_code ,\n" + + "\tmpr.product_count ,\n" + + "\tmpr.detail_count , \n" + + "\t null error_reason\n" + + "\t\n" + + "FROM\n" + + "\t(\n" + + "\tSELECT\n" + + "\t\tequipment_code,\n" + + "\t\tpart_no,\n" + + "\t\tsum( CASE WHEN type = 'record' THEN 1 ELSE 0 END ) product_count,\n" + + "\t\tsum( CASE WHEN type = 'logdetail' and CATEGORY_LEVEL_TWO ='shot_counter' and EQUIP_VARIABLE_VALUE > 0 THEN 1 ELSE 0 END ) detail_count \n" + + "\tFROM\n" + + "\t\tmes_product_record_log \n" + + "\tWHERE\n" + + "\t\tequipment_code LIKE '%HT%' \n"; + + if (!StringUtils.isEmpty(productAccountModel.getEquipmentCode())) { + sqlStr += " and equipment_code = :equipmentCode "; + } if (!StringUtils.isEmpty(productAccountModel.getPartNo())) { + sqlStr += " and part_no like '%' :partNo '%' "; + } if (!StringUtils.isEmpty(productAccountModel.getStartTime())) { + sqlStr += " and create_date_time >= :startTime "; + } if (!StringUtils.isEmpty(productAccountModel.getEndTime())) { + sqlStr += " and create_date_time < :endTime "; + } + + + sqlStr += + "\t\tAND part_no IS NOT NULL \n" + + "\tGROUP BY\n" + + "\t\tequipment_code,\n" + + "\t\tpart_no \n" + + "\t) mpr\n" + + "\tLEFT JOIN mes_wc_equipment me ON mpr.equipment_code = me.equipment_code \n" + + "\n" + + "\n" + + "UNION\n" + + "SELECT\n" + + "\tmprnc.out_part_no part_no,\n" + + "\tmprnc.equipment_code ,\n" + + "\tme.equipment_name ,\n" + + "\tme.work_cell_code ,\n" + + "\tme.work_center_code ,\n" + + "\teqcount.product_count ,\n" + + "\teqcount.detail_count , \n" + + "\t null error_reason \n" + + "FROM\n" + + "\tmes_prod_rule_nosort_cfg mprnc\n" + + "\tLEFT JOIN mes_wc_equipment me ON mprnc.equipment_code = me.equipment_code and me.is_deleted = 2 and me.is_valid = 1 \n" + + "\tLEFT JOIN (\n" + + "\tSELECT\n" + + "\t\tequipment_code,\n" + + "\t\tpart_no,\n" + + "\t\tsum( CASE WHEN type = 'record' THEN 1 ELSE 0 END ) product_count,\n" + + "\t\tsum(\n" + + "\t\tCASE\n" + + "\t\t\t\t\n" + + "\t\t\t\tWHEN type = 'logdetail' \n" + + "\t\t\t\tAND CATEGORY_LEVEL_TWO IN ( 'Product_finish', 'PART_OK', 'Part_Finish', 'Product_OK' ) \n" + + "\t\t\t\tAND EQUIP_VARIABLE_VALUE = 'True' THEN\n" + + "\t\t\t\t\t1 ELSE 0 \n" + + "\t\t\t\tEND \n" + + "\t\t\t\t) detail_count \n" + + "\t\t\tFROM\n" + + "\t\t\t\tmes_product_record_log \n" + + "\t\t\tWHERE 1 = 1 \n"; + if (!StringUtils.isEmpty(productAccountModel.getEquipmentCode())) { + sqlStr += "\t\t\t and equipment_code = :equipmentCode \n"; + } if (!StringUtils.isEmpty(productAccountModel.getPartNo())) { + sqlStr += "\t\t\t and part_no= :partNo \n"; + } if (!StringUtils.isEmpty(productAccountModel.getStartTime())) { + sqlStr += "\t\t\t and create_date_time >= :startTime \n"; + } if (!StringUtils.isEmpty(productAccountModel.getEndTime())) { + sqlStr += "\t\t\t and create_date_time < :endTime \n"; + } + sqlStr += + "\t\t\t and \n" + + "\t\t\t\tpart_no IS NOT NULL \n" + + "\t\t\tGROUP BY\n" + + "\t\t\t\tequipment_code,\n" + + "\t\t\t\tpart_no \n" + + "\t\t\t) eqcount ON mprnc.equipment_code = eqcount.equipment_code \n" + + "\t AND mprnc.out_part_no = eqcount.part_no where 1=1 "; + if (!StringUtils.isEmpty(productAccountModel.getEquipmentCode())) { + sqlStr += "and mprnc.equipment_code= :equipmentCode "; + } + sqlStr += "\tand eqcount.product_count is not null and eqcount.detail_count is not null ) mpr \n" + + "\t\n" + + "\tleft join mes_equipment me\n" + + "\ton mpr.equipment_code = me.equipment_code\n" + + "\n" + + "where mpr.product_count != 0 and mpr.detail_count != 0\n" + + "and me.equipment_type = 10"; Query query = entityManager.createNativeQuery(sqlStr); @@ -222,11 +391,29 @@ public class MesProductionRecordServiceImpl extends BaseMesService list = query.getResultList(); + /* query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(MesProductAccountResModel.class)); + List results = query.getResultList();*/ + List results = query.getResultList(); + for (Object result : results) { + Object[] cells = (Object[]) result; + MesProductAccountResModel model = new MesProductAccountResModel(); + model.setPartNo(StringUtils.isEmpty(cells[0]) ? "" : String.valueOf(cells[0])); + model.setEquipmentCode(StringUtils.isEmpty(cells[1]) ? "" : String.valueOf(cells[1])); + model.setWorkCellCode(StringUtils.isEmpty(cells[3]) ? "" : String.valueOf(cells[3])); + model.setWorkCenterCode(StringUtils.isEmpty(cells[4]) ? "" : String.valueOf(cells[4])); + model.setProductCount(StringUtils.isEmpty(cells[5]) ? "" : String.valueOf(cells[5])); + model.setDetailCount(StringUtils.isEmpty(cells[6]) ? "" : String.valueOf(cells[6])); + model.setErrorReason(StringUtils.isEmpty(cells[7]) ? "" : String.valueOf(cells[7])); + + resList.add(model); + } + + //query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(MesProductAccountResModel.class)); + //List results = query.getResultList(); - return new ListPager<>(list,pager); + return resList; } private List getMesProduceSnList(MesProductionRecordModel mesProductionRecordModel) { @@ -339,4 +526,227 @@ public class MesProductionRecordServiceImpl extends BaseMesService transferAccount(List mesProductAccountResModels, MesProductAccountModel productAccountModel) { + /** + * 760B_A58_ReMaoHan 只有finish信号 + * 760BFoaming + * 760B_LaserCutting + * ZhenKong + */ + List equimentList = Stream.of("760B_A58_ReMaoHan","760BFoaming","760B_LaserCutting","ZhenKong").collect(Collectors.toList()); + + if (!CollectionUtils.isEmpty(mesProductAccountResModels)) { + mesProductAccountResModels = mesProductAccountResModels.stream().filter(mesProductAccountResModel ->{ + int size = mesProductAccountResModel.getPartNo().split(",").length; + int productCount = Integer.valueOf(mesProductAccountResModel.getProductCount()); + int detailCount = Integer.valueOf(mesProductAccountResModel.getDetailCount()); + if (detailCount * size > productCount) { + return true; + } + return false; + } ) .collect(Collectors.toList()); + } + if (!CollectionUtils.isEmpty(mesProductAccountResModels)) { + for (MesProductAccountResModel mesProductAccountResModel : mesProductAccountResModels) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean("CK01"); + DdlPreparedPack.getStringEqualPack(mesProductAccountResModel.getEquipmentCode(), "equipmentCode", packBean); + + DdlPreparedPack.getStringSmallerNotEqualPack(productAccountModel.getEndTime(), "createDatetime", packBean); + DdlPreparedPack.getStringBiggerPack(productAccountModel.getStartTime(), "createDatetime", packBean); + DdlPreparedPack.getStringEqualPack(mesProductAccountResModel.getPartNo(), "partNo", packBean); + + DdlPreparedPack.getOrderBy("createDatetime", CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), packBean); + List recordLogs = mesProductRecordLogRepository.findByHqlWhere(packBean); + if (mesProductAccountResModel.getEquipmentCode().contains("HT")) { + // 1 判断2个 shotcount之间有没有加工记录,如果没有,就需要看 设备是不是192,然后看是否是网络原因 + + String reason = handleHT(recordLogs); + mesProductAccountResModel.setErrorReason(reason); + } else if (equimentList.contains(mesProductAccountResModel.getEquipmentCode())) { + // 1 判断2个 shotcount之间有没有加工记录,如果没有,就需要看 设备是不是192,然后看是否是网络原因 + String reason =handleNotHT(recordLogs); + mesProductAccountResModel.setErrorReason(reason); + } else { + String reason =handleNotHTAndHasRelease(recordLogs); + mesProductAccountResModel.setErrorReason(reason); + } + } + } + return mesProductAccountResModels; + } + + private String handleNotHT(List recordLogs) { + int result = 0; + String startTime = ""; + String endTime = ""; + int errorCount = 0; + String reason = ""; + String reasonOffline = "【%s】到【%s】,客户端下线,导致【%s】个完成信号丢失"; + String reasonQuality = "【%s】到【%s】设备信号质量有问题,导致【%s】个完成信号丢失"; + String reasonBypass = "【%s】到【%s】设备信号Bypass,【%s】个完成信号丢失"; + boolean bypassFlag = false; + + List finishList = Stream.of("Product_finish","PART_OK","Part_Finish","Product_OK").collect(Collectors.toList()); + + for (MesProductRecordLog recordLog : recordLogs) { + if (Objects.equal(recordLog.getCategoryLevelTwo(), "BYPASS")) { + if (Objects.equal(recordLog.getEquipVariableValue(), "True")) { + if (StringUtils.isEmpty(startTime)) { + startTime = recordLog.getCreateDatetime(); + } + endTime = recordLog.getCreateDatetime(); + // 每次都取反,第一次是打开,那第二次就是关闭了 + bypassFlag = true; + continue; + } else { + if (bypassFlag) { + bypassFlag = false; + errorCount = 0; + continue; + } + } + } + if (bypassFlag && recordLog.getType().equals("record")) { + errorCount ++; + reason = String.format(reasonBypass,startTime, endTime, errorCount +""); + continue; + } + + + if (result == 0) { + if (!finishList.contains(recordLog.getCategoryLevelTwo()) || !Objects.equal(recordLog.getEquipVariableValue(), "True")) { + continue; + } + result ++; + } else { + if (finishList.contains(recordLog.getCategoryLevelTwo()) && Objects.equal(recordLog.getEquipVariableValue(), "True")) { + if (StringUtils.isEmpty(startTime)) { + startTime = recordLog.getCreateDatetime(); + } + errorCount ++; + endTime = recordLog.getCreateDatetime(); + if (Objects.equal(recordLog.getQuality(), "192")) { + reason = String.format(reasonOffline,startTime, endTime, errorCount +""); + } else { + reason = String.format(reasonQuality,startTime, endTime, errorCount +""); + } + } + if (recordLog.getType().equals("record")) { + result --; + } + } + } + return reason; + } + + private String handleNotHTAndHasRelease(List recordLogs) { + int result = 0; + String startTime = ""; + String endTime = ""; + int errorCount = 0; + String reason = ""; + String reasonOffline = "【%s】到【%s】,客户端下线,导致【%s】个完成信号丢失"; + String reasonQuality = "【%s】到【%s】设备信号质量有问题,导致【%s】个完成信号丢失"; + String reasonBypass = "【%s】到【%s】设备信号Bypass,【%s】个完成信号丢失"; + String releaseBypass = "【%s】到【%s】设备信号没有个release就给了完成新号,导致【%s】个完成信号丢失"; + + + + boolean bypassFlag = false; + boolean releaseFlag = false; + + List finishList = Stream.of("Product_finish","PART_OK","Part_Finish","Product_OK").collect(Collectors.toList()); + + for (MesProductRecordLog recordLog : recordLogs) { + if (Objects.equal(recordLog.getCategoryLevelTwo(), "BYPASS") && Objects.equal(recordLog.getEquipVariableValue(), "True")) { + if (StringUtils.isEmpty(startTime)) { + startTime = recordLog.getCreateDatetime(); + } + endTime = recordLog.getCreateDatetime(); + // 每次都取反,第一次是打开,那第二次就是关闭了 + bypassFlag = !bypassFlag; + if (!bypassFlag) { + errorCount = 0; + } + continue; + } + if (bypassFlag && recordLog.getType().equals("record")) { + errorCount ++; + reason = String.format(reasonBypass,startTime, endTime, errorCount +""); + continue; + } + + if (result == 0) { + if (Objects.equal(recordLog.getCategoryLevelTwo(), "Work_Allow") && Objects.equal(recordLog.getEquipVariableValue(), "True")) { + releaseFlag = true; + continue; + } + if (!finishList.contains(recordLog.getCategoryLevelTwo()) || !Objects.equal(recordLog.getEquipVariableValue(), "True")) { + continue; + } + result ++; + + } else { + if (finishList.contains(recordLog.getCategoryLevelTwo()) && Objects.equal(recordLog.getEquipVariableValue(), "True")) { + if (StringUtils.isEmpty(startTime)) { + startTime = recordLog.getCreateDatetime(); + } + errorCount ++; + endTime = recordLog.getCreateDatetime(); + if (!releaseFlag) { + reason = String.format(releaseBypass,startTime, endTime, errorCount +""); + } else { + if (Objects.equal(recordLog.getQuality(), "192")) { + reason = String.format(reasonOffline,startTime, endTime, errorCount +""); + } else { + reason = String.format(reasonQuality,startTime, endTime, errorCount +""); + } + } + } + if (recordLog.getType().equals("record")) { + result --; + } + } + } + return reason; + } + + private String handleHT(List recordLogs) { + int result = 0; + String startTime = ""; + String endTime = ""; + int errorCount = 0; + String reason = ""; + String reasonOffline = "【%s】到【%s】,客户端下线,导致【%s】个完成信号丢失"; + String reasonQuality = "【%s】到【%s】设备信号质量有问题,导致【%s】个完成信号丢失"; + + for (MesProductRecordLog recordLog : recordLogs) { + if (result == 0) { + if (!Objects.equal(recordLog.getCategoryLevelTwo(),"shot_counter") ) { + continue; + } + if (recordLog.getEquipVariableValue().compareTo("0") > 0) { + result ++; + } + } else { + if (Objects.equal(recordLog.getCategoryLevelTwo(),"shot_counter") && recordLog.getEquipVariableValue().compareTo("0") > 0) { + if (StringUtils.isEmpty(startTime)) { + startTime = recordLog.getCreateDatetime(); + } + errorCount ++; + endTime = recordLog.getCreateDatetime(); + if (Objects.equal(recordLog.getQuality(), "192")) { + reason = String.format(reasonOffline,startTime, endTime, errorCount +""); + } else { + reason = String.format(reasonQuality,startTime, endTime, errorCount +""); + } + } + if (recordLog.getType().equals("record")) { + result --; + } + } + } + return reason; + } } From b86fbdbd3d0662d66316402bab0019052d5aa37a Mon Sep 17 00:00:00 2001 From: "xiangwei.zhang" <752558143@qq.com> Date: Mon, 16 Sep 2024 20:40:29 +0800 Subject: [PATCH 09/25] =?UTF-8?q?=E5=AF=B9=E8=B4=A6=E5=8D=95=E4=BF=A1?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/api/base/IMesProductionRecordService.java | 2 +- .../controller/report/MesBusiReportController.java | 9 +- .../base/MesProductionRecordServiceImpl.java | 109 ++++++++++++--------- 3 files changed, 71 insertions(+), 49 deletions(-) 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 index 715cc85..b444815 100644 --- 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 @@ -34,5 +34,5 @@ public interface IMesProductionRecordService extends IBaseMesService queryProductAccount(MesProductAccountModel productAccountModel); @ApiOperation(value = "线边库存报表") - List transferAccount(List list,MesProductAccountModel productAccountModel); + List transferAccount(List list,MesProductAccountModel productAccountModel, Pager pager); } 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 index 4e1857d..12447b2 100644 --- 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 @@ -103,9 +103,9 @@ public class MesBusiReportController extends MesBaseController { @ApiOperation(value = "对账报表", notes = "对账报表") @GetMapping("/product/account/query") public ResultBean queryProductAccount(MesProductAccountModel productAccountModel, Pager pager) { - try { + try {/* ValidatorBean.beginValid(productAccountModel) - .notNull("equipmentCode", productAccountModel.getEquipmentCode()); + .notNull("equipmentCode", productAccountModel.getEquipmentCode());*/ /*productAccountModel.setStartTime("2024-09-12 08:00:00"); productAccountModel.setEndTime("2024-09-13 08:00:00"); productAccountModel.setEquipmentCode("760BFoaming"); @@ -113,12 +113,13 @@ public class MesBusiReportController extends MesBaseController { List mesProductAccountResModels = mesProductionRecordService.queryProductAccount(productAccountModel); - List mesProductAccountResModelsRes = mesProductionRecordService.transferAccount(mesProductAccountResModels,productAccountModel); + List mesProductAccountResModelsRes = mesProductionRecordService.transferAccount(mesProductAccountResModels,productAccountModel, pager); - return ResultBean.success("查询成功").setResultList(mesProductAccountResModelsRes); + return ResultBean.success("查询成功").setResultList(mesProductAccountResModelsRes).setPager(pager); } catch (ImppBusiException e) { return ResultBean.fail(e); } catch (Exception e) { + e.printStackTrace(); return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } 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 index 0b014c8..8e9f005 100644 --- 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 @@ -25,6 +25,7 @@ import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository; import cn.estsh.i3plus.pojo.mes.repository.MesProductRecordLogRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import com.google.common.base.Objects; +import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.hibernate.SQLQuery; import org.hibernate.query.internal.NativeQueryImpl; @@ -340,10 +341,11 @@ public class MesProductionRecordServiceImpl extends BaseMesService transferAccount(List mesProductAccountResModels, MesProductAccountModel productAccountModel) { + public List transferAccount(List mesProductAccountResModels, MesProductAccountModel productAccountModel, Pager pager) { /** * 760B_A58_ReMaoHan 只有finish信号 * 760BFoaming @@ -535,45 +537,46 @@ public class MesProductionRecordServiceImpl extends BaseMesService equimentList = Stream.of("760B_A58_ReMaoHan","760BFoaming","760B_LaserCutting","ZhenKong").collect(Collectors.toList()); - - if (!CollectionUtils.isEmpty(mesProductAccountResModels)) { - mesProductAccountResModels = mesProductAccountResModels.stream().filter(mesProductAccountResModel ->{ - int size = mesProductAccountResModel.getPartNo().split(",").length; - int productCount = Integer.valueOf(mesProductAccountResModel.getProductCount()); - int detailCount = Integer.valueOf(mesProductAccountResModel.getDetailCount()); - if (detailCount * size > productCount) { - return true; - } - return false; - } ) .collect(Collectors.toList()); - } - if (!CollectionUtils.isEmpty(mesProductAccountResModels)) { - for (MesProductAccountResModel mesProductAccountResModel : mesProductAccountResModels) { - DdlPackBean packBean = DdlPackBean.getDdlPackBean("CK01"); - DdlPreparedPack.getStringEqualPack(mesProductAccountResModel.getEquipmentCode(), "equipmentCode", packBean); - - DdlPreparedPack.getStringSmallerNotEqualPack(productAccountModel.getEndTime(), "createDatetime", packBean); - DdlPreparedPack.getStringBiggerPack(productAccountModel.getStartTime(), "createDatetime", packBean); - DdlPreparedPack.getStringEqualPack(mesProductAccountResModel.getPartNo(), "partNo", packBean); - - DdlPreparedPack.getOrderBy("createDatetime", CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), packBean); - List recordLogs = mesProductRecordLogRepository.findByHqlWhere(packBean); - if (mesProductAccountResModel.getEquipmentCode().contains("HT")) { - // 1 判断2个 shotcount之间有没有加工记录,如果没有,就需要看 设备是不是192,然后看是否是网络原因 - - String reason = handleHT(recordLogs); - mesProductAccountResModel.setErrorReason(reason); - } else if (equimentList.contains(mesProductAccountResModel.getEquipmentCode())) { - // 1 判断2个 shotcount之间有没有加工记录,如果没有,就需要看 设备是不是192,然后看是否是网络原因 - String reason =handleNotHT(recordLogs); - mesProductAccountResModel.setErrorReason(reason); - } else { - String reason =handleNotHTAndHasRelease(recordLogs); - mesProductAccountResModel.setErrorReason(reason); - } + if (CollectionUtils.isEmpty(mesProductAccountResModels)) { + return null; + } + List partitionList = partition(mesProductAccountResModels, pager.getPageSize(), pager.getCurrentPage()); + for (MesProductAccountResModel mesProductAccountResModel : partitionList) { + boolean isErrorCount = false; + int size = mesProductAccountResModel.getPartNo().split(",").length; + int productCount = Integer.valueOf(mesProductAccountResModel.getProductCount()); + int detailCount = Integer.valueOf(mesProductAccountResModel.getDetailCount()); + if (detailCount * size > productCount) { + isErrorCount = true; + } + if (!isErrorCount) { + continue; + } + DdlPackBean packBean = DdlPackBean.getDdlPackBean("CK01"); + DdlPreparedPack.getStringEqualPack(mesProductAccountResModel.getEquipmentCode(), "equipmentCode", packBean); + + DdlPreparedPack.getStringSmallerNotEqualPack(productAccountModel.getEndTime(), "createDatetime", packBean); + DdlPreparedPack.getStringBiggerPack(productAccountModel.getStartTime(), "createDatetime", packBean); + DdlPreparedPack.getStringEqualPack(mesProductAccountResModel.getPartNo(), "partNo", packBean); + + DdlPreparedPack.getOrderBy("createDatetime", CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), packBean); + List recordLogs = mesProductRecordLogRepository.findByHqlWhere(packBean); + if (mesProductAccountResModel.getEquipmentCode().contains("HT")) { + // 1 判断2个 shotcount之间有没有加工记录,如果没有,就需要看 设备是不是192,然后看是否是网络原因 + + String reason = handleHT(recordLogs); + mesProductAccountResModel.setErrorReason(reason); + } else if (equimentList.contains(mesProductAccountResModel.getEquipmentCode())) { + // 1 判断2个 shotcount之间有没有加工记录,如果没有,就需要看 设备是不是192,然后看是否是网络原因 + String reason =handleNotHT(recordLogs); + mesProductAccountResModel.setErrorReason(reason); + } else { + String reason =handleNotHTAndHasRelease(recordLogs); + mesProductAccountResModel.setErrorReason(reason); } } - return mesProductAccountResModels; + + return partitionList; } private String handleNotHT(List recordLogs) { @@ -587,7 +590,7 @@ public class MesProductionRecordServiceImpl extends BaseMesService finishList = Stream.of("Product_finish","PART_OK","Part_Finish","Product_OK").collect(Collectors.toList()); + List finishList = Stream.of("Product_finish","Part_Finish").collect(Collectors.toList()); for (MesProductRecordLog recordLog : recordLogs) { if (Objects.equal(recordLog.getCategoryLevelTwo(), "BYPASS")) { @@ -649,14 +652,15 @@ public class MesProductionRecordServiceImpl extends BaseMesService finishList = Stream.of("Product_finish","PART_OK","Part_Finish","Product_OK").collect(Collectors.toList()); + //List finishList = Stream.of("Product_finish","PART_OK","Part_Finish","Product_OK").collect(Collectors.toList()); + List finishList = Stream.of("Product_finish","Part_Finish").collect(Collectors.toList()); for (MesProductRecordLog recordLog : recordLogs) { if (Objects.equal(recordLog.getCategoryLevelTwo(), "BYPASS") && Objects.equal(recordLog.getEquipVariableValue(), "True")) { @@ -676,12 +680,20 @@ public class MesProductionRecordServiceImpl extends BaseMesService partition(List list, int pageSize, int pageNum) { + // 将 List 按照 PageSzie 拆分成多个List + List> partition = Lists.partition(list, pageSize); + // 总页数 + int pages = partition.size(); + pageNum = pageNum <= 0 ? 0 : (pageNum <= (pages - 1) ? pageNum : (pages - 1)); + return partition.get(pageNum); + } } From 7b070c8bbdca02645ee77273480cc7639d44e9b8 Mon Sep 17 00:00:00 2001 From: "xiangwei.zhang" <752558143@qq.com> Date: Mon, 16 Sep 2024 21:48:47 +0800 Subject: [PATCH 10/25] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/report/MesBusiReportController.java | 4 +++- .../serviceimpl/base/MesProductionRecordServiceImpl.java | 12 ++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) 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 index 12447b2..e71a2bb 100644 --- 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 @@ -17,6 +17,8 @@ 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.apache.commons.collections.CollectionUtils; +import org.drools.core.rule.Collect; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -112,7 +114,7 @@ public class MesBusiReportController extends MesBaseController { productAccountModel.setPartNo("Z0020667");*/ List mesProductAccountResModels = mesProductionRecordService.queryProductAccount(productAccountModel); - + pager.setTotalRows(CollectionUtils.isEmpty(mesProductAccountResModels) ? 0 : mesProductAccountResModels.size()); List mesProductAccountResModelsRes = mesProductionRecordService.transferAccount(mesProductAccountResModels,productAccountModel, pager); return ResultBean.success("查询成功").setResultList(mesProductAccountResModelsRes).setPager(pager); 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 index 8e9f005..afd1b05 100644 --- 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 @@ -586,8 +586,8 @@ public class MesProductionRecordServiceImpl extends BaseMesService finishList = Stream.of("Product_finish","Part_Finish").collect(Collectors.toList()); @@ -650,9 +650,9 @@ public class MesProductionRecordServiceImpl extends BaseMesService Date: Mon, 16 Sep 2024 21:50:22 +0800 Subject: [PATCH 11/25] =?UTF-8?q?=E5=AF=B9=E8=B4=A6=E5=8D=95=E4=BF=A1?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/apiservice/serviceimpl/base/MesProductionRecordServiceImpl.java | 1 + 1 file changed, 1 insertion(+) 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 index afd1b05..0244ea8 100644 --- 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 @@ -401,6 +401,7 @@ public class MesProductionRecordServiceImpl extends BaseMesService Date: Wed, 18 Sep 2024 10:22:30 +0800 Subject: [PATCH 12/25] =?UTF-8?q?=E7=BC=BA=E9=99=B7=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E8=A1=A8=E5=A2=9E=E5=8A=A0=E6=9F=A5=E8=AF=A2=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiservice/serviceimpl/base/MesPartInspectionService.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartInspectionService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartInspectionService.java index 851876d..ff455a6 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartInspectionService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartInspectionService.java @@ -70,11 +70,13 @@ public class MesPartInspectionService extends BaseMesService // DdlPreparedPack.getStringLikerPack(bean.getInventoryLocationCode(), "responsibleParty", packBeanLo); List orgList = mesOrgRDao.findByHqlWhere(packBeanLo); //2.增加库区查询条件,文本框,支持模糊输入 +// LOGGER.info("queryMesPartInspectionParamByPager-orgList:{}", orgList); if(!StringUtil.isEmpty(bean.getInventoryLocationCode())){ if (!CollectionUtils.isEmpty(orgList)){ - DdlPreparedPack.getInPackList(orgList.stream().map(MesOrg::getResponsibleParty). - filter(responsibleParty ->bean.getInventoryLocationCode().equals(responsibleParty)).collect(Collectors.toList()), - "responsibleParty", packBean); + String inventoryLocationCode = bean.getInventoryLocationCode(); + List collect = orgList.stream().filter(o->o.getInventoryLocationCode().equals(inventoryLocationCode)) + .map(MesOrg::getResponsibleParty).collect(Collectors.toList()); + DdlPreparedPack.getInPackList(collect,"responsibleParty", packBean); } } pager = PagerHelper.getPager(pager, baseRDao.findByHqlWhereCount(packBean)); @@ -94,7 +96,7 @@ public class MesPartInspectionService extends BaseMesService //1.页面增加库区字段(库区根据报废选择的责任人关联查询) if (!StringUtils.isEmpty(mesPartInspection.getResponsibleParty())){ if (!CollectionUtils.isEmpty(orgList)){ - List collect = orgList.stream().filter(a -> bean.getResponsibleParty().equals(a.getResponsibleParty())).collect(Collectors.toList()); + List collect = orgList.stream().filter(a -> mesPartInspection.getResponsibleParty().equals(a.getResponsibleParty())).collect(Collectors.toList()); if (!CollectionUtils.isEmpty(collect)){ mesPartInspection.setInventoryLocationCode(collect.get(0).getInventoryLocationCode()); } From b77d89ecbfa68c73d4f34c1dbb38cbd9a5937073 Mon Sep 17 00:00:00 2001 From: jun Date: Thu, 19 Sep 2024 15:20:48 +0800 Subject: [PATCH 13/25] =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E5=8B=BE=E9=80=89?= =?UTF-8?q?=E7=9A=84=E5=8F=91=E8=BF=90=E5=8D=95=E5=90=8C=E6=AD=A5WMS?= =?UTF-8?q?=EF=BC=8C=E6=A0=B9=E6=8D=AE=E5=8F=91=E8=BF=90=E5=8D=95=E5=85=B3?= =?UTF-8?q?=E8=81=94=E5=AF=B9=E5=BA=94=E7=9A=84=E8=A3=85=E8=BD=A6=E5=8D=95?= =?UTF-8?q?=EF=BC=9B=20=E5=8F=91=E8=BF=90=E5=8D=95=E3=80=81=E8=A3=85?= =?UTF-8?q?=E8=BD=A6=E5=8D=95=E5=A2=9E=E5=8A=A0=E5=A4=87=E6=B3=A8=E7=9A=84?= =?UTF-8?q?=E7=AD=9B=E9=80=89=E6=9D=A1=E4=BB=B6=EF=BC=8C=E6=96=87=E6=9C=AC?= =?UTF-8?q?=E6=A1=86=EF=BC=8C=E6=94=AF=E6=8C=81=E6=A8=A1=E7=B3=8A=E8=BE=93?= =?UTF-8?q?=E5=85=A5=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/api/base/IMesLoadingListDetailService.java | 4 +++ .../ext/mes/api/base/IMesLoadingListService.java | 3 ++ .../base/MesShippingOrderManagementController.java | 8 ++---- .../base/MesEquipmentSpotCheckDetailService.java | 5 ++-- .../base/MesLoadingListDetailService.java | 13 +++++++++ .../serviceimpl/base/MesLoadingListService.java | 13 +++++++++ .../base/MesShippingOrderManagementService.java | 32 ++++++++++++++-------- 7 files changed, 58 insertions(+), 20 deletions(-) diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesLoadingListDetailService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesLoadingListDetailService.java index cf363d3..f86e5c8 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesLoadingListDetailService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesLoadingListDetailService.java @@ -4,6 +4,7 @@ import cn.estsh.i3plus.ext.mes.pojo.model.MesLoadingListDetailModel; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingListDetail; +import io.swagger.annotations.ApiOperation; /** * @Description: @@ -14,4 +15,7 @@ public interface IMesLoadingListDetailService extends IBaseMesService queryLoadingListDetail(MesLoadingListDetail detail, Pager pager); + @ApiOperation("根据发运单号查询装车单明细信息") + MesLoadingListDetail getMesLoadingListDetail(String organizeCode,String shippingCode); + } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesLoadingListService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesLoadingListService.java index 71fa066..5f62aee 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesLoadingListService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesLoadingListService.java @@ -1,6 +1,7 @@ package cn.estsh.i3plus.ext.mes.api.base; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList; +import io.swagger.annotations.ApiOperation; /** * @Description: @@ -9,5 +10,7 @@ import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList; */ public interface IMesLoadingListService extends IBaseMesService { + @ApiOperation("根据发运单号查询装车单信息") + MesLoadingList getMesLoadingListByShippingCode(String organizeCode, String shippingCode); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementController.java index c6dcdda..bd30121 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementController.java @@ -38,17 +38,13 @@ public class MesShippingOrderManagementController extends BaseMesController saveShipping(@RequestBody List beanList) { try { - List orderNoList = - beanList.stream().filter(k -> k.getStatus() != MesExtEnumUtil.SHIPPING_ORDER_STATUS.CREATE.getValue() && - k.getStatus() != MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue()).map(k -> k.getShippingCode()).collect(Collectors.toList()); + List orderNoList = beanList.stream().filter(k -> k.getStatus() != MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue()).map(MesShippingOrderManagement::getShippingCode).collect(Collectors.toList()); if (!CollectionUtils.isEmpty(orderNoList)) { throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("【%s】发运单状态不是【%s】或【%s】,请选择状态为【%s】或【%s】的数据", orderNoList, MesExtEnumUtil.SHIPPING_ORDER_STATUS.CREATE.getDescription(), - MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getDescription(), MesExtEnumUtil.SHIPPING_ORDER_STATUS.CREATE.getDescription(), - MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getDescription()) + .setErrorDetail("【%s】发运单状态不是【%s】状态", orderNoList, MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getDescription()) .build(); } //新增初始化 diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentSpotCheckDetailService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentSpotCheckDetailService.java index b2e483e..a8ac4d0 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentSpotCheckDetailService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentSpotCheckDetailService.java @@ -19,6 +19,7 @@ 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.ArrayList; import java.util.List; @@ -157,8 +158,8 @@ public class MesEquipmentSpotCheckDetailService extends BaseMesService addressList = new ArrayList<>(); //查询设备变量信息 - List realAddress = beanList.stream().map(MesEquipmentSpotCheckDetail::getRealValueAddress).distinct().collect(Collectors.toList()); - List setAddress = beanList.stream().map(MesEquipmentSpotCheckDetail::getSetValueAddress).distinct().collect(Collectors.toList()); + List realAddress = beanList.stream().map(MesEquipmentSpotCheckDetail::getRealValueAddress).filter(t-> !StringUtils.isEmpty(t)).distinct().collect(Collectors.toList()); + List setAddress = beanList.stream().map(MesEquipmentSpotCheckDetail::getSetValueAddress).filter(t-> !StringUtils.isEmpty(t)).distinct().collect(Collectors.toList()); if (!CollectionUtils.isEmpty(realAddress)) addressList.addAll(realAddress); if (!CollectionUtils.isEmpty(setAddress)) addressList.addAll(setAddress); if (CollectionUtils.isEmpty(addressList)) return null; diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLoadingListDetailService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLoadingListDetailService.java index cc2e2a9..e5b14b8 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLoadingListDetailService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLoadingListDetailService.java @@ -3,13 +3,16 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesLoadingListDetailService; import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesLoadingListDetailDao; import cn.estsh.i3plus.ext.mes.pojo.model.MesLoadingListDetailModel; +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.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingListDetail; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; import java.util.List; @@ -27,4 +30,14 @@ public class MesLoadingListDetailService extends BaseMesService list = detailDao.queryLoadingListDetailModel(detail, pager); return new ListPager<>(list, pager); } + + @Override + public MesLoadingListDetail getMesLoadingListDetail(String organizeCode, String shippingCode) { + if(StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(shippingCode)){ + return null; + } + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(shippingCode,"shippingCode",packBean); + return baseRDao.getByProperty(packBean); + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLoadingListService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLoadingListService.java index 0ea2d74..ea283ff 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLoadingListService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLoadingListService.java @@ -30,6 +30,7 @@ import org.springframework.util.StringUtils; import java.util.ArrayList; import java.util.List; +import java.util.Objects; @Service @Slf4j @@ -230,5 +231,17 @@ public class MesLoadingListService extends BaseMesService implem DdlPreparedPack.getStringEqualPack(bean.getCustCode(), "custCode", packBean); DdlPreparedPack.getStringEqualPack(bean.getCustOrganizeCode(), "custOrganizeCode", packBean); DdlPreparedPack.getStringEqualPack(bean.getTruckNo(), "truckNo", packBean); + DdlPreparedPack.getStringLikerPack(bean.getRemark(), "remark", packBean); + } + + @Override + public MesLoadingList getMesLoadingListByShippingCode(String organizeCode, String shippingCode) { + MesLoadingListDetail mesLoadingListDetail = detailService.getMesLoadingListDetail(organizeCode,shippingCode); + if(Objects.isNull(mesLoadingListDetail)){ + return null; + } + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(mesLoadingListDetail.getPid(),"id",packBean); + return baseRDao.getByProperty(packBean); } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java index b444aee..a803ccb 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java @@ -1,9 +1,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; -import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService; -import cn.estsh.i3plus.ext.mes.api.base.IMesPartSapService; -import cn.estsh.i3plus.ext.mes.api.base.IMesPartShippingGroupService; -import cn.estsh.i3plus.ext.mes.api.base.IMesShippingOrderManagementService; +import cn.estsh.i3plus.ext.mes.api.base.*; +import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; @@ -12,6 +10,7 @@ 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.*; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; import cn.estsh.i3plus.pojo.mes.repository.*; @@ -26,10 +25,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.UUID; +import java.util.*; import java.util.stream.Collectors; @Service @@ -65,12 +61,16 @@ public class MesShippingOrderManagementService extends BaseMesService detailDeleteList = detailService.findAll(detailPackBean); + if(CollectionUtils.isEmpty(detailDeleteList)){ + MesException.throwMesBusiException("发运单【%s】明细信息不存在",originBean.getShippingCode()); + } + Map> detailMap = detailDeleteList.stream().collect(Collectors.groupingBy(MesShippingOrderManagementDetail::getPartNo)); - Map> detailMap = detailDeleteList.stream().collect(Collectors.groupingBy(k -> k.getPartNo())); + //查询装车单 + MesLoadingList loadingList = mesLoadingListService.getMesLoadingListByShippingCode(originBean.getOrganizeCode(), originBean.getShippingCode()); List jisShippingList = new ArrayList<>(); MesPartShippingGroup mesPartShippingGroup = mesPartShippingGroupService.getMesPartShippingGroup(bean.getOrganizeCode(), originBean.getShippingGroupCode()); + String erpWarerhouse = mesPartShippingGroup == null || StringUtils.isEmpty(mesPartShippingGroup.getSrcWarerhouse()) ? configService.getCfgValue(bean.getOrganizeCode(), "ERP_WARERHOUSE") : mesPartShippingGroup.getSrcWarerhouse(); + String erpWarehous = configService.getCfgValue(bean.getOrganizeCode(), "ERP_WAREHOUS"); + detailMap.forEach((k, v) -> { MesPartSap part = partService.getMesPartSapByPartNo(v.get(0).getPartNo(), bean.getOrganizeCode()); @@ -307,10 +315,10 @@ public class MesShippingOrderManagementService extends BaseMesService Date: Thu, 19 Sep 2024 16:20:35 +0800 Subject: [PATCH 14/25] =?UTF-8?q?=E6=9F=A5=E8=AF=A2bom=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E7=94=9F=E6=95=88=E5=BC=80=E5=A7=8B=E6=97=B6=E9=97=B4=E5=88=86?= =?UTF-8?q?=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBomService.java | 2 +- .../i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBomService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBomService.java index 87520bf..5123e76 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBomService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBomService.java @@ -127,7 +127,7 @@ public class MesBomService extends BaseMesService implements IMesBomServ } MesBom next = mesBoms.iterator().next(); //如果存在多个bomCode取最新的一个 - return mesBoms.stream().collect(Collectors.groupingBy(MesBom::getBomCode)).get(next.getBomCode()); + return mesBoms.stream().collect(Collectors.groupingBy(t -> t.getBomCode() + t.getEffStartTime())).get(next.getBomCode() + next.getEffStartTime()); } @Override diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 0a95afd..234ee60 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -1619,7 +1619,7 @@ public class MesWorkOrderService extends BaseMesService implements } MesBom next = mesBoms.iterator().next(); //如果存在多个bomCode取最新的一个 - return mesBoms.stream().collect(Collectors.groupingBy(MesBom::getBomCode)).get(next.getBomCode()); + return mesBoms.stream().collect(Collectors.groupingBy(t -> t.getBomCode() + t.getEffStartTime())).get(next.getBomCode() + next.getEffStartTime()); } From 896f6d5aedf6e09473b2cfc3917dd128ad7fef25 Mon Sep 17 00:00:00 2001 From: "xiangwei.zhang" <752558143@qq.com> Date: Thu, 19 Sep 2024 17:49:12 +0800 Subject: [PATCH 15/25] =?UTF-8?q?=E5=AF=B9=E8=B4=A6=E5=8D=95=E4=BF=A1?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/apiservice/schedulejob/MesAccountJob.java | 30 ++++-- .../base/MesProductionRecordServiceImpl.java | 119 ++++++++++++--------- .../serviceimpl/base/MesWorkOrderService.java | 1 + 3 files changed, 93 insertions(+), 57 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesAccountJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesAccountJob.java index d0764a2..1730825 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesAccountJob.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesAccountJob.java @@ -68,6 +68,17 @@ public class MesAccountJob extends BaseMesScheduleJob { public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) { JSONObject jsonObject = new JSONObject(); + String json = this.getJobParam(); + //String json = "{\"startTime\":\"2024-09-15 07:50:00\",\"endTime\":\"2024-09-17 08:00:00\"}"; + com.alibaba.fastjson.JSONObject reqJson = com.alibaba.fastjson.JSONObject.parseObject(json); + String startDateTime = reqJson.getString("startTime"); + String endDateTime = reqJson.getString("endTime"); + if (reqJson == null || (StringUtils.isEmpty(startDateTime) && StringUtils.isEmpty(endDateTime))) { + Date yesterday = TimeTool.getDateBefore(new Date(), 1); + startDateTime = FORMAT_YYYY_MM_DD.format(yesterday) + " " + " 07:50:00"; + endDateTime = TimeTool.getToday() + " 08:00:00"; + } + jsonObject.putIfAbsent("organizeCode", "CK01"); jsonObject.putIfAbsent("userName", "job"); @@ -80,12 +91,12 @@ public class MesAccountJob extends BaseMesScheduleJob { if (null == userName) { userName = "JOB"; } - Date yesterday = TimeTool.getDateBefore(new Date(), 1); + //String startDateTime = FORMAT_YYYY_MM_DD.format(yesterday) + " " + " 07:50:00"; //String endDateTime = TimeTool.getToday() + " 08:00:00"; - String startDateTime = "2024-09-15 07:50:00"; - String endDateTime = "2024-09-16 08:00:00"; - // List list = Stream.of("760BFoaming").collect(Collectors.toList()); + //String startDateTime = "2024-09-14 07:50:00"; + //String endDateTime = "2024-09-15 08:00:00"; + //List list = Stream.of("HT3300MIX").collect(Collectors.toList()); DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); //DdlPreparedPack.getInPackList(list, "equipmentCode", ddlPackBean); DdlPreparedPack.getNumEqualPack(10, "equipmentType", ddlPackBean); @@ -96,7 +107,7 @@ public class MesAccountJob extends BaseMesScheduleJob { } try { for (MesEquipment equipment : equipments) { - + LOGGER.info("正常处理设备编号:{}的设备数据开始", equipment.getEquipmentCode()); DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getStringEqualPack(equipment.getEquipmentCode(), "equipmentCode", packBean); @@ -105,11 +116,13 @@ public class MesAccountJob extends BaseMesScheduleJob { DdlPreparedPack.getOrderBy("createDatetime", CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), packBean); List recordLogs = mesProductRecordLogRepository.findByHqlWhere(packBean); - recordLogs = recordLogs.stream().filter(productRecordLog ->(!Objects.equal(productRecordLog.getType(), "record") && !Objects.equal(productRecordLog.getType(), "logdetail")) + /*recordLogs = recordLogs.stream().filter(productRecordLog ->(!Objects.equal(productRecordLog.getType(), "record") && !Objects.equal(productRecordLog.getType(), "logdetail")) || (Objects.equal(productRecordLog.getType(), "logdetail") && StringUtils.isEmpty(productRecordLog.getPartNo()))).collect(Collectors.toList()); - +*/ if (CollectionUtils.isEmpty(recordLogs)) { - return; + continue; + + } if (equipment.getEquipmentCode().contains("HT")) { String partNo = ""; @@ -160,6 +173,7 @@ public class MesAccountJob extends BaseMesScheduleJob { } mesProductRecordLogRepository.saveAll(productRecordLogs); } + LOGGER.info("正常处理设备编号:{}的设备数据结束"); } }catch (Exception e) { e.printStackTrace(); 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 index 0244ea8..5fc4af7 100644 --- 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 @@ -321,8 +321,8 @@ public class MesProductionRecordServiceImpl extends BaseMesService partitionList = partition(mesProductAccountResModels, pager.getPageSize(), pager.getCurrentPage()); for (MesProductAccountResModel mesProductAccountResModel : partitionList) { boolean isErrorCount = false; - int size = mesProductAccountResModel.getPartNo().split(",").length; + int size = mesProductAccountResModel.getPartNo().split(",").length == 1 ? mesProductAccountResModel.getPartNo().split(";").length : 1; int productCount = Integer.valueOf(mesProductAccountResModel.getProductCount()); int detailCount = Integer.valueOf(mesProductAccountResModel.getDetailCount()); if (detailCount * size > productCount) { @@ -562,6 +563,10 @@ public class MesProductionRecordServiceImpl extends BaseMesService recordLogs = mesProductRecordLogRepository.findByHqlWhere(packBean); + + + + if (mesProductAccountResModel.getEquipmentCode().contains("HT")) { // 1 判断2个 shotcount之间有没有加工记录,如果没有,就需要看 设备是不是192,然后看是否是网络原因 @@ -584,16 +589,17 @@ public class MesProductionRecordServiceImpl extends BaseMesService finishList = Stream.of("Product_finish","Part_Finish").collect(Collectors.toList()); for (MesProductRecordLog recordLog : recordLogs) { + int errorCount = 0; + if (Objects.equal(recordLog.getCategoryLevelTwo(), "BYPASS")) { if (Objects.equal(recordLog.getEquipVariableValue(), "True")) { if (StringUtils.isEmpty(startTime)) { @@ -613,7 +619,7 @@ public class MesProductionRecordServiceImpl extends BaseMesService recordLogs) { int result = 0; + // 定义有问题的开始时间 String startTime = ""; + // 定义有问题的结束时间 String endTime = ""; - int errorCount = 0; + // 错误个数 + // 异常原因 String reason = ""; - String reasonOffline = "【%s】到【%s】,客户端下线,导致【%s】个完成信号丢失"; - String reasonQuality = "【%s】到【%s】设备信号质量为0,导致【%s】个完成信号丢失"; - String reasonBypass = "【%s】到【%s】设备打BYPASS,导致【%s】个完成信号丢失"; - String releaseBypass = "【%s】到【%s】设备在MES没有发允许加工指令的情况下,给了【%s】个完成信号"; + String reasonOffline = "因其他原因:系统,网络,发版等,导致【%s】的完成信号丢失【%s】个;"; + //String reasonOffline = "【%s】,客户端下线,导致【%s】个完成信号丢失"; + String reasonQuality = "【%s】设备信号质量为0,导致【%s】个完成信号丢失;"; + String reasonBypass = "【%s】设备打BYPASS,导致【%s】个完成信号丢失;"; + String releaseBypass = "【%s】设备在MES没有发允许加工指令的情况下,给了【%s】个完成信号;"; + // BYPASS 默认fasle boolean bypassFlag = false; + // release 默认false boolean releaseFlag = false; //List finishList = Stream.of("Product_finish","PART_OK","Part_Finish","Product_OK").collect(Collectors.toList()); List finishList = Stream.of("Product_finish","Part_Finish").collect(Collectors.toList()); + String singleReason = ""; for (MesProductRecordLog recordLog : recordLogs) { + int errorCount = 0; + + // BYPASS 逻辑开始 + // 第一次遇到BYPASS = true, 取下开始时间,后面的加工记录一直增加errorCount 直到出现 BYPASS = FALSE, if (Objects.equal(recordLog.getCategoryLevelTwo(), "BYPASS") && Objects.equal(recordLog.getEquipVariableValue(), "True")) { - if (StringUtils.isEmpty(startTime)) { - startTime = recordLog.getCreateDatetime(); - } + startTime = recordLog.getCreateDatetime(); + endTime = recordLog.getCreateDatetime(); - // 每次都取反,第一次是打开,那第二次就是关闭了 - bypassFlag = !bypassFlag; - if (!bypassFlag) { - errorCount = 0; - } + bypassFlag = true; continue; } if (bypassFlag && recordLog.getType().equals("record")) { errorCount ++; - reason = String.format(reasonBypass,startTime, endTime, errorCount +""); + singleReason += String.format(reasonBypass,startTime, errorCount +""); continue; } if (bypassFlag && Objects.equal(recordLog.getCategoryLevelTwo(), "BYPASS") && Objects.equal(recordLog.getEquipVariableValue(), "False")) { endTime = recordLog.getCreateDatetime(); + reason += singleReason + ";"; + singleReason = ""; + errorCount = 0; bypassFlag = false; continue; } + if (!releaseFlag) { + if (finishList.contains(recordLog.getCategoryLevelTwo()) && Objects.equal(recordLog.getEquipVariableValue(), "True")) { startTime = recordLog.getCreateDatetime(); + errorCount ++; + reason += String.format(releaseBypass, startTime, errorCount + ""); + continue; + } + } + // BYPASS 逻辑结束 result = 1 代表一个成功新型号,遇到一个加工记录就会-1 变成0 if (result == 0) { if (Objects.equal(recordLog.getCategoryLevelTwo(), "Work_Allow") && Objects.equal(recordLog.getEquipVariableValue(), "True")) { releaseFlag = true; @@ -702,22 +725,19 @@ public class MesProductionRecordServiceImpl extends BaseMesService 0) { - if (StringUtils.isEmpty(startTime)) { - startTime = recordLog.getCreateDatetime(); - } + startTime = recordLog.getCreateDatetime(); + errorCount ++; endTime = recordLog.getCreateDatetime(); if (Objects.equal(recordLog.getQuality(), "192")) { - reason = String.format(reasonOffline,startTime, endTime, errorCount +""); + reason += String.format(reasonOffline,startTime, errorCount +""); } else { - reason = String.format(reasonQuality,startTime, endTime, errorCount +""); + reason += String.format(reasonQuality,startTime, errorCount +""); } } if (recordLog.getType().equals("record")) { @@ -768,6 +788,7 @@ public class MesProductionRecordServiceImpl extends BaseMesService> partition = Lists.partition(list, pageSize); // 总页数 int pages = partition.size(); + pageNum = pageNum -1; pageNum = pageNum <= 0 ? 0 : (pageNum <= (pages - 1) ? pageNum : (pages - 1)); return partition.get(pageNum); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 234ee60..97dd03d 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -1281,6 +1281,7 @@ public class MesWorkOrderService extends BaseMesService implements newMesProductOffLine.setSapWorkCenter(mesWorkOrder.getErpWorkCenter()); newMesProductOffLine.setOrganizeCode(mesWorkOrder.getOrganizeCode()); newMesProductOffLine.setDescription(nowTime); + newMesProductOffLine.setBomCode(mesBom.getBomCode()); ConvertBean.serviceModelInitialize(newMesProductOffLine, mesWorkOrder.getCreateUser()); return newMesProductOffLine; From 19acc121d20808a14b4358848a64326ab917b93a Mon Sep 17 00:00:00 2001 From: gsz Date: Fri, 20 Sep 2024 12:28:58 +0800 Subject: [PATCH 16/25] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E5=AE=9E=E6=97=B6?= =?UTF-8?q?=E5=80=BC=E6=9F=A5=E8=AF=A2=20=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/report/MesEquipmentLogDetailService.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesEquipmentLogDetailService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesEquipmentLogDetailService.java index 750a8b2..50f2722 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesEquipmentLogDetailService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesEquipmentLogDetailService.java @@ -17,6 +17,7 @@ import org.springframework.util.StringUtils; import java.util.ArrayList; import java.util.Arrays; +import java.util.List; import java.util.StringJoiner; @Service @@ -30,9 +31,6 @@ public class MesEquipmentLogDetailService extends BaseMesService 1) { DdlPreparedPack.getInPackList(Arrays.asList(bean.getEquipVariableName().split(",")), MesExtConstWords.EQUIP_VARIABLE_NAME, packBean); @@ -40,6 +38,12 @@ public class MesEquipmentLogDetailService extends BaseMesService stringList = Arrays.asList(bean.getEquipVariableIds().split(",")); + packBean.setWhereAppend(packBean.getWhereAppend() + " and equipVariableId in (" + String.join(",", stringList) + ") "); + } + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{MesExtConstWords.CREATE_DATE_TIME}, packBean); } From dd8464903f71c5c17de0b6a14a238971570ffac2 Mon Sep 17 00:00:00 2001 From: gsz Date: Fri, 20 Sep 2024 15:45:03 +0800 Subject: [PATCH 17/25] =?UTF-8?q?43172=20=E7=82=B9=E6=A3=80=E4=B8=BB?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E4=B8=BB=E8=A1=A8=E5=AF=BC=E5=85=A5=E5=92=8C?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=97=B6=EF=BC=8C=E5=9F=BA=E4=BA=8E=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E4=BB=A3=E7=A0=81=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiservice/serviceimpl/base/MesEquipmentSpotCheckService.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentSpotCheckService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentSpotCheckService.java index aeba880..1550550 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentSpotCheckService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentSpotCheckService.java @@ -23,7 +23,13 @@ public class MesEquipmentSpotCheckService extends BaseMesService beanList) { From 2e525494c642914b2730d9122922f1e51827aaf8 Mon Sep 17 00:00:00 2001 From: "xiangwei.zhang" <752558143@qq.com> Date: Tue, 24 Sep 2024 19:48:58 +0800 Subject: [PATCH 18/25] =?UTF-8?q?=E5=AF=B9=E8=B4=A6=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/apiservice/schedulejob/MesAccountJob.java | 23 ++++++++++++++++++++-- .../base/MesProductionRecordServiceImpl.java | 13 +++++------- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesAccountJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesAccountJob.java index 1730825..fd4132d 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesAccountJob.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesAccountJob.java @@ -69,7 +69,7 @@ public class MesAccountJob extends BaseMesScheduleJob { JSONObject jsonObject = new JSONObject(); String json = this.getJobParam(); - //String json = "{\"startTime\":\"2024-09-15 07:50:00\",\"endTime\":\"2024-09-17 08:00:00\"}"; + //String json = "{\"startTime\":\"2024-09-13 07:50:00\",\"endTime\":\"2024-09-19 08:00:00\"}"; com.alibaba.fastjson.JSONObject reqJson = com.alibaba.fastjson.JSONObject.parseObject(json); String startDateTime = reqJson.getString("startTime"); String endDateTime = reqJson.getString("endTime"); @@ -96,7 +96,7 @@ public class MesAccountJob extends BaseMesScheduleJob { //String endDateTime = TimeTool.getToday() + " 08:00:00"; //String startDateTime = "2024-09-14 07:50:00"; //String endDateTime = "2024-09-15 08:00:00"; - //List list = Stream.of("HT3300MIX").collect(Collectors.toList()); + //List list = Stream.of("A88_EOL_Electric_inspection").collect(Collectors.toList()); DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); //DdlPreparedPack.getInPackList(list, "equipmentCode", ddlPackBean); DdlPreparedPack.getNumEqualPack(10, "equipmentType", ddlPackBean); @@ -128,6 +128,25 @@ public class MesAccountJob extends BaseMesScheduleJob { String partNo = ""; List productRecordLogList = new ArrayList<>(); + DdlPackBean detailPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(equipment.getEquipmentCode(), "equipmentCode", detailPackBean); + DdlPreparedPack.getStringLikerPack("InjDataSeries", "equipVariableName", detailPackBean); + DdlPreparedPack.getStringEqualPack("192", "quality", detailPackBean); + + DdlPreparedPack.getStringSmallerNotEqualPack(startDateTime, "createDatetime", detailPackBean); + + DdlPreparedPack.getOrderBy("createDatetime", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), detailPackBean); + List detailLogs = mesProductRecordLogRepository.findByHqlTopWhere(detailPackBean, 1); + DdlPackBean mouldMultipackBeanTemp = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(detailLogs.get(0).getEquipVariableValue(), "mouldNo", mouldMultipackBeanTemp); + List mouldMultiCavities = mesMouldMultiCavityRepository.findByHqlWhere(mouldMultipackBeanTemp); + if (CollectionUtils.isEmpty(mouldMultiCavities)) { + continue; + } else { + List partList = mouldMultiCavities.stream().map(MesMouldMultiCavity::getPartNo).distinct().collect(Collectors.toList()); + partNo = String.join(",", partList); + } + for (MesProductRecordLog log : recordLogs) { if (!StringUtils.isEmpty(log.getPartNo()) && log.getEquipVariableName() != null && !log.getEquipVariableName().contains("InjDataSeries")) { 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 index 5fc4af7..9cfd202 100644 --- 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 @@ -674,7 +674,6 @@ public class MesProductionRecordServiceImpl extends BaseMesService finishList = Stream.of("Product_finish","PART_OK","Part_Finish","Product_OK").collect(Collectors.toList()); List finishList = Stream.of("Product_finish","Part_Finish").collect(Collectors.toList()); - String singleReason = ""; for (MesProductRecordLog recordLog : recordLogs) { int errorCount = 0; @@ -688,21 +687,20 @@ public class MesProductionRecordServiceImpl extends BaseMesService Date: Wed, 25 Sep 2024 17:49:14 +0800 Subject: [PATCH 19/25] =?UTF-8?q?SPS=E6=8B=89=E5=8A=A8=E6=BC=94=E7=A4=BA?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/apiservice/config/WebServiceConfig.java | 7 +++++++ .../base/MesPullingOrderInfoService.java | 21 ++++++++------------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/config/WebServiceConfig.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/config/WebServiceConfig.java index 2600083..ebff3a7 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/config/WebServiceConfig.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/config/WebServiceConfig.java @@ -21,6 +21,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.config; import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.webservice.WebServiceServer; import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.webservice.WebServiceServerIns; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.webservice.WebServiceServerSPS; import org.apache.cxf.Bus; import org.apache.cxf.jaxws.EndpointImpl; import org.apache.cxf.transport.servlet.CXFServlet; @@ -63,4 +64,10 @@ public class WebServiceConfig { endpoint.publish("/mes-service-instrument"); return endpoint; } + @Bean + public Endpoint endpointSpsEqu() { + EndpointImpl endpoint = new EndpointImpl(bus, new WebServiceServerSPS()); + endpoint.publish("/mes-service-spsEqu"); + return endpoint; + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java index 3663716..259f6f3 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java @@ -214,6 +214,7 @@ public class MesPullingOrderInfoService extends BaseMesService byHqlWhere = mesPullingOrderPartInfoRepository.findByHqlWhere(partPackBean); - - resultMap.put("", mesPullingOrder); - resultMap.put("success", true); - - String message = "更新SPS状态成功,已发送SPS信息给设备! id:" + mesPullingOrder.getId() + "Code:" + mesPullingOrder.getPullingOrderNo() + "产线" + assemblyLine + "拉动组" + pullingGroupCode + ""; - resultMap.put("message", message); //更新主表状态 源系统为25配料完成 现在-【已发送设备-30】 mesPullingOrder.setPullOrderStatus(MesExtEnumUtil.PULL_ORDER_STATUS.SPS_PULL.getValue()); ConvertBean.serviceModelUpdate(mesPullingOrder, "WS.SPS"); baseRDao.update(mesPullingOrder); + String message = "更新SPS状态成功,已发送SPS信息给设备! id:" + mesPullingOrder.getId() + "Code:" + mesPullingOrder.getPullingOrderNo() + "产线" + assemblyLine + "拉动组" + pullingGroupCode + ""; + resultMap.put("success", true); + resultMap.put("message", message); + return resultMap; } From 812a821843eb3689fde27af491bfc11159d8d3b8 Mon Sep 17 00:00:00 2001 From: yxw Date: Thu, 26 Sep 2024 09:24:09 +0800 Subject: [PATCH 20/25] =?UTF-8?q?=E8=A3=85=E9=85=8D=E7=9B=AE=E8=A7=86?= =?UTF-8?q?=E5=8D=95=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java index e5195d6..9349981 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java @@ -78,9 +78,9 @@ public class AssemblyVisualListPrintStrategy implements IPrintTemplateStrategySe // 为空时显示内容 String isNullViewContent = StringUtils.isEmpty(partProdGroup.getIsNullViewContent()) ? "" : partProdGroup.getIsNullViewContent(); for (Integer index = 0; index < totalCount; index++) { - String displayValue = workOrderAssemblyList.size() -1 < index ? isNullViewContent : workOrderAssemblyList.get(0).getDisplayValue(); + String displayValue = workOrderAssemblyList.size() -1 < index ? isNullViewContent : workOrderAssemblyList.get(index).getDisplayValue(); - resultMap.put(MesExtConstWords.ASSEMBLY_PARAM + (index+1), StringUtils.isEmpty(displayValue) ? "" : displayValue); + resultMap.put(MesExtConstWords.ASSEMBLY_PARAM + (index+1), StringUtils.isEmpty(displayValue) ? StringUtils.isEmpty(isNullViewContent) ? "" : null : displayValue); } printDataMapList.add(resultMap); From b4e75fc493b5b1a3961f6c6e382cc7ddf5425a0a Mon Sep 17 00:00:00 2001 From: yxw Date: Thu, 26 Sep 2024 10:07:09 +0800 Subject: [PATCH 21/25] =?UTF-8?q?=E8=A3=85=E9=85=8D=E7=9B=AE=E8=A7=86?= =?UTF-8?q?=E5=8D=95=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/MesWorkOrderService.java | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 8fe8408..69106e9 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -245,7 +245,7 @@ public class MesWorkOrderService extends BaseMesService implements } updateMesWorkOrder(result,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.UPDATE,0); - if (isSavePrintQueue) insertPrintQueue(result, null); + if (isSavePrintQueue) insertPrintQueue(result); return result; } @@ -456,32 +456,22 @@ public class MesWorkOrderService extends BaseMesService implements } // 创建工单打印队列 - insertPrintQueue(item, mesPartProdGroup); + insertPrintQueue(item); } else { item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue()); } } - private MesPrintQueue insertPrintQueue(MesWorkOrder workOrder, MesPartProdGroup mesPartProdGroup) { + private MesPrintQueue insertPrintQueue(MesWorkOrder workOrder) { if (workOrder.getWorkOrderType() != MesExtEnumUtil.ORDER_TYPE.SORT.getValue()) return null; if (workOrder.getWorkOrderStatus() != MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()) return null; - if (mesPartProdGroup == null) { - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(workOrder.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(workOrder.getPartProdGroupCode(), "partProdGroupCode", ddlPackBean); - mesPartProdGroup = mesPartProdGroupRDao.getByProperty(ddlPackBean); - if(Objects.isNull(mesPartProdGroup)){ - MesException.throwMesBusiException("生产线组【%s】信息不存在",workOrder.getPartProdGroupCode()); - } - } - MesPrintQueue printQueue = new MesPrintQueue(); BeanUtils.copyProperties(workOrder, printQueue, MesExtConstWords.ID); printQueue.setPrintQueueType(MesExtEnumUtil.PRINT_QUEUE_TYPE.WORK_ORDER_ASSEMBLY.getValue()); - printQueue.setPartProdGroupCode(mesPartProdGroup.getPartProdGroupCode()); printQueue.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue()); return printQueueRepository.save(printQueue); } @@ -620,7 +610,7 @@ public class MesWorkOrderService extends BaseMesService implements mesWorkOrderLogList.add(workOrderLog); // 如果工单为发布状态则新增打印队列 - insertPrintQueue(copyMesWorkOrder, null); + insertPrintQueue(copyMesWorkOrder); continue; } else if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.BTO.getValue()) { @@ -1193,7 +1183,7 @@ public class MesWorkOrderService extends BaseMesService implements return; } - insertPrintQueue(workOrder, null); + insertPrintQueue(workOrder); } From a5ad0e628f85e5da2b16adc27f5759b7fdf7500b Mon Sep 17 00:00:00 2001 From: gsz Date: Thu, 26 Sep 2024 14:20:05 +0800 Subject: [PATCH 22/25] =?UTF-8?q?43251=20=E6=AD=A6=E6=B1=89PCN-SPS?= =?UTF-8?q?=E7=89=A9=E6=96=99=E6=8B=89=E5=8A=A8WebService=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/base/MesPullingOrderInfoService.java | 4 ++-- .../serviceimpl/webservice/WebServiceServerSPS.java | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java index 259f6f3..3f6a064 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java @@ -273,10 +273,10 @@ public class MesPullingOrderInfoService extends BaseMesService Date: Thu, 26 Sep 2024 15:30:34 +0800 Subject: [PATCH 23/25] =?UTF-8?q?=E5=AF=B9=E8=B4=A6=E5=8D=95=E4=BF=A1?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/MesProductionRecordServiceImpl.java | 219 +++++++++++++++++---- 1 file changed, 180 insertions(+), 39 deletions(-) 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 index 9cfd202..f038a66 100644 --- 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 @@ -6,6 +6,7 @@ import cn.estsh.i3plus.ext.mes.apiservice.utils.BeanUtil; import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; import cn.estsh.i3plus.ext.mes.pojo.model.MesLoadingListDetailModel; import cn.estsh.i3plus.ext.mes.pojo.model.MesShippingOrderManagementDetailModel; +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; @@ -26,6 +27,7 @@ import cn.estsh.i3plus.pojo.mes.repository.MesProductRecordLogRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import com.google.common.base.Objects; import com.google.common.collect.Lists; +import com.xxl.job.core.util.DateUtil; import lombok.extern.slf4j.Slf4j; import org.hibernate.SQLQuery; import org.hibernate.query.internal.NativeQueryImpl; @@ -39,10 +41,7 @@ import org.springframework.util.StringUtils; import javax.persistence.EntityManager; import javax.persistence.Query; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -545,7 +544,8 @@ public class MesProductionRecordServiceImpl extends BaseMesService partitionList = partition(mesProductAccountResModels, pager.getPageSize(), pager.getCurrentPage()); for (MesProductAccountResModel mesProductAccountResModel : partitionList) { boolean isErrorCount = false; - int size = mesProductAccountResModel.getPartNo().split(",").length == 1 ? mesProductAccountResModel.getPartNo().split(";").length : 1; + int size = mesProductAccountResModel.getPartNo().split(",").length == 1 ? mesProductAccountResModel.getPartNo().split(";").length : mesProductAccountResModel.getPartNo().split(",").length; + int productCount = Integer.valueOf(mesProductAccountResModel.getProductCount()); int detailCount = Integer.valueOf(mesProductAccountResModel.getDetailCount()); if (detailCount * size > productCount) { @@ -564,12 +564,24 @@ public class MesProductionRecordServiceImpl extends BaseMesService recordLogs = mesProductRecordLogRepository.findByHqlWhere(packBean); + // + DdlPackBean packOffilinBean = DdlPackBean.getDdlPackBean("CK01"); + DdlPreparedPack.getStringEqualPack(mesProductAccountResModel.getEquipmentCode(), "equipmentCode", packOffilinBean); + Date yesterday = TimeTool.getDateBefore(DateUtil.parseDateTime(productAccountModel.getStartTime()), 1); + String yesterdayStr = DateUtil.formatDateTime(yesterday); + DdlPreparedPack.getStringSmallerNotEqualPack(productAccountModel.getStartTime(), "createDatetime", packOffilinBean); + DdlPreparedPack.getStringBiggerPack(yesterdayStr, "createDatetime", packOffilinBean); + DdlPreparedPack.getStringEqualPack(mesProductAccountResModel.getPartNo(), "partNo", packOffilinBean); + DdlPreparedPack.getStringLikerPack("客户端", "message", packOffilinBean); + DdlPreparedPack.getOrderBy("createDatetime", CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), packOffilinBean); + List offlineRecordLogs = mesProductRecordLogRepository.findByHqlWhere(packOffilinBean); + recordLogs.addAll(offlineRecordLogs); + recordLogs = recordLogs.stream().sorted(Comparator.comparing(MesProductRecordLog::getCreateDatetime)).collect(Collectors.toList()); if (mesProductAccountResModel.getEquipmentCode().contains("HT")) { // 1 判断2个 shotcount之间有没有加工记录,如果没有,就需要看 设备是不是192,然后看是否是网络原因 - String reason = handleHT(recordLogs); mesProductAccountResModel.setErrorReason(reason); } else if (equimentList.contains(mesProductAccountResModel.getEquipmentCode())) { @@ -590,16 +602,48 @@ public class MesProductionRecordServiceImpl extends BaseMesService finishList = Stream.of("Product_finish","Part_Finish").collect(Collectors.toList()); for (MesProductRecordLog recordLog : recordLogs) { int errorCount = 0; + /*if (recordLog.getId() ==1834566428726444032l) { + int a = 1; + }*/ + if (Objects.equal(recordLog.getType(), "monitor") && recordLog.getMessage().contains("客户端下线")) { + startTime = recordLog.getCreateDatetime(); + offlineFlag = true; + continue; + } + if (Objects.equal(recordLog.getType(), "monitor") && recordLog.getMessage().contains("客户端上线") ) { + endTime = recordLog.getCreateDatetime(); + offlineFlag = false; + if (errorCount > 0) { + reason += String.format(offlineReason, startTime, endTime, errorCount + ""); + errorCount = 0; + } + //result = 0; + continue; + } + if (offlineFlag &&finishList.contains(recordLog.getCategoryLevelTwo()) && Objects.equal(recordLog.getEquipVariableValue(), "True")) { + if (result > 0) { + //endTime = recordLog.getCreateDatetime(); + errorCount ++; + reason += String.format(offlineReason, startTime, startTime, errorCount + ""); + continue; + } + errorCount ++; + result++; + continue ; + } + if (Objects.equal(recordLog.getCategoryLevelTwo(), "BYPASS")) { if (Objects.equal(recordLog.getEquipVariableValue(), "True")) { if (StringUtils.isEmpty(startTime)) { @@ -628,19 +672,18 @@ public class MesProductionRecordServiceImpl extends BaseMesService finishList = Stream.of("Product_finish","PART_OK","Part_Finish","Product_OK").collect(Collectors.toList()); List finishList = Stream.of("Product_finish","Part_Finish").collect(Collectors.toList()); + String preReason = ""; for (MesProductRecordLog recordLog : recordLogs) { int errorCount = 0; - - // BYPASS 逻辑开始 - // 第一次遇到BYPASS = true, 取下开始时间,后面的加工记录一直增加errorCount 直到出现 BYPASS = FALSE, - if (Objects.equal(recordLog.getCategoryLevelTwo(), "BYPASS") && Objects.equal(recordLog.getEquipVariableValue(), "True")) { + if (recordLog.getId() ==1288411771211612170l) { + int a = 1; + } + if (Objects.equal(recordLog.getType(), "monitor") && recordLog.getMessage().contains("客户端下线")) { startTime = recordLog.getCreateDatetime(); - + offlineFlag = true; + continue; + } + if (Objects.equal(recordLog.getType(), "monitor") && recordLog.getMessage().contains("客户端上线") ) { endTime = recordLog.getCreateDatetime(); - bypassFlag = true; + offlineFlag = false; + if (result > 0) { + reason += String.format(offlineReason, startTime, endTime, 1 + ""); + errorCount = 0; + } + //result = 0; continue; } + // 如果是bypass 遇到的所有加工完成指令 都计数并且原因是bypass导致 if (bypassFlag && finishList.contains(recordLog.getCategoryLevelTwo()) && Objects.equal(recordLog.getEquipVariableValue(), "True")) { + if (!StringUtils.isEmpty(preReason)) { + reason += preReason; + } + preReason = String.format(reasonBypass,startTime, 1 +""); + //reason += String.format(reasonBypass,startTime, 1 +""); + continue; + } + if (offlineFlag && finishList.contains(recordLog.getCategoryLevelTwo()) && Objects.equal(recordLog.getEquipVariableValue(), "True")) { + // 如果经过了1个finish,然后再经过客户端下线,再遇到finish则认为是客户端下线引起 + if (result > 0) { + //endTime = recordLog.getCreateDatetime(); + errorCount ++; + reason += String.format(offlineReason, startTime, startTime, errorCount + ""); + continue; + } errorCount ++; - reason += String.format(reasonBypass,startTime, errorCount +""); + result++; + continue ; + } + + if (Objects.equal(recordLog.getCategoryLevelTwo(), "BYPASS") && Objects.equal(recordLog.getEquipVariableValue(), "True")) { + startTime = recordLog.getCreateDatetime(); + + endTime = recordLog.getCreateDatetime(); + bypassFlag = true; continue; } + + // 遇到bypass = false 则重置错误次数 if (bypassFlag && Objects.equal(recordLog.getCategoryLevelTwo(), "BYPASS") && Objects.equal(recordLog.getEquipVariableValue(), "False")) { endTime = recordLog.getCreateDatetime(); errorCount = 0; bypassFlag = false; continue; } + // 如果没有发送release 就出现了加工完成信号,则记录错误原因,且预错误,遇到有加工记录则取消 + /** + * 没有release有完成信号 需要预处理,先得出一个结论:如果没有发送release指令,导致信号丢失 + * 后面如果没有加工记录,则预处理结果变成实际结果 + * 后面有加工记录则预处理结果清空 + */ if (!releaseFlag) { if (finishList.contains(recordLog.getCategoryLevelTwo()) && Objects.equal(recordLog.getEquipVariableValue(), "True")) { + if (!StringUtils.isEmpty(preReason)) { + reason += preReason; + } startTime = recordLog.getCreateDatetime(); errorCount ++; - reason += String.format(releaseBypass, startTime, errorCount + ""); + preReason = String.format(releaseBypass, startTime, errorCount + ""); continue; } } // BYPASS 逻辑结束 result = 1 代表一个成功新型号,遇到一个加工记录就会-1 变成0 if (result == 0) { + // 没有加工完成指令,或者没有release指令,但是有加工记录,则也需要重置 + if (recordLog.getType().equals("record")) { + releaseFlag = false; + bypassFlag = false; + preReason = ""; + } + if (Objects.equal(recordLog.getCategoryLevelTwo(), "Work_Allow") && Objects.equal(recordLog.getEquipVariableValue(), "True")) { releaseFlag = true; continue; @@ -717,28 +813,48 @@ public class MesProductionRecordServiceImpl extends BaseMesService 0) { + reason += String.format(offlineReason, startTime, endTime, errorCount + ""); + errorCount = 0; + } + continue; + } + if (offlineFlag && Objects.equal(recordLog.getCategoryLevelTwo(),"shot_counter") && recordLog.getEquipVariableValue().compareTo("0") > 0) { + errorCount ++; + continue ; + } if (result == 0) { if (!Objects.equal(recordLog.getCategoryLevelTwo(),"shot_counter") ) { @@ -764,12 +903,11 @@ public class MesProductionRecordServiceImpl extends BaseMesService 0) { startTime = recordLog.getCreateDatetime(); - errorCount ++; endTime = recordLog.getCreateDatetime(); if (Objects.equal(recordLog.getQuality(), "192")) { - reason += String.format(reasonOffline,startTime, errorCount +""); + reason += String.format(reasonOffline,startTime, 1 +""); } else { - reason += String.format(reasonQuality,startTime, errorCount +""); + reason += String.format(reasonQuality,startTime, 1 +""); } } if (recordLog.getType().equals("record")) { @@ -777,6 +915,9 @@ public class MesProductionRecordServiceImpl extends BaseMesService 0 && offlineFlag) { + reason += String.format(offlineReason, startTime, "最后", errorCount + ""); + } return reason; } From 98786338057465c524e7ebf9d3bc6a4395a0c398 Mon Sep 17 00:00:00 2001 From: yxw Date: Fri, 27 Sep 2024 13:30:21 +0800 Subject: [PATCH 24/25] =?UTF-8?q?1=E3=80=81MesProductionPartContext=20?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0cutQty=EF=BC=88=E8=A3=81=E7=89=87=E5=B7=A5?= =?UTF-8?q?=E5=8D=95=E6=95=B0=E9=87=8F=EF=BC=89=202=E3=80=81=E8=A3=81?= =?UTF-8?q?=E7=89=87=E5=B7=A5=E5=8D=95=E7=BB=91=E5=AE=9A=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/api/base/IMesWorkOrderCutService.java | 9 ++++ .../controller/base/MesWorkOrderCutController.java | 19 ++++++- .../serviceimpl/base/MesWorkOrderCutService.java | 59 +++++++++++++++------- 3 files changed, 69 insertions(+), 18 deletions(-) diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.java index 33d62e5..3650596 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.java @@ -1,6 +1,9 @@ package cn.estsh.i3plus.ext.mes.api.base; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCut; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCutDetail; import io.swagger.annotations.ApiOperation; import java.util.List; @@ -17,6 +20,12 @@ public interface IMesWorkOrderCutService extends IBaseMesService workOrderIds, String cutCode, String remark, String organizeCode, String userName, Integer editionNumber); + @ApiOperation("分页查询裁片工单明细") + ListPager queryWorkOrderCutDetailByPager(MesWorkOrderCutDetail workOrderCutDetail, Pager pager); + + //@ApiOperation("分页查询裁片工单明细") + //ListPager queryWorkOrderCutDetailByPager(MesWorkOrderCutDetail workOrderCutDetail, Pager pager); + @ApiOperation("发布裁片工单") void doReleaseCutWorkOrder(List cutWorkOrderNos, String organizeCode, String userName); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java index 760bfc9..344cd69 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java @@ -2,17 +2,19 @@ package cn.estsh.i3plus.ext.mes.apiservice.controller.base; import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderCutService; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCut; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCutDetail; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.util.ResultBean; import cn.estsh.impp.framework.boot.util.ValidatorBean; -import cn.hutool.core.collection.ListUtil; 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.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -48,6 +50,21 @@ public class MesWorkOrderCutController extends BaseMesController impl editionNumber = editionNumber == null ? 1 : editionNumber; + // 记录工单剩余未完成数量 Map workOrderUnCompleteMap = new HashMap<>(); + // 记录当前裁片工单 每个工单的计划数量 + Map workOrderQtyMap = new HashMap<>(); List workOrderCutDetailtList = new ArrayList<>(); List workOrderCuttList = new ArrayList<>(); List workOrderCutMaterialList = new ArrayList<>(); // 校验工单未完成数量是否满足计划数量 - checkQtyIsEnough(editionNumber, workOrderListMapByPartNo, cutScheme, cutSchemeFgList, workOrderUnCompleteMap); + checkQtyIsEnough(editionNumber, workOrderListMapByPartNo, cutScheme, cutSchemeFgList, workOrderUnCompleteMap, workOrderQtyMap); // 预计生成裁片工单数量 for (Integer count = 0; count < editionNumber; count++) { @@ -135,17 +141,18 @@ public class MesWorkOrderCutService extends BaseMesService impl for (MesCutSchemeFg cutSchemeFg : cutSchemeFgList) { List workOrders = workOrderListMapByPartNo.get(cutSchemeFg.getPartNo()); - MesWorkOrder workOrder = workOrders.get(0); - MesWorkOrderCutDetail detail = new MesWorkOrderCutDetail(); - ConvertBean.serviceModelInitialize(detail, userName); - detail.setOrganizeCode(organizeCode); - detail.setCutWorkOrderNo(cutWorkOrderNo); - detail.setPartNo(workOrder.getPartNo()); - detail.setPartName(workOrder.getPartName()); - detail.setWorkOrderNo(workOrder.getWorkOrderNo()); - detail.setRemark(cutSchemeFg.getRemark()); - detail.setQty(cutSchemeFg.getQty()); - workOrderCutDetailtList.add(detail); + for (MesWorkOrder workOrder : workOrders) { + MesWorkOrderCutDetail detail = new MesWorkOrderCutDetail(); + ConvertBean.serviceModelInitialize(detail, userName); + detail.setOrganizeCode(organizeCode); + detail.setCutWorkOrderNo(cutWorkOrderNo); + detail.setPartNo(workOrder.getPartNo()); + detail.setPartName(workOrder.getPartName()); + detail.setWorkOrderNo(workOrder.getWorkOrderNo()); + detail.setRemark(cutSchemeFg.getRemark()); + detail.setQty(workOrderQtyMap.get(workOrder.getWorkOrderNo())); + workOrderCutDetailtList.add(detail); + } } } @@ -165,7 +172,18 @@ public class MesWorkOrderCutService extends BaseMesService impl } - private static void checkQtyIsEnough(Integer editionNumber, Map> workOrderListMapByPartNo, MesCutScheme cutScheme, List cutSchemeFgList, Map workOrderUnCompleteMap) { + @Override + public ListPager queryWorkOrderCutDetailByPager(MesWorkOrderCutDetail workOrderCutDetail, Pager pager) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(workOrderCutDetail.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(workOrderCutDetail.getCutWorkOrderNo(), MesExtConstWords.CUT_WORK_ORDER_NO, packBean); + pager = PagerHelper.getPager(pager, workOrderCutDetailRepository.findByHqlWhereCount(packBean)); + List list = workOrderCutDetailRepository.findByHqlWherePage(packBean, pager); + return new ListPager<>(list, pager); + } + + private static void checkQtyIsEnough(Integer editionNumber, Map> workOrderListMapByPartNo, + MesCutScheme cutScheme, List cutSchemeFgList, + Map workOrderUnCompleteMap, Map workOrderQtyMap) { for (MesCutSchemeFg cutSchemeFg : cutSchemeFgList) { List workOrders = workOrderListMapByPartNo.get(cutSchemeFg.getPartNo()); @@ -179,16 +197,19 @@ public class MesWorkOrderCutService extends BaseMesService impl // 成品配置计划数量 * 版数 = 裁片工单该成品总消耗数量 Double totalQty = MathOperation.mul(cutSchemeFg.getQty(), editionNumber); - + Double srcTotalQty = totalQty.doubleValue(); Double unCompleteQty = 0.0; List needWorkOrderNoList = new ArrayList<>(); for (MesWorkOrder order : workOrders) { if (!order.getWorkCenterCode().equals(cutScheme.getWorkCenterCode())) - MesException.throwMesBusiException("工单【%s】关联产线【%】与裁片方案【%】关联产线不一致!", order.getWorkCenterCode(), cutScheme.getWorkCenterCode()); + MesException.throwMesBusiException("工单【%s】关联产线【%】与裁片方案【%】关联产线不一致!", + order.getWorkCenterCode(), cutScheme.getWorkCenterCode()); - if (unCompleteQty.compareTo(totalQty) > 0) - MesException.throwMesBusiException("零件号【%s】工单【%s】未完成数量汇总【%s】已满足产成总数【%s】!请取消勾选工单【%s】", order.getWorkCenterCode(), needWorkOrderNoList, cutScheme.getWorkCenterCode(), workOrders.subList(needWorkOrderNoList.size(), workOrders.size())); + if (unCompleteQty.compareTo(srcTotalQty) >= 0) + MesException.throwMesBusiException("零件号【%s】工单【%s】未完成数量汇总【%s】已满足产成总数【%s】!请取消勾选工单【%s】", + order.getWorkCenterCode(), needWorkOrderNoList, cutScheme.getWorkCenterCode(), + workOrders.subList(needWorkOrderNoList.size(), workOrders.size())); unCompleteQty = MathOperation.add(unCompleteQty, order.getUnCompleteQty()); @@ -196,8 +217,12 @@ public class MesWorkOrderCutService extends BaseMesService impl if (order.getUnCompleteQty().compareTo(totalQty) >= 0) { workOrderUnCompleteMap.put(order.getWorkOrderNo(), MathOperation.sub(order.getUnCompleteQty(), totalQty)); + workOrderQtyMap.put(order.getWorkOrderNo(), totalQty); + totalQty = 0.0; } else { workOrderUnCompleteMap.put(order.getWorkOrderNo(), 0.0); + workOrderQtyMap.put(order.getWorkOrderNo(), order.getUnCompleteQty()); + totalQty = MathOperation.sub(totalQty, order.getUnCompleteQty()); } } From 3e85d967aeb947408a18d0133f9d6fcf0acc9e5f Mon Sep 17 00:00:00 2001 From: yxw Date: Fri, 27 Sep 2024 13:47:08 +0800 Subject: [PATCH 25/25] =?UTF-8?q?=E8=A3=85=E9=85=8D=E7=9B=AE=E8=A7=86?= =?UTF-8?q?=E5=8D=95=E8=A1=A5=E6=89=93=E9=80=BB=E8=BE=91=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 440b26d..b6688a3 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -1241,6 +1241,10 @@ public class MesWorkOrderService extends BaseMesService implements MesPartProdGroup mesPartProdGroup = partProdGroupMap.get(mesWorkOrder.getPartProdGroupCode()); + if (mesPartProdGroup == null) { + MesException.throwMesBusiException("工单【%s】关联零件生产组【%s】不存在", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getPartProdGroupCode()); + } + String printTemplate = mesPartProdGroup.getPrintTemplate(); if (StringUtils.isEmpty(printTemplate)) {