深汕工单

uat-temp-wj-chongqingdaqu-dev-bak
王杰 4 months ago
parent 9216019a64
commit 14a601a1c4

@ -113,10 +113,13 @@ public interface IMesProductionCustomContextStepService {
@ApiOperation(value = "删除排序线工单队列推送锁数据") @ApiOperation(value = "删除排序线工单队列推送锁数据")
void removeSortQueuePushLockContext(StationRequestBean reqBean, String queuePushId); void removeSortQueuePushLockContext(StationRequestBean reqBean, String queuePushId);
@ApiOperation(value = "处理工位维度的工单完成数上下文[查询]") @ApiOperation(value = "获取生产线维度的工单完成数上下文[查询]")
MesWorkOrderCompleteQtyContext dispatchWorkOrderCompleteQtyCellContext(StationRequestBean reqBean, Boolean isCellNoCalcQty, MesProductionPartContext productionPartContext); MesWorkOrderCompleteQtyContext getWorkOrderCompleteQtyContext(StationRequestBean reqBean, MesProductionPartContext productionPartContext);
@ApiOperation(value = "处理工位维度的工单完成数上下文[保存]") @ApiOperation(value = "根据noCalcOrderQty判断维度处理工单完成数上下文[查询]")
void dispatchWorkOrderCompleteQtyCellContext(StationRequestBean reqBean, Boolean isCellNoCalcQty, String workOrderNo, Double calcCompleteQty); MesWorkOrderCompleteQtyContext dispatchWorkOrderCompleteQtyContext(StationRequestBean reqBean, Boolean noCalcOrderQty, MesProductionPartContext productionPartContext);
@ApiOperation(value = "根据noCalcOrderQty判断维度处理处理工单完成数上下文[保存]")
MesWorkOrderCompleteQtyContext dispatchWorkOrderCompleteQtyContext(StationRequestBean reqBean, Boolean noCalcOrderQty, String workOrderNo, Double calcCompleteQty);
} }

@ -38,7 +38,7 @@ public class MesWorkOrderCalcQtyRestoreDispatchService implements IMesWorkOrderC
@Override @Override
public List<MesWorkOrderCalcQtyRecord> getWorkOrderCalcQtyRecordList(String organizeCode, Integer qty) { public List<MesWorkOrderCalcQtyRecord> getWorkOrderCalcQtyRecordList(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(MesExtEnumUtil.MES_LOG_DEAL_STATUS.UNDEAL.getValue(), MesPcnExtConstWords.DEAL_STATUS, packBean);
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{MesPcnExtConstWords.CREATE_DATE_TIME}, packBean); DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{MesPcnExtConstWords.CREATE_DATE_TIME}, packBean);
return workOrderCalcQtyRecordRepository.findByHqlTopWhere(packBean, qty); return workOrderCalcQtyRecordRepository.findByHqlTopWhere(packBean, qty);
} }

@ -226,7 +226,7 @@ public class MesProductSnGenerateStepService extends BaseStepService {
produceSn = produceSnExtService.insert(produceSn); produceSn = produceSnExtService.insert(produceSn);
} else produceSnExtService.updateNoSync(produceSn); } else produceSnExtService.updateNoSync(produceSn);
//isCalcCompleteQty=true的情况下【工位是否不累计工单完成数isCellNoCalcQty=true最终不会实际累加到工单上】【isCellNoCalcQty=false代表生产线维度的统计,才会实际累加到工单上】 //isCalcCompleteQty=true的情况下【工位是否不累计工单完成数noCalcOrderQty=true最终不会实际累加到工单上】【noCalcOrderQty=false代表生产线维度的统计,才会实际累加到工单上】
MesProductionPsOutContext productionPsOutContext = new MesProductionPsOutContext() MesProductionPsOutContext productionPsOutContext = new MesProductionPsOutContext()
.copy(produceSn, prodRuleContext.getForeignKey()).isCalcCompleteQty(isCalcCompleteQty, isSamePart, workCell.getNoCalcOrderQty()); .copy(produceSn, prodRuleContext.getForeignKey()).isCalcCompleteQty(isCalcCompleteQty, isSamePart, workCell.getNoCalcOrderQty());

