Jelajahi Sumber

工程预报单:新增表单插件,处理前端数据联动

wanghaiwu 1 bulan lalu
induk
melakukan
cd49a4c2ea

+ 171 - 0
code/wnq/nckd-wnq01-wnq-scm/src/main/java/nckd/wnq01/wnq/scm/plugin/form/EngineerReportEditPlugin.java

@@ -0,0 +1,171 @@
+package nckd.wnq01.wnq.scm.plugin.form;
+
+import kd.bos.bill.AbstractBillPlugIn;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.entity.datamodel.IDataModel;
+import kd.bos.entity.datamodel.events.ChangeData;
+import kd.bos.entity.datamodel.events.PropertyChangedArgs;
+import kd.bos.form.field.events.BeforeF7SelectEvent;
+import kd.bos.form.field.events.BeforeF7SelectListener;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.bos.util.StringUtils;
+import java.math.BigDecimal;
+
+/**
+ * 插件说明:
+ * 表单标识:工程预报单(nckd_engineerrpeort)
+ * @author wanghaiwu_kd
+ * @date 2025/03/03
+ */
+public class EngineerReportEditPlugin extends AbstractBillPlugIn implements BeforeF7SelectListener {
+
+    @Override
+    public void beforeF7Select(BeforeF7SelectEvent beforeF7SelectEvent) {
+
+    }
+
+    @Override
+    public void propertyChanged(PropertyChangedArgs e) {
+        super.propertyChanged(e);
+
+        String key = e.getProperty().getName();
+
+        //销售组织、区域、销售类别、水泥品种、价格档位
+        if("org".equals(key)
+                || "nckd_qy".equals(key)
+                || "nckd_saletype".equals(key)
+                || "nckd_esmaterail".equals(key)
+                || "nckd_espricelevel".equals(key)){
+            setEntrySalePrice(e);
+        }
+        //价格、调整幅度
+        else if("nckd_esprice".equals(key)
+                || "nckd_espriceadj".equals(key)){
+            ChangeData[] changeValue = e.getChangeSet();
+            int changeRow = changeValue[0].getRowIndex();
+
+            BigDecimal price = (BigDecimal) this.getModel().getValue("nckd_esprice", changeRow);
+            BigDecimal priceaj = (BigDecimal) this.getModel().getValue("nckd_espriceadj", changeRow);
+
+            this.getModel().setValue("nckd_esauditprice", price.add(priceaj), changeRow);
+
+            this.getView().updateView("nckd_saleentry");
+        }
+    }
+
+    private void setEntrySalePrice(PropertyChangedArgs e){
+        ChangeData[] changeValue = e.getChangeSet();
+        int changeRow = changeValue[0].getRowIndex();
+
+        IDataModel model = this.getModel();
+        DynamicObject saleOrg = (DynamicObject) model.getValue("org");
+        DynamicObject qy = (DynamicObject) model.getValue("nckd_qy");
+        DynamicObject saleType = (DynamicObject) model.getValue("nckd_saletype");
+        DynamicObject bigSaleType = null;
+        if(saleType != null) {
+            saleType = BusinessDataServiceHelper.loadSingle(saleType.getPkValue(), "nckd_saletype");
+            bigSaleType = saleType.getDynamicObject("nckd_salebigtype");
+        }
+
+        this.getModel().beginInit();
+
+        if(changeRow >= 0){//分录修改
+            model.setValue("nckd_esprice", BigDecimal.ZERO, changeRow);
+            model.setValue("nckd_esauditprice", BigDecimal.ZERO, changeRow);
+
+            DynamicObject material = (DynamicObject) model.getValue("nckd_esmaterail", changeRow);
+            String priceLevel = (String) model.getValue("nckd_espricelevel");
+
+            if(saleOrg != null && qy != null && saleType != null && material != null
+                    && StringUtils.isNotEmpty(priceLevel)){
+                QFilter qFilter = new QFilter("nckd_saleorg", QCP.equals, saleOrg.getPkValue());
+                qFilter.and(new QFilter("nckd_qy", QCP.equals, qy.getPkValue()));
+                qFilter.and(new QFilter("nckd_salebigtyp", QCP.equals, bigSaleType.getPkValue()));
+                qFilter.and(new QFilter("nckd_material", QCP.equals, material.getPkValue()));
+
+                DynamicObject[] priceArray = BusinessDataServiceHelper.load("nckd_salepricelevel", "nckd_price", qFilter.toArray(), "nckd_price");
+                BigDecimal price = BigDecimal.ZERO;
+                if(priceArray.length > 0){
+                    price = getLevelPrice(priceArray, priceLevel);
+                }
+                BigDecimal priceaj = (BigDecimal) model.getValue("nckd_espriceadj", changeRow);
+
+
+
+                model.setValue("nckd_esprice", price, changeRow);
+                model.setValue("nckd_esauditprice", price.add(priceaj), changeRow);
+
+
+            }
+        } else {
+            DynamicObjectCollection saleentry = this.getModel().getEntryEntity("nckd_saleentry");
+
+            int rowIndex = -1;
+
+            //表头字段修改,分录全部重新获取一遍价格
+            for(DynamicObject entry : saleentry){
+                rowIndex++;
+
+                model.setValue("nckd_esprice", BigDecimal.ZERO, rowIndex);
+                model.setValue("nckd_esauditprice", BigDecimal.ZERO, rowIndex);
+
+                DynamicObject material = entry.getDynamicObject("nckd_esmaterail");
+                String priceLevel = entry.getString("nckd_espricelevel");
+
+                if(saleOrg != null && qy != null && saleType != null && material != null
+                        && StringUtils.isNotEmpty(priceLevel)){
+                    QFilter qFilter = new QFilter("nckd_saleorg", QCP.equals, saleOrg.getPkValue());
+                    qFilter.and(new QFilter("nckd_qy", QCP.equals, qy.getPkValue()));
+                    qFilter.and(new QFilter("nckd_salebigtyp", QCP.equals, bigSaleType.getPkValue()));
+                    qFilter.and(new QFilter("nckd_material", QCP.equals, material.getPkValue()));
+
+                    DynamicObject[] priceArray = BusinessDataServiceHelper.load("nckd_salepricelevel", "nckd_price", qFilter.toArray(), "nckd_price");
+                    BigDecimal price = BigDecimal.ZERO;
+                    if(priceArray.length > 0){
+                        price = getLevelPrice(priceArray, priceLevel);
+                    }
+                    BigDecimal priceaj = (BigDecimal) model.getValue("nckd_espriceadj", rowIndex);
+
+                    model.setValue("nckd_esprice", price, rowIndex);
+                    model.setValue("nckd_esauditprice", price.add(priceaj), rowIndex);
+                }
+            }
+        }
+
+        this.getModel().endInit();
+
+        this.getView().updateView("nckd_saleentry");
+    }
+
+
+    private BigDecimal getLevelPrice(DynamicObject[] priceArray, String priceLevel){
+       BigDecimal price = BigDecimal.ZERO;
+
+       int level = 0;
+       if("one".equals(priceLevel)){
+           level = 1;
+       } else if("tow".equals(priceLevel)){
+           level = 2;
+       } else if("three".equals(priceLevel)){
+           level = 3;
+       } else if("four".equals(priceLevel)){
+           level = 4;
+       }
+
+       int i = 0;
+
+       for(DynamicObject data : priceArray){
+           i++;
+
+           if(level == i){
+               price = data.getBigDecimal("nckd_price");
+               break;
+           }
+       }
+
+       return price;
+    }
+}