|
|
@@ -158,8 +158,9 @@ public class contractServiceAdj {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ String CALC_METHOD_1STPERIOD = contractService.getString("CALC_METHOD_1STPERIOD");
|
|
|
//获取服务周期
|
|
|
- List<PeriodCalculationUtil.Period> periodList = PeriodCalculationUtil.getPeriodListByConfig(PERIOD_TYPE, EFFECTIVE_DATE, EFFECTIVE_DATE, EFFECTIVE_END_DATE, contractService.getString("CALC_METHOD_1STPERIOD"), "4638", contractService.getString("MONTH_1STQUARTER"));
|
|
|
+ List<PeriodCalculationUtil.Period> periodList = PeriodCalculationUtil.getPeriodListByConfig(PERIOD_TYPE, EFFECTIVE_DATE, EFFECTIVE_DATE, EFFECTIVE_END_DATE, CALC_METHOD_1STPERIOD, "4638", contractService.getString("MONTH_1STQUARTER"));
|
|
|
|
|
|
SERVICE_UNIT_PRICE = TypeUtil.convert(contractService.get("UNIT_PRICE"), BigDecimal.class);
|
|
|
|
|
|
@@ -175,22 +176,35 @@ public class contractServiceAdj {
|
|
|
sbsList = Arrays.asList(serviceIds.split(","));
|
|
|
}
|
|
|
|
|
|
- int i = 0;
|
|
|
+ //首月+3个月、首月+6个月、首月+12个月 的情况,需要把前两条 合并成一条
|
|
|
+ if (periodList.size() > 1) {
|
|
|
+ if (CALC_METHOD_1STPERIOD.equals("4597") || CALC_METHOD_1STPERIOD.equals("4594") || CALC_METHOD_1STPERIOD.equals("4591")) {
|
|
|
+ PeriodCalculationUtil.Period period1 = periodList.get(0);
|
|
|
+ PeriodCalculationUtil.Period period2 = periodList.get(1);
|
|
|
+ //小于1
|
|
|
+ if (period1.getRate().compareTo(BigDecimal.ONE) < 1) {
|
|
|
+ //合并
|
|
|
+ period2.setRate(period1.getRate().add(period2.getRate()));
|
|
|
+ period2.setPeriodBeginDate(period1.getPeriodBeginDate());
|
|
|
+ //移除第一条
|
|
|
+ periodList.remove(0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
for (PeriodCalculationUtil.Period period : periodList) {
|
|
|
- i++;
|
|
|
+
|
|
|
BO csp = new BO();//服务周期
|
|
|
csp.set("CONTRACT_ID", orgContractService.get("CONTRACT_ID"));
|
|
|
csp.set("OBJECT_ID", orgContractService.get("OBJECT_ID"));
|
|
|
csp.set("OBJECT_TYPE", orgContractService.get("OBJECT_TYPE"));
|
|
|
csp.set("CONTRACT_SERVICE_ID", orgContractService.get("ID"));
|
|
|
-
|
|
|
csp.set("PERIOD_BEGIN_DATE", period.getPeriodBeginDateStr());
|
|
|
csp.set("PERIOD_END_DATE", period.getPeriodEndDateStr());
|
|
|
csp.set("QUANTITY", contractService.get("QUANTITY"));
|
|
|
|
|
|
- //第一条
|
|
|
csp.set("PERIOD_PRICE", period.getRate().multiply(SERVICE_TOTAL_PRICE));
|
|
|
-
|
|
|
csp.set("PERIOD_ADJUSTED_PRICE", csp.get("PERIOD_PRICE"));
|
|
|
csp.set("PARTYA_PERIOD_PRICE", multiply(contractService.get("PARTYA_TOTAL_PRICE"), period.getRate()));//三方合同甲方含税总价
|
|
|
|
|
|
@@ -534,34 +548,39 @@ public class contractServiceAdj {
|
|
|
boolean teshuchuli = false;
|
|
|
String teshuchuliBeginDate = null;
|
|
|
BigDecimal COST_1STMONTH = null;
|
|
|
+ LocalDate START_DATE = EFFECTIVE_DATE;
|
|
|
if (StringUtils.isNotBlank(lastPeriodId)) {
|
|
|
|
|
|
//获取第一笔
|
|
|
|
|
|
//首月成本
|
|
|
- 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 (PERIOD_TYPE.equals("4598") || PERIOD_TYPE.equals("4595") || PERIOD_TYPE.equals("4592")) {
|
|
|
+
|
|
|
+ } else {
|
|
|
+ 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"));
|
|
|
+ LocalDate firstEFFECTIVE_DATE = getLocalDate(firstContractService.get("PURCHASE_START_DATE"));
|
|
|
|
|
|
- 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"));
|
|
|
+ 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 ratio = new BigDecimal(EFFECTIVE_DATE.getDayOfMonth()).divide(new BigDecimal(EFFECTIVE_DATE.lengthOfMonth()), 10, BigDecimal.ROUND_HALF_UP);
|
|
|
- ratio = BigDecimal.ONE.subtract(ratio);
|
|
|
+ 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(ratio);
|
|
|
+ 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) {
|
|
|
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_TOTAL_COST, 12);
|
|
|
} else {
|
|
|
SERVICE_UNIT_COST = TypeUtil.convert(lastContractService.get("UNIT_COST"), BigDecimal.class);
|
|
|
SERVICE_TOTAL_COST = multiply(SERVICE_UNIT_COST, lastContractService.get("QUANTITY"));
|
|
|
@@ -574,15 +593,16 @@ public class contractServiceAdj {
|
|
|
|
|
|
lastServicePeriod.set("PERIOD_END_DATE", EFFECTIVE_DATE.minusDays(1));
|
|
|
|
|
|
- BigDecimal periodRate = PeriodCalculationUtil.divideToBigDecimal(getDateRate(last_period_begin_date, EFFECTIVE_DATE.minusDays(1), false), GetPeriodMonth(lastContractService.getString("PURCHASE_PERIOD_TYPE")));
|
|
|
+ BigDecimal periodRate = getDateRate(last_period_begin_date, EFFECTIVE_DATE.minusDays(1), false);
|
|
|
|
|
|
lastServicePeriod.set("PLAN_AMOUNT", multiply(SERVICE_TOTAL_COST, periodRate));
|
|
|
lastServicePeriod.set("REMAIN_AMOUNT", lastServicePeriod.get("PLAN_AMOUNT"));
|
|
|
+
|
|
|
SDK.getBOAPI().update("BO_EU_DNIVT_ORDER_PAYMENT_PLAN", lastServicePeriod, conn);
|
|
|
}
|
|
|
|
|
|
//获取服务周期
|
|
|
- List<PeriodCalculationUtil.Period> periodList = PeriodCalculationUtil.getPeriodListByConfig(PERIOD_TYPE, EFFECTIVE_DATE, EFFECTIVE_DATE, EFFECTIVE_END_DATE, contractService.getString("PURCHASE_CALC_METHOD_1STPERIOD"), "4638", contractService.getString("MONTH_1STQUARTER"));
|
|
|
+ List<PeriodCalculationUtil.Period> periodList = PeriodCalculationUtil.getPeriodListByConfig(PERIOD_TYPE, START_DATE, EFFECTIVE_DATE, EFFECTIVE_END_DATE, contractService.getString("PURCHASE_CALC_METHOD_1STPERIOD"), "4638", contractService.getString("MONTH_1STQUARTER"));
|
|
|
|
|
|
SERVICE_UNIT_COST = TypeUtil.convert(contractService.get("UNIT_COST"), BigDecimal.class);
|
|
|
|