|
|
|
@ -30,6 +30,7 @@ import org.springframework.stereotype.Service;
|
|
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
|
import org.springframework.util.StringUtils;
|
|
|
|
|
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
@ -114,57 +115,97 @@ public class MesProductSnSaveStepService extends BaseStepService {
|
|
|
|
|
|
|
|
|
|
if (null == produceSn) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查零件条码信息,产出零件条码[%s]ID[%s]信息不存在!", productionPsOutContext.getProductSn(), productionPsOutContext.getId()));
|
|
|
|
|
|
|
|
|
|
log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- PS:{} {} --- ID:{} --- QURERY:{}",
|
|
|
|
|
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(),
|
|
|
|
|
StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), produceSn.getProductSn(), produceSn.getPartNo(), produceSn.getId(), JSONObject.toJSONString(produceSn));
|
|
|
|
|
|
|
|
|
|
//零件信息
|
|
|
|
|
MesPart part = partMap.get(produceSn.getPartNo());
|
|
|
|
|
|
|
|
|
|
Map<String, Object> propertyMap = new HashMap<>();
|
|
|
|
|
|
|
|
|
|
productionPsOutContext.setAreaCode(reqBean.getAreaCode());
|
|
|
|
|
propertyMap.put(MesPcnExtConstWords.AREA_CODE, productionPsOutContext.getAreaCode());
|
|
|
|
|
|
|
|
|
|
productionPsOutContext.setWorkCenterCode(reqBean.getWorkCenterCode());
|
|
|
|
|
propertyMap.put(MesPcnExtConstWords.WORK_CENTER_CODE, productionPsOutContext.getWorkCenterCode());
|
|
|
|
|
|
|
|
|
|
productionPsOutContext.setWorkCellCode(reqBean.getWorkCellCode());
|
|
|
|
|
propertyMap.put(MesPcnExtConstWords.WORK_CELL_CODE, productionPsOutContext.getWorkCellCode());
|
|
|
|
|
|
|
|
|
|
productionPsOutContext.setRouteCode(reqBean.getRouteCode());
|
|
|
|
|
propertyMap.put(MesPcnExtConstWords.ROUTE_CODE, productionPsOutContext.getRouteCode());
|
|
|
|
|
|
|
|
|
|
productionPsOutContext.setProcessCode(reqBean.getProcessCode());
|
|
|
|
|
productionPsOutContext.setCraftCode(productionProcessContext.getCraftCode());
|
|
|
|
|
propertyMap.put(MesPcnExtConstWords.PROCESS_CODE, productionPsOutContext.getProcessCode());
|
|
|
|
|
|
|
|
|
|
productionPsOutContext.setQcStatus(!StringUtils.isEmpty(productResult) ? Integer.valueOf(productResult) : MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue());
|
|
|
|
|
productionPsOutContext.setCraftCode(productionProcessContext.getCraftCode());
|
|
|
|
|
propertyMap.put(MesPcnExtConstWords.CRAFT_CODE, productionPsOutContext.getCraftCode());
|
|
|
|
|
|
|
|
|
|
productionPsOutContext.setShiftCode(prodShiftContext.getShiftCode());
|
|
|
|
|
propertyMap.put(MesPcnExtConstWords.SHIFT_CODE, productionPsOutContext.getShiftCode());
|
|
|
|
|
|
|
|
|
|
productionPsOutContext.setShiftGroup(prodShiftContext.getShiftGroup());
|
|
|
|
|
propertyMap.put(MesPcnExtConstWords.SHIFT_GROUP, productionPsOutContext.getShiftGroup());
|
|
|
|
|
|
|
|
|
|
productionPsOutContext.setProcessLabelTemplate(part.getProcessLabelTemplate());
|
|
|
|
|
propertyMap.put(MesPcnExtConstWords.PROCESS_LABEL_TEMPLATE, productionPsOutContext.getProcessLabelTemplate());
|
|
|
|
|
|
|
|
|
|
productionPsOutContext.setProdLabelTemplate(part.getProductLabelTemplate());
|
|
|
|
|
propertyMap.put(MesPcnExtConstWords.PROD_LABEL_TEMPLATE, productionPsOutContext.getProdLabelTemplate());
|
|
|
|
|
|
|
|
|
|
productionPsOutContext.setCustLabelTemplate(part.getCustLabelTemplate());
|
|
|
|
|
propertyMap.put(MesPcnExtConstWords.CUST_LABEL_TEMPLATE, productionPsOutContext.getCustLabelTemplate());
|
|
|
|
|
|
|
|
|
|
ConvertBean.serviceModelUpdate(productionPsOutContext, reqBean.getUserInfo());
|
|
|
|
|
productionPsOutContext.setLotNo(productionPsOutContext.getModifyDatetime().substring(0, 10));
|
|
|
|
|
propertyMap.put(MesPcnExtConstWords.MODIFY_DATE_TIME, productionPsOutContext.getModifyDatetime());
|
|
|
|
|
propertyMap.put(MesPcnExtConstWords.MODIFY_USER, productionPsOutContext.getModifyUser());
|
|
|
|
|
propertyMap.put(MesPcnExtConstWords.SYSTEM_SYNC_STATUS, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
|
|
|
|
|
propertyMap.put(MesPcnExtConstWords.SYSTEM_SYNC_DATE_TIME, MesPcnExtConstWords.EMPTY);
|
|
|
|
|
|
|
|
|
|
if (StringUtils.isEmpty(productionPsOutContext.getLotNo()) || !productionPsOutContext.getLotNo().equals(productionPsOutContext.getModifyDatetime().substring(0, 10))) {
|
|
|
|
|
productionPsOutContext.setLotNo(productionPsOutContext.getModifyDatetime().substring(0, 10));
|
|
|
|
|
propertyMap.put(MesPcnExtConstWords.LOT_NO, productionPsOutContext.getLotNo());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (StringUtils.isEmpty(productionPsOutContext.getInWorkCenterTime())) productionPsOutContext.setInWorkCenterTime(productionPsOutContext.getModifyDatetime());
|
|
|
|
|
if (StringUtils.isEmpty(productionPsOutContext.getInWorkCenterTime())) {
|
|
|
|
|
productionPsOutContext.setInWorkCenterTime(productionPsOutContext.getModifyDatetime());
|
|
|
|
|
propertyMap.put(MesPcnExtConstWords.IN_WC_TIME, productionPsOutContext.getInWorkCenterTime());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!StringUtils.isEmpty(productResult) && Integer.valueOf(productResult).compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()) != 0) {
|
|
|
|
|
productionPsOutContext.setQcStatus(Integer.valueOf(productResult));
|
|
|
|
|
propertyMap.put(MesPcnExtConstWords.QC_STATUS, productionPsOutContext.getQcStatus());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//非排序 或者 排序的末道工位
|
|
|
|
|
if (workCenter.getCenterType().compareTo(MesExtEnumUtil.WORK_CENTER_TYPE.NOSORT.getValue()) == 0 ||
|
|
|
|
|
(!StringUtils.isEmpty(workCell.getIsEndWorkCell()) && workCell.getIsEndWorkCell().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0)) {
|
|
|
|
|
productionPsOutContext.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue());
|
|
|
|
|
propertyMap.put(MesPcnExtConstWords.SN_STATUS, productionPsOutContext.getSnStatus());
|
|
|
|
|
|
|
|
|
|
productionPsOutContext.setOutWorkCenterTime(productionPsOutContext.getModifyDatetime());
|
|
|
|
|
propertyMap.put(MesPcnExtConstWords.OUT_WC_TIME, productionPsOutContext.getOutWorkCenterTime());
|
|
|
|
|
} else {
|
|
|
|
|
productionPsOutContext.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.PROCESSING.getValue());
|
|
|
|
|
//排序非末道
|
|
|
|
|
if (productionPsOutContext.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.PROCESSING.getValue()) != 0) {
|
|
|
|
|
productionPsOutContext.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.PROCESSING.getValue());
|
|
|
|
|
propertyMap.put(MesPcnExtConstWords.SN_STATUS, productionPsOutContext.getSnStatus());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
produceSnRepository.updateByProperties(
|
|
|
|
|
new String[]{MesPcnExtConstWords.ID, MesPcnExtConstWords.ORGANIZE_CODE},
|
|
|
|
|
new Object[]{produceSn.getId(), reqBean.getOrganizeCode()},
|
|
|
|
|
new String[]{MesPcnExtConstWords.AREA_CODE, MesPcnExtConstWords.WORK_CENTER_CODE, MesPcnExtConstWords.WORK_CELL_CODE, MesPcnExtConstWords.ROUTE_CODE, MesPcnExtConstWords.PROCESS_CODE, MesPcnExtConstWords.CRAFT_CODE,
|
|
|
|
|
MesPcnExtConstWords.SN_STATUS, MesPcnExtConstWords.QC_STATUS, MesPcnExtConstWords.SHIFT_CODE, MesPcnExtConstWords.SHIFT_GROUP, MesPcnExtConstWords.PROCESS_LABEL_TEMPLATE, MesPcnExtConstWords.PROD_LABEL_TEMPLATE,
|
|
|
|
|
MesPcnExtConstWords.CUST_LABEL_TEMPLATE, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.IN_WC_TIME, MesPcnExtConstWords.OUT_WC_TIME, MesPcnExtConstWords.LOT_NO},
|
|
|
|
|
new Object[]{productionPsOutContext.getAreaCode(), productionPsOutContext.getWorkCenterCode(), productionPsOutContext.getWorkCellCode(), productionPsOutContext.getRouteCode(), productionPsOutContext.getProcessCode(), productionPsOutContext.getCraftCode(),
|
|
|
|
|
productionPsOutContext.getSnStatus(), productionPsOutContext.getQcStatus(), productionPsOutContext.getShiftCode(), productionPsOutContext.getShiftGroup(), productionPsOutContext.getProcessLabelTemplate(), productionPsOutContext.getProdLabelTemplate(),
|
|
|
|
|
productionPsOutContext.getCustLabelTemplate(), productionPsOutContext.getModifyDatetime(), productionPsOutContext.getModifyUser(), productionPsOutContext.getInWorkCenterTime(), productionPsOutContext.getOutWorkCenterTime(), productionPsOutContext.getLotNo()});
|
|
|
|
|
|
|
|
|
|
log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- PS:{} {} --- ID:{} --- UPDATE:{}",
|
|
|
|
|
String[] propertyName = new String[propertyMap.size()];
|
|
|
|
|
Object[] propertyValue = new Object[propertyMap.size()];
|
|
|
|
|
|
|
|
|
|
Integer index = 0;
|
|
|
|
|
for (Map.Entry<String, Object> innerEntry : propertyMap.entrySet()) {
|
|
|
|
|
if (null == innerEntry) continue;
|
|
|
|
|
propertyName[index] = innerEntry.getKey();
|
|
|
|
|
propertyValue[index] = innerEntry.getValue();
|
|
|
|
|
index ++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
produceSnRepository.updateByPropertiesNoSync(new String[]{MesPcnExtConstWords.ID, MesPcnExtConstWords.ORGANIZE_CODE}, new Object[]{produceSn.getId(), reqBean.getOrganizeCode()}, propertyName, propertyValue);
|
|
|
|
|
|
|
|
|
|
log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- PS:{} --- ID:{} --- QUERY:{} --- productResult:{} --- UPDATE:{}",
|
|
|
|
|
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(),
|
|
|
|
|
StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), productionPsOutContext.getProductSn(), productionPsOutContext.getPartNo(), productionPsOutContext.getId(), JSONObject.toJSONString(productionPsOutContext));
|
|
|
|
|
StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), productionPsOutContext.getProductSn(), produceSn.getId(), JSONObject.toJSONString(produceSn), productResult, JSONObject.toJSONString(propertyMap));
|
|
|
|
|
|
|
|
|
|
return productionPsOutContext;
|
|
|
|
|
|
|
|
|
|