Explorar el Código

合同终止服务开发

zhangyao hace 2 semanas
padre
commit
bdad89b997

+ 9 - 6
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/controller/contractServiceController.java

@@ -461,21 +461,24 @@ public class contractServiceController {
         } else {
             //生效日期之后有审批通过的;
             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 CONTRACT_SERVICE_ID=? AND  PERIOD_END_DATE>=?", new Object[]{serviceId, TerminationDate}) > 0) {
-                String minStart = DBSql.getString("SELECT DATE_FORMAT(MIN(PERIOD_BEGIN_DATE), '%Y-%m-%d') FROM BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD WHERE (APPROVE_AND_POST_USER_ID IS  NULL OR LENGTH(APPROVE_AND_POST_USER_ID)=0) AND APPROVE_AND_POST_DATE IS NULL and CONTRACT_SERVICE_ID=? AND  PERIOD_END_DATE>=?", new Object[]{serviceId, TerminationDate});
-                if (StringUtils.isNotBlank(minStart)) {
-                    SERVICE_END_DATE = getLocalDate(minStart);
+                String maxEnd = DBSql.getString("SELECT DATE_FORMAT(MAX(PERIOD_END_DATE), '%Y-%m-%d') 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  CONTRACT_SERVICE_ID=? AND  PERIOD_END_DATE>=?", new Object[]{serviceId, TerminationDate});
+                if (StringUtils.isNotBlank(maxEnd)) {
+                    SERVICE_END_DATE = getLocalDate(maxEnd).plusDays(1);
                 }
             }
         }
 
+        System.out.println("服务终止日期:" + TerminationDate + "--" + LocalDateYYYYMMDD(SERVICE_END_DATE)); //服务终止日期:2026-02-28--2026-02-01
+
         Connection conn = null;
         try {
             conn = DBSql.open();
             conn.setAutoCommit(false);
 
-
             //  TerminationDate  到  SERVICE_END_DATE 之间的金额要退款
-            List<RowMap> periodList = DBSql.getMaps("select * from BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD where CONTRACT_SERVICE_ID=? AND PERIOD_END_DATE>=? AND PERIOD_BEGIN_DATE<=? ORDER BY PERIOD_BEGIN_DATE", new Object[]{serviceId, TerminationDate, LocalDateYYYYMMDD(SERVICE_END_DATE)});
+            List<RowMap> periodList = DBSql.getMaps(conn, "select * from BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD where CONTRACT_SERVICE_ID=? AND PERIOD_END_DATE>=? AND PERIOD_BEGIN_DATE<=? ORDER BY PERIOD_BEGIN_DATE", new Object[]{serviceId, TerminationDate, LocalDateYYYYMMDD(SERVICE_END_DATE)});
+
+            System.out.println("需要退款个数:" + periodList.size());
 
             for (RowMap period : periodList) {
 
@@ -515,7 +518,7 @@ public class contractServiceController {
                 itemBO.set("PERIOD_ADJUSTED_PRICE", itemBO.get("PERIOD_PRICE"));
                 itemBO.set("PARTYA_PERIOD_PRICE", PARTYA_PERIOD_PRICE.multiply(periodRate));
                 itemBO.set("PERIOD_COST", PERIOD_COST.multiply(periodRate));
-                SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", itemBO, uc);
+                SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", itemBO, uc, conn);
             }
 
             //生效日期之后的服务周期删除

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

@@ -1005,11 +1005,9 @@ public class contractServiceAdj {
 
     /**
      * 将合同服务的采购成本按照服务周期进行分摊处理。
-     * <p>
      * 该方法根据合同服务ID查询相关的付款计划和服务周期数据,
      * 并根据不同服务类型(如一次性收费或分期服务)将付款金额分摊至各个服务周期中。
      * 分摊结果会更新到服务周期表中的 PERIOD_COST 字段。
-     *
      * @param uc 当前用户上下文信息,用于权限控制等用途(当前未使用)
      * @param contractServiceId 合同服务ID,作为主键用于查询相关数据
      */
@@ -1023,12 +1021,14 @@ public class contractServiceAdj {
         // 查询与该合同服务关联的所有付款计划,并按开始时间排序
         List<RowMap> payPlanList = DBSql.getMaps("select * from BO_EU_DNIVT_ORDER_PAYMENT_PLAN_MONTH where CONTRACT_SERVICE_ID=? ORDER BY PERIOD_BEGIN_DATE", new Object[]{contractServiceId});
 
-        if (payPlanList.isEmpty() || payPlanList.size() == 0) return;
+        if (payPlanList.isEmpty() || payPlanList.size() == 0)
+            return;
 
         // 查询与该合同服务对应的服务周期记录,并按开始时间排序
         List<RowMap> contractServicePeriodList = DBSql.getMaps("select * from BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD where CONTRACT_SERVICE_ID=? ORDER BY PERIOD_BEGIN_DATE", new Object[]{contractServiceId});
 
-        if (contractServicePeriodList.isEmpty() || contractServicePeriodList.size() == 0) return;
+        if (contractServicePeriodList.isEmpty() || contractServicePeriodList.size() == 0)
+            return;
 
         // 处理“一次性收费”类型的合同服务:所有付款计划总和直接赋给第一个服务周期的成本
         if (service.getString("PERIOD_TYPE").equals("609")) {