Merge remote-tracking branch 'origin/dev' into dev

master
jun 6 months ago
commit 49bc4a3d46

@ -14,6 +14,6 @@ public interface IMesWorkOrderOfflineRestoreDispatchService {
void saveWorkOrderOffline(MesWorkOrderOffline workOrderOffline, Boolean result); void saveWorkOrderOffline(MesWorkOrderOffline workOrderOffline, Boolean result);
@Transactional(propagation = Propagation.REQUIRES_NEW, noRollbackFor = {ImppBusiException.class, Exception.class}) @Transactional(propagation = Propagation.REQUIRES_NEW, noRollbackFor = {ImppBusiException.class, Exception.class})
Boolean doRestoreWorkOrderOfflineData(String organizeCode, MesWorkOrderOffline workOrderOffline, List<MesWorkOrderAssemblyOffline> workOrderAssemblyOfflineList, String now); Boolean doRestoreWorkOrderOfflineData(String organizeCode, MesWorkOrderOffline workOrderOffline, List<MesWorkOrderAssemblyOffline> workOrderAssemblyOfflineList, String now, Boolean flag);
} }

@ -4,7 +4,6 @@ import cn.estsh.i3plus.ext.mes.pcn.api.job.IMesWorkOrderOfflineRestoreDispatchSe
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProductionRecordOfflineModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProductionRecordOfflineModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker; import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.bean.*;
@ -72,7 +71,7 @@ public class MesWorkOrderOfflineRestoreDispatchService implements IMesWorkOrderO
} }
@Override @Override
public Boolean doRestoreWorkOrderOfflineData(String organizeCode, MesWorkOrderOffline workOrderOffline, List<MesWorkOrderAssemblyOffline> workOrderAssemblyOfflineList, String now) { public Boolean doRestoreWorkOrderOfflineData(String organizeCode, MesWorkOrderOffline workOrderOffline, List<MesWorkOrderAssemblyOffline> workOrderAssemblyOfflineList, String now, Boolean flag) {
//写入工单; 写入条码 //写入工单; 写入条码
if (StringUtils.isEmpty(workOrderOffline.getWorkOrderId())) { if (StringUtils.isEmpty(workOrderOffline.getWorkOrderId())) {
@ -84,15 +83,18 @@ public class MesWorkOrderOfflineRestoreDispatchService implements IMesWorkOrderO
insertOrderPart(organizeCode, workOrderOffline, now); insertOrderPart(organizeCode, workOrderOffline, now);
} }
//写入加工记录, 工单装配件, 装配件装配记录
insertAssemblyRecord(organizeCode, workOrderOffline, workOrderAssemblyOfflineList, now); insertAssemblyRecord(organizeCode, workOrderOffline, workOrderAssemblyOfflineList, now);
//补偿修改加工记录的汇报状态: 此前已经标记了汇报工位,但缺失工单零件信息 未进行标记汇报处理状态的数据
if (!StringUtils.isEmpty(workOrderOffline.getReportCellCode()) && if (!StringUtils.isEmpty(workOrderOffline.getReportCellCode()) &&
!StringUtils.isEmpty(workOrderOffline.getOrderPartStatus()) && workOrderOffline.getOrderPartStatus().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 && !StringUtils.isEmpty(workOrderOffline.getOrderPartStatus()) && workOrderOffline.getOrderPartStatus().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 &&
(StringUtils.isEmpty(workOrderOffline.getReportCellStatus()) || workOrderOffline.getReportCellStatus().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)) { (StringUtils.isEmpty(workOrderOffline.getReportCellStatus()) || workOrderOffline.getReportCellStatus().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)) {
saveProductionRecordReportStatus(organizeCode, workOrderOffline); saveProductionRecordReportStatus(organizeCode, workOrderOffline);
} }
return (StringUtils.isEmpty(workOrderOffline.getReportCellStatus()) || workOrderOffline.getReportCellStatus().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0) ? false : true; //补偿处理的默认返回true, 否则根据已经标记了汇报处理状态的返回true
return flag ? true : ((StringUtils.isEmpty(workOrderOffline.getReportCellStatus()) || workOrderOffline.getReportCellStatus().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0) ? false : true);
} }

