Explorar o código

付款单实付金额超额检测&反写和撤销金额

wuxiaobing hai 4 días
pai
achega
839b53e719

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

@@ -0,0 +1,120 @@
+package nckd.poc602.plugin.operate;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.dataentity.entity.DynamicObjectCollection;
+import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
+import kd.bos.entity.plugin.PreparePropertysEventArgs;
+import kd.bos.entity.plugin.args.BeforeOperationArgs;
+import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
+import kd.bos.entity.plugin.args.EndOperationTransactionArgs;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import kd.bos.servicehelper.operation.SaveServiceHelper;
+import kd.sdk.plugin.Plugin;
+
+/**
+ * 采购合同提交校验超额&反写和撤销已收金额
+ */
+public class PayBillSubmitOperationServicePlugIn extends AbstractOperationServicePlugIn implements Plugin {
+    @Override
+    public void onPreparePropertys(PreparePropertysEventArgs e) {
+        super.onPreparePropertys(e);
+        e.getFieldKeys().add("entry");
+        e.getFieldKeys().add("entry.nckd_refbillfield");
+        e.getFieldKeys().add("entry.e_actamt");
+    }
+    
+    @Override
+    public void beforeExecuteOperationTransaction(BeforeOperationArgs e) {
+    	// TODO Auto-generated method stub
+    	super.beforeExecuteOperationTransaction(e);
+    	DynamicObject[] payBills = e.getDataEntities();
+    	String opkey = e.getOperationKey();
+    	if("submit".equals(opkey)) {
+    		this.updateSaleContractInfo(e, payBills, true);
+    	}else if("unsubmit".equals(opkey)){
+    		this.updateSaleContractInfo(e, payBills, false);
+    	}
+    }
+    
+    private void updateSaleContractInfo(BeforeOperationArgs e, DynamicObject[] payBills, Boolean iswriteback) {
+		List<DynamicObject> scs = new ArrayList<>();
+		List<Object> scsids = new ArrayList<>();
+		Boolean existError = false;
+		
+		for(DynamicObject payBill : payBills) {
+			DynamicObjectCollection entrys = payBill.getDynamicObjectCollection("entry");
+			for(DynamicObject entry : entrys) {
+				DynamicObject saleContract = entry.getDynamicObject("nckd_refbillfield");
+				if(saleContract != null) {
+					scsids.add(saleContract.getPkValue());
+				}
+			}
+		}
+		
+		if(!scsids.isEmpty()) {
+			QFilter qf = new QFilter("id",QCP.in,scsids);
+			DynamicObject[] scsarray = BusinessDataServiceHelper.load("conm_salcontract", "id,receiptallamount,nckd_cgyfje", qf.toArray());
+			for(DynamicObject payBill : payBills) {
+				DynamicObjectCollection entrys = payBill.getDynamicObjectCollection("entry");
+				String fbno = payBill.getString("billno");
+				for(DynamicObject entry : entrys) {
+					DynamicObject saleContract = entry.getDynamicObject("nckd_refbillfield");
+					BigDecimal e_actamt = entry.getBigDecimal("e_actamt");//实付金额
+					if(saleContract != null) {
+						DynamicObject srsTemp = null;
+						for(DynamicObject scsarrayitem : scsarray) {
+							Object scsarrayitemid = scsarrayitem.getPkValue();
+							if(scsarrayitemid.equals(saleContract.getPkValue())) {
+								srsTemp = scsarrayitem;
+								break;
+							}
+						}
+						
+						if(srsTemp != null) {
+							BigDecimal receiptallamount = srsTemp.getBigDecimal("receiptallamount");//已收金额
+							BigDecimal nckd_cgyfje = srsTemp.getBigDecimal("nckd_cgyfje");//采购已付金额
+							if(iswriteback) {
+								BigDecimal nckd_cgyfjeNew = e_actamt.add(nckd_cgyfje);
+								if(nckd_cgyfjeNew.compareTo(receiptallamount) > 0) {
+									existError = true;
+									String error = "付款处理(" + fbno + ")的实付超额。";
+									e.setCancel(true);
+									e.setCancelMessage(error);
+									break;
+								}else {
+									srsTemp.set("nckd_cgyfje", nckd_cgyfjeNew);
+									scs.add(srsTemp);
+								}
+							}else {
+								BigDecimal nckd_cgyfjeNew = nckd_cgyfje.subtract(e_actamt);
+								srsTemp.set("nckd_cgyfje", nckd_cgyfjeNew);
+								scs.add(srsTemp);
+							}
+						}
+					}
+				}
+			}
+
+			if(!existError && !scs.isEmpty()) {
+				SaveServiceHelper.update(scs.toArray(new DynamicObject[0]));
+			}
+		}
+    }
+    
+    @Override
+    public void beginOperationTransaction(BeginOperationTransactionArgs e) {
+    	// TODO Auto-generated method stub
+    	super.beginOperationTransaction(e);
+    }
+
+    @Override
+    public void endOperationTransaction(EndOperationTransactionArgs e) {
+        super.endOperationTransaction(e);
+    }
+}

+ 7 - 7
code/wnq/nckd-wnq01-wnq-scm/src/main/java/nckd/poc602/plugin/operate/PurContractSubmitOperationServicePlugIn.java

@@ -46,24 +46,24 @@ public class PurContractSubmitOperationServicePlugIn extends AbstractOperationSe
 			BigDecimal purjshj = purContract.getBigDecimal("totalallamount");//价税合计
 			String purbillno = purContract.getString("billno");
 			if(saleContract != null) {
-				DynamicObject saleContractObj = BusinessDataServiceHelper.loadSingle(saleContract.getPkValue(), "conm_salcontract", "id,totalallamount,receiptallamount");
+				DynamicObject saleContractObj = BusinessDataServiceHelper.loadSingle(saleContract.getPkValue(), "conm_salcontract", "id,totalallamount,nckd_ycje");
 				BigDecimal salejshj = saleContractObj.getBigDecimal("totalallamount");
-				BigDecimal receiptallamount = saleContractObj.getBigDecimal("receiptallamount");
+				BigDecimal nckd_ycje = saleContractObj.getBigDecimal("nckd_ycje");
 				if(iswriteback) {
-					BigDecimal receiptallamountNew = purjshj.add(receiptallamount);
-					if(receiptallamountNew.compareTo(salejshj) > 0) {
+					BigDecimal nckd_ycjeNew = purjshj.add(nckd_ycje);
+					if(nckd_ycjeNew.compareTo(salejshj) > 0) {
 						existError = true;
 						String error = "采购合同(" + purbillno + ")的价税合计超额。";
 						e.setCancel(true);
 						e.setCancelMessage(error);
 						break;
 					}else {
-						saleContractObj.set("receiptallamount", receiptallamountNew);
+						saleContractObj.set("nckd_ycje", nckd_ycjeNew);
 						scs.add(saleContractObj);
 					}
 				}else {
-					BigDecimal receiptallamountNew = receiptallamount.subtract(purjshj);
-					saleContractObj.set("receiptallamount", receiptallamountNew);
+					BigDecimal nckd_ycjeNew = nckd_ycje.subtract(purjshj);
+					saleContractObj.set("nckd_ycje", nckd_ycjeNew);
 					scs.add(saleContractObj);
 				}
 			}