Ver código fonte

Merge branch 'master' of http://210.51.45.41:3000/itcat_admin/aws_donenow

HULEI 3 semanas atrás
pai
commit
d9b10b6770

+ 3 - 0
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/PeriodCalculationUtil.java

@@ -289,6 +289,9 @@ public class PeriodCalculationUtil {
         // 3.2 处理首个周期
         if (currLastDay != null && currLastDay.equals(periodBeginDate) == false) {
 
+            if(currLastDay.isAfter(periodEndDate))
+                currLastDay=periodEndDate;
+
             if (userMonthDay) {
                 Period period = new Period();
                 period.setPeriodBeginDate(periodBeginDate);

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

@@ -386,12 +386,11 @@ public class contractService {
 
             for (String contractServiceId : serviceIdList) {
 
-                //销售服务
-                contractServiceAdj.getInstance().editServiceSaleEndDate(uc, contractServiceId, END_DATE);
-
                 //采购--付款计划
                 contractServiceAdj.getInstance().editServicePurchaseEndDate(uc, contractServiceId, END_DATE);
 
+                //销售服务
+                contractServiceAdj.getInstance().editServiceSaleEndDate(uc, contractServiceId, END_DATE);
 
                 //分摊成本
                 contractServiceAdj.getInstance().paySplitServiceMonth(uc, contractServiceId);
@@ -2405,11 +2404,12 @@ public class contractService {
             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
-                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();

+ 134 - 124
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/service/contractServiceAdj.java

@@ -115,7 +115,7 @@ public class contractServiceAdj {
      * @param boId
      * @return
      */
-    public boolean execServiceSaleAdj(UserContext uc, String boId,boolean isEditEnd) {
+    public boolean execServiceSaleAdj(UserContext uc, String boId, boolean isEditEnd) {
         BO contractService = SDK.getBOAPI().get("BO_EU_DNCTT_CONTRACT_SERVICE_SALE_ADJUST", boId);
         LocalDate EFFECTIVE_DATE = getLocalDate(contractService.get("EFFECTIVE_DATE"));//服务生效日期
         LocalDate EFFECTIVE_END_DATE = getLocalDate(contractService.get("END_DATE"));//服务结束日期
@@ -348,8 +348,7 @@ public class contractServiceAdj {
             }
 
             //如果合同服务上面的生效日期小于服务调整的生效日期,则将合同服务生效日期改为服务调整的生效日期
-            if(isEditEnd==false)
-            {
+            if (isEditEnd == false) {
                 if (orgContractService.get("EFFECTIVE_DATE", LocalDate.class).compareTo(contractService.get("EFFECTIVE_DATE", LocalDate.class)) < 0)
                     orgContractService.set("EFFECTIVE_DATE", contractService.get("EFFECTIVE_DATE"));
             }
@@ -368,6 +367,7 @@ public class contractServiceAdj {
                 e1.printStackTrace();
             }
 
+            return false;
         } finally {
             if (conn != null) DBSql.close(conn);
         }
@@ -385,88 +385,93 @@ public class contractServiceAdj {
      * @return
      */
     public String editServiceSaleEndDate(UserContext uc, String serviceId, LocalDate newEndDate) {
+        try {
 
-        //一次性收费,无需修改
-        if (DBSql.getString("select PERIOD_TYPE from BO_EU_DNCTT_CONTRACT_SERVICE where ID=?", new Object[]{serviceId}).equals("609")) {
-            return "无需修改";
-        }
+            //一次性收费,无需修改
+            if (DBSql.getString("select PERIOD_TYPE from BO_EU_DNCTT_CONTRACT_SERVICE where ID=?", new Object[]{serviceId}).equals("609")) {
+                return "无需修改";
+            }
 
-        RowMap lastServicePeriod = DBSql.getMap("SELECT * FROM BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD WHERE CONTRACT_SERVICE_ID=? ORDER BY PERIOD_BEGIN_DATE DESC", new Object[]{serviceId});//最后一笔服务周期
+            RowMap lastServicePeriod = DBSql.getMap("SELECT * FROM BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD WHERE CONTRACT_SERVICE_ID=? ORDER BY PERIOD_BEGIN_DATE DESC", new Object[]{serviceId});//最后一笔服务周期
 
 
-        LocalDate PERIOD_BEGIN_DATE = TypeUtil.convert(lastServicePeriod.get("PERIOD_BEGIN_DATE"), LocalDate.class);
-        LocalDate PERIOD_END_DATE = TypeUtil.convert(lastServicePeriod.get("PERIOD_END_DATE"), LocalDate.class);
-        if (PERIOD_END_DATE.equals(newEndDate))
-            return "无需修改";
+            LocalDate PERIOD_BEGIN_DATE = TypeUtil.convert(lastServicePeriod.get("PERIOD_BEGIN_DATE"), LocalDate.class);
+            LocalDate PERIOD_END_DATE = TypeUtil.convert(lastServicePeriod.get("PERIOD_END_DATE"), LocalDate.class);
+            if (PERIOD_END_DATE.equals(newEndDate))
+                return "无需修改";
 
-        String EFFECTIVE_DATE = DBSql.getString("SELECT max(PERIOD_BEGIN_DATE) as PERIOD_BEGIN_DATE FROM BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD WHERE APPROVE_AND_POST_DATE IS NOT NULL and CONTRACT_SERVICE_ID=? AND  PERIOD_END_DATE >=?", new Object[]{serviceId, LocalDateYYYYMMDD(newEndDate)});
-        if (StringUtils.isNotBlank(EFFECTIVE_DATE))
-            return "已审批不能修改了";
+            String EFFECTIVE_DATE = DBSql.getString("SELECT max(PERIOD_BEGIN_DATE) as PERIOD_BEGIN_DATE FROM BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD WHERE APPROVE_AND_POST_DATE IS NOT NULL and CONTRACT_SERVICE_ID=? AND  PERIOD_END_DATE >=?", new Object[]{serviceId, LocalDateYYYYMMDD(newEndDate)});
+            if (StringUtils.isNotBlank(EFFECTIVE_DATE))
+                return "已审批不能修改了";
 
-        String bindId = editServiceSale(uc, serviceId, "修改结束日期");
+            String bindId = editServiceSale(uc, serviceId, "修改结束日期");
 
-        BO adjBO = SDK.getBOAPI().getByProcess("BO_EU_DNCTT_CONTRACT_SERVICE_SALE_ADJUST", bindId);
+            BO adjBO = SDK.getBOAPI().getByProcess("BO_EU_DNCTT_CONTRACT_SERVICE_SALE_ADJUST", bindId);
 
-        if (PERIOD_END_DATE.isAfter(newEndDate)) {
-            //缩短
+            if (PERIOD_END_DATE.isAfter(newEndDate)) {
+                //缩短
 
-            if (PERIOD_BEGIN_DATE.isBefore(newEndDate)) {
+                if (PERIOD_BEGIN_DATE.isBefore(newEndDate)) {
 
-                adjBO.set("EFFECTIVE_DATE", PERIOD_BEGIN_DATE);
+                    adjBO.set("EFFECTIVE_DATE", PERIOD_BEGIN_DATE);
 
-            } else {
+                } else {
 
-                EFFECTIVE_DATE = DBSql.getString("SELECT max(PERIOD_BEGIN_DATE) as PERIOD_BEGIN_DATE FROM BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD WHERE APPROVE_AND_POST_DATE IS NULL and CONTRACT_SERVICE_ID=? AND  PERIOD_BEGIN_DATE <=?", new Object[]{serviceId, LocalDateYYYYMMDD(newEndDate)});
+                    EFFECTIVE_DATE = DBSql.getString("SELECT max(PERIOD_BEGIN_DATE) as PERIOD_BEGIN_DATE FROM BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD WHERE APPROVE_AND_POST_DATE IS NULL and CONTRACT_SERVICE_ID=? AND  PERIOD_BEGIN_DATE <=?", new Object[]{serviceId, LocalDateYYYYMMDD(newEndDate)});
 
-                LocalDate EFFECTIVE_DATE1 = null;
-                if (StringUtils.isBlank(EFFECTIVE_DATE)) {
-                    EFFECTIVE_DATE = DBSql.getString("SELECT max(PERIOD_END_DATE) as PERIOD_END_DATE FROM BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD 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);
+                    LocalDate EFFECTIVE_DATE1 = null;
+                    if (StringUtils.isBlank(EFFECTIVE_DATE)) {
+                        EFFECTIVE_DATE = DBSql.getString("SELECT max(PERIOD_END_DATE) as PERIOD_END_DATE FROM BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD 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);
 
-                } else {
-                    EFFECTIVE_DATE = EFFECTIVE_DATE.length() >= 10 ? EFFECTIVE_DATE.substring(0, 10) : EFFECTIVE_DATE;
-                    EFFECTIVE_DATE1 = TypeUtil.convert(EFFECTIVE_DATE, LocalDate.class);
-                }
+                    } else {
+                        EFFECTIVE_DATE = EFFECTIVE_DATE.length() >= 10 ? EFFECTIVE_DATE.substring(0, 10) : EFFECTIVE_DATE;
+                        EFFECTIVE_DATE1 = TypeUtil.convert(EFFECTIVE_DATE, LocalDate.class);
+                    }
 
 
-                adjBO.set("EFFECTIVE_DATE", EFFECTIVE_DATE1);
+                    adjBO.set("EFFECTIVE_DATE", EFFECTIVE_DATE1);
 
-                //最近的一次服务调整
-                RowMap lastContractServiceAdj = DBSql.getMap("SELECT * FROM BO_EU_DNCTT_CONTRACT_SERVICE_SALE_ADJUST WHERE CONTRACT_SERVICE_ID=? AND IS_EFFECTIVE='已执行' AND EFFECTIVE_DATE <=? ORDER BY EFFECTIVE_DATE DESC", new Object[]{serviceId, LocalDateYYYYMMDD(EFFECTIVE_DATE1)});
+                    //最近的一次服务调整
+                    RowMap lastContractServiceAdj = DBSql.getMap("SELECT * FROM BO_EU_DNCTT_CONTRACT_SERVICE_SALE_ADJUST WHERE CONTRACT_SERVICE_ID=? AND IS_EFFECTIVE='已执行' AND EFFECTIVE_DATE <=? ORDER BY EFFECTIVE_DATE DESC", new Object[]{serviceId, LocalDateYYYYMMDD(EFFECTIVE_DATE1)});
 
-                adjBO.set("UNIT_PRICE", lastContractServiceAdj.getString("UNIT_PRICE"));
-                adjBO.set("TOTAL_PRICE", lastContractServiceAdj.getString("TOTAL_PRICE"));
-                adjBO.set("QUANTITY", lastContractServiceAdj.getString("QUANTITY"));
-                adjBO.set("PERIOD_TYPE", lastContractServiceAdj.getString("PERIOD_TYPE"));
-                adjBO.set("CALC_METHOD_1STPERIOD", lastContractServiceAdj.getString("CALC_METHOD_1STPERIOD"));
-                adjBO.set("MONTH_1STQUARTER", lastContractServiceAdj.getString("MONTH_1STQUARTER"));
-                adjBO.set("PARTYA_TOTAL_PRICE", lastContractServiceAdj.getString("PARTYA_TOTAL_PRICE"));
-                adjBO.set("UNIT_PRICE_1STMONTH", lastContractServiceAdj.getString("UNIT_PRICE_1STMONTH"));
+                    adjBO.set("UNIT_PRICE", lastContractServiceAdj.getString("UNIT_PRICE"));
+                    adjBO.set("TOTAL_PRICE", lastContractServiceAdj.getString("TOTAL_PRICE"));
+                    adjBO.set("QUANTITY", lastContractServiceAdj.getString("QUANTITY"));
+                    adjBO.set("PERIOD_TYPE", lastContractServiceAdj.getString("PERIOD_TYPE"));
+                    adjBO.set("CALC_METHOD_1STPERIOD", lastContractServiceAdj.getString("CALC_METHOD_1STPERIOD"));
+                    adjBO.set("MONTH_1STQUARTER", lastContractServiceAdj.getString("MONTH_1STQUARTER"));
+                    adjBO.set("PARTYA_TOTAL_PRICE", lastContractServiceAdj.getString("PARTYA_TOTAL_PRICE"));
+                    adjBO.set("UNIT_PRICE_1STMONTH", lastContractServiceAdj.getString("UNIT_PRICE_1STMONTH"));
 
-            }
+                }
 
-        } else {
-            //延长
-            if (lastServicePeriod.get("APPROVE_AND_POST_DATE") != null && StringUtils.isNotBlank(lastServicePeriod.getString("APPROVE_AND_POST_USER_ID"))) {
-                adjBO.set("EFFECTIVE_DATE", PERIOD_END_DATE.plusDays(1));
             } else {
-                adjBO.set("EFFECTIVE_DATE", PERIOD_BEGIN_DATE);
+                //延长
+                if (lastServicePeriod.get("APPROVE_AND_POST_DATE") != null && StringUtils.isNotBlank(lastServicePeriod.getString("APPROVE_AND_POST_USER_ID"))) {
+                    adjBO.set("EFFECTIVE_DATE", PERIOD_END_DATE.plusDays(1));
+                } else {
+                    adjBO.set("EFFECTIVE_DATE", PERIOD_BEGIN_DATE);
+                }
             }
-        }
 
-        adjBO.set("REMARK", "服务延期:" + LocalDateYYYYMMDD(PERIOD_END_DATE) + "->" + LocalDateYYYYMMDD(newEndDate));
+            adjBO.set("REMARK", "服务延期:" + LocalDateYYYYMMDD(PERIOD_END_DATE) + "->" + LocalDateYYYYMMDD(newEndDate));
 
-        adjBO.set("END_DATE", newEndDate);
-        SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_SERVICE_SALE_ADJUST", adjBO);
+            adjBO.set("END_DATE", newEndDate);
+            SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_SERVICE_SALE_ADJUST", adjBO);
 
-        if (execServiceSaleAdj(uc, adjBO.getId(),true) == false) {
-            DBSql.update("delete from BO_EU_DNCTT_CONTRACT_SERVICE_SALE_ADJUST where ID=? AND IS_EFFECTIVE<>'已执行'", new Object[]{adjBO.getId()});
-        } else {
-            DBSql.update("update bo_eu_dnctt_contract_service set END_DATE=? where ID=?", new Object[]{LocalDateYYYYMMDD(newEndDate), serviceId});
+            if (execServiceSaleAdj(uc, adjBO.getId(), true) == false) {
+                DBSql.update("delete from BO_EU_DNCTT_CONTRACT_SERVICE_SALE_ADJUST where ID=? AND IS_EFFECTIVE<>'已执行'", new Object[]{adjBO.getId()});
+            } else {
+                DBSql.update("update bo_eu_dnctt_contract_service set END_DATE=? where ID=?", new Object[]{LocalDateYYYYMMDD(newEndDate), serviceId});
+            }
+            return "ok";
+
+        } catch (Exception e) {
+            return "异常:" + e.getMessage();
         }
-        return "ok";
     }
 
 
@@ -532,90 +537,94 @@ public class contractServiceAdj {
      * @return
      */
     public String editServicePurchaseEndDate(UserContext uc, String serviceId, LocalDate newEndDate) {
-        RowMap lastServicePeriod = DBSql.getMap("SELECT * FROM BO_EU_DNIVT_ORDER_PAYMENT_PLAN WHERE CONTRACT_SERVICE_ID=? ORDER BY PERIOD_BEGIN_DATE DESC", new Object[]{serviceId});//最后一笔服务周期
-        if (lastServicePeriod == null)
-            return "无需修改";
-
-        //一次性收费,无需修改
-        if (DBSql.getString("select PURCHASE_PERIOD_TYPE from BO_EU_DNCTT_CONTRACT_SERVICE where ID=?", new Object[]{serviceId}).equals("609")) {
-            return "无需修改";
-        }
+        try {
 
-        LocalDate PERIOD_BEGIN_DATE = TypeUtil.convert(lastServicePeriod.get("PERIOD_BEGIN_DATE"), LocalDate.class);
-        LocalDate PERIOD_END_DATE = TypeUtil.convert(lastServicePeriod.get("PERIOD_END_DATE"), LocalDate.class);
+            RowMap lastServicePeriod = DBSql.getMap("SELECT * FROM BO_EU_DNIVT_ORDER_PAYMENT_PLAN WHERE CONTRACT_SERVICE_ID=? ORDER BY PERIOD_BEGIN_DATE DESC", new Object[]{serviceId});//最后一笔服务周期
+            if (lastServicePeriod == null)
+                return "无需修改";
 
-        if (PERIOD_END_DATE.equals(newEndDate)) return "无需修改";
+            //一次性收费,无需修改
+            if (DBSql.getString("select PURCHASE_PERIOD_TYPE from BO_EU_DNCTT_CONTRACT_SERVICE where ID=?", new Object[]{serviceId}).equals("609")) {
+                return "无需修改";
+            }
 
-        String EFFECTIVE_DATE = DBSql.getString("SELECT max(PERIOD_BEGIN_DATE) as PERIOD_BEGIN_DATE FROM BO_EU_DNIVT_ORDER_PAYMENT_PLAN WHERE  PAY_AMOUNT>0 and PAY_AMOUNT is not NULL  and CONTRACT_SERVICE_ID=? AND  PERIOD_BEGIN_DATE >=?", new Object[]{serviceId, LocalDateYYYYMMDD(newEndDate)});
+            LocalDate PERIOD_BEGIN_DATE = TypeUtil.convert(lastServicePeriod.get("PERIOD_BEGIN_DATE"), LocalDate.class);
+            LocalDate PERIOD_END_DATE = TypeUtil.convert(lastServicePeriod.get("PERIOD_END_DATE"), LocalDate.class);
 
-        if (StringUtils.isNotBlank(EFFECTIVE_DATE))
-            return "已审批不能修改了";
+            if (PERIOD_END_DATE.equals(newEndDate))
+                return "无需修改";
 
+            String EFFECTIVE_DATE = DBSql.getString("SELECT max(PERIOD_BEGIN_DATE) as PERIOD_BEGIN_DATE FROM BO_EU_DNIVT_ORDER_PAYMENT_PLAN WHERE  PAY_AMOUNT>0 and PAY_AMOUNT is not NULL  and CONTRACT_SERVICE_ID=? AND  PERIOD_BEGIN_DATE >=?", new Object[]{serviceId, LocalDateYYYYMMDD(newEndDate)});
 
-        String bindId = editServicePurchase(uc, serviceId, "修改结束日期");
+            if (StringUtils.isNotBlank(EFFECTIVE_DATE))
+                return "已审批不能修改了";
 
-        BO adjBO = SDK.getBOAPI().getByProcess("BO_EU_DNCTT_CONTRACT_SERVICE_PURCHASE_ADJUST", bindId);
+            String bindId = editServicePurchase(uc, serviceId, "修改结束日期");
+            BO adjBO = SDK.getBOAPI().getByProcess("BO_EU_DNCTT_CONTRACT_SERVICE_PURCHASE_ADJUST", bindId);
+            contractServiceLogger.info("采购生效日期:" + adjBO.get("PURCHASE_START_DATE"));
+            contractServiceLogger.info("采购生效日期:newEndDate " + newEndDate);
 
+            if (PERIOD_END_DATE.isAfter(newEndDate)) {
+                //缩短
+                if (PERIOD_BEGIN_DATE.isBefore(newEndDate)) {
 
-        if (PERIOD_END_DATE.isAfter(newEndDate)) {
-            //缩短
-            if (PERIOD_BEGIN_DATE.isBefore(newEndDate)) {
+                    adjBO.set("PURCHASE_START_DATE", PERIOD_BEGIN_DATE);
+                } else {
 
-                adjBO.set("PURCHASE_START_DATE", PERIOD_BEGIN_DATE);
-            } else {
+                    contractServiceLogger.info("采购生效日期:EFFECTIVE_DATE_SQL :" + "SELECT max(PERIOD_BEGIN_DATE) as PERIOD_BEGIN_DATE FROM BO_EU_DNIVT_ORDER_PAYMENT_PLAN WHERE PAY_AMOUNT>0 and PAY_AMOUNT is not NULL and CONTRACT_SERVICE_ID='" + serviceId + "' AND  PERIOD_BEGIN_DATE <='" + LocalDateYYYYMMDD(newEndDate) + "' ");
 
-                EFFECTIVE_DATE = DBSql.getString("SELECT max(PERIOD_BEGIN_DATE) as PERIOD_BEGIN_DATE FROM BO_EU_DNIVT_ORDER_PAYMENT_PLAN WHERE PAY_AMOUNT>0 and PAY_AMOUNT is not NULL and CONTRACT_SERVICE_ID=? AND  PERIOD_BEGIN_DATE <=?", new Object[]{serviceId, LocalDateYYYYMMDD(newEndDate)});
+                    EFFECTIVE_DATE = DBSql.getString("SELECT max(PERIOD_BEGIN_DATE) as PERIOD_BEGIN_DATE FROM BO_EU_DNIVT_ORDER_PAYMENT_PLAN WHERE PAY_AMOUNT>0 and PAY_AMOUNT is not NULL and CONTRACT_SERVICE_ID=? AND  PERIOD_BEGIN_DATE <=?", new Object[]{serviceId, LocalDateYYYYMMDD(newEndDate)});
 
-                LocalDate EFFECTIVE_DATE1 = null;
-                if (StringUtils.isBlank(EFFECTIVE_DATE)) {
-                    EFFECTIVE_DATE = DBSql.getString("SELECT max(PERIOD_END_DATE) as PERIOD_END_DATE FROM BO_EU_DNIVT_ORDER_PAYMENT_PLAN WHERE  CONTRACT_SERVICE_ID=? AND  PERIOD_BEGIN_DATE <=?", new Object[]{serviceId, LocalDateYYYYMMDD(newEndDate)});
+                    LocalDate EFFECTIVE_DATE1 = null;
+                    if (StringUtils.isBlank(EFFECTIVE_DATE)) {
+                        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);
+                    } else {
+                        EFFECTIVE_DATE = EFFECTIVE_DATE.length() >= 10 ? EFFECTIVE_DATE.substring(0, 10) : EFFECTIVE_DATE;
 
-                    EFFECTIVE_DATE = EFFECTIVE_DATE.length() >= 10 ? EFFECTIVE_DATE.substring(0, 10) : EFFECTIVE_DATE;
+                        EFFECTIVE_DATE1 = TypeUtil.convert(EFFECTIVE_DATE, LocalDate.class);
+                    }
 
-                    EFFECTIVE_DATE1 = TypeUtil.convert(EFFECTIVE_DATE, LocalDate.class);
-                    EFFECTIVE_DATE1 = EFFECTIVE_DATE1.plusDays(1);
+                    adjBO.set("PURCHASE_START_DATE", EFFECTIVE_DATE1);
 
-                } else {
-                    EFFECTIVE_DATE = EFFECTIVE_DATE.length() >= 10 ? EFFECTIVE_DATE.substring(0, 10) : EFFECTIVE_DATE;
+                    //最近的一次服务调整
+                    RowMap lastContractServiceAdj = DBSql.getMap("SELECT * FROM BO_EU_DNCTT_CONTRACT_SERVICE_PURCHASE_ADJUST WHERE CONTRACT_SERVICE_ID=? AND IS_EFFECTIVE='已执行' AND PURCHASE_START_DATE <=? ORDER BY PURCHASE_START_DATE DESC", new Object[]{serviceId, LocalDateYYYYMMDD(EFFECTIVE_DATE1)});
 
-                    EFFECTIVE_DATE1 = TypeUtil.convert(EFFECTIVE_DATE, LocalDate.class);
+                    adjBO.set("UNIT_COST", lastContractServiceAdj.getString("UNIT_COST"));
+                    adjBO.set("TOTAL_COST", lastContractServiceAdj.getString("TOTAL_COST"));
+                    adjBO.set("QUANTITY", lastContractServiceAdj.getString("QUANTITY"));
+                    adjBO.set("PURCHASE_PERIOD_TYPE", lastContractServiceAdj.getString("PURCHASE_PERIOD_TYPE"));
+                    adjBO.set("PURCHASE_CALC_METHOD_1STPERIOD", lastContractServiceAdj.getString("PURCHASE_CALC_METHOD_1STPERIOD"));
+                    adjBO.set("MONTH_1STQUARTER", lastContractServiceAdj.getString("MONTH_1STQUARTER"));
+                    adjBO.set("UNIT_COST_1STMONTH", lastContractServiceAdj.getString("UNIT_COST_1STMONTH"));
                 }
 
-                adjBO.set("PURCHASE_START_DATE", EFFECTIVE_DATE1);
-
-                //最近的一次服务调整
-                RowMap lastContractServiceAdj = DBSql.getMap("SELECT * FROM BO_EU_DNCTT_CONTRACT_SERVICE_PURCHASE_ADJUST WHERE CONTRACT_SERVICE_ID=? AND IS_EFFECTIVE='已执行' AND PURCHASE_START_DATE <=? ORDER BY PURCHASE_START_DATE DESC", new Object[]{serviceId, LocalDateYYYYMMDD(EFFECTIVE_DATE1)});
-
-                adjBO.set("UNIT_COST", lastContractServiceAdj.getString("UNIT_COST"));
-                adjBO.set("TOTAL_COST", lastContractServiceAdj.getString("TOTAL_COST"));
-                adjBO.set("QUANTITY", lastContractServiceAdj.getString("QUANTITY"));
-                adjBO.set("PURCHASE_PERIOD_TYPE", lastContractServiceAdj.getString("PURCHASE_PERIOD_TYPE"));
-                adjBO.set("PURCHASE_CALC_METHOD_1STPERIOD", lastContractServiceAdj.getString("PURCHASE_CALC_METHOD_1STPERIOD"));
-                adjBO.set("MONTH_1STQUARTER", lastContractServiceAdj.getString("MONTH_1STQUARTER"));
-                adjBO.set("UNIT_COST_1STMONTH", lastContractServiceAdj.getString("UNIT_COST_1STMONTH"));
+            } else {
+                //延长
+                if (lastServicePeriod.get("PAY_AMOUNT") != null && lastServicePeriod.getDouble("PAY_AMOUNT") != 0) {
+                    adjBO.set("PURCHASE_START_DATE", PERIOD_END_DATE.plusDays(1));
+                } else {
+                    adjBO.set("PURCHASE_START_DATE", PERIOD_BEGIN_DATE);
+                }
             }
 
-        } else {
-            //延长
-            if (lastServicePeriod.get("PAY_AMOUNT") != null && lastServicePeriod.getDouble("PAY_AMOUNT") != 0) {
-                adjBO.set("PURCHASE_START_DATE", PERIOD_END_DATE.plusDays(1));
+            contractServiceLogger.info("采购生效日期:" + adjBO.get("PURCHASE_START_DATE"));
+            adjBO.set("REMARK", "服务延期:" + LocalDateYYYYMMDD(PERIOD_END_DATE) + "->" + LocalDateYYYYMMDD(newEndDate));
+            adjBO.set("PURCHASE_END_DATE", newEndDate);
+            SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_SERVICE_PURCHASE_ADJUST", adjBO);
+
+            if (execServicePurchaseAdj(uc, adjBO.getId(), null, true) == false) {
+                DBSql.update("delete from BO_EU_DNCTT_CONTRACT_SERVICE_PURCHASE_ADJUST where ID=? AND IS_EFFECTIVE<>'已执行'", new Object[]{adjBO.getId()});
             } else {
-                adjBO.set("PURCHASE_START_DATE", PERIOD_BEGIN_DATE);
+                DBSql.update("update bo_eu_dnctt_contract_service set PURCHASE_END_DATE=? where ID=?", new Object[]{LocalDateYYYYMMDD(newEndDate), serviceId});
             }
-        }
-
-        adjBO.set("REMARK", "服务延期:" + LocalDateYYYYMMDD(PERIOD_END_DATE) + "->" + LocalDateYYYYMMDD(newEndDate));
-        adjBO.set("PURCHASE_END_DATE", newEndDate);
-        SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_SERVICE_PURCHASE_ADJUST", adjBO);
 
-        if (execServicePurchaseAdj(uc, adjBO.getId(), null,true) == false) {
-            DBSql.update("delete from BO_EU_DNCTT_CONTRACT_SERVICE_PURCHASE_ADJUST where ID=? AND IS_EFFECTIVE<>'已执行'", new Object[]{adjBO.getId()});
-        } else {
-            DBSql.update("update bo_eu_dnctt_contract_service set PURCHASE_END_DATE=? where ID=?", new Object[]{LocalDateYYYYMMDD(newEndDate), serviceId});
+            return "ok";
+        } catch (Exception e) {
+            return "异常:" + e.getMessage();
         }
-
-
-        return "ok";
     }
 
 
@@ -626,7 +635,7 @@ public class contractServiceAdj {
      * @param boName
      * @return
      */
-    public boolean execServicePurchaseAdj(UserContext uc, String boId, String boName,boolean isEditEnd) {
+    public boolean execServicePurchaseAdj(UserContext uc, String boId, String boName, boolean isEditEnd) {
         //调整 服务
         BO contractService = SDK.getBOAPI().get("BO_EU_DNCTT_CONTRACT_SERVICE_PURCHASE_ADJUST", boId);
 
@@ -859,8 +868,7 @@ public class contractServiceAdj {
 
                 //如果合同服务上面的生效日期小于服务调整的生效日期,则将合同服务生效日期改为服务调整的生效日期
                 //如果只修改了 结束日期则不需要修改
-                if(isEditEnd==false)
-                {
+                if (isEditEnd == false) {
                     if (orgContractService.get("PURCHASE_START_DATE", LocalDate.class).compareTo(contractService.get("PURCHASE_START_DATE", LocalDate.class)) < 0)
                         orgContractService.set("PURCHASE_START_DATE", contractService.get("PURCHASE_START_DATE"));
                 }
@@ -887,7 +895,7 @@ public class contractServiceAdj {
 
         //生成每月的采购计划
         if (boName.equals("BO_EU_DNIVT_ORDER_PAYMENT_PLAN")) {
-            execServicePurchaseAdj(uc, boId, "BO_EU_DNIVT_ORDER_PAYMENT_PLAN_MONTH",isEditEnd);
+            execServicePurchaseAdj(uc, boId, "BO_EU_DNIVT_ORDER_PAYMENT_PLAN_MONTH", isEditEnd);
 
             //分摊采购成本
             paySplitServiceMonth(uc, contractService.getString("CONTRACT_SERVICE_ID"));
@@ -910,6 +918,8 @@ public class contractServiceAdj {
     //合同服务采购成本平摊到服务周期上面
     public void paySplitServiceMonth(UserContext uc, String contractServiceId) {
 
+        contractServiceLogger.info("合同服务采购成本平摊到服务周期上面");
+
         RowMap service = DBSql.getMap("select * from BO_EU_DNCTT_CONTRACT_SERVICE where ID=?", new Object[]{contractServiceId});
 
         // 查询与该合同服务关联的所有付款计划,并按开始时间排序
@@ -971,7 +981,7 @@ public class contractServiceAdj {
             // 设置下一轮比较的时间起点为当前周期结束后一天
             LAST_DATE = PERIOD_END_DATE.plusDays(1);
         }
-
+        contractServiceLogger.info("合同服务采购成本平摊到服务周期上面--结束");
     }
 
 

+ 2 - 1
com.awspaas.user.apps.donenow_ivt/src/com/awspaas/user/apps/donenow_ivt/utils/PeriodCalculationUtil.java

@@ -288,7 +288,8 @@ public class PeriodCalculationUtil {
 
         // 3.2 处理首个周期
         if (currLastDay != null && currLastDay.equals(periodBeginDate) == false) {
-
+            if(currLastDay.isAfter(periodEndDate))
+                currLastDay=periodEndDate;
             if (userMonthDay) {
                 Period period = new Period();
                 period.setPeriodBeginDate(periodBeginDate);