|
|
|
@ -2,18 +2,28 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.job;
|
|
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.job.IMesWorkOrderOfflineRestoreService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
|
|
|
|
|
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
|
|
|
|
|
import cn.estsh.i3plus.platform.common.tool.TimeTool;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.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.MesWorkOrderAssembly;
|
|
|
|
|
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.MesWorkOrderOfflineRestoreRecord;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderAssemblyRepository;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderRepository;
|
|
|
|
|
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.MesWorkOrderOfflineRestoreRecordRepository;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
|
|
|
|
|
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.*;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
@ -31,6 +41,12 @@ public class MesWorkOrderOfflineRestoreService implements IMesWorkOrderOfflineRe
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesWorkOrderOfflineRestoreRecordRepository workOrderOfflineRestoreRecordRepository;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesWorkOrderAssemblyRepository workOrderAssemblyRepository;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesWorkOrderRepository workOrderRepository;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void doRestoreWorkOrderOfflineData(Map<String, String> paramMap) {
|
|
|
|
|
|
|
|
|
@ -42,17 +58,70 @@ public class MesWorkOrderOfflineRestoreService implements IMesWorkOrderOfflineRe
|
|
|
|
|
|
|
|
|
|
if (CollectionUtils.isEmpty(workOrderAssemblyOfflineMap)) return;
|
|
|
|
|
|
|
|
|
|
Map<String, MesWorkOrderOfflineRestoreRecord> workOrderOfflineRestoreRecordMap = getWorkOrderOfflineRestoreRecordMap(organizeCode, new ArrayList<>(workOrderAssemblyOfflineMap.keySet()));
|
|
|
|
|
List<String> workOrderNoList = new ArrayList<>(workOrderAssemblyOfflineMap.keySet());
|
|
|
|
|
|
|
|
|
|
for (Map.Entry<String, List<MesWorkOrderAssemblyOffline>> entry : workOrderAssemblyOfflineMap.entrySet()) {
|
|
|
|
|
|
|
|
|
|
if (null == entry) continue;
|
|
|
|
|
Map<String, MesWorkOrderOfflineRestoreRecord> workOrderOfflineRestoreRecordMap = getWorkOrderOfflineRestoreRecordMap(organizeCode, workOrderNoList);
|
|
|
|
|
|
|
|
|
|
List<MesWorkOrderAssemblyOffline> workOrderAssemblyOfflineList = entry.getValue();
|
|
|
|
|
Map<String, MesWorkOrderOffline> workOrderOfflineMap = getWorkOrderOfflineMap(organizeCode, workOrderNoList);
|
|
|
|
|
|
|
|
|
|
String now = TimeTool.getNowTime(true);
|
|
|
|
|
|
|
|
|
|
for (Map.Entry<String, List<MesWorkOrderAssemblyOffline>> entry : workOrderAssemblyOfflineMap.entrySet()) {
|
|
|
|
|
|
|
|
|
|
if (null == entry) continue;
|
|
|
|
|
|
|
|
|
|
MesWorkOrderOfflineRestoreRecord workOrderOfflineRestoreRecord = CollectionUtils.isEmpty(workOrderOfflineRestoreRecordMap) ? null : workOrderOfflineRestoreRecordMap.get(entry.getKey());
|
|
|
|
|
|
|
|
|
|
for (MesWorkOrderAssemblyOffline workOrderAssemblyOffline : entry.getValue()) {
|
|
|
|
|
if (null == workOrderAssemblyOffline) continue;
|
|
|
|
|
MesWorkOrderAssembly workOrderAssembly = new MesWorkOrderAssembly();
|
|
|
|
|
BeanUtils.copyProperties(workOrderAssemblyOffline, workOrderAssembly, MesPcnExtConstWords.ID);
|
|
|
|
|
workOrderAssembly.setModifyDatetime(now);
|
|
|
|
|
workOrderAssembly.setModifyUser(MesPcnExtConstWords.JOB);
|
|
|
|
|
workOrderAssembly.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
|
|
|
|
|
workOrderAssemblyRepository.insert(workOrderAssembly);
|
|
|
|
|
|
|
|
|
|
workOrderAssemblyOffline.setSystemSyncDatetime(now);
|
|
|
|
|
workOrderAssemblyOffline.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
|
|
|
|
|
workOrderAssemblyOfflineRepository.updateNoSync(workOrderAssemblyOffline);
|
|
|
|
|
|
|
|
|
|
if (null == workOrderOfflineRestoreRecord) {
|
|
|
|
|
workOrderOfflineRestoreRecord = new MesWorkOrderOfflineRestoreRecord();
|
|
|
|
|
workOrderOfflineRestoreRecord.setOrganizeCode(organizeCode);
|
|
|
|
|
workOrderOfflineRestoreRecord.setWorkOrderNo(workOrderAssemblyOffline.getWorkOrderNo());
|
|
|
|
|
workOrderOfflineRestoreRecord.setCustPartNo(workOrderAssemblyOffline.getCustPartNo());
|
|
|
|
|
workOrderOfflineRestoreRecord.setWorkCenterCode(workOrderAssemblyOffline.getWorkCenterCode());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (StringUtils.isEmpty(workOrderOfflineRestoreRecord.getWorkOrderId()) && !CollectionUtils.isEmpty(workOrderOfflineMap) && workOrderOfflineMap.containsKey(entry.getKey())) {
|
|
|
|
|
|
|
|
|
|
MesWorkOrderOffline workOrderOffline = workOrderOfflineMap.get(entry.getKey());
|
|
|
|
|
|
|
|
|
|
MesWorkOrder workOrder = new MesWorkOrder();
|
|
|
|
|
BeanUtils.copyProperties(workOrderOffline, workOrder, MesPcnExtConstWords.ID);
|
|
|
|
|
workOrder.setUnCompleteQty(new Double(0));
|
|
|
|
|
workOrder.setScrapPartQty(new Double(0));
|
|
|
|
|
workOrder.setSuspiciousPartQty(new Double(0));
|
|
|
|
|
workOrder.setDisassemblyQty(new Double(0));
|
|
|
|
|
workOrder.setReportedQty(new Double(0));
|
|
|
|
|
workOrder.setCompleteQty(new Double(1));
|
|
|
|
|
workOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue());
|
|
|
|
|
workOrder.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue());
|
|
|
|
|
workOrder.setModifyDatetime(now);
|
|
|
|
|
workOrder.setModifyUser(MesPcnExtConstWords.JOB);
|
|
|
|
|
workOrder.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
|
|
|
|
|
workOrder = workOrderRepository.insert(workOrder);
|
|
|
|
|
|
|
|
|
|
workOrderOffline.setSystemSyncDatetime(now);
|
|
|
|
|
workOrderOffline.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
|
|
|
|
|
workOrderOfflineRepository.updateNoSync(workOrderOffline);
|
|
|
|
|
|
|
|
|
|
workOrderOfflineRestoreRecord.setWorkOrderId(workOrder.getId().toString());
|
|
|
|
|
workOrderOfflineRestoreRecord.setCustSn(workOrder.getCustSn());
|
|
|
|
|
workOrderOfflineRestoreRecord.setPartNo(workOrder.getPartNo());
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -68,11 +137,10 @@ public class MesWorkOrderOfflineRestoreService implements IMesWorkOrderOfflineRe
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesPcnExtConstWords.SYSTEM_SYNC_STATUS, packBean);
|
|
|
|
|
List<MesWorkOrderAssemblyOffline> workOrderAssemblyOfflineList = workOrderAssemblyOfflineRepository.findByHqlTopWhere(packBean, qty);
|
|
|
|
|
if (CollectionUtils.isEmpty(workOrderAssemblyOfflineList)) log.info("补录离线生产数据JOB --- 当前没有需要补录的工单装配件离线数据 ---");
|
|
|
|
|
return CollectionUtils.isEmpty(workOrderAssemblyOfflineList) ? null :
|
|
|
|
|
workOrderAssemblyOfflineList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesWorkOrderAssemblyOffline::getWorkOrderNo));
|
|
|
|
|
return workOrderAssemblyOfflineList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesWorkOrderAssemblyOffline::getWorkOrderNo));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//离线工单补录记录表
|
|
|
|
|
//查询离线工单补录记录
|
|
|
|
|
private Map<String, MesWorkOrderOfflineRestoreRecord> getWorkOrderOfflineRestoreRecordMap(String organizeCode, List<String> workOrderNoList) {
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getInPackList(workOrderNoList, MesPcnExtConstWords.WORK_ORDER_NO, packBean);
|
|
|
|
@ -85,4 +153,19 @@ public class MesWorkOrderOfflineRestoreService implements IMesWorkOrderOfflineRe
|
|
|
|
|
return workOrderOfflineRestoreRecordMap;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//查询离线工单
|
|
|
|
|
private Map<String, MesWorkOrderOffline> getWorkOrderOfflineMap(String organizeCode, List<String> workOrderNoList) {
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getInPackList(workOrderNoList, MesPcnExtConstWords.WORK_ORDER_NO, packBean);
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesPcnExtConstWords.SYSTEM_SYNC_STATUS, packBean);
|
|
|
|
|
List<MesWorkOrderOffline> workOrderOfflineList = workOrderOfflineRepository.findByHqlWhere(packBean);
|
|
|
|
|
if (CollectionUtils.isEmpty(workOrderOfflineList)) return null;
|
|
|
|
|
workOrderOfflineList = workOrderOfflineList.stream().filter(o -> null != o).
|
|
|
|
|
collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(MesWorkOrderOffline::getWorkOrderNo))), ArrayList::new));
|
|
|
|
|
Map<String, MesWorkOrderOffline> workOrderOfflineMap = workOrderOfflineList.stream().filter(o -> null != o).collect(Collectors.toMap(MesWorkOrderOffline::getWorkOrderNo, o -> o));
|
|
|
|
|
log.info("补录离线生产数据JOB --- 查询到未补录过的生产工单包含: {} ---", workOrderOfflineMap.keySet().toString());
|
|
|
|
|
return workOrderOfflineMap;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|