Merge remote-tracking branch 'origin/dev' into dev

tags/yfai-pcn-ext-v1.0
administrator 11 months ago
commit b3a96c4387

@ -13,6 +13,9 @@ public interface IMesProduceSnExtService {
@ApiOperation(value = "根据零件条码查询零件条码信息") @ApiOperation(value = "根据零件条码查询零件条码信息")
List<MesProduceSn> getProduceSnList(String organizeCode, List<String> productSnList); List<MesProduceSn> getProduceSnList(String organizeCode, List<String> productSnList);
@ApiOperation(value = "根据零件条码ID查询零件条码信息")
MesProduceSn getProduceSn(String organizeCode, Long id);
@ApiOperation(value = "根据零件条码查询零件条码信息") @ApiOperation(value = "根据零件条码查询零件条码信息")
Map<String, List<MesProduceSn>> getProduceSnMap(String organizeCode, List<String> productSnList); Map<String, List<MesProduceSn>> getProduceSnMap(String organizeCode, List<String> productSnList);
@ -25,5 +28,4 @@ public interface IMesProduceSnExtService {
@ApiOperation(value = "根据零件条码ID修改条码状态,工位") @ApiOperation(value = "根据零件条码ID修改条码状态,工位")
void saveProduceSnList(StationRequestBean reqBean, Integer snStatus, List<Long> idList); void saveProduceSnList(StationRequestBean reqBean, Integer snStatus, List<Long> idList);
} }

@ -27,7 +27,7 @@ public interface IMesProductionDispatchContextStepService {
@ApiOperation(value = "获取上下文加工结果") @ApiOperation(value = "获取上下文加工结果")
String getProductResultContext(StationRequestBean reqBean); String getProductResultContext(StationRequestBean reqBean);
@ApiOperation(value = "保存上下文加工结果", notes = "加工结果:成功/报废/可疑 【写入的值是变量类别代码】【报废/可疑: 在保存逻辑条码时有特殊业务处理】") @ApiOperation(value = "保存上下文加工结果", notes = "加工结果:成功/报废/可疑 【写入的值是变量类别代码对应的条码质量状态】【报废/可疑: 在保存逻辑条码时有特殊业务处理】")
Boolean saveProductResultContext(StationRequestBean reqBean, String productResult); Boolean saveProductResultContext(StationRequestBean reqBean, String productResult);
@ApiOperation(value = "删除上下文加工结果") @ApiOperation(value = "删除上下文加工结果")

@ -24,6 +24,7 @@ import org.springframework.beans.BeanUtils;
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.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList; import java.util.ArrayList;
@ -120,7 +121,12 @@ public class MesEquipmentLogService implements IMesEquipmentLogService {
mesEquipmentLogDetail.setCraftCode(mesEquipmentRecord.getCraftCode()); mesEquipmentLogDetail.setCraftCode(mesEquipmentRecord.getCraftCode());
mesEquipmentLogDetail.setProcessCode(mesEquipmentRecord.getProcessCode()); mesEquipmentLogDetail.setProcessCode(mesEquipmentRecord.getProcessCode());
mesEquipmentLogDetail.setWorkCenterCode(mesEquipmentRecord.getWorkCenterCode()); mesEquipmentLogDetail.setWorkCenterCode(mesEquipmentRecord.getWorkCenterCode());
mesEquipmentLogDetail.setExtend(mesEquipmentRecord.getProduceSnJson());
String jsonStr = mesEquipmentRecord.getProduceSnJson();
if (!StringUtils.isEmpty(jsonStr)) {
mesEquipmentLogDetail.setExtend(mesEquipmentRecord.getProduceSnJson());
}
mesEquipmentLogDetails.add(mesEquipmentLogDetail); mesEquipmentLogDetails.add(mesEquipmentLogDetail);
} }
mesEquipmentLogDetailRepository.saveAll(mesEquipmentLogDetails); mesEquipmentLogDetailRepository.saveAll(mesEquipmentLogDetails);

@ -45,6 +45,15 @@ public class MesProduceSnExtService implements IMesProduceSnExtService {
return produceSnRepository.findByHqlWhere(packBean); return produceSnRepository.findByHqlWhere(packBean);
} }
//根据零件条码ID查询零件条码信息
@Override
public MesProduceSn getProduceSn(String organizeCode, Long id) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(id)) return null;
return produceSnRepository.getByProperty(
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.ID},
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), id});
}
//根据零件条码查询零件条码信息 //根据零件条码查询零件条码信息
@Override @Override
public Map<String, List<MesProduceSn>> getProduceSnMap(String organizeCode, List<String> productSnList) { public Map<String, List<MesProduceSn>> getProduceSnMap(String organizeCode, List<String> productSnList) {

@ -29,10 +29,10 @@ public class MesNumberRuleMatchDispatchService implements IMesNumberRuleMatchDis
if (numberRuleList.get(0) instanceof MesProdRuleNosortCfg) numberRuleList.forEach(o -> matchNumberRule(organizeCode, sn, resultList, o, "mesNumberRuleMatchRegularExpressionService",o, ((MesProdRuleNosortCfg) o).getInPartNoRule())); if (numberRuleList.get(0) instanceof MesProdRuleNosortCfg) numberRuleList.forEach(o -> matchNumberRule(organizeCode, sn, resultList, o, "mesNumberRuleMatchRegularExpressionService",o, ((MesProdRuleNosortCfg) o).getInPartNoRule()));
if (numberRuleList.get(0) instanceof MesProductionAssemblyNosortContext) numberRuleList.forEach(o -> matchNumberRule(organizeCode, sn, resultList, o, "mesNumberRuleMatchRegularExpressionService",o, ((MesProdRuleNosortCfg) o).getInPartNoRule())); if (numberRuleList.get(0) instanceof MesProductionAssemblyNosortContext) numberRuleList.forEach(o -> matchNumberRule(organizeCode, sn, resultList, o, "mesNumberRuleMatchRegularExpressionService",o, ((MesProductionAssemblyNosortContext) o).getMatchRule()));
if (numberRuleList.get(0) instanceof MesProductionAssemblySortContext) numberRuleList.forEach(o -> matchNumberRule(organizeCode, sn, resultList, o, "mesNumberRuleMatchRegularExpressionService",o, ((MesProdRuleNosortCfg) o).getInPartNoRule())); if (numberRuleList.get(0) instanceof MesProductionAssemblySortContext) numberRuleList.forEach(o -> matchNumberRule(organizeCode, sn, resultList, o, "mesNumberRuleMatchRegularExpressionService",o, ((MesProductionAssemblySortContext) o).getMatchRule()));
return resultList; return resultList;

@ -83,7 +83,7 @@ public class MesProductionNoSortModuleService extends BaseModuleService {
// 整合班次加工数量 // 整合班次加工数量
List<StationKvBean> productionStatisticsContext = productionCustomContextStepService.getProductionStatisticsContext(reqBean); List<StationKvBean> productionStatisticsContext = productionCustomContextStepService.getProductionStatisticsContext(reqBean);
if (CollectionUtils.isEmpty(productionStatisticsContext)) { if (CollectionUtils.isEmpty(productionStatisticsContext)) {
productionStatisticsContext = StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), new StationKvBean(new StringJoiner(MesPcnExtConstWords.AND).add(mesProdShiftKvBean.getShiftGroup()).add(mesProdShiftKvBean.getShiftCode()).toString(), "加数", "0"), productionStatisticsContext = StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), new StationKvBean(new StringJoiner(MesPcnExtConstWords.AND).add(mesProdShiftKvBean.getShiftGroup()).add(mesProdShiftKvBean.getShiftCode()).toString(), "加数", "0"),
new StationKvBean("color", "颜色", MesExtEnumUtil.COLOR.BLACK.getValue())); new StationKvBean("color", "颜色", MesExtEnumUtil.COLOR.BLACK.getValue()));
} }
StationResultBean shiftCountBean = getStationResultBean(reqBean, productionStatisticsContext,mesWorkCell); StationResultBean shiftCountBean = getStationResultBean(reqBean, productionStatisticsContext,mesWorkCell);

@ -158,6 +158,8 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService {
} }
prodRuleContext.assemblyDataJson(productionAssemblyNosortContextList);
//TODO 发送设备加工参数 //TODO 发送设备加工参数
if (equipVariableCollectContextList.get(0).getMessageSource().compareTo(MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ.getValue()) != 0) doSendEquipProdParam(reqBean, resultBean, stepResult, prodRuleContext, productionAssemblyNosortContextList); if (equipVariableCollectContextList.get(0).getMessageSource().compareTo(MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ.getValue()) != 0) doSendEquipProdParam(reqBean, resultBean, stepResult, prodRuleContext, productionAssemblyNosortContextList);
@ -251,6 +253,8 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService {
} }
prodRuleContext.assemblyDataJson(productionAssemblyNosortContextList);
//TODO 发送设备加工参数 //TODO 发送设备加工参数
if (equipVariableCollectContextList.get(0).getMessageSource().compareTo(MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ.getValue()) != 0) doSendEquipProdParam(reqBean, resultBean, stepResult, prodRuleContext, productionAssemblyNosortContextList); if (equipVariableCollectContextList.get(0).getMessageSource().compareTo(MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ.getValue()) != 0) doSendEquipProdParam(reqBean, resultBean, stepResult, prodRuleContext, productionAssemblyNosortContextList);

@ -293,7 +293,7 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
} }
//显示装配件信息 //显示装配件信息
private Boolean showProductionAssembly(StationRequestBean reqBean, StationResultBean resultBean, MesWorkCenter workCenter, MesCellEquipContext cellEquipContext, List<MesProdRuleContext> prodRuleContextList, List<MesProductionPartContext> productionPartContextList) { public Boolean showProductionAssembly(StationRequestBean reqBean, StationResultBean resultBean, MesWorkCenter workCenter, MesCellEquipContext cellEquipContext, List<MesProdRuleContext> prodRuleContextList, List<MesProductionPartContext> productionPartContextList) {
Map<Integer, MesProductionPartContext> productionPartMap = productionPartContextList.stream().filter(o -> null != o && o.getForeignKey() != null).collect(Collectors.toMap(MesProductionPartContext::getForeignKey, o -> o)); Map<Integer, MesProductionPartContext> productionPartMap = productionPartContextList.stream().filter(o -> null != o && o.getForeignKey() != null).collect(Collectors.toMap(MesProductionPartContext::getForeignKey, o -> o));

@ -189,16 +189,22 @@ public class MesFirstMouldNoReadStepService extends BaseStepService {
public StepResult savePartDataMap(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, List<MesProductionPartContext> productionPartContextList, Boolean isBackError) { public StepResult savePartDataMap(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, List<MesProductionPartContext> productionPartContextList, Boolean isBackError) {
//从上下文中取出零件信息集合
Map<String, MesPart> partDataMap = productionDispatchContextStepService.getPartDataContext(reqBean);
//从一模多腔信息中搜集零件编码并去重 //从一模多腔信息中搜集零件编码并去重
List<String> partNoList = (productionPartContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPartNo()))).map(MesProductionPartContext::getPartNo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()); List<String> partNoList = (productionPartContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPartNo()))).map(MesProductionPartContext::getPartNo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
return savePartDataMap(reqBean, resultBean, stepResult, partNoList, isBackError);
}
public StepResult savePartDataMap(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List<String> partNoList, Boolean isBackError) {
if (CollectionUtils.isEmpty(partNoList)) return stepResult; if (CollectionUtils.isEmpty(partNoList)) return stepResult;
//从上下文中取出零件信息集合
Map<String, MesPart> partDataMap = productionDispatchContextStepService.getPartDataContext(reqBean);
//验证上下文中取出零件信息集合是否匹配一模多腔信息中搜集零件编码 //验证上下文中取出零件信息集合是否匹配一模多腔信息中搜集零件编码
if (!CollectionUtils.isEmpty(partDataMap) && !CollectionUtils.isEmpty(partNoList) && partDataMap.keySet().containsAll(partNoList) && partNoList.containsAll(partDataMap.keySet())) return stepResult; if (!CollectionUtils.isEmpty(partDataMap) && !CollectionUtils.isEmpty(partNoList) && partDataMap.keySet().containsAll(partNoList) && partNoList.containsAll(partDataMap.keySet())) return stepResult.obj(partDataMap);
//根据物料编码集合查询物料信息 //根据物料编码集合查询物料信息
Map<String, MesPart> finalPartDataMap = partService.getPartMap(reqBean.getOrganizeCode(), partNoList); Map<String, MesPart> finalPartDataMap = partService.getPartMap(reqBean.getOrganizeCode(), partNoList);
@ -208,7 +214,7 @@ public class MesFirstMouldNoReadStepService extends BaseStepService {
//保存上下文零件数据信息 //保存上下文零件数据信息
if (!CollectionUtils.isEmpty(finalPartDataMap) && CollectionUtils.isEmpty(filterList)) if (!CollectionUtils.isEmpty(finalPartDataMap) && CollectionUtils.isEmpty(filterList))
return stepResult.isCompleted(productionDispatchContextStepService.savePartDataContext(reqBean, partDataMap)).msg(!stepResult.isCompleted() ? "零件数据信息保存上下文操作执行失败,请重试!" : null); return stepResult.isCompleted(productionDispatchContextStepService.savePartDataContext(reqBean, finalPartDataMap)).obj(finalPartDataMap).msg(!stepResult.isCompleted() ? "零件数据信息保存上下文操作执行失败,请重试!" : null);
//验证错误 根据isBackError判断是否抛出异常 //验证错误 根据isBackError判断是否抛出异常
stepResult.isCompleted(false).msg(String.format("请检查零件信息,零件编码%s信息不存在!", CollectionUtils.isEmpty(finalPartDataMap) ? partNoList.toString() : filterList.toString())); stepResult.isCompleted(false).msg(String.format("请检查零件信息,零件编码%s信息不存在!", CollectionUtils.isEmpty(finalPartDataMap) ? partNoList.toString() : filterList.toString()));

@ -137,7 +137,7 @@ public class MesProductResultReadStepService extends BaseStepService {
matchVariableCategoryMap(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, variableCategoryMap); matchVariableCategoryMap(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, variableCategoryMap);
//保存设备当前一轮工序的加工结果: 只保存成功/报废/可疑的结果 //保存设备当前一轮工序的加工结果: 只保存成功/报废/可疑的结果
if (stepResult.isCompleted()) productionDispatchContextStepService.saveProductResultContext(reqBean, (String) stepResult.getObj()); if (stepResult.isCompleted()) productionDispatchContextStepService.saveProductResultContext(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.valueOfCodeStr((String) stepResult.getObj()));
return stepResult; return stepResult;

@ -1,41 +1,33 @@
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.base.IMesPojoVersionService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService;
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.apiservice.util.MesPcnException; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext;
import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService; 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.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.JsonUtilTool;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesPart; import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesPojoVersion;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
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.MesPartRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository; import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import cn.hutool.core.date.DateUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import com.google.common.base.Objects;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
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.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -43,158 +35,180 @@ import java.util.stream.Collectors;
* @Author : wangjie * @Author : wangjie
**/ **/
@Slf4j @Slf4j
@Service @Service("mesProductSnGenerateStepService")
public class MesProductSnGenerateStepService extends BaseStepService { public class MesProductSnGenerateStepService extends BaseStepService {
@Autowired
private SnowflakeIdMaker snowflakeIdMaker;
@Autowired @Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService; private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired @Autowired
private MesPartRepository mesPartRepository; private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired @Autowired
private MesProduceSnRepository mesProduceSnRepository; private IMesProductionCustomContextStepService productionCustomContextStepService;
@Autowired @Autowired
private ISyncFuncService syncFuncService; private MesFirstMouldNoReadStepService firstMouldNoReadStepService;
public static final String ORDER_NO_JIS_SORT = "ORDER_NO_JIS_SORT"; @Autowired
private ISyncFuncService syncFuncService;
@Autowired @Autowired
private IMesProductionDispatchContextStepService mesProductionDispatchContextStepService; private IMesProduceSnExtService produceSnExtService;
@Autowired @Autowired
private IMesPojoVersionService mesPojoVersionService; private MesProduceSnRepository produceSnRepository;
/**todo
* todo
* @param reqBean
* @return
*/
@Override @Override
public StepResult execute(StationRequestBean reqBean) { public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean(); StationResultBean resultBean = new StationResultBean();
StepResult stepResult = StepResult.getSuccessComplete(); StepResult stepResult = StepResult.getSuccessComplete();
String result = mesProductionDispatchContextStepService.getProductResultContext(reqBean);
// 获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariableList(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue());
MesWorkCell mesWorkCell = productionProcessContext.getWorkCell();
// 获取产出零件信息
List<MesProductionPartContext> productionPartContextList = mesProductionDispatchContextStepService.getProductionPartContext(reqBean);
if (CollectionUtils.isEmpty(productionPartContextList)) {
foundExThrow(reqBean, "必过工步不允许跳过");
}
// 获取零件号,可能存在多个
List<String> partNoList = productionPartContextList.stream().map(MesProductionPartContext::getPartNo).collect(Collectors.toList());
// 根据零件号组装产品条码信息
List<MesProduceSn> mesProduceSns = generateSn(reqBean, productionProcessContext, mesWorkCell, partNoList, result);
// 保存条码信息
mesProduceSnRepository.saveAll(mesProduceSns);
savePojoVersion(mesProduceSns);
List<MesProductionPsOutContext> mesProductionPsOutContexts = new ArrayList<>();
for (MesProduceSn mesProduceSn : mesProduceSns) {
MesProductionPsOutContext mesProductionPsOutContext = new MesProductionPsOutContext();
BeanUtils.copyProperties(mesProduceSn, mesProductionPsOutContext);
mesProductionPsOutContexts.add(mesProductionPsOutContext);
}
// 放到上下文
mesProductionDispatchContextStepService.saveProductionPsOutContext(reqBean, mesProductionPsOutContexts);
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "生成零件条码成功"); //获取上下文信息
} MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean);
//配置错误 抛出异常
if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
//存储生产过程上下文对象
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
//从上下文中取出生产线对象
MesWorkCenter workCenter = productionProcessContext.getWorkCenter();
//排序线 直接跳过
if (MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue() == workCenter.getCenterType()) return stepResult;
//已经生成过零件条码
if (productionDispatchContextStepService.checkProductionPsOutIsExistContext(reqBean)) return stepResult;
private void savePojoVersion(List<MesProduceSn> mesProduceSns) { //获取上下文产品加工规则数据信息集合
mesProduceSns.forEach(mesProduceSn -> { List<MesProdRuleContext> prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean);
MesPojoVersion version = new MesPojoVersion();
version.setRefId(mesProduceSn.getId()); if (CollectionUtils.isEmpty(prodRuleContextList)) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "上下文中不存在加工规则信息,请重置工序解决!");
version.setRefClass(mesProduceSn.getClass().getName());
version.setBean(JsonUtilTool.encode(mesProduceSn)); //获取生产线的当前班组班次信息
version.setCreateUser(version.getCreateUser()); MesProdShiftContext prodShiftContext = productionCustomContextStepService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode());
version.setModifyUser(version.getModifyUser());
version.setVersionMethodName("insert"); if (null == prodShiftContext) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "上下文中不存在生产开班记录,请重新开班!");
version.setOrganizeCode(mesProduceSn.getOrganizeCode());
mesPojoVersionService.recordPojoVersion(version); //获取上下文产出零件数据信息集合
List<MesProductionPartContext> productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean);
//获取上下文进料零件条码信息集合
List<MesProductionPsInContext> productionPsInContextList = productionDispatchContextStepService.getProductionPsInContext(reqBean);
//获取上下文零件数据信息
List<String> partNoList = (prodRuleContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getOutPartNo()))).map(MesProdRuleContext::getOutPartNo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
firstMouldNoReadStepService.savePartDataMap(reqBean, resultBean, stepResult, partNoList, false);
//获取上下文加工结果
String productResult = productionDispatchContextStepService.getProductResultContext(reqBean);
Map<Integer, MesProductionPartContext> ppMap = CollectionUtils.isEmpty(productionPartContextList) ? null : productionPartContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).collect(Collectors.toMap(MesProductionPartContext::getForeignKey, o -> o));
Map<Integer, MesProductionPsInContext> psMap = CollectionUtils.isEmpty(productionPsInContextList) ? null : productionPsInContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).collect(Collectors.toMap(MesProductionPsInContext::getForeignKey, o -> o));
Map<String, MesPart> partMap = (Map<String, MesPart>) stepResult.getObj();
//循环生成零件条码,并写入产出零件
List<MesProductionPsOutContext> productionPsOutContextList = new ArrayList<>();
prodRuleContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()) && !StringUtils.isEmpty(o.getOutPartNo()))).forEach(o -> {
MesProductionPsOutContext productionPsOutContext = insertProduceSnData(reqBean, resultBean, stepResult, productionProcessContext, o, ppMap, psMap, partMap, prodShiftContext, productResult);
if (null != productionPsOutContext) productionPsOutContextList.add(productionPsOutContext);
}); });
//保存上下文产出条码数据信息集合
productionDispatchContextStepService.saveProductionPsOutContext(reqBean, productionPsOutContextList);
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "生成零件条码成功!");
} }
/** //生成零件条码
* private MesProductionPsOutContext insertProduceSnData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesProdRuleContext prodRuleContext,
* @param reqBean Map<Integer, MesProductionPartContext> ppMap, Map<Integer, MesProductionPsInContext> psMap, Map<String, MesPart> partMap, MesProdShiftContext prodShiftContext, String productResult) {
* @param productionProcessContext
* @param mesWorkCell //产出零件数据信息
* @param partNoList MesProductionPartContext productionPartContext = !CollectionUtils.isEmpty(ppMap) ? ppMap.get(prodRuleContext.getForeignKey()) : null;
* @return //料零件条码
*/ MesProductionPsInContext productionPsInContext = !CollectionUtils.isEmpty(psMap) ? psMap.get(prodRuleContext.getForeignKey()) : null;
private List<MesProduceSn> generateSn(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, MesWorkCell mesWorkCell, List<String> partNoList, String result) { //零件信息
List<MesProduceSn> mesProduceSns = new ArrayList<>(); MesPart part = partMap.get(prodRuleContext.getOutPartNo());
for (String partNo : partNoList) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(reqBean.getOrganizeCode()); //加工规则中进料零件与产出零件是否一致
DdlPreparedPack.getStringEqualPack(partNo, "partNo", packBean); Boolean isSamePart = isSamePart(prodRuleContext.getInPartNo(), prodRuleContext.getOutPartNo());
MesPart mesPart = mesPartRepository.getByProperty(packBean);
if (mesPart == null) { //进出一致, 无需生成
MesPcnException.throwFlowException("零件号不存在"); if (isSamePart) return new MesProductionPsOutContext().copy(produceSnExtService.getProduceSn(reqBean.getOrganizeCode(), null != productionPsInContext ? productionPsInContext.getId() : null), prodRuleContext.getForeignKey());
}
// 根据条码规则生成条码 //判断存在主条码的时候是否此前已生成当前工位的未知条码
String sn = generateByRule(mesPart); MesProduceSn produceSn = (null == productionPsInContext || StringUtils.isEmpty(productionPsInContext.getRelateId())) ? null : produceSnExtService.getProduceSn(reqBean.getOrganizeCode(), productionPsInContext.getRelateId());
// 组装条码信息 if (null == produceSn) produceSn = new MesProduceSn();
MesProduceSn mesProduceSn = generateMesProduceSn(mesPart, sn, mesWorkCell, productionProcessContext, reqBean, result);
ConvertBean.serviceModelInitialize(mesProduceSn, reqBean.getUserInfo()); try {
mesProduceSns.add(mesProduceSn);
produceSn.setProductSn((null != productionPsInContext && !StringUtils.isEmpty(productionPsInContext.getProductSn())) ? productionPsInContext.getProductSn() :
syncFuncService.syncSerialNo(new GenSerialNoModel(getProduceSnNumberRule(reqBean, resultBean, part)).partNo(part.getPartNo()), reqBean.getUserInfo(), reqBean.getOrganizeCode(), 1).getResultList().get(0).toString());
produceSn.setSerialNumber(syncFuncService.syncSerialNo(new GenSerialNoModel(MesPcnExtConstWords.DEFAULT_SERIAL_NUMBER_RULE).prodLocation(reqBean.getWorkCenterCode()), reqBean.getUserInfo(), reqBean.getOrganizeCode(), 1).getResultList().get(0).toString());
} catch (ImppBusiException e) {
execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), e.getErrorDetail());
}
produceSn.setCustSn(produceSn.getProductSn());
produceSn.setQty(new Double(1));
if (null != productionPartContext && !StringUtils.isEmpty(productionPartContext.getWorkOrderNo())) {
produceSn.setWorkOrderNo(productionPartContext.getWorkOrderNo());
produceSn.setCustCode(productionPartContext.getCustCode());
produceSn.setCustPartNo(productionPartContext.getCustPartNo());
} }
return mesProduceSns;
produceSn.setAreaCode(reqBean.getAreaCode());
produceSn.setWorkCenterCode(reqBean.getWorkCenterCode());
produceSn.setWorkCellCode(reqBean.getWorkCellCode());
produceSn.setPartNo(part.getPartNo());
produceSn.setPartName(part.getPartName());
produceSn.setProcessLabelTemplate(part.getProcessLabelTemplate());
produceSn.setProdLabelTemplate(part.getProductLabelTemplate());
produceSn.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());
produceSn.setShiftCode(prodShiftContext.getShiftCode());
produceSn.setShiftGroup(prodShiftContext.getShiftGroup());
produceSn.setPrintCount(MesPcnExtConstWords.ZERO);
produceSn.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue());
produceSn.setOrganizeCode(reqBean.getOrganizeCode());
if (StringUtils.isEmpty(produceSn.getId())) ConvertBean.serviceModelInitialize(produceSn, reqBean.getUserInfo());
else ConvertBean.serviceModelUpdate(produceSn, reqBean.getUserInfo());
produceSn.setInWorkCenterTime(produceSn.getModifyDatetime());
produceSn.setLotNo(produceSn.getModifyDatetime().substring(0, 10));
if (StringUtils.isEmpty(produceSn.getId())) produceSn = produceSnRepository.insert(produceSn);
else produceSnRepository.save(produceSn);
return new MesProductionPsOutContext().copy(produceSn, prodRuleContext.getForeignKey()).isCalcCompleteQty(produceSn.getWorkOrderNo());
} }
/** private String getProduceSnNumberRule(StationRequestBean reqBean, StationResultBean resultBean, MesPart part) {
* if (StringUtils.isEmpty(part.getProductMatchRule())) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查零件信息,零件[%s]信息未维护零件条码编码规则!", part.getPartNo()));
* @param mesPart return part.getProductMatchRule();
* @return
*/
private String generateByRule(MesPart mesPart) {
//生成工单号
GenSerialNoModel genSerialNoModel = new GenSerialNoModel(ORDER_NO_JIS_SORT);
genSerialNoModel.setPartNo(mesPart.getPartNo());
List<String> resultList = syncFuncService.syncSerialNo(genSerialNoModel, mesPart.getCreateUser(), mesPart.getOrganizeCode(), 1).getResultList();
return resultList.get(0);
} }
private MesProduceSn generateMesProduceSn(MesPart mesPart, String sn, MesWorkCell mesWorkCell,MesProductionProcessContext productionProcessContext, StationRequestBean reqBean, String result) { private Boolean isSamePart(String inPartNo, String outPartNo) {
long serialNum = snowflakeIdMaker.nextId(); if (!StringUtils.isEmpty(inPartNo) && inPartNo.equals(outPartNo)) return true;
else return false;
MesProduceSn mesProduceSn = new MesProduceSn();
mesProduceSn.setSerialNumber(serialNum + "");
mesProduceSn.setProductSn(sn);
mesProduceSn.setCustSn(sn);
mesProduceSn.setPartNo(mesPart.getPartNo());
mesProduceSn.setPartName(mesPart.getPartName());
mesProduceSn.setAreaCode(mesWorkCell.getAreaCode());
mesProduceSn.setWorkCenterCode(mesWorkCell.getWorkCenterCode());
mesProduceSn.setWorkCellCode(mesWorkCell.getWorkCellCode());
mesProduceSn.setProcessLabelTemplate(mesPart.getProcessLabelTemplate());
mesProduceSn.setCustLabelTemplate(mesPart.getCustLabelTemplate());
mesProduceSn.setProcessLabelTemplate(mesPart.getProcessLabelTemplate());
mesProduceSn.setQty(1d);
mesProduceSn.setSnStatus(10);
Integer qcStatus = MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue();
if (Objects.equal(MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_SCRAP.getValue(), result)) {
qcStatus = MesExtEnumUtil.PRODUCE_QC_STATUS.SCRAP.getValue();
} else if (Objects.equal(MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_SUSPICIOUS.getValue(), result)) {
qcStatus = MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue();
}
mesProduceSn.setQcStatus(qcStatus);
mesProduceSn.setLotNo(DateUtil.format(new Date(), "YYYYMMDD"));
mesProduceSn.setRouteCode(reqBean.getRouteCode());
mesProduceSn.setProcessCode(productionProcessContext.getProcessCode());
mesProduceSn.setCraftCode(productionProcessContext.getCraftCode());
mesProduceSn.setPrintCount(0);
mesProduceSn.setPrintStatus(10);
mesProduceSn.setOrganizeCode(reqBean.getOrganizeCode());
return mesProduceSn;
} }
} }

@ -1,44 +1,56 @@
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.IMesProduceSnExtService;
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.pojo.context.MesProdShiftContext;
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.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
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.MesProduceSnRepository; import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import com.google.common.base.Objects;
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.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/** /**
* @Description : * @Description :
* @Author : zxw * @Author : wangjie
**/ **/
@Slf4j @Slf4j
@Service @Service("mesProductSnSaveStepService")
public class MesProductSnSaveStepService extends BaseStepService { public class MesProductSnSaveStepService extends BaseStepService {
@Autowired @Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService; private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired @Autowired
private MesProduceSnRepository mesProduceSnRepository; private IMesProductionDispatchContextStepService productionDispatchContextStepService;
public static final String ORDER_NO_JIS_SORT = "ORDER_NO_JIS_SORT"; @Autowired
private IMesProductionCustomContextStepService productionCustomContextStepService;
@Autowired
private MesFirstMouldNoReadStepService firstMouldNoReadStepService;
@Autowired
private IMesProduceSnExtService produceSnExtService;
@Autowired @Autowired
private IMesProductionDispatchContextStepService mesProductionDispatchContextStepService; private MesProduceSnRepository produceSnRepository;
@Override @Override
public StepResult execute(StationRequestBean reqBean) { public StepResult execute(StationRequestBean reqBean) {
@ -47,32 +59,75 @@ public class MesProductSnSaveStepService extends BaseStepService {
StepResult stepResult = StepResult.getSuccessComplete(); StepResult stepResult = StepResult.getSuccessComplete();
// 获取加工结果 //获取上下文信息
String result = mesProductionDispatchContextStepService.getProductResultContext(reqBean); MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean);
List<MesProductionPsOutContext> mesProduceSnContexts = mesProductionDispatchContextStepService.getProductionPsOutContext(reqBean); //配置错误 抛出异常
List<MesProduceSn> mesProduceSns = new ArrayList<>(); if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
if (CollectionUtils.isEmpty(mesProduceSnContexts)) {
foundExThrow(reqBean, "条码信息不能为空"); //存储生产过程上下文对象
} productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
mesProduceSnContexts.forEach(mesProduceSnContext -> {
MesProduceSn mesProduceSn = new MesProduceSn(); //获取上下文产出条码数据信息集合
//todo 要根据不同的加工结果,返回不同的结果 要分排序和非排序, 排序只保存工单对应的装配件、非排序要保存主条码和装配件记录。 List<MesProductionPsOutContext> productionPsOutContextList = productionDispatchContextStepService.getProductionPsOutContext(reqBean);
// 如果是报废或者可疑需要编辑条码状态为不合格、并且nc判定需要新增一条记录 if (CollectionUtils.isEmpty(productionPsOutContextList)) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "上下文中不存在产出零件条码信息,请重置工序解决!");
if (StringUtils.isEmpty(result) || Objects.equal(MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_OK.getValue(), result)) {
mesProduceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); //获取生产线的当前班组班次信息
} else if (Objects.equal(MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_SCRAP.getValue(), result)) { MesProdShiftContext prodShiftContext = productionCustomContextStepService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode());
mesProduceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.SCRAP.getValue());
} else if (Objects.equal(MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_SUSPICIOUS.getValue(), result)) { if (null == prodShiftContext) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "上下文中不存在生产开班记录,请重新开班!");
mesProduceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue());
} //获取上下文零件数据信息
mesProduceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()); List<String> partNoList = (productionPsOutContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getPartNo()))).map(MesProductionPsOutContext::getPartNo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
firstMouldNoReadStepService.savePartDataMap(reqBean, resultBean, stepResult, partNoList, false);
mesProduceSns.add(mesProduceSn);
}); //获取上下文加工结果
mesProduceSnRepository.saveAll(mesProduceSns); String productResult = productionDispatchContextStepService.getProductResultContext(reqBean);
Map<String, MesPart> partMap = (Map<String, MesPart>) stepResult.getObj();
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "保存零件条码信息工步");
productionPsOutContextList.stream().filter(o -> null != o).forEach(o -> saveProduceSnData(reqBean, resultBean, stepResult, productionProcessContext, o, partMap, prodShiftContext, productResult));
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "保存零件条码成功!");
} }
private void saveProduceSnData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesProductionPsOutContext productionPsOutContext, Map<String, MesPart> partMap, MesProdShiftContext prodShiftContext, String productResult) {
//根据零件条码ID查询零件条码信息
MesProduceSn produceSn = produceSnExtService.getProduceSn(reqBean.getOrganizeCode(), productionPsOutContext.getId());
if (null == produceSn) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查零件条码信息,产出零件条码[%s]ID[%s]信息不存在!", productionPsOutContext.getProductSn(), productionPsOutContext.getId()));
//零件信息
MesPart part = partMap.get(produceSn.getPartNo());
produceSn.setAreaCode(reqBean.getAreaCode());
produceSn.setWorkCenterCode(reqBean.getWorkCenterCode());
produceSn.setWorkCellCode(reqBean.getWorkCellCode());
produceSn.setRouteCode(reqBean.getRouteCode());
produceSn.setProcessCode(reqBean.getProcessCode());
produceSn.setCraftCode(productionProcessContext.getCraftCode());
//TODO 获取下个工艺代码
//produceSn.setNextCraftCode();
produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue());
produceSn.setQcStatus(!StringUtils.isEmpty(productResult) ? Integer.valueOf(productResult) : MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue());
produceSn.setShiftCode(prodShiftContext.getShiftCode());
produceSn.setShiftGroup(prodShiftContext.getShiftGroup());
produceSn.setProcessLabelTemplate(part.getProcessLabelTemplate());
produceSn.setProdLabelTemplate(part.getProductLabelTemplate());
produceSn.setCustLabelTemplate(part.getCustLabelTemplate());
ConvertBean.serviceModelUpdate(produceSn, reqBean.getUserInfo());
produceSn.setOutWorkCenterTime(produceSn.getModifyDatetime());
produceSn.setLotNo(produceSn.getModifyDatetime().substring(0, 10));
produceSnRepository.save(produceSn);
}
} }

@ -0,0 +1,77 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
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.pojo.context.MesProductionPsOutContext;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import com.google.common.base.Objects;
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 java.util.ArrayList;
import java.util.List;
/**
* @Description :
* @Author : zxw
**/
@Slf4j
@Service
public class MesProductSnSaveStepServiceBak extends BaseStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private MesProduceSnRepository mesProduceSnRepository;
public static final String ORDER_NO_JIS_SORT = "ORDER_NO_JIS_SORT";
@Autowired
private IMesProductionDispatchContextStepService mesProductionDispatchContextStepService;
@Override
public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean();
StepResult stepResult = StepResult.getSuccessComplete();
// 获取加工结果
String result = mesProductionDispatchContextStepService.getProductResultContext(reqBean);
List<MesProductionPsOutContext> mesProduceSnContexts = mesProductionDispatchContextStepService.getProductionPsOutContext(reqBean);
List<MesProduceSn> mesProduceSns = new ArrayList<>();
if (CollectionUtils.isEmpty(mesProduceSnContexts)) {
foundExThrow(reqBean, "条码信息不能为空");
}
mesProduceSnContexts.forEach(mesProduceSnContext -> {
MesProduceSn mesProduceSn = new MesProduceSn();
//todo 要根据不同的加工结果,返回不同的结果 要分排序和非排序, 排序只保存工单对应的装配件、非排序要保存主条码和装配件记录。
// 如果是报废或者可疑需要编辑条码状态为不合格、并且nc判定需要新增一条记录
if (StringUtils.isEmpty(result) || Objects.equal(MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_OK.getValue(), result)) {
mesProduceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue());
} else if (Objects.equal(MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_SCRAP.getValue(), result)) {
mesProduceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.SCRAP.getValue());
} else if (Objects.equal(MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_SUSPICIOUS.getValue(), result)) {
mesProduceSn.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue());
}
mesProduceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue());
mesProduceSns.add(mesProduceSn);
});
mesProduceSnRepository.saveAll(mesProduceSns);
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "保存零件条码信息工步");
}
}

@ -71,13 +71,14 @@ public class MesProductionReocrdGenerateStepService extends BaseStepService {
*/ */
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariableList(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue()); MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariableList(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue());
MesWorkCell mesWorkCell = productionProcessContext.getWorkCell(); MesWorkCell mesWorkCell = productionProcessContext.getWorkCell();
MesProdShiftContext mesProdShiftKvBean = productionCustomContextStepService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode());
List<MesProductionPsOutContext> mesProduceSnContexts = mesProductionDispatchContextStepService.getProductionPsOutContext(reqBean); List<MesProductionPsOutContext> mesProduceSnContexts = mesProductionDispatchContextStepService.getProductionPsOutContext(reqBean);
List<MesProductionRecord> mesProductionRecords = new ArrayList<>(); List<MesProductionRecord> mesProductionRecords = new ArrayList<>();
mesProduceSnContexts.forEach(mesProductionPsOutContext -> { mesProduceSnContexts.forEach(mesProductionPsOutContext -> {
MesProductionRecord mesProductionRecord = getMesProductionRecord(productionProcessContext, mesProductionPsOutContext, reqBean); MesProductionRecord mesProductionRecord = getMesProductionRecord(productionProcessContext, mesProductionPsOutContext,mesProdShiftKvBean, reqBean);
ConvertBean.serviceModelInitialize(mesProductionRecord, reqBean.getUserInfo()); ConvertBean.serviceModelInitialize(mesProductionRecord, reqBean.getUserInfo());
mesProductionRecords.add(mesProductionRecord); mesProductionRecords.add(mesProductionRecord);
}); });
@ -91,7 +92,7 @@ public class MesProductionReocrdGenerateStepService extends BaseStepService {
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "生成加工记录成功"); return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "生成加工记录成功");
} }
private MesProductionRecord getMesProductionRecord(MesProductionProcessContext productionProcessContext, MesProductionPsOutContext mesProduceSn, StationRequestBean reqBean) { private MesProductionRecord getMesProductionRecord(MesProductionProcessContext productionProcessContext, MesProductionPsOutContext mesProduceSn,MesProdShiftContext mesProdShiftKvBean, StationRequestBean reqBean) {
MesProductionRecord mesProductionRecord = new MesProductionRecord(); MesProductionRecord mesProductionRecord = new MesProductionRecord();
mesProductionRecord.setSerialNumber(mesProduceSn.getSerialNumber()); mesProductionRecord.setSerialNumber(mesProduceSn.getSerialNumber());
@ -106,8 +107,9 @@ public class MesProductionReocrdGenerateStepService extends BaseStepService {
mesProductionRecord.setIsComplete(MesEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); mesProductionRecord.setIsComplete(MesEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
mesProductionRecord.setCompleteDateTime(DateUtil.formatDateTime(new Date())); mesProductionRecord.setCompleteDateTime(DateUtil.formatDateTime(new Date()));
mesProductionRecord.setLotNo(mesProduceSn.getLotNo()); mesProductionRecord.setLotNo(mesProduceSn.getLotNo());
//mesProductionRecord.setShiftGroup(); mesProductionRecord.setShiftGroup(mesProdShiftKvBean.getShiftGroup());
//mesProductionRecord.setWorkOrderNo(productionProcessContext.get); mesProductionRecord.setShiftCode(mesProdShiftKvBean.getShiftCode());
mesProductionRecord.setWorkOrderNo(mesProduceSn.getWorkOrderNo());
String mouldNo = ""; String mouldNo = "";
MesEquipVariableCollectContext mesFirstMouldNoCollectContext = mesProductionDispatchContextStepService.getFirstMouldNoContext(reqBean); MesEquipVariableCollectContext mesFirstMouldNoCollectContext = mesProductionDispatchContextStepService.getFirstMouldNoContext(reqBean);

@ -8,6 +8,7 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
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.model.ActorMessage; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.ActorMessage;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesOrderModel;
import cn.estsh.i3plus.mes.pcn.config.SpringExtProvider; import cn.estsh.i3plus.mes.pcn.config.SpringExtProvider;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker; import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker;
@ -22,9 +23,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
/** /**
* @Description : * @Description :
@ -73,7 +76,11 @@ public class MesVariableWhenFinishedReadStepService extends BaseStepService {
// 通过上下文获取工位设备信息 // 通过上下文获取工位设备信息
MesCellEquipContext curCellEquip = productionProcessContext.getCurCellEquip(); MesCellEquipContext curCellEquip = productionProcessContext.getCurCellEquip();
String mesProduceSnsStr = !CollectionUtils.isEmpty(mesProduceSnContexts) ? JSONObject.toJSONString(mesProduceSnContexts) : null; List<MesOrderModel> modelList = mesProduceSnContexts.stream().map(order ->
MesOrderModel.builder().workOrderNo(order.getWorkOrderNo()).productSn(order.getProductSn()).partNo(order.getPartNo()).build()
).collect(Collectors.toList());
String mesProduceSnsStr = !CollectionUtils.isEmpty(modelList) ? JSONObject.toJSONString(modelList) : null;
ActorMessage actorMessage = ActorMessage.builder() ActorMessage actorMessage = ActorMessage.builder()
.equipmentCode(curCellEquip.getEquipmentCode()) .equipmentCode(curCellEquip.getEquipmentCode())
.equipId(curCellEquip.getEquipId()) .equipId(curCellEquip.getEquipId())

@ -204,7 +204,7 @@ public class MesProductionCustomContextStepService extends BaseStepService imple
List<StationKvBean> stationKvBeans = getProductionStatisticsContext(reqBean); List<StationKvBean> stationKvBeans = getProductionStatisticsContext(reqBean);
if (CollectionUtils.isEmpty(stationKvBeans)) { if (CollectionUtils.isEmpty(stationKvBeans)) {
String name = "加数"; String name = "加数";
String value = count + ""; String value = count + "";
List<StationKvBean> generateStationKvBeans = StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), new StationKvBean(key, name, value), List<StationKvBean> generateStationKvBeans = StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), new StationKvBean(key, name, value),
new StationKvBean("color", "颜色", MesExtEnumUtil.COLOR.BLACK.getValue())); new StationKvBean("color", "颜色", MesExtEnumUtil.COLOR.BLACK.getValue()));

@ -60,7 +60,7 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp
return getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCT_RESULT_CONTEXT); return getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCT_RESULT_CONTEXT);
} }
//保存上下文加工结果 加工结果:成功/报废/可疑 【写入的值是变量类别代码】【报废/可疑: 在保存逻辑条码时有特殊业务处理】 //保存上下文加工结果 加工结果:成功/报废/可疑 【写入的值是变量类别代码对应的条码质量状态】【报废/可疑: 在保存逻辑条码时有特殊业务处理】
@Override @Override
public Boolean saveProductResultContext(StationRequestBean reqBean, String productResult) { public Boolean saveProductResultContext(StationRequestBean reqBean, String productResult) {
if (StringUtils.isEmpty(productResult)) return false; if (StringUtils.isEmpty(productResult)) return false;

@ -31,6 +31,12 @@ public class MesProductionPartContext implements Serializable {
@ApiParam("生产工单号") @ApiParam("生产工单号")
private String workOrderNo; private String workOrderNo;
@ApiParam("客户代码")
private String custCode;
@ApiParam("客户零件号")
private String custPartNo;
@ApiParam("工单数量") @ApiParam("工单数量")
private Double qty; private Double qty;
@ -56,6 +62,7 @@ public class MesProductionPartContext implements Serializable {
@ApiParam("信息来源") @ApiParam("信息来源")
private Integer messageSource; private Integer messageSource;
//根据一模多腔赋值 //根据一模多腔赋值
public MesProductionPartContext copyMouldMultiCavity(MesMouldMultiCavity mouldMultiCavity) { public MesProductionPartContext copyMouldMultiCavity(MesMouldMultiCavity mouldMultiCavity) {
BeanUtils.copyProperties(mouldMultiCavity, this, MesPcnExtConstWords.ID); BeanUtils.copyProperties(mouldMultiCavity, this, MesPcnExtConstWords.ID);

@ -1,8 +1,11 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.context; package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import lombok.Data; import lombok.Data;
import org.springframework.beans.BeanUtils;
import org.springframework.util.StringUtils;
import java.io.Serializable; import java.io.Serializable;
@ -14,7 +17,24 @@ public class MesProductionPsOutContext extends MesProduceSn implements Serializa
private static final long serialVersionUID = 5562937531822977296L; private static final long serialVersionUID = 5562937531822977296L;
@ApiParam(name = "数据关联键 非排序:snowflakeId") @ApiParam(name = "数据关联键")
private String foreignKey; private Integer foreignKey;
@ApiParam(name = "是否计算工单完成数量")
private Integer isCalcCompleteQty = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue();
public MesProductionPsOutContext() {}
public MesProductionPsOutContext copy(MesProduceSn produceSn, Integer foreignKey) {
if (null == produceSn) return null;
BeanUtils.copyProperties(produceSn, this);
this.foreignKey = foreignKey;
return this;
}
public MesProductionPsOutContext isCalcCompleteQty(String workOrderNo) {
if (!StringUtils.isEmpty(workOrderNo)) this.isCalcCompleteQty = CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue();
return this;
}
} }

@ -0,0 +1,27 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.model;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import io.swagger.annotations.ApiParam;
import lombok.Builder;
import lombok.Data;
import javax.persistence.Column;
import java.io.Serializable;
/**
*
*/
@Data
@Builder
public class MesOrderModel implements Serializable {
@ApiParam("产品条码")
private String productSn;
@ApiParam("生产工单号")
private String workOrderNo;
@ApiParam("物料号")
private String partNo;
}

@ -215,6 +215,9 @@ public class MesPcnExtConstWords {
// : // :
public static final String COLON = ":"; public static final String COLON = ":";
//过程条码默认生成规则
public static final String DEFAULT_SERIAL_NUMBER_RULE = "DEFAULT_SERIAL_NUMBER_RULE";
// 定制页面名称(默认) // 定制页面名称(默认)
public static final String CUSTOM_PAGE_NAME_DEFAULT = "CUSTOM_PAGE_NAME_DEFAULT"; public static final String CUSTOM_PAGE_NAME_DEFAULT = "CUSTOM_PAGE_NAME_DEFAULT";

Loading…
Cancel
Save