|
|
@@ -7,6 +7,7 @@ import com.actionsoft.bpms.server.UserContext;
|
|
|
import com.actionsoft.bpms.util.DBSql;
|
|
|
import com.actionsoft.sdk.local.SDK;
|
|
|
import com.actionsoft.sdk.local.api.Logger;
|
|
|
+import com.awspaas.user.apps.donenow_ctt.PeriodCalculationUtil;
|
|
|
import com.awspaas.user.apps.donenow_ctt.cttConstant;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
|
@@ -412,6 +413,15 @@ public class contractService {
|
|
|
|
|
|
|
|
|
if (!PERIOD_END.isEqual(END_DATE)) {
|
|
|
+
|
|
|
+ BigDecimal SERVICE_UNIT_COST = service.get("UNIT_COST", BigDecimal.class);//服务单元成本
|
|
|
+ //需要采购
|
|
|
+ if (service.getString("NEED_PURCHASE").equals("1")) {
|
|
|
+ BigDecimal prate = GetPeriodRate(service.getString("PERIOD_TYPE"), service.getString("PURCHASE_PERIOD_TYPE"));
|
|
|
+ SERVICE_UNIT_COST = SERVICE_UNIT_COST.multiply(prate);
|
|
|
+ }
|
|
|
+ BigDecimal SERVICE_TOTAL_COST = multiply(SERVICE_UNIT_COST, service.get("QUANTITY"));//服务总成本
|
|
|
+
|
|
|
if (PERIOD_END.isBefore(END_DATE)) {
|
|
|
contractServiceLogger.info("服务周期延长--" + service.getString("NAME"));
|
|
|
//延长
|
|
|
@@ -421,7 +431,8 @@ public class contractService {
|
|
|
LocalDate period_begin_date = getLocalDate(servicePeriod.get("PERIOD_BEGIN_DATE"));
|
|
|
LocalDate period_end_date = getLocalDate(servicePeriod.get("PERIOD_END_DATE"));
|
|
|
|
|
|
- String maxPeriod = servicePeriod.getString("PERIOD_TYPE");
|
|
|
+ String maxPeriod = service.getString("PERIOD_TYPE");
|
|
|
+
|
|
|
LocalDate firstPeriodEnd = getNextPeriodStart(period_begin_date, maxPeriod).minusDays(1);//本周期结束时间
|
|
|
LocalDate SATRT_DATE = null;
|
|
|
if (period_end_date.isBefore(firstPeriodEnd)) {
|
|
|
@@ -467,9 +478,9 @@ public class contractService {
|
|
|
BigDecimal period_price = multiply(service.get("UNIT_PRICE"), service.get("QUANTITY"));
|
|
|
period_price = periodRate.multiply(period_price);
|
|
|
csp.set("PERIOD_PRICE", period_price);
|
|
|
- BigDecimal period_cost = multiply(service.get("UNIT_COST"), service.get("QUANTITY"));
|
|
|
- period_cost = periodRate.multiply(period_cost);
|
|
|
- csp.set("PERIOD_COST", period_cost);
|
|
|
+
|
|
|
+ csp.set("PERIOD_COST", periodRate.multiply(SERVICE_TOTAL_COST));
|
|
|
+
|
|
|
csp.set("PERIOD_ADJUSTED_PRICE", csp.get("PERIOD_PRICE"));
|
|
|
|
|
|
csp.set("PARTYA_PERIOD_PRICE", multiply(service.get("PARTYA_TOTAL_PRICE"), periodRate));
|
|
|
@@ -524,9 +535,88 @@ public class contractService {
|
|
|
}
|
|
|
|
|
|
DBSql.update(conn, "update BO_EU_DNCTT_CONTRACT_SERVICE set PERIOD=?,ADJUST_PERIOD=? where ID=? and BINDID=?", new Object[]{PERIOD, ADJUST_PERIOD, service.get("ID"), service.get("BINDID")});
|
|
|
- }
|
|
|
|
|
|
|
|
|
+ //付款计划延期
|
|
|
+ if (PERIOD_END.isBefore(END_DATE)) {
|
|
|
+ contractServiceLogger.info("服务周期延长--" + service.getString("NAME"));
|
|
|
+ //延长
|
|
|
+ List<BO> payPeriodList = SDK.getBOAPI().query("BO_EU_DNIVT_ORDER_PAYMENT_PLAN").connection(conn).addQuery("CONTRACT_SERVICE_ID =", service.getId()).addQuery("PLAN_DATE >=", LocalDateYYYYMMDD(PERIOD_END)).orderBy("PLAN_DATE").desc().list();
|
|
|
+
|
|
|
+ BO payPeriod = payPeriodList.get(0);
|
|
|
+ LocalDate period_begin_date = getLocalDate(payPeriod.get("PLAN_DATE"));
|
|
|
+ LocalDate period_end_date = getLocalDate(PERIOD_END);//上次结束日期
|
|
|
+
|
|
|
+ String maxPeriod = service.getString("PURCHASE_PERIOD_TYPE");//采购周期类型
|
|
|
+
|
|
|
+ LocalDate firstPeriodEnd = getNextPeriodStart(period_begin_date, maxPeriod).minusDays(1);//本周期结束时间
|
|
|
+ LocalDate SATRT_DATE = null;
|
|
|
+ if (period_end_date.isBefore(firstPeriodEnd)) {
|
|
|
+ LocalDate new_period_end_date;
|
|
|
+ if (END_DATE.isBefore(firstPeriodEnd)) {
|
|
|
+ new_period_end_date = END_DATE;
|
|
|
+ } else {
|
|
|
+ new_period_end_date = firstPeriodEnd;
|
|
|
+ SATRT_DATE = firstPeriodEnd.plusDays(1);
|
|
|
+ }
|
|
|
+ BigDecimal periodRate = divideToBigDecimal(GetPeriodDays(period_begin_date, new_period_end_date), GetPeriodDays(period_begin_date, period_end_date));
|
|
|
+
|
|
|
+ payPeriod.set("PLAN_AMOUNT", multiply(payPeriod.get("PLAN_AMOUNT"), periodRate));//计划付款金额
|
|
|
+ payPeriod.set("REMAIN_AMOUNT", payPeriod.get("PLAN_AMOUNT", BigDecimal.class).subtract(payPeriod.get("PAY_AMOUNT", BigDecimal.class)));//剩余金额
|
|
|
+ SDK.getBOAPI().update("BO_EU_DNIVT_ORDER_PAYMENT_PLAN", payPeriod, conn);
|
|
|
+ } else {
|
|
|
+ SATRT_DATE = period_end_date.plusDays(1);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (SATRT_DATE != null && SATRT_DATE.isBefore(END_DATE)) {
|
|
|
+
|
|
|
+ //循环添加全部周期
|
|
|
+ while (!SATRT_DATE.isAfter(END_DATE)) {
|
|
|
+ BigDecimal periodRate = BigDecimal.ONE;
|
|
|
+ LocalDate periodEnd = getNextPeriodStart(SATRT_DATE, maxPeriod).minusDays(1);//本周期结束时间
|
|
|
+ if (periodEnd.isAfter(END_DATE)) {//如果结束日期大于合同结束日期,则计算结束日期和合同结束日期的差值,并计算该差值占整周期的比例
|
|
|
+ periodRate = divideToBigDecimal(GetPeriodDays(SATRT_DATE, END_DATE), GetPeriodDays(SATRT_DATE, periodEnd));
|
|
|
+ periodEnd = END_DATE;
|
|
|
+ }
|
|
|
+
|
|
|
+ ProcessInstance processInstance = SDK.getProcessAPI().createProcessInstance("obj_5cb4ae4a42944fd0a9a284ff4c64c65d", uc.getUID(), "付款计划");
|
|
|
+ BO csp = new BO();//服务周期
|
|
|
+ csp.setAll(payPeriod.asMap());
|
|
|
+ csp.setBindId(processInstance.getId());
|
|
|
+ csp.set("PLAN_DATE", SATRT_DATE);
|
|
|
+ csp.set("PLAN_AMOUNT", periodRate.multiply(SERVICE_TOTAL_COST));
|
|
|
+ csp.set("REMAIN_AMOUNT", csp.get("PLAN_AMOUNT"));
|
|
|
+ SDK.getBOAPI().create("BO_EU_DNIVT_ORDER_PAYMENT_PLAN", csp, processInstance, uc);
|
|
|
+
|
|
|
+
|
|
|
+ if (periodEnd != null) {
|
|
|
+ SATRT_DATE = periodEnd.plusDays(1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (PERIOD_END.isAfter(END_DATE)) {
|
|
|
+ contractServiceLogger.info("服务周期缩短--" + service.getString("NAME"));
|
|
|
+ //缩短
|
|
|
+
|
|
|
+ List<BO> payPeriodList = SDK.getBOAPI().query("BO_EU_DNIVT_ORDER_PAYMENT_PLAN").connection(conn).addQuery("CONTRACT_SERVICE_ID =", service.getId()).addQuery("PLAN_DATE >=", LocalDateYYYYMMDD(PERIOD_END)).orderBy("PLAN_DATE").asc().list();
|
|
|
+
|
|
|
+ BO payPeriod = payPeriodList.get(0);
|
|
|
+ LocalDate period_begin_date = getLocalDate(payPeriod.get("PLAN_DATE"));
|
|
|
+ BigDecimal periodRate = divideToBigDecimal(GetPeriodDays(period_begin_date, END_DATE), GetPeriodDays(period_begin_date, PERIOD_END));
|
|
|
+ payPeriod.set("PLAN_AMOUNT", multiply(payPeriod.get("PLAN_AMOUNT"), periodRate));//计划付款金额
|
|
|
+ payPeriod.set("REMAIN_AMOUNT", payPeriod.get("PLAN_AMOUNT", BigDecimal.class).subtract(payPeriod.get("PAY_AMOUNT", BigDecimal.class)));//剩余金额
|
|
|
+ SDK.getBOAPI().update("BO_EU_DNIVT_ORDER_PAYMENT_PLAN", payPeriod, conn);
|
|
|
+
|
|
|
+ for (BO period : payPeriodList) {
|
|
|
+ //删除
|
|
|
+ if (period.getString("ID").equals(payPeriod.getString("ID")) == false) {
|
|
|
+
|
|
|
+ DBSql.update(conn, "DELETE FROM BO_EU_DNIVT_ORDER_PAYMENT_PLAN WHERE ID=?", new Object[]{period.getString("ID")});
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
} catch (Exception e) {
|
|
|
|
|
|
}
|
|
|
@@ -679,8 +769,13 @@ public class contractService {
|
|
|
|
|
|
// 合同周期更长,服务周期使用合同周期,单价和成本根据周期倍数翻倍
|
|
|
if (rate.compareTo(BigDecimal.ONE) > 0) {
|
|
|
- unit_cost = unit_cost.multiply(rate);
|
|
|
- service.set("UNIT_COST", unit_cost);
|
|
|
+
|
|
|
+ //是否需要采购
|
|
|
+ if (service.getString("NEED_PURCHASE").equals("1") == false) {
|
|
|
+ unit_cost = unit_cost.multiply(rate);
|
|
|
+ service.set("UNIT_COST", unit_cost);
|
|
|
+ }
|
|
|
+
|
|
|
unit_price = unit_price.multiply(rate);
|
|
|
service.set("UNIT_PRICE", unit_price);
|
|
|
// service.set("PERIOD_TYPE", contract.getString("PERIOD_TYPE"));//计费周期更新
|
|
|
@@ -698,7 +793,10 @@ public class contractService {
|
|
|
contractServiceLogger.info("计算-service-ADJUSTED_PRICE");
|
|
|
service.set("TOTAL_PRICE", multiply(service.get("QUANTITY"), service.get("UNIT_PRICE")));//总价
|
|
|
service.set("ADJUSTED_PRICE", multiply(service.get("QUANTITY"), service.get("UNIT_PRICE")));//总价
|
|
|
- service.set("TOTAL_COST", multiply(service.get("QUANTITY"), service.get("UNIT_COST")));//总价
|
|
|
+
|
|
|
+ //是否需要采购
|
|
|
+ if (service.getString("NEED_PURCHASE").equals("1") == false)
|
|
|
+ service.set("TOTAL_COST", multiply(service.get("QUANTITY"), service.get("UNIT_COST")));//总价
|
|
|
|
|
|
SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_SERVICE", service, conn);//保存
|
|
|
|
|
|
@@ -740,6 +838,13 @@ public class contractService {
|
|
|
if (currMontLastDay.isBefore(END_DATE)) START_DATE = currMontLastDay.plusDays(1);//周期开始日期
|
|
|
}
|
|
|
|
|
|
+ BigDecimal SERVICE_UNIT_COST = service.get("UNIT_COST", BigDecimal.class);//服务单元成本
|
|
|
+ //需要采购
|
|
|
+ if (service.getString("NEED_PURCHASE").equals("1")) {
|
|
|
+ BigDecimal prate = GetPeriodRate(service.getString("PERIOD_TYPE"), service.getString("PURCHASE_PERIOD_TYPE"));
|
|
|
+ SERVICE_UNIT_COST = SERVICE_UNIT_COST.multiply(prate);
|
|
|
+ }
|
|
|
+ BigDecimal SERVICE_TOTAL_COST = multiply(SERVICE_UNIT_COST, service.get("QUANTITY"));//服务总成本
|
|
|
|
|
|
//2025年10月15日 一次性收费服务
|
|
|
if (service.getString("PERIOD_TYPE").equals(cttConstant.PERIOD_TYPE_ONE_TIME)) {
|
|
|
@@ -753,7 +858,7 @@ public class contractService {
|
|
|
csp.set("QUANTITY", service.get("QUANTITY"));
|
|
|
BigDecimal period_price = multiply(service.get("UNIT_PRICE"), service.get("QUANTITY"));
|
|
|
csp.set("PERIOD_PRICE", period_price);
|
|
|
- BigDecimal period_cost = multiply(service.get("UNIT_COST"), service.get("QUANTITY"));
|
|
|
+ BigDecimal period_cost = multiply(SERVICE_UNIT_COST, service.get("QUANTITY"));
|
|
|
csp.set("PERIOD_COST", period_cost);
|
|
|
csp.set("PERIOD_ADJUSTED_PRICE", csp.get("PERIOD_PRICE"));
|
|
|
csp.set("PARTYA_PERIOD_PRICE", service.get("PARTYA_TOTAL_PRICE"));//三方合同甲方含税总价
|
|
|
@@ -820,7 +925,7 @@ public class contractService {
|
|
|
csa.setBindId(service.getString("BINDID"));
|
|
|
|
|
|
//服务周期成本
|
|
|
- csa.set("PERIOD_COST", multiply(service.get("TOTAL_COST"), periodRate));
|
|
|
+ csa.set("PERIOD_COST", multiply(SERVICE_TOTAL_COST, periodRate));
|
|
|
SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", csa, uc, conn);
|
|
|
|
|
|
// 插入服务调整表包含的服务ctt_contract_service_adjust_bundle_service
|
|
|
@@ -873,10 +978,7 @@ public class contractService {
|
|
|
period_price = periodRate.multiply(period_price);
|
|
|
csp.set("PERIOD_PRICE", period_price);
|
|
|
|
|
|
- contractServiceLogger.info("计算-csp-PERIOD_COST");
|
|
|
- BigDecimal period_cost = multiply(service.get("UNIT_COST"), service.get("QUANTITY"));
|
|
|
- period_cost = periodRate.multiply(period_cost);
|
|
|
- csp.set("PERIOD_COST", period_cost);
|
|
|
+ csp.set("PERIOD_COST", periodRate.multiply(SERVICE_TOTAL_COST));
|
|
|
|
|
|
csp.set("PERIOD_ADJUSTED_PRICE", csp.get("PERIOD_PRICE"));
|
|
|
|
|
|
@@ -954,13 +1056,23 @@ public class contractService {
|
|
|
BO contractServiceBO = SDK.getBOAPI().get("BO_EU_DNCTT_CONTRACT_SERVICE", editService.getString("CONTRACT_SERVICE_ID"));
|
|
|
|
|
|
String maxPeriod = editService.getString("PERIOD_TYPE");
|
|
|
+
|
|
|
+ BigDecimal SERVICE_UNIT_COST = editService.get("UNIT_COST", BigDecimal.class);//服务单元成本
|
|
|
+ //需要采购
|
|
|
+ if (editService.getString("NEED_PURCHASE").equals("1")) {
|
|
|
+ BigDecimal prate = GetPeriodRate(editService.getString("PERIOD_TYPE"), editService.getString("PURCHASE_PERIOD_TYPE"));
|
|
|
+ SERVICE_UNIT_COST = SERVICE_UNIT_COST.multiply(prate);
|
|
|
+ }
|
|
|
+ BigDecimal SERVICE_TOTAL_COST = multiply(SERVICE_UNIT_COST, editService.get("QUANTITY"));//服务总成本
|
|
|
+
|
|
|
+
|
|
|
//一次性收费服务
|
|
|
if (editService.getString("PERIOD_TYPE").equals(cttConstant.PERIOD_TYPE_ONE_TIME)) {
|
|
|
BO servicePeriod = SDK.getBOAPI().query("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD").connection(conn).addQuery("CONTRACT_SERVICE_ID =", editService.getString("CONTRACT_SERVICE_ID")).detail();
|
|
|
servicePeriod.set("PERIOD_BEGIN_DATE", EFFECTIVE_DATE);
|
|
|
servicePeriod.set("QUANTITY", editService.get("QUANTITY"));
|
|
|
servicePeriod.set("PERIOD_PRICE", editService.get("TOTAL_PRICE"));
|
|
|
- servicePeriod.set("PERIOD_COST", editService.get("TOTAL_COST"));
|
|
|
+ servicePeriod.set("PERIOD_COST", SERVICE_TOTAL_COST);
|
|
|
|
|
|
servicePeriod.set("PARTYA_PERIOD_PRICE", editService.get("PARTYA_TOTAL_PRICE"));//三方合同甲方含税总价
|
|
|
|
|
|
@@ -1019,7 +1131,7 @@ public class contractService {
|
|
|
BigDecimal periodRateAdj = divideToBigDecimal(GetPeriodDays(EFFECTIVE_DATE, period_end_date), priodDays);
|
|
|
|
|
|
servicePeriodAdj.set("PERIOD_PRICE", multiply(editService.get("TOTAL_PRICE"), periodRateAdj));
|
|
|
- servicePeriodAdj.set("PERIOD_COST", multiply(editService.get("TOTAL_COST"), periodRateAdj));
|
|
|
+ servicePeriodAdj.set("PERIOD_COST", multiply(SERVICE_TOTAL_COST, periodRateAdj));
|
|
|
servicePeriodAdj.set("PERIOD_ADJUSTED_PRICE", servicePeriodAdj.get("PERIOD_PRICE"));
|
|
|
|
|
|
//三方合同甲方含税总价
|
|
|
@@ -1069,7 +1181,7 @@ public class contractService {
|
|
|
|
|
|
servicePeriod.set("QUANTITY", editService.get("QUANTITY"));
|
|
|
servicePeriod.set("PERIOD_PRICE", multiply(editService.get("TOTAL_PRICE"), periodRate));
|
|
|
- servicePeriod.set("PERIOD_COST", multiply(editService.get("TOTAL_COST"), periodRate));
|
|
|
+ servicePeriod.set("PERIOD_COST", multiply(SERVICE_TOTAL_COST, periodRate));
|
|
|
servicePeriod.set("PERIOD_ADJUSTED_PRICE", servicePeriod.get("PERIOD_PRICE"));
|
|
|
//三方合同甲方含税总价
|
|
|
servicePeriod.set("PARTYA_PERIOD_PRICE", multiply(editService.get("PARTYA_TOTAL_PRICE"), periodRate));
|
|
|
@@ -1122,7 +1234,7 @@ public class contractService {
|
|
|
int priodDays = GetPeriodDays(getPreviousPeriodStart(period_end_date.plusDays(1), editService.getString("PERIOD_TYPE")), period_end_date);
|
|
|
BigDecimal periodRateAdj = divideToBigDecimal(GetPeriodDays(EFFECTIVE_DATE, period_end_date), priodDays);
|
|
|
servicePeriodAdj.set("PERIOD_PRICE", multiply(editService.get("TOTAL_PRICE"), periodRateAdj));
|
|
|
- servicePeriodAdj.set("PERIOD_COST", multiply(editService.get("TOTAL_COST"), periodRateAdj));
|
|
|
+ servicePeriodAdj.set("PERIOD_COST", multiply(SERVICE_TOTAL_COST, periodRateAdj));
|
|
|
servicePeriodAdj.set("PERIOD_ADJUSTED_PRICE", servicePeriodAdj.get("PERIOD_PRICE"));
|
|
|
//三方合同甲方含税总价
|
|
|
servicePeriodAdj.set("PARTYA_PERIOD_PRICE", multiply(editService.get("PARTYA_TOTAL_PRICE"), periodRateAdj));
|
|
|
@@ -1191,7 +1303,7 @@ public class contractService {
|
|
|
LocalDate start = getPreviousPeriodStart(last_period_end_date.plusDays(1), editService.getString("PERIOD_TYPE"));
|
|
|
BigDecimal periodRateAdj = divideToBigDecimal(GetPeriodDays(EFFECTIVE_DATE, last_period_end_date), GetPeriodDays(start, last_period_end_date)); // 首周期占整周期比例
|
|
|
servicePeriodAdj.set("PERIOD_PRICE", multiply(editService.get("TOTAL_PRICE"), periodRateAdj));
|
|
|
- servicePeriodAdj.set("PERIOD_COST", multiply(editService.get("TOTAL_COST"), periodRateAdj));
|
|
|
+ servicePeriodAdj.set("PERIOD_COST", multiply(SERVICE_TOTAL_COST, periodRateAdj));
|
|
|
|
|
|
servicePeriodAdj.set("PARTYA_PERIOD_PRICE", multiply(editService.get("PARTYA_TOTAL_PRICE"), periodRateAdj));
|
|
|
|
|
|
@@ -1249,9 +1361,8 @@ public class contractService {
|
|
|
period_price = periodRate.multiply(period_price);
|
|
|
csp.set("PERIOD_PRICE", period_price);
|
|
|
contractServiceLogger.info("计算-csp-PERIOD_COST");
|
|
|
- BigDecimal period_cost = multiply(editService.get("UNIT_COST"), editService.get("QUANTITY"));
|
|
|
- period_cost = periodRate.multiply(period_cost);
|
|
|
- csp.set("PERIOD_COST", period_cost);
|
|
|
+
|
|
|
+ csp.set("PERIOD_COST", periodRate.multiply(SERVICE_TOTAL_COST));
|
|
|
csp.set("PERIOD_ADJUSTED_PRICE", csp.get("PERIOD_PRICE"));
|
|
|
|
|
|
csp.set("PARTYA_PERIOD_PRICE", multiply(editService.get("PARTYA_TOTAL_PRICE"), periodRate));//三方合同甲方含税总价
|
|
|
@@ -1389,10 +1500,17 @@ public class contractService {
|
|
|
contractCost.put("serviceID", serviceID);
|
|
|
contractCost.put("CONTRACT_ID", contract.getString("ID"));
|
|
|
contractCost.put("QUANTITY", service.getString("QUANTITY"));
|
|
|
- contractCost.put("PURCHASE_PERIOD_TYPE", service.getString("PURCHASE_PERIOD_TYPE"));
|
|
|
+
|
|
|
contractCost.put("UNIT_PRICE", String.valueOf(unitPriceMap.get(serviceID)));
|
|
|
contractCost.put("UNIT_COST", String.valueOf(unitCostMap.get(serviceID)));
|
|
|
|
|
|
+ //采购
|
|
|
+ contractCost.put("PURCHASE_PERIOD_TYPE", service.getString("PURCHASE_PERIOD_TYPE"));//采购周期
|
|
|
+ contractCost.put("PURCHASE_START_DATE", service.getString("PURCHASE_START_DATE"));//采购开始日期
|
|
|
+ contractCost.put("CONTRACT_START_DATE", service.getString("START_DATE"));
|
|
|
+ contractCost.put("CONTRACT_END_DATE", contract.getString("END_DATE"));//采购结束日期
|
|
|
+
|
|
|
+
|
|
|
PRODUCT_ID = AddContractServiceProduct(uc, conn, contractCost);
|
|
|
} else {
|
|
|
//是否 删除 contractCostId 没有采购 没有拣货时可删除
|
|
|
@@ -1415,10 +1533,16 @@ public class contractService {
|
|
|
contractCost.put("serviceID", service.getString("OBJECT_ID"));
|
|
|
contractCost.put("CONTRACT_ID", contract.getString("ID"));
|
|
|
contractCost.put("QUANTITY", service.getString("QUANTITY"));
|
|
|
- contractCost.put("PURCHASE_PERIOD_TYPE", service.getString("PURCHASE_PERIOD_TYPE"));
|
|
|
+
|
|
|
contractCost.put("UNIT_PRICE", service.getString("UNIT_PRICE"));
|
|
|
contractCost.put("UNIT_COST", service.getString("UNIT_COST"));
|
|
|
|
|
|
+ //采购
|
|
|
+ contractCost.put("PURCHASE_PERIOD_TYPE", service.getString("PURCHASE_PERIOD_TYPE"));//采购周期
|
|
|
+ contractCost.put("PURCHASE_START_DATE", service.getString("PURCHASE_START_DATE"));//采购开始日期
|
|
|
+ contractCost.put("CONTRACT_START_DATE", service.getString("START_DATE"));
|
|
|
+ contractCost.put("CONTRACT_END_DATE", contract.getString("END_DATE"));//采购结束日期
|
|
|
+
|
|
|
PRODUCT_ID = AddContractServiceProduct(uc, conn, contractCost);
|
|
|
} else {
|
|
|
//是否 删除 contractCostId
|
|
|
@@ -1500,40 +1624,21 @@ public class contractService {
|
|
|
contractCost.set("IS_SERVICE_PRODUCT", 1);
|
|
|
//单价
|
|
|
contractCost.set("UNIT_COST", service.get("UNIT_COST"));
|
|
|
-
|
|
|
//成本
|
|
|
contractCost.set("UNIT_PRICE", service.get("UNIT_PRICE"));
|
|
|
|
|
|
- //数量
|
|
|
- // int quantity = DBSql.getInt(conn, "SELECT COUNT(1) as CNT FROM BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD WHERE CONTRACT_SERVICE_ID='" + service.get("SERVICE_ID") + "'", "CNT"); //周期数量
|
|
|
-
|
|
|
- try {
|
|
|
- /*
|
|
|
- String PURCHASE_PERIOD_TYPE = service.get("PURCHASE_PERIOD_TYPE");//采购周期
|
|
|
- RowMap contractServicePeriod = DBSql.getMap("SELECT MIN(PERIOD_BEGIN_DATE) AS PERIOD_BEGIN_DATE,MAX(PERIOD_END_DATE) AS PERIOD_END_DATE FROM BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD WHERE CONTRACT_SERVICE_ID=?", new Object[]{service.get("SERVICE_ID")});//服务开始和结束日期
|
|
|
- LocalDate beginDate = getLocalDate(contractServicePeriod.get("PERIOD_BEGIN_DATE"));
|
|
|
- LocalDate endDate = getLocalDate(contractServicePeriod.get("PERIOD_END_DATE"));
|
|
|
- //计算周期个数
|
|
|
- if (StringUtils.isNotBlank(PURCHASE_PERIOD_TYPE) && beginDate != null && endDate != null)
|
|
|
- quantity = calculatePeriods(PURCHASE_PERIOD_TYPE, beginDate, endDate);
|
|
|
-
|
|
|
- */
|
|
|
-
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
+ BigDecimal EXTENDED_COST = divideToBigDecimal(service.get("UNIT_COST"), contractCost.get("QUANTITY"));
|
|
|
|
|
|
- //contractCost.set("QUANTITY", quantity);
|
|
|
+ // 需要通过采购计算总成本
|
|
|
+ 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"));
|
|
|
|
|
|
- //总成本
|
|
|
- contractCost.set("EXTENDED_COST", DBSql.getDouble(conn, "SELECT SUM(PERIOD_COST) as COST FROM BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD WHERE CONTRACT_SERVICE_ID='" + service.get("SERVICE_ID") + "'", "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("EXTENDED_PRICE", DBSql.getDouble(conn, "SELECT SUM(PERIOD_ADJUSTED_PRICE) as PRICE FROM BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD WHERE CONTRACT_SERVICE_ID='" + service.get("SERVICE_ID") + "'", "PRICE"));
|
|
|
|
|
|
- //单价=总价格➗数量
|
|
|
- contractCost.set("UNIT_COST", divideToBigDecimal(contractCost.get("EXTENDED_COST"), contractCost.get("QUANTITY")));
|
|
|
- //成本=总成本➗数量
|
|
|
contractCost.set("UNIT_PRICE", divideToBigDecimal(contractCost.get("EXTENDED_PRICE"), contractCost.get("QUANTITY")));
|
|
|
|
|
|
if (contractCost.isNew()) {
|