|
|
|
@ -1,6 +1,9 @@
|
|
|
|
|
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.jx;
|
|
|
|
|
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.base.*;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IOutPutStatisticsService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IProduceSnTravelExtService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.ISxOutPutStatisticsTravelService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.jx.IJxProdBusiStrategyService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.jx.IJxProduceSnExtService;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.api.busi.jx.IJxProduceSnMcRecordService;
|
|
|
|
@ -12,8 +15,11 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
|
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtEnumUtil;
|
|
|
|
|
import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmRouteDataService;
|
|
|
|
|
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
|
|
|
|
|
import cn.estsh.i3plus.platform.common.tool.MathOperation;
|
|
|
|
|
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.MesRouteProcess;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.MesShift;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
|
|
|
|
|
import cn.estsh.i3plus.pojo.mes.model.StepResult;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
@ -66,6 +72,36 @@ public class JxProdBusiStrategyCommonService implements IJxProdBusiStrategyServi
|
|
|
|
|
@Autowired
|
|
|
|
|
private IFsmRouteDataService fsmRouteDataService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private IWorkCenterExtService workCenterExtService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private IShiftExtService shiftExtService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private IShiftProdCenterRecordService shiftProdCenterRecordService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private ISxWorkOrderExtService workOrderExtService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesWorkOrderExtRepository workOrderExtRepository;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private IOutPutStatisticsService outPutStatisticsService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private MesOutPutStatisticsRepository outPutStatisticsRepository;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private ISxOutPutStatisticsTravelService outPutStatisticsTravelService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private SxProductOffLineRepository productOffLineRepository;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private IPartExtService partExtService;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public StepResult checkLineOn(JxProdBusiStrategyParamsBuilder params) {
|
|
|
|
|
if (MesPcnExtEnumUtil.WORK_ORDER_TYPE.REWORK_ORDER.getValue() != params.getOrderModel().getWorkOrderType()) queryBusiData4Mc(params.manageCode(params.getScanInfo()));
|
|
|
|
@ -529,11 +565,15 @@ public class JxProdBusiStrategyCommonService implements IJxProdBusiStrategyServi
|
|
|
|
|
if (StringUtils.isEmpty(produceSnExt.getProcessCode()) && routeProcessList.get(0).getIsNecessary() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue())
|
|
|
|
|
return stepResult.isCompleted(false).msg(String.format("%s[%s]对应的产品条码信息未经过首道工序[%s],操作失败!", params.getScanName(), params.getScanInfo(), routeProcessList.get(0).getProcessCode()));
|
|
|
|
|
|
|
|
|
|
Optional<MesRouteProcess> completeProcessOp = routeProcessList.stream().filter(o -> (null != o && o.getProcessCode().equals(reqBean.getProcessCode()))).findFirst();
|
|
|
|
|
if (null == completeProcessOp || !completeProcessOp.isPresent())
|
|
|
|
|
return stepResult.isCompleted(false).msg(String.format("%s[%s]对应的产品条码信息已经过当前工序[%s],操作失败!", params.getScanName(), params.getScanInfo(), reqBean.getProcessCode()));
|
|
|
|
|
List<MesRouteProcess> unCompleteProcessList;
|
|
|
|
|
if (StringUtils.isEmpty(produceSnExt.getProcessCode())) unCompleteProcessList = routeProcessList;
|
|
|
|
|
else {
|
|
|
|
|
Optional<MesRouteProcess> completeProcessOp = routeProcessList.stream().filter(o -> (null != o && o.getProcessCode().equals(produceSnExt.getProcessCode()))).findFirst();
|
|
|
|
|
if (null == completeProcessOp || !completeProcessOp.isPresent())
|
|
|
|
|
return stepResult.isCompleted(false).msg(String.format("%s[%s]对应的产品条码信息已经过当前工序[%s],操作失败!", params.getScanName(), params.getScanInfo(), reqBean.getProcessCode()));
|
|
|
|
|
|
|
|
|
|
List<MesRouteProcess> unCompleteProcessList = routeProcessList.stream().filter(o -> (null != o && o.getSeq().compareTo(completeProcessOp.get().getSeq()) > 0)).collect(Collectors.toList());
|
|
|
|
|
unCompleteProcessList = routeProcessList.stream().filter(o -> (null != o && o.getSeq().compareTo(completeProcessOp.get().getSeq()) > 0)).collect(Collectors.toList());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (CollectionUtils.isEmpty(unCompleteProcessList)) return stepResult;
|
|
|
|
|
|
|
|
|
@ -547,7 +587,156 @@ public class JxProdBusiStrategyCommonService implements IJxProdBusiStrategyServi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public StepResult checkShiftStart(JxProdBusiStrategyParamsBuilder params) {
|
|
|
|
|
|
|
|
|
|
StepResult stepResult = StepResult.getNonComplete();
|
|
|
|
|
|
|
|
|
|
MesWorkCenterExt workCenterExtDb = workCenterExtService.getWorkCenterExtByWorkCenterCode(params.getOrganizeCode(), params.getWorkCenterCode());
|
|
|
|
|
if (null == workCenterExtDb) return stepResult.msg(String.format("生产线[%s]信息不存在,操作失败", params.getWorkCenterCode()));
|
|
|
|
|
if (StringUtils.isEmpty(workCenterExtDb.getWorkTime()) || StringUtils.isEmpty(workCenterExtDb.getShiftCode())) return stepResult.msg(String.format("生产线[%s]未启动班次,操作失败", params.getWorkCenterCode()));
|
|
|
|
|
|
|
|
|
|
MesShift shiftDb = shiftExtService.getShiftByShiftCodeAndCenterCode(params.getOrganizeCode(), params.getWorkCenterCode(), workCenterExtDb.getShiftCode());
|
|
|
|
|
if (null == shiftDb || (StringUtils.isEmpty(shiftDb.getStartTime()) || StringUtils.isEmpty(shiftDb.getEndTime()))) return stepResult.msg(String.format("未配置有效的生产线[%s]班次代码[%s]信息,操作失败", params.getWorkCenterCode(), workCenterExtDb.getShiftCode()));
|
|
|
|
|
|
|
|
|
|
String workTime = shiftProdCenterRecordService.getWorkTime(shiftDb.getStartTime(), shiftDb.getEndTime());
|
|
|
|
|
if (StringUtils.isEmpty(workTime) || !workTime.equals(workCenterExtDb.getWorkTime())) return stepResult.msg(String.format("生产线[%s]需要重新启动班次,操作失败", params.getWorkCenterCode()));
|
|
|
|
|
|
|
|
|
|
params.workCenterExtDb(workCenterExtDb);
|
|
|
|
|
|
|
|
|
|
return stepResult.isCompleted(true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void getPartDb(JxProdBusiStrategyParamsBuilder params) {
|
|
|
|
|
MesPart partDb = partExtService.getPart(params.getOrganizeCode(), params.getOrderModel().getPartNo());
|
|
|
|
|
if (null != partDb) params.setPartDb(partDb);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public StepResult execLineOff(JxProdBusiStrategyParamsBuilder params) {
|
|
|
|
|
return null;
|
|
|
|
|
|
|
|
|
|
StepResult stepResult = checkShiftStart(params);
|
|
|
|
|
|
|
|
|
|
if (!stepResult.isCompleted()) return stepResult;
|
|
|
|
|
|
|
|
|
|
getPartDb(params);
|
|
|
|
|
|
|
|
|
|
saveWorkOrder4LineOff(params);
|
|
|
|
|
|
|
|
|
|
saveProduceSnLineOff(params);
|
|
|
|
|
|
|
|
|
|
insertProduceSnTravel(params);
|
|
|
|
|
|
|
|
|
|
saveOutPutStatistics(params);
|
|
|
|
|
|
|
|
|
|
doProductOffLine(params);
|
|
|
|
|
|
|
|
|
|
return stepResult;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void saveWorkOrder4LineOff(JxProdBusiStrategyParamsBuilder params) {
|
|
|
|
|
|
|
|
|
|
MesWorkOrderExt workOrderExt = workOrderExtService.getWorkOrderExtByOrderNo(params.getOrganizeCode(), params.getOrderModel().getOrderNo());
|
|
|
|
|
|
|
|
|
|
workOrderExt.setCompleteQty(StringUtils.isEmpty(workOrderExt.getCompleteQty()) ? new Double(1) : MathOperation.add(workOrderExt.getCompleteQty(), new Double(1)));
|
|
|
|
|
if (MathOperation.compareTo(workOrderExt.getCompleteQty(), workOrderExt.getQty()) == 0) workOrderExt.setWorkOrderStatus(MesPcnExtEnumUtil.WORK_ORDER_STATUS.CLOSE.getValue());
|
|
|
|
|
workOrderExt.setSystemSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(workOrderExt, params.getUserInfo());
|
|
|
|
|
new ConvertBeanExt(workOrderExt).convertBean(workOrderExt);
|
|
|
|
|
|
|
|
|
|
workOrderExtRepository.save(workOrderExt);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void saveProduceSnLineOff(JxProdBusiStrategyParamsBuilder params) {
|
|
|
|
|
|
|
|
|
|
MesProduceSnExt produceSnExtDb = queryProduceSnInfo(params).getProduceSnExtDb();
|
|
|
|
|
|
|
|
|
|
produceSnExtDb.setSnStatus(MesPcnExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue());
|
|
|
|
|
ConvertBean.serviceModelUpdate(produceSnExtDb, params.getUserInfo());
|
|
|
|
|
if (MesPcnExtEnumUtil.WORK_ORDER_TYPE.REWORK_ORDER.getValue() != params.getOrderModel().getWorkOrderType()) packProduceSnLineOff(params, produceSnExtDb);
|
|
|
|
|
produceSnExtService.doPackSnExtProcess((StationRequestBean) params.getObj(), produceSnExtDb);
|
|
|
|
|
produceSnExtDb.setSystemSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue());
|
|
|
|
|
new ConvertBeanExt(produceSnExtDb).convertBean(produceSnExtDb);
|
|
|
|
|
|
|
|
|
|
params.produceSnExtDb(produceSnExtRepository.save(produceSnExtDb));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void packProduceSnLineOff(JxProdBusiStrategyParamsBuilder params, MesProduceSnExt produceSnExtDb) {
|
|
|
|
|
produceSnExtDb.setOutWorkCenterTime(produceSnExtDb.getModifyDatetime());
|
|
|
|
|
produceSnExtDb.setWorkTime(params.getWorkCenterExtDb().getWorkTime());
|
|
|
|
|
produceSnExtDb.setShiftCode(params.getWorkCenterExtDb().getShiftCode());
|
|
|
|
|
produceSnExtDb.setLotNo(produceSnExtDb.getWorkTime());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void saveOutPutStatistics(JxProdBusiStrategyParamsBuilder params) {
|
|
|
|
|
|
|
|
|
|
MesOutPutStatistics outPutStatistics = outPutStatisticsService.getOutPutStatisticsByTimeAndOrderNo(
|
|
|
|
|
params.getOrganizeCode(), params.getOrderModel().getOrderNo(), params.getWorkCenterExtDb().getWorkTime(), params.getWorkCenterExtDb().getShiftCode());
|
|
|
|
|
if (null == outPutStatistics) {
|
|
|
|
|
outPutStatistics = new MesOutPutStatistics();
|
|
|
|
|
outPutStatistics.setWorkCenterCode(params.getWorkCenterCode());
|
|
|
|
|
outPutStatistics.setWorkOrderNo(params.getOrderModel().getOrderNo());
|
|
|
|
|
outPutStatistics.setPartNo(params.getOrderModel().getPartNo());
|
|
|
|
|
outPutStatistics.setPartNameRdd(params.getOrderModel().getPartNameRdd());
|
|
|
|
|
outPutStatistics.setShiftCode(params.getWorkCenterExtDb().getShiftCode());
|
|
|
|
|
outPutStatistics.setWorkTime(params.getWorkCenterExtDb().getWorkTime());
|
|
|
|
|
outPutStatistics.setOrderStartTime(params.getOrderModel().getStartTime());
|
|
|
|
|
outPutStatistics.setQty(new Double(1));
|
|
|
|
|
outPutStatistics.setPlanQty(params.getOrderModel().getQty());
|
|
|
|
|
outPutStatistics.setRemakeQty(new Double(0));
|
|
|
|
|
outPutStatistics.setWorkOrderType(params.getOrderModel().getWorkOrderType());
|
|
|
|
|
outPutStatistics.setSystemSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue());
|
|
|
|
|
outPutStatistics.setOrganizeCode(params.getOrganizeCode());
|
|
|
|
|
ConvertBean.serviceModelInitialize(outPutStatistics, params.getUserInfo());
|
|
|
|
|
outPutStatistics.setStartTime(outPutStatistics.getModifyDatetime());
|
|
|
|
|
outPutStatistics.setEndTime(outPutStatistics.getStartTime());
|
|
|
|
|
outPutStatistics = outPutStatisticsRepository.insert(outPutStatistics);
|
|
|
|
|
} else {
|
|
|
|
|
outPutStatistics.setQty(MathOperation.add(outPutStatistics.getQty(), new Double(1)));
|
|
|
|
|
ConvertBean.serviceModelUpdate(outPutStatistics, params.getUserInfo());
|
|
|
|
|
outPutStatistics.setEndTime(outPutStatistics.getModifyDatetime());
|
|
|
|
|
outPutStatistics.setSystemSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue());
|
|
|
|
|
outPutStatistics = outPutStatisticsRepository.save(outPutStatistics);
|
|
|
|
|
}
|
|
|
|
|
outPutStatisticsTravelService.insertOutPutStatisticsTravel(outPutStatistics);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void doProductOffLine(JxProdBusiStrategyParamsBuilder params) {
|
|
|
|
|
|
|
|
|
|
if (MesPcnExtEnumUtil.WORK_ORDER_TYPE.STANDARD_ORDER.getValue() != params.getOrderModel().getWorkOrderType()) return;
|
|
|
|
|
|
|
|
|
|
SxProductOffLine productOffLine = new SxProductOffLine();
|
|
|
|
|
productOffLine.setWorkOrderNo(params.getOrderModel().getOrderNo());
|
|
|
|
|
productOffLine.setPackageNo(params.getProductSn());
|
|
|
|
|
productOffLine.setSerialNumber(params.getSerialNumber());
|
|
|
|
|
productOffLine.setPartNo(params.getOrderModel().getPartNo());
|
|
|
|
|
productOffLine.setPartName(params.getOrderModel().getPartNameRdd());
|
|
|
|
|
productOffLine.setQty(new Double(1));
|
|
|
|
|
productOffLine.setLotNo(params.getWorkCenterExtDb().getWorkTime());
|
|
|
|
|
productOffLine.setShiftCode(params.getWorkCenterExtDb().getShiftCode());
|
|
|
|
|
productOffLine.setWorkCenterCode(params.getWorkCenterCode());
|
|
|
|
|
productOffLine.setErpWarehouse(params.getOrderModel().getErpWarehouse());
|
|
|
|
|
if (MesPcnExtEnumUtil.WORK_ORDER_TYPE.REWORK_ORDER.getValue() != params.getOrderModel().getWorkOrderType()) productOffLine.setSnType(params.getProduceSnExtDb().getSnType());
|
|
|
|
|
else productOffLine.setSnType(MesPcnExtEnumUtil.PRODUCE_SN_TYPE.REWORK_SN.getValue());
|
|
|
|
|
if (null != params.getPartDb()) {
|
|
|
|
|
productOffLine.setUnit(params.getPartDb().getUnit());
|
|
|
|
|
productOffLine.setProdType(getProdType(params.getPartDb().getCategoryCode1()));
|
|
|
|
|
}
|
|
|
|
|
productOffLine.setSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue());
|
|
|
|
|
productOffLine.setOrganizeCode(params.getOrganizeCode());
|
|
|
|
|
ConvertBean.serviceModelInitialize(productOffLine, params.getUserInfo());
|
|
|
|
|
productOffLineRepository.insert(productOffLine);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Integer getProdType(String categoryCode1) {
|
|
|
|
|
try {
|
|
|
|
|
if (StringUtils.isEmpty(categoryCode1)) return null;
|
|
|
|
|
else return Integer.valueOf(categoryCode1);
|
|
|
|
|
} catch (NumberFormatException e) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|