@ -16,6 +16,7 @@ import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.List; import java.util.List;
import java.util.StringJoiner; import java.util.StringJoiner;
@ -72,6 +73,13 @@ public class MesProductionDataSaveBeforeLockOrderStepService extends BaseStepSer
//非排序线 保存加工结果工步 execute 方法 使用的是 新事务 //非排序线 保存加工结果工步 execute 方法 使用的是 新事务
stepResult = ((IStepService) SpringContextsUtil.getBean("mesProductionDataSaveStepService")).execute(reqBean); stepResult = ((IStepService) SpringContextsUtil.getBean("mesProductionDataSaveStepService")).execute(reqBean);
//保存加工结果事务提交之后, 保存工单计数
if (stepResult.isCompleted() && !StringUtils.isEmpty(stepResult.getStepAfterState())) {
IStepService stepService = ((IStepService) SpringContextsUtil.getBean(stepResult.getStepAfterState()));
stepResult.stepAfterState(null);
stepService.executeStepAfterExecute(reqBean, stepResult);
}
} }
return stepResult; return stepResult;

@ -1,5 +1,7 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
@ -37,6 +39,9 @@ public class MesWorkOrderCheckNosortStepService extends MesWorkOrderCheckStepSer
@Autowired @Autowired
private IFsmCommonService fsmCommonService; private IFsmCommonService fsmCommonService;
@Autowired
private IMesProductionCustomContextStepService productionCustomContextStepService;
@Override @Override
public StepResult execute(StationRequestBean reqBean) { public StepResult execute(StationRequestBean reqBean) {
@ -232,7 +237,7 @@ public class MesWorkOrderCheckNosortStepService extends MesWorkOrderCheckStepSer
if (!CollectionUtils.isEmpty(orderList)) { if (!CollectionUtils.isEmpty(orderList)) {
orderList.forEach(o -> StationKvBeanUtil.addStationKvBeanList(dataList, new ArrayList<>(), orderList.forEach(o -> StationKvBeanUtil.addStationKvBeanList(dataList, new ArrayList<>(),
new StationKvBean(MesPcnExtConstWords.WORK_ORDER_NO, "工单号", o.getWorkOrderNo()), new StationKvBean(MesPcnExtConstWords.PART_NO, "零件编码", o.getPartNo()), new StationKvBean(MesPcnExtConstWords.WORK_ORDER_NO, "工单号", o.getWorkOrderNo()), new StationKvBean(MesPcnExtConstWords.PART_NO, "零件编码", o.getPartNo()),
new StationKvBean(MesPcnExtConstWords.QTY, "完成数/工单数", new StringJoiner(MesPcnExtConstWords.SLANT_R).add(String.valueOf(o.getCompleteQty().intValue())).add(String.valueOf(o.getQty().intValue())).toString()), new StationKvBean(MesPcnExtConstWords.QTY, "完成数/工单数", new StringJoiner(MesPcnExtConstWords.SLANT_R).add(String.valueOf(productionCustomContextStepService.getWorkOrderCompleteQtyContext(reqBean, o).getCompleteQty().intValue())).add(String.valueOf(o.getQty().intValue())).toString()),
new StationKvBean(MesPcnExtConstWords.CAVITY, "腔数", new StringJoiner(MesPcnExtConstWords.SLANT_R).add(String.valueOf(index.updateAndGet(v -> v + 1))).add(String.valueOf(productionPartContextList.size())).toString()))); new StationKvBean(MesPcnExtConstWords.CAVITY, "腔数", new StringJoiner(MesPcnExtConstWords.SLANT_R).add(String.valueOf(index.updateAndGet(v -> v + 1))).add(String.valueOf(productionPartContextList.size())).toString())));
} }

@ -4,14 +4,10 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepServi
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.method.MesWorkOrderCheckCompleteQtyStepService; import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.method.MesWorkOrderCheckCompleteQtyStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesScanMonitorContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.mes.pcn.util.StringUtil; import cn.estsh.i3plus.mes.pcn.util.StringUtil;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.MathOperation; import cn.estsh.i3plus.platform.common.tool.MathOperation;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
@ -32,7 +28,6 @@ import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -100,7 +95,7 @@ public class MesWorkOrderSaveNosortStepService extends BaseStepService {
List<MesProductionPartContext> productionPartContextList, List<MesProductionPsOutContext> productionPsOutContextList) { List<MesProductionPartContext> productionPartContextList, List<MesProductionPsOutContext> productionPsOutContextList) {
//工位是否不累计工单完成数 //工位是否不累计工单完成数
Boolean isCellNoCalcQty = workOrderCheckCompleteQtyStepService.isCellNoCalcQty(productionProcessContext.getWorkCell().getNoCalcOrderQty()); Boolean noCalcOrderQty = workOrderCheckCompleteQtyStepService.noCalcOrderQty(productionProcessContext.getWorkCell().getNoCalcOrderQty());
//获取上下文工位扫描监控信息 //获取上下文工位扫描监控信息
MesScanMonitorContext scanMonitorContext = productionProcessContextStepService.dispatchScanMonitorContext(reqBean, true); MesScanMonitorContext scanMonitorContext = productionProcessContextStepService.dispatchScanMonitorContext(reqBean, true);
@ -137,7 +132,7 @@ public class MesWorkOrderSaveNosortStepService extends BaseStepService {
//TODO 排序考虑多工位扫描可疑码; 非排序考虑自进自出可疑或报废; 可疑数/报废数是否需要增加的问题[条码+零件+质量状态 增加履历] //TODO 排序考虑多工位扫描可疑码; 非排序考虑自进自出可疑或报废; 可疑数/报废数是否需要增加的问题[条码+零件+质量状态 增加履历]
//工位不累计工单完成数 //工位不累计工单完成数
if (isCellNoCalcQty) continue; if (noCalcOrderQty) continue;
MesWorkOrderCalcQtyRecord workOrderCalcQtyRecord = new MesWorkOrderCalcQtyRecord(); MesWorkOrderCalcQtyRecord workOrderCalcQtyRecord = new MesWorkOrderCalcQtyRecord();
workOrderCalcQtyRecord.setOrganizeCode(reqBean.getOrganizeCode()); workOrderCalcQtyRecord.setOrganizeCode(reqBean.getOrganizeCode());
@ -167,9 +162,9 @@ public class MesWorkOrderSaveNosortStepService extends BaseStepService {
workOrderCalcQtyRecord = workOrderCalcQtyRecordRepository.insert(workOrderCalcQtyRecord); workOrderCalcQtyRecord = workOrderCalcQtyRecordRepository.insert(workOrderCalcQtyRecord);
log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- ORDER:{} --- QUERY_CompleteQty:{} --- productResult:{} --- MesWorkOrderCalcQtyRecord:{}", log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- ORDER:{} --- productResult:{} --- MesWorkOrderCalcQtyRecord:{}",
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(),
StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), entry.getKey(), entry.getValue().get(0).getCompleteQty(), productResult, JSONObject.toJSONString(workOrderCalcQtyRecord)); StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), entry.getKey(), productResult, JSONObject.toJSONString(workOrderCalcQtyRecord));
} }
} }
@ -184,7 +179,7 @@ public class MesWorkOrderSaveNosortStepService extends BaseStepService {
if (CollectionUtils.isEmpty(productionPsOutContextList)) return; if (CollectionUtils.isEmpty(productionPsOutContextList)) return;
//工位是否不累计工单完成数 //工位是否不累计工单完成数
Boolean isCellNoCalcQty = workOrderCheckCompleteQtyStepService.isCellNoCalcQty(productionPsOutContextList.get(0).getNoCalcOrderQty()); Boolean noCalcOrderQty = workOrderCheckCompleteQtyStepService.noCalcOrderQty(productionPsOutContextList.get(0).getNoCalcOrderQty());
//产出条码 根据生产工单分组 //产出条码 根据生产工单分组
Map<String, List<MesProductionPsOutContext>> proMap = productionPsOutContextList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesProductionPsOutContext::getWorkOrderNo)); Map<String, List<MesProductionPsOutContext>> proMap = productionPsOutContextList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesProductionPsOutContext::getWorkOrderNo));
@ -200,11 +195,22 @@ public class MesWorkOrderSaveNosortStepService extends BaseStepService {
if (productionPsOutContext.getIsCalcCompleteQty() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) calcCompleteQty = MathOperation.add(calcCompleteQty, new Double(MesPcnExtConstWords.ONE)); if (productionPsOutContext.getIsCalcCompleteQty() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) calcCompleteQty = MathOperation.add(calcCompleteQty, new Double(MesPcnExtConstWords.ONE));
} }
if (MathOperation.compareTo(calcCompleteQty, new Double(MesPcnExtConstWords.ZERO)) == 0) continue; if (MathOperation.compareTo(calcCompleteQty, new Double(MesPcnExtConstWords.ZERO)) == 0) continue;
//处理工位维度的工单完成数上下文[保存]
productionCustomContextStepService.dispatchWorkOrderCompleteQtyCellContext(reqBean, isCellNoCalcQty, productionPsOutContextList.get(0).getWorkOrderNo(), calcCompleteQty); //根据noCalcOrderQty判断维度处理处理工单完成数上下文[保存]
MesWorkOrderCompleteQtyContext workOrderCompleteQtyContext = productionCustomContextStepService.dispatchWorkOrderCompleteQtyContext(reqBean, noCalcOrderQty, entry.getKey(), calcCompleteQty);
log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- ORDER:{} --- noCalcOrderQty:{} --- calcCompleteQty:{} --- MesWorkOrderCompleteQtyContext:{}",
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(),
StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), entry.getKey(), noCalcOrderQty, calcCompleteQty, JSONObject.toJSONString(workOrderCompleteQtyContext));
} }
} }
//执行execute之后根据条件判断是否执行
@Override
public void executeStepAfterExecute(StationRequestBean reqBean, StepResult stepResult) {
executeStepAfterState(reqBean, stepResult);
}
} }

