From 47e87b8fe1fb3dca51b662092e1bed8ff6be0be3 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Mon, 13 Jan 2025 09:59:04 +0800 Subject: [PATCH 01/10] =?UTF-8?q?=2044517=20=E8=A3=85=E7=AE=B1=E9=98=B2?= =?UTF-8?q?=E9=94=99=E5=90=8E=E5=90=90=E6=9D=A1=E7=A0=81=E9=9C=80=E6=B1=82?= =?UTF-8?q?=EF=BC=88=E8=8A=9C=E6=B9=96=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/pcn/api/base/IMesPackingRuleService.java | 26 ++ .../mes/pcn/api/busi/IMesPackageExtService.java | 18 + .../IMesProductionCustomContextStepService.java | 10 + .../IMesProductionProcessContextStepService.java | 9 + .../serviceimpl/base/MesPackingRuleService.java | 59 +++ .../serviceimpl/busi/MesPackageExtService.java | 30 ++ .../WuhuPackageNumberRuleStrategyService.java | 61 +++ .../print/strategy/WuhuPackageNoPrintStrategy.java | 101 +++++ .../step/MesPackageNoGenerateStepService.java | 485 +++++++++++++++++++++ .../MesProductionCustomContextStepService.java | 26 ++ .../MesProductionProcessContextStepService.java | 20 + .../pcn/pojo/context/MesPackageDataContext.java | 37 ++ .../pcn/pojo/context/MesPackageRuleContext.java | 61 +++ .../mes/pcn/pojo/model/MesProduceSnPrintModel.java | 19 +- .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 28 +- 15 files changed, 976 insertions(+), 14 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesPackingRuleService.java create mode 100644 modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesPackageExtService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesPackingRuleService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPackageExtService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/numberrule/WuhuPackageNumberRuleStrategyService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/WuhuPackageNoPrintStrategy.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java create mode 100644 modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesPackageDataContext.java create mode 100644 modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesPackageRuleContext.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesPackingRuleService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesPackingRuleService.java new file mode 100644 index 0000000..5cb6d17 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesPackingRuleService.java @@ -0,0 +1,26 @@ +package cn.estsh.i3plus.ext.mes.pcn.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesPackingDefine; +import cn.estsh.i3plus.pojo.mes.bean.MesPackingRule; +import cn.estsh.i3plus.pojo.mes.bean.MesPackingRuleDetail; +import io.swagger.annotations.ApiOperation; + +/** + * @Description : 成品包装规则 + * @Reference : + * @Author : wangjie + * @CreateDate 2024/6/13 15:18 + * @Modify: + **/ +public interface IMesPackingRuleService { + + @ApiOperation(value = "根据物料代码,零件类型查询成品包装明细规则") + MesPackingRuleDetail getPackingRuleDetail(String organizeCode, String partNo, String partType); + + @ApiOperation(value = "根据包装代码查询成品包装规则") + MesPackingRule getPackingRule(String organizeCode, String packageCode); + + @ApiOperation(value = "根据箱类别代号查询包装定义") + MesPackingDefine getPackingDefine(String organizeCode, String packCode); + +} diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesPackageExtService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesPackageExtService.java new file mode 100644 index 0000000..eeeca27 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesPackageExtService.java @@ -0,0 +1,18 @@ +package cn.estsh.i3plus.ext.mes.pcn.api.busi; + +import cn.estsh.i3plus.pojo.mes.bean.MesPackage; +import io.swagger.annotations.ApiOperation; + +/** + * @Description : 包装信息 + * @Reference : + * @Author : wangjie + * @CreateDate 2024/6/13 15:18 + * @Modify: + **/ +public interface IMesPackageExtService { + + @ApiOperation(value = "根据ID查询包装信息") + MesPackage getMesPackage(String organizeCode, Long id); + +} diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionCustomContextStepService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionCustomContextStepService.java index 1bb121b..220d388 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionCustomContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionCustomContextStepService.java @@ -9,6 +9,7 @@ import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import io.swagger.annotations.ApiOperation; import java.util.List; +import java.util.Map; /** * 获取生产过程上下文对象接口【BUSI】 @@ -93,4 +94,13 @@ public interface IMesProductionCustomContextStepService { @ApiOperation(value = "保存设备计数") void dispatchShortCounter(StationRequestBean reqBean, Integer shortCounter); + @ApiOperation(value = "保存打包数据") + Boolean dispatchPackageDataContext(StationRequestBean reqBean, Map packageDataContextMap); + + @ApiOperation(value = "获取打包数据") + Map getPackageDataContext(StationRequestBean reqBean); + + @ApiOperation(value = "删除打包数据") + void removePackageDataContext(StationRequestBean reqBean); + } diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionProcessContextStepService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionProcessContextStepService.java index 51ca58e..5440ff1 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionProcessContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionProcessContextStepService.java @@ -155,4 +155,13 @@ public interface IMesProductionProcessContextStepService { @ApiOperation(value = "获取生产线下的工位集合") Map dispatchWorkCellMap(StationRequestBean reqBean); + @ApiOperation(value = "获取包装规则信息") + Map getPackageRuleContext(StationRequestBean reqBean); + + @ApiOperation(value = "保存包装规则信息") + Boolean dispatchPackageRuleContext(StationRequestBean reqBean, Map packageRuleContextMap); + + @ApiOperation(value = "删除包装规则信息") + void removePackageRuleContext(StationRequestBean reqBean); + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesPackingRuleService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesPackingRuleService.java new file mode 100644 index 0000000..81ec448 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesPackingRuleService.java @@ -0,0 +1,59 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPackingRuleService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesPackingDefine; +import cn.estsh.i3plus.pojo.mes.bean.MesPackingRule; +import cn.estsh.i3plus.pojo.mes.bean.MesPackingRuleDetail; +import cn.estsh.i3plus.pojo.mes.repository.MesPackingDefineRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesPackingRuleDetailRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesPackingRuleRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +/** + * @Description : 成品包装规则 + * @Reference : + * @Author : wangjie + * @CreateDate 2024/6/13 15:18 + * @Modify: + **/ +@Service +public class MesPackingRuleService implements IMesPackingRuleService { + + @Autowired + private MesPackingRuleDetailRepository packingRuleDetailRepository; + + @Autowired + private MesPackingRuleRepository packingRuleRepository; + + @Autowired + private MesPackingDefineRepository packingDefineRepository; + + @Override + public MesPackingRuleDetail getPackingRuleDetail(String organizeCode, String partNo, String partType) { + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(partNo) || StringUtils.isEmpty(partType)) return null; + return packingRuleDetailRepository.getByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.PART_NO, MesPcnExtConstWords.PART_TYPE}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), partNo, partType}); + } + + @Override + public MesPackingRule getPackingRule(String organizeCode, String packageCode) { + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(packageCode)) return null; + return packingRuleRepository.getByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.PACKAGE_CODE}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), packageCode}); + } + + @Override + public MesPackingDefine getPackingDefine(String organizeCode, String packCode) { + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(packCode)) return null; + return packingDefineRepository.getByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.PACK_CODE}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), packCode}); + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPackageExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPackageExtService.java new file mode 100644 index 0000000..fc24bf7 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesPackageExtService.java @@ -0,0 +1,30 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesPackageExtService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesPackage; +import cn.estsh.i3plus.pojo.mes.repository.MesPackageRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @Description : 包装信息 + * @Reference : + * @Author : wangjie + * @CreateDate 2024/6/13 15:18 + * @Modify: + **/ +@Service +public class MesPackageExtService implements IMesPackageExtService { + + @Autowired + private MesPackageRepository packageRepository; + + @Override + public MesPackage getMesPackage(String organizeCode, Long id) { + return packageRepository.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}); + } +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/numberrule/WuhuPackageNumberRuleStrategyService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/numberrule/WuhuPackageNumberRuleStrategyService.java new file mode 100644 index 0000000..5d6e53a --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/numberrule/WuhuPackageNumberRuleStrategyService.java @@ -0,0 +1,61 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.numberrule; + +import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesPackageRuleContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.mes.pcn.api.iservice.busi.INumberRulePackAttributeStrategyService; +import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Map; +import java.util.StringJoiner; + +/** + * @Description : MES-包装条码(芜湖打包) + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/10/28 16:47 + * @Modify: + **/ +@Component +public class WuhuPackageNumberRuleStrategyService implements INumberRulePackAttributeStrategyService { + + @Override + public GenSerialNoModel execute(GenSerialNoModel genSerialNoModel) { + Map dataMap = genSerialNoModel.getDataMap(); + MesPackageRuleContext packageRuleContext = !CollectionUtils.isEmpty(dataMap) ? (MesPackageRuleContext) dataMap.get(MesPackageRuleContext.class.getSimpleName()) : null; + if (null == packageRuleContext) MesPcnException.throwBusiException("生成包装条码缺少必要参数[规则对象]"); + genSerialNoModel.setDynamicRule( + new StringJoiner(MesPcnExtConstWords.COMMA) + .add(((new SimpleDateFormat(MesPcnExtConstWords.DATE_FORMAT_SHORT)).format(new Date()))) + .add(String.format("%.1f", packageRuleContext.getPackSpecQty())) + .add(packageRuleContext.getUnit()) + .toString() + ); + return genSerialNoModel; + } + +} + +// YFWHU|YFNSC901C241223042722|C901|401007574AAABN|9.0|EA|C901|20241223| +//YFWHU|YFNS {Prefix} +//C901 {ORG} +//C {SPILTRULE} +//241223 {DYNAMICRULE} 2位年月日 +//042722 {SERIALNO} 6位 +//| {SPILTRULE} +//C901 {ORG} +//| {SPILTRULE} +//401007574AAABN {PARTNO} +//| {SPILTRULE} +//9.0 {DYNAMICRULE} 标包 一位小数 +//| {SPILTRULE} +//EA {DYNAMICRULE} 单位 +//| {SPILTRULE} +//C901 {ORG} +//| {SPILTRULE} +//20241223 {YEAR}{MONTH}{DAY} +//| {SPILTRULE} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/WuhuPackageNoPrintStrategy.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/WuhuPackageNoPrintStrategy.java new file mode 100644 index 0000000..4818c7e --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/WuhuPackageNoPrintStrategy.java @@ -0,0 +1,101 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.strategy; + +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesCustomerPartService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesProduceSnPrintModel; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.pojo.mes.bean.MesCustomerPart; +import cn.estsh.i3plus.pojo.mes.bean.MesNumberRule; +import cn.estsh.i3plus.pojo.mes.bean.MesPackage; +import cn.estsh.i3plus.pojo.mes.bean.MesPrintedSnLog; +import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import cn.estsh.i3plus.pojo.mes.model.StepResult; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.*; + +/** + * @Description : 芜湖包装条码打印 + * @Reference : + * @Author : wangjie + * @CreateDate : 2024/9/29 16:43 + * @Modify: + **/ +@Component +@Slf4j +public class WuhuPackageNoPrintStrategy implements IPrintTemplateStrategyService { + + @Autowired + private IMesCustomerPartService mesCustomerPartService; + + @Override + public MesProduceSnPrintModel execute(GenSerialNoModel genSerialNoModel, MesProduceSnPrintModel model, + MesNumberRule numberRule, StepResult stepResult, StationRequestBean reqBean, + Boolean isStep) { + + MesCustomerPart customerPart = (!Objects.isNull(genSerialNoModel) && + !CollectionUtils.isEmpty(genSerialNoModel.getDataMap()) && genSerialNoModel.getDataMap().containsKey(MesCustomerPart.class.getSimpleName())) + ? (MesCustomerPart) genSerialNoModel.getDataMap().get(MesCustomerPart.class.getSimpleName()) + : mesCustomerPartService.getMesCustomerPart(model.getOrganizeCode(), model.getPartNo()); + if (null == customerPart) MesPcnException.throwBusiException("零件号[%s]未维护客户物料信息", model.getPartNo()); + + // 返回的结果集合 + List> printDataMapList = new ArrayList<>(); + if (!isStep) { + //TODO 包装条码补打 + } else { + model.getPackageList().forEach(o -> printDataMapList.add(getPrintMap(model, o, customerPart))); + List> resultMapList = new ArrayList<>(); + resultMapList.add(packResultMap(model, printDataMapList)); + model.setPrintContextList(resultMapList); + } + + return model; + } + + private Map packResultMap(MesProduceSnPrintModel printModel, List> printTemplateDateList) { + Map resultMap = new HashMap<>(); + resultMap.put(MesPcnExtConstWords.LABEL_TEMPLATE, printModel.getMesLabelTemplate()); + resultMap.put(MesPcnExtConstWords.TEMPLATE_DATA, printTemplateDateList); + resultMap.put(MesPcnExtConstWords.TEMPLATE_CODE, printModel.getMesLabelTemplate().getTemplateCode()); + resultMap.put(MesPcnExtConstWords.PRINTER, printModel.getPrinter()); + return resultMap; + } + + private MesPrintedSnLog getMesPrintedSnLog(MesPackage packageDb, String userName, String printData) { + MesPrintedSnLog snLog = new MesPrintedSnLog(); + snLog.setBarcode(packageDb.getPackageNo()); + snLog.setPartNo(packageDb.getPartNo()); + snLog.setPartName(packageDb.getPartName()); + snLog.setPrintData(printData); + snLog.setOrganizeCode(packageDb.getOrganizeCode()); + ConvertBean.serviceModelInitialize(snLog, userName); + return snLog; + } + + private Map getPrintMap(MesProduceSnPrintModel model, MesPackage packageDb, MesCustomerPart customerPart) { + Map resultMap = new HashMap<>(); + resultMap.put(MesPcnExtConstWords.PART_NO, packageDb.getPartNo()); + resultMap.put(MesPcnExtConstWords.PART_NAME, packageDb.getPartNo()); + resultMap.put(MesPcnExtConstWords.CUST_PART_NO, customerPart.getCustPartNo()); + resultMap.put(MesPcnExtConstWords.QR_CODE, packageDb.getPackageNo()); + resultMap.put(MesPcnExtConstWords.QTY, packageDb.getQty().intValue()); + resultMap.put(MesPcnExtConstWords.UNIT, packageDb.getUnit()); + resultMap.put(MesPcnExtConstWords.PACK_SPEC_QTY, packageDb.getPackSpecQty().intValue()); + resultMap.put(MesPcnExtConstWords.LOT_NO, packageDb.getLotNo().replaceAll(MesPcnExtConstWords.SEPARATOR, MesPcnExtConstWords.SLANT_R)); + // YFWHU|YFNSC901C241223042722|C901|401007574AAABN|9.0|EA|C901|20241223| + // YFNSC901C241223042722 截取原始条码的 第7位到27位 + resultMap.put(MesPcnExtConstWords.BAR_CODE, packageDb.getPackageNo().length() >= 27 ? packageDb.getPackageNo().substring(6, 27) : packageDb.getPackageNo()); + resultMap.put(MesPcnExtConstWords.MODIFY_DATE_TIME, packageDb.getModifyDatetime().replaceAll(MesPcnExtConstWords.SEPARATOR, MesPcnExtConstWords.SLANT_R)); + model.getMesPrintedSnLogList().add(getMesPrintedSnLog(packageDb, model.getUserName(), JSONObject.toJSONString(resultMap))); + return resultMap; + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java new file mode 100644 index 0000000..daf3eb2 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java @@ -0,0 +1,485 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; + +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesPackingRuleService; +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesTemplateService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesPackageExtService; +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.IMesProductionProcessContextStepService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.print.IPrintTemplateStrategyService; +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; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext; +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.actor.shipping.dispatch.IFsmRouteDataService; +import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.MathOperation; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel; +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.IMesPrintedSnLogRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesPackageDetailRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesPackageRepository; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.util.SpringContextsUtil; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; +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.*; +import java.util.stream.Collectors; + +/** + * @Description : 打包工步 + * @Author : wangjie + **/ +@Slf4j +@Service("mesPackageNoGenerateStepService") +public class MesPackageNoGenerateStepService extends BaseStepService { + + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + @Autowired + private IMesProductionCustomContextStepService productionCustomContextStepService; + + @Autowired + private IMesPackingRuleService packingRuleService; + + @Autowired + private IMesPackageExtService packageExtService; + + @Autowired + private IMesTemplateService templateService; + + @Autowired + private ISyncFuncService syncFuncService; + + @Autowired + private IFsmRouteDataService fsmRouteDataService; + + @Autowired + private MesPackageRepository packageRepository; + + @Autowired + private IMesPrintedSnLogRepository printedSnLogRepository; + + @Autowired + private MesPackageDetailRepository packageDetailRepository; + + @Autowired + private EntityManager entityManager; + + @Override + public StepResult execute(StationRequestBean reqBean) { + + StationResultBean resultBean = new StationResultBean(); + + StepResult stepResult = StepResult.getSuccessComplete(); + + //获取上下文信息 + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean); + + //配置错误 抛出异常 + if (!productionProcessContext.getSuccess()) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + + //存储生产过程上下文对象 + productionProcessContextStepService.dispatchProductionProcessContext(reqBean, productionProcessContext); + + //从上下文中取出生产线对象 + MesWorkCenter workCenter = productionProcessContext.getWorkCenter(); + + //排序线 直接跳过 + if (MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue() == workCenter.getCenterType()) return stepResult; + + //获取上下文产出条码数据信息集合 + List productionPsOutContextList = productionDispatchContextStepService.getProductionPsOutContext(reqBean); + + if (CollectionUtils.isEmpty(productionPsOutContextList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前不存在产出零件条码信息,请重置工序解决!"); + + //产出条码根据零件号分组 + Map> productSnMap2Part = productionPsOutContextList.stream().filter(o -> null != o) + .collect(Collectors.groupingBy(MesProductionPsOutContext::getPartNo, Collectors.mapping(MesProductionPsOutContext::getProductSn, Collectors.toList()))); + + //获取包装规则信息 + Map packageRuleContextMap = productionProcessContextStepService.getPackageRuleContext(reqBean); + Integer initQty = CollectionUtils.isEmpty(packageRuleContextMap) ? MesPcnExtConstWords.ZERO : packageRuleContextMap.size(); + + //获取打包数据 + Map packageDataContextMap = productionCustomContextStepService.getPackageDataContext(reqBean); + + //不同的零件号分别打包处理 + for (Map.Entry> entry : productSnMap2Part.entrySet()) { + + if (null == entry) continue; + + //解析当前零件已经存在的包装明细 + List packageDataContextList = (CollectionUtils.isEmpty(packageDataContextMap) || + !packageDataContextMap.containsKey(entry.getKey())) ? null : JSONObject.parseArray(packageDataContextMap.get(entry.getKey()), MesPackageDataContext.class); + + //获取生产过程打包规则 + MesPackageRuleContext packageRuleContext; + if (!CollectionUtils.isEmpty(packageDataContextList) || (!CollectionUtils.isEmpty(packageRuleContextMap) && packageRuleContextMap.containsKey(entry.getKey()))) { + //从缓存中获取, 如果存在包装信息, 则使用上次获取的包装信息 + packageRuleContext = !CollectionUtils.isEmpty(packageDataContextList) ? packageDataContextList.get(0) : packageRuleContextMap.get(entry.getKey()); + } else { + //获取包装规则信息 + packageRuleContext = getPackageRuleContext(reqBean, entry.getKey()); + } + + //无生产过程打包规则时, 忽略当前零件 + if (null == packageRuleContext) continue; + + //更新包装规则信息 + if (null == packageRuleContextMap) packageRuleContextMap = new HashMap<>(); + if (!packageRuleContextMap.containsKey(entry.getKey())) packageRuleContextMap.put(entry.getKey(), packageRuleContext); + + MesLabelTemplate labelTemplate = null; + IPrintTemplateStrategyService strategyService = null; + + if (CollectionUtils.isEmpty(packageDataContextList)) { + //查询模版信息 + labelTemplate = templateService.getLabelTemplate(packageRuleContext.getPackageTemplate(), reqBean.getOrganizeCode()); + strategyService = (null != labelTemplate && !StringUtils.isEmpty(labelTemplate.getMethodCode())) ? (IPrintTemplateStrategyService) SpringContextsUtil.getBean(labelTemplate.getMethodCode()) : null; + if (null == strategyService) { + this.sendMessage(reqBean, new StationResultBean().writeDbLog(), String.format("零件编码[%s]未配置有效的包装条码模版[%s]信息!", + packageRuleContext.getPartNo(), packageRuleContext.getPackageTemplate()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + continue; + } + } + + //生成包装及明细, 根据标包数量判断是否执行打印 [递归] + stepResult.setDataCollection(new ArrayList()); + packageDataContextList = doHandlePackagePrint(reqBean, stepResult, packageRuleContext, packageDataContextList, entry.getValue()); + + //更新实时的打包数据 + if (CollectionUtils.isEmpty(packageDataContextList)) packageDataContextMap.remove(entry.getKey()); + else packageDataContextMap.put(entry.getKey(), JSONObject.toJSONString(packageDataContextList)); + + //判断存在包装信息则进行打印 + if (!CollectionUtils.isEmpty(stepResult.getDataCollection())) { + execPrint(reqBean, resultBean, stepResult, packageRuleContext, labelTemplate, strategyService, (List) stepResult.getDataCollection()); + } + + } + + //保存包装规则信息 + if (initQty != packageRuleContextMap.size()) productionProcessContextStepService.dispatchPackageRuleContext(reqBean, packageRuleContextMap); + // 保存打包数据 + productionCustomContextStepService.dispatchPackageDataContext(reqBean, packageDataContextMap); + + return stepResult; + + } + + //获取包装规则信息 + private MesPackageRuleContext getPackageRuleContext(StationRequestBean reqBean, String partNo) { + + //根据 物料代码,零件类型=包装物 查询成品包装明细规则 + MesPackingRuleDetail packingRuleDetail = packingRuleService.getPackingRuleDetail(reqBean.getOrganizeCode(), partNo, MesExtEnumUtil.PACKING_RULE_DETAIL_PART_TYPE.P.getValue()); + if (null == packingRuleDetail) { + this.sendMessage(reqBean, new StationResultBean().writeDbLog(), String.format("零件编码[%s]未配置包装物类型的成品包装明细规则信息!", + partNo), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return null; + } + + if (StringUtils.isEmpty(packingRuleDetail.getPackageCode()) || + StringUtils.isEmpty(packingRuleDetail.getPackSpecQty()) || MathOperation.compareTo(packingRuleDetail.getPackSpecQty(), new Double(0)) == 0) { + this.sendMessage(reqBean, new StationResultBean().writeDbLog(), String.format("零件编码[%s]配置包装物类型的成品包装明细规则信息中必要信息无效:包装代码[%s]包装规格数量[%s]!", + partNo, packingRuleDetail.getPackageCode(), packingRuleDetail.getPackSpecQty()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return null; + } + + //根据包装代码查询成品包装规则 + MesPackingRule packingRule = packingRuleService.getPackingRule(reqBean.getOrganizeCode(), packingRuleDetail.getPackageCode()); + if (null == packingRule) { + this.sendMessage(reqBean, new StationResultBean().writeDbLog(), String.format("零件编码[%s]包装物类型对应的包装代码[%s]未配置成品包装规则信息!", + partNo, packingRuleDetail.getPackageCode()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return null; + } + + String generateTypeName = MesExtEnumUtil.PACKING_RULE_GENERATE_TYPE.valueOfDescription(packingRule.getGenerateType()); + String packageBarcodeRule = packingRule.getPackageBarcodeRule(); + String packageTemplate = packingRule.getPackageTemplate(); + String printer = packingRule.getPrinter(); + + //如果 packageBarcodeRule || packageTemplate || printer 有一个为空, 则需要根据 箱类别代号查询包装定义 + if (StringUtils.isEmpty(generateTypeName) || (StringUtils.isEmpty(packingRule.getPackCode()) && + (StringUtils.isEmpty(packageBarcodeRule) || StringUtils.isEmpty(packageTemplate) || StringUtils.isEmpty(printer)))) { + this.sendMessage(reqBean, new StationResultBean().writeDbLog(), String.format("零件编码[%s]包装物类型对应的包装代码[%s]配置的成品包装规则信息中必要信息无效:统计方式[%s]箱类别代号[%s]!", + partNo, packingRuleDetail.getPackageCode(), StringUtils.isEmpty(generateTypeName) ? MesPcnExtConstWords.EMPTY : generateTypeName, packingRule.getPackCode()), + MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return null; + } + + //判断是否需要查询包装定义 + if (StringUtils.isEmpty(packageBarcodeRule) || StringUtils.isEmpty(packageTemplate) || StringUtils.isEmpty(printer)) { + //根据箱类别代号查询包装定义 + MesPackingDefine packingDefine = packingRuleService.getPackingDefine(reqBean.getOrganizeCode(), packingRule.getPackCode()); + if (null == packingDefine) { + this.sendMessage(reqBean, new StationResultBean().writeDbLog(), String.format("零件编码[%s]包装物类型对应的包装代码[%s]配置成品包装规则信息中的箱类别代号[%s]未维护包装定义信息!", + partNo, packingRuleDetail.getPackageCode(), packingRule.getPackCode()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return null; + } + + //如果为空, 则取包装定义中维护的信息 + if (StringUtils.isEmpty(packageBarcodeRule)) packageBarcodeRule = packingDefine.getPackageBarcodeRule(); + if (StringUtils.isEmpty(packageTemplate)) packageTemplate = packingDefine.getPackageTemplate(); + if (StringUtils.isEmpty(printer)) printer = packingDefine.getPrinter(); + + //此时 packageBarcodeRule || packageTemplate || printer 仍有一个为空则 记录日志 忽略当前零件的打包 + if (StringUtils.isEmpty(packageBarcodeRule) || StringUtils.isEmpty(packageTemplate) || StringUtils.isEmpty(printer)) { + this.sendMessage(reqBean, new StationResultBean().writeDbLog(), String.format("零件编码[%s]包装物类型对应的包装代码[%s]配置的成品包装规则信息中必要信息无效:编码规则[%s]模版[%s]打印机[%s]!", + partNo, packingRuleDetail.getPackageCode(), packageBarcodeRule, packageTemplate, printer), + MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return null; + } + } + + //封装包装规则信息 + MesPackageRuleContext packageRuleContext = new MesPackageDataContext(); + BeanUtils.copyProperties(packingRuleDetail, packageRuleContext); + BeanUtils.copyProperties(packingRule, packageRuleContext); + packageRuleContext.setPackageBarcodeRule(packageBarcodeRule); + packageRuleContext.setPackageTemplate(packageTemplate); + packageRuleContext.setPrinter(printer); + return packageRuleContext; + } + + //生成包装及明细, 根据标包数量判断是否执行打印 [递归] + private List doHandlePackagePrint(StationRequestBean reqBean, StepResult stepResult, + MesPackageRuleContext packageRuleContext, List packageDataContextList, List productSnList) { + + //缓存的包装条码明细数量 + Integer cachedQty = CollectionUtils.isEmpty(packageDataContextList) ? MesPcnExtConstWords.ZERO : packageDataContextList.size(); + //当前满足标包的差额数量 + Integer needQty = packageRuleContext.getPackSpecQty().intValue() - cachedQty; + + //当前满足标包的差额条码 + List productSnList2Cur; + //除去当前满足标包的差额条码后的剩余条码 + List productSnList2Remain = null; + + //当前零件剩余未打包条码 如果小于等于 当前满足标包的差额数量, 则直接将 未打包条码赋给当前满足标包的差额条码, 否则 截取条码 + if (productSnList.size() <= needQty) { + productSnList2Cur = productSnList; + } else { + productSnList2Cur = productSnList.subList(0, needQty); + productSnList2Remain = productSnList.subList(needQty, productSnList.size()); + } + + MesPackage packageDb = null; + //判断是否存在缓存的包装条码明细信息,如果进行递归则已无包装条码, 则重新生成信息的包装条码 + if (!CollectionUtils.isEmpty(packageDataContextList)) packageDb = packageExtService.getMesPackage(reqBean.getOrganizeCode(), packageDataContextList.get(0).getPackageId()); + //缓存中的包装条码也可能在DB中已被删除, 所以这里直接判断 包装条码信息是否为空则生成包装条码信息 + if (null == packageDb) packageDb = insertMesPackage(reqBean, packageRuleContext); + + //如果包装条码未空, 说明上面生成包装条码的时候 根据编码规则生成出现问题, 则直接退出, 记录日志, 忽略当前零件的打包 + if (null == packageDb) return null; + + //当前的实际打包数量 = 缓存的包装条码明细数量 + 当前满足标包的差额条码的个数 + Integer curQty = cachedQty + productSnList2Cur.size(); + //判断当前是否满包 + Boolean isSealed = curQty >= packageRuleContext.getPackSpecQty().intValue(); + //判断包装条码是否存在ID进行新增或者更新操作, 如果满足标包则标记满包状态跟打印状态 + packageDb = savePackageDb(reqBean, packageDb, curQty, isSealed); + + //判断统计方式,是否生成包装明细信息, 返回当前未满包的包装条码明细数据 + List resultList = insertPackageDetailAndBackUnSealedResultList(reqBean, packageRuleContext, packageDb, productSnList2Cur, isSealed); + + //如果当前的实际打包数量不满足标包, 则将此前已经缓存的条码合并到 当前未满包的包装条码明细数据resultList中 + if (!CollectionUtils.isEmpty(resultList) && !CollectionUtils.isEmpty(packageDataContextList)) resultList.addAll(packageDataContextList); + + //判断满包 存储打包信息 + if (isSealed) stepResult.getDataCollection().add(packageDb); + + //如果已无剩余条码, 则返回当前未满包的包装条码明细数据resultList + if (CollectionUtils.isEmpty(productSnList2Remain)) return resultList; + + //传递剩余条码进行递归处理: 此时packageDataContextList直接为null + return doHandlePackagePrint(reqBean, stepResult, packageRuleContext, null, productSnList2Remain); + + } + + //生成包装条码信息 + private MesPackage insertMesPackage(StationRequestBean reqBean, MesPackageRuleContext packageRuleContext) { + //根据编码规则生成包装条码 + String packageNo = doGereratePackageNo(reqBean, packageRuleContext); + if (StringUtils.isEmpty(packageNo)) return null; + MesPackage packageDb = new MesPackage(); + packageDb.setPackageNo(packageNo); + packageDb.setPartNo(packageRuleContext.getPartNo()); + packageDb.setPartName(packageRuleContext.getPartName()); + packageDb.setQty(new Double(1)); + packageDb.setPackSpecQty(packageRuleContext.getPackSpecQty()); + packageDb.setUnit(packageDb.getUnit()); + packageDb.setLotNo(TimeTool.getToday()); + packageDb.setIsSealed(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + packageDb.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue()); + packageDb.setWorkCenterCode(reqBean.getWorkCenterCode()); + packageDb.setWorkCellCode(reqBean.getWorkCellCode()); + packageDb.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); + packageDb.setPackageSn(packageRuleContext.getPackCode()); + packageDb.setPackageLabelTemplate(packageRuleContext.getPackageTemplate()); + packageDb.setFid(UUID.randomUUID().toString()); + packageDb.setOrganizeCode(reqBean.getOrganizeCode()); + ConvertBean.serviceModelInitialize(packageDb, reqBean.getUserInfo()); + return packageDb; + } + + //判断包装条码是否存在ID进行新增或者更新操作, 如果满足标包则标记满包状态跟打印状态 + private MesPackage savePackageDb(StationRequestBean reqBean, MesPackage packageDb, Integer curQty, Boolean isSealed) { + + if (!StringUtils.isEmpty(packageDb.getId())) { + //下面直接根据ID进行修改, 所以此处置为游离态 + entityManager.detach(packageDb); + ConvertBean.serviceModelUpdate(packageDb, reqBean.getUserInfo()); + } + + packageDb.setQty(new Double(curQty)); + if (isSealed) { + packageDb.setLotNo(TimeTool.getToday()); + packageDb.setIsSealed(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + packageDb.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue()); + } + + if (StringUtils.isEmpty(packageDb.getId())) return packageRepository.insert(packageDb); + + packageRepository.updateByPropertiesNoSync( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.ID}, + new Object[]{reqBean.getOrganizeCode(), packageDb.getId()}, + new String[]{MesPcnExtConstWords.QTY, MesPcnExtConstWords.IS_SEALED, MesPcnExtConstWords.PRINT_STATUS, MesPcnExtConstWords.LOT_NO, + 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; + } + + //判断统计方式,是否生成包装明细信息, 返回当前未满包的包装条码明细数据 + private List insertPackageDetailAndBackUnSealedResultList(StationRequestBean reqBean, MesPackageRuleContext packageRuleContext, + MesPackage packageDb, List productSnList2Cur, Boolean isSealed) { + //当前未满包的包装条码明细数据 + List resultList = null; + //包装条码明细ID + Long detailId = null; + //遍历当前满足标包的差额条码 + for (String productSn : productSnList2Cur) { + if (StringUtils.isEmpty(productSn)) continue; + //判断统计方式,是否生成包装明细信息 + if (packageRuleContext.getGenerateType().compareTo(MesExtEnumUtil.PACKING_RULE_GENERATE_TYPE.PACKAGE_DETAIL.getValue()) == 0) { + detailId = insertMesPackageDetail(reqBean, packageDb, productSn); + } + //判断不满包则 赋值给 当前未满包的包装条码明细数据resultList + if (!isSealed) { + if (CollectionUtils.isEmpty(resultList)) resultList = new ArrayList<>(); + MesPackageDataContext packageDataContext = new MesPackageDataContext(); + BeanUtils.copyProperties(packageRuleContext, packageDataContext); + packageDataContext.setPackageId(packageDb.getId()); + packageDataContext.setDetailId(detailId); + packageDataContext.setPackageNo(packageDb.getPackageNo()); + packageDataContext.setQty(new Double(1)); + packageDataContext.setSerialNumber(productSn); + packageDataContext.setCreateDatetime(packageDb.getCreateDatetime()); + packageDataContext.setModifyDatetime(TimeTool.getNowTime(true)); + resultList.add(packageDataContext); + } + } + return resultList; + } + + //生成包装明细信息 + private Long insertMesPackageDetail(StationRequestBean reqBean, MesPackage packageDb, String productSn) { + MesPackageDetail packageDetailDb = new MesPackageDetail(); + packageDetailDb.setPackageNo(packageDb.getPackageNo()); + packageDetailDb.setPartNo(packageDb.getPartNo()); + packageDetailDb.setPartName(packageDb.getPartName()); + packageDetailDb.setSerialNumber(productSn); + packageDetailDb.setProductSn(productSn); + packageDetailDb.setQty(new Double(1)); + packageDetailDb.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); + packageDetailDb.setFid(UUID.randomUUID().toString()); + packageDetailDb.setOrganizeCode(reqBean.getOrganizeCode()); + ConvertBean.serviceModelInitialize(packageDetailDb, reqBean.getUserInfo()); + return packageDetailRepository.insert(packageDetailDb).getId(); + } + + //根据编码规则生成包装条码 + private String doGereratePackageNo(StationRequestBean reqBean, MesPackageRuleContext packageRuleContext) { + GenSerialNoModel serialNoModel = new GenSerialNoModel(packageRuleContext.getPackageBarcodeRule()) + .putDataMap(MesPackageRuleContext.class.getSimpleName(), packageRuleContext) + .partNo(packageRuleContext.getPartNo()).basicInfo(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()); + try { + return syncFuncService.syncSerialNo(serialNoModel, reqBean.getUserInfo(), reqBean.getOrganizeCode(), 1).getResultList().get(0).toString(); + } catch (ImppBusiException e) { + this.sendMessage(reqBean, new StationResultBean().writeDbLog(), e.getErrorDetail(), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + } catch (Exception e) { + String webMsg = String.format("零件编码[%s]编码规则代码[%s]生成包装条码%s", serialNoModel.getPartNo(), serialNoModel.getRuleCode(), fsmRouteDataService.handleFsmCfgOrDefault(reqBean, MesPcnEnumUtil.FSM_CFG.FSM_EXCEPTION_MSG.getCode())); + this.sendMessage(reqBean, new StationResultBean().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); + } + return null; + } + + private void execPrint(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, + MesPackageRuleContext packageRuleContext, MesLabelTemplate labelTemplate, IPrintTemplateStrategyService strategyService, List packageList) { + if (null == strategyService) { + //查询模版信息 + labelTemplate = templateService.getLabelTemplate(packageRuleContext.getPackageTemplate(), reqBean.getOrganizeCode()); + strategyService = (null != labelTemplate && !StringUtils.isEmpty(labelTemplate.getMethodCode())) ? (IPrintTemplateStrategyService) SpringContextsUtil.getBean(labelTemplate.getMethodCode()) : null; + } + if (null == strategyService) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("零件编码[%s]未配置有效的包装条码模版[%s]信息!", packageRuleContext.getPartNo(), packageRuleContext.getPackageTemplate())); + + MesProduceSnPrintModel mesProduceSnPrintModel = new MesProduceSnPrintModel(); + mesProduceSnPrintModel.setOrganizeCode(reqBean.getOrganizeCode()); + mesProduceSnPrintModel.setUserName(reqBean.getUserInfo()); + mesProduceSnPrintModel.setMesLabelTemplate(labelTemplate); + mesProduceSnPrintModel.setPrinter(packageRuleContext.getPrinter()); + mesProduceSnPrintModel.setPartNo(packageRuleContext.getPartNo()); + mesProduceSnPrintModel.setPartName(packageRuleContext.getPartName()); + mesProduceSnPrintModel.getPackageList().addAll(packageList); + + MesProduceSnPrintModel printModel = null; + try { + printModel = strategyService.execute(null, mesProduceSnPrintModel, null, stepResult, reqBean, true); + } catch (ImppBusiException e) { + stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), 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())); + 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(); + } + + if (CollectionUtils.isEmpty(printModel.getPrintContextList())) return; + + //发送打印信息 + resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.CUSTOM_COMPONENT.getValue()); + resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.FILE.getValue()); + resultBean.setCustomPageName(MesPcnExtConstWords.SORT_WORK_CENTER_PRINT); + resultBean.setResultObj(printModel.getPrintContextList()); + this.sendMessage(reqBean, resultBean); + + //保存打印记录日志 + printedSnLogRepository.saveAll(printModel.getMesPrintedSnLogList()); + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionCustomContextStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionCustomContextStepService.java index 4023d86..1759174 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionCustomContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionCustomContextStepService.java @@ -21,6 +21,7 @@ import org.springframework.util.StringUtils; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.StringJoiner; import java.util.concurrent.atomic.AtomicReference; @@ -267,4 +268,29 @@ public class MesProductionCustomContextStepService extends BaseStepService imple dispatchFsmBusiData(reqBean.getOrganizeCode(), getShortCounterContextKey(reqBean), shortCounter.toString()); } + //打包数据KEY + private String getPackageDataContextKey(StationRequestBean reqBean) { + return new StringJoiner(MesPcnExtConstWords.COLON).add(reqBean.getOrganizeCode()).add(reqBean.getWorkCenterCode()).add(reqBean.getWorkCellCode()).add(MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT).add(MesPcnExtConstWords.PACKAGE_DATA_CONTEXT).toString(); + } + + //保存打包数据 [JSON]List + @Override + public Boolean dispatchPackageDataContext(StationRequestBean reqBean, Map packageDataContextMap) { + if (CollectionUtils.isEmpty(packageDataContextMap)) return false; + return dispatchFsmBusiData(reqBean.getOrganizeCode(), getPackageDataContextKey(reqBean), JSONObject.toJSONString(packageDataContextMap)); + } + + //获取打包数据 [JSON]List + @Override + public Map getPackageDataContext(StationRequestBean reqBean) { + String contextStr = getFsmBusiData(reqBean.getOrganizeCode(), getPackageDataContextKey(reqBean)); + return !StringUtils.isEmpty(contextStr) ? JSONObject.parseObject(contextStr, Map.class) : null; + } + + //删除上下文班次班组信息 + @Override + public void removePackageDataContext(StationRequestBean reqBean) { + removeFsmBusiData(reqBean.getOrganizeCode(), getPackageDataContextKey(reqBean)); + } + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessContextStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessContextStepService.java index 506a828..eeb5810 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessContextStepService.java @@ -551,4 +551,24 @@ public class MesProductionProcessContextStepService extends BaseStepService impl if (!CollectionUtils.isEmpty(workCellList)) dispatchFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.WORK_CELL_MAP_CONTEXT, JSONObject.toJSONString(workCellMap)); return workCellMap; } + + //获取包装规则信息 + @Override + public Map getPackageRuleContext(StationRequestBean reqBean) { + String packageRuleContextJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PACKAGE_RULE_CONTEXT); + return !StringUtils.isEmpty(packageRuleContextJson) ? JSONObject.parseObject(packageRuleContextJson, new TypeReference>() {}): null; + } + + //保存包装规则信息 + @Override + public Boolean dispatchPackageRuleContext(StationRequestBean reqBean, Map packageRuleContextMap) { + return dispatchFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PACKAGE_RULE_CONTEXT, JSONObject.toJSONString(packageRuleContextMap)); + } + + //删除包装规则信息 + @Override + public void removePackageRuleContext(StationRequestBean reqBean) { + removeFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PACKAGE_RULE_CONTEXT); + } + } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesPackageDataContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesPackageDataContext.java new file mode 100644 index 0000000..d553eb3 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesPackageDataContext.java @@ -0,0 +1,37 @@ +package cn.estsh.i3plus.ext.mes.pcn.pojo.context; + +import io.swagger.annotations.ApiParam; +import lombok.Data; + +import java.io.Serializable; + +/** + * 生产过程打包数据 + */ +@Data +public class MesPackageDataContext extends MesPackageRuleContext implements Serializable { + + private static final long serialVersionUID = 8644214903859925217L; + + @ApiParam("包装信息ID") + private Long packageId; + + @ApiParam("明细ID") + private Long detailId; + + @ApiParam("包装编号") + private String packageNo; + + @ApiParam("数量") + private Double qty; + + @ApiParam("产品条码") + private String serialNumber; + + @ApiParam("打包开始时间") + private String createDatetime; + + @ApiParam("打包结束时间") + private String modifyDatetime; + +} diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesPackageRuleContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesPackageRuleContext.java new file mode 100644 index 0000000..0ea6f8d --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesPackageRuleContext.java @@ -0,0 +1,61 @@ +package cn.estsh.i3plus.ext.mes.pcn.pojo.context; + +import io.swagger.annotations.ApiParam; +import lombok.Data; + +import java.io.Serializable; + +/** + * 生产过程打包规则上下文 + */ +@Data +public class MesPackageRuleContext implements Serializable { + + private static final long serialVersionUID = 1369218116212836881L; + + @ApiParam(name = "包装代码") + private String packageCode; + + @ApiParam(name = "行号") + private String lineNo; + + @ApiParam(name = "零件号") + private String partNo; + + @ApiParam(name = "零件名称") + private String partName; + + @ApiParam(name = "零件类型") + private String partType; + + @ApiParam("包装规格数量") + private Double packSpecQty; + + @ApiParam("最小数量") + private Double minQty; + + @ApiParam("取整数量") + private Double roundnessQty; + + @ApiParam(name = "计量单位") + private String unit; + + @ApiParam(name = "是否默认包装") + private Integer defaultFlag; + + @ApiParam(name = "统计方式") + private Integer generateType; + + @ApiParam(name = "箱类别代号") + private String packCode; + + @ApiParam(name = "包装条码编码规则") + private String packageBarcodeRule; + + @ApiParam(name = "包装条码模板") + private String packageTemplate; + + @ApiParam(name = "打印机") + private String printer; + +} diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesProduceSnPrintModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesProduceSnPrintModel.java index 0d7d7af..6dd7a26 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesProduceSnPrintModel.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesProduceSnPrintModel.java @@ -1,9 +1,6 @@ package cn.estsh.i3plus.ext.mes.pcn.pojo.model; -import cn.estsh.i3plus.pojo.mes.bean.MesLabelTemplate; -import cn.estsh.i3plus.pojo.mes.bean.MesPackingDefine; -import cn.estsh.i3plus.pojo.mes.bean.MesPrintedSnLog; -import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import cn.estsh.i3plus.pojo.mes.bean.*; import io.swagger.annotations.ApiParam; import lombok.Data; @@ -33,6 +30,9 @@ public class MesProduceSnPrintModel { @ApiParam("条码") private String productSn; + @ApiParam("包装条码") + private String packageNo; + @ApiParam("打印数量") private Integer printQty; @@ -69,13 +69,18 @@ public class MesProduceSnPrintModel { @ApiParam(name = "打印模板信息") private MesLabelTemplate mesLabelTemplate; - @ApiParam(name = "产品条码信息") - private List mesProduceSnPrintDataModelList = new ArrayList<>(); - + @ApiParam(name = "产出条码") private List mesProduceSnList = new ArrayList<>(); + @ApiParam(name = "产出包装") + private List packageList = new ArrayList<>(); + + @ApiParam(name = "打印日志信息") private List mesPrintedSnLogList = new ArrayList<>(); + @ApiParam(name = "产品条码打印信息") + private List mesProduceSnPrintDataModelList = new ArrayList<>(); + @ApiParam(name = "源数据 使用功能:1-裁片") private Object sourceData; diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java index 1d20161..e9d756c 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java @@ -313,6 +313,16 @@ public class MesPcnExtConstWords { public static final String REWORK_TASK_ID = "reworkTaskId"; //nc状态 public static final String NC_STATUS = "nc_status"; + //零件类型 + public static final String PART_TYPE = "partType"; + //包装代码 + public static final String PACKAGE_CODE = "packageCode"; + //是否封箱 + public static final String IS_SEALED = "isSealed"; + //单位 + public static final String UNIT = "unit"; + //包装规格数量 + public static final String PACK_SPEC_QTY = "packSpecQty"; //BaseBean字段不包含工厂, 用于对象复制剔除属性BeanUtils.copyProperties(Object source, Object target, String... ignoreProperties) @@ -334,6 +344,13 @@ public class MesPcnExtConstWords { // 扩展字段 public static final String EXTEND = "extend"; + // 用户缓存 + public static final String USER_INFO_CONTEXT = "USER_INFO_CONTEXT"; + // 装箱防错 + public static final String BOXING_ERROR_PROOFING = "BOXING_ERROR_PROOFING"; + // 是否记忆 + public static final String IS_MEMORY = "IS_MEMORY"; + // 时间格式 public static final String DATE_FORMAT_SSS = "yyyy-MM-dd HH:mm:ss.SSS"; public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; @@ -552,12 +569,10 @@ public class MesPcnExtConstWords { public static final String REPEAT_ASSEMBLY_SN_CONTEXT = "REPEAT_ASSEMBLY_SN_CONTEXT"; // 设备计数上下文 public static final String SHORT_COUNTER_CONTEXT = "SHORT_COUNTER_CONTEXT"; - // 用户缓存 - public static final String USER_INFO_CONTEXT = "USER_INFO_CONTEXT"; - // 装箱防错 - public static final String BOXING_ERROR_PROOFING = "BOXING_ERROR_PROOFING"; - // 是否记忆 - public static final String IS_MEMORY = "IS_MEMORY"; + // 打包数据上下文 + public static final String PACKAGE_DATA_CONTEXT = "PACKAGE_DATA_CONTEXT"; + // 打包规则上下文 + public static final String PACKAGE_RULE_CONTEXT = "PACKAGE_RULE_CONTEXT"; // 上下文: 展示组件数据 public static final String MODULE_CONTENT_CONTEXT = "MODULE_CONTENT_CONTEXT"; @@ -621,7 +636,6 @@ public class MesPcnExtConstWords { //打印客户条码 public static final String SORT_WORK_CENTER_PRINT = "SORT_WORK_CENTER_PRINT"; - //强过 跳过 public static final String SHIP_PASS = "跳过"; public static final String STRONGER_PASS = "强过"; From 4a9dabfbf31c469d7462845081fe6bc9c3e52305 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Mon, 13 Jan 2025 19:22:52 +0800 Subject: [PATCH 02/10] =?UTF-8?q?44517=20=E8=A3=85=E7=AE=B1=E9=98=B2?= =?UTF-8?q?=E9=94=99=E5=90=8E=E5=90=90=E6=9D=A1=E7=A0=81=E9=9C=80=E6=B1=82?= =?UTF-8?q?=EF=BC=88=E8=8A=9C=E6=B9=96=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../print/strategy/WuhuPackageNoPrintStrategy.java | 2 +- .../MesFunctionPackageProgressService.java | 116 +++++++++++++++++++++ .../step/MesPackageNoGenerateStepService.java | 57 ++++++---- .../step/MesProductSnPrintNosortStepService.java | 14 +-- .../step/MesProductSnPrintSortStepService.java | 12 +-- .../pcn/pojo/context/MesPackageDataContext.java | 9 ++ .../pcn/pojo/context/MesPackageRuleContext.java | 30 +++--- 7 files changed, 192 insertions(+), 48 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/WuhuPackageNoPrintStrategy.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/WuhuPackageNoPrintStrategy.java index 4818c7e..63318e3 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/WuhuPackageNoPrintStrategy.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/WuhuPackageNoPrintStrategy.java @@ -83,7 +83,7 @@ public class WuhuPackageNoPrintStrategy implements IPrintTemplateStrategyService private Map getPrintMap(MesProduceSnPrintModel model, MesPackage packageDb, MesCustomerPart customerPart) { Map resultMap = new HashMap<>(); resultMap.put(MesPcnExtConstWords.PART_NO, packageDb.getPartNo()); - resultMap.put(MesPcnExtConstWords.PART_NAME, packageDb.getPartNo()); + resultMap.put(MesPcnExtConstWords.PART_NAME, packageDb.getPartName()); resultMap.put(MesPcnExtConstWords.CUST_PART_NO, customerPart.getCustPartNo()); resultMap.put(MesPcnExtConstWords.QR_CODE, packageDb.getPackageNo()); resultMap.put(MesPcnExtConstWords.QTY, packageDb.getQty().intValue()); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java new file mode 100644 index 0000000..6487b74 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java @@ -0,0 +1,116 @@ +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.pojo.context.MesPackageDataContext; +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; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesPackage; +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 com.alibaba.fastjson.JSONObject; +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.*; +import java.util.stream.Collectors; + +/** + * @Description : 工位参数按钮事件接口实现【打包进度】 + **/ +@Service +public class MesFunctionPackageProgressService extends BaseSwsService implements IFsmModuleFunctionService { + + @Autowired + private IMesProductionCustomContextStepService productionCustomContextStepService; + + @Autowired + private MesPackageNoGenerateStepService packageNoGenerateStepService; + + @Override + public Object doCustomApiDispatch(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel) { + + //获取打包数据 + Map packageDataContextMap = productionCustomContextStepService.getPackageDataContext(reqBean); + + if (CollectionUtils.isEmpty(packageDataContextMap)) return null; + + if (StringUtils.isEmpty(buttonDynamicModel.getFunctionValue())) { + //封装返回列表 + List resultList = new ArrayList<>(); + + for (String partNo : packageDataContextMap.keySet()) { + if (StringUtils.isEmpty(partNo)) continue; + + List packageDataContextList = JSONObject.parseArray(packageDataContextMap.get(partNo), MesPackageDataContext.class); + packageDataContextList = packageDataContextList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesPackageDataContext::getModifyDatetime).reversed()).collect(Collectors.toList()); + + //列表展示: 包装条码, 装箱个数, 包装规格数量, 装箱开始时间, 装箱结束时间 + resultList.add(new MesPackageDataContext(packageDataContextList.get(0).getPackageNo(), new Double(packageDataContextList.size()), + packageDataContextList.get(0).getPackSpecQty(), packageDataContextList.get(0).getCreateDatetime(), packageDataContextList.get(0).getModifyDatetime())); + } + + resultList = resultList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesPackageDataContext::getModifyDatetime).reversed()).collect(Collectors.toList()); + + return resultList; + } + + resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PICK.getValue()).scanInfo(buttonDynamicModel.getFunctionValue()); + + Map resultMap = new HashMap<>(); + resultMap.put(MesPcnExtConstWords.DATA_TYPE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT.getValue()); + MesPackageDataContext packageDataContext = JSONObject.parseObject(buttonDynamicModel.getFunctionValue(), MesPackageDataContext.class); + if (null == packageDataContext) { + return packResultMap(reqBean, resultBean, resultMap, + String.format("生产线[%s]工位[%s]强制打包失败,参数异常!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode())); + } + + if (CollectionUtils.isEmpty(packageDataContextMap) || !packageDataContextMap.containsKey(packageDataContext.getPartNo())) { + return packResultMap(reqBean, resultBean, resultMap, + String.format("生产线[%s]工位[%s]强制打包失败,当前已无零件号[%s]未封箱状态的包装信息!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), packageDataContext.getPartNo())); + } + + MesPackageDataContext packageDataContextCached = JSONObject.parseObject(packageDataContextMap.get(packageDataContext.getPartNo()), MesPackageDataContext.class); + if (null == packageDataContextCached || !packageDataContextCached.getPackageNo().equals(packageDataContext.getPackageNo())) { + return packResultMap(reqBean, resultBean, resultMap, + String.format("生产线[%s]工位[%s]强制打包失败,打包进度列表中已经不存在包装条码[%s],请刷新重试!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), packageDataContext.getPackageNo())); + } + + MesPackage packageDb = packageNoGenerateStepService.getMesPackage(reqBean.getOrganizeCode(), packageDataContext.getPackageId()); + if (null == packageDb) { + return packResultMap(reqBean, resultBean, resultMap, + String.format("生产线[%s]工位[%s]强制打包失败,包装条码[%s]信息已经不存在,请刷新重试!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), packageDataContext.getPackageNo())); + } + + StepResult stepResult = StepResult.getSuccessComplete(); + doForcePrint(reqBean, resultBean, stepResult, packageDataContextCached, packageDb); + if (!StringUtils.isEmpty(stepResult.getMsg())) { + return packResultMap(reqBean, resultBean, resultMap, + String.format("生产线[%s]工位[%s]强制打包失败,%s", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), stepResult.getMsg())); + } + + resultMap.put(MesPcnExtConstWords.DATA_TYPE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT.getValue()); + return packResultMap(reqBean, resultBean, resultMap, String.format("零件号[%s]强制封箱!正在打印中...请稍后!", packageDataContext.getPartNo())); + + } + + private Object packResultMap(StationRequestBean reqBean, StationResultBean resultBean, Map 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, MesPackageDataContext packageDataContext, MesPackage packageDb) { + packageNoGenerateStepService.savePackageDb(reqBean, packageDb, packageDb.getQty().intValue(), true); + List packageList = new ArrayList<>(); + packageList.add(packageDb); + packageNoGenerateStepService.execPrint(reqBean, resultBean, stepResult, packageDataContext, null, null, packageList, true); + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java index daf3eb2..d0e2b7a 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java @@ -170,13 +170,13 @@ public class MesPackageNoGenerateStepService extends BaseStepService { stepResult.setDataCollection(new ArrayList()); packageDataContextList = doHandlePackagePrint(reqBean, stepResult, packageRuleContext, packageDataContextList, entry.getValue()); - //更新实时的打包数据 + //更新实时的打包数据 if (CollectionUtils.isEmpty(packageDataContextMap)) packageDataContextMap = new HashMap<>(); if (CollectionUtils.isEmpty(packageDataContextList)) packageDataContextMap.remove(entry.getKey()); else packageDataContextMap.put(entry.getKey(), JSONObject.toJSONString(packageDataContextList)); //判断存在包装信息则进行打印 if (!CollectionUtils.isEmpty(stepResult.getDataCollection())) { - execPrint(reqBean, resultBean, stepResult, packageRuleContext, labelTemplate, strategyService, (List) stepResult.getDataCollection()); + execPrint(reqBean, resultBean, stepResult, packageRuleContext, labelTemplate, strategyService, (List) stepResult.getDataCollection(), false); } } @@ -245,8 +245,8 @@ public class MesPackageNoGenerateStepService extends BaseStepService { if (StringUtils.isEmpty(packageTemplate)) packageTemplate = packingDefine.getPackageTemplate(); if (StringUtils.isEmpty(printer)) printer = packingDefine.getPrinter(); - //此时 packageBarcodeRule || packageTemplate || printer 仍有一个为空则 记录日志 忽略当前零件的打包 - if (StringUtils.isEmpty(packageBarcodeRule) || StringUtils.isEmpty(packageTemplate) || StringUtils.isEmpty(printer)) { + //此时 packageBarcodeRule || packageTemplate 仍有一个为空则 记录日志 忽略当前零件的打包 + if (StringUtils.isEmpty(packageBarcodeRule) || StringUtils.isEmpty(packageTemplate)) { this.sendMessage(reqBean, new StationResultBean().writeDbLog(), String.format("零件编码[%s]包装物类型对应的包装代码[%s]配置的成品包装规则信息中必要信息无效:编码规则[%s]模版[%s]打印机[%s]!", partNo, packingRuleDetail.getPackageCode(), packageBarcodeRule, packageTemplate, printer), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); @@ -288,7 +288,7 @@ public class MesPackageNoGenerateStepService extends BaseStepService { MesPackage packageDb = null; //判断是否存在缓存的包装条码明细信息,如果进行递归则已无包装条码, 则重新生成信息的包装条码 - if (!CollectionUtils.isEmpty(packageDataContextList)) packageDb = packageExtService.getMesPackage(reqBean.getOrganizeCode(), packageDataContextList.get(0).getPackageId()); + if (!CollectionUtils.isEmpty(packageDataContextList)) packageDb = getMesPackage(reqBean.getOrganizeCode(), packageDataContextList.get(0).getPackageId()); //缓存中的包装条码也可能在DB中已被删除, 所以这里直接判断 包装条码信息是否为空则生成包装条码信息 if (null == packageDb) packageDb = insertMesPackage(reqBean, packageRuleContext); @@ -319,6 +319,9 @@ public class MesPackageNoGenerateStepService extends BaseStepService { } + //根据ID查询包装信息 + public MesPackage getMesPackage(String organizeCode, Long packageId) { return packageExtService.getMesPackage(organizeCode, packageId); } + //生成包装条码信息 private MesPackage insertMesPackage(StationRequestBean reqBean, MesPackageRuleContext packageRuleContext) { //根据编码规则生成包装条码 @@ -330,7 +333,7 @@ public class MesPackageNoGenerateStepService extends BaseStepService { packageDb.setPartName(packageRuleContext.getPartName()); packageDb.setQty(new Double(1)); packageDb.setPackSpecQty(packageRuleContext.getPackSpecQty()); - packageDb.setUnit(packageDb.getUnit()); + packageDb.setUnit(packageRuleContext.getUnit()); packageDb.setLotNo(TimeTool.getToday()); packageDb.setIsSealed(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); packageDb.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue()); @@ -346,7 +349,7 @@ public class MesPackageNoGenerateStepService extends BaseStepService { } //判断包装条码是否存在ID进行新增或者更新操作, 如果满足标包则标记满包状态跟打印状态 - private MesPackage savePackageDb(StationRequestBean reqBean, MesPackage packageDb, Integer curQty, Boolean isSealed) { + public MesPackage savePackageDb(StationRequestBean reqBean, MesPackage packageDb, Integer curQty, Boolean isSealed) { if (!StringUtils.isEmpty(packageDb.getId())) { //下面直接根据ID进行修改, 所以此处置为游离态 @@ -439,14 +442,20 @@ public class MesPackageNoGenerateStepService extends BaseStepService { return null; } - private void execPrint(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, - MesPackageRuleContext packageRuleContext, MesLabelTemplate labelTemplate, IPrintTemplateStrategyService strategyService, List packageList) { + public void execPrint(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesPackageRuleContext packageRuleContext, + MesLabelTemplate labelTemplate, IPrintTemplateStrategyService strategyService, List packageList, Boolean isAsyn) { if (null == strategyService) { //查询模版信息 labelTemplate = templateService.getLabelTemplate(packageRuleContext.getPackageTemplate(), reqBean.getOrganizeCode()); strategyService = (null != labelTemplate && !StringUtils.isEmpty(labelTemplate.getMethodCode())) ? (IPrintTemplateStrategyService) SpringContextsUtil.getBean(labelTemplate.getMethodCode()) : null; } - if (null == strategyService) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("零件编码[%s]未配置有效的包装条码模版[%s]信息!", packageRuleContext.getPartNo(), packageRuleContext.getPackageTemplate())); + 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; + } + } MesProduceSnPrintModel mesProduceSnPrintModel = new MesProduceSnPrintModel(); mesProduceSnPrintModel.setOrganizeCode(reqBean.getOrganizeCode()); @@ -461,22 +470,32 @@ public class MesPackageNoGenerateStepService extends BaseStepService { try { printModel = strategyService.execute(null, mesProduceSnPrintModel, null, stepResult, reqBean, true); } catch (ImppBusiException e) { - stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), e.getErrorDetail()); + if (!isAsyn) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), e.getErrorDetail()); + else { + stepResult.msg(e.getErrorDetail()); + return; + } } catch (Exception e) { String webMsg = String.format("零件编码[%s]包装条码模版[%s]打印包装条码%s", packageRuleContext.getPartNo(), packageRuleContext.getPackageTemplate(), fsmRouteDataService.handleFsmCfgOrDefault(reqBean, MesPcnEnumUtil.FSM_CFG.FSM_EXCEPTION_MSG.getCode())); - 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(); + 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; + } } if (CollectionUtils.isEmpty(printModel.getPrintContextList())) return; //发送打印信息 - resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.CUSTOM_COMPONENT.getValue()); - resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.FILE.getValue()); - resultBean.setCustomPageName(MesPcnExtConstWords.SORT_WORK_CENTER_PRINT); - resultBean.setResultObj(printModel.getPrintContextList()); - this.sendMessage(reqBean, resultBean); + this.sendMessage(reqBean, new StationResultBean() + .busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.CUSTOM_COMPONENT.getValue()) + .dataType(MesPcnEnumUtil.STATION_DATA_TYPE.FILE.getValue()) + .customPageName(MesPcnExtConstWords.SORT_WORK_CENTER_PRINT) + .resultObj(printModel.getPrintContextList()) + ); //保存打印记录日志 printedSnLogRepository.saveAll(printModel.getMesPrintedSnLogList()); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnPrintNosortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnPrintNosortStepService.java index edda086..8731da6 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnPrintNosortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnPrintNosortStepService.java @@ -145,16 +145,16 @@ public class MesProductSnPrintNosortStepService extends BaseStepService { } //前端接收到busiTyep是customComponent,并且 dataType是file类型的消息,就需要打印后续消息里的数据,一个模板对应多个打印数据 - resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.CUSTOM_COMPONENT.getValue()); - resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.FILE.getValue()); + StationResultBean stationResultBean = new StationResultBean() + .busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.CUSTOM_COMPONENT.getValue()) + .dataType(MesPcnEnumUtil.STATION_DATA_TYPE.FILE.getValue()); if (!CollectionUtils.isEmpty(resultMapList) && resultMapList.size() > MesPcnExtConstWords.ZERO) { - resultBean.setCustomPageName(MesPcnExtConstWords.SORT_WORK_CENTER_PRINT); - resultBean.setResultObj(resultMapList); + stationResultBean.setCustomPageName(MesPcnExtConstWords.SORT_WORK_CENTER_PRINT); + stationResultBean.setResultObj(resultMapList); } else { - resultBean.setResultObj(printModelList); + stationResultBean.setResultObj(printModelList); } - //3. 发送数据给到前端 - this.sendMessage(reqBean, resultBean); + this.sendMessage(reqBean, stationResultBean); List snLogList = printModelList.stream().map(MesProduceSnPrintModel::getMesPrintedSnLogList).flatMap(List::stream).collect(Collectors.toList()); //更新打印状态 for (MesProductionPsOutContext outSn : productionPsOutContextList) { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnPrintSortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnPrintSortStepService.java index 14d79cf..5b6dc9e 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnPrintSortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnPrintSortStepService.java @@ -152,12 +152,12 @@ public class MesProductSnPrintSortStepService extends BaseStepService { } //前端接收到busiTyep是customComponent,并且 dataType是file类型的消息,就需要打印后续消息里的数据,一个模板对应多个打印数据 - resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.CUSTOM_COMPONENT.getValue()); - resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.FILE.getValue()); - resultBean.setCustomPageName(MesPcnExtConstWords.SORT_WORK_CENTER_PRINT); - resultBean.setResultObj(resultMap); - //3. 发送数据给到前端 - this.sendMessage(reqBean, resultBean); + this.sendMessage(reqBean, new StationResultBean() + .busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.CUSTOM_COMPONENT.getValue()) + .dataType(MesPcnEnumUtil.STATION_DATA_TYPE.FILE.getValue()) + .customPageName(MesPcnExtConstWords.SORT_WORK_CENTER_PRINT) + .resultObj(resultMap) + ); //保存打印条码记录 snLogRao.saveAll(snLogList); return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult, "打印成功!"); diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesPackageDataContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesPackageDataContext.java index d553eb3..19a3b0e 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesPackageDataContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesPackageDataContext.java @@ -34,4 +34,13 @@ public class MesPackageDataContext extends MesPackageRuleContext implements Seri @ApiParam("打包结束时间") private String modifyDatetime; + public MesPackageDataContext() {} + + public MesPackageDataContext(String packageNo, Double qty, Double packSpecQty, String createDatetime, String modifyDatetime) { + this.packageNo = packageNo; + this.qty = qty; + this.packSpecQty = packSpecQty; + this.createDatetime = createDatetime; + this.modifyDatetime = modifyDatetime; + } } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesPackageRuleContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesPackageRuleContext.java index 0ea6f8d..fd0f933 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesPackageRuleContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesPackageRuleContext.java @@ -14,48 +14,48 @@ public class MesPackageRuleContext implements Serializable { private static final long serialVersionUID = 1369218116212836881L; @ApiParam(name = "包装代码") - private String packageCode; + public String packageCode; @ApiParam(name = "行号") - private String lineNo; + public String lineNo; @ApiParam(name = "零件号") - private String partNo; + public String partNo; @ApiParam(name = "零件名称") - private String partName; + public String partName; @ApiParam(name = "零件类型") - private String partType; + public String partType; @ApiParam("包装规格数量") - private Double packSpecQty; + public Double packSpecQty; @ApiParam("最小数量") - private Double minQty; + public Double minQty; @ApiParam("取整数量") - private Double roundnessQty; + public Double roundnessQty; @ApiParam(name = "计量单位") - private String unit; + public String unit; @ApiParam(name = "是否默认包装") - private Integer defaultFlag; + public Integer defaultFlag; @ApiParam(name = "统计方式") - private Integer generateType; + public Integer generateType; @ApiParam(name = "箱类别代号") - private String packCode; + public String packCode; @ApiParam(name = "包装条码编码规则") - private String packageBarcodeRule; + public String packageBarcodeRule; @ApiParam(name = "包装条码模板") - private String packageTemplate; + public String packageTemplate; @ApiParam(name = "打印机") - private String printer; + public String printer; } From 3bdc59534c7e761970d3569d587763a36a5d016d Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Tue, 14 Jan 2025 09:40:50 +0800 Subject: [PATCH 03/10] =?UTF-8?q?44517=20=E8=A3=85=E7=AE=B1=E9=98=B2?= =?UTF-8?q?=E9=94=99=E5=90=8E=E5=90=90=E6=9D=A1=E7=A0=81=E9=9C=80=E6=B1=82?= =?UTF-8?q?=EF=BC=88=E8=8A=9C=E6=B9=96=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java index d0e2b7a..6763778 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java @@ -170,7 +170,8 @@ public class MesPackageNoGenerateStepService extends BaseStepService { stepResult.setDataCollection(new ArrayList()); packageDataContextList = doHandlePackagePrint(reqBean, stepResult, packageRuleContext, packageDataContextList, entry.getValue()); - //更新实时的打包数据 if (CollectionUtils.isEmpty(packageDataContextMap)) packageDataContextMap = new HashMap<>(); + //更新实时的打包数据 + if (CollectionUtils.isEmpty(packageDataContextMap)) packageDataContextMap = new HashMap<>(); if (CollectionUtils.isEmpty(packageDataContextList)) packageDataContextMap.remove(entry.getKey()); else packageDataContextMap.put(entry.getKey(), JSONObject.toJSONString(packageDataContextList)); From f9c6b5e81bbc68748ab79e00fbd9b5f87db1eff3 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Tue, 14 Jan 2025 10:24:46 +0800 Subject: [PATCH 04/10] =?UTF-8?q?44517=20=E8=A3=85=E7=AE=B1=E9=98=B2?= =?UTF-8?q?=E9=94=99=E5=90=8E=E5=90=90=E6=9D=A1=E7=A0=81=E9=9C=80=E6=B1=82?= =?UTF-8?q?=EF=BC=88=E8=8A=9C=E6=B9=96=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../function/MesFunctionPackageProgressService.java | 19 +++++++++++-------- .../mes/pcn/pojo/context/MesPackageDataContext.java | 4 +++- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java index 6487b74..4cd9b41 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java @@ -52,8 +52,11 @@ public class MesFunctionPackageProgressService extends BaseSwsService implements packageDataContextList = packageDataContextList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesPackageDataContext::getModifyDatetime).reversed()).collect(Collectors.toList()); //列表展示: 包装条码, 装箱个数, 包装规格数量, 装箱开始时间, 装箱结束时间 - resultList.add(new MesPackageDataContext(packageDataContextList.get(0).getPackageNo(), new Double(packageDataContextList.size()), - packageDataContextList.get(0).getPackSpecQty(), packageDataContextList.get(0).getCreateDatetime(), packageDataContextList.get(0).getModifyDatetime())); + resultList.add(new MesPackageDataContext( + packageDataContextList.get(0).getPartNo(), packageDataContextList.get(0).getPartName(), + packageDataContextList.get(0).getPackageNo(), new Double(packageDataContextList.size()), + packageDataContextList.get(0).getPackSpecQty(), packageDataContextList.get(0).getCreateDatetime(), packageDataContextList.get(0).getModifyDatetime()) + ); } resultList = resultList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesPackageDataContext::getModifyDatetime).reversed()).collect(Collectors.toList()); @@ -76,8 +79,8 @@ public class MesFunctionPackageProgressService extends BaseSwsService implements String.format("生产线[%s]工位[%s]强制打包失败,当前已无零件号[%s]未封箱状态的包装信息!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), packageDataContext.getPartNo())); } - MesPackageDataContext packageDataContextCached = JSONObject.parseObject(packageDataContextMap.get(packageDataContext.getPartNo()), MesPackageDataContext.class); - if (null == packageDataContextCached || !packageDataContextCached.getPackageNo().equals(packageDataContext.getPackageNo())) { + List 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, String.format("生产线[%s]工位[%s]强制打包失败,打包进度列表中已经不存在包装条码[%s],请刷新重试!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), packageDataContext.getPackageNo())); } @@ -89,7 +92,7 @@ public class MesFunctionPackageProgressService extends BaseSwsService implements } StepResult stepResult = StepResult.getSuccessComplete(); - doForcePrint(reqBean, resultBean, stepResult, packageDataContextCached, packageDb); + doForcePrint(reqBean, resultBean, stepResult, packageDataContextList, packageDb); if (!StringUtils.isEmpty(stepResult.getMsg())) { return packResultMap(reqBean, resultBean, resultMap, String.format("生产线[%s]工位[%s]强制打包失败,%s", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), stepResult.getMsg())); @@ -106,11 +109,11 @@ public class MesFunctionPackageProgressService extends BaseSwsService implements return resultMap; } - private void doForcePrint(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesPackageDataContext packageDataContext, MesPackage packageDb) { - packageNoGenerateStepService.savePackageDb(reqBean, packageDb, packageDb.getQty().intValue(), true); + private void doForcePrint(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List packageDataContextList, MesPackage packageDb) { + packageNoGenerateStepService.savePackageDb(reqBean, packageDb, packageDataContextList.size(), true); List packageList = new ArrayList<>(); packageList.add(packageDb); - packageNoGenerateStepService.execPrint(reqBean, resultBean, stepResult, packageDataContext, null, null, packageList, true); + packageNoGenerateStepService.execPrint(reqBean, resultBean, stepResult, packageDataContextList.get(0), null, null, packageList, true); } } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesPackageDataContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesPackageDataContext.java index 19a3b0e..5b5b281 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesPackageDataContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesPackageDataContext.java @@ -36,7 +36,9 @@ public class MesPackageDataContext extends MesPackageRuleContext implements Seri public MesPackageDataContext() {} - public MesPackageDataContext(String packageNo, Double qty, Double packSpecQty, String createDatetime, String modifyDatetime) { + public MesPackageDataContext(String partNo, String partName, String packageNo, Double qty, Double packSpecQty, String createDatetime, String modifyDatetime) { + this.partNo = partNo; + this.partName = partName; this.packageNo = packageNo; this.qty = qty; this.packSpecQty = packSpecQty; From 8daaa603bf8d881584a4296aa12bec655eee244e Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Tue, 14 Jan 2025 13:03:15 +0800 Subject: [PATCH 05/10] =?UTF-8?q?44517=20=E8=A3=85=E7=AE=B1=E9=98=B2?= =?UTF-8?q?=E9=94=99=E5=90=8E=E5=90=90=E6=9D=A1=E7=A0=81=E9=9C=80=E6=B1=82?= =?UTF-8?q?=EF=BC=88=E8=8A=9C=E6=B9=96=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MesFunctionPackageProgressService.java | 54 +++++++++++++--------- .../step/MesPackageNoGenerateStepService.java | 12 ++--- .../MesProductionCustomContextStepService.java | 5 +- 3 files changed, 43 insertions(+), 28 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java index 4cd9b41..218f235 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java @@ -36,38 +36,43 @@ public class MesFunctionPackageProgressService extends BaseSwsService implements @Override public Object doCustomApiDispatch(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel) { + Map resultMap = new HashMap<>(); + //获取打包数据 Map packageDataContextMap = productionCustomContextStepService.getPackageDataContext(reqBean); - if (CollectionUtils.isEmpty(packageDataContextMap)) return null; + if (CollectionUtils.isEmpty(packageDataContextMap)) { + resultMap.put(MesPcnExtConstWords.DATA_TYPE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT.getValue()); + resultMap.put(MesPcnExtConstWords.MESSAGE, "当前无包装信息!"); + return resultMap; + } - if (StringUtils.isEmpty(buttonDynamicModel.getFunctionValue())) { - //封装返回列表 - List resultList = new ArrayList<>(); + //封装返回列表 + List resultList = new ArrayList<>(); - for (String partNo : packageDataContextMap.keySet()) { - if (StringUtils.isEmpty(partNo)) continue; + for (String partNo : packageDataContextMap.keySet()) { + if (StringUtils.isEmpty(partNo)) continue; - List packageDataContextList = JSONObject.parseArray(packageDataContextMap.get(partNo), MesPackageDataContext.class); - packageDataContextList = packageDataContextList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesPackageDataContext::getModifyDatetime).reversed()).collect(Collectors.toList()); + List packageDataContextList = JSONObject.parseArray(packageDataContextMap.get(partNo), MesPackageDataContext.class); + packageDataContextList = packageDataContextList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesPackageDataContext::getModifyDatetime).reversed()).collect(Collectors.toList()); - //列表展示: 包装条码, 装箱个数, 包装规格数量, 装箱开始时间, 装箱结束时间 - resultList.add(new MesPackageDataContext( - packageDataContextList.get(0).getPartNo(), packageDataContextList.get(0).getPartName(), - packageDataContextList.get(0).getPackageNo(), new Double(packageDataContextList.size()), - packageDataContextList.get(0).getPackSpecQty(), packageDataContextList.get(0).getCreateDatetime(), packageDataContextList.get(0).getModifyDatetime()) - ); - } + //列表展示: 包装条码, 装箱个数, 包装规格数量, 装箱开始时间, 装箱结束时间 + resultList.add(new MesPackageDataContext( + packageDataContextList.get(0).getPartNo(), packageDataContextList.get(0).getPartName(), + packageDataContextList.get(0).getPackageNo(), new Double(packageDataContextList.size()), + packageDataContextList.get(0).getPackSpecQty(), packageDataContextList.get(0).getCreateDatetime(), packageDataContextList.get(0).getModifyDatetime()) + ); + } - resultList = resultList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesPackageDataContext::getModifyDatetime).reversed()).collect(Collectors.toList()); + resultList = resultList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesPackageDataContext::getModifyDatetime).reversed()).collect(Collectors.toList()); - return resultList; - } + 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()); - Map resultMap = new HashMap<>(); resultMap.put(MesPcnExtConstWords.DATA_TYPE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT.getValue()); + MesPackageDataContext packageDataContext = JSONObject.parseObject(buttonDynamicModel.getFunctionValue(), MesPackageDataContext.class); if (null == packageDataContext) { return packResultMap(reqBean, resultBean, resultMap, @@ -98,12 +103,19 @@ public class MesFunctionPackageProgressService extends BaseSwsService implements 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 packResultMap(reqBean, resultBean, resultMap, String.format("零件号[%s]强制封箱成功!", packageDataContext.getPartNo())); } - private Object packResultMap(StationRequestBean reqBean, StationResultBean resultBean, Map resultMap, String message) { + private Object packResultMap(StationRequestBean reqBean, StationResultBean resultBean, Map 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; diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java index 6763778..0be0a6c 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java @@ -222,9 +222,8 @@ public class MesPackageNoGenerateStepService extends BaseStepService { String packageTemplate = packingRule.getPackageTemplate(); String printer = packingRule.getPrinter(); - //如果 packageBarcodeRule || packageTemplate || printer 有一个为空, 则需要根据 箱类别代号查询包装定义 - if (StringUtils.isEmpty(generateTypeName) || (StringUtils.isEmpty(packingRule.getPackCode()) && - (StringUtils.isEmpty(packageBarcodeRule) || StringUtils.isEmpty(packageTemplate) || StringUtils.isEmpty(printer)))) { + //如果 packageBarcodeRule || packageTemplate || printer 有一个为空, 则需要根据 箱类别代号查询包装定义, 但是 printer 不进行强验证,可能是否的是默认打印机 + if (StringUtils.isEmpty(generateTypeName) || (StringUtils.isEmpty(packingRule.getPackCode()) && (StringUtils.isEmpty(packageBarcodeRule) || StringUtils.isEmpty(packageTemplate)))) { this.sendMessage(reqBean, new StationResultBean().writeDbLog(), String.format("零件编码[%s]包装物类型对应的包装代码[%s]配置的成品包装规则信息中必要信息无效:统计方式[%s]箱类别代号[%s]!", partNo, packingRuleDetail.getPackageCode(), StringUtils.isEmpty(generateTypeName) ? MesPcnExtConstWords.EMPTY : generateTypeName, packingRule.getPackCode()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); @@ -234,8 +233,9 @@ public class MesPackageNoGenerateStepService extends BaseStepService { //判断是否需要查询包装定义 if (StringUtils.isEmpty(packageBarcodeRule) || StringUtils.isEmpty(packageTemplate) || StringUtils.isEmpty(printer)) { //根据箱类别代号查询包装定义 - MesPackingDefine packingDefine = packingRuleService.getPackingDefine(reqBean.getOrganizeCode(), packingRule.getPackCode()); - if (null == packingDefine) { + MesPackingDefine packingDefine = StringUtils.isEmpty(packingRule.getPackCode()) ? null : + packingRuleService.getPackingDefine(reqBean.getOrganizeCode(), packingRule.getPackCode()); + if (null == packingDefine && (StringUtils.isEmpty(packageBarcodeRule) || StringUtils.isEmpty(packageTemplate))) { this.sendMessage(reqBean, new StationResultBean().writeDbLog(), String.format("零件编码[%s]包装物类型对应的包装代码[%s]配置成品包装规则信息中的箱类别代号[%s]未维护包装定义信息!", partNo, packingRuleDetail.getPackageCode(), packingRule.getPackCode()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); return null; @@ -244,7 +244,7 @@ public class MesPackageNoGenerateStepService extends BaseStepService { //如果为空, 则取包装定义中维护的信息 if (StringUtils.isEmpty(packageBarcodeRule)) packageBarcodeRule = packingDefine.getPackageBarcodeRule(); if (StringUtils.isEmpty(packageTemplate)) packageTemplate = packingDefine.getPackageTemplate(); - if (StringUtils.isEmpty(printer)) printer = packingDefine.getPrinter(); + if (StringUtils.isEmpty(printer) && null != packingDefine) printer = packingDefine.getPrinter(); //此时 packageBarcodeRule || packageTemplate 仍有一个为空则 记录日志 忽略当前零件的打包 if (StringUtils.isEmpty(packageBarcodeRule) || StringUtils.isEmpty(packageTemplate)) { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionCustomContextStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionCustomContextStepService.java index 1759174..b9ec758 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionCustomContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionCustomContextStepService.java @@ -276,7 +276,10 @@ public class MesProductionCustomContextStepService extends BaseStepService imple //保存打包数据 [JSON]List @Override public Boolean dispatchPackageDataContext(StationRequestBean reqBean, Map packageDataContextMap) { - if (CollectionUtils.isEmpty(packageDataContextMap)) return false; + if (CollectionUtils.isEmpty(packageDataContextMap)) { + removePackageDataContext(reqBean); + return true; + } return dispatchFsmBusiData(reqBean.getOrganizeCode(), getPackageDataContextKey(reqBean), JSONObject.toJSONString(packageDataContextMap)); } From 5e5e2b4de8ebeeb0c653e2a0f7f07ed0f5cf811e Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Tue, 14 Jan 2025 16:22:31 +0800 Subject: [PATCH 06/10] =?UTF-8?q?44517=20=E8=A3=85=E7=AE=B1=E9=98=B2?= =?UTF-8?q?=E9=94=99=E5=90=8E=E5=90=90=E6=9D=A1=E7=A0=81=E9=9C=80=E6=B1=82?= =?UTF-8?q?=EF=BC=88=E8=8A=9C=E6=B9=96=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MesFunctionDialogElectronicInspectionService.java | 11 ++++++----- .../serviceimpl/step/MesCustomDialogStepService.java | 4 ++-- .../serviceimpl/step/MesPackageNoGenerateStepService.java | 2 +- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionDialogElectronicInspectionService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionDialogElectronicInspectionService.java index b3bd2c1..81d826c 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionDialogElectronicInspectionService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionDialogElectronicInspectionService.java @@ -1,7 +1,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station.function; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; -import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsInContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseSwsService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService; import cn.estsh.i3plus.pojo.mes.model.StationCustomDialogBean; @@ -28,11 +28,12 @@ public class MesFunctionDialogElectronicInspectionService extends BaseSwsService @Override public StationCustomDialogBean stepDialogDispatch(StationRequestBean reqBean, StationCustomDialogBean dialogBean) { - List productionPsInContext = productionDispatchContextStepService.getProductionPsInContext(reqBean); + //获取上下文产出条码数据信息集合 + List productionPsOutContext = productionDispatchContextStepService.getProductionPsOutContext(reqBean); - // 如果当前存在进料条码列表则返回条码集合 - if (!CollectionUtils.isEmpty(productionPsInContext)) { - List snList = productionPsInContext.stream().filter(o -> !StringUtils.isEmpty(o.getProductSn())).map(MesProductionPsInContext::getProductSn).distinct().collect(Collectors.toList()); + //如果当前存在产出条码列表则返回条码集合 + if (!CollectionUtils.isEmpty(productionPsOutContext)) { + List snList = productionPsOutContext.stream().filter(o -> !StringUtils.isEmpty(o.getProductSn())).map(MesProductionPsOutContext::getProductSn).distinct().collect(Collectors.toList()); // 条码列表为空则表示不需要弹框 if (CollectionUtils.isEmpty(snList)) return dialogBean.unDialog(); else return dialogBean.asyn().obj(snList); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCustomDialogStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCustomDialogStepService.java index 72ca786..1219e56 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCustomDialogStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCustomDialogStepService.java @@ -50,7 +50,7 @@ public class MesCustomDialogStepService extends BaseStepService { if (reqBean.getStepDialogStatus()) { reqBean.setButtonCode(null); reqBean.setStepDialogStatus(false); - return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, "弹框会话关闭!"); + return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult, true, MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, "弹框会话关闭!"); } //获取工步参数 @@ -80,7 +80,7 @@ public class MesCustomDialogStepService extends BaseStepService { if (!scdBean.getIsAsyn()) stepSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), "弹框会话开启!"); //弹框业务异步处理 - return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, true, MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, "弹框会话异步开启!"); + return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult, true, MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, "弹框会话异步开启!"); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java index 0be0a6c..134e8f8 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java @@ -183,7 +183,7 @@ public class MesPackageNoGenerateStepService extends BaseStepService { } //保存包装规则信息 - if (initQty != packageRuleContextMap.size()) productionProcessContextStepService.dispatchPackageRuleContext(reqBean, packageRuleContextMap); + if (!CollectionUtils.isEmpty(packageRuleContextMap) && initQty != packageRuleContextMap.size()) productionProcessContextStepService.dispatchPackageRuleContext(reqBean, packageRuleContextMap); // 保存打包数据 productionCustomContextStepService.dispatchPackageDataContext(reqBean, packageDataContextMap); From 96900f5e7b7a25c39aea4d34da6da35356020775 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Tue, 14 Jan 2025 16:50:52 +0800 Subject: [PATCH 07/10] =?UTF-8?q?44517=20=E8=A3=85=E7=AE=B1=E9=98=B2?= =?UTF-8?q?=E9=94=99=E5=90=8E=E5=90=90=E6=9D=A1=E7=A0=81=E9=9C=80=E6=B1=82?= =?UTF-8?q?=EF=BC=88=E8=8A=9C=E6=B9=96=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/station/function/MesFunctionPackageProgressService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java index 218f235..662ace3 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java @@ -90,7 +90,7 @@ public class MesFunctionPackageProgressService extends BaseSwsService implements String.format("生产线[%s]工位[%s]强制打包失败,打包进度列表中已经不存在包装条码[%s],请刷新重试!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), packageDataContext.getPackageNo())); } - MesPackage packageDb = packageNoGenerateStepService.getMesPackage(reqBean.getOrganizeCode(), packageDataContext.getPackageId()); + MesPackage packageDb = packageNoGenerateStepService.getMesPackage(reqBean.getOrganizeCode(), packageDataContextList.get(0).getPackageId()); if (null == packageDb) { return packResultMap(reqBean, resultBean, resultMap, String.format("生产线[%s]工位[%s]强制打包失败,包装条码[%s]信息已经不存在,请刷新重试!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), packageDataContext.getPackageNo())); From b695fc1742183390616d594067923222c7311fee Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Wed, 15 Jan 2025 20:21:59 +0800 Subject: [PATCH 08/10] =?UTF-8?q?44517=20=E8=A3=85=E7=AE=B1=E9=98=B2?= =?UTF-8?q?=E9=94=99=E5=90=8E=E5=90=90=E6=9D=A1=E7=A0=81=E9=9C=80=E6=B1=82?= =?UTF-8?q?=EF=BC=88=E8=8A=9C=E6=B9=96=EF=BC=89=E4=B8=B4=E6=97=B6=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MesFunctionPackageProgressService.java | 50 ++++++++++++++-------- .../step/MesPackageNoGenerateStepService.java | 47 ++++++++++++-------- .../method/IMesPackageNoGenerateStepService.java | 27 ++++++++++++ 3 files changed, 86 insertions(+), 38 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/IMesPackageNoGenerateStepService.java diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java index 662ace3..64e3fd8 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java @@ -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 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 resultMap, String message) { + private Object doPackResultMap(StationRequestBean reqBean, StationResultBean resultBean, Map 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 packageDataContextList, MesPackage packageDb) { - packageNoGenerateStepService.savePackageDb(reqBean, packageDb, packageDataContextList.size(), true); + private void doForcePrint(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, + List packageDataContextList, MesPackage packageDb, Map packageDataContextMap) { + packageNoGenerateStepService.savePackageDb(reqBean, packageDb, packageDataContextList.size(), true, false); List 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); } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java index 134e8f8..5913cde 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java @@ -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) stepResult.getDataCollection(), false); + MesProduceSnPrintModel printModel = printProduceSn(reqBean, resultBean, stepResult, packageRuleContext, labelTemplate, strategyService, (List) 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 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 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; //发送打印信息 diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/IMesPackageNoGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/IMesPackageNoGenerateStepService.java new file mode 100644 index 0000000..72f7a1a --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/IMesPackageNoGenerateStepService.java @@ -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 packageList, Boolean isAsyn); + + void doPrint(StationRequestBean reqBean, MesProduceSnPrintModel printModel); + +} From 86a6b595fdd7e5c39092b683c6755a8ba2213b51 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Wed, 15 Jan 2025 21:43:24 +0800 Subject: [PATCH 09/10] =?UTF-8?q?44517=20=E8=A3=85=E7=AE=B1=E9=98=B2?= =?UTF-8?q?=E9=94=99=E5=90=8E=E5=90=90=E6=9D=A1=E7=A0=81=E9=9C=80=E6=B1=82?= =?UTF-8?q?=EF=BC=88=E8=8A=9C=E6=B9=96=EF=BC=89=E4=B8=B4=E6=97=B6=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MesFunctionPackageProgressService.java | 31 +++++++++++----------- .../step/MesPackageNoGenerateStepService.java | 26 +++++++++--------- .../method/IMesPackageNoGenerateStepService.java | 19 +++++-------- 3 files changed, 34 insertions(+), 42 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java index 64e3fd8..edc54a2 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java @@ -18,6 +18,8 @@ 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.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; @@ -80,49 +82,52 @@ public class MesFunctionPackageProgressService extends BaseSwsService implements resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PICK.getValue()).scanInfo(packageDataContext.getPackageNo()); if (null == packageDataContext) { - return doPackResultMap(reqBean, resultBean, resultMap, + return packResultMap(reqBean, resultBean, resultMap, String.format("生产线[%s]工位[%s]强制打包失败,参数异常!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode())); } if (CollectionUtils.isEmpty(packageDataContextMap) || !packageDataContextMap.containsKey(packageDataContext.getPartNo())) { - return doPackResultMap(reqBean, resultBean, resultMap, + return packResultMap(reqBean, resultBean, resultMap, String.format("生产线[%s]工位[%s]强制打包失败,当前已无零件号[%s]未封箱状态的包装信息!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), packageDataContext.getPartNo())); } List packageDataContextList = JSONObject.parseArray(packageDataContextMap.get(packageDataContext.getPartNo()), MesPackageDataContext.class); if (CollectionUtils.isEmpty(packageDataContextList) || !packageDataContextList.get(0).getPackageNo().equals(packageDataContext.getPackageNo())) { - return doPackResultMap(reqBean, resultBean, resultMap, + return packResultMap(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 doPackResultMap(reqBean, resultBean, resultMap, + return packResultMap(reqBean, resultBean, resultMap, String.format("生产线[%s]工位[%s]强制打包失败,包装条码[%s]信息已经不存在,请刷新重试!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), packageDataContext.getPackageNo())); } StepResult stepResult = StepResult.getSuccessComplete(); try { - doForcePrint(reqBean, resultBean, stepResult, packageDataContextList, packageDb, packageDataContextMap); + packageNoGenerateStepService.doForcePrint(reqBean, resultBean, stepResult, packageDataContextList, packageDb); } catch (ImppBusiException e) { stepResult.msg(e.getMessage()); } catch (Exception e) { stepResult.msg(e.getMessage()); } if (!StringUtils.isEmpty(stepResult.getMsg())) { - return doPackResultMap(reqBean, resultBean, resultMap, + return packResultMap(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 doPackResultMap(reqBean, resultBean, resultMap, String.format("零件号[%s]强制封箱成功!", packageDataContext.getPartNo())); + return packResultMap(reqBean, resultBean, resultMap, String.format("零件号[%s]强制封箱成功!", packageDataContext.getPartNo())); } - private Object doPackResultMap(StationRequestBean reqBean, StationResultBean resultBean, Map resultMap, String message) { + private Object packResultMap(StationRequestBean reqBean, StationResultBean resultBean, Map 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; @@ -130,14 +135,8 @@ public class MesFunctionPackageProgressService extends BaseSwsService implements private void doForcePrint(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List packageDataContextList, MesPackage packageDb, Map packageDataContextMap) { - packageNoGenerateStepService.savePackageDb(reqBean, packageDb, packageDataContextList.size(), true, false); - List packageList = new ArrayList<>(); - packageList.add(packageDb); - 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); + + } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java index 5913cde..0ff1e78 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java @@ -179,8 +179,7 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements //判断存在包装信息则进行打印 if (!CollectionUtils.isEmpty(stepResult.getDataCollection())) { - MesProduceSnPrintModel printModel = printProduceSn(reqBean, resultBean, stepResult, packageRuleContext, labelTemplate, strategyService, (List) stepResult.getDataCollection(), false); - doPrint(reqBean, printModel); + doPrintPackageNo(reqBean, resultBean, stepResult, packageRuleContext, labelTemplate, strategyService, (List) stepResult.getDataCollection(), false); } } @@ -354,8 +353,7 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements } //判断包装条码是否存在ID进行新增或者更新操作, 如果满足标包则标记满包状态跟打印状态 - @Override - public MesPackage savePackageDb(StationRequestBean reqBean, MesPackage packageDb, Integer curQty, Boolean isSealed, Boolean isSave) { + private MesPackage savePackageDb(StationRequestBean reqBean, MesPackage packageDb, Integer curQty, Boolean isSealed, Boolean isSave) { if (!StringUtils.isEmpty(packageDb.getId())) { //下面直接根据ID进行修改, 所以此处置为游离态 @@ -379,8 +377,7 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements return packageDb; } - @Override - public void savePackageDbById(StationRequestBean reqBean, MesPackage packageDb) { + private void savePackageDbById(StationRequestBean reqBean, MesPackage packageDb) { packageRepository.updateByPropertiesNoSync( new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.ID}, new Object[]{reqBean.getOrganizeCode(), packageDb.getId()}, @@ -455,8 +452,7 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements return null; } - @Override - public MesProduceSnPrintModel printProduceSn(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesPackageRuleContext packageRuleContext, + private void doPrintPackageNo(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesPackageRuleContext packageRuleContext, MesLabelTemplate labelTemplate, IPrintTemplateStrategyService strategyService, List packageList, Boolean isAsyn) { if (null == strategyService) { //查询模版信息 @@ -492,11 +488,6 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements } else MesPcnException.throwBusiException("%s %s!", webMsg, e.toString()); } - return printModel; - } - - @Override - public void doPrint(StationRequestBean reqBean, MesProduceSnPrintModel printModel) { if (CollectionUtils.isEmpty(printModel.getPrintContextList())) return; //发送打印信息 @@ -511,4 +502,13 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements printedSnLogRepository.saveAll(printModel.getMesPrintedSnLogList()); } + @Override + public void doForcePrint(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List packageDataContextList, MesPackage packageDb) { + savePackageDb(reqBean, packageDb, packageDataContextList.size(), true, false); + List packageList = new ArrayList<>(); + packageList.add(packageDb); + doPrintPackageNo(reqBean, resultBean, stepResult, packageDataContextList.get(0), null, null, packageList, true); + savePackageDbById(reqBean, packageDb); + } + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/IMesPackageNoGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/IMesPackageNoGenerateStepService.java index 72f7a1a..ac30557 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/IMesPackageNoGenerateStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/IMesPackageNoGenerateStepService.java @@ -1,13 +1,13 @@ 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.ext.mes.pcn.pojo.context.MesPackageDataContext; 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 cn.estsh.impp.framework.boot.exception.ImppBusiException; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -15,13 +15,6 @@ 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 packageList, Boolean isAsyn); - - void doPrint(StationRequestBean reqBean, MesProduceSnPrintModel printModel); - + @Transactional(propagation = Propagation.NESTED, rollbackFor = {ImppBusiException.class, Exception.class}) + void doForcePrint(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List packageDataContextList, MesPackage packageDb); } From 712fb6b9438e4d4565472a7bb6e258cd4632f399 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Wed, 15 Jan 2025 23:41:23 +0800 Subject: [PATCH 10/10] =?UTF-8?q?44517=20=E8=A3=85=E7=AE=B1=E9=98=B2?= =?UTF-8?q?=E9=94=99=E5=90=8E=E5=90=90=E6=9D=A1=E7=A0=81=E9=9C=80=E6=B1=82?= =?UTF-8?q?=EF=BC=88=E8=8A=9C=E6=B9=96=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../station/function/MesFunctionPackageProgressService.java | 13 ++++++++++--- .../serviceimpl/step/MesPackageNoGenerateStepService.java | 9 ++++++++- .../step/method/IMesPackageNoGenerateStepService.java | 2 +- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java index edc54a2..8075b39 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionPackageProgressService.java @@ -3,8 +3,8 @@ 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.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.actor.shipping.dispatch.IFsmRouteDataService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseSwsService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; @@ -39,7 +39,11 @@ public class MesFunctionPackageProgressService extends BaseSwsService implements @Autowired private IMesPackageNoGenerateStepService packageNoGenerateStepService; + @Autowired + private IFsmRouteDataService fsmRouteDataService; + @Override + @Transactional(propagation = Propagation.NOT_SUPPORTED) public Object doCustomApiDispatch(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel) { Map resultMap = new HashMap<>(); @@ -107,10 +111,13 @@ public class MesFunctionPackageProgressService extends BaseSwsService implements try { packageNoGenerateStepService.doForcePrint(reqBean, resultBean, stepResult, packageDataContextList, packageDb); } catch (ImppBusiException e) { - stepResult.msg(e.getMessage()); + stepResult.msg(e.getErrorDetail()); } catch (Exception e) { - stepResult.msg(e.getMessage()); + String error = String.format("生产线[%s]工位[%s]强制打包%s", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), fsmRouteDataService.handleFsmCfgOrDefault(reqBean, MesPcnEnumUtil.FSM_CFG.FSM_EXCEPTION_MSG.getCode())); + this.cacheException(reqBean, reqBean.getStepName(), error, e, false); + stepResult.msg(error); } + if (!StringUtils.isEmpty(stepResult.getMsg())) { return packResultMap(reqBean, resultBean, resultMap, String.format("生产线[%s]工位[%s]强制打包失败,%s", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), stepResult.getMsg())); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java index 0ff1e78..745824e 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesPackageNoGenerateStepService.java @@ -39,6 +39,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; @@ -474,6 +476,7 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements mesProduceSnPrintModel.getPackageList().addAll(packageList); MesProduceSnPrintModel printModel = null; + try { printModel = strategyService.execute(null, mesProduceSnPrintModel, null, stepResult, reqBean, true); } catch (ImppBusiException e) { @@ -485,7 +488,10 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements 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 MesPcnException.throwBusiException("%s %s!", webMsg, e.toString()); + } else { + this.cacheException(reqBean, reqBean.getStepName(), webMsg, e, false); + MesPcnException.throwBusiException(webMsg); + } } if (CollectionUtils.isEmpty(printModel.getPrintContextList())) return; @@ -503,6 +509,7 @@ public class MesPackageNoGenerateStepService extends BaseStepService implements } @Override + @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = {ImppBusiException.class, Exception.class}) public void doForcePrint(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List packageDataContextList, MesPackage packageDb) { savePackageDb(reqBean, packageDb, packageDataContextList.size(), true, false); List packageList = new ArrayList<>(); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/IMesPackageNoGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/IMesPackageNoGenerateStepService.java index ac30557..1e9b2d6 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/IMesPackageNoGenerateStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/method/IMesPackageNoGenerateStepService.java @@ -15,6 +15,6 @@ public interface IMesPackageNoGenerateStepService { MesPackage getMesPackage(String organizeCode, Long packageId); - @Transactional(propagation = Propagation.NESTED, rollbackFor = {ImppBusiException.class, Exception.class}) + void doForcePrint(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, List packageDataContextList, MesPackage packageDb); }