Merge branch 'uat-temp-wj-chongqingdaqu-prod-huaweiyun-ps-save' into uat-temp-wj-chongqingdaqu-prod-huaweiyun-temp

uat-temp-wj-chongqingdaqu-prod-huaweiyun-temp
王杰 3 months ago
commit a1c552ed75

@ -6,6 +6,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepSer
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.method.MesPartDataMapSaveStepService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.method.MesWorkOrderCheckCompleteQtyStepService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.DeepCloneUtil;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmRouteDataService;
@ -13,6 +14,7 @@ import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.mes.pcn.util.StringUtil;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
@ -28,12 +30,15 @@ import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.MapDifference;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import javax.persistence.EntityManager;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@ -78,6 +83,12 @@ public class MesProductSnGenerateStepService extends BaseStepService {
@Autowired
private MesWorkOrderCheckCompleteQtyStepService workOrderCheckCompleteQtyStepService;
@Autowired
private SnowflakeIdMaker snowflakeIdMaker;
@Autowired
private EntityManager entityManager;
@Override
public StepResult execute(StationRequestBean reqBean) {
@ -162,77 +173,101 @@ public class MesProductSnGenerateStepService extends BaseStepService {
//验证是否计数
Boolean isCalcCompleteQty = workOrderCheckCompleteQtyStepService.isCalcCompleteQty(isSamePart, productionPsInContext, productionPartContext);
MesProduceSn produceSn;
MesProduceSn produceSn = null;
MesProduceSn produceSnClone = null;
//进出一致, 不累计工单完成数量 在显示装配件工步中已经验证了 进出一致 进出存在工单则必须一致
if (isSamePart) produceSn = produceSnExtService.getProduceSn(reqBean.getOrganizeCode(), productionPsInContext.getId());
//未知条码
else if (null != productionPsInContext && !StringUtils.isEmpty(productionPsInContext.getRelateId())) produceSn = produceSnExtService.getProduceSn(reqBean.getOrganizeCode(), productionPsInContext.getRelateId());
//生成新条码
else produceSn = new MesProduceSn();
else produceSnClone = new MesProduceSn();
if (null != produceSn) {
produceSnClone = DeepCloneUtil.deepCloneObject(produceSn);
if (null == produceSnClone) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "修改条码未知状态时[克隆条码]出现异常!");
entityManager.detach(produceSnClone);
}
if (StringUtils.isEmpty(produceSn.getProductSn())) {
if (null != productionPsInContext && !StringUtils.isEmpty(productionPsInContext.getProductSn())) produceSn.setProductSn(productionPsInContext.getProductSn());
else produceSn.setProductSn(doGererateSerialNo(reqBean, resultBean,
if (StringUtils.isEmpty(produceSnClone.getProductSn())) {
if (null != productionPsInContext && !StringUtils.isEmpty(productionPsInContext.getProductSn())) produceSnClone.setProductSn(productionPsInContext.getProductSn());
else produceSnClone.setProductSn(doGererateSerialNo(reqBean, resultBean,
generateGenSerialNoModel(reqBean, resultBean, getProduceSnNumberRule(reqBean, resultBean, part), part).shiftCode(prodShiftContext.getShiftCode()).foreignKey(prodRuleContext.getForeignKey())));
produceSn.setCustSn(produceSn.getProductSn());
produceSnClone.setCustSn(produceSnClone.getProductSn());
}
if (StringUtils.isEmpty(produceSn.getSerialNumber())) {
produceSn.setSerialNumber(doGererateSerialNo(reqBean, resultBean, generateGenSerialNoModel(reqBean, resultBean, MesPcnExtConstWords.DEFAULT_SERIAL_NUMBER_RULE, part)));
if (StringUtils.isEmpty(produceSnClone.getSerialNumber())) {
produceSnClone.setSerialNumber(snowflakeIdMaker.nextId() + MesPcnExtConstWords.EMPTY);
}
produceSn.setQty(new Double(1));
produceSnClone.setQty(new Double(1));
if (!StringUtils.isEmpty(prodRuleContext.getWorkOrderNo())) produceSn.setWorkOrderNo(prodRuleContext.getWorkOrderNo());
if (!StringUtils.isEmpty(prodRuleContext.getWorkOrderNo())) produceSnClone.setWorkOrderNo(prodRuleContext.getWorkOrderNo());
if (null != productionPartContext && !StringUtils.isEmpty(productionPartContext.getWorkOrderNo())) {
produceSn.setCustCode(productionPartContext.getCustCode());
produceSn.setCustPartNo(productionPartContext.getCustPartNo());
produceSnClone.setCustCode(productionPartContext.getCustCode());
produceSnClone.setCustPartNo(productionPartContext.getCustPartNo());
}
produceSn.setAreaCode(reqBean.getAreaCode());
produceSn.setWorkCenterCode(reqBean.getWorkCenterCode());
produceSn.setWorkCellCode(reqBean.getWorkCellCode());
produceSnClone.setAreaCode(reqBean.getAreaCode());
produceSnClone.setWorkCenterCode(reqBean.getWorkCenterCode());
produceSnClone.setWorkCellCode(reqBean.getWorkCellCode());
produceSn.setPartNo(part.getPartNo());
produceSn.setPartName(part.getPartName());
produceSn.setProcessLabelTemplate(part.getProcessLabelTemplate());
produceSn.setProdLabelTemplate(part.getProductLabelTemplate());
produceSn.setCustLabelTemplate(part.getCustLabelTemplate());
produceSnClone.setPartNo(part.getPartNo());
produceSnClone.setPartName(part.getPartName());
produceSnClone.setProcessLabelTemplate(part.getProcessLabelTemplate());
produceSnClone.setProdLabelTemplate(part.getProductLabelTemplate());
produceSnClone.setCustLabelTemplate(part.getCustLabelTemplate());
produceSn.setSnType(MesExtEnumUtil.PRODUCE_SN_TYPE.STANDARD.getValue());
produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getValue());
produceSn.setQcStatus(!StringUtils.isEmpty(productResult) ? Integer.valueOf(productResult) : MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue());
produceSnClone.setSnType(MesExtEnumUtil.PRODUCE_SN_TYPE.STANDARD.getValue());
produceSnClone.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getValue());
produceSnClone.setQcStatus(!StringUtils.isEmpty(productResult) ? Integer.valueOf(productResult) : MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue());
produceSn.setShiftCode(prodShiftContext.getShiftCode());
produceSn.setShiftGroup(prodShiftContext.getShiftGroup());
produceSnClone.setShiftCode(prodShiftContext.getShiftCode());
produceSnClone.setShiftGroup(prodShiftContext.getShiftGroup());
if (StringUtils.isEmpty(produceSn.getPrintCount())) produceSn.setPrintCount(MesPcnExtConstWords.ZERO);
if (StringUtils.isEmpty(produceSn.getPrintStatus())) produceSn.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue());
if (StringUtils.isEmpty(produceSnClone.getPrintCount())) produceSnClone.setPrintCount(MesPcnExtConstWords.ZERO);
if (StringUtils.isEmpty(produceSnClone.getPrintStatus())) produceSnClone.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue());
produceSn.setOrganizeCode(reqBean.getOrganizeCode());
produceSnClone.setOrganizeCode(reqBean.getOrganizeCode());
if (StringUtils.isEmpty(produceSn.getId())) ConvertBean.serviceModelInitialize(produceSn, reqBean.getUserInfo());
else ConvertBean.serviceModelUpdate(produceSn, reqBean.getUserInfo());
if (StringUtils.isEmpty(produceSnClone.getId())) ConvertBean.serviceModelInitialize(produceSnClone, reqBean.getUserInfo());
else ConvertBean.serviceModelUpdate(produceSnClone, reqBean.getUserInfo());
if (StringUtils.isEmpty(produceSn.getInWorkCenterTime())) produceSn.setInWorkCenterTime(produceSn.getModifyDatetime());
produceSn.setLotNo(produceSn.getModifyDatetime().substring(0, 10));
if (StringUtils.isEmpty(produceSnClone.getInWorkCenterTime())) produceSnClone.setInWorkCenterTime(produceSnClone.getModifyDatetime());
produceSnClone.setLotNo(produceSnClone.getModifyDatetime().substring(0, 10));
//未知不同步
produceSn.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
produceSnClone.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
if (StringUtils.isEmpty(produceSn.getId())) {
produceSn.setFid(UUID.randomUUID().toString());
produceSn = produceSnExtService.insert(produceSn);
} else produceSnExtService.updateNoSync(produceSn);
if (StringUtils.isEmpty(produceSnClone.getId())) {
produceSnClone.setFid(UUID.randomUUID().toString());
produceSnClone = produceSnExtService.insert(produceSnClone);
} else {
Map<String, Object> beforeMap = JSONObject.parseObject(JSONObject.toJSONString(produceSn), Map.class) ;
Map<String, Object> afterMap = JSONObject.parseObject(JSONObject.toJSONString(produceSnClone), Map.class) ;
Map<String, MapDifference.ValueDifference<Object>> mapDiff = Maps.difference(beforeMap, afterMap).entriesDiffering();
String[] propertyName = new String[mapDiff.size()];
Object[] propertyValue = new Object[mapDiff.size()];
Integer index = 0;
for (Map.Entry<String, MapDifference.ValueDifference<Object>> entry : mapDiff.entrySet()) {
if (null == entry) continue;
propertyName[index] = entry.getKey();
propertyValue[index] = entry.getValue().rightValue();
index ++;
}
produceSnRepository.updateByPropertiesNoSync(new String[]{MesPcnExtConstWords.ID, MesPcnExtConstWords.ORGANIZE_CODE}, new Object[]{produceSn.getId(), reqBean.getOrganizeCode()}, propertyName, propertyValue);
}
//isCalcCompleteQty=true的情况下【工位是否不累计工单完成数noCalcOrderQty=true最终不会实际累加到工单上】【noCalcOrderQty=false代表生产线维度的统计,才会实际累加到工单上】
MesProductionPsOutContext productionPsOutContext = new MesProductionPsOutContext()
.copy(produceSn, prodRuleContext.getForeignKey()).isCalcCompleteQty(isCalcCompleteQty, isSamePart, workCell.getNoCalcOrderQty());
.copy(produceSnClone, prodRuleContext.getForeignKey()).isCalcCompleteQty(isCalcCompleteQty, isSamePart, workCell.getNoCalcOrderQty());
log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- MesProduceSn:{} --- MesProductionPsOutContext:{}",
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(),
StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), JSONObject.toJSONString(produceSn), JSONObject.toJSONString(productionPsOutContext));
StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), JSONObject.toJSONString(produceSnClone), JSONObject.toJSONString(productionPsOutContext));
return productionPsOutContext;

@ -184,7 +184,8 @@ public class MesProductSnSaveStepService extends BaseStepService {
propertyMap.put(MesPcnExtConstWords.OUT_WC_TIME, productionPsOutContext.getOutWorkCenterTime());
} else {
//排序非末道
if (productionPsOutContext.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.PROCESSING.getValue()) != 0) {
if (productionPsOutContext.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.PROCESSING.getValue()) != 0 &&
productionPsOutContext.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()) != 0) {
productionPsOutContext.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.PROCESSING.getValue());
propertyMap.put(MesPcnExtConstWords.SN_STATUS, productionPsOutContext.getSnStatus());
}

Loading…
Cancel
Save