|
|
@@ -18,6 +18,7 @@ import java.time.LocalDate;
|
|
|
import java.time.ZoneId;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.time.temporal.ChronoUnit;
|
|
|
+import java.time.temporal.TemporalAdjusters;
|
|
|
import java.util.*;
|
|
|
|
|
|
|
|
|
@@ -407,9 +408,10 @@ public class contractService {
|
|
|
if (service.getString("OBJECT_TYPE").equals("2"))//服务包
|
|
|
sbsList = DBSql.getMaps(conn, "SELECT * FROM BO_EU_DNIVT_SERVICE_BUNDLE_SERVICE WHERE SERVICE_BUNDLE_ID=?", new Object[]{service.getString("OBJECT_ID")});
|
|
|
*/
|
|
|
-
|
|
|
+ String BILL_METHOD_ID = null;//计费方式 4601:自然月 4602:实际月
|
|
|
if (service.getString("OBJECT_TYPE").equals("2"))//服务包
|
|
|
{
|
|
|
+ BILL_METHOD_ID = DBSql.getString(conn, "select BILL_METHOD_ID from BO_EU_DNIVT_SERVICE_BUNDLE where ID=?", new Object[]{service.getString("OBJECT_ID")});
|
|
|
// 插入合同服务包对应的服务 ctt_contract_service_bundle_service
|
|
|
if (sbsList != null) {
|
|
|
for (String sbs : sbsList) {
|
|
|
@@ -423,11 +425,22 @@ public class contractService {
|
|
|
|
|
|
}
|
|
|
}
|
|
|
+ } else {
|
|
|
+ BILL_METHOD_ID = DBSql.getString(conn, "select BILL_METHOD_ID from BO_EU_DNIVT_SERVICE where ID=?", new Object[]{service.getString("OBJECT_ID")});
|
|
|
}
|
|
|
|
|
|
|
|
|
String vendor_account_id = DBSql.getString(conn, "select VENDOR_ACCOUNT_ID from BO_EU_DNIVT_SERVICE where ID=?", new Object[]{service.getString("OBJECT_ID")});//供应商账号
|
|
|
|
|
|
+
|
|
|
+ //如果不是从一号开始,则需要调整到从1号开始
|
|
|
+ if (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);//周期开始日期
|
|
|
+ }
|
|
|
+
|
|
|
// 计算首周期起止日期,并判断是否需要新增服务调整记录
|
|
|
Map<String, Object> firstPeriodDate = getFirstPeriodDate(START_DATE, END_DATE, EFFECTIVE_DATE, contract.getString("PERIOD_TYPE"), service.getString("PERIOD_TYPE"));
|
|
|
boolean isStartOfPeriod = (boolean) firstPeriodDate.get("isStartOfPeriod");
|
|
|
@@ -641,10 +654,12 @@ public class contractService {
|
|
|
*/
|
|
|
private boolean AddContractServiceProduct(UserContext uc, Connection conn, Map<String, String> service) {
|
|
|
contractServiceLogger.info("新增合同产品");
|
|
|
+ System.out.println(service);
|
|
|
BO contractCost = null;
|
|
|
- if (service.get("ID") != null) {
|
|
|
+ if (service.get("ID") != null && StringUtils.isNotBlank(service.get("ID").toString())) {
|
|
|
contractCost = SDK.getBOAPI().get("BO_EU_DNCTT_CONTRACT_COST", service.get("ID"));
|
|
|
- } else {
|
|
|
+ }
|
|
|
+ if (contractCost == null) {
|
|
|
ProcessInstance contractInstance = SDK.getProcessAPI().createBOProcessInstance("obj_87c6ef75d18f44cc8e85d3d4e818c303", uc.getUID(), "新增合同产品");
|
|
|
contractCost = new BO();
|
|
|
contractCost.setBindId(contractInstance.getId());
|
|
|
@@ -752,6 +767,15 @@ public class contractService {
|
|
|
LocalDate start = contractStart;
|
|
|
LocalDate end;
|
|
|
|
|
|
+ if (serviceEffect.isBefore(start)) {
|
|
|
+
|
|
|
+ dto.put("periodStart", serviceEffect);
|
|
|
+ dto.put("periodEnd", start.minusDays(1));
|
|
|
+ dto.put("isStartOfPeriod", true);
|
|
|
+ // 返回结果
|
|
|
+ return dto;
|
|
|
+ }
|
|
|
+
|
|
|
// 遍历每个合同周期,直到合同结束日期
|
|
|
while (!start.isAfter(contractEnd)) {
|
|
|
// 计算当前周期的结束日期
|