diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesFengRenBatchReportService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesFengRenBatchReportService.java index 2b1a9a7..3feeaa5 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesFengRenBatchReportService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesFengRenBatchReportService.java @@ -108,15 +108,15 @@ public class MesFengRenBatchReportService implements IMesFengRenBatchReportServi MesPcnException.throwBusiException("汇报失败:生产工单[%s]信息当前状态[%s]!", MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrderDb.getWorkOrderStatus())); //验证超工单 - Double reportQty = MathOperation.add(new Double(model.getNum()), workOrderDb.getReportedQty()); + Double reportedQty = MathOperation.add(new Double(model.getNum()), workOrderDb.getReportedQty()); Integer workOrderStatus = MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue(); - if (MathOperation.compareTo(reportQty, workOrderDb.getQty()) > 0) { + if (MathOperation.compareTo(reportedQty, workOrderDb.getQty()) > 0) { MesWorkCenter workCenter = prodOrgExtService.getWorkCenterDb(model.getOrganizeCode(), workOrderDb.getWorkCenterCode()); if (StringUtils.isEmpty(workCenter.getIsCheckOrderQty()) || workCenter.getIsCheckOrderQty().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) != 0) MesPcnException.throwMesBusiException("汇报失败:工单号[%s]计划数量[%s]已报工数量[%s],当前不允许超工单!", workOrderDb.getWorkOrderNo(), workOrderDb.getQty(), workOrderDb.getReportedQty()); - Double rate = MathOperation.div((MathOperation.sub(reportQty, workOrderDb.getQty())), workOrderDb.getQty()); + Double rate = MathOperation.div((MathOperation.sub(reportedQty, workOrderDb.getQty())), workOrderDb.getQty()); if (MathOperation.compareTo(rate, MathOperation.div(workCenter.getOrderRate(), new Double(MesPcnExtConstWords.ONE_HUNDRED))) > 0) MesPcnException.throwMesBusiException("汇报失败:请检查工单数量,工单号[%s]计划数量[%s]已报工数量[%s]超工单比例[%s]!", workOrderDb.getWorkOrderNo(), workOrderDb.getQty(), workOrderDb.getReportedQty(), workCenter.getOrderRate()); @@ -165,9 +165,9 @@ public class MesFengRenBatchReportService implements IMesFengRenBatchReportServi //计数 Double unCompleteQty = MathOperation.sub(workOrderDb.getQty(), workOrderDb.getReportedQty()); if (MathOperation.compareTo(unCompleteQty, new Double(0)) < 0) unCompleteQty = new Double(0); - if (MathOperation.compareTo(reportQty, workOrderDb.getQty()) < 0) workOrderStatus = MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue(); + if (MathOperation.compareTo(reportedQty, workOrderDb.getQty()) < 0) workOrderStatus = MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue(); - log.info("工厂{}缝纫批量汇报 --- PROCESS_INFO --- MesBomSize:{} --- MesPackageDataContext:{} --- workOrderStatus:{} --- reportQty:{} --- {}", model.getOrganizeCode(), mesBoms.size(), JSONObject.toJSONString(packageDataContext), workOrderStatus, reportQty, Thread.currentThread().getName()); + log.info("工厂{}缝纫批量汇报 --- PROCESS_INFO --- MesBomSize:{} --- MesPackageDataContext:{} --- workOrderStatus:{} --- reportedQty:{} --- {}", model.getOrganizeCode(), mesBoms.size(), JSONObject.toJSONString(packageDataContext), workOrderStatus, reportedQty, Thread.currentThread().getName()); //查询模版信息 MesLabelTemplate labelTemplate = templateService.getLabelTemplate(packageDataContext.getPackageTemplate(), reqBean.getOrganizeCode()); @@ -178,13 +178,15 @@ public class MesFengRenBatchReportService implements IMesFengRenBatchReportServi //生成箱条码集合 packageDataContext.setGenerateType(MesExtEnumUtil.PACKING_RULE_GENERATE_TYPE.PACKAGE.getValue()); packageDataContext.setPartPackWorkOrderNo(workOrderDb.getWorkOrderNo()); + packageDataContext.setQty(new Double(model.getNum())); + stepResult.setDataCollection(new ArrayList()); packageNoGenerateStepService.doHandlePackagePrint(reqBean, stepResult, packageDataContext, null, packageNoGenerateStepService.generateVirtualPs(packageDataContext.getQty()), true); //进行打印 List packageList = (List) stepResult.getDataCollection(); MesProduceSnPrintModel printModel = packageNoGenerateStepService.doPrintPackageNo(reqBean, null, stepResult, packageDataContext, labelTemplate, strategyService, packageList, true); //更新工单 - updateMesWorkOrder(workOrderDb, model, workOrderStatus, reportQty, unCompleteQty); + updateMesWorkOrder(workOrderDb, model, workOrderStatus, reportedQty, unCompleteQty); //遍历写汇报 List mesProductOffLineList = new ArrayList<>(); @@ -196,21 +198,22 @@ public class MesFengRenBatchReportService implements IMesFengRenBatchReportServi } } productOffLineRepository.saveAll(mesProductOffLineList); + log.info("工厂{}缝纫批量汇报 --- PROCESS_INFO --- MesProductOffLine:{} --- {}", model.getOrganizeCode(), JSONObject.toJSONString(mesProductOffLineList), Thread.currentThread().getName()); log.info("工厂{}缝纫批量汇报 --- PROCESS_INFO --- MesPackageList:{} --- {}", model.getOrganizeCode(), JSONObject.toJSONString(packageList), Thread.currentThread().getName()); return printModel; } - private void updateMesWorkOrder(MesWorkOrder mesWorkOrder, MesWorkOrderExtModel model, Integer workOrderStatus, Double reportQty, Double unCompleteQty) { + private void updateMesWorkOrder(MesWorkOrder mesWorkOrder, MesWorkOrderExtModel model, Integer workOrderStatus, Double reportedQty, Double unCompleteQty) { ConvertBean.serviceModelUpdate(mesWorkOrder, model.getModifyUser()); String now = (new SimpleDateFormat(MesPcnExtConstWords.DATE_FORMAT_SSS)).format(new Date()); workOrderRepository.updateByPropertiesNoSync( new String[]{MesPcnExtConstWords.ID, MesPcnExtConstWords.ORGANIZE_CODE}, new Object[]{mesWorkOrder.getId(), mesWorkOrder.getOrganizeCode()}, - new String[]{MesPcnExtConstWords.WORK_ORDER_STATUS, MesPcnExtConstWords.REPORT_QTY, MesPcnExtConstWords.COMPLETE_QTY, MesPcnExtConstWords.UN_COMPLETE_QTY, + new String[]{MesPcnExtConstWords.WORK_ORDER_STATUS, MesPcnExtConstWords.REPORTED_QTY, MesPcnExtConstWords.COMPLETE_QTY, MesPcnExtConstWords.UN_COMPLETE_QTY, MesPcnExtConstWords.DESCRIPTION, MesPcnExtConstWords.REMARK, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.SYSTEM_SYNC_DATE_TIME}, - new Object[]{workOrderStatus, reportQty, reportQty, unCompleteQty, + new Object[]{workOrderStatus, reportedQty, reportedQty, unCompleteQty, model.getDescription(), model.getDescription(), now, model.getModifyUser(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesPcnExtConstWords.EMPTY}); MesWorkOrderLog workOrderLog = new MesWorkOrderLog(); @@ -221,8 +224,8 @@ public class MesFengRenBatchReportService implements IMesFengRenBatchReportServi workOrderLog.setDescription(model.getDescription()); workOrderLog.setRemark(model.getDescription()); workOrderLog.setWorkOrderStatus(workOrderStatus); - workOrderLog.setReportedQty(reportQty); - workOrderLog.setCompleteQty(reportQty); + workOrderLog.setReportedQty(reportedQty); + workOrderLog.setCompleteQty(reportedQty); workOrderLog.setUnCompleteQty(unCompleteQty); workOrderLog.setCreateDatetime(model.getModifyUser()); workOrderLog.setModifyUser(model.getModifyUser()); @@ -233,8 +236,7 @@ public class MesFengRenBatchReportService implements IMesFengRenBatchReportServi private MesProductOffLine creatMesProductOffLine(String userName, MesWorkOrder workOrderDb, MesProductVersion mesProductVersion, String reportSn, String serialNumber, Double num, MesBom mesBom, String nowTime, Integer bomTotalSize) { - MesProductOffLine newMesProductOffLine; - newMesProductOffLine = new MesProductOffLine(); + MesProductOffLine newMesProductOffLine = new MesProductOffLine(); newMesProductOffLine.setReportPartNo(workOrderDb.getPartNo()); newMesProductOffLine.setReportPartNameRdd(workOrderDb.getPartName()); newMesProductOffLine.setReportSn(reportSn); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/numberrule/YfaiPackageNumberRuleStrategyService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/numberrule/YfaiPackageNumberRuleStrategyService.java index ca660e1..073d2c0 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/numberrule/YfaiPackageNumberRuleStrategyService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/numberrule/YfaiPackageNumberRuleStrategyService.java @@ -44,6 +44,8 @@ public class YfaiPackageNumberRuleStrategyService implements INumberRulePackAttr //20241223 {YEAR}{MONTH}{DAY} //| {SPILTRULE} + private final static String DR_QTY = "DR_QTY"; + @Override public GenSerialNoModel execute(GenSerialNoModel genSerialNoModel) { Map dataMap = genSerialNoModel.getDataMap(); @@ -57,7 +59,8 @@ public class YfaiPackageNumberRuleStrategyService implements INumberRulePackAttr genSerialNoModel.setDynamicRule( new StringJoiner(MesPcnExtConstWords.COMMA) .add(((new SimpleDateFormat(MesPcnExtConstWords.DATE_FORMAT_SHORT)).format(new Date()))) - .add(String.format("%.1f", qty)) + //.add(String.format("%.1f", qty)) + .add(DR_QTY) .add(unit) .toString() ); @@ -78,6 +81,12 @@ public class YfaiPackageNumberRuleStrategyService implements INumberRulePackAttr } catch (Exception e) { packageOneCode = serialNo; } + + Map dataMap = genSerialNoModel.getDataMap(); + MesPackageRuleContext packageRuleContext = !CollectionUtils.isEmpty(dataMap) ? (MesPackageRuleContext) dataMap.get(MesPackageRuleContext.class.getSimpleName()) : null; + Double qty = (!CollectionUtils.isEmpty(dataMap) && dataMap.containsKey(MesPcnExtConstWords.QTY)) ? (Double) dataMap.get(MesPcnExtConstWords.QTY) : null; + if (StringUtils.isEmpty(qty)) qty = null != packageRuleContext ? packageRuleContext.getPackSpecQty() : new Double(1); + serialNo = serialNo.replace(DR_QTY, String.format("%.1f", qty)); genSerialNoModel.putDataMap(serialNo, packageOneCode); return serialNo; } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/YfaiPackageNoFengRenPrintStrategy.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/YfaiPackageNoFengRenPrintStrategy.java new file mode 100644 index 0000000..3c3558c --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/print/strategy/YfaiPackageNoFengRenPrintStrategy.java @@ -0,0 +1,97 @@ +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 YfaiPackageNoFengRenPrintStrategy 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()); + + // 返回的结果集合 + List> printDataMapList = new ArrayList<>(); + if (!isStep) { + model.getPackageList().forEach(o -> printDataMapList.add(getPrintMap(model, o, customerPart))); + model.setPrintContextList(printDataMapList); + } else { + model.getPackageList().forEach(o -> printDataMapList.add(getPrintMap(model, o, customerPart))); + model.getPrintContextList().add(packResultMap(model, printDataMapList)); + } + + 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.getPartName()); + resultMap.put(MesPcnExtConstWords.CUST_PART_NO, null == customerPart ? MesPcnExtConstWords.EMPTY : 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)); + resultMap.put(MesPcnExtConstWords.BAR_CODE, packageDb.getPackageOneCode()); + 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-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 539d135..e59c27b 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 @@ -117,7 +117,7 @@ public class MesPcnExtConstWords { // 模具号 public static final String MOULD_NO = "mouldNo"; // 汇报数 - public static final String REPORT_QTY = "reportQty"; + public static final String REPORTED_QTY = "reportedQty"; // 工单完成数 public static final String COMPLETE_QTY = "completeQty"; // 工单未完成数