仪表读数job

tags/yfai-pcn-ext-v1.0
administrator 11 months ago
parent 8e349da2f7
commit c00cddc048

@ -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);
}

@ -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);
}
}

@ -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<MesMouldMappingCfg> 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 = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:max=\"http://www.ibm.com/maximo\">\n" +
" <soapenv:Header/>\n" +
" <soapenv:Body>\n" +
" <max:CreateCUR_METERREADING creationDateTime=\"EN\" baseLanguage=\"EN\">\n" +
" <max:CUR_METERREADINGSet>\n" +
" <max:METERDATA action=\"Change\">\n" +
" <max:MAXINTERRORMSG>?</max:MAXINTERRORMSG>\n" +
" <max:ASSETNUM changed=\"?\">%s</max:ASSETNUM>\n" +
" <max:METERNAME changed=\"?\">%s</max:METERNAME>\n" +
" <max:NEWREADING changed=\"?\">%s</max:NEWREADING>\n" +
" <max:NEWREADINGDATE changed=\"?\">%s</max:NEWREADINGDATE>\n" +
" <max:SITEID changed=\"?\">%s</max:SITEID>\n" +
" </max:METERDATA>\n" +
" </max:CUR_METERREADINGSet>\n" +
" </max:CreateCUR_METERREADING>\n" +
" </soapenv:Body>\n" +
"</soapenv:Envelope>";
//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();
}
}

@ -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<MesProductionPartContext> productionPartContext = productionDispatchContextStepService.getProductionPartContext(reqBean);
if (productionPartContext.isEmpty()){
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "没有可保存的加工单信息");
}
//2. 判断是否为空,id是否为空如果没有则返回,id为工单id
List<MesProductionPartContext> 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<MesProductionPsOutContext> productionPsOutContext = productionDispatchContextStepService.getProductionPsOutContext(reqBean);
//过滤出新生成的条码没有条码id就是新生成的
List<MesProductionPsOutContext> 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, "保存加工单信息成功");
}
}

@ -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常量

Loading…
Cancel
Save