Procházet zdrojové kódy

服务周期修改

zhangyao před 3 týdny
rodič
revize
bcdd638d09

+ 5 - 3
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/controller/contractCreateController.java

@@ -621,11 +621,13 @@ public class contractCreateController {
      */
     @Mapping(value = "com.awspaas.user.apps.donenow_ctt.contract_service_exec", session = false, noSessionEvaluate = "无安全隐患", noSessionReason = "批量生产")
     public String contractServicExec() {
-        List<RowMap> services = DBSql.getMaps("SELECT CONTRACT_ID,GROUP_CONCAT(ID) IDS FROM bo_eu_dnctt_contract_service WHERE CONTRACT_ID in (SELECT ID FROM BO_EU_DNCTT_CONTRACT WHERE FRAMEWORK='7c2841c3-8f51-4dea-a6ea-984d9b9c3574' AND NO NOT LIKE '%old%' ) GROUP BY CONTRACT_ID");
-        UserContext uc = UserContext.fromUID("admin");
+
+        List<RowMap> services = DBSql.getMaps("SELECT b.* FROM BO_EU_DNCTT_CONTRACT a JOIN bo_eu_dnctt_contract_service b ON b.CONTRACT_ID=a.ID WHERE a.NAME LIKE '%历峰%' AND b.SERVICE_NAME='网络线路' AND b.CALC_METHOD_1STPERIOD='4599' AND b.CREATEUSER='hulei'");
+
+        UserContext uc = UserContext.fromUID("hulei");
         for (RowMap service : services) {
             String contractId = service.getString("CONTRACT_ID");
-            String serviceIds = service.getString("IDS");
+            String serviceIds = service.getString("ID");
             servicePeriod(uc, contractId, serviceIds);
             serviceCost(uc, contractId, serviceIds);
         }

+ 83 - 2
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/controller/contractServiceController.java

@@ -85,7 +85,7 @@ public class contractServiceController {
         }
 
 
-        if (contractServiceAdj.getInstance().execServiceSaleAdj(uc, boId,false))
+        if (contractServiceAdj.getInstance().execServiceSaleAdj(uc, boId, false))
 
             return ResponseObject.newOkResponse();
 
@@ -138,7 +138,7 @@ public class contractServiceController {
         }
 
 
-        if (contractServiceAdj.getInstance().execServicePurchaseAdj(uc, boId, null,false)) {
+        if (contractServiceAdj.getInstance().execServicePurchaseAdj(uc, boId, null, false)) {
             return ResponseObject.newOkResponse();
         }
         return ResponseObject.newOkResponse();
@@ -169,4 +169,85 @@ public class contractServiceController {
     }
 
 
+    /*
+    @Mapping(value = "com.awspaas.user.apps.donenow_ctt.BO_EU_DNV_RPT_MONTH_PUMA")
+    public ResponseObject BO_EU_DNV_RPT_MONTH_PUMA(UserContext uc, int startAccountPeriod, int endAccountPeriod) {
+
+       // DBSql.update("delete from BO_EU_DNV_RPT_MONTH_PUMA where  userid='" + uc.getUID() + "'");
+
+        DBSql.update("delete from BO_EU_DNV_RPT_MONTH_PUMA ");
+
+        String sql = "INSERT INTO BO_EU_DNV_RPT_MONTH_PUMA \n" +
+                "\tselect t.*,onetime_dollars+tube_dollars+property_manage_dollars+construction_dollars+phone_dollars+datacard_dollars+adsl_dollars as total_dollars,concat(left(item_month,4),QUARTER(concat(item_month,'01')))  as item_quarter,'" + uc.getUID() + "' AS userid from (\n" +
+                "select  item_month,a.CONTRACT_ID,no as contract_no,project_Location,CONTRACT_START_DATE,group_concat(distinct ITEM_MODEL) as ITEM_MODEL,\n" +
+                "ifnull((select sum(ifnull(DOLLARS,0)) from VIEW_EU_DNV_POSTED_ALL where item_month =a.item_month and group_Label=4684 and contract_id=a.contract_id),0)adsl_dollars,-- 宽带服务费\n" +
+                "ifnull((select sum(ifnull(DOLLARS,0)) from VIEW_EU_DNV_POSTED_ALL where item_month =a.item_month and group_Label=4683 and contract_id=a.contract_id),0)onetime_dollars,-- 一次性费用\n" +
+                "ifnull((select sum(ifnull(DOLLARS,0)) from VIEW_EU_DNV_POSTED_ALL where item_month =a.item_month  and group_Label=4685 and contract_id=a.contract_id),0)tube_dollars, -- 物业管道占用费\n" +
+                "ifnull((select sum(ifnull(DOLLARS,0)) from VIEW_EU_DNV_POSTED_ALL where item_month =a.item_month and group_Label=4686 and contract_id=a.contract_id),0)property_manage_dollars,-- 物业管理费\n" +
+                "ifnull((select sum(ifnull(DOLLARS,0)) from VIEW_EU_DNV_POSTED_ALL where item_month =a.item_month  and group_Label=4687 and contract_id=a.contract_id),0)construction_dollars, -- 第三方施工费\n" +
+                "ifnull((select sum(ifnull(DOLLARS,0)) from VIEW_EU_DNV_POSTED_ALL where item_month =a.item_month  and group_Label=4688 and contract_id=a.contract_id),0)phone_dollars, -- 固话非\n" +
+                "ifnull((select sum(ifnull(DOLLARS,0)) from VIEW_EU_DNV_POSTED_ALL where item_month =a.item_month  and group_Label=4689 and contract_id=a.contract_id),0)datacard_dollars, -- 流量卡费\n" +
+                "ifnull((select sum(ifnull(DOLLARS,0)) from VIEW_EU_DNV_POSTED_ALL where item_month =a.item_month  and group_Label=4691 and contract_id= a.contract_id   ),0)datacard_personal_dollars, -- 个人流量卡费\n" +
+                "ifnull((select sum(ifnull(DOLLARS,0)) from VIEW_EU_DNV_POSTED_ALL where item_month =a.item_month  and group_Label=4690 and contract_id=a.contract_id   ),0)vats_service_dollars, -- 代领专票服务费\n" +
+                "ifnull((select sum(ifnull(DOLLARS,0)) from VIEW_EU_DNV_POSTED_ALL where item_month =a.item_month  and item_type=1318  and contract_id=a.contract_id),0)product_dollars -- 物料费\n" +
+                "from VIEW_EU_DNV_POSTED_ALL a   where   account_id='e9358570-f6f3-4a43-9268-ae265f3cc030' \n" +
+                "GROUP BY item_month,a.CONTRACT_ID,no,project_Location,CONTRACT_START_DATE \n" +
+                ")t where t.item_month>=" + startAccountPeriod + " and t.item_month<=" + endAccountPeriod + " order by item_month";
+
+
+        DBSql.update(sql);
+        return ResponseObject.newOkResponse();
+    }
+*/
+    @Mapping(value = "com.awspaas.user.apps.donenow_ctt.BO_EU_DNV_RPT_MONTH_PUMA")
+    public ResponseObject BO_EU_DNV_RPT_MONTH_PUMA(UserContext uc, int startAccountPeriod, int endAccountPeriod) {
+        // 直接执行upsert操作,无需先删除
+        String sql = "INSERT INTO BO_EU_DNV_RPT_MONTH_PUMA \n" +
+                "\tSELECT t.*, onetime_dollars+tube_dollars+property_manage_dollars+construction_dollars+phone_dollars+datacard_dollars+adsl_dollars AS total_dollars, \n" +
+                "\t       CONCAT(LEFT(item_month,4), QUARTER(CONCAT(item_month,'01'))) AS item_quarter, \n" +
+                "\t       '" + uc.getUID() + "' AS userid \n" +
+                "FROM (\n" +
+                "    SELECT item_month, a.CONTRACT_ID, no AS contract_no, project_Location, CONTRACT_START_DATE, \n" +
+                "           GROUP_CONCAT(DISTINCT ITEM_MODEL) AS ITEM_MODEL,\n" +
+                "           IFNULL((SELECT SUM(IFNULL(DOLLARS,0)) FROM VIEW_EU_DNV_POSTED_ALL WHERE item_month = a.item_month AND group_Label = 4684 AND contract_id = a.contract_id), 0) AS adsl_dollars,\n" +
+                "           IFNULL((SELECT SUM(IFNULL(DOLLARS,0)) FROM VIEW_EU_DNV_POSTED_ALL WHERE item_month = a.item_month AND group_Label = 4683 AND contract_id = a.contract_id), 0) AS onetime_dollars,\n" +
+                "           IFNULL((SELECT SUM(IFNULL(DOLLARS,0)) FROM VIEW_EU_DNV_POSTED_ALL WHERE item_month = a.item_month AND group_Label = 4685 AND contract_id = a.contract_id), 0) AS tube_dollars,\n" +
+                "           IFNULL((SELECT SUM(IFNULL(DOLLARS,0)) FROM VIEW_EU_DNV_POSTED_ALL WHERE item_month = a.item_month AND group_Label = 4686 AND contract_id = a.contract_id), 0) AS property_manage_dollars,\n" +
+                "           IFNULL((SELECT SUM(IFNULL(DOLLARS,0)) FROM VIEW_EU_DNV_POSTED_ALL WHERE item_month = a.item_month AND group_Label = 4687 AND contract_id = a.contract_id), 0) AS construction_dollars,\n" +
+                "           IFNULL((SELECT SUM(IFNULL(DOLLARS,0)) FROM VIEW_EU_DNV_POSTED_ALL WHERE item_month = a.item_month AND group_Label = 4688 AND contract_id = a.contract_id), 0) AS phone_dollars,\n" +
+                "           IFNULL((SELECT SUM(IFNULL(DOLLARS,0)) FROM VIEW_EU_DNV_POSTED_ALL WHERE item_month = a.item_month AND group_Label = 4689 AND contract_id = a.contract_id), 0) AS datacard_dollars,\n" +
+                "           IFNULL((SELECT SUM(IFNULL(DOLLARS,0)) FROM VIEW_EU_DNV_POSTED_ALL WHERE item_month = a.item_month AND group_Label = 4691 AND contract_id = a.contract_id), 0) AS datacard_personal_dollars,\n" +
+                "           IFNULL((SELECT SUM(IFNULL(DOLLARS,0)) FROM VIEW_EU_DNV_POSTED_ALL WHERE item_month = a.item_month AND group_Label = 4690 AND contract_id = a.contract_id), 0) AS vats_service_dollars,\n" +
+                "           IFNULL((SELECT SUM(IFNULL(DOLLARS,0)) FROM VIEW_EU_DNV_POSTED_ALL WHERE item_month = a.item_month AND item_type = 1318 AND contract_id = a.contract_id), 0) AS product_dollars\n" +
+                "    FROM VIEW_EU_DNV_POSTED_ALL a\n" +
+                "    WHERE account_id = 'e9358570-f6f3-4a43-9268-ae265f3cc030'\n" +
+                "    GROUP BY item_month, a.CONTRACT_ID, no, project_Location, CONTRACT_START_DATE\n" +
+                ") t \n" +
+                "WHERE t.item_month >= " + startAccountPeriod + " AND t.item_month <= " + endAccountPeriod + "\n" +
+                "ORDER BY item_month\n" +
+                "ON DUPLICATE KEY UPDATE \n" +
+                "    contract_no = VALUES(contract_no),\n" +
+                "    project_Location = VALUES(project_Location),\n" +
+                "    CONTRACT_START_DATE = VALUES(CONTRACT_START_DATE),\n" +
+                "    ITEM_MODEL = VALUES(ITEM_MODEL),\n" +
+                "    adsl_dollars = VALUES(adsl_dollars),\n" +
+                "    onetime_dollars = VALUES(onetime_dollars),\n" +
+                "    tube_dollars = VALUES(tube_dollars),\n" +
+                "    property_manage_dollars = VALUES(property_manage_dollars),\n" +
+                "    construction_dollars = VALUES(construction_dollars),\n" +
+                "    phone_dollars = VALUES(phone_dollars),\n" +
+                "    datacard_dollars = VALUES(datacard_dollars),\n" +
+                "    datacard_personal_dollars = VALUES(datacard_personal_dollars),\n" +
+                "    vats_service_dollars = VALUES(vats_service_dollars),\n" +
+                "    product_dollars = VALUES(product_dollars),\n" +
+                "    total_dollars = VALUES(total_dollars),\n" +
+                "    item_quarter = VALUES(item_quarter),\n" +
+                "    userid = VALUES(userid);";
+
+        contractLogger.info("BO_EU_DNV_RPT_MONTH_PUMA SQL: " + sql);
+
+        DBSql.update(sql);
+        return ResponseObject.newOkResponse();
+    }
+
 }

+ 160 - 0
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/job/ServicePeriodMonthJob.java

@@ -0,0 +1,160 @@
+package com.awspaas.user.apps.donenow_ctt.job;
+
+import com.actionsoft.bpms.bo.engine.BO;
+import com.actionsoft.bpms.commons.database.RowMap;
+import com.actionsoft.bpms.util.DBSql;
+import com.actionsoft.sdk.local.SDK;
+import com.actionsoft.sdk.local.api.Logger;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.LocalDate;
+import java.time.temporal.TemporalAdjusters;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import static com.awspaas.user.apps.donenow_ctt.service.contractService.LocalDateYYYYMMDD;
+import static com.awspaas.user.apps.donenow_ctt.service.contractService.getLocalDate;
+
+public class ServicePeriodMonthJob implements Job {
+    private static final Logger jobLogger = SDK.getLogAPI().getLogger(ServicePeriodMonthJob.class);//记录日志
+
+    /**
+     *把服务周期拆分到每个月
+     * @param jobExecutionContext
+     * @throws JobExecutionException
+     */
+    @Override
+    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+        List<RowMap> servicePeriodlist = DBSql.getMaps("SELECT c.*,b.UNIT_PRICE_MONTH,b.UNIT_PRICE,b.TOTAL_PRICE,b.QUANTITY AS SERVICE_QUANTITY,b.PARTYA_UNIT_PRICE_MONTH,b.PERIOD_TYPE FROM BO_EU_DNCTT_CONTRACT a JOIN bo_eu_dnctt_contract_service b ON b.CONTRACT_ID=a.ID JOIN bo_eu_dnctt_contract_service_period c ON c.CONTRACT_SERVICE_ID=b.ID  WHERE a.NAME LIKE '历峰%' AND a.CLOSED=0 AND ((b.CALC_METHOD_1STPERIOD IS NOT NULL AND b.CALC_METHOD_1STPERIOD>0) OR b.PERIOD_TYPE=609)  ORDER BY c.CONTRACT_SERVICE_ID,c.PERIOD_BEGIN_DATE");
+
+        //AND b.SERVICE_NAME='网络线路' AND b.CALC_METHOD_1STPERIOD='4599'
+
+        List<String> contractServiceIdList = servicePeriodlist.stream().map(k -> k.getString("CONTRACT_SERVICE_ID")).collect(Collectors.toList());
+
+        for (String csID : contractServiceIdList) {
+            DBSql.update("delete from BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD_MONTH where CONTRACT_SERVICE_ID=? ", new Object[]{csID});
+        }
+
+        for (RowMap servicePeriod : servicePeriodlist) {
+
+            double SERVICE_QUANTITY = servicePeriod.getDouble("SERVICE_QUANTITY");
+            double PARTYA_UNIT_PRICE_MONTH = servicePeriod.getDouble("PARTYA_UNIT_PRICE_MONTH");//三方含税单位价格
+            PARTYA_UNIT_PRICE_MONTH = PARTYA_UNIT_PRICE_MONTH * SERVICE_QUANTITY;
+
+            String PERIOD_TYPE = servicePeriod.getString("PERIOD_TYPE");
+            //一次性
+            if (PERIOD_TYPE.equals("609")) {
+                BO itemBO = new BO();
+                itemBO.set("CONTRACT_ID", servicePeriod.get("CONTRACT_ID"));
+                itemBO.set("CONTRACT_SERVICE_ID", servicePeriod.get("CONTRACT_SERVICE_ID"));
+                itemBO.set("QUANTITY", servicePeriod.get("QUANTITY"));
+                itemBO.set("ITEM_MONTH", servicePeriod.getString("PERIOD_BEGIN_DATE").substring(0, 7).replace("-", ""));
+                itemBO.set("CONTRACT_SERVICE_PERIOD_ID", servicePeriod.get("ID"));
+                itemBO.set("PERIOD_BEGIN_DATE", servicePeriod.get("PERIOD_BEGIN_DATE"));
+                itemBO.set("PERIOD_END_DATE", servicePeriod.get("PERIOD_END_DATE"));
+                itemBO.set("PERIOD_PRICE", servicePeriod.get("PERIOD_PRICE"));
+                itemBO.set("PARTYA_PRICE_MONTH", PARTYA_UNIT_PRICE_MONTH);
+                SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD_MONTH", itemBO, null);
+                continue;
+            }
+
+            LocalDate period_begin_date = getLocalDate(servicePeriod.get("PERIOD_BEGIN_DATE"));
+            LocalDate period_end_date = getLocalDate(servicePeriod.get("PERIOD_END_DATE"));
+            double UNIT_PRICE_MONTH = servicePeriod.getDouble("UNIT_PRICE_MONTH");
+            UNIT_PRICE_MONTH = UNIT_PRICE_MONTH * SERVICE_QUANTITY;//每月单位价格
+
+            List<Map<String, String>> monthRateList = getMonthRateList(period_begin_date, period_end_date);
+
+            double rateSum = monthRateList.stream().filter(k -> k.get("rate") != null).mapToDouble(k -> Double.parseDouble(k.get("rate"))).sum();
+            double PERIOD_PRICE = servicePeriod.getDouble("PERIOD_PRICE");
+            double unit_PRICE = PERIOD_PRICE / rateSum;
+
+            jobLogger.info("【服务周期拆分】单价:" + unit_PRICE);
+            jobLogger.info("【服务周期拆分】单价:" + UNIT_PRICE_MONTH);
+
+
+            for (Map<String, String> monthRate : monthRateList) {
+                jobLogger.info("【服务周期拆分】开始日期:" + monthRate.get("start") + " 结束日期:" + monthRate.get("end") + " 占比:" + monthRate.get("rate"));
+
+                BO itemBO = new BO();
+                itemBO.set("CONTRACT_ID", servicePeriod.get("CONTRACT_ID"));
+                itemBO.set("CONTRACT_SERVICE_ID", servicePeriod.get("CONTRACT_SERVICE_ID"));
+                itemBO.set("QUANTITY", servicePeriod.get("QUANTITY"));
+                itemBO.set("ITEM_MONTH", monthRate.get("start").substring(0, 7).replace("-", ""));
+                itemBO.set("CONTRACT_SERVICE_PERIOD_ID", servicePeriod.get("ID"));
+                itemBO.set("PERIOD_BEGIN_DATE", monthRate.get("start"));
+                itemBO.set("PERIOD_END_DATE", monthRate.get("end"));
+                String rate = monthRate.get("rate");
+                double rated = Double.parseDouble(rate);
+
+                itemBO.set("PERIOD_PRICE", unit_PRICE * rated);
+
+                itemBO.set("PARTYA_PRICE_MONTH", PARTYA_UNIT_PRICE_MONTH * rated);
+                SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD_MONTH", itemBO, null);
+            }
+        }
+    }
+
+
+    /**
+     * 计算日期范围内每个涉及月份的【开始日期、结束日期、占比】
+     * @param start 整体开始日期(包含)
+     * @param end 整体结束日期(包含)
+     * @return List<MonthRateVO>:每个元素包含该月的计算开始日、结束日、占比(按月份顺序)
+     */
+    public static List<Map<String, String>> getMonthRateList(LocalDate start, LocalDate end) {
+        // 初始化返回结果(按月份顺序存储)
+        List<Map<String, String>> monthRateList = new ArrayList<>();
+
+        // 校验日期合法性:start不能晚于end
+        if (start.isAfter(end)) {
+            return monthRateList; // 返回空列表,也可抛异常
+        }
+
+        // 步骤1:获取日期范围涉及的所有月份(从start月到end月)
+        LocalDate currentMonthFirstDay = start.with(TemporalAdjusters.firstDayOfMonth());
+        LocalDate endMonthFirstDay = end.with(TemporalAdjusters.firstDayOfMonth());
+
+        // 步骤2:遍历每个月份,计算该月的区间和占比
+        while (!currentMonthFirstDay.isAfter(endMonthFirstDay)) {
+            // 当前月的最后一天
+            LocalDate currentMonthLastDay = currentMonthFirstDay.with(TemporalAdjusters.lastDayOfMonth());
+
+            // 确定当前月的实际计算起始/结束日
+            LocalDate calcStart = currentMonthFirstDay.equals(start.with(TemporalAdjusters.firstDayOfMonth())) ? start // 起始月:从整体start当天开始
+                    : currentMonthFirstDay; // 中间月/结束月:从当月1日开始
+
+            LocalDate calcEnd = currentMonthFirstDay.equals(end.with(TemporalAdjusters.firstDayOfMonth())) ? end // 结束月:到整体end当天结束
+                    : currentMonthLastDay; // 起始月/中间月:到当月最后一天结束
+
+            // 计算当前月内的天数(包含首尾)
+            int daysInMonthForRange = (int) java.time.temporal.ChronoUnit.DAYS.between(calcStart, calcEnd) + 1;
+
+            // 计算当月总天数(按参数选择30天或自然月天数)
+            int totalDaysInMonth = currentMonthLastDay.getDayOfMonth();
+
+            // 计算占比(保留10位小数,四舍五入)
+            BigDecimal monthRate = BigDecimal.valueOf(daysInMonthForRange).divide(BigDecimal.valueOf(totalDaysInMonth), 10, RoundingMode.HALF_UP);
+
+            // 封装到VO对象,加入列表
+            Map<String, String> monthRateMap = new HashMap<>();
+            monthRateMap.put("start", LocalDateYYYYMMDD(calcStart));
+            monthRateMap.put("end", LocalDateYYYYMMDD(calcEnd));
+            monthRateMap.put("rate", monthRate.toString());
+            monthRateList.add(monthRateMap);
+            // 切换到下一个月的第一天
+            currentMonthFirstDay = currentMonthFirstDay.plusMonths(1).with(TemporalAdjusters.firstDayOfMonth());
+        }
+
+        return monthRateList;
+    }
+
+
+}

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

@@ -58,7 +58,7 @@ public class contractServiceAdj {
     public String editServiceSale(UserContext uc, String serviceId, String remark) {
 
         RowMap contractService = null;
-        if (remark==null||!remark.equals("修改结束日期")) {
+        if (remark == null || !remark.equals("修改结束日期")) {
             contractService = DBSql.getMap("SELECT * FROM BO_EU_DNCTT_CONTRACT_SERVICE_SALE_ADJUST WHERE CONTRACT_SERVICE_ID=? AND IS_EFFECTIVE='未执行' ", new Object[]{serviceId});
             //存在未完成的调整单,继续编辑
             if (contractService != null) {
@@ -363,7 +363,10 @@ public class contractServiceAdj {
             BigDecimal result = SERVICE_UNIT_PRICE.divide(BigDecimal.valueOf(periodMonths), 4, // 精度:保留2位小数
                     RoundingMode.HALF_UP // 舍入模式:四舍五入
             );
-            orgContractService.set("SERVICE_UNIT_PRICE", result);
+           // orgContractService.set("SERVICE_UNIT_PRICE", result);
+
+            orgContractService.set("UNIT_PRICE_MONTH", result);
+
 
             RowMap taxCate = DBSql.getMap("SELECT OID,NAME,ORGID,GENERAL_TABLE_ID,EXT1,CLOSED,IS_ACTIVE FROM BO_EU_DND_GENERAL WHERE  GENERAL_TABLE_ID=44 AND ORGID=? AND OID=?", new Object[]{uc.getCompanyModel().getId(), orgContractService.getString("TAX_CATEGORY_ID")}); //税种
 
@@ -377,6 +380,9 @@ public class contractServiceAdj {
 
                 orgContractService.set("UNIT_PRICE_NOTAX", SERVICE_UNIT_PRICE.divide(BigDecimal.ONE.add(taxRate), 4, BigDecimal.ROUND_HALF_UP));
 
+                //月不含税单价 UNIT_PRICE_MONTH_NOTAX
+                orgContractService.set("UNIT_PRICE_MONTH_NOTAX", SERVICE_UNIT_PRICE.divide(BigDecimal.ONE.add(taxRate), 4, BigDecimal.ROUND_HALF_UP).divide(BigDecimal.valueOf(periodMonths), 4, BigDecimal.ROUND_HALF_UP));
+
                 //周期不含税总价 TOTAL_PRICE_NOTAX
                 orgContractService.set("TOTAL_PRICE_NOTAX", SERVICE_TOTAL_PRICE.divide(BigDecimal.ONE.add(taxRate), 4, BigDecimal.ROUND_HALF_UP));
             } else {

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

@@ -15,7 +15,6 @@ import com.actionsoft.bpms.util.DBSql;
 import com.actionsoft.bpms.util.TypeUtil;
 import com.actionsoft.sdk.local.SDK;
 import com.actionsoft.sdk.local.api.Logger;
-import com.actionsoft.sdk.local.api.TaskAPI;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -679,16 +678,17 @@ public class ivtOrderController {
 
     @Mapping(value = "com.awspaas.user.apps.donenow_ivt.contract_serviceOrder_exec2", session = false, noSessionEvaluate = "无安全隐患", noSessionReason = "批量生产")
     public String contractServicExec2() throws SQLException {
-        List<RowMap> services = DBSql.getMaps("SELECT DISTINCT c.ID FROM bo_eu_dnctt_contract_service a JOIN bo_eu_dnivt_order_product b ON a.ID=b.CONTRACT_SERVICE_ID JOIN wfc_task c ON b.BINDID=c.PROCESSINSTID WHERE  c.CONTROLSTATE='active' AND c.TASKSTATE=1  AND a.CONTRACT_ID in (SELECT ID FROM BO_EU_DNCTT_CONTRACT WHERE FRAMEWORK='7c2841c3-8f51-4dea-a6ea-984d9b9c3574' AND NO NOT LIKE '%old%' ) ");
-        UserContext uc = UserContext.fromUID("admin");
+        List<RowMap> services = DBSql.getMaps("SELECT DISTINCT c.ORDER_ID FROM BO_EU_DNCTT_CONTRACT a JOIN bo_eu_dnctt_contract_service b ON b.CONTRACT_ID=a.ID JOIN BO_EU_DNIVT_ORDER_PAYMENT_PLAN c ON c.CONTRACT_SERVICE_ID=b.ID WHERE a.NAME LIKE '%历峰%' AND b.SERVICE_NAME='网络线路' AND b.CALC_METHOD_1STPERIOD='4599' AND b.CREATEUSER='hulei'");
 
-        TaskAPI taskAPI = SDK.getTaskAPI();
+        UserContext uc = UserContext.fromUID("hulei");
 
         for (RowMap service : services) {
-            String taskId = service.getString("ID");
-            taskAPI.completeTask(taskId, "admin");
-        }
 
+            String orderId = service.getString("ORDER_ID");
+
+            PaymentPlanService.getInstance().createPaymentPlan(uc, orderId);
+
+        }
 
 
         return "ok";
@@ -840,7 +840,7 @@ public class ivtOrderController {
 
                 String taxCategoryId = null;
                 //增值税发票,选择是时,才需要展示税率
-                if(StringUtils.isNotBlank(cost.getString("IS_SERVICE_PRODUCT")) && "1".equals(cost.getString("IS_SERVICE_PRODUCT"))){
+                if (StringUtils.isNotBlank(cost.getString("IS_SERVICE_PRODUCT")) && "1".equals(cost.getString("IS_SERVICE_PRODUCT"))) {
                     if (StringUtils.isNotBlank(cost.getString("SERVICE_ID"))) {
                         RowMap serviceMap = DBSql.getMap("select PURCHASE_TAX_CATEGORY_ID,VAT_TAX from BO_EU_DNCTT_CONTRACT_SERVICE where ID=?", new Object[]{cost.getString("SERVICE_ID")});
                         if (serviceMap.getString("VAT_TAX").equals("1")) {
@@ -849,7 +849,7 @@ public class ivtOrderController {
                             taxCategoryId = zeroTaxTaxCateId;
                         }
                     }
-                }else {
+                } else {
                     taxCategoryId = cost.getString("TAX_CATEGORY_ID");
                 }
 
@@ -945,7 +945,7 @@ public class ivtOrderController {
             e.printStackTrace();
             if (conn != null) {
                 try {
-                    conn.rollback();    
+                    conn.rollback();
                 } catch (SQLException ex) {
                     System.err.println("事务回滚异常: " + ex.getMessage());
                 }