|
|
|
@ -18,7 +18,6 @@ import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
|
|
|
|
|
import cn.estsh.i3plus.platform.common.tool.ConvertUtil;
|
|
|
|
|
import cn.estsh.i3plus.platform.common.tool.JsonUtilTool;
|
|
|
|
|
import cn.estsh.i3plus.platform.common.tool.MathOperation;
|
|
|
|
|
import cn.estsh.i3plus.platform.common.tool.TimeTool;
|
|
|
|
|
import cn.estsh.i3plus.platform.common.util.MesConstWords;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.bean.BaseResultBean;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
|
|
|
|
@ -136,9 +135,7 @@ public class SxWorkOrderExtService implements ISxWorkOrderExtService {
|
|
|
|
|
private SxProductOffLineRepository productOffLineRepository;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private SxProductOffLineExtRepository productOffLineExtRepository;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private MesBomPendingPartRepository bomPendingPartRepository;
|
|
|
|
|
|
|
|
|
|
@Resource(name = MesPcnExtConstWords.REDIS_RES_PCN)
|
|
|
|
|
private ImppRedis redisMesPcn;
|
|
|
|
@ -729,11 +726,161 @@ public class SxWorkOrderExtService implements ISxWorkOrderExtService {
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(propagation = Propagation.NOT_SUPPORTED)
|
|
|
|
|
public void updateWorkOrderStatus(Integer workOrderStatus, List<String> orderNoList) {
|
|
|
|
|
public List<String> updateWorkOrderStatus(Integer workOrderStatus, List<String> orderNoList) {
|
|
|
|
|
|
|
|
|
|
String organizeCode = AuthUtil.getOrganize().getOrganizeCode();
|
|
|
|
|
String userInfo = AuthUtil.getSessionUser().getUserName();
|
|
|
|
|
|
|
|
|
|
//获取所有数据
|
|
|
|
|
List<MesWorkOrderExt> workOrderExtList = getMesWorkOrderExts(orderNoList, organizeCode);
|
|
|
|
|
|
|
|
|
|
checkOperateOrderValid(workOrderStatus, workOrderExtList);
|
|
|
|
|
|
|
|
|
|
// 一个工单号下的多个工单
|
|
|
|
|
for (MesWorkOrderExt workOrderExt : workOrderExtList) {
|
|
|
|
|
Integer lastWorkOrderStatus = null;
|
|
|
|
|
|
|
|
|
|
switch (MesPcnExtEnumUtil.WORK_ORDER_STATUS.getByValue(workOrderStatus)) {
|
|
|
|
|
case OPEN:
|
|
|
|
|
// 启动
|
|
|
|
|
// 校验当前工单是否能够启动并获取上次工单状态
|
|
|
|
|
lastWorkOrderStatus = checkOpenOrderValid(organizeCode, workOrderExt, lastWorkOrderStatus);
|
|
|
|
|
|
|
|
|
|
// 生成点检单
|
|
|
|
|
doGenerateCheckOrder(workOrderStatus, organizeCode, userInfo, workOrderExt, lastWorkOrderStatus);
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case PAUSE:
|
|
|
|
|
// 暂停
|
|
|
|
|
// 校验工单是否是启动状态
|
|
|
|
|
checkPauseOrderValid(workOrderExt);
|
|
|
|
|
|
|
|
|
|
// 暂停记录工单日志
|
|
|
|
|
pauseRecordOrderNo(workOrderExt);
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case REMOVE:
|
|
|
|
|
// 删除
|
|
|
|
|
// 校验当前工单是否能够删除
|
|
|
|
|
checkRemoveOrderValid(organizeCode, userInfo, workOrderExt);
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 更改工单状态
|
|
|
|
|
saveMesWorkOrderExt(workOrderStatus, userInfo, workOrderExt, lastWorkOrderStatus);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return openOrderInformNeedBomEffectPart(workOrderExtList, userInfo);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<String> openOrderInformNeedBomEffectPart(List<MesWorkOrderExt> workOrderExtList, String userInfo) {
|
|
|
|
|
|
|
|
|
|
if (CollectionUtils.isEmpty(workOrderExtList)) return null;
|
|
|
|
|
|
|
|
|
|
List<MesWorkOrderExt> workOrderExtListWithOpen = workOrderExtList.stream().filter(o -> o.getWorkOrderStatus() == MesPcnExtEnumUtil.WORK_ORDER_STATUS.OPEN.getValue()).collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
if (CollectionUtils.isEmpty(workOrderExtListWithOpen)) return null;
|
|
|
|
|
|
|
|
|
|
Map<String, List<MesWorkOrderExt>> workOrderExtMapByPartNo = workOrderExtListWithOpen.stream().collect(Collectors.groupingBy(MesWorkOrderExt::getPartNo));
|
|
|
|
|
|
|
|
|
|
List<MesBomPendingPart> bomPendingPartDbList = queryBomPendingPart(workOrderExtList.get(0).getOrganizeCode(), new ArrayList<>(workOrderExtMapByPartNo.keySet()));
|
|
|
|
|
|
|
|
|
|
if (CollectionUtils.isEmpty(bomPendingPartDbList)) return null;
|
|
|
|
|
|
|
|
|
|
Map<String, List<MesBomPendingPart>> bomPendingPartMap = bomPendingPartDbList.stream().collect(Collectors.groupingBy(MesBomPendingPart::getPartNo));
|
|
|
|
|
|
|
|
|
|
List<String> informList = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
for (Map.Entry<String, List<MesBomPendingPart>> entry : bomPendingPartMap.entrySet()) {
|
|
|
|
|
List<MesWorkOrderExt> workOrderExtListByPartNo = workOrderExtMapByPartNo.get(entry.getKey());
|
|
|
|
|
List<MesBomPendingPart> bomPendingPartList = entry.getValue();
|
|
|
|
|
|
|
|
|
|
for (MesWorkOrderExt workOrderExt : workOrderExtListByPartNo) {
|
|
|
|
|
|
|
|
|
|
for (MesBomPendingPart bomPendingPart : bomPendingPartList) {
|
|
|
|
|
|
|
|
|
|
bomPendingPart.setSystemSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue());
|
|
|
|
|
bomPendingPart.setIsReminded(MesPcnExtEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(bomPendingPart, userInfo);
|
|
|
|
|
|
|
|
|
|
informList.add(String.format("工单[%s]对应成品[%s],有对应子物料[%s],对应BOM版本号[%s],对应有效开始期[%s],结束日期[%s],待BOM生效",
|
|
|
|
|
workOrderExt.getOrderNo(), entry.getKey(), bomPendingPart.getItemPartNo(),
|
|
|
|
|
bomPendingPart.getBomVersion(), bomPendingPart.getEffStartTime(), bomPendingPart.getEffEndTime()));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bomPendingPartRepository.saveAll(bomPendingPartDbList);
|
|
|
|
|
|
|
|
|
|
return informList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<MesBomPendingPart> queryBomPendingPart(String organizeCode, List<String> partNoList) {
|
|
|
|
|
if (CollectionUtils.isEmpty(partNoList) || StringUtils.isEmpty(organizeCode)) return null;
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getInPackList(partNoList, MesPcnExtConstWords.PART_NO, packBean);
|
|
|
|
|
DdlPreparedPack.getNumEqualPack(MesPcnExtEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), "isReminded", packBean);
|
|
|
|
|
return bomPendingPartRepository.findByHqlWhere(packBean);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Integer checkOpenOrderValid(String organizeCode, MesWorkOrderExt workOrderExt, Integer lastWorkOrderStatus) {
|
|
|
|
|
if (MesPcnExtEnumUtil.WORK_ORDER_STATUS.LANDED.getValue() == workOrderExt.getWorkOrderStatus()) {
|
|
|
|
|
//调用启动工单附属启动的方法
|
|
|
|
|
//校验是否存在已经启动的工单
|
|
|
|
|
List<MesWorkOrderExt> landedOrderList = getWorkOrderListByCenterAndStatus(organizeCode, workOrderExt.getWorkCenterCode(), MesPcnExtEnumUtil.WORK_ORDER_STATUS.LANDED.getValue());
|
|
|
|
|
|
|
|
|
|
if (CollectionUtils.isEmpty(landedOrderList)) {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
|
|
|
|
|
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
|
|
|
|
|
.setErrorDetail("生产线[%s]暂无下达状态的工单,请刷新界面重试", workOrderExt.getWorkCenterCode())
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!landedOrderList.get(0).getOrderNo().equals(workOrderExt.getOrderNo())) {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance().setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
|
|
|
|
|
.setErrorDetail("工单[%s]的工单序号不是生产线[%s]下工单中最小的序号", workOrderExt.getOrderNo(), workOrderExt.getWorkCenterCode())
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (MesPcnExtEnumUtil.WORK_ORDER_SN_CREATE_STATUS.UN_CREATE.getValue() == workOrderExt.getSnCreateStatus()) {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
|
|
|
|
|
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
|
|
|
|
|
.setErrorDetail("工单[%s]未生成产品条码,不能启动", workOrderExt.getOrderNo())
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
} else if (MesPcnExtEnumUtil.WORK_ORDER_STATUS.PAUSE.getValue() == workOrderExt.getWorkOrderStatus()) {
|
|
|
|
|
//更改未暂停前状态
|
|
|
|
|
//获取暂停前的状态
|
|
|
|
|
lastWorkOrderStatus = getLastWorkOrderStatus(organizeCode, workOrderExt);
|
|
|
|
|
|
|
|
|
|
if (lastWorkOrderStatus == MesPcnExtEnumUtil.WORK_ORDER_STATUS.OPEN.getValue() &&
|
|
|
|
|
MesPcnExtEnumUtil.WORK_ORDER_SN_CREATE_STATUS.UN_CREATE.getValue() == workOrderExt.getSnCreateStatus())
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
|
|
|
|
|
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
|
|
|
|
|
.setErrorDetail("工单[%s]未生成产品条码,不能启动", workOrderExt.getOrderNo())
|
|
|
|
|
.build();
|
|
|
|
|
|
|
|
|
|
} else
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
|
|
|
|
|
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
|
|
|
|
|
.setErrorDetail("工单[%s]状态为[%s],不能启动",
|
|
|
|
|
workOrderExt.getOrderNo(), MesPcnExtEnumUtil.WORK_ORDER_STATUS.valueOfDescription(workOrderExt.getWorkOrderStatus()))
|
|
|
|
|
.build();
|
|
|
|
|
return lastWorkOrderStatus;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<MesWorkOrderExt> getMesWorkOrderExts(List<String> orderNoList, String organizeCode) {
|
|
|
|
|
List<MesWorkOrderExt> workOrderExtList = new ArrayList<>();
|
|
|
|
|
for (String orderNo : orderNoList) {
|
|
|
|
|
MesWorkOrderExt workOrderExt = getWorkOrderExtByOrderNo(organizeCode, orderNo);
|
|
|
|
@ -746,7 +893,23 @@ public class SxWorkOrderExtService implements ISxWorkOrderExtService {
|
|
|
|
|
}
|
|
|
|
|
workOrderExtList.add(workOrderExt);
|
|
|
|
|
}
|
|
|
|
|
return workOrderExtList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void checkPauseOrderValid(MesWorkOrderExt workOrderExt) {
|
|
|
|
|
boolean isCreate = MesPcnExtEnumUtil.WORK_ORDER_STATUS.CREATE.getValue() == workOrderExt.getWorkOrderStatus();
|
|
|
|
|
boolean isLanded = MesPcnExtEnumUtil.WORK_ORDER_STATUS.LANDED.getValue() == workOrderExt.getWorkOrderStatus();
|
|
|
|
|
boolean isOpen = MesPcnExtEnumUtil.WORK_ORDER_STATUS.OPEN.getValue() == workOrderExt.getWorkOrderStatus();
|
|
|
|
|
if (!isCreate && !isLanded && !isOpen) {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
|
|
|
|
|
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
|
|
|
|
|
.setErrorDetail("工单[%s]的状态不是启动,下达,创建状态,不能暂停", workOrderExt.getOrderNo())
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void checkOperateOrderValid(Integer workOrderStatus, List<MesWorkOrderExt> workOrderExtList) {
|
|
|
|
|
Map<Integer, List<MesWorkOrderExt>> listMap = workOrderExtList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesWorkOrderExt::getWorkOrderStatus));
|
|
|
|
|
if (listMap.size() > 1) {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
@ -769,216 +932,104 @@ public class SxWorkOrderExtService implements ISxWorkOrderExtService {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 一个工单号下的多个工单
|
|
|
|
|
for (MesWorkOrderExt workOrderExt : workOrderExtList) {
|
|
|
|
|
Integer lastWorkOrderStatus = null;
|
|
|
|
|
//启动
|
|
|
|
|
if (MesPcnExtEnumUtil.WORK_ORDER_STATUS.OPEN.getValue() == workOrderStatus) {
|
|
|
|
|
if (MesPcnExtEnumUtil.WORK_ORDER_STATUS.LANDED.getValue() == workOrderExt.getWorkOrderStatus()) {
|
|
|
|
|
//调用启动工单附属启动的方法
|
|
|
|
|
//校验是否存在已经启动的工单
|
|
|
|
|
List<MesWorkOrderExt> landedOrderList = getWorkOrderListByCenterAndStatus(organizeCode, workOrderExt.getWorkCenterCode(), MesPcnExtEnumUtil.WORK_ORDER_STATUS.LANDED.getValue());
|
|
|
|
|
if (CollectionUtils.isEmpty(landedOrderList)) {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
|
|
|
|
|
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
|
|
|
|
|
.setErrorDetail("生产线[%s]暂无下达状态的工单,请刷新界面重试", workOrderExt.getWorkCenterCode())
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
if (!landedOrderList.get(0).getOrderNo().equals(workOrderExt.getOrderNo())) {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance().setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
|
|
|
|
|
.setErrorDetail("工单[%s]的工单序号不是生产线[%s]下工单中最小的序号", workOrderExt.getOrderNo(), workOrderExt.getWorkCenterCode())
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (MesPcnExtEnumUtil.WORK_ORDER_SN_CREATE_STATUS.UN_CREATE.getValue() == workOrderExt.getSnCreateStatus()) {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
|
|
|
|
|
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
|
|
|
|
|
.setErrorDetail("工单[%s]未生成产品条码,不能启动", workOrderExt.getOrderNo())
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
} else if (MesPcnExtEnumUtil.WORK_ORDER_STATUS.PAUSE.getValue() == workOrderExt.getWorkOrderStatus()) {
|
|
|
|
|
//更改未暂停前状态
|
|
|
|
|
//获取暂停前的状态
|
|
|
|
|
List<MesWorkOrderLog> workOrderLogList = workOrderLogExtService.getWorkOrderLogList(organizeCode, workOrderExt.getOrderNo());
|
|
|
|
|
if (CollectionUtils.isEmpty(workOrderLogList)) {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance().setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
|
|
|
|
|
.setErrorDetail("工单号[%s]缺失履历信息,操作失败", workOrderExt.getOrderNo())
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
workOrderLogList = workOrderLogList.stream().sorted(Comparator.comparing(MesWorkOrderLog::getModifyDatetime).reversed()).collect(Collectors.toList());
|
|
|
|
|
lastWorkOrderStatus = MesPcnExtEnumUtil.WORK_ORDER_STATUS.LANDED.getValue();
|
|
|
|
|
for (MesWorkOrderLog workOrderLog : workOrderLogList) {
|
|
|
|
|
if (null == workOrderLog) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (workOrderLog.getWorkOrderStatus() != MesPcnExtEnumUtil.WORK_ORDER_STATUS.PAUSE.getValue()) {
|
|
|
|
|
lastWorkOrderStatus = workOrderLog.getWorkOrderStatus();
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (lastWorkOrderStatus == MesPcnExtEnumUtil.WORK_ORDER_STATUS.OPEN.getValue()) {
|
|
|
|
|
if (MesPcnExtEnumUtil.WORK_ORDER_SN_CREATE_STATUS.UN_CREATE.getValue() == workOrderExt.getSnCreateStatus()) {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
|
|
|
|
|
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
|
|
|
|
|
.setErrorDetail("工单[%s]未生成产品条码,不能启动", workOrderExt.getOrderNo())
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}else {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
|
|
|
|
|
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
|
|
|
|
|
.setErrorDetail("工单[%s]状态为[%s],不能启动",
|
|
|
|
|
workOrderExt.getOrderNo(), MesPcnExtEnumUtil.WORK_ORDER_STATUS.valueOfDescription(workOrderExt.getWorkOrderStatus()))
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
private void checkRemoveOrderValid(String organizeCode, String userInfo, MesWorkOrderExt workOrderExt) {
|
|
|
|
|
if (workOrderExt.getCompleteQty() > 0) {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance().setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
|
|
|
|
|
.setErrorDetail("工单号【%s】的完成数量大于0,不能删除", workOrderExt.getOrderNo())
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
|
|
|
|
|
.setErrorSolution("校验生产工单表数据")
|
|
|
|
|
.build();
|
|
|
|
|
} else if(workOrderExt.getCompleteQty() == 0){
|
|
|
|
|
// 要自动解绑已绑定的关键件 看一下是什么
|
|
|
|
|
DdlPackBean packBeanBind = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(workOrderExt.getOrderNo(),MesPcnExtConstWords.WORK_ORDER_NO,packBeanBind);
|
|
|
|
|
List<MesProdBindRecordExt> prodBindRecordExtList = prodBindRecordExtRepository.findByHqlWhere(packBeanBind);
|
|
|
|
|
prodBindRecordExtList.forEach(p -> {
|
|
|
|
|
p.setActionType(MesPcnExtEnumUtil.MES_ACTION_TYPE.UNTYING.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(p, userInfo);
|
|
|
|
|
new ConvertBeanExt(p).convertBean(p);
|
|
|
|
|
});
|
|
|
|
|
if (!CollectionUtils.isEmpty(prodBindRecordExtList)) prodBindRecordExtRepository.saveAll(prodBindRecordExtList);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (workOrderExt.getWorkOrderType() != MesPcnExtEnumUtil.WORK_ORDER_TYPE.REWORK_ORDER.getValue() &&
|
|
|
|
|
MesPcnExtEnumUtil.WORK_ORDER_STATUS.OPEN.getValue() == workOrderStatus &&
|
|
|
|
|
(null == lastWorkOrderStatus || MesPcnExtEnumUtil.WORK_ORDER_STATUS.OPEN.getValue() == lastWorkOrderStatus)) {
|
|
|
|
|
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
List<MesAffiliatedStartConfig> mesAffiliatedStartConfigs = affiliatedStartConfigRepository.findByHqlWhere(ddlPackBean);
|
|
|
|
|
int totalConfigSize = CollectionUtils.isEmpty(mesAffiliatedStartConfigs) ? 0 : mesAffiliatedStartConfigs.size();
|
|
|
|
|
log.info("总配置类信息" + mesAffiliatedStartConfigs + "总配置数量" + totalConfigSize);
|
|
|
|
|
for (MesAffiliatedStartConfig mesAffiliatedStartConfig : mesAffiliatedStartConfigs) {
|
|
|
|
|
try {
|
|
|
|
|
log.info("点检启动配置类信息" + mesAffiliatedStartConfig);
|
|
|
|
|
IWorkOrderStartService workOrderStartService = (IWorkOrderStartService) SpringContextsUtil.getBean(mesAffiliatedStartConfig.getAffiliatedStartClass());
|
|
|
|
|
log.info(workOrderStartService.getClass().getName() + "点检开始执行调用");
|
|
|
|
|
workOrderStartService.doGenCheckOrder(workOrderExt, userInfo);
|
|
|
|
|
log.info(workOrderStartService.getClass().getName() + "点检开始执行结束");
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
log.error("点检开始执行异常" + e.getMessage());
|
|
|
|
|
StackTraceElement[] stackTrace = e.getStackTrace();
|
|
|
|
|
log.error(Arrays.toString(stackTrace));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else if (MesPcnExtEnumUtil.WORK_ORDER_STATUS.PAUSE.getValue() == workOrderStatus) {
|
|
|
|
|
//暂停
|
|
|
|
|
//校验工单是否是启动状态
|
|
|
|
|
boolean isCreate = MesPcnExtEnumUtil.WORK_ORDER_STATUS.CREATE.getValue() == workOrderExt.getWorkOrderStatus();
|
|
|
|
|
boolean isLanded = MesPcnExtEnumUtil.WORK_ORDER_STATUS.LANDED.getValue() == workOrderExt.getWorkOrderStatus();
|
|
|
|
|
boolean isOpen = MesPcnExtEnumUtil.WORK_ORDER_STATUS.OPEN.getValue() == workOrderExt.getWorkOrderStatus();
|
|
|
|
|
if (!isCreate && !isLanded && !isOpen) {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
|
|
|
|
|
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
|
|
|
|
|
.setErrorDetail("工单[%s]的状态不是启动,下达,创建状态,不能暂停", workOrderExt.getOrderNo())
|
|
|
|
|
.build();
|
|
|
|
|
private void doGenerateCheckOrder(Integer workOrderStatus, String organizeCode, String userInfo, MesWorkOrderExt workOrderExt, Integer lastWorkOrderStatus) {
|
|
|
|
|
if (workOrderExt.getWorkOrderType() != MesPcnExtEnumUtil.WORK_ORDER_TYPE.REWORK_ORDER.getValue() &&
|
|
|
|
|
MesPcnExtEnumUtil.WORK_ORDER_STATUS.OPEN.getValue() == workOrderStatus &&
|
|
|
|
|
(null == lastWorkOrderStatus || MesPcnExtEnumUtil.WORK_ORDER_STATUS.OPEN.getValue() == lastWorkOrderStatus)) {
|
|
|
|
|
|
|
|
|
|
List<MesAffiliatedStartConfig> mesAffiliatedStartConfigs = getMesAffiliatedStartConfigs(organizeCode);
|
|
|
|
|
int totalConfigSize = CollectionUtils.isEmpty(mesAffiliatedStartConfigs) ? 0 : mesAffiliatedStartConfigs.size();
|
|
|
|
|
log.info("总配置类信息:" + mesAffiliatedStartConfigs + "总配置数量:" + totalConfigSize);
|
|
|
|
|
for (MesAffiliatedStartConfig mesAffiliatedStartConfig : mesAffiliatedStartConfigs) {
|
|
|
|
|
try {
|
|
|
|
|
log.info("点检启动配置类信息" + mesAffiliatedStartConfig);
|
|
|
|
|
IWorkOrderStartService workOrderStartService = (IWorkOrderStartService) SpringContextsUtil.getBean(mesAffiliatedStartConfig.getAffiliatedStartClass());
|
|
|
|
|
log.info(workOrderStartService.getClass().getName() + "点检开始执行调用");
|
|
|
|
|
workOrderStartService.doGenCheckOrder(workOrderExt, userInfo);
|
|
|
|
|
log.info(workOrderStartService.getClass().getName() + "点检开始执行结束");
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
log.error("点检开始执行异常" + e.getMessage());
|
|
|
|
|
StackTraceElement[] stackTrace = e.getStackTrace();
|
|
|
|
|
log.error(Arrays.toString(stackTrace));
|
|
|
|
|
}
|
|
|
|
|
String key = new StringJoiner(MesPcnExtConstWords.COLON).add("MES-PAUSE-ORDER").add(workOrderExt.getOrderNo()).toString();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//String workCenterWoPauseKey = new StringJoiner(MesPcnExtConstWords.COLON).add("MES-PAUSE-ORDER").add(workOrderExt.getWorkCenterCode()).toString();
|
|
|
|
|
private Integer getLastWorkOrderStatus(String organizeCode, MesWorkOrderExt workOrderExt) {
|
|
|
|
|
|
|
|
|
|
//redisMesPcn.putObject(workCenterWoPauseKey, workOrderExt.getOrderNo());
|
|
|
|
|
List<MesWorkOrderLog> workOrderLogList = getMesWorkOrderLogs(organizeCode, workOrderExt);
|
|
|
|
|
|
|
|
|
|
redisMesPcn.putObject(key, workOrderExt.getOrderNo(), MesPcnEnumUtil.EXPIRE_TIME.ONE_MIN.getValue());
|
|
|
|
|
workOrderLogList = workOrderLogList.stream().sorted(Comparator.comparing(MesWorkOrderLog::getModifyDatetime).reversed()).collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
} else if (MesPcnExtEnumUtil.WORK_ORDER_STATUS.CLOSE.getValue() == workOrderStatus) {
|
|
|
|
|
/*//关闭
|
|
|
|
|
//校验工单是否是暂停状态
|
|
|
|
|
if (MesPcnExtEnumUtil.WORK_ORDER_STATUS.PAUSE.getValue() != workOrderExt.getWorkOrderStatus()) {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance()
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
|
|
|
|
|
.setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
|
|
|
|
|
.setErrorDetail("工单[%s]的状态不是暂停状态,不能关闭", workOrderExt.getOrderNo())
|
|
|
|
|
.build();
|
|
|
|
|
}*/
|
|
|
|
|
} else if (MesPcnExtEnumUtil.WORK_ORDER_STATUS.CLOSE.getValue() == workOrderStatus) {
|
|
|
|
|
//完成
|
|
|
|
|
//校验工单是否是暂停状态
|
|
|
|
|
//修改返工工单状态
|
|
|
|
|
//if(workOrderExt.getWorkOrderType() == MesPcnExtEnumUtil.WORK_ORDER_TYPE.REWORK_ORDER.getValue()) {
|
|
|
|
|
//
|
|
|
|
|
// List<String> waterPurifierCodeList = !Optional.ofNullable(waterPurifierCode).isPresent() || StringUtils.isEmpty(waterPurifierCode.getCfgValue()) ? new ArrayList<>() : Arrays.asList(waterPurifierCode.getCfgValue().split(MesPcnExtConstWords.COMMA));
|
|
|
|
|
// if(CollectionUtils.isEmpty(waterPurifierCodeList) || !waterPurifierCodeList.contains(workOrderExt.getWorkCenterCode())){
|
|
|
|
|
// // 手动点击完成工单,存在未下线条码
|
|
|
|
|
// if(!workOrderExt.getQty().equals(workOrderExt.getCompleteQty())) {
|
|
|
|
|
// List<MesProduceSnRepair> produceSnRepairList = queryProduceSnRepairList(organizeCode, workOrderExt.getOrderNo());
|
|
|
|
|
// if(!CollectionUtils.isEmpty(produceSnRepairList)) {
|
|
|
|
|
// // 未下线条码
|
|
|
|
|
// produceSnRepairList = produceSnRepairList.stream().filter(o -> StringUtils.isEmpty(o.getOutWorkCenterTime())).collect(Collectors.toList());
|
|
|
|
|
//
|
|
|
|
|
// if(!CollectionUtils.isEmpty(produceSnRepairList)){
|
|
|
|
|
// List<String> serialNumberList = produceSnRepairList.stream().map(MesProduceSnRepair::getSerialNumber).collect(Collectors.toList());
|
|
|
|
|
//
|
|
|
|
|
// updateProduceSnRepair(organizeCode, serialNumberList);
|
|
|
|
|
//
|
|
|
|
|
// updatePackage(organizeCode, serialNumberList);
|
|
|
|
|
//
|
|
|
|
|
// unbindReworkRangeList(organizeCode, workOrderExt, serialNumberList, userInfo);
|
|
|
|
|
//
|
|
|
|
|
// clearProdBindRecord(organizeCode, workOrderExt, TimeTool.getNowTime(true), serialNumberList, userInfo);
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// //reworkOrderRepository.updateByProperties(new String[]{MesPcnExtConstWords.REWORK_ORDER_NO}, new Object[]{workOrderExt.getOrderNo()},
|
|
|
|
|
// // new String[]{ MesPcnExtConstWords.WORK_ORDER_STATUS, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME},
|
|
|
|
|
// // new Object[]{MesPcnExtEnumUtil.WORK_ORDER_STATUS.CLOSE.getValue(), MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue(), AuthUtil.getSessionUser().getUserName(), TimeTool.getNowTime(true)});
|
|
|
|
|
// }
|
|
|
|
|
//}
|
|
|
|
|
/*if (MesExtEnumUtil.WORK_ORDER_STATUS.PAUSE.getValue() != mesWorkOrder.getWorkOrderStatus()) {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance().setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
|
|
|
|
|
.setErrorDetail("工单号【%s】的工单状态不是暂停状态,不能完成", mesWorkOrder.getOrderNo())
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
|
|
|
|
|
.setErrorSolution("校验生产工单表数据")
|
|
|
|
|
.build();
|
|
|
|
|
}*/
|
|
|
|
|
} else if (MesPcnExtEnumUtil.WORK_ORDER_STATUS.REMOVE.getValue() == workOrderStatus) {
|
|
|
|
|
//删除
|
|
|
|
|
//校验工单是否是暂停状态
|
|
|
|
|
/*if (MesExtEnumUtil.WORK_ORDER_STATUS.PAUSE.getValue() != mesWorkOrder.getWorkOrderStatus()) {
|
|
|
|
|
*//*if (MesExtEnumUtil.WORK_ORDER_STATUS.CREATE.getValue() != mesWorkOrder.getWorkOrderStatus()){
|
|
|
|
|
throw ImppExceptionBuilder.newInstance().setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
|
|
|
|
|
.setErrorDetail("工单号【%s】的工单状态不是暂停或启动状态,不能删除", mesWorkOrder.getOrderNo())
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
|
|
|
|
|
.setErrorSolution("校验生产工单表数据")
|
|
|
|
|
.build();
|
|
|
|
|
}*//*
|
|
|
|
|
}*/
|
|
|
|
|
if (workOrderExt.getCompleteQty() > 0){
|
|
|
|
|
throw ImppExceptionBuilder.newInstance().setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
|
|
|
|
|
.setErrorDetail("工单号【%s】的完成数量大于0,不能删除", workOrderExt.getOrderNo())
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
|
|
|
|
|
.setErrorSolution("校验生产工单表数据")
|
|
|
|
|
.build();
|
|
|
|
|
}else if(workOrderExt.getCompleteQty() == 0){
|
|
|
|
|
// 要自动解绑已绑定的关键件 看一下是什么
|
|
|
|
|
DdlPackBean packBeanBind = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(workOrderExt.getOrderNo(),MesPcnExtConstWords.WORK_ORDER_NO,packBeanBind);
|
|
|
|
|
List<MesProdBindRecordExt> prodBindRecordExtList = prodBindRecordExtRepository.findByHqlWhere(packBeanBind);
|
|
|
|
|
prodBindRecordExtList.forEach(p -> {
|
|
|
|
|
p.setActionType(MesPcnExtEnumUtil.MES_ACTION_TYPE.UNTYING.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(p, userInfo);
|
|
|
|
|
new ConvertBeanExt(p).convertBean(p);
|
|
|
|
|
});
|
|
|
|
|
if (!CollectionUtils.isEmpty(prodBindRecordExtList)) prodBindRecordExtRepository.saveAll(prodBindRecordExtList);
|
|
|
|
|
}
|
|
|
|
|
Integer initLastWorkOrderStatus = MesPcnExtEnumUtil.WORK_ORDER_STATUS.LANDED.getValue();
|
|
|
|
|
for (MesWorkOrderLog workOrderLog : workOrderLogList) {
|
|
|
|
|
if (null == workOrderLog) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (null == lastWorkOrderStatus) {
|
|
|
|
|
workOrderExt.setWorkOrderStatus(workOrderStatus);
|
|
|
|
|
} else {
|
|
|
|
|
workOrderExt.setWorkOrderStatus(lastWorkOrderStatus);
|
|
|
|
|
if (workOrderLog.getWorkOrderStatus() != MesPcnExtEnumUtil.WORK_ORDER_STATUS.PAUSE.getValue()) {
|
|
|
|
|
initLastWorkOrderStatus = workOrderLog.getWorkOrderStatus();
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
ConvertBean.serviceModelUpdate(workOrderExt, userInfo);
|
|
|
|
|
workOrderExt.setSystemSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue());
|
|
|
|
|
new ConvertBeanExt(workOrderExt).convertBean(workOrderExt);
|
|
|
|
|
MesWorkOrderExt mesWorkOrderDb = workOrderExtRepository.save(workOrderExt);
|
|
|
|
|
|
|
|
|
|
//生产工单日志
|
|
|
|
|
this.insertMesWorkOrderLog(mesWorkOrderDb);
|
|
|
|
|
}
|
|
|
|
|
return initLastWorkOrderStatus;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void pauseRecordOrderNo(MesWorkOrderExt workOrderExt) {
|
|
|
|
|
String key = new StringJoiner(MesPcnExtConstWords.COLON).add("MES-PAUSE-ORDER").add(workOrderExt.getOrderNo()).toString();
|
|
|
|
|
redisMesPcn.putObject(key, workOrderExt.getOrderNo(), MesPcnEnumUtil.EXPIRE_TIME.ONE_MIN.getValue());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MesWorkOrderExt saveMesWorkOrderExt(Integer workOrderStatus, String userInfo, MesWorkOrderExt workOrderExt, Integer lastWorkOrderStatus) {
|
|
|
|
|
workOrderExt.setWorkOrderStatus(lastWorkOrderStatus == null ? workOrderStatus : lastWorkOrderStatus);
|
|
|
|
|
ConvertBean.serviceModelUpdate(workOrderExt, userInfo);
|
|
|
|
|
workOrderExt.setSystemSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue());
|
|
|
|
|
new ConvertBeanExt(workOrderExt).convertBean(workOrderExt);
|
|
|
|
|
MesWorkOrderExt mesWorkOrderDb = workOrderExtRepository.save(workOrderExt);
|
|
|
|
|
//生产工单日志
|
|
|
|
|
this.insertMesWorkOrderLog(mesWorkOrderDb);
|
|
|
|
|
return mesWorkOrderDb;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<MesAffiliatedStartConfig> getMesAffiliatedStartConfigs(String organizeCode) {
|
|
|
|
|
List<MesAffiliatedStartConfig> mesAffiliatedStartConfigs = affiliatedStartConfigRepository.findByProperty(
|
|
|
|
|
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID},
|
|
|
|
|
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue()});
|
|
|
|
|
return mesAffiliatedStartConfigs;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<MesWorkOrderLog> getMesWorkOrderLogs(String organizeCode, MesWorkOrderExt workOrderExt) {
|
|
|
|
|
List<MesWorkOrderLog> workOrderLogList = workOrderLogExtService.getWorkOrderLogList(organizeCode, workOrderExt.getOrderNo());
|
|
|
|
|
if (CollectionUtils.isEmpty(workOrderLogList)) {
|
|
|
|
|
throw ImppExceptionBuilder.newInstance().setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
|
|
|
|
|
.setErrorDetail("工单号[%s]缺失履历信息,操作失败", workOrderExt.getOrderNo())
|
|
|
|
|
.setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode())
|
|
|
|
|
.build();
|
|
|
|
|
}
|
|
|
|
|
return workOrderLogList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<MesProduceSnRepair> queryProduceSnRepairList(String organizeCode, String orderNo) {
|
|
|
|
@ -1055,7 +1106,7 @@ public class SxWorkOrderExtService implements ISxWorkOrderExtService {
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
//DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
//DdlPreparedPack.getStringEqualPack(mesWorkOrder.getOrderNo(), MesExtConstWords.REWORK_ORDER_NO, packBean);
|
|
|
|
|
//DdlPreparedPack.getStringEqualPack(mesWorkOrder.getOrderNo(), MesPcnExtConstWords.REWORK_ORDER_NO, packBean);
|
|
|
|
|
//List<MesReworkRange> reworkRangeList = reworkRangeRepository.findByHqlWhere(packBean);
|
|
|
|
|
//
|
|
|
|
|
//reworkRangeList = reworkRangeList.stream().filter(o -> serialNumberList.contains(o.getSerialNumber())).collect(Collectors.toList());
|
|
|
|
|