|
|
@ -1,22 +1,25 @@
|
|
|
|
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.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.api.busi.IMesWorkOrderExtService;
|
|
|
|
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.MesProductionPartContext;
|
|
|
|
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
|
|
|
|
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.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;
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
|
|
|
|
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCalcQtyRecord;
|
|
|
|
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
|
|
|
|
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
|
|
|
|
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
|
|
|
|
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
|
|
|
|
import cn.estsh.i3plus.pojo.mes.model.StepResult;
|
|
|
|
import cn.estsh.i3plus.pojo.mes.model.StepResult;
|
|
|
|
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderRepository;
|
|
|
|
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderCalcQtyRecordRepository;
|
|
|
|
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
|
|
|
|
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
@ -25,9 +28,11 @@ 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 javax.persistence.EntityManager;
|
|
|
|
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
|
import java.util.*;
|
|
|
|
import java.util.Date;
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
import java.util.Objects;
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
@ -48,13 +53,13 @@ public class MesWorkOrderSaveNosortStepService extends BaseStepService {
|
|
|
|
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
|
|
|
|
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
|
|
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
@Autowired
|
|
|
|
private IMesWorkOrderExtService workOrderExtService;
|
|
|
|
private MesWorkOrderCheckCompleteQtyStepService workOrderCheckCompleteQtyStepService;
|
|
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
@Autowired
|
|
|
|
private MesWorkOrderRepository workOrderRepository;
|
|
|
|
private MesWorkOrderCalcQtyRecordRepository workOrderCalcQtyRecordRepository;
|
|
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
@Autowired
|
|
|
|
private EntityManager entityManager;
|
|
|
|
private IMesProductionCustomContextStepService productionCustomContextStepService;
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@Override
|
|
|
|
public StepResult execute(StationRequestBean reqBean) {
|
|
|
|
public StepResult execute(StationRequestBean reqBean) {
|
|
|
@ -83,22 +88,31 @@ public class MesWorkOrderSaveNosortStepService extends BaseStepService {
|
|
|
|
List<MesProductionPsOutContext> productionPsOutContextList = productionDispatchContextStepService.getProductionPsOutContext(reqBean);
|
|
|
|
List<MesProductionPsOutContext> productionPsOutContextList = productionDispatchContextStepService.getProductionPsOutContext(reqBean);
|
|
|
|
|
|
|
|
|
|
|
|
//保存生产工单数据
|
|
|
|
//保存生产工单数据
|
|
|
|
doHandleWorkOrderData(reqBean, resultBean, productionPartContextList, productionPsOutContextList);
|
|
|
|
doHandleWorkOrderData(reqBean, resultBean, stepResult, productionProcessContext, productionPartContextList, productionPsOutContextList);
|
|
|
|
|
|
|
|
|
|
|
|
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult, "保存加工单信息成功!");
|
|
|
|
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult, "保存加工单信息成功!");
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//保存生产工单数据
|
|
|
|
//保存生产工单数据
|
|
|
|
private void doHandleWorkOrderData(StationRequestBean reqBean, StationResultBean resultBean, List<MesProductionPartContext> productionPartContextList, List<MesProductionPsOutContext> productionPsOutContextList) {
|
|
|
|
private void doHandleWorkOrderData(StationRequestBean reqBean, StationResultBean resultBean,
|
|
|
|
|
|
|
|
StepResult stepResult, MesProductionProcessContext productionProcessContext,
|
|
|
|
|
|
|
|
List<MesProductionPartContext> productionPartContextList, List<MesProductionPsOutContext> productionPsOutContextList) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//工位是否不累计工单完成数
|
|
|
|
|
|
|
|
Boolean isCellNoCalcQty = workOrderCheckCompleteQtyStepService.isCellNoCalcQty(productionProcessContext.getWorkCell().getNoCalcOrderQty());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//获取上下文工位扫描监控信息
|
|
|
|
|
|
|
|
MesScanMonitorContext scanMonitorContext = productionProcessContextStepService.dispatchScanMonitorContext(reqBean, true);
|
|
|
|
|
|
|
|
|
|
|
|
//产出零件信息根据生产工单分组
|
|
|
|
//产出零件信息根据生产工单分组
|
|
|
|
Map<String, List<MesProductionPartContext>> ppMap = productionPartContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).collect(Collectors.groupingBy(MesProductionPartContext::getWorkOrderNo));
|
|
|
|
Map<String, List<MesProductionPartContext>> ppMap = productionPartContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).collect(Collectors.groupingBy(MesProductionPartContext::getWorkOrderNo));
|
|
|
|
|
|
|
|
|
|
|
|
//产出条码 根据生产工单分组
|
|
|
|
//产出条码 根据生产工单分组
|
|
|
|
Map<String, List<MesProductionPsOutContext>> proMap = productionPsOutContextList.stream().filter(Objects::nonNull).collect(Collectors.groupingBy(MesProductionPsOutContext::getWorkOrderNo));
|
|
|
|
Map<String, List<MesProductionPsOutContext>> proMap = productionPsOutContextList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesProductionPsOutContext::getWorkOrderNo));
|
|
|
|
|
|
|
|
|
|
|
|
String productResult = productionDispatchContextStepService.getProductResultContext(reqBean);
|
|
|
|
//获取上下文加工结果
|
|
|
|
|
|
|
|
Integer productResult = productionDispatchContextStepService.getProductResultQcContext(reqBean);
|
|
|
|
|
|
|
|
|
|
|
|
//遍历产出零件信息
|
|
|
|
//遍历产出零件信息
|
|
|
|
for(Map.Entry<String, List<MesProductionPartContext>> entry : ppMap.entrySet()) {
|
|
|
|
for(Map.Entry<String, List<MesProductionPartContext>> entry : ppMap.entrySet()) {
|
|
|
@ -107,86 +121,89 @@ public class MesWorkOrderSaveNosortStepService extends BaseStepService {
|
|
|
|
//获取对应的加工规则
|
|
|
|
//获取对应的加工规则
|
|
|
|
List<MesProductionPsOutContext> produceSnContextList = proMap.get(entry.getKey());
|
|
|
|
List<MesProductionPsOutContext> produceSnContextList = proMap.get(entry.getKey());
|
|
|
|
//生产数量
|
|
|
|
//生产数量
|
|
|
|
Integer calcCompleteQty = 0;
|
|
|
|
Double calcCompleteQty = new Double(MesPcnExtConstWords.ZERO);
|
|
|
|
//遍历产出物料
|
|
|
|
//遍历产出物料
|
|
|
|
for (MesProductionPsOutContext productionPsOutContext : produceSnContextList) {
|
|
|
|
for (MesProductionPsOutContext productionPsOutContext : produceSnContextList) {
|
|
|
|
if (null == productionPsOutContext) continue;
|
|
|
|
if (null == productionPsOutContext) continue;
|
|
|
|
//产出零件是否是
|
|
|
|
//产出零件需要计算工单完成数量
|
|
|
|
if (productionPsOutContext.getIsCalcCompleteQty() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) calcCompleteQty += 1;
|
|
|
|
if (productionPsOutContext.getIsCalcCompleteQty() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) calcCompleteQty = MathOperation.add(calcCompleteQty, new Double(MesPcnExtConstWords.ONE));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (calcCompleteQty.compareTo(MesPcnExtConstWords.ZERO) == 0) continue;
|
|
|
|
if (MathOperation.compareTo(calcCompleteQty, new Double(MesPcnExtConstWords.ZERO)) == 0) continue;
|
|
|
|
|
|
|
|
|
|
|
|
MesWorkOrder workOrder = workOrderExtService.getWorkOrder(reqBean.getOrganizeCode(), entry.getValue().get(0).getId());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (null == workOrder) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查工单信息,加工单[%s]信息不存在!", entry.getKey()));
|
|
|
|
// 赋值 stepAfterState, 当前工步集执行结束后会执行当前工步重写的executeStepAfterState方法
|
|
|
|
|
|
|
|
if (StringUtils.isEmpty(stepResult.getStepAfterState())) stepResult.stepAfterState(StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()));
|
|
|
|
|
|
|
|
|
|
|
|
//工单状态分 排序工单 和非排序工单; 现在必须是非排序工单
|
|
|
|
//TODO 排序考虑多工位扫描可疑码; 非排序考虑自进自出可疑或报废; 可疑数/报废数是否需要增加的问题[条码+零件+质量状态 增加履历]
|
|
|
|
if (!MesExtEnumUtil.ORDER_STATUS.checkNosortAllowStatus(workOrder.getWorkOrderStatus()))
|
|
|
|
|
|
|
|
stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查工单信息,加工单[%s]信息工单状态[%s]!", entry.getKey(), MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus())));
|
|
|
|
|
|
|
|
//工单产线要和当前产线一致
|
|
|
|
|
|
|
|
if (!workOrder.getWorkCenterCode().equals(reqBean.getWorkCenterCode()))
|
|
|
|
|
|
|
|
stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查工单信息,加工单[%s]信息所属生产线[%s]与当前生产线[%s]不一致!", entry.getKey(), workOrder.getWorkCenterCode(), reqBean.getWorkCenterCode()));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Map<String, Object> propertyMap = new HashMap<>();
|
|
|
|
//工位不累计工单完成数
|
|
|
|
|
|
|
|
if (isCellNoCalcQty) continue;
|
|
|
|
//修改完成数量
|
|
|
|
|
|
|
|
propertyMap.put(MesPcnExtConstWords.COMPLETE_QTY, MathOperation.add(workOrder.getCompleteQty(), calcCompleteQty));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//修改未完成数量
|
|
|
|
|
|
|
|
if (workOrder.getUnCompleteQty().compareTo(new Double(0)) > 0 && MathOperation.compareTo(MathOperation.sub(workOrder.getUnCompleteQty(), new Double(calcCompleteQty)), new Double(0)) >= 0) {
|
|
|
|
|
|
|
|
propertyMap.put(MesPcnExtConstWords.UN_COMPLETE_QTY, MathOperation.sub(workOrder.getUnCompleteQty(), new Double(calcCompleteQty)));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
MesWorkOrderCalcQtyRecord workOrderCalcQtyRecord = new MesWorkOrderCalcQtyRecord();
|
|
|
|
* 可疑品、报废数量、上下线时间;
|
|
|
|
workOrderCalcQtyRecord.setOrganizeCode(reqBean.getOrganizeCode());
|
|
|
|
* sql改成修改固定字段
|
|
|
|
workOrderCalcQtyRecord.setWorkCenterCode(reqBean.getWorkCenterCode());
|
|
|
|
* 在上下文中获取busi中获取prodResult上下文 是数字 (标志着条码质量状态,与条码质量状态枚举一致)
|
|
|
|
workOrderCalcQtyRecord.setWorkCellCode(reqBean.getWorkCellCode());
|
|
|
|
* 上下文中 已经按照工单分组了,因为有一模多腔问题
|
|
|
|
workOrderCalcQtyRecord.setWorkOrderNo(entry.getKey());
|
|
|
|
*/
|
|
|
|
workOrderCalcQtyRecord.setPid(entry.getValue().get(0).getId());
|
|
|
|
|
|
|
|
workOrderCalcQtyRecord.setCompleteQty(calcCompleteQty);
|
|
|
|
if (!StringUtils.isEmpty(productResult)) {
|
|
|
|
//可疑数量
|
|
|
|
//可疑品
|
|
|
|
if (!StringUtils.isEmpty(productResult) && productResult.compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue()) == 0) {
|
|
|
|
if (Integer.valueOf(productResult).compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue()) == 0 && !CollectionUtils.isEmpty(productionPsOutContextList)){
|
|
|
|
workOrderCalcQtyRecord.setSuspiciousPartQty(calcCompleteQty);
|
|
|
|
propertyMap.put(MesPcnExtConstWords.SUSPICIOUS_PART_QTY, MathOperation.add(workOrder.getSuspiciousPartQty(), new Double(productionPsOutContextList.size())));
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//报废数量
|
|
|
|
//报废数量
|
|
|
|
if (Integer.valueOf(productResult).compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.SCRAP.getValue()) == 0 && !CollectionUtils.isEmpty(productionPsOutContextList)){
|
|
|
|
if (!StringUtils.isEmpty(productResult) && productResult.compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.SCRAP.getValue()) == 0) {
|
|
|
|
propertyMap.put(MesPcnExtConstWords.SCRAP_PART_QTY, MathOperation.add(workOrder.getScrapPartQty(), new Double(productionPsOutContextList.size())));
|
|
|
|
workOrderCalcQtyRecord.setScrapPartQty(calcCompleteQty);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (MathOperation.compareTo(MathOperation.add(workOrder.getCompleteQty(), calcCompleteQty), workOrder.getQty()) >= 0 && workOrder.getWorkOrderStatus().compareTo(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()) != 0) {
|
|
|
|
if (null != scanMonitorContext) workOrderCalcQtyRecord.setMouldRecordId(scanMonitorContext.getMouldRecordId());
|
|
|
|
propertyMap.put(MesPcnExtConstWords.WORK_ORDER_STATUS, MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue());
|
|
|
|
|
|
|
|
} else if (workOrder.getCompleteQty() >= 0 && workOrder.getWorkOrderStatus() == MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()) {
|
|
|
|
|
|
|
|
propertyMap.put(MesPcnExtConstWords.WORK_ORDER_STATUS, MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (CollectionUtils.isEmpty(propertyMap)) continue;
|
|
|
|
workOrderCalcQtyRecord.setDealStatus(MesExtEnumUtil.MES_LOG_DEAL_STATUS.UNDEAL.getValue());
|
|
|
|
|
|
|
|
workOrderCalcQtyRecord.setCreateUser(reqBean.getUserInfo());
|
|
|
|
|
|
|
|
workOrderCalcQtyRecord.setModifyUser(reqBean.getUserInfo());
|
|
|
|
|
|
|
|
workOrderCalcQtyRecord.setCreateDatetime((new SimpleDateFormat(MesPcnExtConstWords.DATE_FORMAT_SSS)).format(new Date()));
|
|
|
|
|
|
|
|
workOrderCalcQtyRecord.setModifyDatetime(workOrderCalcQtyRecord.getCreateDatetime());
|
|
|
|
|
|
|
|
workOrderCalcQtyRecord.setIsValid(CommonEnumUtil.IS_VAILD.VAILD.getValue());
|
|
|
|
|
|
|
|
workOrderCalcQtyRecord.setIsDeleted(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
|
|
|
|
|
|
|
|
|
|
|
|
propertyMap.put(MesPcnExtConstWords.MODIFY_DATE_TIME, (new SimpleDateFormat(MesPcnExtConstWords.DATE_FORMAT_SSS)).format(new Date()));
|
|
|
|
workOrderCalcQtyRecord = workOrderCalcQtyRecordRepository.insert(workOrderCalcQtyRecord);
|
|
|
|
propertyMap.put(MesPcnExtConstWords.MODIFY_USER, reqBean.getUserInfo());
|
|
|
|
|
|
|
|
propertyMap.put(MesPcnExtConstWords.SYSTEM_SYNC_STATUS, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
|
|
|
|
|
|
|
|
propertyMap.put(MesPcnExtConstWords.SYSTEM_SYNC_DATE_TIME, MesPcnExtConstWords.EMPTY);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String[] propertyName = new String[propertyMap.size()];
|
|
|
|
log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- ORDER:{} --- QUERY_CompleteQty:{} --- productResult:{} --- MesWorkOrderCalcQtyRecord:{}",
|
|
|
|
Object[] propertyValue = new Object[propertyMap.size()];
|
|
|
|
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(),
|
|
|
|
|
|
|
|
StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), entry.getKey(), entry.getValue().get(0).getCompleteQty(), productResult, JSONObject.toJSONString(workOrderCalcQtyRecord));
|
|
|
|
|
|
|
|
|
|
|
|
Integer index = 0;
|
|
|
|
}
|
|
|
|
for (Map.Entry<String, Object> innerEntry : propertyMap.entrySet()) {
|
|
|
|
|
|
|
|
if (null == innerEntry) continue;
|
|
|
|
|
|
|
|
propertyName[index] = innerEntry.getKey();
|
|
|
|
|
|
|
|
propertyValue[index] = innerEntry.getValue();
|
|
|
|
|
|
|
|
index ++;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
workOrderRepository.updateByPropertiesNoSync(new String[]{MesPcnExtConstWords.ID, MesPcnExtConstWords.ORGANIZE_CODE}, new Object[]{workOrder.getId(), reqBean.getOrganizeCode()}, propertyName, propertyValue);
|
|
|
|
//当前工步集完成之后执行当前方法
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public void executeStepAfterState(StationRequestBean reqBean, StepResult stepResult) {
|
|
|
|
|
|
|
|
if (!stepResult.isCompleted()) return;
|
|
|
|
|
|
|
|
|
|
|
|
log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- ORDER:{} --- QUERY:{} --- calcCompleteQty:{} --- productResult:{} --- UPDATE:{}",
|
|
|
|
//获取上下文产出零件数据信息集合
|
|
|
|
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(),
|
|
|
|
List<MesProductionPsOutContext> productionPsOutContextList = productionDispatchContextStepService.getProductionPsOutContext(reqBean);
|
|
|
|
StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), workOrder.getWorkOrderNo(), JSONObject.toJSONString(workOrder), calcCompleteQty, productResult, JSONObject.toJSONString(propertyMap));
|
|
|
|
if (CollectionUtils.isEmpty(productionPsOutContextList)) return;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//工位是否不累计工单完成数
|
|
|
|
|
|
|
|
Boolean isCellNoCalcQty = workOrderCheckCompleteQtyStepService.isCellNoCalcQty(productionPsOutContextList.get(0).getNoCalcOrderQty());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//产出条码 根据生产工单分组
|
|
|
|
|
|
|
|
Map<String, List<MesProductionPsOutContext>> proMap = productionPsOutContextList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesProductionPsOutContext::getWorkOrderNo));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//遍历产出物料
|
|
|
|
|
|
|
|
for (Map.Entry<String, List<MesProductionPsOutContext>> entry : proMap.entrySet()) {
|
|
|
|
|
|
|
|
if (null == entry) continue;
|
|
|
|
|
|
|
|
//生产数量
|
|
|
|
|
|
|
|
Double calcCompleteQty = new Double(MesPcnExtConstWords.ZERO);
|
|
|
|
|
|
|
|
for (MesProductionPsOutContext productionPsOutContext : entry.getValue()) {
|
|
|
|
|
|
|
|
if (null == productionPsOutContext) continue;
|
|
|
|
|
|
|
|
//产出零件需要计算工单完成数量
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
|
|
|
//处理工位维度的工单完成数上下文[保存]
|
|
|
|
|
|
|
|
productionCustomContextStepService.dispatchWorkOrderCompleteQtyCellContext(reqBean, isCellNoCalcQty, productionPsOutContextList.get(0).getWorkOrderNo(), calcCompleteQty);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|