Browse Source

佣金周期和佣金调整

zhangyao 2 months ago
parent
commit
327cf9e01a

+ 68 - 3
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/controller/commissionController.java

@@ -1,17 +1,82 @@
 package com.awspaas.user.apps.donenow_ctt.controller;
 
+import com.actionsoft.bpms.bo.engine.BO;
+import com.actionsoft.bpms.bpmn.engine.model.run.delegate.ProcessInstance;
 import com.actionsoft.bpms.commons.mvc.view.ResponseObject;
 import com.actionsoft.bpms.server.UserContext;
 import com.actionsoft.bpms.server.bind.annotation.Controller;
 import com.actionsoft.bpms.server.bind.annotation.Mapping;
+import com.actionsoft.sdk.local.SDK;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
 
 @Controller
 public class commissionController {
-    @Mapping(value = "com.awspaas.user.apps.donenow_ctt.commission_create_period")
-    public ResponseObject createPeriod(UserContext uc, String commissionBindid) {
+    /**
+     * 佣金调整
+     * @param uc
+     * @param commissionBindid
+     * @return
+     */
+    @Mapping(value = "com.awspaas.user.apps.donenow_ctt.commission_adjust")
+    public ResponseObject commissionAdjust(UserContext uc, String commissionBindid) {
+
+        BO commissionBO = SDK.getBOAPI().getByProcess("BO_EU_DNCTT_COMMISSION", commissionBindid);
+        List<BO> commissionAgentList = SDK.getBOAPI().query("BO_EU_DNCTT_COMMISSION_AGENT").addQuery("BINDID =", commissionBindid).list();
+        List<BO> commissionSalesList = SDK.getBOAPI().query("BO_EU_DNCTT_COMMISSION_SALES").addQuery("BINDID =", commissionBindid).list();
+
+        commissionBO.remove("ID");
+        commissionBO.remove("BINDID");
+
+        ProcessInstance contractInstance = SDK.getProcessAPI().createBOProcessInstance("obj_290337ce889c4a1295852e7b76aa82d4", uc.getUID(), "佣金调整-" + "-" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
+
+        BO editBO = new BO();
+        commissionBO.remove("CREATEDATE");
+        commissionBO.remove("CREATEUSER");
+        editBO.setAll(commissionBO.asMap());
+        editBO.set("OLD_COMMISSION_DOLLARS", commissionBO.get("COMMISSION_DOLLARS"));
+        editBO.set("OLD_RATIO", commissionBO.get("DOLLARS"));
+        editBO.set("COMMISSION_BINDID", commissionBindid);
+        editBO.set("OLD_DOLLARS", "未执行");
+        SDK.getBOAPI().create("BO_EU_DNCTT_COMMISSION_ADJUST", editBO, contractInstance, uc);
+
+        if (commissionAgentList != null && commissionAgentList.size() > 0) {
+            for (BO bo : commissionAgentList) {
+                BO editAgentBO = new BO();
+                bo.remove("CREATEDATE");
+                bo.remove("CREATEUSER");
+                editAgentBO.setAll(bo.asMap());
+                editAgentBO.set("OLD_RATIO", bo.get("RATIO"));
+                editAgentBO.set("OLD_DOLLARS", bo.get("DOLLARS"));
+                editAgentBO.set("OLD_TAX_DEDUCT", bo.get("TAX_DEDUCT"));
+                editAgentBO.set("OLD_COMMISSION_DOLLARS", bo.get("COMMISSION_DOLLARS"));
+                SDK.getBOAPI().create("BO_EU_DNCTT_COMMISSION_AGENT_ADJUST", editAgentBO, contractInstance, uc);
+            }
+        }
+
+        if (commissionSalesList != null && commissionSalesList.size() > 0) {
+            for (BO bo : commissionSalesList) {
+                BO editSalesBO = new BO();
+                bo.remove("CREATEDATE");
+                bo.remove("CREATEUSER");
+                editSalesBO.setAll(bo.asMap());
+                editSalesBO.set("OLD_RATIO", bo.get("RATIO"));
+                editSalesBO.set("OLD_DOLLARS", bo.get("DOLLARS"));
+                editSalesBO.set("OLD_TAX_DEDUCT", bo.get("TAX_DEDUCT"));
+                editSalesBO.set("OLD_COMMISSION_DOLLARS", bo.get("COMMISSION_DOLLARS"));
+                SDK.getBOAPI().create("BO_EU_DNCTT_COMMISSION_SALES_ADJUST", editSalesBO, contractInstance, uc);
+            }
+        }
+
+
+        String processUrl = SDK.getFormAPI().getFormURL(SDK.getPortalAPI().getPortalUrl(), uc.getSessionId(), contractInstance.getId(), null, 1, null, editBO.getId(), null, true);
 
+        ResponseObject responseObject = ResponseObject.newOkResponse();
+        responseObject.setData(processUrl);
 
-        return ResponseObject.newOkResponse();
+        return responseObject;
     }
 
 

+ 33 - 8
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/event/commissionFormAfterSave.java

@@ -39,6 +39,10 @@ public class commissionFormAfterSave extends ExecuteListener {
         String boName = processExecutionContext.getParameterOfString(ListenerConst.FORM_EVENT_PARAM_BONAME);
         UserContext uc = processExecutionContext.getUserContext();
 
+        String _ADJUST = StringUtils.EMPTY;
+        if (boName.equals("BO_EU_DNCTT_COMMISSION_ADJUST")) {
+            _ADJUST = "_ADJUST";
+        }
         //佣金表单和佣金调整表单 保存时触发
         if (boName.equals("BO_EU_DNCTT_COMMISSION") || boName.equals("BO_EU_DNCTT_COMMISSION_ADJUST")) {
 
@@ -103,13 +107,20 @@ public class commissionFormAfterSave extends ExecuteListener {
                     }
                 }
             } else {
-//校验
+                //校验
+                LocalDate EFFECTIVE_DATE = getLocalDate(commissionBO.get("PERIOD_BEGIN_DATE"));//服务生效日期
+                String EFFECTIVE_DATE_STR = EFFECTIVE_DATE.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
 
-                //涉及到已审批的 不能修改
+                if (DBSql.getInt("SELECT count(1) FROM BO_EU_DNCTT_COMMISSION_PERIOD WHERE APPROVE_AND_POST_USER_ID IS NOT NULL AND LENGTH(APPROVE_AND_POST_USER_ID)>1 AND APPROVE_AND_POST_DATE IS NOT NULL and BINDID=? AND  PERIOD_END_DATE>=?", new Object[]{commissionBO.get("COMMISSION_BINDID"), EFFECTIVE_DATE_STR}) > 0) {
+                    throw new BPMNError("500", EFFECTIVE_DATE_STR + "之后的佣金周期已被审批,则不能修改到当前日期");
+                }
 
+                if (DBSql.getInt("SELECT count(1) FROM BO_EU_DNCTT_COMMISSION_PERIOD_AGENT WHERE APPROVE_AND_POST_USER_ID IS NOT NULL AND LENGTH(APPROVE_AND_POST_USER_ID)>1 AND APPROVE_AND_POST_DATE IS NOT NULL and BINDID=? AND  PERIOD_END_DATE>=?", new Object[]{commissionBO.get("COMMISSION_BINDID"), EFFECTIVE_DATE_STR}) > 0) {
+                    throw new BPMNError("500", EFFECTIVE_DATE_STR + "之后的佣金周期已被审批,则不能修改到当前日期");
+                }
+            }
 
 
-            }
             List<PERIOD> periodList = getPeriodList(RULE_CATE, PERIOD_BEGIN_DATE, PERIOD_END_DATE);//周期
             if (periodList.size() > 0) {
                 Connection conn = null;
@@ -128,10 +139,22 @@ public class commissionFormAfterSave extends ExecuteListener {
                         DBSql.update(conn, "DELETE FROM BO_EU_DNCTT_COMMISSION_PERIOD_SALES WHERE BINDID = ?  AND PERIOD_BEGIN_DATE>? ", new Object[]{bindid, PERIOD_END_DATE_Str});
                     }
 
-                    List<BO> commissionAgentList = SDK.getBOAPI().query("BO_EU_DNCTT_COMMISSION_AGENT").addQuery("BINDID =", bindid).list();
-                    List<BO> commissionSalesList = SDK.getBOAPI().query("BO_EU_DNCTT_COMMISSION_SALES").addQuery("BINDID =", bindid).list();
+                    List<BO> commissionAgentList = SDK.getBOAPI().query("BO_EU_DNCTT_COMMISSION_AGENT" + _ADJUST).addQuery("BINDID =", bindid).list();
+                    List<BO> commissionSalesList = SDK.getBOAPI().query("BO_EU_DNCTT_COMMISSION_SALES" + _ADJUST).addQuery("BINDID =", bindid).list();
 
                     if (boName.equals("BO_EU_DNCTT_COMMISSION_ADJUST")) {
+
+                        //当前生效日期之后的调整设置为 作废
+                        List<BO> editServiceList = SDK.getBOAPI().query("BO_EU_DNCTT_COMMISSION_ADJUST").connection(conn).addQuery("COMMISSION_BINDID =", COMMISSION_BINDID).addQuery("IS_EFFECTIVE =", "已执行").addQuery("PERIOD_BEGIN_DATE >", PERIOD_BEGIN_DATE_final.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))).orderBy("PERIOD_BEGIN_DATE").asc().list();
+
+                        if (editServiceList != null && editServiceList.size() > 0) {
+                            //在此次调整之后有新的
+                            for (BO editServiceOld : editServiceList) {
+                                editServiceOld.set("IS_EFFECTIVE", "作废");
+                                SDK.getBOAPI().update("BO_EU_DNCTT_COMMISSION_ADJUST", editServiceOld, conn);
+                            }
+                        }
+
                         PERIOD firstPeriod = periodList.get(0);
                         if (firstPeriod.getRate().compareTo(BigDecimal.ONE) == 0) {
                             String periodBOID = DBSql.getString(conn, "SELECT ID FROM BO_EU_DNCTT_COMMISSION_PERIOD WHERE PERIOD_BEGIN_DATE=? AND BINDID=?", new Object[]{firstPeriod.getPeriodBeginDateStr(), bindid});
@@ -278,10 +301,10 @@ public class commissionFormAfterSave extends ExecuteListener {
 
                     //更新佣金
                     if (boName.equals("BO_EU_DNCTT_COMMISSION_ADJUST")) {
-
+                        commissionBO.set("IS_EFFECTIVE", "已执行");
+                        SDK.getBOAPI().update("BO_EU_DNCTT_COMMISSION_ADJUST", commissionBO, conn);
                     }
 
-
                     conn.commit();
                 } catch (SQLException e) {
                     e.printStackTrace();
@@ -292,7 +315,6 @@ public class commissionFormAfterSave extends ExecuteListener {
 
             }
 
-
         }
 
 
@@ -480,6 +502,9 @@ public class commissionFormAfterSave extends ExecuteListener {
     }
 
 
+    /**
+     * 周期
+     */
     private class PERIOD {
         private LocalDate PERIOD_BEGIN_DATE;
         private LocalDate PERIOD_END_DATE;

+ 11 - 2
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/event/commissionFormBeforeSave.java

@@ -10,6 +10,7 @@ import com.actionsoft.sdk.local.SDK;
 import org.apache.commons.lang3.StringUtils;
 
 import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 
 import static com.awspaas.user.apps.donenow_ctt.service.contractService.getLocalDate;
 import static com.awspaas.user.apps.donenow_ctt.service.contractService.isApproximatelyEqual;
@@ -49,10 +50,18 @@ public class commissionFormBeforeSave extends InterruptListener {
                     throw new BPMNError("500", "已审批不允许修改开始日期和佣金金额");
                 }
             }
-        }else if (boName.equals("BO_EU_DNCTT_COMMISSION_ADJUST")) {
-            //
+        } else if (boName.equals("BO_EU_DNCTT_COMMISSION_ADJUST")) {
+            //校验
+            LocalDate EFFECTIVE_DATE = getLocalDate(formData.get("PERIOD_BEGIN_DATE"));//服务生效日期
+            String EFFECTIVE_DATE_STR = EFFECTIVE_DATE.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
 
+            if (DBSql.getInt("SELECT count(1) FROM BO_EU_DNCTT_COMMISSION_PERIOD WHERE APPROVE_AND_POST_USER_ID IS NOT NULL AND LENGTH(APPROVE_AND_POST_USER_ID)>1 AND APPROVE_AND_POST_DATE IS NOT NULL and BINDID=? AND  PERIOD_END_DATE>=?", new Object[]{formData.get("COMMISSION_BINDID"), EFFECTIVE_DATE_STR}) > 0) {
+                throw new BPMNError("500", EFFECTIVE_DATE_STR + "之后的佣金周期已被审批,则不能修改到当前日期");
+            }
 
+            if (DBSql.getInt("SELECT count(1) FROM BO_EU_DNCTT_COMMISSION_PERIOD_AGENT WHERE APPROVE_AND_POST_USER_ID IS NOT NULL AND LENGTH(APPROVE_AND_POST_USER_ID)>1 AND APPROVE_AND_POST_DATE IS NOT NULL and BINDID=? AND  PERIOD_END_DATE>=?", new Object[]{formData.get("COMMISSION_BINDID"), EFFECTIVE_DATE_STR}) > 0) {
+                throw new BPMNError("500", EFFECTIVE_DATE_STR + "之后的佣金周期已被审批,则不能修改到当前日期");
+            }
 
         }
         return true;