Przeglądaj źródła

增加固定价格的计算方式

zhangyao 3 tygodni temu
rodzic
commit
70aeeadacf

+ 14 - 1
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/service/contractService.java

@@ -1128,6 +1128,14 @@ public class contractService {
         if (EFFECTIVE_END_DATE != null)
             END_DATE = EFFECTIVE_END_DATE;
 
+        LocalDate YS_EFFECTIVE_DATE=EFFECTIVE_DATE;
+        LocalDate YS_END_DATE=END_DATE;
+        //固定价格,按照整个月计算
+        if (service.getString("FIXED_PRICE").equals("1")) {
+            EFFECTIVE_DATE = (EFFECTIVE_DATE.withDayOfMonth(1)); //当月1号
+            END_DATE = END_DATE.withDayOfMonth(END_DATE.lengthOfMonth()); //当月最后一天;
+        }
+
         //已经审批并提交则不能重新生成服务
         if (DBSql.getInt("SELECT count(1) FROM BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD WHERE APPROVE_AND_POST_USER_ID IS NOT NULL AND LENGTH(APPROVE_AND_POST_USER_ID)>1 AND APPROVE_AND_POST_DATE IS NOT NULL AND  BINDID=? and CONTRACT_ID=? and CONTRACT_SERVICE_ID=? ", new Object[]{service.get("BINDID"), contract.get("ID"), service.get("ID")}) > 0) {
             return false;
@@ -1168,6 +1176,11 @@ public class contractService {
         List<PeriodCalculationUtil.Period> periodList = PeriodCalculationUtil.getPeriodListByConfig(PERIOD_TYPE, EFFECTIVE_DATE, EFFECTIVE_DATE, END_DATE, CALC_METHOD_1STPERIOD, service.getString("CALC_METHOD_1STYEAR"), service.getString("MONTH_1STQUARTER"));
 
         if (periodList != null && periodList.size() > 0) {
+
+            //周期原来的开始日期和结束日期
+            periodList.get(0).setPeriodBeginDate(YS_EFFECTIVE_DATE);
+            periodList.get(periodList.size() - 1).setPeriodEndDate(YS_END_DATE);
+
             String PERIOD = periodList.get(0).getPeriodBeginDateStr() + "~" + periodList.get(periodList.size() - 1).getPeriodEndDateStr();
 
             //首月+3个月、首月+6个月、首月+12个月 的情况,需要把前两条 合并成一条
@@ -2409,7 +2422,7 @@ public class contractService {
                 // 定义日期格式
                 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
                 // 解析字符串为 LocalDate
-               // contractServiceLogger.info("getLocalDate" + obj.toString());
+                // contractServiceLogger.info("getLocalDate" + obj.toString());
                 return LocalDate.parse(obj.toString(), formatter);
             } else if (obj instanceof Date) {
                 return ((Date) obj).toInstant().atZone(ZoneId.systemDefault()).toLocalDate();

+ 61 - 2
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/service/contractServiceAdj.java

@@ -123,6 +123,31 @@ public class contractServiceAdj {
         //合同服务
         BO orgContractService = SDK.getBOAPI().get("BO_EU_DNCTT_CONTRACT_SERVICE", contractService.getString("CONTRACT_SERVICE_ID"));
 
+        LocalDate YS_EFFECTIVE_DATE = EFFECTIVE_DATE;
+        LocalDate YS_END_DATE = EFFECTIVE_END_DATE;
+        //固定价格,按照整个月计算
+        if (orgContractService.getString("FIXED_PRICE").equals("1")) {
+            //需要判断是当月1号,还是下月1号  合同开始日期
+
+            String minPERIOD_BEGIN_DATE = DBSql.getString("select min(PERIOD_BEGIN_DATE) PERIOD_BEGIN_DATE from BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD where CONTRACT_SERVICE_ID=?", new Object[]{contractService.get("CONTRACT_SERVICE_ID")});
+
+            minPERIOD_BEGIN_DATE = minPERIOD_BEGIN_DATE.substring(0, 10);
+            if (minPERIOD_BEGIN_DATE.compareTo(LocalDateYYYYMMDD(EFFECTIVE_DATE))>=0) {
+                EFFECTIVE_DATE = (EFFECTIVE_DATE.withDayOfMonth(1)); //当月1号
+            } else {
+                if (DBSql.getInt("select count(1) CNT from BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD where PERIOD_BEGIN_DATE<? and CONTRACT_SERVICE_ID=?", new Object[]{LocalDateYYYYMMDD(EFFECTIVE_DATE), contractService.get("CONTRACT_SERVICE_ID")}) > 0 && EFFECTIVE_DATE.getDayOfMonth() > 1) {
+                    //下月1号
+                    EFFECTIVE_DATE = (EFFECTIVE_DATE.plusMonths(1)).withDayOfMonth(1);
+                } else {
+                    EFFECTIVE_DATE = (EFFECTIVE_DATE.withDayOfMonth(1)); //当月1号
+                }
+                YS_EFFECTIVE_DATE=EFFECTIVE_DATE;
+            }
+
+            EFFECTIVE_END_DATE = EFFECTIVE_END_DATE.withDayOfMonth(EFFECTIVE_END_DATE.lengthOfMonth()); //当月最后一天;
+        }
+
+
         //生效日期之前的一次调整
         RowMap lastContractService = DBSql.getMap("select * from BO_EU_DNCTT_CONTRACT_SERVICE_SALE_ADJUST where  CONTRACT_SERVICE_ID=? and EFFECTIVE_DATE <=? and IS_EFFECTIVE='已执行' order by EFFECTIVE_DATE desc", new Object[]{contractService.get("CONTRACT_SERVICE_ID"), LocalDateYYYYMMDD(EFFECTIVE_DATE)});
 
@@ -225,6 +250,10 @@ public class contractServiceAdj {
                     sbsList = Arrays.asList(serviceIds.split(","));
                 }
 
+                //周期原来的开始日期和结束日期
+                periodList.get(0).setPeriodBeginDate(YS_EFFECTIVE_DATE);
+                periodList.get(periodList.size() - 1).setPeriodEndDate(YS_END_DATE);
+
                 //首月+3个月、首月+6个月、首月+12个月 的情况,需要把前两条 合并成一条
                 if (periodList.size() > 1) {
                     if (CALC_METHOD_1STPERIOD.equals("4597") || CALC_METHOD_1STPERIOD.equals("4594") || CALC_METHOD_1STPERIOD.equals("4591")) {
@@ -580,7 +609,7 @@ public class contractServiceAdj {
                         EFFECTIVE_DATE = DBSql.getString("SELECT max(PERIOD_BEGIN_DATE) as PERIOD_BEGIN_DATE FROM BO_EU_DNIVT_ORDER_PAYMENT_PLAN WHERE  CONTRACT_SERVICE_ID=? AND  PERIOD_BEGIN_DATE <=?", new Object[]{serviceId, LocalDateYYYYMMDD(newEndDate)});
                         EFFECTIVE_DATE = EFFECTIVE_DATE.length() >= 10 ? EFFECTIVE_DATE.substring(0, 10) : EFFECTIVE_DATE;
                         EFFECTIVE_DATE1 = TypeUtil.convert(EFFECTIVE_DATE, LocalDate.class);
-                       // EFFECTIVE_DATE1 = EFFECTIVE_DATE1.plusDays(1);
+                        // EFFECTIVE_DATE1 = EFFECTIVE_DATE1.plusDays(1);
                     } else {
                         EFFECTIVE_DATE = EFFECTIVE_DATE.length() >= 10 ? EFFECTIVE_DATE.substring(0, 10) : EFFECTIVE_DATE;
 
@@ -677,6 +706,32 @@ public class contractServiceAdj {
         //合同服务
         BO orgContractService = SDK.getBOAPI().get("BO_EU_DNCTT_CONTRACT_SERVICE", contractService.getString("CONTRACT_SERVICE_ID"));
 
+
+        LocalDate YS_EFFECTIVE_DATE = EFFECTIVE_DATE;
+        LocalDate YS_END_DATE = EFFECTIVE_END_DATE;
+        //固定价格,按照整个月计算
+        if (orgContractService.getString("FIXED_PRICE").equals("1")) {
+            //需要判断是当月1号,还是下月1号  合同开始日期
+
+            String minPERIOD_BEGIN_DATE = DBSql.getString("select min(PERIOD_BEGIN_DATE) PERIOD_BEGIN_DATE from "+boName+" where CONTRACT_SERVICE_ID=?", new Object[]{contractService.get("CONTRACT_SERVICE_ID")});
+
+            minPERIOD_BEGIN_DATE = minPERIOD_BEGIN_DATE.substring(0, 10);
+            if (minPERIOD_BEGIN_DATE.compareTo(LocalDateYYYYMMDD(EFFECTIVE_DATE))>=0) {
+                EFFECTIVE_DATE = (EFFECTIVE_DATE.withDayOfMonth(1)); //当月1号
+            } else {
+                if (DBSql.getInt("select count(1) CNT from "+ boName +" where PERIOD_BEGIN_DATE<? and CONTRACT_SERVICE_ID=?", new Object[]{LocalDateYYYYMMDD(EFFECTIVE_DATE), contractService.get("CONTRACT_SERVICE_ID")}) > 0 && EFFECTIVE_DATE.getDayOfMonth() > 1) {
+                    //下月1号
+                    EFFECTIVE_DATE = (EFFECTIVE_DATE.plusMonths(1)).withDayOfMonth(1);
+                } else {
+                    EFFECTIVE_DATE = (EFFECTIVE_DATE.withDayOfMonth(1)); //当月1号
+                }
+                YS_EFFECTIVE_DATE=EFFECTIVE_DATE;
+            }
+
+            EFFECTIVE_END_DATE = EFFECTIVE_END_DATE.withDayOfMonth(EFFECTIVE_END_DATE.lengthOfMonth()); //当月最后一天;
+        }
+
+
         //生效日期之前的一次调整
         RowMap lastContractService = DBSql.getMap("select * from BO_EU_DNCTT_CONTRACT_SERVICE_PURCHASE_ADJUST where  CONTRACT_SERVICE_ID=? and PURCHASE_START_DATE <=? and IS_EFFECTIVE='已执行' order by PURCHASE_START_DATE desc", new Object[]{contractService.get("CONTRACT_SERVICE_ID"), LocalDateYYYYMMDD(EFFECTIVE_DATE)});
 
@@ -708,7 +763,6 @@ public class contractServiceAdj {
             BigDecimal COST_1STMONTH = null;
             LocalDate START_DATE = EFFECTIVE_DATE;
 
-
             //获取第一笔
             //首月成本
             if (PURCHASE_CALC_METHOD_1STPERIOD.equals("4598") || PURCHASE_CALC_METHOD_1STPERIOD.equals("4595") || PURCHASE_CALC_METHOD_1STPERIOD.equals("4592")) {
@@ -723,6 +777,11 @@ public class contractServiceAdj {
                 if (firstEFFECTIVE_DATE.getYear() == EFFECTIVE_DATE.getYear() && firstEFFECTIVE_DATE.getMonth() == EFFECTIVE_DATE.getMonth()) {
                     teshuchuli = true;
                     teshuchuliBeginDate = LocalDateYYYYMMDD(EFFECTIVE_DATE);
+
+                    if (orgContractService.getString("FIXED_PRICE").equals("1")) {
+                        teshuchuliBeginDate=LocalDateYYYYMMDD(YS_EFFECTIVE_DATE);
+                    }
+
                     SERVICE_UNIT_COST = TypeUtil.convert(contractService.get("UNIT_COST_1STMONTH"), BigDecimal.class);
                     SERVICE_TOTAL_COST = multiply(SERVICE_UNIT_COST, contractService.get("QUANTITY"));
 

+ 14 - 0
com.awspaas.user.apps.donenow_ivt/src/com/awspaas/user/apps/donenow_ivt/service/PaymentPlanService.java

@@ -206,6 +206,14 @@ public class PaymentPlanService {
         LocalDate START_DATE = PERIOD_BEGIN_DATE;
         LocalDate PERIOD_END_DATE = service.get("PURCHASE_END_DATE", LocalDate.class);//新增采购结束时间
 
+        LocalDate YS_EFFECTIVE_DATE=PERIOD_BEGIN_DATE;
+        LocalDate YS_END_DATE=PERIOD_END_DATE;
+        //固定价格,按照整个月计算
+        if (service.getString("FIXED_PRICE").equals("1")) {
+            PERIOD_BEGIN_DATE = (PERIOD_BEGIN_DATE.withDayOfMonth(1)); //当月1号
+            START_DATE = PERIOD_BEGIN_DATE;
+            PERIOD_END_DATE = PERIOD_END_DATE.withDayOfMonth(PERIOD_END_DATE.lengthOfMonth()); //当月最后一天;
+        }
 
         String PURCHASE_CALC_METHOD_1STPERIOD = service.getString("PURCHASE_CALC_METHOD_1STPERIOD");
 
@@ -239,6 +247,9 @@ public class PaymentPlanService {
             if (PERIOD_BEGIN_DATE.getDayOfMonth() == 1 && RULE_CATE.equals("610") && boName.equals("BO_EU_DNIVT_ORDER_PAYMENT_PLAN")) {
 
                 firstPeriodBeginDate = PERIOD_BEGIN_DATE.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+                if (service.getString("FIXED_PRICE").equals("1"))
+                    firstPeriodBeginDate = YS_EFFECTIVE_DATE.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+
                 //下月一号
                 PERIOD_BEGIN_DATE = PERIOD_BEGIN_DATE.plusMonths(1).withDayOfMonth(1);
 
@@ -297,6 +308,9 @@ public class PaymentPlanService {
             TOTAL_COST = TOTAL_COST.divide(new BigDecimal(periodMonths), 10, BigDecimal.ROUND_HALF_UP);
 
         int i = 0;
+
+        periods.get(periods.size() - 1).setPeriodEndDate(YS_END_DATE);
+
         for (PeriodCalculationUtil.Period period : periods) {
             i++;