@ -326,17 +326,28 @@ public class MesProductionCustomContextStepService extends BaseStepService imple
removeFsmBusiData(reqBean.getOrganizeCode(), getSortQueuePushLockContextKey(reqBean), queuePushId); removeFsmBusiData(reqBean.getOrganizeCode(), getSortQueuePushLockContextKey(reqBean), queuePushId);
} }
//工单完成数KEY【isCellNoCalcQty=true代表工位维度的统计,最终不一定会实际累加到工单上】【isCellNoCalcQty=false代表生产线维度的统计】 //工单完成数KEY【noCalcOrderQty=true代表工位维度的统计,最终不一定会实际累加到工单上】【noCalcOrderQty=false代表生产线维度的统计】
private String getWorkOrderCompleteQtyContextCellKey(StationRequestBean reqBean, Boolean isCellNoCalcQty, String workOrderNo) { private String getWorkOrderCompleteQtyContextCellKey(StationRequestBean reqBean, Boolean noCalcOrderQty, String workOrderNo) {
StringJoiner sj = new StringJoiner(MesPcnExtConstWords.COLON).add(reqBean.getOrganizeCode()).add(reqBean.getWorkCenterCode()); StringJoiner sj = new StringJoiner(MesPcnExtConstWords.COLON).add(reqBean.getOrganizeCode()).add(reqBean.getWorkCenterCode());
if (isCellNoCalcQty) sj.add(reqBean.getWorkCellCode()); if (noCalcOrderQty) sj.add(reqBean.getWorkCellCode());
return sj.add(MesPcnExtConstWords.WORK_ORDER_COMPLETE_CONTEXT).add(workOrderNo).toString(); return sj.add(MesPcnExtConstWords.WORK_ORDER_COMPLETE_CONTEXT).add(workOrderNo).toString();
} }
//处理工位维度的工单完成数上下文[查询], 有效期三天 //获取生产线维度的工单完成数上下文[查询]
@Override @Override
public MesWorkOrderCompleteQtyContext dispatchWorkOrderCompleteQtyCellContext(StationRequestBean reqBean, Boolean isCellNoCalcQty, MesProductionPartContext productionPartContext) { public MesWorkOrderCompleteQtyContext getWorkOrderCompleteQtyContext(StationRequestBean reqBean, MesProductionPartContext productionPartContext) {
String key = getWorkOrderCompleteQtyContextCellKey(reqBean, isCellNoCalcQty, productionPartContext.getWorkOrderNo()); String key = getWorkOrderCompleteQtyContextCellKey(reqBean, false, productionPartContext.getWorkOrderNo());
String context = getFsmBusiData(reqBean.getOrganizeCode(), key);
MesWorkOrderCompleteQtyContext workOrderCompleteQtyContext = !StringUtils.isEmpty(context)
? JSONObject.parseObject(context, MesWorkOrderCompleteQtyContext.class)
: new MesWorkOrderCompleteQtyContext(productionPartContext.getWorkOrderNo(), productionPartContext.getQty(), productionPartContext.getCompleteQty());
return workOrderCompleteQtyContext;
}
//根据noCalcOrderQty判断维度处理处理工单完成数上下文[查询], 有效期三天
@Override
public MesWorkOrderCompleteQtyContext dispatchWorkOrderCompleteQtyContext(StationRequestBean reqBean, Boolean noCalcOrderQty, MesProductionPartContext productionPartContext) {
String key = getWorkOrderCompleteQtyContextCellKey(reqBean, noCalcOrderQty, productionPartContext.getWorkOrderNo());
String context = getFsmBusiData(reqBean.getOrganizeCode(), key); String context = getFsmBusiData(reqBean.getOrganizeCode(), key);
MesWorkOrderCompleteQtyContext workOrderCompleteQtyContext = !StringUtils.isEmpty(context) MesWorkOrderCompleteQtyContext workOrderCompleteQtyContext = !StringUtils.isEmpty(context)
? JSONObject.parseObject(context, MesWorkOrderCompleteQtyContext.class) ? JSONObject.parseObject(context, MesWorkOrderCompleteQtyContext.class)
@ -349,16 +360,17 @@ public class MesProductionCustomContextStepService extends BaseStepService imple
return workOrderCompleteQtyContext; return workOrderCompleteQtyContext;
} }
//处理工位维度的工单完成数上下文[保存], 有效期三天 //根据noCalcOrderQty判断维度处理处理工单完成数上下文[保存], 有效期三天
//【isCellNoCalcQty=true代表工位维度的统计,最终不一定会实际累加到工单上】【isCellNoCalcQty=false代表生产线维度的统计】 //【noCalcOrderQty=true代表工位维度的统计,最终不一定会实际累加到工单上】【noCalcOrderQty=false代表生产线维度的统计】
@Override @Override
public void dispatchWorkOrderCompleteQtyCellContext(StationRequestBean reqBean, Boolean isCellNoCalcQty, String workOrderNo, Double calcCompleteQty) { public MesWorkOrderCompleteQtyContext dispatchWorkOrderCompleteQtyContext(StationRequestBean reqBean, Boolean noCalcOrderQty, String workOrderNo, Double calcCompleteQty) {
String key = getWorkOrderCompleteQtyContextCellKey(reqBean, isCellNoCalcQty, workOrderNo); String key = getWorkOrderCompleteQtyContextCellKey(reqBean, noCalcOrderQty, workOrderNo);
String context = getFsmBusiData(reqBean.getOrganizeCode(), key); String context = getFsmBusiData(reqBean.getOrganizeCode(), key);
MesWorkOrderCompleteQtyContext workOrderCompleteQtyContext = !StringUtils.isEmpty(context) ? JSONObject.parseObject(context, MesWorkOrderCompleteQtyContext.class) : null; MesWorkOrderCompleteQtyContext workOrderCompleteQtyContext = !StringUtils.isEmpty(context) ? JSONObject.parseObject(context, MesWorkOrderCompleteQtyContext.class) : null;
if (null == workOrderCompleteQtyContext) return; if (null == workOrderCompleteQtyContext) return null;
workOrderCompleteQtyContext.overrideCompleteQty(MathOperation.add(workOrderCompleteQtyContext.getCompleteQty(), calcCompleteQty)); workOrderCompleteQtyContext.overrideCompleteQty(MathOperation.add(workOrderCompleteQtyContext.getCompleteQty(), calcCompleteQty));
dispatchFsmBusiData(reqBean.getOrganizeCode(), key, JSONObject.toJSONString(workOrderCompleteQtyContext), MesPcnEnumUtil.EXPIRE_TIME.THREE_DAY.getValue()); dispatchFsmBusiData(reqBean.getOrganizeCode(), key, JSONObject.toJSONString(workOrderCompleteQtyContext), MesPcnEnumUtil.EXPIRE_TIME.THREE_DAY.getValue());
return workOrderCompleteQtyContext;
} }
} }

