|
|
@@ -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);
|