From c00cddc048ec3d8c82710c0dd4aa3478fbbda2b6 Mon Sep 17 00:00:00 2001 From: administrator Date: Thu, 13 Jun 2024 20:13:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=AA=E8=A1=A8=E8=AF=BB=E6=95=B0job?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/mes/pcn/api/base/IMesMaximoService.java | 17 ++++ .../apiservice/schedulejob/MesMeterReadingJob.java | 48 +++++++++++ .../serviceimpl/base/MesMaximoServiceImpl.java | 94 ++++++++++++++++++++++ .../step/MesWorkOrderSaveStepService.java | 60 ++++++++++++++ .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 5 ++ 5 files changed, 224 insertions(+) create mode 100644 modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesMaximoService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesMeterReadingJob.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesMaximoServiceImpl.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderSaveStepService.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesMaximoService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesMaximoService.java new file mode 100644 index 0000000..6fa20cb --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesMaximoService.java @@ -0,0 +1,17 @@ +package cn.estsh.i3plus.ext.mes.pcn.api.base; + +/** + * @Description : + * @Reference : + * @Author : Castle + * @CreateDate : 2024/6/13 17:54 + * @Modify: + **/ +public interface IMesMaximoService { + /** + * 仪表读数 + * @param organizeCode + * @param url + */ + void doMeterReading(String organizeCode,String url); +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesMeterReadingJob.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesMeterReadingJob.java new file mode 100644 index 0000000..582fce3 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesMeterReadingJob.java @@ -0,0 +1,48 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.schedulejob; + + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base.MesMaximoServiceImpl; +import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import cn.estsh.impp.framework.boot.init.ApplicationProperties; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.quartz.DisallowConcurrentExecution; +import org.quartz.JobExecutionContext; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author castle,暂时没有客供品移库 + * @version 1.0 + * @date 2021/2/2 16:44 + **/ +@Slf4j +@DisallowConcurrentExecution +@Component +@ApiOperation("仪表读数job") +public class MesMeterReadingJob extends BaseMesScheduleJob { + + @Autowired + private MesMaximoServiceImpl maximoService; + + public MesMeterReadingJob() { + super(MesMeterReadingJob.class, "仪表读数job"); + } + @Override + public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) { + String jobParam = this.getJobParam(); + JSONObject jsonObject= JSONUtil.parseObj(jobParam); + String organizeCode = jsonObject.getStr("organizeCode"); + String url = jsonObject.getStr("url"); + if (null == organizeCode){ + log.error("请添加需要报工的工厂代码!"); + return; + } + maximoService.doMeterReading(organizeCode,url); + } +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesMaximoServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesMaximoServiceImpl.java new file mode 100644 index 0000000..428ca04 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesMaximoServiceImpl.java @@ -0,0 +1,94 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesMaximoService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesMouldMappingCfg; +import cn.estsh.i3plus.pojo.mes.repository.IMesMouldMappingCfgRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesProdMouldRecordRepository; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +/** + * @Description :Maximo 仪表读数汇总 + * @Reference : + * @Author : Castle + * @CreateDate : 2024/6/13 17:55 + * @Modify: + **/ +@Service +@Slf4j +public class MesMaximoServiceImpl implements IMesMaximoService { + @Autowired + private MesProdMouldRecordRepository prodMouldRecordRao; + @Autowired + private IMesMouldMappingCfgRepository mesMouldMappingCfgRao; + + @Override + public void doMeterReading(String organizeCode,String url) { + //1.查询表磨具映射关系维护表,查询出当前工厂需要统计的模具信息 + + //1.按天、按照meter_name 和 asset_num 汇总 + DdlPackBean modulePackBean = DdlPackBean.getDdlPackBean(organizeCode); + List mappingCfgList = mesMouldMappingCfgRao.findByHqlWhere(modulePackBean); + if (mappingCfgList.isEmpty()){ + log.info("当前工厂:{} 模具映射关系没有数据",organizeCode); + return; + } + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.add(Calendar.DAY_OF_MONTH, -1); + Date date = calendar.getTime(); + String createDateTimeStart = TimeTool.getToday(date) + MesPcnExtConstWords.APPEND_ZERO_HMS; + String createDateTimeEnd = TimeTool.getToday(date) + MesPcnExtConstWords.APPEND_24_HMS; + for (MesMouldMappingCfg cfg : mappingCfgList) { + //循环模具映射关系维护 + DdlPackBean recordPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(cfg.getMeterName(),"meterName",recordPackBean); + DdlPreparedPack.getStringEqualPack(cfg.getAssetNum(),"assetNum",recordPackBean); + DdlPreparedPack.timeBuilder(createDateTimeStart,createDateTimeEnd,"createDatetime",recordPackBean,true); + int count = prodMouldRecordRao.findByHqlWhereCount(recordPackBean); + call(cfg.getMeterName(),cfg.getAssetNum(),organizeCode,count,url); + } + } + + + private void call(String meterName,String assetNum,String organizeCode,int count , String url){ + String xml = "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " ?\n" + + " %s\n" + + " %s\n" + + " %s\n" + + " %s\n" + + " %s\n" + + " \n" + + " \n" + + " \n" + + " \n" + + ""; + //2024-05-30T11:10:00 + LocalDateTime now = LocalDateTime.now(); + DateTimeFormatter isoDateTime = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"); + String today = now.format(isoDateTime); + String xmlString = String.format(xml, assetNum, meterName, count, today, organizeCode); + log.info("当前工厂:{},报文:{}",organizeCode,xmlString); + HttpRequest.post(url).header("Content-Type","text/xml").body(xmlString).execute().body(); + + } +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderSaveStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderSaveStepService.java new file mode 100644 index 0000000..e8efe65 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderSaveStepService.java @@ -0,0 +1,60 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import cn.estsh.i3plus.pojo.mes.model.StationResultBean; +import cn.estsh.i3plus.pojo.mes.model.StepResult; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Description : 保存加工单信息工步 + * @Reference : + * @Author : Castle + * @CreateDate : 2024/6/11 18:50 + * @Modify: + **/ +@Slf4j +@Service("mesWorkOrderSaveStepService") +public class MesWorkOrderSaveStepService extends BaseStepService { + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + @Override + public StepResult execute(StationRequestBean reqBean) { + StationResultBean resultBean = new StationResultBean(); + StepResult stepResult = StepResult.getSuccessComplete(); + //1. 获取上下文中的MesProductionPartContext + List productionPartContext = productionDispatchContextStepService.getProductionPartContext(reqBean); + if (productionPartContext.isEmpty()){ + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "没有可保存的加工单信息"); + } + //2. 判断是否为空,id是否为空,如果没有则返回,id为工单id + List collectContext = productionPartContext.stream().filter(item -> item.getId() != null).collect(Collectors.toList()); + //3. 如果id不为空,查询工单信息 + if (collectContext.isEmpty()){ + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "没有可保存的加工单信息"); + } + //4. 判断当前产出的零件MesProductionPsOutContext中是否有id,如果有就是新生成的 + List productionPsOutContext = productionDispatchContextStepService.getProductionPsOutContext(reqBean); + //过滤出新生成的条码,没有条码id就是新生成的 + List produceSnList = productionPsOutContext.stream().filter(item -> item.getId() != null).collect(Collectors.toList()); + if (produceSnList.isEmpty()){ + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "没有可保存的加工单信息"); + } +// productionPsOutContext.stream().collect(Collectors.groupingBy(MesProductionPsOutContext::getId)) + //5. 修改完成数量,完成数量大于计划数量,就需要修改工单的状态为完成 + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "保存加工单信息成功"); + } +} diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java index 7555549..7494f8c 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java @@ -10,6 +10,11 @@ package cn.estsh.i3plus.ext.mes.pcn.pojo.util; public class MesPcnExtConstWords { //-----------------COMMON-------------------------- + //拼接00时:00分:00秒 + public static final String APPEND_ZERO_HMS = " 00:00:00"; + //拼接23时:59分:59秒 + public static final String APPEND_24_HMS = " 23:59:59"; + public static final String REDIS_RES_PCN = "redisMesPcn"; // id常量