package tqq9.lc123.cloud.app.plugin.operate.im; import com.alibaba.fastjson.JSONObject; import kd.bos.dataentity.OperateOption; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.entity.botp.runtime.ConvertOperationResult; import kd.bos.entity.botp.runtime.PushArgs; import kd.bos.entity.botp.runtime.SourceBillReport; import kd.bos.entity.operate.result.OperationResult; import kd.bos.entity.plugin.AbstractOperationServicePlugIn; import kd.bos.entity.plugin.PreparePropertysEventArgs; import kd.bos.entity.plugin.args.AfterOperationArgs; import kd.bos.logging.Log; import kd.bos.logging.LogFactory; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.botp.ConvertServiceHelper; import kd.bos.servicehelper.operation.OperationServiceHelper; import kd.bos.util.StringUtils; import kd.sdk.plugin.Plugin; import tqq9.lc123.cloud.app.api.utils.Constants; import tqq9.lc123.cloud.app.plugin.utils.BotpParamUtils; import java.math.BigDecimal; import java.util.*; /** * 其他入库单审核时采购退货申请下推红字采购入库单(审核) */ public class OtherInYdthPlugin extends AbstractOperationServicePlugIn implements Plugin { private final static Log logger = LogFactory.getLog(OtherInYdthPlugin.class); private static String PM_PURREFUNDAPPLYBILL = "pm_purrefundapplybill";//采购退货申请单 private static String IM_PURINBILL = "im_purinbill";//采购入库单 private static String BILLENTRY = "billentry";//收货通知单分录,采购退货申请单分录 @Override public void onPreparePropertys(PreparePropertysEventArgs e) { super.onPreparePropertys(e); e.getFieldKeys().add("billentry.tqq9_cgthflid"); e.getFieldKeys().add("billentry.tqq9_ydthflid");//异地退货分录id } @Override public void afterExecuteOperationTransaction(AfterOperationArgs e) { super.afterExecuteOperationTransaction(e); DynamicObject[] dataEntities1 = e.getDataEntities(); for (DynamicObject dynamicObject : dataEntities1) { DynamicObjectCollection billentry = dynamicObject.getDynamicObjectCollection("billentry"); List cgthflidList = new ArrayList<>(); for (DynamicObject object : billentry) { String tqq9_cgthflid = object.getString("tqq9_cgthflid"); if (StringUtils.isNotEmpty(tqq9_cgthflid) && !"0".equals(tqq9_cgthflid)) { cgthflidList.add(Long.valueOf(tqq9_cgthflid)); } } //根据采购退货分录id找到采购退货申请单,下推-红字采购入库单 //其他入库单有几行明细 生成的采购入库单就几行明细 DynamicObject pm_purrefundapplybill = BusinessDataServiceHelper.loadSingle("pm_purrefundapplybill", new QFilter[]{new QFilter("billentry.id", QCP.in, cgthflidList)}); if (null != pm_purrefundapplybill) { // 2. 创建列表收集红字入库单明细数据 List> redEntryDataList = new ArrayList<>(); // 3. 遍历其他入库单明细,收集数据(不创建DynamicObject) for (DynamicObject inEntry : billentry) { // 获取当前行的信息 String returnEntryId = inEntry.getString("tqq9_cgthflid"); BigDecimal qty = inEntry.getBigDecimal("qty") == null ? BigDecimal.ZERO : inEntry.getBigDecimal("qty"); // 入库数量 String materialId = inEntry.getDynamicObject("material").getDynamicObject("masterid").getString("id"); long tqq9_ydthflid = inEntry.getLong("tqq9_ydthflid"); if (returnEntryId != null && qty != null && materialId != null) { // 创建数据Map,收集明细信息 Map redEntryData = new HashMap<>(); redEntryData.put("materialId", materialId); redEntryData.put("qty", qty); // 红字用负数 redEntryData.put("returnEntryId", returnEntryId); redEntryData.put("tqq9_ydthflid", tqq9_ydthflid); redEntryDataList.add(redEntryData); } } DynamicObjectCollection tqq9_entryentity = pm_purrefundapplybill.getDynamicObjectCollection("tqq9_entryentity");//异地退货明细 for (Map map : redEntryDataList) { for (DynamicObject object : tqq9_entryentity) { long id = object.getLong("id"); long tqq9_ydthflid = (long) map.get("tqq9_ydthflid"); if (id == tqq9_ydthflid) { DynamicObject tqq9_taxrateid_ydth = object.getDynamicObject("tqq9_taxrateid_ydth"); if (null != tqq9_taxrateid_ydth) { map.put("tqq9_taxrateid_ydth", tqq9_taxrateid_ydth.getLong("id"));//税率 } map.put("tqq9_price_ydth", object.get("tqq9_price_ydth"));//不含税单价 map.put("tqq9_taxamount_ydth", object.get("tqq9_taxamount_ydth"));//税额 map.put("tqq9_priceandtax_ydth", object.get("tqq9_priceandtax_ydth"));//含税单价 map.put("tqq9_amountandtax_ydth", object.get("tqq9_amountandtax_ydth"));//折扣后价税合计 map.put("tqq9_amount_ydth", object.get("tqq9_amount_ydth"));//折扣后不含税金额 break; } } } Long id = pm_purrefundapplybill.getLong("id"); Map> param = new HashMap<>();//传入转换规则处理参数 for (Map map : redEntryDataList) { JSONObject detailObject = new JSONObject(); Object materialId = map.get("materialId"); Object qty = map.get("qty"); Object returnEntryId = map.get("returnEntryId"); Object tqq9_ydthflid = map.get("tqq9_ydthflid"); detailObject.put("materialId", materialId);//物料id detailObject.put("qty", qty);//数量 detailObject.put("returnEntryId", returnEntryId);//采购退货明细id detailObject.put("tqq9_ydthflid", tqq9_ydthflid);//异地退货分录id detailObject.put("tqq9_taxrateid_ydth", map.get("tqq9_taxrateid_ydth"));//税率 detailObject.put("tqq9_price_ydth", map.get("tqq9_price_ydth"));//不含税单价 detailObject.put("tqq9_taxamount_ydth", map.get("tqq9_taxamount_ydth"));//税额 detailObject.put("tqq9_priceandtax_ydth", map.get("tqq9_priceandtax_ydth"));//含税单价 detailObject.put("tqq9_amountandtax_ydth", map.get("tqq9_amountandtax_ydth"));//折扣后价税合计 detailObject.put("tqq9_amount_ydth", map.get("tqq9_amount_ydth"));//折扣后不含税金额 param.computeIfAbsent((String) returnEntryId, k -> new HashSet<>()).add(detailObject); } HashMap> entitypkMap = new HashMap<>();//上下游id映射Map for (Map map : redEntryDataList) { Object returnEntryId = map.get("returnEntryId"); entitypkMap.computeIfAbsent(id, k -> new HashSet<>()).add(Long.valueOf((String) returnEntryId)); } PushArgs pushArgs1 = BotpParamUtils.getPushArgs(PM_PURREFUNDAPPLYBILL, IM_PURINBILL, BILLENTRY, param, entitypkMap, "2304405848245415936"); ConvertOperationResult pushResult = ConvertServiceHelper.pushAndSave(pushArgs1); List billReports = pushResult.getBillReports(); //下推失败直接返回 if (!pushResult.isSuccess()) { for (SourceBillReport billReport : billReports) { String billMessage = billReport.getFailMessage(); logger.info("采购退货申请:" + pm_purrefundapplybill.getString("billno") + "下推红字采购入库单失败:" + billMessage); } } //获取下推单据id准备提交审核操作 Set targetBillIds = pushResult.getTargetBillIds(); DynamicObject[] load = new DynamicObject[targetBillIds.size()]; Iterator iterator = targetBillIds.iterator(); for (int i = 0; iterator.hasNext(); i++) { Object next = iterator.next(); DynamicObject dynamicObject1 = BusinessDataServiceHelper.loadSingle(IM_PURINBILL, new QFilter[]{new QFilter("id", QCP.equals, next)}); load[i] = dynamicObject1; } //开始提交 OperateOption operateOption = OperateOption.create(); OperationResult sumbitResult = OperationServiceHelper.executeOperate(Constants.TYPE_SUBMIT, IM_PURINBILL, load, operateOption); if (!sumbitResult.isSuccess()) { if (Objects.nonNull(sumbitResult.getAllErrorOrValidateInfo())) { logger.info("采购入库单提交失败: " + sumbitResult.getAllErrorOrValidateInfo().toString()); } OperationResult deleteResult = OperationServiceHelper.executeOperate(Constants.TYPE_DELETE, IM_PURINBILL, load, operateOption); } else { //开始审核 OperationResult auditResult = OperationServiceHelper.executeOperate(Constants.TYPE_AUDIT, IM_PURINBILL, load, operateOption); if (!auditResult.isSuccess()) { if (Objects.nonNull(auditResult.getAllErrorOrValidateInfo())) { logger.info("采购入库单审核失败: " + auditResult.getAllErrorOrValidateInfo().toString()); } OperationResult unsubmitResult = OperationServiceHelper.executeOperate(Constants.TYPE_UNSUBMIT, IM_PURINBILL, load, operateOption); OperationResult deleteResult = OperationServiceHelper.executeOperate(Constants.TYPE_DELETE, IM_PURINBILL, load, operateOption); } } } } } }