소스 검색

1、合同服务的周期计算功能调整;根据配置按照自然月和实际月分别生产服务周期;

zhangyao 4 달 전
부모
커밋
57a1e9277b
1개의 변경된 파일27개의 추가작업 그리고 3개의 파일을 삭제
  1. 27 3
      com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/service/contractService.java

+ 27 - 3
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/service/contractService.java

@@ -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)) {
             // 计算当前周期的结束日期