礼嘉缝纫批量汇报

uat-temp-wj-chongqingdaqu-prod-lijiabatchreport
王杰 2 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()));
//验证超工单
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<MesPackage> packageList = (List<MesPackage>) 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<MesProductOffLine> 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);

@ -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<String, Object> 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<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);
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 REPORT_QTY = "reportQty";
public static final String REPORTED_QTY = "reportedQty";
// 工单完成数
public static final String COMPLETE_QTY = "completeQty";
// 工单未完成数

Loading…
Cancel
Save