Browse Source

采购订单转付款申请插件,根据比例计算分摊金额

Boil 2 days ago
parent
commit
8f0a4e91c6

+ 62 - 0
code/wnq/nckd-wnq01-wnq-scm/src/main/java/nckd/poc602/plugin/operate/PurBillToPayApplyConvertPlugin.java

@@ -0,0 +1,62 @@
+package nckd.poc602.plugin.operate;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.entity.ExtendedDataEntity;
+import kd.bos.entity.botp.plugin.AbstractConvertPlugIn;
+import kd.bos.entity.botp.plugin.args.AfterConvertEventArgs;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.sdk.plugin.Plugin;
+import org.jetbrains.annotations.NotNull;
+
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * 采购订单转付款申请插件,根据比例计算分摊金额
+ */
+public class PurBillToPayApplyConvertPlugin extends AbstractConvertPlugIn implements Plugin {
+
+    @Override
+    public void afterConvert(AfterConvertEventArgs e) {
+        super.afterConvert(e);
+        String targetEntityNumber = this.getTgtMainType().getName();
+        String srcEntityNumber = this.getSrcMainType().getName();
+        ExtendedDataEntity[] billDataEntitys = e.getTargetExtDataEntitySet().FindByEntityKey(targetEntityNumber);
+        for(ExtendedDataEntity billDataEntity : billDataEntitys) {
+            DynamicObject targetBill = billDataEntity.getDataEntity();
+            DynamicObjectCollection entryEntity = targetBill.getDynamicObjectCollection("entry");
+            List<Long> eCorebillid = entryEntity.stream().map(x -> x.getLong("e_corebillid")).collect(Collectors.toList());
+            if (!eCorebillid.isEmpty()){
+                //计算物料占比
+                DynamicObject pmPurorderbill = BusinessDataServiceHelper.loadSingleFromCache(eCorebillid.get(0), "pm_purorderbill");
+                DynamicObjectCollection billentry = pmPurorderbill.getDynamicObjectCollection("billentry");
+                BigDecimal amountandtaxSum = billentry.stream().map(x -> x.getBigDecimal("amountandtax")).reduce(BigDecimal.ZERO, BigDecimal::add);
+                Map<Long,BigDecimal> map=new HashMap();
+                for (DynamicObject dynamicObject : billentry) {
+                    DynamicObject material = dynamicObject.getDynamicObject("material");
+                    BigDecimal amountandtax = dynamicObject.getBigDecimal("amountandtax");
+                    map.put(material.getLong("id"),amountandtax.divide(amountandtaxSum,6,BigDecimal.ROUND_HALF_UP));
+                }
+
+                //取出付款申请的总金额
+                BigDecimal ePayamountSum = entryEntity.stream().map(x -> x.getBigDecimal("e_payamount")).reduce(BigDecimal.ZERO, BigDecimal::add);
+                //填充到标的明细
+                DynamicObjectCollection nckd_entryentity = targetBill.getDynamicObjectCollection("nckd_entryentity");
+                for (DynamicObject dynamicObject : nckd_entryentity) {
+                    DynamicObject nckdMaterial = dynamicObject.getDynamicObject("nckd_material");
+                    BigDecimal bl = map.get(nckdMaterial.getLong("id"));
+                    dynamicObject.set("nckd_payrate",bl);
+                    dynamicObject.set("nckd_payamount",ePayamountSum.multiply(bl));
+                }
+
+
+
+            }
+        }
+    }
+}