refactor(qc): 重构箱变-质检报告推启源MES

- 修改包名和类名,优化代码结构
- 增加供应商和人员信息查询
- 更新数据同步逻辑,增加更多业务字段- 优化错误提示信息,提高可读性
- 新增 ReportInsertBP 和 ReportUpdateBP 类,用于处理质检报告插入和更新业务
This commit is contained in:
mzr 2025-09-02 11:09:05 +08:00
parent c8dfca7a08
commit 052be292f2
3 changed files with 213 additions and 18 deletions

View File

@ -0,0 +1,93 @@
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package nc.bs.qc.c003.maintain;
import nc.bs.qc.c003.maintain.rule.ChkBillCodeUniqueRule;
import nc.bs.qc.c003.maintain.rule.InsertAndDelBatchCodeBeforeRule;
import nc.bs.qc.c003.maintain.rule.ReportChkChkBatUnique;
import nc.bs.qc.c003.maintain.rule.SyncQcQmsRule;
import nc.bs.qc.c003.maintain.rule.insert.CreatChkBatchRule;
import nc.bs.qc.c003.maintain.rule.insert.FillUpDataRule;
import nc.bs.qc.c003.maintain.rule.insert.InsertBatchCodeAfterRule;
import nc.bs.qc.c003.maintain.rule.insert.InsertBillCodeRule;
import nc.bs.qc.c003.maintain.rule.insert.MatchReportTypeRule;
import nc.bs.qc.c003.maintain.rule.insert.RowNoFillUpRule;
import nc.bs.qc.c003.maintain.rule.insert.WriteC001WhenInsertRule;
import nc.bs.qc.c003.maintain.rule.insert.WriteC002WhenInsertRule;
import nc.bs.qc.c003.plugin.ReportBPPlugInPoint;
import nc.bs.qc.pub.rule.QCRowNoCheckRule;
import nc.bs.qc.pub.rule.QCWriteOperateLogRule;
import nc.impl.pubapp.bd.material.assistant.MarAssistantSaveRule;
import nc.impl.pubapp.bd.userdef.UserDefSaveRule;
import nc.impl.pubapp.pattern.data.bill.BillInsert;
import nc.impl.pubapp.pattern.rule.processer.AroundProcesser;
import nc.vo.pubapp.util.SetAddAuditInfoRule;
import nc.vo.qc.c003.entity.ReportHeaderVO;
import nc.vo.qc.c003.entity.ReportItemVO;
import nc.vo.qc.c003.entity.ReportVO;
import nc.vo.qc.c003.rule.FillupFacceptjudgeRule;
import nc.vo.qc.c003.rule.MaterialInStorckOrgRule;
import nc.vo.qc.c003.rule.ReportCheckFlowRule;
import nc.vo.qc.c003.rule.ReportItemsCheckRule;
import nc.vo.qc.c003.rule.ReportNumCheckRule;
import nc.vo.qc.c003.util.ReportAddStockStateRule;
import nc.vo.qc.pub.rule.CheckBillNumRule;
import nc.vo.scmpub.rule.QcCenterEnableCheckRule;
import nccloud.dto.qc.c003.constance.QCReportOprLogConst;
public class ReportInsertBP {
public ReportInsertBP() {
}
public ReportVO[] insertReport(ReportVO[] aggVO) {
AroundProcesser<ReportVO> processer = new AroundProcesser(ReportBPPlugInPoint.ReportInsertBP);
this.addBeforeRule(processer);
this.addAfterFinalRule(processer);
processer.before(aggVO);
BillInsert<ReportVO> bo = new BillInsert();
ReportVO[] vos = (ReportVO[])bo.insert(aggVO);
processer.after(aggVO);
return vos;
}
private void addAfterFinalRule(AroundProcesser<ReportVO> processer) {
processer.addAfterFinalRule(new ChkBillCodeUniqueRule());
processer.addAfterFinalRule(new WriteC001WhenInsertRule());
processer.addAfterFinalRule(new WriteC002WhenInsertRule());
processer.addAfterFinalRule(new InsertBatchCodeAfterRule());
processer.addAfterRule(new QCWriteOperateLogRule(QCReportOprLogConst.maintainService.getCode(), QCReportOprLogConst.addAction.getCode()));
processer.addAfterFinalRule(new SyncQcQmsRule());
}
private void addBeforeRule(AroundProcesser<ReportVO> processer) {
processer.addBeforeRule(new FillUpDataRule());
processer.addBeforeRule(new SetAddAuditInfoRule());
String[] hKeys = new String[2];
hKeys[0] = "nchecknum";
hKeys[1] = "ncheckastnum";
String[] bKeys = new String[2];
bKeys[0] = "nnum";
bKeys[1] = "nastnum";
processer.addBeforeRule(new CheckBillNumRule(hKeys, bKeys));
processer.addBeforeRule(new InsertBillCodeRule());
processer.addBeforeRule(new CreatChkBatchRule());
processer.addBeforeRule(new ReportChkChkBatUnique());
processer.addBeforeRule(new FillupFacceptjudgeRule());
processer.addBeforeRule(new RowNoFillUpRule());
processer.addBeforeRule(new QCRowNoCheckRule(ReportItemVO.class, "crowno"));
processer.addBeforeRule(new MatchReportTypeRule());
processer.addBeforeRule(new ReportItemsCheckRule());
processer.addBeforeRule(new ReportNumCheckRule());
processer.addBeforeRule(new InsertAndDelBatchCodeBeforeRule(true));
MarAssistantSaveRule<ReportVO> mar = new MarAssistantSaveRule();
processer.addBeforeRule(mar);
processer.addBeforeRule(new QcCenterEnableCheckRule());
processer.addBeforeRule(new UserDefSaveRule(new Class[]{ReportHeaderVO.class, ReportItemVO.class}));
processer.addBeforeRule(new ReportAddStockStateRule());
processer.addBeforeRule(new ReportCheckFlowRule());
processer.addBeforeRule(new MaterialInStorckOrgRule());
}
}