@ -18,8 +18,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.util.List; import java.util.*;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Slf4j @Slf4j
@ -44,43 +43,51 @@ public class MesWorkOrderOfflineRestoreService implements IMesWorkOrderOfflineRe
//参数 处理数据量 //参数 处理数据量
Integer qty = paramMap.containsKey(MesPcnExtConstWords.QTY) ? Integer.valueOf(paramMap.get(MesPcnExtConstWords.QTY)) : MesPcnExtConstWords.ONE_HUNDRED; Integer qty = paramMap.containsKey(MesPcnExtConstWords.QTY) ? Integer.valueOf(paramMap.get(MesPcnExtConstWords.QTY)) : MesPcnExtConstWords.ONE_HUNDRED;
//查询工单离线数据 //查询工单离线数据 [未处理]
List<MesWorkOrderOffline> workOrderOfflineList = getWorkOrderOfflineList(organizeCode, qty); List<MesWorkOrderOffline> workOrderOfflineList = getWorkOrderOfflineList(organizeCode, qty);
//搜集工单号 [未处理]
List<String> workOrderNoList = CollectionUtils.isEmpty(workOrderOfflineList) ? null : List<String> workOrderNoList = CollectionUtils.isEmpty(workOrderOfflineList) ? null :
workOrderOfflineList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getWorkOrderNo()))).map(MesWorkOrderOffline::getWorkOrderNo).collect(Collectors.toList()); workOrderOfflineList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getWorkOrderNo()))).map(MesWorkOrderOffline::getWorkOrderNo).collect(Collectors.toList());
log.info("补录离线生产工单数据JOB --- 查询到未补录完成的生产工单包含: {} ---", CollectionUtils.isEmpty(workOrderNoList) ? "[]" : workOrderNoList.toString()); log.info("补录离线生产工单数据JOB --- 查询到未补录完成的生产工单包含: {} ---", CollectionUtils.isEmpty(workOrderNoList) ? "[]" : workOrderNoList.toString());
//查询工单装配件离线数据 //查询工单装配件离线数据 [未处理]
List<MesWorkOrderAssemblyOffline> workOrderAssemblyOfflineList = getWorkOrderAssemblyOfflineList(organizeCode, qty); List<MesWorkOrderAssemblyOffline> workOrderAssemblyOfflineList = getWorkOrderAssemblyOfflineList(organizeCode, qty);
if (CollectionUtils.isEmpty(workOrderNoList) && CollectionUtils.isEmpty(workOrderAssemblyOfflineList)) return; if (CollectionUtils.isEmpty(workOrderNoList) && CollectionUtils.isEmpty(workOrderAssemblyOfflineList)) return;
String now = TimeTool.getNowTime(true); String now = TimeTool.getNowTime(true);
if (CollectionUtils.isEmpty(workOrderNoList)) { //[未处理]
if (!CollectionUtils.isEmpty(workOrderNoList)) {
//查询排序工单装配件离线数据[未同步的数据] 根据工单号分组 //查询排序工单装配件离线数据[未同步的数据] 根据工单号分组
Map<String, List<MesWorkOrderAssemblyOffline>> workOrderAssemblyOfflineMap = getWorkOrderAssemblyOfflineMap(organizeCode, workOrderNoList); Map<String, List<MesWorkOrderAssemblyOffline>> workOrderAssemblyOfflineMap = getWorkOrderAssemblyOfflineMap(organizeCode, workOrderNoList);
//补录生产数据 //补录生产数据 [未处理]
workOrderOfflineList.forEach(o -> doRestoreWorkOrderOfflineData(organizeCode, o, getWorkOrderAssemblyOfflineList(workOrderAssemblyOfflineMap, o.getWorkOrderNo()), now)); workOrderOfflineList.forEach(o -> doRestoreWorkOrderOfflineData(organizeCode, o, getWorkOrderAssemblyOfflineList(workOrderAssemblyOfflineMap, o.getWorkOrderNo()), now, false));
} }
//剔除上面已经处理过的工单的 装配件数据 [补偿处理]
workOrderAssemblyOfflineList = CollectionUtils.isEmpty(workOrderAssemblyOfflineList) ? null : workOrderAssemblyOfflineList = CollectionUtils.isEmpty(workOrderAssemblyOfflineList) ? null :
workOrderAssemblyOfflineList.stream().filter(o -> (null != o && !workOrderNoList.contains(o.getWorkOrderNo()))).collect(Collectors.toList()); workOrderAssemblyOfflineList.stream().filter(o -> (null != o && !workOrderNoList.contains(o.getWorkOrderNo()))).collect(Collectors.toList());
if (CollectionUtils.isEmpty(workOrderAssemblyOfflineList)) return; if (CollectionUtils.isEmpty(workOrderAssemblyOfflineList)) return;
//根据工单号分组 [补偿处理]
Map<String, List<MesWorkOrderAssemblyOffline>> workOrderAssemblyOfflineMap = backWorkOrderAssemblyMap(workOrderAssemblyOfflineList);
//查询工单离线数据 [已处理]
workOrderOfflineList = getWorkOrderOfflineMap(organizeCode, new ArrayList<>(workOrderAssemblyOfflineMap.keySet()));
if (CollectionUtils.isEmpty(workOrderOfflineList)) return;
//补录生产数据 [补偿处理]
workOrderOfflineList.forEach(o -> doRestoreWorkOrderOfflineData(organizeCode, o, getWorkOrderAssemblyOfflineList(workOrderAssemblyOfflineMap, o.getWorkOrderNo()), now, true));
} }
//查询工单离线数据 //查询工单离线数据 [未处理]
private List<MesWorkOrderOffline> getWorkOrderOfflineList(String organizeCode, Integer qty) { private List<MesWorkOrderOffline> getWorkOrderOfflineList(String organizeCode, Integer qty) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesPcnExtConstWords.SYSTEM_SYNC_STATUS, packBean); DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesPcnExtConstWords.SYSTEM_SYNC_STATUS, packBean);
@ -89,7 +96,18 @@ public class MesWorkOrderOfflineRestoreService implements IMesWorkOrderOfflineRe
return workOrderOfflineList; return workOrderOfflineList;
} }
//查询工单装配件离线数据 //查询工单离线数据 [已处理]
private List<MesWorkOrderOffline> getWorkOrderOfflineMap(String organizeCode, List<String> workOrderNoList) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), MesPcnExtConstWords.SYSTEM_SYNC_STATUS, packBean);
DdlPreparedPack.getInPackList(workOrderNoList, MesPcnExtConstWords.WORK_ORDER_NO, packBean);
List<MesWorkOrderOffline> workOrderOfflineList = workOrderOfflineRepository.findByHqlWhere(packBean);
if (CollectionUtils.isEmpty(workOrderOfflineList)) return null;
workOrderOfflineList = workOrderOfflineList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesWorkOrderOffline::getModifyDatetime).reversed()).collect(Collectors.toList());
return workOrderOfflineList.stream().filter(o -> null != o).distinct().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(MesWorkOrderOffline::getWorkOrderNo))), ArrayList::new));
}
//查询工单装配件离线数据 [未处理]
private List<MesWorkOrderAssemblyOffline> getWorkOrderAssemblyOfflineList(String organizeCode, Integer qty) { private List<MesWorkOrderAssemblyOffline> getWorkOrderAssemblyOfflineList(String organizeCode, Integer qty) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesPcnExtConstWords.SYSTEM_SYNC_STATUS, packBean); DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesPcnExtConstWords.SYSTEM_SYNC_STATUS, packBean);
@ -105,20 +123,27 @@ public class MesWorkOrderOfflineRestoreService implements IMesWorkOrderOfflineRe
DdlPreparedPack.getInPackList(workOrderNoList, MesPcnExtConstWords.WORK_ORDER_NO, packBean); DdlPreparedPack.getInPackList(workOrderNoList, MesPcnExtConstWords.WORK_ORDER_NO, packBean);
List<MesWorkOrderAssemblyOffline> workOrderAssemblyOfflineList = workOrderAssemblyOfflineRepository.findByHqlWhere(packBean); List<MesWorkOrderAssemblyOffline> workOrderAssemblyOfflineList = workOrderAssemblyOfflineRepository.findByHqlWhere(packBean);
if (CollectionUtils.isEmpty(workOrderAssemblyOfflineList)) log.info("--- 异常 --- 补录离线生产工单数据JOB --- 当前没有需要补录的工单装配件离线数据 ---"); if (CollectionUtils.isEmpty(workOrderAssemblyOfflineList)) log.info("--- 异常 --- 补录离线生产工单数据JOB --- 当前没有需要补录的工单装配件离线数据 ---");
return workOrderAssemblyOfflineList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesWorkOrderAssemblyOffline::getWorkOrderNo)); return backWorkOrderAssemblyMap(workOrderAssemblyOfflineList);
} }
//搜集数据
private List<MesWorkOrderAssemblyOffline> getWorkOrderAssemblyOfflineList(Map<String, List<MesWorkOrderAssemblyOffline>> workOrderAssemblyOfflineMap, String workOrderNo) { private List<MesWorkOrderAssemblyOffline> getWorkOrderAssemblyOfflineList(Map<String, List<MesWorkOrderAssemblyOffline>> workOrderAssemblyOfflineMap, String workOrderNo) {
return CollectionUtils.isEmpty(workOrderAssemblyOfflineMap) ? null : workOrderAssemblyOfflineMap.get(workOrderNo); return CollectionUtils.isEmpty(workOrderAssemblyOfflineMap) ? null : workOrderAssemblyOfflineMap.get(workOrderNo);
} }
//根据工单号分组
private Map<String, List<MesWorkOrderAssemblyOffline>> backWorkOrderAssemblyMap(List<MesWorkOrderAssemblyOffline> workOrderAssemblyOfflineList) {
return workOrderAssemblyOfflineList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesWorkOrderAssemblyOffline::getWorkOrderNo));
}
//补录生产数据 //补录生产数据
private void doRestoreWorkOrderOfflineData(String organizeCode, MesWorkOrderOffline workOrderOffline, List<MesWorkOrderAssemblyOffline> workOrderAssemblyOfflineList, String now) { private void doRestoreWorkOrderOfflineData(String organizeCode, MesWorkOrderOffline workOrderOffline, List<MesWorkOrderAssemblyOffline> workOrderAssemblyOfflineList, String now, Boolean flag) {
log.info("补录离线生产工单数据JOB --- 工单:{} --- START ---", workOrderOffline.getWorkOrderNo()); log.info("补录离线生产工单数据JOB --- 工单:{} --- START ---", workOrderOffline.getWorkOrderNo());
Boolean result = false; Boolean result = false;
try { try {
result = workOrderOfflineRestoreDispatchService.doRestoreWorkOrderOfflineData(organizeCode, workOrderOffline, workOrderAssemblyOfflineList, now); result = workOrderOfflineRestoreDispatchService.doRestoreWorkOrderOfflineData(organizeCode, workOrderOffline, workOrderAssemblyOfflineList, now, flag);
} catch (Exception e) { } catch (Exception e) {
if (flag) result = true;
log.info("--- 异常 --- 补录离线生产工单数据JOB --- 工单:{} --- ERROR --- {}", workOrderOffline.getWorkOrderNo(), e.toString()); log.info("--- 异常 --- 补录离线生产工单数据JOB --- 工单:{} --- ERROR --- {}", workOrderOffline.getWorkOrderNo(), e.toString());
} finally { } finally {
workOrderOfflineRestoreDispatchService.saveWorkOrderOffline(workOrderOffline, result); workOrderOfflineRestoreDispatchService.saveWorkOrderOffline(workOrderOffline, result);

Loading…
Cancel
Save