forked from I3-YF/i3plus-mes-pcn-yfai
深汕工单
parent
0b9b1c2e73
commit
68769974ee
@ -0,0 +1,23 @@
|
|||||||
|
package cn.estsh.i3plus.ext.mes.pcn.api.job;
|
||||||
|
|
||||||
|
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCalcQtyRecord;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.bean.offline.MesWorkOrderOffline;
|
||||||
|
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
|
||||||
|
import org.springframework.transaction.annotation.Propagation;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface IMesWorkOrderCalcQtyRestoreDispatchService {
|
||||||
|
|
||||||
|
List<MesWorkOrderCalcQtyRecord> getWorkOrderCalcQtyRecordList(String organizeCode, Integer qty);
|
||||||
|
|
||||||
|
@Transactional(propagation = Propagation.NOT_SUPPORTED)
|
||||||
|
MesWorkOrder getWorkOrderDb(String organizeCode, Long workOrderId);
|
||||||
|
|
||||||
|
@Transactional(propagation = Propagation.REQUIRES_NEW, noRollbackFor = {ImppBusiException.class, Exception.class})
|
||||||
|
void doRestoreWorkOrderCalcQty(MesWorkOrderOffline workOrderOffline, Boolean result);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package cn.estsh.i3plus.ext.mes.pcn.api.job;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public interface IMesWorkOrderCalcQtyRestoreService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 补录离线生产工单数据JOB
|
||||||
|
* @param paramMap
|
||||||
|
*/
|
||||||
|
void doRestoreWorkOrderCalcQty(Map<String, String> paramMap);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,78 @@
|
|||||||
|
package cn.estsh.i3plus.ext.mes.pcn.apiservice.schedulejob;
|
||||||
|
|
||||||
|
|
||||||
|
import cn.estsh.i3plus.ext.mes.pcn.api.job.IMesWorkOrderCalcQtyRestoreService;
|
||||||
|
import cn.estsh.i3plus.ext.mes.pcn.api.job.IMesWorkOrderOfflineRestoreService;
|
||||||
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
|
||||||
|
import cn.estsh.impp.framework.boot.init.ApplicationProperties;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
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 org.springframework.util.CollectionUtils;
|
||||||
|
import org.springframework.util.StopWatch;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author wangjie
|
||||||
|
* @Description 生产工单计数补录JOB
|
||||||
|
* @version 1.0
|
||||||
|
* @date 2021/2/2 16:44
|
||||||
|
**/
|
||||||
|
@Slf4j
|
||||||
|
@DisallowConcurrentExecution
|
||||||
|
@Component
|
||||||
|
@ApiOperation("补录生产工单计数JOB")
|
||||||
|
public class MesWorkOrderCalcQtyRestoreJob extends BaseMesScheduleJob {
|
||||||
|
|
||||||
|
public MesWorkOrderCalcQtyRestoreJob() {
|
||||||
|
super(MesWorkOrderCalcQtyRestoreJob.class, "补录生产工单计数JOB");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IMesWorkOrderCalcQtyRestoreService workOrderCalcQtyRestoreService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) {
|
||||||
|
|
||||||
|
String jobParam = this.getJobParam();
|
||||||
|
if (StringUtils.isEmpty(jobParam)) {
|
||||||
|
log.info("--- 异常 --- 补录生产工单计数JOB --- 参数为空 ---");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, String> paramMap = JSONObject.parseObject(jobParam, Map.class);
|
||||||
|
|
||||||
|
if (CollectionUtils.isEmpty(paramMap) || !paramMap.containsKey(MesPcnExtConstWords.ORGANIZE_CODE)) {
|
||||||
|
log.info("--- 异常 --- 补录生产工单计数JOB --- 参数未配置:工厂代码[organizeCode] ---");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
StopWatch stopWatch = new StopWatch();
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
stopWatch.start();
|
||||||
|
|
||||||
|
workOrderCalcQtyRestoreService.doRestoreWorkOrderCalcQty(paramMap);
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
|
||||||
|
log.info("--- 异常 --- 补录生产工单计数JOB --- ERROR --- {} ---", e.toString());
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
|
||||||
|
stopWatch.stop();
|
||||||
|
|
||||||
|
log.info("补录生产工单计数JOB --- END --- 耗时: {} ms ---", stopWatch.getTotalTimeMillis());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,67 @@
|
|||||||
|
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.job;
|
||||||
|
|
||||||
|
import cn.estsh.i3plus.ext.mes.pcn.api.job.IMesWorkOrderCalcQtyRestoreDispatchService;
|
||||||
|
import cn.estsh.i3plus.ext.mes.pcn.api.job.IMesWorkOrderOfflineRestoreDispatchService;
|
||||||
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProductionRecordOfflineModel;
|
||||||
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
|
||||||
|
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
|
||||||
|
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
|
||||||
|
import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker;
|
||||||
|
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.offline.MesWorkOrderAssemblyOffline;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.bean.offline.MesWorkOrderOffline;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.bean.offline.MesWorkOrderPartOffline;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.repository.*;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.repository.offline.MesWorkOrderAssemblyOfflineRepository;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.repository.offline.MesWorkOrderOfflineRepository;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.repository.offline.MesWorkOrderPartOfflineRepository;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.BeanUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@Service
|
||||||
|
public class MesWorkOrderCalcQtyRestoreDispatchService implements IMesWorkOrderCalcQtyRestoreDispatchService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private MesWorkOrderCalcQtyRecordRepository workOrderCalcQtyRecordRepository;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private MesWorkOrderRepository workOrderRepository;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<MesWorkOrderCalcQtyRecord> getWorkOrderCalcQtyRecordList(String organizeCode, Integer qty) {
|
||||||
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
||||||
|
DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesPcnExtConstWords.SYSTEM_SYNC_STATUS, packBean);
|
||||||
|
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{MesPcnExtConstWords.CREATE_DATE_TIME}, packBean);
|
||||||
|
return workOrderCalcQtyRecordRepository.findByHqlTopWhere(packBean, qty);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MesWorkOrder getWorkOrderDb(String organizeCode, Long workOrderId) {
|
||||||
|
return workOrderRepository.getByProperty(
|
||||||
|
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.ID},
|
||||||
|
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), workOrderId});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void doRestoreWorkOrderCalcQty(MesWorkOrderOffline workOrderOffline, Boolean result) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,70 @@
|
|||||||
|
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.job;
|
||||||
|
|
||||||
|
import cn.estsh.i3plus.ext.mes.pcn.api.job.IMesWorkOrderCalcQtyRestoreDispatchService;
|
||||||
|
import cn.estsh.i3plus.ext.mes.pcn.api.job.IMesWorkOrderCalcQtyRestoreService;
|
||||||
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
|
||||||
|
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.MesWorkOrder;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCalcQtyRecord;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.bean.offline.MesWorkOrderOffline;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderCalcQtyRecordRepository;
|
||||||
|
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderRepository;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@Service
|
||||||
|
public class MesWorkOrderCalcQtyRestoreService implements IMesWorkOrderCalcQtyRestoreService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IMesWorkOrderCalcQtyRestoreDispatchService workOrderCalcQtyRestoreDispatchService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void doRestoreWorkOrderCalcQty(Map<String, String> paramMap) {
|
||||||
|
|
||||||
|
//参数 工厂
|
||||||
|
String organizeCode = paramMap.get(MesPcnExtConstWords.ORGANIZE_CODE);
|
||||||
|
|
||||||
|
//参数 处理数据量
|
||||||
|
Integer qty = paramMap.containsKey(MesPcnExtConstWords.QTY) ? Integer.valueOf(paramMap.get(MesPcnExtConstWords.QTY)) : MesPcnExtConstWords.ONE_HUNDRED;
|
||||||
|
|
||||||
|
//生产工单计数记录表
|
||||||
|
List<MesWorkOrderCalcQtyRecord> workOrderCalcQtyRecordList = workOrderCalcQtyRestoreDispatchService.getWorkOrderCalcQtyRecordList(organizeCode, qty);
|
||||||
|
|
||||||
|
Map<String, List<MesWorkOrderCalcQtyRecord>> workOrderNoMap = CollectionUtils.isEmpty(workOrderCalcQtyRecordList) ? null :
|
||||||
|
workOrderCalcQtyRecordList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesWorkOrderCalcQtyRecord::getWorkOrderNo));
|
||||||
|
|
||||||
|
log.info("补录生产工单计数JOB --- 查询到未补录完成的记录 {} 条 --- 生产工单包含: {} ---",
|
||||||
|
CollectionUtils.isEmpty(workOrderCalcQtyRecordList) ? "[]" : workOrderCalcQtyRecordList.size(),
|
||||||
|
CollectionUtils.isEmpty(workOrderNoMap) ? "[]" : workOrderNoMap.keySet().toString());
|
||||||
|
|
||||||
|
if (CollectionUtils.isEmpty(workOrderNoMap)) return;
|
||||||
|
|
||||||
|
for (Map.Entry<String, List<MesWorkOrderCalcQtyRecord>> entry : workOrderNoMap.entrySet()) {
|
||||||
|
|
||||||
|
if (null == entry) continue;
|
||||||
|
|
||||||
|
//查询工单, 无事务查询
|
||||||
|
MesWorkOrder workOrder = workOrderCalcQtyRestoreDispatchService.getWorkOrderDb(organizeCode, entry.getValue().get(0).getPid());
|
||||||
|
|
||||||
|
if (null == workOrder) log.info("补录生产工单计数JOB --- 补录 {} START --- ID: {} 信息不存在 ---", entry.getKey(), entry.getValue().get(0).getPid());
|
||||||
|
else log.info("补录生产工单计数JOB --- 补录 {} START --- ID: {} --- ---", entry.getKey(), entry.getValue().get(0).getPid());
|
||||||
|
|
||||||
|
workOrderCalcQtyRestoreDispatchService.doRestoreWorkOrderCalcQty(organizeCode, workOrder, entry.getValue());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue