44517 装箱防错后吐条码需求(芜湖)临时保存提交

tags/yfai-pcn-ext-v2.8
王杰 4 months ago
parent 96900f5e7b
commit b695fc1742

@ -1,8 +1,9 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station.function;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.MesPackageNoGenerateStepService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.method.IMesPackageNoGenerateStepService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesPackageDataContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseSwsService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService;
@ -12,7 +13,9 @@ import cn.estsh.i3plus.pojo.mes.model.ButtonDynamicModel;
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.impp.framework.boot.exception.ImppBusiException;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@ -24,6 +27,7 @@ import java.util.stream.Collectors;
/**
* @Description :
**/
@Slf4j
@Service
public class MesFunctionPackageProgressService extends BaseSwsService implements IFsmModuleFunctionService {
@ -31,7 +35,7 @@ public class MesFunctionPackageProgressService extends BaseSwsService implements
private IMesProductionCustomContextStepService productionCustomContextStepService;
@Autowired
private MesPackageNoGenerateStepService packageNoGenerateStepService;
private IMesPackageNoGenerateStepService packageNoGenerateStepService;
@Override
public Object doCustomApiDispatch(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel) {
@ -69,63 +73,71 @@ public class MesFunctionPackageProgressService extends BaseSwsService implements
resultMap.put(MesPcnExtConstWords.DATA, resultList);
if (StringUtils.isEmpty(buttonDynamicModel.getFunctionValue())) return resultMap;
resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PICK.getValue()).scanInfo(buttonDynamicModel.getFunctionValue());
resultMap.put(MesPcnExtConstWords.DATA_TYPE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT.getValue());
MesPackageDataContext packageDataContext = JSONObject.parseObject(buttonDynamicModel.getFunctionValue(), MesPackageDataContext.class);
resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PICK.getValue()).scanInfo(packageDataContext.getPackageNo());
if (null == packageDataContext) {
return packResultMap(reqBean, resultBean, resultMap,
return doPackResultMap(reqBean, resultBean, resultMap,
String.format("生产线[%s]工位[%s]强制打包失败,参数异常!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()));
}
if (CollectionUtils.isEmpty(packageDataContextMap) || !packageDataContextMap.containsKey(packageDataContext.getPartNo())) {
return packResultMap(reqBean, resultBean, resultMap,
return doPackResultMap(reqBean, resultBean, resultMap,
String.format("生产线[%s]工位[%s]强制打包失败,当前已无零件号[%s]未封箱状态的包装信息!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), packageDataContext.getPartNo()));
}
List<MesPackageDataContext> packageDataContextList = JSONObject.parseArray(packageDataContextMap.get(packageDataContext.getPartNo()), MesPackageDataContext.class);
if (CollectionUtils.isEmpty(packageDataContextList) || !packageDataContextList.get(0).getPackageNo().equals(packageDataContext.getPackageNo())) {
return packResultMap(reqBean, resultBean, resultMap,
return doPackResultMap(reqBean, resultBean, resultMap,
String.format("生产线[%s]工位[%s]强制打包失败,打包进度列表中已经不存在包装条码[%s],请刷新重试!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), packageDataContext.getPackageNo()));
}
MesPackage packageDb = packageNoGenerateStepService.getMesPackage(reqBean.getOrganizeCode(), packageDataContextList.get(0).getPackageId());
if (null == packageDb) {
return packResultMap(reqBean, resultBean, resultMap,
return doPackResultMap(reqBean, resultBean, resultMap,
String.format("生产线[%s]工位[%s]强制打包失败,包装条码[%s]信息已经不存在,请刷新重试!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), packageDataContext.getPackageNo()));
}
StepResult stepResult = StepResult.getSuccessComplete();
doForcePrint(reqBean, resultBean, stepResult, packageDataContextList, packageDb);
try {
doForcePrint(reqBean, resultBean, stepResult, packageDataContextList, packageDb, packageDataContextMap);
} catch (ImppBusiException e) {
stepResult.msg(e.getMessage());
} catch (Exception e) {
stepResult.msg(e.getMessage());
}
if (!StringUtils.isEmpty(stepResult.getMsg())) {
return packResultMap(reqBean, resultBean, resultMap,
return doPackResultMap(reqBean, resultBean, resultMap,
String.format("生产线[%s]工位[%s]强制打包失败,%s", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), stepResult.getMsg()));
}
// 保存打包数据
packageDataContextMap.remove(packageDataContext.getPartNo());
productionCustomContextStepService.dispatchPackageDataContext(reqBean, packageDataContextMap);
resultList = resultList.stream().filter(o -> (null != o && !o.getPackageNo().equals(packageDataContext.getPackageNo()))).collect(Collectors.toList());
if (CollectionUtils.isEmpty(resultList)) resultMap.remove(MesPcnExtConstWords.DATA);
else resultMap.put(MesPcnExtConstWords.DATA, resultList);
resultMap.put(MesPcnExtConstWords.DATA_TYPE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT.getValue());
return packResultMap(reqBean, resultBean, resultMap, String.format("零件号[%s]强制封箱成功!", packageDataContext.getPartNo()));
return doPackResultMap(reqBean, resultBean, resultMap, String.format("零件号[%s]强制封箱成功!", packageDataContext.getPartNo()));
}
private Object packResultMap(StationRequestBean reqBean, StationResultBean resultBean, Map<String, Object> resultMap, String message) {
private Object doPackResultMap(StationRequestBean reqBean, StationResultBean resultBean, Map<String, Object> resultMap, String message) {
this.sendMessage(reqBean, resultBean, message, MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
resultMap.put(MesPcnExtConstWords.MESSAGE, message);
return resultMap;
}
private void doForcePrint(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List<MesPackageDataContext> packageDataContextList, MesPackage packageDb) {
packageNoGenerateStepService.savePackageDb(reqBean, packageDb, packageDataContextList.size(), true);
private void doForcePrint(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult,
List<MesPackageDataContext> packageDataContextList, MesPackage packageDb, Map<String, String> packageDataContextMap) {
packageNoGenerateStepService.savePackageDb(reqBean, packageDb, packageDataContextList.size(), true, false);
List<MesPackage> packageList = new ArrayList<>();
packageList.add(packageDb);
packageNoGenerateStepService.execPrint(reqBean, resultBean, stepResult, packageDataContextList.get(0), null, null, packageList, true);
MesProduceSnPrintModel printModel = packageNoGenerateStepService.printProduceSn(reqBean, resultBean, stepResult, packageDataContextList.get(0), null, null, packageList, true);
packageNoGenerateStepService.doPrint(reqBean, printModel);
packageNoGenerateStepService.savePackageDbById(reqBean, packageDb);
packageDataContextMap.remove(packageDb.getPartNo());
productionCustomContextStepService.dispatchPackageDataContext(reqBean, packageDataContextMap);
}
}

@ -7,6 +7,8 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepServi
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.method.IMesPackageNoGenerateStepService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesPackageDataContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesPackageRuleContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
@ -50,7 +52,7 @@ import java.util.stream.Collectors;
**/
@Slf4j
@Service("mesPackageNoGenerateStepService")
public class MesPackageNoGenerateStepService extends BaseStepService {
public class MesPackageNoGenerateStepService extends BaseStepService implements IMesPackageNoGenerateStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
@ -177,7 +179,8 @@ public class MesPackageNoGenerateStepService extends BaseStepService {
//判断存在包装信息则进行打印
if (!CollectionUtils.isEmpty(stepResult.getDataCollection())) {
execPrint(reqBean, resultBean, stepResult, packageRuleContext, labelTemplate, strategyService, (List<MesPackage>) stepResult.getDataCollection(), false);
MesProduceSnPrintModel printModel = printProduceSn(reqBean, resultBean, stepResult, packageRuleContext, labelTemplate, strategyService, (List<MesPackage>) stepResult.getDataCollection(), false);
doPrint(reqBean, printModel);
}
}
@ -301,7 +304,7 @@ public class MesPackageNoGenerateStepService extends BaseStepService {
//判断当前是否满包
Boolean isSealed = curQty >= packageRuleContext.getPackSpecQty().intValue();
//判断包装条码是否存在ID进行新增或者更新操作, 如果满足标包则标记满包状态跟打印状态
packageDb = savePackageDb(reqBean, packageDb, curQty, isSealed);
packageDb = savePackageDb(reqBean, packageDb, curQty, isSealed, true);
//判断统计方式,是否生成包装明细信息, 返回当前未满包的包装条码明细数据
List<MesPackageDataContext> resultList = insertPackageDetailAndBackUnSealedResultList(reqBean, packageRuleContext, packageDb, productSnList2Cur, isSealed);
@ -321,6 +324,7 @@ public class MesPackageNoGenerateStepService extends BaseStepService {
}
//根据ID查询包装信息
@Override
public MesPackage getMesPackage(String organizeCode, Long packageId) { return packageExtService.getMesPackage(organizeCode, packageId); }
//生成包装条码信息
@ -350,7 +354,8 @@ public class MesPackageNoGenerateStepService extends BaseStepService {
}
//判断包装条码是否存在ID进行新增或者更新操作, 如果满足标包则标记满包状态跟打印状态
public MesPackage savePackageDb(StationRequestBean reqBean, MesPackage packageDb, Integer curQty, Boolean isSealed) {
@Override
public MesPackage savePackageDb(StationRequestBean reqBean, MesPackage packageDb, Integer curQty, Boolean isSealed, Boolean isSave) {
if (!StringUtils.isEmpty(packageDb.getId())) {
//下面直接根据ID进行修改, 所以此处置为游离态
@ -365,8 +370,17 @@ public class MesPackageNoGenerateStepService extends BaseStepService {
packageDb.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue());
}
if (!isSave) return packageDb;
if (StringUtils.isEmpty(packageDb.getId())) return packageRepository.insert(packageDb);
savePackageDbById(reqBean, packageDb);
return packageDb;
}
@Override
public void savePackageDbById(StationRequestBean reqBean, MesPackage packageDb) {
packageRepository.updateByPropertiesNoSync(
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.ID},
new Object[]{reqBean.getOrganizeCode(), packageDb.getId()},
@ -374,8 +388,6 @@ public class MesPackageNoGenerateStepService extends BaseStepService {
MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.SYSTEM_SYNC_DATE_TIME},
new Object[]{packageDb.getQty(), packageDb.getIsSealed(), packageDb.getPrintStatus(), packageDb.getLotNo(),
packageDb.getModifyUser(), packageDb.getModifyDatetime(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesPcnExtConstWords.EMPTY});
return packageDb;
}
//判断统计方式,是否生成包装明细信息, 返回当前未满包的包装条码明细数据
@ -443,7 +455,8 @@ public class MesPackageNoGenerateStepService extends BaseStepService {
return null;
}
public void execPrint(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesPackageRuleContext packageRuleContext,
@Override
public MesProduceSnPrintModel printProduceSn(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesPackageRuleContext packageRuleContext,
MesLabelTemplate labelTemplate, IPrintTemplateStrategyService strategyService, List<MesPackage> packageList, Boolean isAsyn) {
if (null == strategyService) {
//查询模版信息
@ -452,10 +465,7 @@ public class MesPackageNoGenerateStepService extends BaseStepService {
}
if (null == strategyService) {
if (!isAsyn) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("零件编码[%s]未配置有效的包装条码模版[%s]信息!", packageRuleContext.getPartNo(), packageRuleContext.getPackageTemplate()));
else {
stepResult.msg(String.format("零件编码[%s]未配置有效的包装条码模版[%s]信息!", packageRuleContext.getPartNo(), packageRuleContext.getPackageTemplate()));
return;
}
else MesPcnException.throwBusiException("零件编码[%s]未配置有效的包装条码模版[%s]信息!", packageRuleContext.getPartNo(), packageRuleContext.getPackageTemplate());
}
MesProduceSnPrintModel mesProduceSnPrintModel = new MesProduceSnPrintModel();
@ -472,22 +482,21 @@ public class MesPackageNoGenerateStepService extends BaseStepService {
printModel = strategyService.execute(null, mesProduceSnPrintModel, null, stepResult, reqBean, true);
} catch (ImppBusiException e) {
if (!isAsyn) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), e.getErrorDetail());
else {
stepResult.msg(e.getErrorDetail());
return;
}
else MesPcnException.throwBusiException(e.getErrorDetail());
} catch (Exception e) {
String webMsg = String.format("零件编码[%s]包装条码模版[%s]打印包装条码%s", packageRuleContext.getPartNo(), packageRuleContext.getPackageTemplate(), fsmRouteDataService.handleFsmCfgOrDefault(reqBean, MesPcnEnumUtil.FSM_CFG.FSM_EXCEPTION_MSG.getCode()));
if (!isAsyn) {
this.sendMessage(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.ERROR.getValue()), webMsg, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
this.cacheException(reqBean, reqBean.getStepName(), webMsg, e, true);
foundExThrowNoShowMsg();
} else {
stepResult.msg(webMsg);
return;
}
} else MesPcnException.throwBusiException("%s %s!", webMsg, e.toString());
}
return printModel;
}
@Override
public void doPrint(StationRequestBean reqBean, MesProduceSnPrintModel printModel) {
if (CollectionUtils.isEmpty(printModel.getPrintContextList())) return;
//发送打印信息

@ -0,0 +1,27 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step.method;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesPackageRuleContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel;
import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplate;
import cn.estsh.i3plus.pojo.mes.bean.MesPackage;
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 java.util.List;
public interface IMesPackageNoGenerateStepService {
MesPackage getMesPackage(String organizeCode, Long packageId);
MesPackage savePackageDb(StationRequestBean reqBean, MesPackage packageDb, Integer curQty, Boolean isSealed, Boolean isSave);
void savePackageDbById(StationRequestBean reqBean, MesPackage packageDb);
MesProduceSnPrintModel printProduceSn(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesPackageRuleContext packageRuleContext,
MesLabelTemplate labelTemplate, IPrintTemplateStrategyService strategyService, List<MesPackage> packageList, Boolean isAsyn);
void doPrint(StationRequestBean reqBean, MesProduceSnPrintModel printModel);
}
Loading…
Cancel
Save