Browse Source

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

HULEI 1 month ago
parent
commit
16ff8adcd2

+ 107 - 9
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/controller/contractCreateController.java

@@ -372,10 +372,8 @@ public class contractCreateController {
     @Mapping(value = "com.awspaas.user.apps.donenow_ctt.contract_service_period")
     public ResponseObject servicePeriod(UserContext uc, String contractId, String serviceIds) {
 
-        if (StringUtils.isBlank(contractId))
-            return ResponseObject.newErrResponse("请选择合同");
-        if (StringUtils.isBlank(serviceIds))
-            return ResponseObject.newErrResponse("请选择合同服务");
+        if (StringUtils.isBlank(contractId)) return ResponseObject.newErrResponse("请选择合同");
+        if (StringUtils.isBlank(serviceIds)) return ResponseObject.newErrResponse("请选择合同服务");
 
         BO contractBO = SDK.getBOAPI().get("BO_EU_DNCTT_CONTRACT", contractId);
 
@@ -395,7 +393,7 @@ public class contractCreateController {
         for (String serviceId : serviceIds.split(",")) {
             BO contraService = SDK.getBOAPI().query("BO_EU_DNCTT_CONTRACT_SERVICE").addQuery("CONTRACT_ID =", contractId).addQuery("ID =", serviceId).detail();
 
-            LocalDate EFFECTIVE_DATE = getLocalDate(contractBO.get("EFFECTIVE_DATE"));//服务生效日期
+            LocalDate EFFECTIVE_DATE = getLocalDate(contraService.get("EFFECTIVE_DATE"));//服务生效日期
             if (EFFECTIVE_DATE == null) {
                 return ResponseObject.newErrResponse("请先设置服务生效日期");
             }
@@ -405,6 +403,8 @@ public class contractCreateController {
             services.add(contraService);
         }
 
+        StringBuilder errMsg = new StringBuilder();
+        StringBuilder succMsg = new StringBuilder();
         Connection conn = null;
         try {
             conn = DBSql.open();
@@ -416,12 +416,98 @@ public class contractCreateController {
                 // 3、服务周期分为调整前和调整后两个周期;生效日期之后按照新的数量、单价重新生成服务周期;
                 contractService.getInstance().AddService(uc, conn, dto, contraService);//保存合同
                 contractService.getInstance().AddContractServiceProductOne(uc, dto, contraService, conn);//新增服务或者服务包--关联产品
+                if (DBSql.getInt(conn, "SELECT count(1) FROM BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD WHERE CONTRACT_SERVICE_ID=? ", new Object[]{contraService.get("ID")}) == 0) {
+                    errMsg.append(contraService.get("NAME") + "生成服务周期失败,");
+                } else {
+                    succMsg.append(contraService.get("NAME") + "生成服务周期成功,");
+                }
+            }
+
+            conn.commit();
+        } catch (SQLException e) {
+
+            e.printStackTrace();
+            try {
+                conn.rollback();
+            } catch (SQLException e1) {
+                e1.printStackTrace();
+            }
+        } finally {
+            if (conn != null) DBSql.close(conn);
+        }
+
+        if (errMsg.length() > 0) {
+            if (succMsg.length() > 0) return ResponseObject.newWarnResponse(succMsg.toString() + errMsg.toString());
+            return ResponseObject.newErrResponse(errMsg.toString());
+        }
+        return ResponseObject.newOkResponse();
+    }
+
+    /***
+     * 生成合同服务成本
+     * @param uc
+     * @param contractId
+     * @param serviceIds
+     * @return
+     */
+    @Mapping(value = "com.awspaas.user.apps.donenow_ctt.contract_service_cost")
+    public ResponseObject serviceCost(UserContext uc, String contractId, String serviceIds) {
+
+        if (StringUtils.isBlank(contractId)) return ResponseObject.newErrResponse("请选择合同");
+        if (StringUtils.isBlank(serviceIds)) return ResponseObject.newErrResponse("请选择合同服务");
+
+        BO contractBO = SDK.getBOAPI().get("BO_EU_DNCTT_CONTRACT", contractId);
+
+        // 1、合同开始日期或结束日期变化
+        LocalDate START_DATE = getLocalDate(contractBO.get("START_DATE"));//服务开始日期
+        LocalDate END_DATE = getLocalDate(contractBO.get("END_DATE"));//合同结束日期
+
+        if (END_DATE == null || START_DATE == null) {
+            return ResponseObject.newErrResponse("请先设置合同计费开始日期和计费结束日期");
+        }
+
+        if (START_DATE.isAfter(END_DATE)) {
+            return ResponseObject.newErrResponse("合同开始日期不能大于结束日期");
+        }
+
+        List<BO> services = new ArrayList<>();
+        for (String serviceId : serviceIds.split(",")) {
+            BO contraService = SDK.getBOAPI().query("BO_EU_DNCTT_CONTRACT_SERVICE").addQuery("CONTRACT_ID =", contractId).addQuery("ID =", serviceId).detail();
+
+            LocalDate EFFECTIVE_DATE = getLocalDate(contraService.get("PURCHASE_START_DATE"));//服务生效日期
+            if (EFFECTIVE_DATE == null) {
+                return ResponseObject.newErrResponse("请先设置采购单开始日期");
+            }
+            if (EFFECTIVE_DATE.isBefore(START_DATE) || EFFECTIVE_DATE.isAfter(END_DATE)) {
+                return ResponseObject.newErrResponse("采购单开始日期必须在合同计费开始日期和结束日期之间");
+            }
+
+            String NEED_PURCHASE = contraService.getString("NEED_PURCHASE");
+            if (NEED_PURCHASE.equals("1") == false) {
+                return ResponseObject.newErrResponse("请选择需要采购的服务");
+            }
+            services.add(contraService);
+        }
 
+        StringBuilder errMsg = new StringBuilder();
+        StringBuilder succMsg = new StringBuilder();
 
-                if (DBSql.getInt("SELECT count(1) FROM BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD WHERE CONTRACT_SERVICE_ID=? ", new Object[]{contraService.get("ID")}) > 0) {
+        Connection conn = null;
+        try {
+            conn = DBSql.open();
+            conn.setAutoCommit(false);
 
+            RowMap dto = new RowMap(contractBO.asMap());
+            for (BO contraService : services) {
+
+                contractService.getInstance().AddContractServiceProductOne(uc, dto, contraService, conn);//新增服务或者服务包--关联产品
+
+                String contractCostId = DBSql.getString(conn, "select ID from BO_EU_DNCTT_CONTRACT_COST where IS_SERVICE_PRODUCT=1 AND  CONTRACT_ID=? and SERVICE_ID=? ", new Object[]{contraService.getString("CONTRACT_ID"), contraService.getString("ID")});
+
+                if (StringUtils.isBlank(contractCostId)) {
+                    errMsg.append(contraService.get("NAME") + "生成服务产品失败,");
                 } else {
-                    return ResponseObject.newErrResponse("生成服务周期失败!");
+                    succMsg.append(contraService.get("NAME") + "生成服务产品成功,");
                 }
             }
 
@@ -435,10 +521,22 @@ public class contractCreateController {
                 e1.printStackTrace();
             }
         } finally {
-            if (conn != null)
-                DBSql.close(conn);
+            if (conn != null) DBSql.close(conn);
+        }
+        if (errMsg.length() > 0) {
+            if (succMsg.length() > 0) return ResponseObject.newWarnResponse(succMsg.toString() + errMsg.toString());
+            return ResponseObject.newErrResponse(errMsg.toString());
         }
+        return ResponseObject.newOkResponse();
+    }
 
+    @Mapping(value = "com.awspaas.user.apps.donenow_ctt.contract_service_add")
+    public ResponseObject serviceAdd(UserContext uc, String contractId) {
+        ProcessInstance processInstance = SDK.getProcessAPI().createProcessInstance("obj_58693e03feac4879901430440b42efd9", uc.getUID(), "合同服务");
+        BO service = new BO();
+        service.setBindId(processInstance.getId());
+        service.set("CONTRACT_ID", contractId);
+        SDK.getBOAPI().create("BO_EU_DNCTT_CONTRACT_SERVICE", service, processInstance, uc);
         return ResponseObject.newOkResponse();
     }
 

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

@@ -1150,6 +1150,33 @@ public class contractService {
 
         if (periodList != null && periodList.size() > 0) {
             String PERIOD = periodList.get(0).getPeriodBeginDateStr() + "~" + periodList.get(periodList.size() - 1).getPeriodEndDateStr();
+
+            BigDecimal UNIT_PRICE_1STMONTH = BigDecimal.ZERO;
+            BigDecimal UNIT_COST_1STMONTH = BigDecimal.ZERO;
+
+            //首月总价需要单独计算   613	按年支付	4591	开通日期所在月
+            if (periodList.size() > 0 && service.get("CALC_METHOD_1STPERIOD").equals("4591")) {
+                //firstRate<1
+                PeriodCalculationUtil.Period period = periodList.get(0);
+                if (period.getRate().compareTo(BigDecimal.ONE) < 0) {
+                    //首月成本需要单独计算
+                    UNIT_PRICE_1STMONTH = toBigDecimal(service.get("UNIT_PRICE_1STMONTH"));
+                    UNIT_PRICE_1STMONTH = period.getRate().multiply(BigDecimal.valueOf(12)).multiply(UNIT_PRICE_1STMONTH);
+
+                    //首期成本怎么算?  在同一个月 和不在 同一个月
+                    LocalDate PURCHASE_START_DATE = service.get("PURCHASE_START_DATE", LocalDate.class);
+
+                    if (EFFECTIVE_DATE.format(DateTimeFormatter.ofPattern("yyyyMM")).equals(PURCHASE_START_DATE.format(DateTimeFormatter.ofPattern("yyyyMM")))) {
+                        UNIT_COST_1STMONTH = toBigDecimal(service.get("UNIT_COST_1STMONTH"));
+                        UNIT_COST_1STMONTH = period.getRate().multiply(BigDecimal.valueOf(12)).multiply(UNIT_COST_1STMONTH);
+                        UNIT_COST_1STMONTH = period.getRate().multiply(UNIT_COST_1STMONTH);
+                    } else {
+                        UNIT_COST_1STMONTH = period.getRate().multiply(SERVICE_TOTAL_COST);
+                    }
+                }
+            }
+
+
             int i = 0;
             for (PeriodCalculationUtil.Period period : periodList) {
 
@@ -1170,7 +1197,9 @@ public class contractService {
                     //firstRate<1
                     if (period.getRate().compareTo(BigDecimal.ONE) < 0) {
 
+                        //跳过
                         //首月成本需要单独计算
+                        /*
                         BigDecimal UNIT_PRICE_1STMONTH = toBigDecimal(service.get("UNIT_PRICE_1STMONTH"));
                         UNIT_PRICE_1STMONTH = period.getRate().multiply(BigDecimal.valueOf(12)).multiply(UNIT_PRICE_1STMONTH);
                         csp.set("PERIOD_PRICE", UNIT_PRICE_1STMONTH);
@@ -1185,15 +1214,28 @@ public class contractService {
                         } else {
                             csp.set("PERIOD_COST", period.getRate().multiply(SERVICE_TOTAL_COST));
                         }
+
+                        */
+
+                        if (periodList.size() == 1) {
+                            csp.set("PERIOD_PRICE", UNIT_PRICE_1STMONTH);
+                            csp.set("PERIOD_COST", UNIT_COST_1STMONTH);
+                        } else {
+                            continue;
+                        }
                     } else {
                         csp.set("PERIOD_PRICE", period.getRate().multiply(SERVICE_TOTAL_PRICE));
                         csp.set("PERIOD_COST", period.getRate().multiply(SERVICE_TOTAL_COST));
                     }
 
                 } else {
-                    csp.set("PERIOD_PRICE", period.getRate().multiply(SERVICE_TOTAL_PRICE));
-
-                    csp.set("PERIOD_COST", period.getRate().multiply(SERVICE_TOTAL_COST));
+                    if (i == 2 && UNIT_PRICE_1STMONTH.compareTo(BigDecimal.ZERO) > 0) {
+                        csp.set("PERIOD_PRICE", period.getRate().multiply(SERVICE_TOTAL_PRICE).add(UNIT_PRICE_1STMONTH));
+                        csp.set("PERIOD_COST", period.getRate().multiply(SERVICE_TOTAL_COST).add(UNIT_COST_1STMONTH));
+                    } else {
+                        csp.set("PERIOD_PRICE", period.getRate().multiply(SERVICE_TOTAL_PRICE));
+                        csp.set("PERIOD_COST", period.getRate().multiply(SERVICE_TOTAL_COST));
+                    }
                 }
 
                 csp.set("PERIOD_ADJUSTED_PRICE", csp.get("PERIOD_PRICE"));
@@ -1970,11 +2012,8 @@ public class contractService {
                     SDK.getProcessAPI().deleteById(contractCostBINDId, uc.getUID());
                     DBSql.update(conn, "delete from BO_EU_DNCTT_CONTRACT_COST where ID=?", new Object[]{contractCostId});
                 }
-
             }
         }
-
-
         return true;
     }
 
@@ -2092,10 +2131,15 @@ public class contractService {
         }
 
 
-        //总价格
-        contractCost.set("EXTENDED_PRICE", DBSql.getDouble(conn, "SELECT SUM(PERIOD_ADJUSTED_PRICE) as PRICE FROM BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD WHERE CONTRACT_SERVICE_ID='" + service.get("SERVICE_ID") + "'", "PRICE"));
+        try {
+            //总价格
+            contractCost.set("EXTENDED_PRICE", DBSql.getDouble(conn, "SELECT SUM(PERIOD_ADJUSTED_PRICE) as PRICE FROM BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD WHERE CONTRACT_SERVICE_ID='" + service.get("SERVICE_ID") + "'", "PRICE"));
+
+            contractCost.set("UNIT_PRICE", divideToBigDecimal(contractCost.get("EXTENDED_PRICE"), contractCost.get("QUANTITY")));
+        } catch (Exception e) {
+
+        }
 
-        contractCost.set("UNIT_PRICE", divideToBigDecimal(contractCost.get("EXTENDED_PRICE"), contractCost.get("QUANTITY")));
 
         if (contractCost.isNew()) {
             //成本子类:合同成本

+ 13 - 11
com.awspaas.user.apps.donenow_ivt/src/com/awspaas/user/apps/donenow_ivt/controller/ivtOrderController.java

@@ -13,6 +13,7 @@ import com.actionsoft.bpms.server.bind.annotation.Controller;
 import com.actionsoft.bpms.server.bind.annotation.Mapping;
 import com.actionsoft.bpms.util.DBSql;
 import com.actionsoft.sdk.local.SDK;
+import com.actionsoft.sdk.local.api.Logger;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -31,6 +32,7 @@ import java.util.stream.Collectors;
 
 @Controller
 public class ivtOrderController {
+    private static final Logger ivtLogger = SDK.getLogAPI().getLogger(ivtOrderController.class);//记录日志
     /**
      * 添加供应商产品
      * @param uc
@@ -448,7 +450,7 @@ public class ivtOrderController {
             map.put("PACKINGS", DBSql.getMaps("SELECT DISTINCT A.CONTRACT_COST_ID AS CONTRACTCOSTID, A.QUANTITY,GROUP_CONCAT( A.SN ) AS SERIALNUMBER , C.`NAME` AS 'PRODUCTNAME' FROM BO_EU_DNCTT_CONTRACT_COST_PRODUCT A JOIN BO_EU_DNCTT_CONTRACT_COST B ON A.CONTRACT_COST_ID=B.ID JOIN BO_EU_DNIVT_PRODUCT C ON B.PRODUCT_ID=C.ID WHERE  FIND_IN_SET(A.ID,?) ", new Object[]{map.get("CONTRACT_COST_IDS")}));
 
         }
-        System.out.println(maps);
+        ivtLogger.info(maps.toString());
 
         ResponseObject responseObject = ResponseObject.newOkResponse();
         responseObject.setData(maps);
@@ -652,7 +654,7 @@ public class ivtOrderController {
         try {
             conn = DBSql.open();
             conn.setAutoCommit(false);
-            System.out.println("接收到的costIds参数: " + costIds);
+            ivtLogger.info("接收到的costIds参数: " + costIds);
 
 // ========== 新增:初始化TAX_CATEGORY_ID与税率的映射关系 ==========
             Map<String, BigDecimal> taxRateMap = new HashMap<>();
@@ -671,7 +673,7 @@ public class ivtOrderController {
             }
             sql = sql.substring(0, sql.length() - 1) + ")";
             List<RowMap> costList = DBSql.getMaps(sql, Arrays.stream(costIdArr).toArray());
-            System.out.println("查询到的合同成本数据条数: " + costList.size());
+            ivtLogger.info("查询到的合同成本数据条数: " + costList.size());
 
             BO purchaseOrder = new BO();
             purchaseOrder.set("SUBMIT_TIME", getCurrentDateTime());
@@ -717,18 +719,18 @@ public class ivtOrderController {
                         cost.put("ACCOUNT_ID", account_id);
                     }
                 }
-                System.out.println("处理的account_id: " + account_id);
+                ivtLogger.info("处理的account_id: " + account_id);
 
                 String PRODUCT_ID = cost.getString("PRODUCT_ID");
                 String vendor_id = DBSql.getString("select VENDOR_ACCOUNT_ID from BO_EU_DNIVT_PRODUCT_VENDOR where PRODUCT_ID=? or BINDID in (select BINDID FROM BO_EU_DNIVT_PRODUCT WHERE ID=?)", new Object[]{PRODUCT_ID, PRODUCT_ID});
                 if (StringUtils.isNotBlank(vendor_id)) {
                     VENDOR_ACCOUNT_ID.add(vendor_id);
                 }
-                System.out.println("处理的vendor_id: " + vendor_id);
+                ivtLogger.info("处理的vendor_id: " + vendor_id);
 
                 int purchase_quantity = cost.getInt("QUANTITY") - DBSql.getInt("select sum(QUANTITY) AS QU from BO_EU_DNCTT_CONTRACT_COST_PRODUCT where CONTRACT_COST_ID=? and CLOSED=0", new Object[]{cost.getString("ID")});
                 if (purchase_quantity <= 0) {
-                    System.out.println("采购数量<=0,跳过该记录,ID: " + cost.getString("ID"));
+                    ivtLogger.info("采购数量<=0,跳过该记录,ID: " + cost.getString("ID"));
                     continue;
                 }
                 cost.put("PURCHASE_QUANTITY", purchase_quantity);
@@ -736,14 +738,14 @@ public class ivtOrderController {
             }
 
             if (validCount < 1) {
-                System.out.println("没有可处理的采购订单记录");
+                ivtLogger.info("没有可处理的采购订单记录");
                 return ResponseObject.newErrResponse("没有可处理的采购订单");
             }
 
             ProcessInstance processInstance;
             try {
                 processInstance = SDK.getProcessAPI().createProcessInstance("obj_795cb3601f3a4b919b5896cf5b076a3a", uc.getUID(), "采购订单");
-                System.out.println("流程实例创建成功,ID: " + processInstance.getId());
+                ivtLogger.info("流程实例创建成功,ID: " + processInstance.getId());
             } catch (Exception e) {
                 System.err.println("流程实例创建失败: " + e.getMessage());
                 throw new RuntimeException("流程实例创建失败", e);
@@ -757,7 +759,7 @@ public class ivtOrderController {
                 purchaseOrder.set("VENDOR_ACCOUNT_ID", VENDOR_ACCOUNT_ID.stream().findFirst().get());
             }
             SDK.getBOAPI().createDataBO("BO_EU_DNIVT_ORDER", purchaseOrder, uc, conn);
-            System.out.println("采购单创建成功,ID: " + purchaseOrder.getId());
+            ivtLogger.info("采购单创建成功,ID: " + purchaseOrder.getId());
 
             for (RowMap cost : costList) {
                 BO purchaseOrderProduct = new BO();
@@ -812,7 +814,7 @@ public class ivtOrderController {
                 purchaseOrderProduct.set("COST_TOTAL_NOTAX", costTotalNotax);
 
                 SDK.getBOAPI().createDataBO("BO_EU_DNIVT_ORDER_PRODUCT", purchaseOrderProduct, uc, conn);
-                System.out.println("采购项创建成功,关联采购单ID: " + purchaseOrder.getId());
+                ivtLogger.info("采购项创建成功,关联采购单ID: " + purchaseOrder.getId());
 
                 String PURCHASE_ORDER_NO = DBSql.getString("SELECT GROUP_CONCAT(PURCHASE_ORDER_NO) FROM " + IVTConstant.BO_EU_DNIVT_ORDER + " WHERE CLOSED=0 AND ID IN (SELECT ORDER_ID FROM BO_EU_DNIVT_ORDER_PRODUCT WHERE CONTRACT_COST_ID=?) ", new Object[]{cost.getString("ID")});
                 DBSql.update(conn, "UPDATE BO_EU_DNCTT_CONTRACT_COST SET PURCHASE_ORDER_NO=? WHERE ID=?", new Object[]{PURCHASE_ORDER_NO, cost.getString("ID")});
@@ -846,7 +848,7 @@ public class ivtOrderController {
             }
 
             List<TaskInstance> taskInstances = SDK.getProcessAPI().start(processInstance).fetchActiveTasks();
-            System.out.println("流程启动成功,活动任务数: " + taskInstances.size());
+            ivtLogger.info("流程启动成功,活动任务数: " + taskInstances.size());
             conn.commit();
 
             if (taskInstances.isEmpty()) {

+ 16 - 3
com.awspaas.user.apps.donenow_ivt/src/com/awspaas/user/apps/donenow_ivt/service/PaymentPlanService.java

@@ -108,11 +108,13 @@ public class PaymentPlanService {
 
                     BigDecimal RATE_TOTAL = periods.stream().map(period -> period.getRate()).reduce(BigDecimal.ZERO, BigDecimal::add);
 
+
+                    BigDecimal UNIT_COST_1STMONTH = BigDecimal.ZERO;
                     //首月总价需要单独计算   613	按年支付	4591	开通日期所在月
-                    if (service.get("PURCHASE_CALC_METHOD_1STPERIOD").equals("4591")) {
+                    if (periods.size() > 0 && service.get("PURCHASE_CALC_METHOD_1STPERIOD").equals("4591")) {
                         PeriodCalculationUtil.Period period = periods.get(0);
                         if (period.getRate().compareTo(BigDecimal.ONE) < 0) {
-                            BigDecimal UNIT_COST_1STMONTH = toBigDecimal(service.get("UNIT_COST_1STMONTH"));
+                            UNIT_COST_1STMONTH = toBigDecimal(service.get("UNIT_COST_1STMONTH"));
                             UNIT_COST_1STMONTH = period.getRate().multiply(BigDecimal.valueOf(12)).multiply(UNIT_COST_1STMONTH);
                             RATE_TOTAL = RATE_TOTAL.subtract(period.getRate());//减去首月
                             COST_TOTAL = COST_TOTAL.subtract(UNIT_COST_1STMONTH);//减去首月
@@ -138,14 +140,25 @@ public class PaymentPlanService {
                         if (i == 1 && service.get("PURCHASE_CALC_METHOD_1STPERIOD").equals("4591")) {
                             //firstRate<1
                             if (period.getRate().compareTo(BigDecimal.ONE) < 0) {
+                                /*
                                 BigDecimal UNIT_COST_1STMONTH = toBigDecimal(service.get("UNIT_COST_1STMONTH"));
                                 UNIT_COST_1STMONTH = period.getRate().multiply(BigDecimal.valueOf(12)).multiply(UNIT_COST_1STMONTH);
                                 paymentPlan.set("PLAN_AMOUNT", period.getRate().multiply(UNIT_COST_1STMONTH));
+                                 */
+                                if (periods.size() == 1) {
+                                    paymentPlan.set("PLAN_AMOUNT", UNIT_COST_1STMONTH);
+                                } else {
+                                    continue;
+                                }
                             } else {
                                 paymentPlan.set("PLAN_AMOUNT", UNIT_COST.multiply(period.getRate()));
                             }
                         } else {
-                            paymentPlan.set("PLAN_AMOUNT", UNIT_COST.multiply(period.getRate()));
+                            if (i == 2 && UNIT_COST_1STMONTH.compareTo(BigDecimal.ZERO) > 0) {
+                                paymentPlan.set("PLAN_AMOUNT", UNIT_COST.multiply(period.getRate()).add(UNIT_COST_1STMONTH));
+                            } else {
+                                paymentPlan.set("PLAN_AMOUNT", UNIT_COST.multiply(period.getRate()));
+                            }
                         }
 
                         paymentPlan.set("REMAIN_AMOUNT", paymentPlan.get("PLAN_AMOUNT"));