|
@@ -147,7 +147,13 @@ public class contractCommissionService {
|
|
|
|
|
|
|
|
} else {
|
|
} 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")});
|
|
|
|
|
|
|
+ String CONTRACT_COST_ID = commission.getString("CONTRACT_COST_ID");
|
|
|
|
|
+ String CONTRACT_SERVICE_ID = commission.getString("CONTRACT_SERVICE_ID");
|
|
|
|
|
+
|
|
|
|
|
+ if (StringUtils.isBlank(CONTRACT_COST_ID) && StringUtils.isBlank(CONTRACT_SERVICE_ID))
|
|
|
|
|
+ continue;
|
|
|
|
|
+
|
|
|
|
|
+ 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) AND EXISTS ( SELECT 1 FROM BO_EU_DNCRM_ACCOUNT_DEDUCTION c WHERE c.ID = a.ACCOUNT_DEDUCTION_ID AND ( ( c.TYPE_ID = 1325 AND FIND_IN_SET( c.OBJECT_ID, ? )) OR ( c.TYPE_ID = 1321 AND FIND_IN_SET( c.OBJECT_ID, ? ) ) ) )", new Object[]{commission.getString("CONTRACT_ID"), commission.getString("ID"), CONTRACT_SERVICE_ID, CONTRACT_COST_ID});
|
|
|
|
|
|
|
|
serviceLogger.info("获取付款的收费条目:" + bills.size());
|
|
serviceLogger.info("获取付款的收费条目:" + bills.size());
|
|
|
|
|
|
|
@@ -171,6 +177,9 @@ public class contractCommissionService {
|
|
|
}
|
|
}
|
|
|
//获取合同服务的周期
|
|
//获取合同服务的周期
|
|
|
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});
|
|
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});
|
|
|
|
|
+
|
|
|
|
|
+ RowMap ded = DBSql.getMap("select * from BO_EU_DNCRM_ACCOUNT_DEDUCTION where ID=?", new Object[]{ACCOUNT_DEDUCTION_ID});
|
|
|
|
|
+
|
|
|
if (service != null) {
|
|
if (service != null) {
|
|
|
period.set("CONTRACT_SERVICE_ID", service.get("CONTRACT_SERVICE_ID"));
|
|
period.set("CONTRACT_SERVICE_ID", service.get("CONTRACT_SERVICE_ID"));
|
|
|
period.set("PERIOD_BEGIN_DATE", service.get("PERIOD_BEGIN_DATE"));//周期开始时间
|
|
period.set("PERIOD_BEGIN_DATE", service.get("PERIOD_BEGIN_DATE"));//周期开始时间
|
|
@@ -179,7 +188,7 @@ public class contractCommissionService {
|
|
|
|
|
|
|
|
//period.set("COST_BF_INCLUDE_TAX", bill.get(""));//上期结转成本(含税)
|
|
//period.set("COST_BF_INCLUDE_TAX", bill.get(""));//上期结转成本(含税)
|
|
|
|
|
|
|
|
- //上期的成本-已收+上期结转成本(不含税)
|
|
|
|
|
|
|
+ //上期的成本-已收+上期结转成本(含税)
|
|
|
RowMap lastPeriod = DBSql.getMap("SELECT * FROM BO_EU_DNCTT_SALES_COMMISSION_PERIOD WHERE SALES_COMMISSION_ID=? AND CONTRACT_SERVICE_ID=? and INVOICE_DETAIL_ID=? ORDER BY PERIOD_BEGIN_DATE DESC", new Object[]{commission.getString("ID"), service.get("CONTRACT_SERVICE_ID"), bill.getString("ID")});
|
|
RowMap lastPeriod = DBSql.getMap("SELECT * FROM BO_EU_DNCTT_SALES_COMMISSION_PERIOD WHERE SALES_COMMISSION_ID=? AND CONTRACT_SERVICE_ID=? and INVOICE_DETAIL_ID=? ORDER BY PERIOD_BEGIN_DATE DESC", new Object[]{commission.getString("ID"), service.get("CONTRACT_SERVICE_ID"), bill.getString("ID")});
|
|
|
if (lastPeriod != null) {
|
|
if (lastPeriod != null) {
|
|
|
BigDecimal RECEIVED_DOLLARS_INCLUDE_TAX = TypeUtil.convert(lastPeriod.get("RECEIVED_DOLLARS_INCLUDE_TAX"), BigDecimal.class);
|
|
BigDecimal RECEIVED_DOLLARS_INCLUDE_TAX = TypeUtil.convert(lastPeriod.get("RECEIVED_DOLLARS_INCLUDE_TAX"), BigDecimal.class);
|
|
@@ -196,7 +205,6 @@ public class contractCommissionService {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|
|
|
RowMap contractService = DBSql.getMap("SELECT IS_CTRTAX_APPLIED,TAX_CATEGORY_ID,VAT_TAX,PURCHASE_TAX_CATEGORY_ID FROM BO_EU_DNCTT_CONTRACT_SERVICE WHERE ID=?", new Object[]{service.get("CONTRACT_SERVICE_ID")});
|
|
RowMap contractService = DBSql.getMap("SELECT IS_CTRTAX_APPLIED,TAX_CATEGORY_ID,VAT_TAX,PURCHASE_TAX_CATEGORY_ID FROM BO_EU_DNCTT_CONTRACT_SERVICE WHERE ID=?", new Object[]{service.get("CONTRACT_SERVICE_ID")});
|
|
|
if (contractService != null) {
|
|
if (contractService != null) {
|
|
|
|
|
|
|
@@ -214,6 +222,12 @@ public class contractCommissionService {
|
|
|
} else {
|
|
} else {
|
|
|
period.set("PERIOD_BEGIN_DATE", bill.get("ITEM_DATE"));//计费日期
|
|
period.set("PERIOD_BEGIN_DATE", bill.get("ITEM_DATE"));//计费日期
|
|
|
period.set("PERIOD_END_DATE", bill.get("ITEM_DATE"));//计费日期
|
|
period.set("PERIOD_END_DATE", bill.get("ITEM_DATE"));//计费日期
|
|
|
|
|
+ period.set("EXTENDED_COST", ded.get("EXTENDED_COST"));//本期成本(含税)
|
|
|
|
|
+
|
|
|
|
|
+ //应收用的税
|
|
|
|
|
+ RowMap taxcate = DBSql.getMap("SELECT NAME,EXT1 FROM BO_EU_DND_GENERAL WHERE OID = ? AND ORGID=?", new Object[]{ded.getString("TAX_CATEGORY_ID"), uc.getCompanyModel().getId()});
|
|
|
|
|
+ shou_tax = TypeUtil.convert(taxcate.get("EXT1"), BigDecimal.class);
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
period.set("RECEIVABLE_DOLLARS_INCLUDE_TAX", bill.get("DOLLARS"));//本期应收款(含税)
|
|
period.set("RECEIVABLE_DOLLARS_INCLUDE_TAX", bill.get("DOLLARS"));//本期应收款(含税)
|
|
@@ -239,38 +253,66 @@ public class contractCommissionService {
|
|
|
|
|
|
|
|
switch (RULE_CATE) {
|
|
switch (RULE_CATE) {
|
|
|
case "4647": {
|
|
case "4647": {
|
|
|
- //销售额百分比:针对已经全部收款的合同服务进行生成,创建一条合同佣金周期记录
|
|
|
|
|
- //佣金金额:本期已收款(不含税)/(1+配置表税率),注意计费项必须是全部付款了,才能提佣金,已收款必须是完整支付的计费项的金额之和
|
|
|
|
|
- COMMISSION_DOLLARS = TypeUtil.convert(bill.get("RECEIVE_AMOUNT"), BigDecimal.class);
|
|
|
|
|
-
|
|
|
|
|
- BigDecimal RATIO = TypeUtil.convert(commission.get("RATIO"), BigDecimal.class);
|
|
|
|
|
-
|
|
|
|
|
- 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);//佣金金额
|
|
|
|
|
|
|
+ if (commission.getString("INCLUDE_TAX").equals("1")) {
|
|
|
|
|
+ //销售额百分比:针对已经全部收款的合同服务进行生成,创建一条合同佣金周期记录
|
|
|
|
|
+ //佣金金额:本期已收款(不含税)/(1+配置表税率),注意计费项必须是全部付款了,才能提佣金,已收款必须是完整支付的计费项的金额之和
|
|
|
|
|
+ COMMISSION_DOLLARS = TypeUtil.convert(bill.get("RECEIVE_AMOUNT"), BigDecimal.class);
|
|
|
|
|
+ BigDecimal RATIO = TypeUtil.convert(commission.get("RATIO"), BigDecimal.class);
|
|
|
|
|
+ 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);//佣金金额
|
|
|
|
|
+ } else {
|
|
|
|
|
+ //使用不含税 已收款
|
|
|
|
|
+ COMMISSION_DOLLARS = TypeUtil.convert(period.get("RECEIVED_DOLLARS"), BigDecimal.class);
|
|
|
|
|
+ BigDecimal RATIO = TypeUtil.convert(commission.get("RATIO"), BigDecimal.class);
|
|
|
|
|
+ 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);//佣金金额
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
|
case "4648": {
|
|
case "4648": {
|
|
|
//销售净利百分比:针对已经全部收款的合同服务进行生成,创建一条合同佣金周期记录
|
|
//销售净利百分比:针对已经全部收款的合同服务进行生成,创建一条合同佣金周期记录
|
|
|
BigDecimal RATIO = TypeUtil.convert(commission.get("RATIO"), BigDecimal.class);
|
|
BigDecimal RATIO = TypeUtil.convert(commission.get("RATIO"), BigDecimal.class);
|
|
|
|
|
+ //使用含税价
|
|
|
|
|
+ if (commission.getString("INCLUDE_TAX").equals("1")) {
|
|
|
|
|
+ COMMISSION_DOLLARS = TypeUtil.convert(bill.get("RECEIVE_AMOUNT"), BigDecimal.class);
|
|
|
|
|
+
|
|
|
|
|
+ //本期成本(含税)
|
|
|
|
|
+ if (period.containsKey("COST_INCLUDE_TAX") && period.get("COST_INCLUDE_TAX") != null)
|
|
|
|
|
+ COMMISSION_DOLLARS = COMMISSION_DOLLARS.subtract(TypeUtil.convert(period.get("COST_INCLUDE_TAX"), BigDecimal.class));
|
|
|
|
|
+
|
|
|
|
|
+ //上期结转成本(含税)
|
|
|
|
|
+ if (period.containsKey("COST_BF_INCLUDE_TAX") && period.get("COST_BF_INCLUDE_TAX") != null)
|
|
|
|
|
+ COMMISSION_DOLLARS = COMMISSION_DOLLARS.subtract(TypeUtil.convert(period.get("COST_BF_INCLUDE_TAX"), BigDecimal.class));
|
|
|
|
|
+
|
|
|
|
|
+ period.set("NET_PROFIT", COMMISSION_DOLLARS);//利润
|
|
|
|
|
+
|
|
|
|
|
+ COMMISSION_DOLLARS = COMMISSION_DOLLARS.multiply(RATIO).divide(BigDecimal.valueOf(100), 10, BigDecimal.ROUND_HALF_UP);
|
|
|
|
|
|
|
|
- COMMISSION_DOLLARS = TypeUtil.convert(bill.get("RECEIVE_AMOUNT"), BigDecimal.class);
|
|
|
|
|
|
|
+ COMMISSION_DOLLARS = COMMISSION_DOLLARS.divide(BigDecimal.ONE.add(tax), 10, BigDecimal.ROUND_HALF_UP);
|
|
|
|
|
+ period.set("COMMISSION_DOLLARS", COMMISSION_DOLLARS);//佣金金额
|
|
|
|
|
|
|
|
- //本期成本(含税)
|
|
|
|
|
- if (period.containsKey("COST_INCLUDE_TAX") && period.get("COST_INCLUDE_TAX") != null)
|
|
|
|
|
- COMMISSION_DOLLARS = COMMISSION_DOLLARS.subtract(TypeUtil.convert(period.get("COST_INCLUDE_TAX"), BigDecimal.class));
|
|
|
|
|
|
|
+ } else {
|
|
|
|
|
+ //使用不含税价
|
|
|
|
|
+ COMMISSION_DOLLARS = TypeUtil.convert(period.get("RECEIVED_DOLLARS"), BigDecimal.class);//不含税已收
|
|
|
|
|
|
|
|
- //上期结转成本(含税)
|
|
|
|
|
- if (period.containsKey("COST_BF_INCLUDE_TAX") && period.get("COST_BF_INCLUDE_TAX") != null)
|
|
|
|
|
- COMMISSION_DOLLARS = COMMISSION_DOLLARS.subtract(TypeUtil.convert(period.get("COST_BF_INCLUDE_TAX"), BigDecimal.class));
|
|
|
|
|
|
|
+ //本期成本(含税)
|
|
|
|
|
+ if (period.containsKey("COST") && period.get("COST") != null)
|
|
|
|
|
+ COMMISSION_DOLLARS = COMMISSION_DOLLARS.subtract(TypeUtil.convert(period.get("COST"), BigDecimal.class));
|
|
|
|
|
|
|
|
- period.set("NET_PROFIT", COMMISSION_DOLLARS);//利润
|
|
|
|
|
|
|
+ //上期结转成本(含税)
|
|
|
|
|
+ if (period.containsKey("COST_BF") && period.get("COST_BF") != null)
|
|
|
|
|
+ COMMISSION_DOLLARS = COMMISSION_DOLLARS.subtract(TypeUtil.convert(period.get("COST_BF"), BigDecimal.class));
|
|
|
|
|
|
|
|
- COMMISSION_DOLLARS = COMMISSION_DOLLARS.multiply(RATIO).divide(BigDecimal.valueOf(100), 10, BigDecimal.ROUND_HALF_UP);
|
|
|
|
|
|
|
+ period.set("NET_PROFIT", COMMISSION_DOLLARS);//利润
|
|
|
|
|
+
|
|
|
|
|
+ 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);//佣金金额
|
|
|
|
|
|
|
+ COMMISSION_DOLLARS = COMMISSION_DOLLARS.divide(BigDecimal.ONE.add(tax), 10, BigDecimal.ROUND_HALF_UP);
|
|
|
|
|
+ period.set("COMMISSION_DOLLARS", COMMISSION_DOLLARS);//佣金金额
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|