@ -68,7 +68,7 @@ public class MesWorkOrderCheckCompleteQtyStepService extends BaseStepService {
MesWorkCenter workCenter = productionProcessContext.getWorkCenter(); MesWorkCenter workCenter = productionProcessContext.getWorkCenter();
MesWorkCell workCell = productionProcessContext.getWorkCell(); MesWorkCell workCell = productionProcessContext.getWorkCell();
//工位是否不累计工单完成数 //工位是否不累计工单完成数
Boolean isCellNoCalcQty = isCellNoCalcQty(workCell.getNoCalcOrderQty()); Boolean noCalcOrderQty = noCalcOrderQty(workCell.getNoCalcOrderQty());
//遍历验证加工单完成数量 //遍历验证加工单完成数量
List<MesWorkOrderCompleteQtyContext> workOrderCompleteQtyContextList = null; List<MesWorkOrderCompleteQtyContext> workOrderCompleteQtyContextList = null;
@ -76,7 +76,7 @@ public class MesWorkOrderCheckCompleteQtyStepService extends BaseStepService {
if (null == entry) continue; if (null == entry) continue;
//验证加工单完成数量 //验证加工单完成数量
MesWorkOrderCompleteQtyContext workOrderCompleteQtyContext = dispatchWorkOrderCompleteQty(reqBean, resultBean, stepResult, workCenter, isCellNoCalcQty, entry.getValue(), productionPsInContextMap); MesWorkOrderCompleteQtyContext workOrderCompleteQtyContext = dispatchWorkOrderCompleteQty(reqBean, resultBean, stepResult, workCenter, noCalcOrderQty, entry.getValue(), productionPsInContextMap);
//验证失败直接退出 //验证失败直接退出
if (!stepResult.isCompleted()) break; if (!stepResult.isCompleted()) break;
@ -101,7 +101,7 @@ public class MesWorkOrderCheckCompleteQtyStepService extends BaseStepService {
//验证加工单完成数量 //验证加工单完成数量
private MesWorkOrderCompleteQtyContext dispatchWorkOrderCompleteQty(StationRequestBean reqBean, StationResultBean resultBean, private MesWorkOrderCompleteQtyContext dispatchWorkOrderCompleteQty(StationRequestBean reqBean, StationResultBean resultBean,
StepResult stepResult, MesWorkCenter workCenter, Boolean isCellNoCalcQty, StepResult stepResult, MesWorkCenter workCenter, Boolean noCalcOrderQty,
List<MesProductionPartContext> productionPartContextList, Map<Integer, MesProductionPsInContext> productionPsInContextMap) { List<MesProductionPartContext> productionPartContextList, Map<Integer, MesProductionPsInContext> productionPsInContextMap) {
Double calcCompleteQty = new Double(MesPcnExtConstWords.ZERO); Double calcCompleteQty = new Double(MesPcnExtConstWords.ZERO);
for (MesProductionPartContext productionPartContext : productionPartContextList) { for (MesProductionPartContext productionPartContext : productionPartContextList) {
@ -115,13 +115,11 @@ public class MesWorkOrderCheckCompleteQtyStepService extends BaseStepService {
//当前工单无须计算工单完成数 //当前工单无须计算工单完成数
if (MathOperation.compareTo(calcCompleteQty, new Double(MesPcnExtConstWords.ZERO)) == 0) return null; if (MathOperation.compareTo(calcCompleteQty, new Double(MesPcnExtConstWords.ZERO)) == 0) return null;
//处理工位维度的工单完成数上下文; //根据noCalcOrderQty判断维度处理工单完成数上下文[查询]【noCalcOrderQty=true代表工位维度的统计,最终不会实际累加到工单上】【noCalcOrderQty=false代表生产线维度的统计,才会实际累加到工单上】
//flag查询=2;保存=1 MesWorkOrderCompleteQtyContext workOrderCompleteQtyContext = productionCustomContextStepService.dispatchWorkOrderCompleteQtyContext(reqBean, noCalcOrderQty, productionPartContextList.get(0));
//【isCellNoCalcQty=true代表工位维度的统计,最终不会实际累加到工单上】【isCellNoCalcQty=false代表生产线维度的统计,才会实际累加到工单上】
MesWorkOrderCompleteQtyContext workOrderCompleteQtyContext = productionCustomContextStepService.dispatchWorkOrderCompleteQtyCellContext(reqBean, isCellNoCalcQty, productionPartContextList.get(0));
//验证工单完成数 //验证工单完成数
checkWorkOrderCompleteQty(reqBean, resultBean, stepResult, workCenter, workOrderCompleteQtyContext, calcCompleteQty); checkWorkOrderCompleteQty(reqBean, resultBean, stepResult, workCenter, workOrderCompleteQtyContext, calcCompleteQty, noCalcOrderQty);
if (!stepResult.isCompleted()) return null; if (!stepResult.isCompleted()) return null;
@ -130,7 +128,7 @@ public class MesWorkOrderCheckCompleteQtyStepService extends BaseStepService {
} }
//工位是否不累计工单完成数 //工位是否不累计工单完成数
public Boolean isCellNoCalcQty(Integer noCalcOrderQty) { public Boolean noCalcOrderQty(Integer noCalcOrderQty) {
return (!StringUtils.isEmpty(noCalcOrderQty) && noCalcOrderQty.compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) ? true : false; return (!StringUtils.isEmpty(noCalcOrderQty) && noCalcOrderQty.compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) ? true : false;
} }
@ -169,8 +167,8 @@ public class MesWorkOrderCheckCompleteQtyStepService extends BaseStepService {
} }
//验证工单完成数 //验证工单完成数
private void checkWorkOrderCompleteQty(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, private void checkWorkOrderCompleteQty(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter,
MesWorkCenter workCenter, MesWorkOrderCompleteQtyContext workOrderCompleteQtyContext, Double calcCompleteQty) { MesWorkOrderCompleteQtyContext workOrderCompleteQtyContext, Double calcCompleteQty, Boolean noCalcOrderQty) {
//当前工序的预计达到的完成数 //当前工序的预计达到的完成数
Double complateQty = MathOperation.add(workOrderCompleteQtyContext.getCompleteQty(), calcCompleteQty); Double complateQty = MathOperation.add(workOrderCompleteQtyContext.getCompleteQty(), calcCompleteQty);
@ -179,17 +177,18 @@ public class MesWorkOrderCheckCompleteQtyStepService extends BaseStepService {
//判断不支持超工单生产 //判断不支持超工单生产
if (StringUtils.isEmpty(workCenter.getIsCheckOrderQty()) || workCenter.getIsCheckOrderQty().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0) { if (StringUtils.isEmpty(workCenter.getIsCheckOrderQty()) || workCenter.getIsCheckOrderQty().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0) {
//stepResult.obj(false)目的是在工步最后可以判断是否需要清除进料 //stepResult.obj(false)目的是在工步最后可以判断是否需要清除进料
stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult.obj(false), String.format("请检查工单数量,工单[%s]计划数量[%s]已完成数量[%s]!", stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult.obj(false), String.format("请检查工单数量,工单[%s]计划数量[%s]%s已完成数量[%s]!",
workOrderCompleteQtyContext.getWorkOrderNo(), workOrderCompleteQtyContext.getQty().intValue(), workOrderCompleteQtyContext.getCompleteQty().intValue(), workOrderCompleteQtyContext.getWorkOrderNo(), workOrderCompleteQtyContext.getQty().intValue(),
noCalcOrderQty ? "当前工位" : MesPcnExtConstWords.EMPTY, workOrderCompleteQtyContext.getCompleteQty().intValue(),
MathOperation.compareTo(workOrderCompleteQtyContext.getQty(), workOrderCompleteQtyContext.getCompleteQty()) == 0 ? "当前已完成!" : "当前不支持超工单!")); MathOperation.compareTo(workOrderCompleteQtyContext.getQty(), workOrderCompleteQtyContext.getCompleteQty()) == 0 ? "当前已完成!" : "当前不支持超工单!"));
return; return;
} }
//支持超工单生产情况下判断超出比例 //支持超工单生产情况下判断超出比例
Double rate = MathOperation.div((MathOperation.sub(complateQty, workOrderCompleteQtyContext.getQty())), workOrderCompleteQtyContext.getQty()); Double rate = MathOperation.div((MathOperation.sub(complateQty, workOrderCompleteQtyContext.getQty())), workOrderCompleteQtyContext.getQty());
if (MathOperation.compareTo(rate, MathOperation.div(workCenter.getOrderRate(), new Double(MesPcnExtConstWords.ONE_HUNDRED))) > 0) { if (MathOperation.compareTo(rate, MathOperation.div(workCenter.getOrderRate(), new Double(MesPcnExtConstWords.ONE_HUNDRED))) > 0) {
stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult.obj(false), stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult.obj(false), String.format("请检查工单数量,工单[%s]计划数量[%s]%s已完成数量[%s]超工单比例[%s]!",
String.format("请检查工单数量,工单[%s]计划数量[%s]已完成数量[%s],当前超出超工单比例[%s]!", workOrderCompleteQtyContext.getWorkOrderNo(), workOrderCompleteQtyContext.getQty().intValue(),
workOrderCompleteQtyContext.getWorkOrderNo(), workOrderCompleteQtyContext.getQty().intValue(), workOrderCompleteQtyContext.getCompleteQty().intValue(), workCenter.getOrderRate())); noCalcOrderQty ? "当前工位" : MesPcnExtConstWords.EMPTY, workOrderCompleteQtyContext.getCompleteQty().intValue(), workCenter.getOrderRate()));
return; return;
} }
} }

Loading…
Cancel
Save