View File

@ -0,0 +1,86 @@
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package nc.bs.qc.c003.maintain;
import java.util.Map;
import nc.bs.qc.c003.maintain.rule.ChkBillCodeUniqueRule;
import nc.bs.qc.c003.maintain.rule.ReportChkChkBatUnique;
import nc.bs.qc.c003.maintain.rule.SyncQcQmsRule;
import nc.bs.qc.c003.maintain.rule.update.FillUpDataUpdateRule;
import nc.bs.qc.c003.maintain.rule.update.UpdChkBatCode;
import nc.bs.qc.c003.maintain.rule.update.UpdateBatchCodeAfterRule;
import nc.bs.qc.c003.maintain.rule.update.UpdateBatchCodeBeforeRule;
import nc.bs.qc.c003.maintain.rule.update.UpdateBillCodeRule;
import nc.bs.qc.c003.maintain.rule.update.WriteC001WhenUpdateRule;
import nc.bs.qc.c003.plugin.ReportBPPlugInPoint;
import nc.bs.qc.pub.rule.QCRowNoCheckRule;
import nc.bs.qc.pub.rule.QCWriteOperateLogRule;
import nc.bs.scmpub.rule.VOSagaFrozenValidateRule;
import nc.impl.pubapp.bd.material.assistant.MarAssistantSaveRule;
import nc.impl.pubapp.pattern.data.bill.BillUpdate;
import nc.impl.pubapp.pattern.rule.processer.CompareAroundProcesser;
import nc.vo.pubapp.util.SetUpdateAuditInfoRule;
import nc.vo.qc.c003.entity.ReportItemVO;
import nc.vo.qc.c003.entity.ReportVO;
import nc.vo.qc.c003.rule.MaterialInStorckOrgRule;
import nc.vo.qc.c003.rule.ReportItemsCheckRule;
import nc.vo.qc.c003.rule.ReportNumCheckRule;
import nc.vo.qc.c003.util.ReportAddStockStateRule;
import nc.vo.qc.c003.util.ReportVOInfoUtils;
import nc.vo.qc.pub.rule.CheckBillNumRule;
import nc.vo.qc.pub.rule.NoPassUpdateRule;
import nccloud.dto.qc.c003.constance.QCReportOprLogConst;
public class ReportUpdateBP {
public ReportUpdateBP() {
}
public ReportVO[] updateReport(ReportVO[] voArray, ReportVO[] originBills) {
CompareAroundProcesser<ReportVO> processer = new CompareAroundProcesser(ReportBPPlugInPoint.ReportUpdateBP);
this.addBeforeRule(processer);
this.addAfterRule(processer);
ReportVOInfoUtils.handlerIndate((Map) null, voArray);
processer.before(voArray, originBills);
BillUpdate<ReportVO> bo = new BillUpdate();
ReportVO[] vos = (ReportVO[]) bo.update(voArray, originBills);
processer.after(voArray, originBills);
(new QCWriteOperateLogRule(QCReportOprLogConst.maintainService.getCode(), QCReportOprLogConst.updateAction.getCode())).process(originBills, voArray);
return vos;
}
private void addAfterRule(CompareAroundProcesser<ReportVO> processer) {
processer.addAfterRule(new ChkBillCodeUniqueRule());
processer.addAfterRule(new UpdChkBatCode());
processer.addAfterRule(new ReportChkChkBatUnique());
processer.addAfterRule(new WriteC001WhenUpdateRule());
processer.addAfterRule(new UpdateBatchCodeAfterRule());
processer.addAfterRule(new SyncQcQmsRule());
}
private void addBeforeRule(CompareAroundProcesser<ReportVO> processer) {
processer.addBeforeRule(new VOSagaFrozenValidateRule(true));
processer.addBeforeRule(new UpdateBillCodeRule());
processer.addBeforeRule(new FillUpDataUpdateRule());
String[] hKeys = new String[2];
hKeys[0] = "nchecknum";
hKeys[1] = "ncheckastnum";
String[] bKeys = new String[2];
bKeys[0] = "nnum";
bKeys[1] = "nastnum";
processer.addBeforeRule(new CheckBillNumRule(hKeys, bKeys));
processer.addBeforeRule(new SetUpdateAuditInfoRule());
processer.addBeforeRule(new ReportItemsCheckRule());
processer.addBeforeRule(new QCRowNoCheckRule(ReportItemVO.class, "crowno"));
processer.addBeforeRule(new ReportNumCheckRule());
processer.addBeforeRule(new UpdateBatchCodeBeforeRule());
MarAssistantSaveRule<ReportVO> mar = new MarAssistantSaveRule();
processer.addBeforeRule(mar);
processer.addBeforeRule(new NoPassUpdateRule());
processer.addBeforeRule(new ReportAddStockStateRule());
processer.addBeforeRule(new MaterialInStorckOrgRule());
}
}

