Browse Source

Merge branch 'master' of http://210.51.45.41:3000/itcat_admin/aws_donenow

HULEI 3 weeks ago
parent
commit
c69077e332

+ 53 - 27
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/service/contractCommissionService.java

@@ -57,6 +57,7 @@ public class contractCommissionService {
         StringBuilder errorMsg = new StringBuilder();
 
         Map<String, String> ccm = new java.util.HashMap<>();
+        serviceLogger.info("佣金规则:" + commissions.size());
 
         for (RowMap commission : commissions) {
             String CONTRACT_ID = commission.getString("CONTRACT_ID");
@@ -75,15 +76,18 @@ public class contractCommissionService {
                 }
             }
             String RULE_CATE = commission.getString("RULE_CATE");//规则类别
-            BO period = new BO();
-            period.set("SALES_COMMISSION_ID", commission.getString("ID"));
-            period.set("CONTRACT_ID", commission.getString("CONTRACT_ID"));
-            period.set("ACCOUNT_ID", commission.getString("ACCOUNT_ID"));
-            period.set("PAYEE", commission.getString("PAYEE"));
+            BO orgeriod = new BO();
+            orgeriod.set("SALES_COMMISSION_ID", commission.getString("ID"));
+            orgeriod.set("CONTRACT_ID", commission.getString("CONTRACT_ID"));
+            orgeriod.set("ACCOUNT_ID", commission.getString("ACCOUNT_ID"));
+            orgeriod.set("PAYEE", commission.get("PAYEE"));
+            orgeriod.set("CATE_ID", commission.get("CATE_ID"));
+            orgeriod.set("SALESPERSON", commission.get("SALESPERSON"));
+            orgeriod.set("DEPARTMENTID", commission.get("DEPARTMENTID"));
 
             RowMap account = StringUtils.isBlank(commission.getString("PAYEE")) ? null : DBSql.getMap("select ID,NAME from bo_eu_dncrm_account where id=?", new Object[]{commission.getString("PAYEE")});
 
-            period.set("RATIO", commission.getString("RATIO"));
+            orgeriod.set("RATIO", commission.getString("RATIO"));
 
             BigDecimal COMMISSION_DOLLARS = BigDecimal.ZERO;//佣金金额
 
@@ -94,7 +98,6 @@ public class contractCommissionService {
                 tax = TypeUtil.convert(taxcate.get("EXT1"), BigDecimal.class);
             }
 
-            boolean isPeriod = false;
 
             /**
              * 4646	一次性
@@ -112,11 +115,16 @@ public class contractCommissionService {
 
                 //删除旧数据
                 String comssionperiodBindId = DBSql.getString("select BINDID from BO_EU_DNCTT_SALES_COMMISSION_PERIOD where SALES_COMMISSION_ID=? ", new Object[]{commission.getString("ID")});
-                DBSql.update("delete from BO_EU_DNCTT_SALES_COMMISSION_PERIOD where SALES_COMMISSION_ID=?", new Object[]{commission.getString("ID")});
-                SDK.getProcessAPI().deleteById(comssionperiodBindId, uc.getUID());
+                if (StringUtils.isNotBlank(comssionperiodBindId)) {
+                    DBSql.update("delete from BO_EU_DNCTT_SALES_COMMISSION_PERIOD where SALES_COMMISSION_ID=?", new Object[]{commission.getString("ID")});
+                    SDK.getProcessAPI().deleteById(comssionperiodBindId, uc.getUID());
+                }
+
 
                 RowMap contract = DBSql.getMap("select CONTRACT_START_DATE,CONTRACT_END_DATE from BO_EU_DNCTT_CONTRACT where ID=?", new Object[]{commission.getString("CONTRACT_ID")});
 
+                BO period = new BO();
+                period.setAll(orgeriod.asMap());
                 // a) 周期:与合同相同。用户付款后开始一次性计提(可能没有全部付款)
                 // b) 佣金金额=配置表的佣金金额/(1+配置表税率)
                 period.set("PERIOD_BEGIN_DATE", contract.get("CONTRACT_START_DATE"));//周期开始时间
@@ -127,11 +135,26 @@ public class contractCommissionService {
                 COMMISSION_DOLLARS = COMMISSION_DOLLARS.divide(BigDecimal.ONE.add(tax), 10, BigDecimal.ROUND_HALF_UP);
 
                 period.set("COMMISSION_DOLLARS", COMMISSION_DOLLARS);//佣金金额
-                isPeriod = true;
+
+
+                if (period.containsKey("COMMISSION_DOLLARS")) {
+                    count++;
+                    ProcessInstance Instance = SDK.getProcessAPI().createBOProcessInstance("obj_bb54b127f0bd4b50802070fdaa42a9c3", uc.getUID(), "合同佣金");
+                    period.setBindId(Instance.getId());
+                    SDK.getBOAPI().create("BO_EU_DNCTT_SALES_COMMISSION_PERIOD", period, Instance, uc);
+                    DBSql.update("UPDATE BO_EU_DNCTT_SALES_COMMISSION_PERIOD SET PERIOD_BEGIN_DATE = DATE(PERIOD_BEGIN_DATE), PERIOD_END_DATE = DATE(PERIOD_END_DATE) WHERE BINDID=? AND (PERIOD_BEGIN_DATE <> DATE(PERIOD_BEGIN_DATE) OR PERIOD_END_DATE <> DATE(PERIOD_END_DATE)) ", new Object[]{period.getBindId()});
+                }
+
             } else {
 
                 List<RowMap> bills = DBSql.getMaps("SELECT a.* FROM VIEW_EU_DNCTT_INVOICE_DETAIL a WHERE a.CONTRACT_ID =? AND a.RECEIVE_AMOUNT>0 AND  a.INVOICE_AMOUNT = 0 AND NOT EXISTS( SELECT 1 FROM BO_EU_DNCTT_SALES_COMMISSION_PERIOD b WHERE b.SALES_COMMISSION_ID =? AND b.CONTRACT_ID = a.CONTRACT_ID AND b.PAY_AMOUNT > 0 AND b.INVOICE_DETAIL_ID = a.ID)", new Object[]{commission.getString("CONTRACT_ID"), commission.getString("ID")});
+
+                serviceLogger.info("获取付款的收费条目:" + bills.size());
+
                 for (RowMap bill : bills) {
+                    BO period = new BO();
+                    period.setAll(orgeriod.asMap());
+                    period.set("ID", null);
                     String ACCOUNT_DEDUCTION_ID = bill.getString("ACCOUNT_DEDUCTION_ID");//计费条目ID
 
                     BigDecimal shou_tax = BigDecimal.ZERO;//税率-收
@@ -141,10 +164,11 @@ public class contractCommissionService {
 
                     //删除旧数据
                     String comssionperiodBindId = DBSql.getString("select BINDID from BO_EU_DNCTT_SALES_COMMISSION_PERIOD where SALES_COMMISSION_ID=? and CONTRACT_ID=? and INVOICE_DETAIL_ID=? ", new Object[]{commission.getString("ID"), commission.getString("CONTRACT_ID"), bill.getString("ID")});
-                    DBSql.update("delete from BO_EU_DNCTT_SALES_COMMISSION_PERIOD where SALES_COMMISSION_ID=? and CONTRACT_ID=? and INVOICE_DETAIL_ID=? ", new Object[]{commission.getString("ID"), commission.getString("CONTRACT_ID"), bill.getString("ID")});
-                    SDK.getProcessAPI().deleteById(comssionperiodBindId, uc.getUID());
-
+                    if (StringUtils.isNotBlank(comssionperiodBindId)) {
+                        DBSql.update("delete from BO_EU_DNCTT_SALES_COMMISSION_PERIOD where SALES_COMMISSION_ID=? and CONTRACT_ID=? and INVOICE_DETAIL_ID=? ", new Object[]{commission.getString("ID"), commission.getString("CONTRACT_ID"), bill.getString("ID")});
 
+                        SDK.getProcessAPI().deleteById(comssionperiodBindId, uc.getUID());
+                    }
                     //获取合同服务的周期
                     RowMap service = DBSql.getMap("SELECT b.PERIOD_BEGIN_DATE,b.PERIOD_END_DATE,b.PERIOD_COST,b.CONTRACT_SERVICE_ID from BO_EU_DNCRM_ACCOUNT_DEDUCTION a JOIN BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD b ON a.OBJECT_ID=b.ID AND a.TYPE_ID=1325 AND a.ID=? ", new Object[]{ACCOUNT_DEDUCTION_ID});
                     if (service != null) {
@@ -181,9 +205,10 @@ public class contractCommissionService {
                             shou_tax = TypeUtil.convert(taxcate.get("EXT1"), BigDecimal.class);
 
                             //付款用的税
-                            if (contractService.getString("VAT_TAX").equals("1")) {
+                            if (contractService.getString("VAT_TAX").equals("1") && StringUtils.isNotBlank(contractService.getString("PURCHASE_TAX_CATEGORY_ID"))) {
                                 RowMap fu_taxcate = DBSql.getMap("SELECT NAME,EXT1 FROM BO_EU_DND_GENERAL WHERE OID = ? AND ORGID=?", new Object[]{contractService.getString("PURCHASE_TAX_CATEGORY_ID"), uc.getCompanyModel().getId()});
-                                fu_tax = TypeUtil.convert(fu_taxcate.get("EXT1"), BigDecimal.class);
+                                if (fu_tax != null)
+                                    fu_tax = TypeUtil.convert(fu_taxcate.get("EXT1"), BigDecimal.class);
                             }
                         }
                     } else {
@@ -224,7 +249,6 @@ public class contractCommissionService {
 
                             COMMISSION_DOLLARS = COMMISSION_DOLLARS.divide(BigDecimal.ONE.add(tax), 10, BigDecimal.ROUND_HALF_UP);
                             period.set("COMMISSION_DOLLARS", COMMISSION_DOLLARS);//佣金金额
-                            isPeriod = true;
                         }
                         break;
                         case "4648": {
@@ -247,7 +271,6 @@ public class contractCommissionService {
 
                             COMMISSION_DOLLARS = COMMISSION_DOLLARS.divide(BigDecimal.ONE.add(tax), 10, BigDecimal.ROUND_HALF_UP);
                             period.set("COMMISSION_DOLLARS", COMMISSION_DOLLARS);//佣金金额
-                            isPeriod = true;
 
                         }
                         break;
@@ -265,7 +288,6 @@ public class contractCommissionService {
                                     is = true;
                                     COMMISSION_DOLLARS = COMMISSION_DOLLARS.divide(BigDecimal.ONE.add(tax), 10, BigDecimal.ROUND_HALF_UP);
                                     period.set("COMMISSION_DOLLARS", COMMISSION_DOLLARS);//佣金金额
-                                    isPeriod = true;
                                 }
                             }
 
@@ -276,26 +298,30 @@ public class contractCommissionService {
                                 COMMISSION_DOLLARS = COMMISSION_DOLLARS.multiply(RATIO).divide(BigDecimal.valueOf(100), 10, BigDecimal.ROUND_HALF_UP);
                                 COMMISSION_DOLLARS = COMMISSION_DOLLARS.divide(BigDecimal.ONE.add(tax), 10, BigDecimal.ROUND_HALF_UP);
                                 period.set("COMMISSION_DOLLARS", COMMISSION_DOLLARS);//佣金金额
-                                isPeriod = true;
                             }
 
                         }
                         break;
                     }
+
+                    if (period.containsKey("COMMISSION_DOLLARS")) {
+                        count++;
+                        ProcessInstance Instance = SDK.getProcessAPI().createBOProcessInstance("obj_bb54b127f0bd4b50802070fdaa42a9c3", uc.getUID(), "合同佣金");
+                        period.setBindId(Instance.getId());
+                        SDK.getBOAPI().create("BO_EU_DNCTT_SALES_COMMISSION_PERIOD", period, Instance, uc);
+                        DBSql.update("UPDATE BO_EU_DNCTT_SALES_COMMISSION_PERIOD SET PERIOD_BEGIN_DATE = DATE(PERIOD_BEGIN_DATE), PERIOD_END_DATE = DATE(PERIOD_END_DATE) WHERE BINDID=? AND (PERIOD_BEGIN_DATE <> DATE(PERIOD_BEGIN_DATE) OR PERIOD_END_DATE <> DATE(PERIOD_END_DATE)) ", new Object[]{period.getBindId()});
+                    }
+
                 }
             }
 
-            if (isPeriod && period.containsKey("COMMISSION_DOLLARS")) {
-                count++;
-                ProcessInstance Instance = SDK.getProcessAPI().createBOProcessInstance("obj_bb54b127f0bd4b50802070fdaa42a9c3", uc.getUID(), "合同佣金");
-                period.setBindId(Instance.getId());
-                SDK.getBOAPI().create("BO_EU_DNCTT_SALES_COMMISSION_PERIOD", period, Instance, uc);
-                DBSql.update("UPDATE BO_EU_DNCTT_SALES_COMMISSION_PERIOD SET PERIOD_BEGIN_DATE = DATE(PERIOD_BEGIN_DATE), PERIOD_END_DATE = DATE(PERIOD_END_DATE) WHERE BINDID=? AND (PERIOD_BEGIN_DATE <> DATE(PERIOD_BEGIN_DATE) OR PERIOD_END_DATE <> DATE(PERIOD_END_DATE)) ", new Object[]{period.getBindId()});
-            }
+
         }
 
+
         if (count == 0) {
-            if (errorMsg.length() > 0) return ResponseObject.newErrResponse(errorMsg.toString());
+            if (errorMsg.length() > 0)
+                return ResponseObject.newErrResponse(errorMsg.toString());
             return ResponseObject.newErrResponse("没有符合条件的佣金生成!");
         }
         return ResponseObject.newOkResponse().put("count", count);