|
|
@@ -1141,12 +1141,17 @@ public class contractService {
|
|
|
}
|
|
|
|
|
|
//获取服务周期
|
|
|
- List<PeriodCalculationUtil.Period> periodList = PeriodCalculationUtil.getPeriodList(PERIOD_TYPE, START_DATE, EFFECTIVE_DATE, END_DATE, true, true, -1);
|
|
|
+ //List<PeriodCalculationUtil.Period> periodList = PeriodCalculationUtil.getPeriodList(PERIOD_TYPE, START_DATE, EFFECTIVE_DATE, END_DATE, true, true, -1);
|
|
|
+
|
|
|
+ List<PeriodCalculationUtil.Period> periodList = PeriodCalculationUtil.getPeriodListByConfig(PERIOD_TYPE, START_DATE, EFFECTIVE_DATE, END_DATE, service.getString("CALC_METHOD_1STPERIOD"), service.getString("CALC_METHOD_1STYEAR"), service.getString("MONTH_1STQUARTER"));
|
|
|
+
|
|
|
|
|
|
String PERIOD = periodList.get(0).getPeriodBeginDateStr() + "~" + periodList.get(periodList.size() - 1).getPeriodEndDateStr();
|
|
|
|
|
|
+ int i = 0;
|
|
|
for (PeriodCalculationUtil.Period period : periodList) {
|
|
|
|
|
|
+ i++;
|
|
|
BO csp = new BO();//服务周期
|
|
|
csp.set("CONTRACT_ID", contract.get("ID"));
|
|
|
csp.set("OBJECT_ID", service.get("OBJECT_ID"));
|
|
|
@@ -1158,9 +1163,36 @@ public class contractService {
|
|
|
|
|
|
csp.set("QUANTITY", service.get("QUANTITY"));
|
|
|
|
|
|
- csp.set("PERIOD_PRICE", period.getRate().multiply(SERVICE_TOTAL_PRICE));
|
|
|
+ //首月总价需要单独计算 613 按年支付 4591 开通日期所在月
|
|
|
+ if (i == 1 && service.get("CALC_METHOD_1STPERIOD").equals("4591")) {
|
|
|
+ //firstRate<1
|
|
|
+ if (period.getRate().compareTo(BigDecimal.ONE) < 0) {
|
|
|
+
|
|
|
+ //首月成本需要单独计算
|
|
|
+ BigDecimal UNIT_PRICE_1STMONTH = toBigDecimal(service.get("UNIT_PRICE_1STMONTH"));
|
|
|
+ UNIT_PRICE_1STMONTH = period.getRate().multiply(BigDecimal.valueOf(12)).multiply(UNIT_PRICE_1STMONTH);
|
|
|
+ csp.set("PERIOD_PRICE", UNIT_PRICE_1STMONTH);
|
|
|
+
|
|
|
+ //首期成本怎么算? 在同一个月 和不在 同一个月
|
|
|
+ LocalDate PURCHASE_START_DATE = service.get("PURCHASE_START_DATE", LocalDate.class);
|
|
|
+
|
|
|
+ if (EFFECTIVE_DATE.format(DateTimeFormatter.ofPattern("yyyyMM")).equals(PURCHASE_START_DATE.format(DateTimeFormatter.ofPattern("yyyyMM")))) {
|
|
|
+ BigDecimal UNIT_COST_1STMONTH = toBigDecimal(service.get("UNIT_COST_1STMONTH"));
|
|
|
+ UNIT_COST_1STMONTH = period.getRate().multiply(BigDecimal.valueOf(12)).multiply(UNIT_COST_1STMONTH);
|
|
|
+ csp.set("PERIOD_COST", period.getRate().multiply(UNIT_COST_1STMONTH));
|
|
|
+ } else {
|
|
|
+ csp.set("PERIOD_COST", period.getRate().multiply(SERVICE_TOTAL_COST));
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ csp.set("PERIOD_PRICE", period.getRate().multiply(SERVICE_TOTAL_PRICE));
|
|
|
+ csp.set("PERIOD_COST", period.getRate().multiply(SERVICE_TOTAL_COST));
|
|
|
+ }
|
|
|
+
|
|
|
+ } else {
|
|
|
+ csp.set("PERIOD_PRICE", period.getRate().multiply(SERVICE_TOTAL_PRICE));
|
|
|
|
|
|
- csp.set("PERIOD_COST", period.getRate().multiply(SERVICE_TOTAL_COST));
|
|
|
+ csp.set("PERIOD_COST", period.getRate().multiply(SERVICE_TOTAL_COST));
|
|
|
+ }
|
|
|
|
|
|
csp.set("PERIOD_ADJUSTED_PRICE", csp.get("PERIOD_PRICE"));
|
|
|
|
|
|
@@ -1806,9 +1838,10 @@ public class contractService {
|
|
|
List<BO> serviceList2 = SDK.getBOAPI().query("BO_EU_DNCTT_CONTRACT_SERVICE").connection(conn).addQuery("BINDID !=", contract.get("BINDID")).addQuery("CONTRACT_ID =", contract.get("ID")).list();
|
|
|
|
|
|
if (serviceList == null) serviceList = new ArrayList<BO>();
|
|
|
- if (serviceList2 != null && serviceList2.size() > 0) for (BO service : serviceList2) {
|
|
|
- serviceList.add(service);
|
|
|
- }
|
|
|
+ if (serviceList2 != null && serviceList2.size() > 0)
|
|
|
+ for (BO service : serviceList2) {
|
|
|
+ serviceList.add(service);
|
|
|
+ }
|
|
|
|
|
|
for (BO service : serviceList) {
|
|
|
|
|
|
@@ -1860,10 +1893,14 @@ public class contractService {
|
|
|
String PURCHASE_START_DATE = service.getString("PURCHASE_START_DATE");
|
|
|
if (StringUtils.isBlank(PURCHASE_START_DATE))
|
|
|
PURCHASE_START_DATE = contract.getString("START_DATE");
|
|
|
+
|
|
|
contractCost.put("PURCHASE_START_DATE", PURCHASE_START_DATE);//采购开始日期
|
|
|
contractCost.put("CONTRACT_START_DATE", contract.getString("START_DATE"));
|
|
|
contractCost.put("CONTRACT_END_DATE", contract.getString("END_DATE"));//采购结束日期
|
|
|
|
|
|
+ contractCost.put("PURCHASE_CALC_METHOD_1STPERIOD", service.getString("PURCHASE_CALC_METHOD_1STPERIOD"));
|
|
|
+ contractCost.put("CALC_METHOD_1STYEAR", service.getString("CALC_METHOD_1STYEAR"));
|
|
|
+ contractCost.put("MONTH_1STQUARTER", service.getString("MONTH_1STQUARTER"));
|
|
|
|
|
|
PRODUCT_ID = AddContractServiceProduct(uc, conn, contractCost);
|
|
|
} else {
|
|
|
@@ -1897,10 +1934,15 @@ public class contractService {
|
|
|
String PURCHASE_START_DATE = service.getString("PURCHASE_START_DATE");
|
|
|
if (StringUtils.isBlank(PURCHASE_START_DATE))
|
|
|
PURCHASE_START_DATE = contract.getString("START_DATE");
|
|
|
+ contractCost.put("PURCHASE_START_DATE", PURCHASE_START_DATE);//采购开始日期
|
|
|
|
|
|
contractCost.put("CONTRACT_START_DATE", contract.getString("START_DATE"));
|
|
|
contractCost.put("CONTRACT_END_DATE", contract.getString("END_DATE"));//采购结束日期
|
|
|
|
|
|
+ contractCost.put("PURCHASE_CALC_METHOD_1STPERIOD", service.getString("PURCHASE_CALC_METHOD_1STPERIOD"));
|
|
|
+ contractCost.put("CALC_METHOD_1STYEAR", service.getString("CALC_METHOD_1STYEAR"));
|
|
|
+ contractCost.put("MONTH_1STQUARTER", service.getString("MONTH_1STQUARTER"));
|
|
|
+
|
|
|
PRODUCT_ID = AddContractServiceProduct(uc, conn, contractCost);
|
|
|
} else {
|
|
|
//是否 删除 contractCostId
|
|
|
@@ -1990,11 +2032,42 @@ public class contractService {
|
|
|
contractServiceLogger.info("计算合同成本周期:" + service);
|
|
|
|
|
|
// 需要通过采购计算总成本
|
|
|
- List<PeriodCalculationUtil.Period> periodList = PeriodCalculationUtil.getPeriodList(service.get("PURCHASE_PERIOD_TYPE"), LocalDate.parse(service.get("CONTRACT_START_DATE").substring(0, 10)), LocalDate.parse(service.get("PURCHASE_START_DATE").substring(0, 10)), LocalDate.parse(service.get("CONTRACT_END_DATE").substring(0, 10)), service.get("PURCHASE_PERIOD_TYPE").equals("610"), true, -1);
|
|
|
+ // List<PeriodCalculationUtil.Period> periodList = PeriodCalculationUtil.getPeriodList(service.get("PURCHASE_PERIOD_TYPE"), LocalDate.parse(service.get("CONTRACT_START_DATE").substring(0, 10)), LocalDate.parse(service.get("PURCHASE_START_DATE").substring(0, 10)), LocalDate.parse(service.get("CONTRACT_END_DATE").substring(0, 10)), service.get("PURCHASE_PERIOD_TYPE").equals("610"), true, -1);
|
|
|
+
|
|
|
+ List<PeriodCalculationUtil.Period> periodList = PeriodCalculationUtil.getPeriodListByConfig(service.get("PURCHASE_PERIOD_TYPE"), LocalDate.parse(service.get("CONTRACT_START_DATE").substring(0, 10)), LocalDate.parse(service.get("PURCHASE_START_DATE").substring(0, 10)), LocalDate.parse(service.get("CONTRACT_END_DATE").substring(0, 10)), service.get("PURCHASE_CALC_METHOD_1STPERIOD"), service.get("CALC_METHOD_1STYEAR"), service.get("MONTH_1STQUARTER"));
|
|
|
+
|
|
|
+
|
|
|
+ //首月成本单独计算 613 按年支付 4591 开通日期所在月
|
|
|
+ if (service.get("PURCHASE_CALC_METHOD_1STPERIOD").equals("4591")) {
|
|
|
+ BigDecimal firstRate = periodList.get(0).getRate();
|
|
|
+ //firstRate<1
|
|
|
+ if (firstRate.compareTo(BigDecimal.ONE) < 0) {
|
|
|
+
|
|
|
+ //首月成本需要单独计算
|
|
|
+ BigDecimal UNIT_COST_1STMONTH = toBigDecimal(service.get("UNIT_COST_1STMONTH"));
|
|
|
+
|
|
|
+ UNIT_COST_1STMONTH = firstRate.multiply(BigDecimal.valueOf(12)).multiply(UNIT_COST_1STMONTH);
|
|
|
+
|
|
|
+ BigDecimal rate = periodList.stream().skip(1).map(period -> period.getRate()).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ EXTENDED_COST = EXTENDED_COST.multiply(rate);
|
|
|
+
|
|
|
+ EXTENDED_COST = EXTENDED_COST.add(UNIT_COST_1STMONTH);
|
|
|
+
|
|
|
+ contractCost.set("EXTENDED_COST", EXTENDED_COST);
|
|
|
+
|
|
|
+
|
|
|
+ } else {
|
|
|
+ BigDecimal rate = periodList.stream().skip(1).map(period -> period.getRate()).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ EXTENDED_COST = EXTENDED_COST.multiply(rate);
|
|
|
+ contractCost.set("EXTENDED_COST", EXTENDED_COST);
|
|
|
+ }
|
|
|
+
|
|
|
+ } else {
|
|
|
+ BigDecimal rate = periodList.stream().map(period -> period.getRate()).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ EXTENDED_COST = EXTENDED_COST.multiply(rate);
|
|
|
+ contractCost.set("EXTENDED_COST", EXTENDED_COST);
|
|
|
+ }
|
|
|
|
|
|
- BigDecimal rate = periodList.stream().map(period -> period.getRate()).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- EXTENDED_COST = EXTENDED_COST.multiply(rate);
|
|
|
- contractCost.set("EXTENDED_COST", EXTENDED_COST);
|
|
|
|
|
|
//单元成本
|
|
|
contractCost.set("UNIT_COST", divideToBigDecimal(contractCost.get("EXTENDED_COST"), contractCost.get("QUANTITY")));
|