|
@@ -139,47 +139,9 @@ public class contractServiceAdj {
|
|
|
BigDecimal SERVICE_UNIT_PRICE = null;
|
|
BigDecimal SERVICE_UNIT_PRICE = null;
|
|
|
BigDecimal SERVICE_TOTAL_PRICE = null;
|
|
BigDecimal SERVICE_TOTAL_PRICE = null;
|
|
|
|
|
|
|
|
- boolean teshuchuli = false;//需要特殊处理
|
|
|
|
|
- BigDecimal PRICE_1STMONTH = null;
|
|
|
|
|
- String teshuchuliBeginDate = null;
|
|
|
|
|
if (StringUtils.isNotBlank(lastPeriodId)) {
|
|
if (StringUtils.isNotBlank(lastPeriodId)) {
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- //首月+12月为第一周期的情况
|
|
|
|
|
- if (contractService.get("CALC_METHOD_1STPERIOD").equals("4591")) {
|
|
|
|
|
-
|
|
|
|
|
- //获取第一笔
|
|
|
|
|
- RowMap firstContractService = DBSql.getMap("select * from BO_EU_DNCTT_CONTRACT_SERVICE_SALE_ADJUST where CONTRACT_SERVICE_ID=? and IS_EFFECTIVE='已执行' order by EFFECTIVE_DATE ASC", new Object[]{contractService.get("CONTRACT_SERVICE_ID")});
|
|
|
|
|
-
|
|
|
|
|
- LocalDate firstEFFECTIVE_DATE = getLocalDate(firstContractService.get("EFFECTIVE_DATE"));
|
|
|
|
|
-
|
|
|
|
|
- if (firstEFFECTIVE_DATE.getYear() == EFFECTIVE_DATE.getYear() && firstEFFECTIVE_DATE.getMonth() == EFFECTIVE_DATE.getMonth()) {
|
|
|
|
|
- teshuchuli = true;
|
|
|
|
|
- teshuchuliBeginDate = LocalDateYYYYMMDD(EFFECTIVE_DATE);
|
|
|
|
|
-
|
|
|
|
|
- SERVICE_UNIT_PRICE = TypeUtil.convert(contractService.get("UNIT_PRICE_1STMONTH"), BigDecimal.class);
|
|
|
|
|
- SERVICE_TOTAL_PRICE = multiply(SERVICE_UNIT_PRICE, contractService.get("QUANTITY"));
|
|
|
|
|
- SERVICE_TOTAL_PRICE = multiply(SERVICE_TOTAL_PRICE, 12);
|
|
|
|
|
-
|
|
|
|
|
- BigDecimal periodRate = PeriodCalculationUtil.divideToBigDecimal(getDateRate(EFFECTIVE_DATE, EFFECTIVE_DATE.plusMonths(1).withDayOfMonth(1).minusDays(1), false), GetPeriodMonth(contractService.getString("PERIOD_TYPE")));
|
|
|
|
|
-
|
|
|
|
|
- PRICE_1STMONTH = SERVICE_TOTAL_PRICE.multiply(periodRate);
|
|
|
|
|
-
|
|
|
|
|
- EFFECTIVE_DATE = EFFECTIVE_DATE.plusMonths(1).withDayOfMonth(1);//下个月1号
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- //需要使用首月单价
|
|
|
|
|
- if (teshuchuli) {
|
|
|
|
|
- SERVICE_UNIT_PRICE = TypeUtil.convert(lastContractService.get("UNIT_PRICE_1STMONTH"), BigDecimal.class);
|
|
|
|
|
- SERVICE_TOTAL_PRICE = multiply(SERVICE_UNIT_PRICE, lastContractService.get("QUANTITY"));
|
|
|
|
|
- SERVICE_TOTAL_PRICE = multiply(SERVICE_TOTAL_PRICE, 12);
|
|
|
|
|
- } else {
|
|
|
|
|
- //正常处理
|
|
|
|
|
- SERVICE_UNIT_PRICE = TypeUtil.convert(lastContractService.get("UNIT_PRICE"), BigDecimal.class);
|
|
|
|
|
- SERVICE_TOTAL_PRICE = multiply(SERVICE_UNIT_PRICE, lastContractService.get("QUANTITY"));
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
|
|
+ SERVICE_UNIT_PRICE = TypeUtil.convert(lastContractService.get("UNIT_PRICE"), BigDecimal.class);
|
|
|
|
|
+ SERVICE_TOTAL_PRICE = multiply(SERVICE_UNIT_PRICE, lastContractService.get("QUANTITY"));
|
|
|
|
|
|
|
|
BO lastServicePeriod = SDK.getBOAPI().get("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", lastPeriodId);
|
|
BO lastServicePeriod = SDK.getBOAPI().get("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", lastPeriodId);
|
|
|
|
|
|
|
@@ -227,12 +189,7 @@ public class contractServiceAdj {
|
|
|
csp.set("QUANTITY", contractService.get("QUANTITY"));
|
|
csp.set("QUANTITY", contractService.get("QUANTITY"));
|
|
|
|
|
|
|
|
//第一条
|
|
//第一条
|
|
|
- if (teshuchuli && i == 1) {
|
|
|
|
|
- csp.set("PERIOD_PRICE", period.getRate().multiply(SERVICE_TOTAL_PRICE).add(PRICE_1STMONTH));
|
|
|
|
|
- csp.set("PERIOD_BEGIN_DATE", teshuchuliBeginDate);
|
|
|
|
|
- } else {
|
|
|
|
|
- csp.set("PERIOD_PRICE", period.getRate().multiply(SERVICE_TOTAL_PRICE));
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ csp.set("PERIOD_PRICE", period.getRate().multiply(SERVICE_TOTAL_PRICE));
|
|
|
|
|
|
|
|
csp.set("PERIOD_ADJUSTED_PRICE", csp.get("PERIOD_PRICE"));
|
|
csp.set("PERIOD_ADJUSTED_PRICE", csp.get("PERIOD_PRICE"));
|
|
|
csp.set("PARTYA_PERIOD_PRICE", multiply(contractService.get("PARTYA_TOTAL_PRICE"), period.getRate()));//三方合同甲方含税总价
|
|
csp.set("PARTYA_PERIOD_PRICE", multiply(contractService.get("PARTYA_TOTAL_PRICE"), period.getRate()));//三方合同甲方含税总价
|
|
@@ -274,6 +231,51 @@ public class contractServiceAdj {
|
|
|
orgContractService.set("CALC_METHOD_1STPERIOD", contractService.get("CALC_METHOD_1STPERIOD"));
|
|
orgContractService.set("CALC_METHOD_1STPERIOD", contractService.get("CALC_METHOD_1STPERIOD"));
|
|
|
orgContractService.set("MONTH_1STQUARTER", contractService.get("MONTH_1STQUARTER"));
|
|
orgContractService.set("MONTH_1STQUARTER", contractService.get("MONTH_1STQUARTER"));
|
|
|
|
|
|
|
|
|
|
+ //计算各种不含税金额
|
|
|
|
|
+ // 确定周期对应的月数
|
|
|
|
|
+ int periodMonths;
|
|
|
|
|
+ switch (contractService.getString("PERIOD_TYPE")) {
|
|
|
|
|
+ case "610":
|
|
|
|
|
+ periodMonths = 1; // 按月
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "611":
|
|
|
|
|
+ periodMonths = 3; // 按季度
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "612":
|
|
|
|
|
+ periodMonths = 6; // 按半年
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "613":
|
|
|
|
|
+ periodMonths = 12; // 按年
|
|
|
|
|
+ break;
|
|
|
|
|
+ default:
|
|
|
|
|
+ periodMonths = 1;
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ //月单价 UNIT_PRICE_MONTH
|
|
|
|
|
+ orgContractService.set("SERVICE_UNIT_PRICE", SERVICE_UNIT_PRICE.divide(BigDecimal.valueOf(periodMonths)));
|
|
|
|
|
+
|
|
|
|
|
+ RowMap taxCate = DBSql.getMap("SELECT OID,NAME,ORGID,GENERAL_TABLE_ID,EXT1,CLOSED,IS_ACTIVE FROM BO_EU_DND_GENERAL WHERE GENERAL_TABLE_ID=44 AND ORGID=? AND OID=?", new Object[]{uc.getCompanyModel().getId(), orgContractService.getString("TAX_CATEGORY_ID")}); //税种
|
|
|
|
|
+
|
|
|
|
|
+ if (taxCate != null) {
|
|
|
|
|
+ BigDecimal taxRate = new BigDecimal(taxCate.getString("EXT1"));
|
|
|
|
|
+ //月不含税单价 UNIT_PRICE_MONTH_NOTAX
|
|
|
|
|
+ BigDecimal taxExcluded = SERVICE_UNIT_PRICE.divide(BigDecimal.valueOf(periodMonths)).divide(BigDecimal.ONE.add(taxRate), 4, BigDecimal.ROUND_HALF_UP); // 保留4位小数
|
|
|
|
|
+ orgContractService.set("SERVICE_UNIT_PRICE_NOTAX", taxExcluded);
|
|
|
|
|
+
|
|
|
|
|
+ //周期不含税单价 UNIT_PRICE_NOTAX
|
|
|
|
|
+
|
|
|
|
|
+ orgContractService.set("UNIT_PRICE_NOTAX", SERVICE_UNIT_PRICE.divide(BigDecimal.ONE.add(taxRate), 4, BigDecimal.ROUND_HALF_UP));
|
|
|
|
|
+
|
|
|
|
|
+ //周期不含税总价 TOTAL_PRICE_NOTAX
|
|
|
|
|
+ orgContractService.set("TOTAL_PRICE_NOTAX", SERVICE_TOTAL_PRICE.divide(BigDecimal.ONE.add(taxRate), 4, BigDecimal.ROUND_HALF_UP));
|
|
|
|
|
+ } else {
|
|
|
|
|
+ orgContractService.set("SERVICE_UNIT_PRICE_NOTAX", null);
|
|
|
|
|
+ orgContractService.set("UNIT_PRICE_NOTAX", null);
|
|
|
|
|
+ orgContractService.set("TOTAL_PRICE_NOTAX", null);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
//如果合同服务上面的生效日期小于服务调整的生效日期,则将合同服务生效日期改为服务调整的生效日期
|
|
//如果合同服务上面的生效日期小于服务调整的生效日期,则将合同服务生效日期改为服务调整的生效日期
|
|
|
if (orgContractService.get("EFFECTIVE_DATE", LocalDate.class).compareTo(contractService.get("EFFECTIVE_DATE", LocalDate.class)) < 0)
|
|
if (orgContractService.get("EFFECTIVE_DATE", LocalDate.class).compareTo(contractService.get("EFFECTIVE_DATE", LocalDate.class)) < 0)
|
|
|
orgContractService.set("EFFECTIVE_DATE", contractService.get("EFFECTIVE_DATE"));
|
|
orgContractService.set("EFFECTIVE_DATE", contractService.get("EFFECTIVE_DATE"));
|
|
@@ -474,7 +476,6 @@ public class contractServiceAdj {
|
|
|
adjBO.set("PURCHASE_CALC_METHOD_1STPERIOD", lastContractServiceAdj.getString("PURCHASE_CALC_METHOD_1STPERIOD"));
|
|
adjBO.set("PURCHASE_CALC_METHOD_1STPERIOD", lastContractServiceAdj.getString("PURCHASE_CALC_METHOD_1STPERIOD"));
|
|
|
adjBO.set("MONTH_1STQUARTER", lastContractServiceAdj.getString("MONTH_1STQUARTER"));
|
|
adjBO.set("MONTH_1STQUARTER", lastContractServiceAdj.getString("MONTH_1STQUARTER"));
|
|
|
adjBO.set("UNIT_COST_1STMONTH", lastContractServiceAdj.getString("UNIT_COST_1STMONTH"));
|
|
adjBO.set("UNIT_COST_1STMONTH", lastContractServiceAdj.getString("UNIT_COST_1STMONTH"));
|
|
|
-
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
} else {
|
|
@@ -535,32 +536,28 @@ public class contractServiceAdj {
|
|
|
BigDecimal COST_1STMONTH = null;
|
|
BigDecimal COST_1STMONTH = null;
|
|
|
if (StringUtils.isNotBlank(lastPeriodId)) {
|
|
if (StringUtils.isNotBlank(lastPeriodId)) {
|
|
|
|
|
|
|
|
- //首月+12月为第一周期的情况
|
|
|
|
|
- if (contractService.get("PURCHASE_CALC_METHOD_1STPERIOD").equals("4591")) {
|
|
|
|
|
-
|
|
|
|
|
- //获取第一笔
|
|
|
|
|
- RowMap firstContractService = DBSql.getMap("select * from BO_EU_DNCTT_CONTRACT_SERVICE_PURCHASE_ADJUST where CONTRACT_SERVICE_ID=? and IS_EFFECTIVE='已执行' order by PURCHASE_START_DATE ASC", new Object[]{contractService.get("CONTRACT_SERVICE_ID")});
|
|
|
|
|
|
|
+ //获取第一笔
|
|
|
|
|
|
|
|
- LocalDate firstEFFECTIVE_DATE = getLocalDate(firstContractService.get("PURCHASE_START_DATE"));
|
|
|
|
|
|
|
+ //首月成本
|
|
|
|
|
+ RowMap firstContractService = DBSql.getMap("select * from BO_EU_DNCTT_CONTRACT_SERVICE_PURCHASE_ADJUST where CONTRACT_SERVICE_ID=? and IS_EFFECTIVE='已执行' order by PURCHASE_START_DATE ASC", new Object[]{contractService.get("CONTRACT_SERVICE_ID")});
|
|
|
|
|
|
|
|
- if (firstEFFECTIVE_DATE.getYear() == EFFECTIVE_DATE.getYear() && firstEFFECTIVE_DATE.getMonth() == EFFECTIVE_DATE.getMonth()) {
|
|
|
|
|
- teshuchuli = true;
|
|
|
|
|
- teshuchuliBeginDate = LocalDateYYYYMMDD(EFFECTIVE_DATE);
|
|
|
|
|
|
|
+ LocalDate firstEFFECTIVE_DATE = getLocalDate(firstContractService.get("PURCHASE_START_DATE"));
|
|
|
|
|
|
|
|
- SERVICE_UNIT_COST = TypeUtil.convert(contractService.get("UNIT_COST_1STMONTH"), BigDecimal.class);
|
|
|
|
|
- SERVICE_TOTAL_COST = multiply(SERVICE_UNIT_COST, contractService.get("QUANTITY"));
|
|
|
|
|
- SERVICE_TOTAL_COST = multiply(SERVICE_TOTAL_COST, 12);
|
|
|
|
|
|
|
+ if (firstEFFECTIVE_DATE.getYear() == EFFECTIVE_DATE.getYear() && firstEFFECTIVE_DATE.getMonth() == EFFECTIVE_DATE.getMonth()) {
|
|
|
|
|
+ teshuchuli = true;
|
|
|
|
|
+ teshuchuliBeginDate = LocalDateYYYYMMDD(EFFECTIVE_DATE);
|
|
|
|
|
+ SERVICE_UNIT_COST = TypeUtil.convert(contractService.get("UNIT_COST_1STMONTH"), BigDecimal.class);
|
|
|
|
|
+ SERVICE_TOTAL_COST = multiply(SERVICE_UNIT_COST, contractService.get("QUANTITY"));
|
|
|
|
|
|
|
|
- BigDecimal periodRate = PeriodCalculationUtil.divideToBigDecimal(getDateRate(EFFECTIVE_DATE, EFFECTIVE_DATE.plusMonths(1).withDayOfMonth(1).minusDays(1), false), GetPeriodMonth(contractService.getString("PURCHASE_PERIOD_TYPE")));
|
|
|
|
|
|
|
+ BigDecimal ratio = new BigDecimal(EFFECTIVE_DATE.getDayOfMonth()).divide(new BigDecimal(EFFECTIVE_DATE.lengthOfMonth()), 10, BigDecimal.ROUND_HALF_UP);
|
|
|
|
|
+ ratio = BigDecimal.ONE.subtract(ratio);
|
|
|
|
|
|
|
|
- COST_1STMONTH = SERVICE_TOTAL_COST.multiply(periodRate);
|
|
|
|
|
|
|
+ COST_1STMONTH = SERVICE_TOTAL_COST.multiply(ratio);
|
|
|
|
|
|
|
|
- EFFECTIVE_DATE = EFFECTIVE_DATE.plusMonths(1).withDayOfMonth(1);//下个月1号
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ EFFECTIVE_DATE = EFFECTIVE_DATE.plusMonths(1).withDayOfMonth(1);//下个月1号
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 首月单独计费
|
|
// 首月单独计费
|
|
|
-
|
|
|
|
|
if (teshuchuli) {
|
|
if (teshuchuli) {
|
|
|
SERVICE_UNIT_COST = TypeUtil.convert(lastContractService.get("UNIT_COST_1STMONTH"), BigDecimal.class);
|
|
SERVICE_UNIT_COST = TypeUtil.convert(lastContractService.get("UNIT_COST_1STMONTH"), BigDecimal.class);
|
|
|
SERVICE_TOTAL_COST = multiply(SERVICE_UNIT_COST, lastContractService.get("QUANTITY"));
|
|
SERVICE_TOTAL_COST = multiply(SERVICE_UNIT_COST, lastContractService.get("QUANTITY"));
|