|
|
@@ -66,10 +66,8 @@ public class contractService {
|
|
|
if (contractBO.getString("IS_SUBMIT").equals("1"))//已提交
|
|
|
isSubmit = true;
|
|
|
String TYPE_ID = contractBO.getString("TYPE_ID");//合同类型
|
|
|
- if (isSubmit)
|
|
|
- contractBO.set("IS_SUBMIT", 1);
|
|
|
- else
|
|
|
- contractBO.set("IS_SUBMIT", 0);
|
|
|
+ if (isSubmit) contractBO.set("IS_SUBMIT", 1);
|
|
|
+ else contractBO.set("IS_SUBMIT", 0);
|
|
|
|
|
|
if (TYPE_ID.equals(cttConstant.CONTRACT_TYPE_SERVICE)) // 如果是服务合同
|
|
|
{
|
|
|
@@ -81,34 +79,33 @@ public class contractService {
|
|
|
Date END_DATE = contractBO.get("END_DATE", Date.class);
|
|
|
|
|
|
//通过 合同周期个数和合同周期类型计算结束日期
|
|
|
- if (END_DATE == null || END_DATE.before(START_DATE))
|
|
|
- if (OCCURRENCES != null && OCCURRENCES > 0) {
|
|
|
- // 使用 Calendar 进行日期操作
|
|
|
- Calendar calendar = Calendar.getInstance();
|
|
|
- calendar.setTime(START_DATE);
|
|
|
- if (PERIOD_TYPE.equals(cttConstant.PERIOD_TYPE_HALFYEAR)) {
|
|
|
- calendar.add(Calendar.MONTH, OCCURRENCES * 6);
|
|
|
- calendar.add(Calendar.DAY_OF_MONTH, -1);
|
|
|
- END_DATE = calendar.getTime();
|
|
|
- } else if (PERIOD_TYPE.equals(cttConstant.PERIOD_TYPE_MONTH)) {
|
|
|
- calendar.add(Calendar.MONTH, OCCURRENCES);
|
|
|
- calendar.add(Calendar.DAY_OF_MONTH, -1);
|
|
|
- END_DATE = calendar.getTime();
|
|
|
- } else if (PERIOD_TYPE.equals(cttConstant.PERIOD_TYPE_QUARTER)) {
|
|
|
- calendar.add(Calendar.MONTH, OCCURRENCES * 3);
|
|
|
- calendar.add(Calendar.DAY_OF_MONTH, -1);
|
|
|
- END_DATE = calendar.getTime();
|
|
|
- } else if (PERIOD_TYPE.equals(cttConstant.PERIOD_TYPE_YEAR)) {
|
|
|
- calendar.add(Calendar.MONTH, OCCURRENCES * 12);
|
|
|
- calendar.add(Calendar.DAY_OF_MONTH, -1);
|
|
|
- END_DATE = calendar.getTime();
|
|
|
- } else {
|
|
|
- resultDto.put("success", false);
|
|
|
- resultDto.put("msg", "周期类型输入错误!");
|
|
|
- return resultDto;
|
|
|
- }
|
|
|
- contractBO.set("END_DATE", END_DATE);
|
|
|
+ if (END_DATE == null || END_DATE.before(START_DATE)) if (OCCURRENCES != null && OCCURRENCES > 0) {
|
|
|
+ // 使用 Calendar 进行日期操作
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(START_DATE);
|
|
|
+ if (PERIOD_TYPE.equals(cttConstant.PERIOD_TYPE_HALFYEAR)) {
|
|
|
+ calendar.add(Calendar.MONTH, OCCURRENCES * 6);
|
|
|
+ calendar.add(Calendar.DAY_OF_MONTH, -1);
|
|
|
+ END_DATE = calendar.getTime();
|
|
|
+ } else if (PERIOD_TYPE.equals(cttConstant.PERIOD_TYPE_MONTH)) {
|
|
|
+ calendar.add(Calendar.MONTH, OCCURRENCES);
|
|
|
+ calendar.add(Calendar.DAY_OF_MONTH, -1);
|
|
|
+ END_DATE = calendar.getTime();
|
|
|
+ } else if (PERIOD_TYPE.equals(cttConstant.PERIOD_TYPE_QUARTER)) {
|
|
|
+ calendar.add(Calendar.MONTH, OCCURRENCES * 3);
|
|
|
+ calendar.add(Calendar.DAY_OF_MONTH, -1);
|
|
|
+ END_DATE = calendar.getTime();
|
|
|
+ } else if (PERIOD_TYPE.equals(cttConstant.PERIOD_TYPE_YEAR)) {
|
|
|
+ calendar.add(Calendar.MONTH, OCCURRENCES * 12);
|
|
|
+ calendar.add(Calendar.DAY_OF_MONTH, -1);
|
|
|
+ END_DATE = calendar.getTime();
|
|
|
+ } else {
|
|
|
+ resultDto.put("success", false);
|
|
|
+ resultDto.put("msg", "周期类型输入错误!");
|
|
|
+ return resultDto;
|
|
|
}
|
|
|
+ contractBO.set("END_DATE", END_DATE);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
contractBO.set("ADJUST_SETUP_FEE", contractBO.get("SETUP_FEE"));
|
|
|
@@ -124,8 +121,7 @@ public class contractService {
|
|
|
DBSql.update("update BO_EU_DNCTT_CONTRACT set IS_SDT_DEFAULT=0 where ACCOUNT_ID=?", new Object[]{contractBO.getString("ACCOUNT_ID")});
|
|
|
}
|
|
|
|
|
|
- if (idApply)
|
|
|
- SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_APPLY", contractBO);//更新合同
|
|
|
+ if (idApply) SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_APPLY", contractBO);//更新合同
|
|
|
else {
|
|
|
dn.recordFormChanges.record(uc, contractBO, "合同编辑");
|
|
|
SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT", contractBO);
|
|
|
@@ -139,8 +135,7 @@ public class contractService {
|
|
|
|
|
|
RowMap dto = new RowMap(contractBO.asMap());//合同对象
|
|
|
|
|
|
- if (idApply)
|
|
|
- insertContract(uc, dto);//创建合同详情,用于提交后查看和修改相关配置项、工单、服务等
|
|
|
+ if (idApply) insertContract(uc, dto);//创建合同详情,用于提交后查看和修改相关配置项、工单、服务等
|
|
|
else {
|
|
|
//更新
|
|
|
DBSql.update("update BO_EU_DNCTT_CONTRACT_RATE set CONTRACT_ID=? where BINDID=?", new Object[]{dto.getString("ID"), dto.getString("BINDID")});
|
|
|
@@ -330,6 +325,7 @@ public class contractService {
|
|
|
BigDecimal periodRate = divideToBigDecimal(GetPeriodDays(period_begin_date, new_period_end_date), GetPeriodDays(period_begin_date, period_end_date));
|
|
|
servicePeriod.set("PERIOD_PRICE", multiply(servicePeriod.get("PERIOD_PRICE"), periodRate));
|
|
|
servicePeriod.set("PERIOD_COST", multiply(servicePeriod.get("PERIOD_COST"), periodRate));
|
|
|
+ servicePeriod.set("PARTYA_PERIOD_PRICE", multiply(servicePeriod.get("PARTYA_PERIOD_PRICE"), periodRate));
|
|
|
servicePeriod.set("PERIOD_ADJUSTED_PRICE", servicePeriod.get("PERIOD_PRICE"));
|
|
|
SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", servicePeriod, conn);
|
|
|
} else {
|
|
|
@@ -364,6 +360,9 @@ public class contractService {
|
|
|
period_cost = periodRate.multiply(period_cost);
|
|
|
csp.set("PERIOD_COST", period_cost);
|
|
|
csp.set("PERIOD_ADJUSTED_PRICE", csp.get("PERIOD_PRICE"));
|
|
|
+
|
|
|
+ csp.set("PARTYA_PERIOD_PRICE", multiply(service.get("PARTYA_TOTAL_PRICE"), periodRate));
|
|
|
+
|
|
|
SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", csp, uc, conn);
|
|
|
|
|
|
if (service.getString("OBJECT_TYPE").equals("2"))//服务包
|
|
|
@@ -399,6 +398,7 @@ public class contractService {
|
|
|
BigDecimal periodRate = divideToBigDecimal(GetPeriodDays(period_begin_date, END_DATE), GetPeriodDays(period_begin_date, period_end_date));
|
|
|
servicePeriod.set("PERIOD_PRICE", multiply(servicePeriod.get("PERIOD_PRICE"), periodRate));
|
|
|
servicePeriod.set("PERIOD_COST", multiply(servicePeriod.get("PERIOD_COST"), periodRate));
|
|
|
+ servicePeriod.set("PARTYA_PERIOD_PRICE", multiply(servicePeriod.get("PARTYA_PERIOD_PRICE"), periodRate));
|
|
|
servicePeriod.set("PERIOD_ADJUSTED_PRICE", servicePeriod.get("PERIOD_PRICE"));
|
|
|
SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", servicePeriod, conn);
|
|
|
|
|
|
@@ -427,8 +427,7 @@ public class contractService {
|
|
|
contractServiceLogger.error("AddServiceServiceBundle--error--失败。。。", e);
|
|
|
|
|
|
} finally {
|
|
|
- if (conn != null)
|
|
|
- DBSql.close(conn);
|
|
|
+ if (conn != null) DBSql.close(conn);
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
@@ -443,8 +442,7 @@ public class contractService {
|
|
|
* @return
|
|
|
*/
|
|
|
public boolean AddServiceServiceBundleOne(UserContext uc, Connection conn, RowMap contract, BO service) {
|
|
|
- if (service == null)
|
|
|
- return false;
|
|
|
+ if (service == null) return false;
|
|
|
|
|
|
contractServiceLogger.info("AddServiceServiceBundleOne--开始");
|
|
|
|
|
|
@@ -512,8 +510,7 @@ public class contractService {
|
|
|
}
|
|
|
*/
|
|
|
|
|
|
- if (!isCreate)
|
|
|
- return true;
|
|
|
+ if (!isCreate) return true;
|
|
|
|
|
|
//服务已经审批并提交则不需要重新生成
|
|
|
// 暂时不考虑 审批并提交之后修改服务,不需要重新生成
|
|
|
@@ -587,6 +584,14 @@ public class contractService {
|
|
|
service.set("UNIT_PRICE", unit_price);
|
|
|
// service.set("PERIOD_TYPE", contract.getString("PERIOD_TYPE"));//计费周期更新
|
|
|
service.set("PERIOD_TYPE", maxPeriod);
|
|
|
+
|
|
|
+ //2025年10月24日 新增 三方合同甲方含税单价
|
|
|
+ service.set("UNIT_PRICE_NOTAX", multiply(service.get("UNIT_PRICE_NOTAX"), rate));
|
|
|
+ service.set("TOTAL_PRICE_NOTAX", multiply(service.get("TOTAL_PRICE_NOTAX"), rate));
|
|
|
+ service.set("PARTYA_UNIT_PRICE", multiply(service.get("PARTYA_UNIT_PRICE"), rate));
|
|
|
+ service.set("PARTYA_UNIT_PRICE_NOTAX", multiply(service.get("PARTYA_UNIT_PRICE_NOTAX"), rate));
|
|
|
+ service.set("PARTYA_TOTAL_PRICE", multiply(service.get("PARTYA_TOTAL_PRICE"), rate));//三方合同甲方含税总价
|
|
|
+ service.set("PARTYA_TOTAL_PRICE_NOTAX", multiply(service.get("PARTYA_TOTAL_PRICE_NOTAX"), rate));
|
|
|
}
|
|
|
|
|
|
contractServiceLogger.info("计算-service-ADJUSTED_PRICE");
|
|
|
@@ -631,8 +636,7 @@ public class contractService {
|
|
|
if (StringUtils.isNotBlank(BILL_METHOD_ID) && BILL_METHOD_ID.equals("4601") && START_DATE.getDayOfMonth() != 1) {
|
|
|
//本月底日期
|
|
|
LocalDate currMontLastDay = START_DATE.with(TemporalAdjusters.lastDayOfMonth());
|
|
|
- if (currMontLastDay.isBefore(END_DATE))
|
|
|
- START_DATE = currMontLastDay.plusDays(1);//周期开始日期
|
|
|
+ if (currMontLastDay.isBefore(END_DATE)) START_DATE = currMontLastDay.plusDays(1);//周期开始日期
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -651,6 +655,7 @@ public class contractService {
|
|
|
BigDecimal period_cost = multiply(service.get("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"));//三方合同甲方含税总价
|
|
|
csp.set("VENDOR_ACCOUNT_ID", vendor_account_id);
|
|
|
csp.setBindId(service.getString("BINDID"));
|
|
|
SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", csp, uc, conn);
|
|
|
@@ -707,6 +712,9 @@ public class contractService {
|
|
|
|
|
|
csa.set("PERIOD_ADJUSTED_PRICE", multiply(service.get("ADJUSTED_PRICE"), periodRate));
|
|
|
csa.set("PERIOD_PRICE", csa.get("PERIOD_ADJUSTED_PRICE"));
|
|
|
+
|
|
|
+ csa.set("PARTYA_PERIOD_PRICE", multiply(service.get("PARTYA_TOTAL_PRICE"), periodRate));//三方合同甲方含税总价
|
|
|
+
|
|
|
csa.set("VENDOR_ACCOUNT_ID", vendor_account_id);
|
|
|
csa.setBindId(service.getString("BINDID"));
|
|
|
|
|
|
@@ -771,6 +779,8 @@ public class contractService {
|
|
|
|
|
|
csp.set("PERIOD_ADJUSTED_PRICE", csp.get("PERIOD_PRICE"));
|
|
|
|
|
|
+ csp.set("PARTYA_PERIOD_PRICE", multiply(service.get("PARTYA_TOTAL_PRICE"), periodRate));//三方合同甲方含税总价
|
|
|
+
|
|
|
csp.set("VENDOR_ACCOUNT_ID", vendor_account_id);
|
|
|
csp.setBindId(service.getString("BINDID"));
|
|
|
SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", csp, uc, conn);
|
|
|
@@ -818,8 +828,7 @@ public class contractService {
|
|
|
contractServiceLogger.info("调整服务");
|
|
|
|
|
|
String IS_EFFECTIVE = editService.getString("IS_EFFECTIVE");
|
|
|
- if (!IS_EFFECTIVE.equals("未执行"))
|
|
|
- return false;
|
|
|
+ if (!IS_EFFECTIVE.equals("未执行")) return false;
|
|
|
LocalDate EFFECTIVE_DATE = getLocalDate(editService.get("EFFECTIVE_DATE"));//服务生效日期
|
|
|
String EFFECTIVE_DATE_STR = EFFECTIVE_DATE.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
|
|
|
|
|
@@ -837,7 +846,10 @@ public class contractService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ //原合同服务
|
|
|
+ BO contractServiceBO = SDK.getBOAPI().get("BO_EU_DNCTT_CONTRACT_SERVICE", editService.getString("CONTRACT_SERVICE_ID"));
|
|
|
|
|
|
+ String maxPeriod = editService.getString("PERIOD_TYPE");
|
|
|
//一次性收费服务
|
|
|
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();
|
|
|
@@ -846,6 +858,8 @@ public class contractService {
|
|
|
servicePeriod.set("PERIOD_PRICE", editService.get("TOTAL_PRICE"));
|
|
|
servicePeriod.set("PERIOD_COST", editService.get("TOTAL_COST"));
|
|
|
|
|
|
+ servicePeriod.set("PARTYA_PERIOD_PRICE", editService.get("PARTYA_TOTAL_PRICE"));//三方合同甲方含税总价
|
|
|
+
|
|
|
servicePeriod.set("PERIOD_ADJUSTED_PRICE", servicePeriod.get("PERIOD_PRICE"));
|
|
|
SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", servicePeriod, conn);
|
|
|
|
|
|
@@ -893,46 +907,69 @@ public class contractService {
|
|
|
servicePeriodAdj.set("QUANTITY", editService.get("QUANTITY"));
|
|
|
|
|
|
String ORG_PERIOD_ID = servicePeriod.getString("ORG_PERIOD_ID");
|
|
|
- if (StringUtils.isBlank(ORG_PERIOD_ID))
|
|
|
- ORG_PERIOD_ID = servicePeriod.getId();
|
|
|
+ if (StringUtils.isBlank(ORG_PERIOD_ID)) ORG_PERIOD_ID = servicePeriod.getId();
|
|
|
servicePeriodAdj.set("ORG_PERIOD_ID", ORG_PERIOD_ID);
|
|
|
|
|
|
- BigDecimal periodRateAdj = divideToBigDecimal(GetPeriodDays(EFFECTIVE_DATE, period_end_date), GetPeriodDays(period_begin_date, period_end_date));
|
|
|
|
|
|
- BigDecimal priceRate = editService.get("TOTAL_PRICE", BigDecimal.class).divide(editService.get("OLD_TOTAL_PRICE", BigDecimal.class), 10, RoundingMode.HALF_UP);
|
|
|
- BigDecimal costRate = editService.get("TOTAL_COST", BigDecimal.class).divide(editService.get("OLD_TOTAL_COST", BigDecimal.class), 10, RoundingMode.HALF_UP);
|
|
|
+ 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(servicePeriod.get("PERIOD_PRICE"), multiply(periodRateAdj, priceRate)));
|
|
|
- servicePeriodAdj.set("PERIOD_COST", multiply(servicePeriod.get("PERIOD_COST"), multiply(periodRateAdj, costRate)));
|
|
|
+ servicePeriodAdj.set("PERIOD_PRICE", multiply(editService.get("TOTAL_PRICE"), periodRateAdj));
|
|
|
+ servicePeriodAdj.set("PERIOD_COST", multiply(editService.get("TOTAL_COST"), periodRateAdj));
|
|
|
servicePeriodAdj.set("PERIOD_ADJUSTED_PRICE", servicePeriodAdj.get("PERIOD_PRICE"));
|
|
|
+
|
|
|
+ //三方合同甲方含税总价
|
|
|
+ servicePeriodAdj.set("PARTYA_PERIOD_PRICE", multiply(editService.get("PARTYA_TOTAL_PRICE"), periodRateAdj));
|
|
|
+
|
|
|
SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", servicePeriodAdj, uc, conn);
|
|
|
|
|
|
|
|
|
List<BO> sbsList = SDK.getBOAPI().query("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD_BUNDLE_SERVICE").connection(conn).addQuery("CONTRACT_SERVICE_PERIOD_ID =", ORG_PERIOD_ID).list();
|
|
|
- if (sbsList != null && sbsList.size() > 0)
|
|
|
- for (BO sbs : sbsList) {
|
|
|
- BO newSbs = new BO();
|
|
|
- newSbs.setAll(sbs.asMap());
|
|
|
- newSbs.setId(null);
|
|
|
- newSbs.set("CONTRACT_SERVICE_PERIOD_ID", servicePeriodAdj.getId());
|
|
|
- SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD_BUNDLE_SERVICE", newSbs, uc, conn);
|
|
|
- }
|
|
|
+ if (sbsList != null && sbsList.size() > 0) for (BO sbs : sbsList) {
|
|
|
+ BO newSbs = new BO();
|
|
|
+ newSbs.setAll(sbs.asMap());
|
|
|
+ newSbs.setId(null);
|
|
|
+ newSbs.set("CONTRACT_SERVICE_PERIOD_ID", servicePeriodAdj.getId());
|
|
|
+ SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD_BUNDLE_SERVICE", newSbs, uc, conn);
|
|
|
+ }
|
|
|
|
|
|
//旧的计费周期更新
|
|
|
servicePeriod.set("PERIOD_END_DATE", EFFECTIVE_DATE.minusDays(1));
|
|
|
+
|
|
|
BigDecimal periodRate = divideToBigDecimal(GetPeriodDays(period_begin_date, EFFECTIVE_DATE.minusDays(1)), GetPeriodDays(period_begin_date, period_end_date));
|
|
|
+
|
|
|
servicePeriod.set("PERIOD_PRICE", multiply(servicePeriod.get("PERIOD_PRICE"), periodRate));
|
|
|
servicePeriod.set("PERIOD_COST", multiply(servicePeriod.get("PERIOD_COST"), periodRate));
|
|
|
+
|
|
|
+ servicePeriod.set("PARTYA_PERIOD_PRICE", multiply(servicePeriod.get("PARTYA_PERIOD_PRICE"), periodRate));
|
|
|
+
|
|
|
servicePeriod.set("PERIOD_ADJUSTED_PRICE", servicePeriod.get("PERIOD_PRICE"));
|
|
|
servicePeriod.set("ORG_PERIOD_ID", ORG_PERIOD_ID);
|
|
|
SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", servicePeriod, conn);
|
|
|
} else {
|
|
|
//重新计算
|
|
|
+ /*
|
|
|
BigDecimal priceRate = editService.get("TOTAL_PRICE", BigDecimal.class).divide(editService.get("OLD_TOTAL_PRICE", BigDecimal.class), 10, RoundingMode.HALF_UP);
|
|
|
BigDecimal costRate = editService.get("TOTAL_COST", BigDecimal.class).divide(editService.get("OLD_TOTAL_COST", BigDecimal.class), 10, RoundingMode.HALF_UP);
|
|
|
servicePeriod.set("QUANTITY", editService.get("QUANTITY"));
|
|
|
servicePeriod.set("PERIOD_PRICE", multiply(servicePeriod.get("PERIOD_PRICE"), priceRate));
|
|
|
servicePeriod.set("PERIOD_COST", multiply(servicePeriod.get("PERIOD_COST"), costRate));
|
|
|
+
|
|
|
+ */
|
|
|
+
|
|
|
+ BigDecimal periodRate = BigDecimal.ONE;
|
|
|
+ LocalDate periodEnd = getNextPeriodStart(period_begin_date, maxPeriod).minusDays(1);//本周期结束时间
|
|
|
+ if (periodEnd.isAfter(period_end_date)) {//如果结束日期大于合同结束日期,则计算结束日期和合同结束日期的差值,并计算该差值占整周期的比例
|
|
|
+ periodRate = divideToBigDecimal(GetPeriodDays(period_begin_date, period_end_date), GetPeriodDays(period_begin_date, periodEnd));
|
|
|
+ }
|
|
|
+
|
|
|
+ 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_ADJUSTED_PRICE", servicePeriod.get("PERIOD_PRICE"));
|
|
|
+ //三方合同甲方含税总价
|
|
|
+ servicePeriod.set("PARTYA_PERIOD_PRICE", multiply(editService.get("PARTYA_TOTAL_PRICE"), periodRate));
|
|
|
+
|
|
|
servicePeriod.set("PERIOD_ADJUSTED_PRICE", servicePeriod.get("PERIOD_PRICE"));
|
|
|
SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", servicePeriod, conn);
|
|
|
}
|
|
|
@@ -966,6 +1003,7 @@ public class contractService {
|
|
|
servicePeriodAdj.set("QUANTITY", editService.get("QUANTITY"));
|
|
|
servicePeriodAdj.set("ORG_PERIOD_ID", ORG_PERIOD_ID);
|
|
|
|
|
|
+ /*
|
|
|
BigDecimal periodRateAdj = divideToBigDecimal(GetPeriodDays(EFFECTIVE_DATE, period_end_date), GetPeriodDays(period_begin_date, period_end_date));
|
|
|
|
|
|
BigDecimal priceRate = editService.get("TOTAL_PRICE", BigDecimal.class).divide(editService.get("OLD_TOTAL_PRICE", BigDecimal.class), 10, RoundingMode.HALF_UP);
|
|
|
@@ -975,15 +1013,26 @@ public class contractService {
|
|
|
servicePeriodAdj.set("PERIOD_COST", multiply(firstServicePeriod.get("PERIOD_COST"), multiply(periodRateAdj, costRate)));
|
|
|
servicePeriodAdj.set("PERIOD_ADJUSTED_PRICE", servicePeriodAdj.get("PERIOD_PRICE"));
|
|
|
SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", servicePeriodAdj, uc, conn);
|
|
|
+ */
|
|
|
+
|
|
|
+ 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_ADJUSTED_PRICE", servicePeriodAdj.get("PERIOD_PRICE"));
|
|
|
+ //三方合同甲方含税总价
|
|
|
+ servicePeriodAdj.set("PARTYA_PERIOD_PRICE", multiply(editService.get("PARTYA_TOTAL_PRICE"), periodRateAdj));
|
|
|
+ SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", servicePeriodAdj, uc, conn);
|
|
|
+
|
|
|
+
|
|
|
List<BO> sbsList = SDK.getBOAPI().query("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD_BUNDLE_SERVICE").connection(conn).addQuery("CONTRACT_SERVICE_PERIOD_ID =", ORG_PERIOD_ID).list();
|
|
|
- if (sbsList != null && sbsList.size() > 0)
|
|
|
- for (BO sbs : sbsList) {
|
|
|
- BO newSbs = new BO();
|
|
|
- newSbs.setAll(sbs.asMap());
|
|
|
- newSbs.setId(null);
|
|
|
- newSbs.set("CONTRACT_SERVICE_PERIOD_ID", servicePeriodAdj.getId());
|
|
|
- SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD_BUNDLE_SERVICE", newSbs, uc, conn);
|
|
|
- }
|
|
|
+ if (sbsList != null && sbsList.size() > 0) for (BO sbs : sbsList) {
|
|
|
+ BO newSbs = new BO();
|
|
|
+ newSbs.setAll(sbs.asMap());
|
|
|
+ newSbs.setId(null);
|
|
|
+ newSbs.set("CONTRACT_SERVICE_PERIOD_ID", servicePeriodAdj.getId());
|
|
|
+ SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD_BUNDLE_SERVICE", newSbs, uc, conn);
|
|
|
+ }
|
|
|
|
|
|
|
|
|
//旧的计费周期更新
|
|
|
@@ -992,6 +1041,7 @@ public class contractService {
|
|
|
firstServicePeriod.set("PERIOD_PRICE", multiply(firstServicePeriod.get("PERIOD_PRICE"), periodRate));
|
|
|
firstServicePeriod.set("PERIOD_COST", multiply(firstServicePeriod.get("PERIOD_COST"), periodRate));
|
|
|
firstServicePeriod.set("PERIOD_ADJUSTED_PRICE", firstServicePeriod.get("PERIOD_PRICE"));
|
|
|
+ firstServicePeriod.set("PARTYA_PERIOD_PRICE", multiply(firstServicePeriod.get("PARTYA_PERIOD_PRICE"), periodRate));
|
|
|
firstServicePeriod.set("ORG_PERIOD_ID", ORG_PERIOD_ID);
|
|
|
SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", firstServicePeriod, conn);
|
|
|
|
|
|
@@ -1004,6 +1054,9 @@ public class contractService {
|
|
|
BigDecimal periodRate = divideToBigDecimal(GetPeriodDays(period_begin_date, EFFECTIVE_DATE.minusDays(1)), GetPeriodDays(period_begin_date, period_end_date));
|
|
|
firstServicePeriod.set("PERIOD_PRICE", multiply(firstServicePeriod.get("PERIOD_PRICE"), periodRate));
|
|
|
firstServicePeriod.set("PERIOD_COST", multiply(firstServicePeriod.get("PERIOD_COST"), periodRate));
|
|
|
+
|
|
|
+ firstServicePeriod.set("PARTYA_PERIOD_PRICE", multiply(firstServicePeriod.get("PARTYA_PERIOD_PRICE"), periodRate));
|
|
|
+
|
|
|
firstServicePeriod.set("PERIOD_ADJUSTED_PRICE", firstServicePeriod.get("PERIOD_PRICE"));
|
|
|
firstServicePeriod.set("ORG_PERIOD_ID", ORG_PERIOD_ID);
|
|
|
SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", firstServicePeriod, conn);
|
|
|
@@ -1036,19 +1089,20 @@ public class contractService {
|
|
|
servicePeriodAdj.set("PERIOD_PRICE", multiply(editService.get("TOTAL_PRICE"), periodRateAdj));
|
|
|
servicePeriodAdj.set("PERIOD_COST", multiply(editService.get("TOTAL_COST"), periodRateAdj));
|
|
|
|
|
|
+ servicePeriodAdj.set("PARTYA_PERIOD_PRICE", multiply(editService.get("PARTYA_TOTAL_PRICE"), periodRateAdj));
|
|
|
+
|
|
|
servicePeriodAdj.set("PERIOD_ADJUSTED_PRICE", servicePeriodAdj.get("PERIOD_PRICE"));
|
|
|
SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", servicePeriodAdj, uc, conn);
|
|
|
|
|
|
|
|
|
List<BO> sbsList = SDK.getBOAPI().query("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD_BUNDLE_SERVICE").connection(conn).addQuery("CONTRACT_SERVICE_PERIOD_ID =", ORG_PERIOD_ID).list();
|
|
|
- if (sbsList != null && sbsList.size() > 0)
|
|
|
- for (BO sbs : sbsList) {
|
|
|
- BO newSbs = new BO();
|
|
|
- newSbs.setAll(sbs.asMap());
|
|
|
- newSbs.setId(null);
|
|
|
- newSbs.set("CONTRACT_SERVICE_PERIOD_ID", servicePeriodAdj.getId());
|
|
|
- SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD_BUNDLE_SERVICE", newSbs, uc, conn);
|
|
|
- }
|
|
|
+ if (sbsList != null && sbsList.size() > 0) for (BO sbs : sbsList) {
|
|
|
+ BO newSbs = new BO();
|
|
|
+ newSbs.setAll(sbs.asMap());
|
|
|
+ newSbs.setId(null);
|
|
|
+ newSbs.set("CONTRACT_SERVICE_PERIOD_ID", servicePeriodAdj.getId());
|
|
|
+ SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD_BUNDLE_SERVICE", newSbs, uc, conn);
|
|
|
+ }
|
|
|
|
|
|
SATRT_DATE = last_period_end_date.plusDays(1);
|
|
|
}
|
|
|
@@ -1059,9 +1113,7 @@ public class contractService {
|
|
|
|
|
|
DBSql.update(conn, "DELETE FROM BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD WHERE CONTRACT_SERVICE_ID=? AND PERIOD_END_DATE>=?", new Object[]{editService.getString("CONTRACT_SERVICE_ID"), SATRT_DATE_STR});
|
|
|
|
|
|
-
|
|
|
LocalDate END_DATE = getLocalDate(contract.get("END_DATE"));//合同结束日期
|
|
|
- String maxPeriod = editService.getString("PERIOD_TYPE");
|
|
|
|
|
|
//服务包上的服务
|
|
|
List<String> sbsList = null;
|
|
|
@@ -1097,6 +1149,9 @@ public class contractService {
|
|
|
period_cost = periodRate.multiply(period_cost);
|
|
|
csp.set("PERIOD_COST", period_cost);
|
|
|
csp.set("PERIOD_ADJUSTED_PRICE", csp.get("PERIOD_PRICE"));
|
|
|
+
|
|
|
+ csp.set("PARTYA_PERIOD_PRICE", multiply(editService.get("PARTYA_TOTAL_PRICE"), periodRate));//三方合同甲方含税总价
|
|
|
+
|
|
|
SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", csp, uc, conn);
|
|
|
|
|
|
if (editService.getString("OBJECT_TYPE").equals("2"))//服务包
|
|
|
@@ -1149,7 +1204,7 @@ public class contractService {
|
|
|
SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_SERVICE_EDIT", editService, conn);
|
|
|
|
|
|
//如果在此次调整之后还有调整,则设为失效状态
|
|
|
- BO contractServiceBO = SDK.getBOAPI().get("BO_EU_DNCTT_CONTRACT_SERVICE", editService.getString("CONTRACT_SERVICE_ID"));
|
|
|
+
|
|
|
contractServiceBO.set("OLD_QUANTITY", editService.get("OLD_QUANTITY"));
|
|
|
contractServiceBO.set("OLD_UNIT_PRICE", editService.get("OLD_UNIT_PRICE"));
|
|
|
contractServiceBO.set("OLD_TOTAL_PRICE", editService.get("OLD_TOTAL_PRICE"));
|
|
|
@@ -1161,6 +1216,9 @@ public class contractService {
|
|
|
contractServiceBO.set("TOTAL_PRICE", editService.get("TOTAL_PRICE"));
|
|
|
contractServiceBO.set("UNIT_COST", editService.get("UNIT_COST"));
|
|
|
contractServiceBO.set("TOTAL_COST", editService.get("TOTAL_COST"));
|
|
|
+
|
|
|
+ contractServiceBO.set("PARTYA_TOTAL_PRICE", editService.get("PARTYA_TOTAL_PRICE"));
|
|
|
+
|
|
|
SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_SERVICE", contractServiceBO, conn);
|
|
|
|
|
|
contractServiceLogger.info("服务调整成功");
|
|
|
@@ -1181,12 +1239,10 @@ public class contractService {
|
|
|
List<BO> serviceList = SDK.getBOAPI().query("BO_EU_DNCTT_CONTRACT_SERVICE").connection(conn).addQuery("BINDID =", contract.get("BINDID")).list();
|
|
|
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 (serviceList == null) serviceList = new ArrayList<BO>();
|
|
|
+ if (serviceList2 != null && serviceList2.size() > 0) for (BO service : serviceList2) {
|
|
|
+ serviceList.add(service);
|
|
|
+ }
|
|
|
|
|
|
for (BO service : serviceList) {
|
|
|
|
|
|
@@ -1295,8 +1351,7 @@ public class contractService {
|
|
|
e.printStackTrace();
|
|
|
conn.rollback();
|
|
|
} finally {
|
|
|
- if (conn != null)
|
|
|
- DBSql.close(conn);
|
|
|
+ if (conn != null) DBSql.close(conn);
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
@@ -1400,8 +1455,7 @@ public class contractService {
|
|
|
*/
|
|
|
public static BigDecimal multiply(Object obj1, Object obj2) {
|
|
|
try {
|
|
|
- if (obj1 == null || obj2 == null)
|
|
|
- return BigDecimal.ZERO;
|
|
|
+ if (obj1 == null || obj2 == null) return BigDecimal.ZERO;
|
|
|
|
|
|
BigDecimal num1 = new BigDecimal(String.valueOf(obj1));
|
|
|
BigDecimal num2 = new BigDecimal(String.valueOf(obj2));
|
|
|
@@ -1654,13 +1708,11 @@ public class contractService {
|
|
|
*/
|
|
|
public static LocalDate getLocalDate(Object obj) {
|
|
|
try {
|
|
|
- if (obj == null)
|
|
|
- return null;
|
|
|
+ if (obj == null) return null;
|
|
|
if (obj instanceof LocalDate) {
|
|
|
return (LocalDate) obj;
|
|
|
} else if (obj instanceof String) {
|
|
|
- if (StringUtils.isBlank(obj.toString()))
|
|
|
- return null;
|
|
|
+ if (StringUtils.isBlank(obj.toString())) return null;
|
|
|
// 定义日期格式
|
|
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
// 解析字符串为 LocalDate
|
|
|
@@ -1873,8 +1925,7 @@ public class contractService {
|
|
|
costCodeId = DBSql.getString("SELECT COST_CODE_ID FROM BO_EU_DNIVT_SERVICE_BUNDLE WHERE ID = ?", new Object[]{bo.getString("OBJECT_ID")});
|
|
|
}
|
|
|
Object taxCategoryId = DBSql.getString("select TAX_CATEGORY_ID from BO_EU_DND_COST_CODE where OID=? and ORGID=?", new Object[]{costCodeId, ORGID}); //SDK.getBOAPI().get("BO_EU_DND_COST_CODE", costCodeId, "TAX_CATEGORY_ID");
|
|
|
- if (taxCategoryId != null)
|
|
|
- TAX_CATEGORY_ID = taxCategoryId.toString();
|
|
|
+ if (taxCategoryId != null) TAX_CATEGORY_ID = taxCategoryId.toString();
|
|
|
}
|
|
|
|
|
|
}
|
|
|
@@ -1932,15 +1983,13 @@ public class contractService {
|
|
|
connUpdate.commit();
|
|
|
} catch (SQLException e) {
|
|
|
e.printStackTrace();
|
|
|
- if (connUpdate != null && !connUpdate.isClosed())
|
|
|
- try {
|
|
|
- connUpdate.rollback();
|
|
|
- } catch (SQLException ex) {
|
|
|
- ex.printStackTrace();
|
|
|
- }
|
|
|
+ if (connUpdate != null && !connUpdate.isClosed()) try {
|
|
|
+ connUpdate.rollback();
|
|
|
+ } catch (SQLException ex) {
|
|
|
+ ex.printStackTrace();
|
|
|
+ }
|
|
|
} finally {
|
|
|
- if (connUpdate != null && !connUpdate.isClosed())
|
|
|
- DBSql.close(connUpdate);
|
|
|
+ if (connUpdate != null && !connUpdate.isClosed()) DBSql.close(connUpdate);
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
@@ -2010,15 +2059,13 @@ public class contractService {
|
|
|
connUpdate.commit();
|
|
|
} catch (SQLException e) {
|
|
|
e.printStackTrace();
|
|
|
- if (connUpdate != null && !connUpdate.isClosed())
|
|
|
- try {
|
|
|
- connUpdate.rollback();
|
|
|
- } catch (SQLException ex) {
|
|
|
- ex.printStackTrace();
|
|
|
- }
|
|
|
+ if (connUpdate != null && !connUpdate.isClosed()) try {
|
|
|
+ connUpdate.rollback();
|
|
|
+ } catch (SQLException ex) {
|
|
|
+ ex.printStackTrace();
|
|
|
+ }
|
|
|
} finally {
|
|
|
- if (connUpdate != null && !connUpdate.isClosed())
|
|
|
- DBSql.close(connUpdate);
|
|
|
+ if (connUpdate != null && !connUpdate.isClosed()) DBSql.close(connUpdate);
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
@@ -2106,15 +2153,13 @@ public class contractService {
|
|
|
connUpdate.commit();
|
|
|
} catch (SQLException e) {
|
|
|
e.printStackTrace();
|
|
|
- if (connUpdate != null && !connUpdate.isClosed())
|
|
|
- try {
|
|
|
- connUpdate.rollback();
|
|
|
- } catch (SQLException ex) {
|
|
|
- ex.printStackTrace();
|
|
|
- }
|
|
|
+ if (connUpdate != null && !connUpdate.isClosed()) try {
|
|
|
+ connUpdate.rollback();
|
|
|
+ } catch (SQLException ex) {
|
|
|
+ ex.printStackTrace();
|
|
|
+ }
|
|
|
} finally {
|
|
|
- if (connUpdate != null && !connUpdate.isClosed())
|
|
|
- DBSql.close(connUpdate);
|
|
|
+ if (connUpdate != null && !connUpdate.isClosed()) DBSql.close(connUpdate);
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
@@ -2162,16 +2207,14 @@ public class contractService {
|
|
|
}
|
|
|
connUpdate.commit();
|
|
|
} catch (SQLException e) {
|
|
|
- if (connUpdate != null && !connUpdate.isClosed())
|
|
|
- try {
|
|
|
- connUpdate.rollback();
|
|
|
- } catch (SQLException ex) {
|
|
|
- ex.printStackTrace();
|
|
|
- }
|
|
|
+ if (connUpdate != null && !connUpdate.isClosed()) try {
|
|
|
+ connUpdate.rollback();
|
|
|
+ } catch (SQLException ex) {
|
|
|
+ ex.printStackTrace();
|
|
|
+ }
|
|
|
return e.getMessage();
|
|
|
} finally {
|
|
|
- if (connUpdate != null && !connUpdate.isClosed())
|
|
|
- DBSql.close(connUpdate);
|
|
|
+ if (connUpdate != null && !connUpdate.isClosed()) DBSql.close(connUpdate);
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
@@ -2206,16 +2249,14 @@ public class contractService {
|
|
|
|
|
|
connUpdate.commit();
|
|
|
} catch (SQLException e) {
|
|
|
- if (connUpdate != null && !connUpdate.isClosed())
|
|
|
- try {
|
|
|
- connUpdate.rollback();
|
|
|
- } catch (SQLException ex) {
|
|
|
- ex.printStackTrace();
|
|
|
- }
|
|
|
+ if (connUpdate != null && !connUpdate.isClosed()) try {
|
|
|
+ connUpdate.rollback();
|
|
|
+ } catch (SQLException ex) {
|
|
|
+ ex.printStackTrace();
|
|
|
+ }
|
|
|
return e.getMessage();
|
|
|
} finally {
|
|
|
- if (connUpdate != null && !connUpdate.isClosed())
|
|
|
- DBSql.close(connUpdate);
|
|
|
+ if (connUpdate != null && !connUpdate.isClosed()) DBSql.close(connUpdate);
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
@@ -2249,16 +2290,14 @@ public class contractService {
|
|
|
}
|
|
|
connUpdate.commit();
|
|
|
} catch (SQLException e) {
|
|
|
- if (connUpdate != null && !connUpdate.isClosed())
|
|
|
- try {
|
|
|
- connUpdate.rollback();
|
|
|
- } catch (SQLException ex) {
|
|
|
- ex.printStackTrace();
|
|
|
- }
|
|
|
+ if (connUpdate != null && !connUpdate.isClosed()) try {
|
|
|
+ connUpdate.rollback();
|
|
|
+ } catch (SQLException ex) {
|
|
|
+ ex.printStackTrace();
|
|
|
+ }
|
|
|
return e.getMessage();
|
|
|
} finally {
|
|
|
- if (connUpdate != null && !connUpdate.isClosed())
|
|
|
- DBSql.close(connUpdate);
|
|
|
+ if (connUpdate != null && !connUpdate.isClosed()) DBSql.close(connUpdate);
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
@@ -2412,15 +2451,13 @@ public class contractService {
|
|
|
connUpdate.commit();
|
|
|
} catch (SQLException e) {
|
|
|
e.printStackTrace();
|
|
|
- if (connUpdate != null && !connUpdate.isClosed())
|
|
|
- try {
|
|
|
- connUpdate.rollback();
|
|
|
- } catch (SQLException ex) {
|
|
|
- ex.printStackTrace();
|
|
|
- }
|
|
|
+ if (connUpdate != null && !connUpdate.isClosed()) try {
|
|
|
+ connUpdate.rollback();
|
|
|
+ } catch (SQLException ex) {
|
|
|
+ ex.printStackTrace();
|
|
|
+ }
|
|
|
} finally {
|
|
|
- if (connUpdate != null && !connUpdate.isClosed())
|
|
|
- DBSql.close(connUpdate);
|
|
|
+ if (connUpdate != null && !connUpdate.isClosed()) DBSql.close(connUpdate);
|
|
|
}
|
|
|
|
|
|
return true;
|