View File

@ -1,15 +1,19 @@
package nc.impl.qc.c003.approve.action.rule;
package nc.bs.qc.c003.maintain.rule;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import nc.bs.dao.BaseDAO;
import nc.bs.framework.common.NCLocator;
import nc.bs.logging.Log;
import nc.bs.uapbd.util.MyHelper;
import nc.bs.uapbd.util.ThirdPartyPostRequestUtil;
import nc.impl.pubapp.pattern.rule.IRule;
import nc.itf.bd.supplier.baseinfo.ISupplierBaseInfoQryService;
import nc.vo.bd.material.MaterialVO;
import nc.vo.bd.material.measdoc.MeasdocVO;
import nc.vo.bd.psn.PsndocVO;
import nc.vo.bd.supplier.SupplierVersionVO;
import nc.vo.org.OrgVO;
import nc.vo.pub.BusinessException;
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
@ -53,7 +57,6 @@ public class SyncQcQmsRule implements IRule<ReportVO> {
* 构建同步数据
*/
private void buildSyncData(ReportVO[] useVOs) throws BusinessException {
BaseDAO baseDAO = new BaseDAO();
for (ReportVO vo : useVOs) {
ReportHeaderVO hvo = vo.getHVO();
ReportItemVO[] bvo = vo.getBVO();
@ -63,35 +66,48 @@ public class SyncQcQmsRule implements IRule<ReportVO> {
if (checkIfOrg(orgCode, configParams)) {
continue;
}
// 查询供应商信息
String pk_supplier_v = hvo.getPk_supplier_v();
ISupplierBaseInfoQryService baseQryService = NCLocator.getInstance().lookup(ISupplierBaseInfoQryService.class);
SupplierVersionVO supplierVersionVO = baseQryService.querySupplierVersionByVID(pk_supplier_v);
// 查询人员信息
String pkApplyer = hvo.getPk_applyer();
String applyerName = MyHelper.getStrValByCondition(PsndocVO.getDefaultTableName(), PsndocVO.NAME,
PsndocVO.PK_PSNDOC + " = '" + pkApplyer + "'");
// 组装数据
JSONObject singleObj = new JSONObject();
long cts = System.currentTimeMillis();
singleObj.put("batchid", cts);
singleObj.put("csdh", hvo.getVapplybillcode());// 送检单号采购送检单的唯一标识编号
singleObj.put("sjrq", hvo.getDapplydate().toString());// 送检日期格式建议为 yyyy-MM-dd
singleObj.put("wlgysid", "");// 供应商编码
singleObj.put("wlgysmc", "");// 供应商名称
singleObj.put("sjr", hvo.getPk_applyer());// 送检人负责提交送检单的人员姓名
singleObj.put("wlgysid", supplierVersionVO.getCode());// 供应商编码
singleObj.put("wlgysmc", supplierVersionVO.getName());// 供应商名称
singleObj.put("sjr", applyerName);// 送检人负责提交送检单的人员姓名
singleObj.put("cghth", "");// 采购合同号关联对应的采购合同
singleObj.put("bz", "");// 摘要备注用于填写送检单的补充说明信息
singleObj.put("bz", hvo.getVmemo());// 摘要备注用于填写送检单的补充说明信息
String pkMaterial = hvo.getPk_material();
Map<String, Object> materialMap = MyHelper.getMapValByCondition(MaterialVO.getDefaultTableName(), "code,name,materialspec,materialtype",
"pk_material = '" + pkMaterial + "'");
String cunitid = hvo.getCunitid();// 主单位
String cunitname = MyHelper.getStrValByCondition(MeasdocVO.getDefaultTableName(), MeasdocVO.NAME,
MeasdocVO.PK_MEASDOC + " = '" + cunitid + "'");
// 处理Content数组
JSONArray contentArray = new JSONArray();
for (ReportItemVO item : bvo) {
JSONObject itemObj = new JSONObject();
itemObj.put("wlbh", materialMap.getOrDefault("code", "")); // 物料编码
itemObj.put("wlmc", materialMap.getOrDefault("name", "")); // 物料名称
String materialtype = materialMap.getOrDefault("materialtype", "") + "";
String materialspec = materialMap.getOrDefault("materialspec", "") + "";
itemObj.put("wlxhgg", materialtype + materialspec); // 物料型号规格
itemObj.put("sjsl", ""); // 送检数量设计单位按设计计量单位统计的送检数量
itemObj.put("jldw", ""); // 计量单位
itemObj.put("bz", ""); // 明细备注用于填写该送检物料的补充说明
contentArray.add(itemObj);
JSONObject itemObj = new JSONObject();
itemObj.put("wlbh", materialMap.getOrDefault("code", "")); // 物料编码
itemObj.put("wlmc", materialMap.getOrDefault("name", "")); // 物料名称
String materialtype = materialMap.getOrDefault("materialtype", "") + "";
String materialspec = materialMap.getOrDefault("materialspec", "") + "";
itemObj.put("wlxhgg", materialtype + materialspec); // 物料型号规格
itemObj.put("sjsl", hvo.getNapplynum().toString()); // 送检数量设计单位按设计计量单位统计的送检数量
itemObj.put("jldw", cunitname); // 计量单位
String bz = "";
if (bvo != null && bvo.length > 0) {
bz = bvo[0].getVbdef1(); // BOM备注
}
itemObj.put("bz", bz); // 明细备注用于填写该送检物料的补充说明
contentArray.add(itemObj);
singleObj.put("Content", contentArray);
/* {