礼嘉缝纫批量汇报

uat-temp-wj-chongqingdaqu-prod-lijiabatchreport
王杰 3 months ago
parent d8186cb52f
commit ce7e467540

@ -108,15 +108,15 @@ public class MesFengRenBatchReportService implements IMesFengRenBatchReportServi
MesPcnException.throwBusiException("汇报失败:生产工单[%s]信息当前状态[%s]!", MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrderDb.getWorkOrderStatus())); 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(); 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()); MesWorkCenter workCenter = prodOrgExtService.getWorkCenterDb(model.getOrganizeCode(), workOrderDb.getWorkCenterCode());
if (StringUtils.isEmpty(workCenter.getIsCheckOrderQty()) || workCenter.getIsCheckOrderQty().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) != 0) 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()); 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) 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()); 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()); Double unCompleteQty = MathOperation.sub(workOrderDb.getQty(), workOrderDb.getReportedQty());
if (MathOperation.compareTo(unCompleteQty, new Double(0)) < 0) unCompleteQty = new Double(0); 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()); 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.setGenerateType(MesExtEnumUtil.PACKING_RULE_GENERATE_TYPE.PACKAGE.getValue());
packageDataContext.setPartPackWorkOrderNo(workOrderDb.getWorkOrderNo()); 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); packageNoGenerateStepService.doHandlePackagePrint(reqBean, stepResult, packageDataContext, null, packageNoGenerateStepService.generateVirtualPs(packageDataContext.getQty()), true);
//进行打印 //进行打印
List<MesPackage> packageList = (List<MesPackage>) stepResult.getDataCollection(); List<MesPackage> packageList = (List<MesPackage>) stepResult.getDataCollection();
MesProduceSnPrintModel printModel = packageNoGenerateStepService.doPrintPackageNo(reqBean, null, stepResult, packageDataContext, labelTemplate, strategyService, packageList, true); 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<MesProductOffLine> mesProductOffLineList = new ArrayList<>(); List<MesProductOffLine> mesProductOffLineList = new ArrayList<>();
@ -196,21 +198,22 @@ public class MesFengRenBatchReportService implements IMesFengRenBatchReportServi
} }
} }
productOffLineRepository.saveAll(mesProductOffLineList); 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()); log.info("工厂{}缝纫批量汇报 --- PROCESS_INFO --- MesPackageList:{} --- {}", model.getOrganizeCode(), JSONObject.toJSONString(packageList), Thread.currentThread().getName());
return printModel; 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()); ConvertBean.serviceModelUpdate(mesWorkOrder, model.getModifyUser());
String now = (new SimpleDateFormat(MesPcnExtConstWords.DATE_FORMAT_SSS)).format(new Date()); String now = (new SimpleDateFormat(MesPcnExtConstWords.DATE_FORMAT_SSS)).format(new Date());
workOrderRepository.updateByPropertiesNoSync( workOrderRepository.updateByPropertiesNoSync(
new String[]{MesPcnExtConstWords.ID, MesPcnExtConstWords.ORGANIZE_CODE}, new String[]{MesPcnExtConstWords.ID, MesPcnExtConstWords.ORGANIZE_CODE},
new Object[]{mesWorkOrder.getId(), mesWorkOrder.getOrganizeCode()}, 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}, 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}); model.getDescription(), model.getDescription(), now, model.getModifyUser(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), MesPcnExtConstWords.EMPTY});
MesWorkOrderLog workOrderLog = new MesWorkOrderLog(); MesWorkOrderLog workOrderLog = new MesWorkOrderLog();
@ -221,8 +224,8 @@ public class MesFengRenBatchReportService implements IMesFengRenBatchReportServi
workOrderLog.setDescription(model.getDescription()); workOrderLog.setDescription(model.getDescription());
workOrderLog.setRemark(model.getDescription()); workOrderLog.setRemark(model.getDescription());
workOrderLog.setWorkOrderStatus(workOrderStatus); workOrderLog.setWorkOrderStatus(workOrderStatus);
workOrderLog.setReportedQty(reportQty); workOrderLog.setReportedQty(reportedQty);
workOrderLog.setCompleteQty(reportQty); workOrderLog.setCompleteQty(reportedQty);
workOrderLog.setUnCompleteQty(unCompleteQty); workOrderLog.setUnCompleteQty(unCompleteQty);
workOrderLog.setCreateDatetime(model.getModifyUser()); workOrderLog.setCreateDatetime(model.getModifyUser());
workOrderLog.setModifyUser(model.getModifyUser()); workOrderLog.setModifyUser(model.getModifyUser());
@ -233,8 +236,7 @@ public class MesFengRenBatchReportService implements IMesFengRenBatchReportServi
private MesProductOffLine creatMesProductOffLine(String userName, MesWorkOrder workOrderDb, MesProductVersion mesProductVersion, private MesProductOffLine creatMesProductOffLine(String userName, MesWorkOrder workOrderDb, MesProductVersion mesProductVersion,
String reportSn, String serialNumber, Double num, MesBom mesBom, String nowTime, Integer bomTotalSize) { String reportSn, String serialNumber, Double num, MesBom mesBom, String nowTime, Integer bomTotalSize) {
MesProductOffLine newMesProductOffLine; MesProductOffLine newMesProductOffLine = new MesProductOffLine();
newMesProductOffLine = new MesProductOffLine();
newMesProductOffLine.setReportPartNo(workOrderDb.getPartNo()); newMesProductOffLine.setReportPartNo(workOrderDb.getPartNo());
newMesProductOffLine.setReportPartNameRdd(workOrderDb.getPartName()); newMesProductOffLine.setReportPartNameRdd(workOrderDb.getPartName());
newMesProductOffLine.setReportSn(reportSn); newMesProductOffLine.setReportSn(reportSn);

@ -44,6 +44,8 @@ public class YfaiPackageNumberRuleStrategyService implements INumberRulePackAttr
//20241223 {YEAR}{MONTH}{DAY} //20241223 {YEAR}{MONTH}{DAY}
//| {SPILTRULE} //| {SPILTRULE}
private final static String DR_QTY = "DR_QTY";
@Override @Override
public GenSerialNoModel execute(GenSerialNoModel genSerialNoModel) { public GenSerialNoModel execute(GenSerialNoModel genSerialNoModel) {
Map<String, Object> dataMap = genSerialNoModel.getDataMap(); Map<String, Object> dataMap = genSerialNoModel.getDataMap();
@ -57,7 +59,8 @@ public class YfaiPackageNumberRuleStrategyService implements INumberRulePackAttr
genSerialNoModel.setDynamicRule( genSerialNoModel.setDynamicRule(
new StringJoiner(MesPcnExtConstWords.COMMA) new StringJoiner(MesPcnExtConstWords.COMMA)
.add(((new SimpleDateFormat(MesPcnExtConstWords.DATE_FORMAT_SHORT)).format(new Date()))) .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) .add(unit)
.toString() .toString()
); );
@ -78,6 +81,12 @@ public class YfaiPackageNumberRuleStrategyService implements INumberRulePackAttr
} catch (Exception e) { } catch (Exception e) {
packageOneCode = serialNo; packageOneCode = serialNo;
} }
Map<String, Object> 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); genSerialNoModel.putDataMap(serialNo, packageOneCode);
return serialNo; return serialNo;
} }

@ -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<Map<String, Object>> 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<String, Object> packResultMap(MesProduceSnPrintModel printModel, List<Map<String, Object>> printTemplateDateList) {
Map<String, Object> 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<String, Object> getPrintMap(MesProduceSnPrintModel model, MesPackage packageDb, MesCustomerPart customerPart) {
Map<String, Object> 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;
}
}

@ -117,7 +117,7 @@ public class MesPcnExtConstWords {
// 模具号 // 模具号
public static final String MOULD_NO = "mouldNo"; 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"; public static final String COMPLETE_QTY = "completeQty";
// 工单未完成数 // 工单未完成数

Loading…
Cancel
Save