Przeglądaj źródła

合同服务bug修复

zhangyao 4 miesięcy temu
rodzic
commit
30be4ea232

+ 4 - 5
aws7信息流修改/form-custom-extend.umd.js

@@ -12366,13 +12366,12 @@ function print() { __p += __j.call(arguments, '') }
                         }).then(perm => {
                             console.log(perm,567765);
                             if (perm.result == "ok" && perm.data && perm.data.length > 0) {
-                                g.sourceTypes = perm.data;
+                                g.sourceTypes = perm.data+","+p.value.sourceType;
                                 u.post({
                                     url: "jd?cmd=com.actionsoft.apps.network_load_stream_by_sourceAndType&msaDefSvcId=crm&sid=" + f.sessionId,
                                     data: g
                                 }).then(S => {
-                                    console.log(S, "res65123321");
-console.log(1289)
+                                    
                                     if (S.result == "ok") {
                                         // 核心数据存储操作(添加按钮标识)
                                         v.converList = v.converList.concat(S.data.page.list.map((T, N) => {
@@ -13450,8 +13449,8 @@ console.log(1289)
                         parentContainer.appendChild(btnContainer);
                     }
                 } else {
-                    console.error('[表单错误] 数据异常:', rd);
-                    d.$message.error(rd.msg || '字段加载失败');
+                    //console.error('[表单错误] 数据异常:', rd);
+                    //d.$message.error(rd.msg || '字段加载失败');
                 }
             }).catch(err => {
                 console.error('[表单错误] 请求异常:', err);

BIN
com.awspaas.user.apps.donenow_ctt/lib/com.awspaas.user.apps.donenow_ctt.jar


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

@@ -159,11 +159,9 @@ public class contractCreateController {
             conn.commit();
         } catch (SQLException e) {
             e.printStackTrace();
-            if (conn != null && !conn.isClosed())
-                conn.rollback();
+            if (conn != null && !conn.isClosed()) conn.rollback();
         } finally {
-            if (conn != null)
-                DBSql.close(conn);
+            if (conn != null) DBSql.close(conn);
         }
         return ResponseObject.newOkResponse();
     }
@@ -177,10 +175,12 @@ public class contractCreateController {
      * @param conn
      */
     private void updateContractCLOSED(UserContext uc, String boName, Map<String, Object> params, Connection conn) {
+        //获取需要删除的数据
         List<BO> boList = SDK.getBOAPI().query(boName).addQuerySqlWhere(" (CONTRACT_ID=:CONTRACT_ID OR BINDID=:BINDID) AND CLOSED=0", params).list();
         for (BO bo : boList) {
-            bo.set("CLOSED", 1);//关闭
-            SDK.getBOAPI().update(boName, bo, conn);
+            //记录删除日志
+            dn.recordFormChanges.deleteBeforeRecord(uc, boName, bo.getId(), "删除", conn);
+            SDK.getBOAPI().remove(boName, bo.getId(), conn);
         }
     }
 

+ 42 - 2
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/event/contractCreateFormAfterSave.java

@@ -1,9 +1,17 @@
 package com.awspaas.user.apps.donenow_ctt.event;
 
+import com.actionsoft.bpms.bo.engine.BO;
 import com.actionsoft.bpms.bpmn.engine.core.delegate.ProcessExecutionContext;
 import com.actionsoft.bpms.bpmn.engine.listener.ExecuteListener;
+import com.actionsoft.bpms.bpmn.engine.listener.ListenerConst;
+import com.actionsoft.bpms.commons.database.RowMap;
+import com.actionsoft.bpms.util.DBSql;
+import com.actionsoft.sdk.local.SDK;
 import com.awspaas.user.apps.donenow_ctt.service.contractService;
 
+import java.sql.Connection;
+import java.sql.SQLException;
+
 public class contractCreateFormAfterSave extends ExecuteListener {
 
     public String getDescription() {
@@ -19,15 +27,47 @@ public class contractCreateFormAfterSave extends ExecuteListener {
     }
 
     /**
-     *
+     * 保存合同
      * @param processExecutionContext
      * @throws Exception
      */
     @Override
     public void execute(ProcessExecutionContext processExecutionContext) throws Exception {
         String bindid = processExecutionContext.getProcessInstance().getId();
+        String boName = processExecutionContext.getParameterOfString(ListenerConst.FORM_EVENT_PARAM_BONAME);
+        if (boName.equals("BO_EU_DNCTT_CONTRACT") && processExecutionContext.getProcessInstance().getProcessDefId().equals("obj_4bac3fd23814406c8d224ef2094ac274"))
+            contractService.getInstance().SaveContract(processExecutionContext.getUserContext(), bindid, false);//保存合同
+
+        if (boName.equals("BO_EU_DNCTT_CONTRACT_SERVICE") && processExecutionContext.getProcessInstance().getProcessDefId().equals("obj_4bac3fd23814406c8d224ef2094ac274")) {
+            System.out.println("保存合同服务--BO_EU_DNCTT_CONTRACT_SERVICE");
+            BO formData = (BO) processExecutionContext.getParameter(ListenerConst.FORM_EVENT_PARAM_FORMDATA);
+            formData = SDK.getBOAPI().get("BO_EU_DNCTT_CONTRACT_SERVICE", formData.getId());
+            if (formData != null) {
+                Connection conn = null;
+                try {
+                    conn = DBSql.open();
+                    conn.setAutoCommit(false);
+                    BO contractBO = SDK.getBOAPI().getByProcess("BO_EU_DNCTT_CONTRACT", bindid);
+                    if (contractBO == null)
+                        contractBO = SDK.getBOAPI().getByProcess("BO_EU_DNCTT_CONTRACT_APPLY", bindid);
+                    RowMap dto = new RowMap(contractBO.asMap());
+
+                    contractService.getInstance().AddContractServiceProduct(processExecutionContext.getUserContext(), dto);//新增服务或者服务包--关联产品
+
+                    contractService.getInstance().AddServiceServiceBundleOne(processExecutionContext.getUserContext(), conn, dto, formData);//保存合同
+                    conn.commit();
+                } catch (SQLException e) {
+
+                    e.printStackTrace();
+                    conn.rollback();
+
+                } finally {
+                    if (conn != null)
+                        DBSql.close(conn);
+                }
+            }
 
-        contractService.getInstance().SaveContract(processExecutionContext.getUserContext(), bindid, false);//保存合同
+        }
 
 
     }

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

@@ -128,8 +128,8 @@ public class contractService {
                 ContractExcManage(uc, bindid);//更新合同例外因素
             }
 
-            if (!isSubmit)
-                return resultDto;
+            //  if (!isSubmit)
+            //     return resultDto;
 
             contractServiceLogger.info("合同提交后,进行数据处理");
 
@@ -261,65 +261,105 @@ public class contractService {
             List<BO> serviceList = SDK.getBOAPI().query("BO_EU_DNCTT_CONTRACT_SERVICE").connection(conn).addQuery("BINDID=", contract.get("BINDID")).list();
 
             for (BO service : serviceList) {
-                boolean isCreate = false;
-                // 1、合同开始日期或结束日期变化
-                LocalDate START_DATE = getLocalDate(contract.get("START_DATE"));//服务开始日期
-                LocalDate END_DATE = getLocalDate(contract.get("END_DATE"));//合同结束日期
-                LocalDate EFFECTIVE_DATE = getLocalDate(service.get("EFFECTIVE_DATE"));//服务生效日期
-                String PERIOD = service.getString("PERIOD");//服务起止日期
-                String ADJUST_PERIOD = service.getString("ADJUST_PERIOD");//服务调整的起止日期
-                if (EFFECTIVE_DATE == null || (StringUtils.isBlank(PERIOD) && StringUtils.isBlank(ADJUST_PERIOD)))
-                    isCreate = true;
+                AddServiceServiceBundleOne(uc, conn, contract, service);
+            }
 
-                if (EFFECTIVE_DATE == null)
-                    EFFECTIVE_DATE = START_DATE;
 
-                if (StringUtils.isNotBlank(ADJUST_PERIOD)) {
-                    LocalDate ADJUST_PERIOD_START = getLocalDate(ADJUST_PERIOD.split("~")[0]);
-                    if (!ADJUST_PERIOD_START.isEqual(EFFECTIVE_DATE)) {
-                        isCreate = true;
-                    }
-                    if (StringUtils.isBlank(PERIOD)) {
-                        LocalDate ADJUST_PERIOD_END = getLocalDate(ADJUST_PERIOD.split("~")[1]);
-                        if (!ADJUST_PERIOD_END.isEqual(END_DATE)) {
-                            isCreate = true;
-                        }
-                    }
+            conn.commit();
+            return true;
+        } catch (SQLException e) {
+            e.printStackTrace();
+            conn.rollback();
+
+            contractServiceLogger.error("AddServiceServiceBundle--error--失败。。。", e);
+
+        } finally {
+            if (conn != null)
+                DBSql.close(conn);
+        }
+        return false;
+    }
+
+
+    /**
+     * 添加服务
+     * @param uc
+     * @param conn
+     * @param contract
+     * @param service
+     * @return
+     */
+    public boolean AddServiceServiceBundleOne(UserContext uc, Connection conn, RowMap contract, BO service) {
+        if (service == null)
+            return false;
+        boolean isCreate = false;
+        // 1、合同开始日期或结束日期变化
+        LocalDate START_DATE = getLocalDate(contract.get("START_DATE"));//服务开始日期
+        LocalDate END_DATE = getLocalDate(contract.get("END_DATE"));//合同结束日期
+        LocalDate EFFECTIVE_DATE = getLocalDate(service.get("EFFECTIVE_DATE"));//服务生效日期
+        String PERIOD = service.getString("PERIOD");//服务起止日期
+        String ADJUST_PERIOD = service.getString("ADJUST_PERIOD");//服务调整的起止日期
+        if (EFFECTIVE_DATE == null || (StringUtils.isBlank(PERIOD) && StringUtils.isBlank(ADJUST_PERIOD)))
+            isCreate = true;
+
+        if (EFFECTIVE_DATE == null) {
+            EFFECTIVE_DATE = START_DATE;
+            isCreate = true;
+        }
+
+        if (StringUtils.isNotBlank(ADJUST_PERIOD)) {
+            LocalDate ADJUST_PERIOD_START = getLocalDate(ADJUST_PERIOD.split("~")[0]);
+            if (!ADJUST_PERIOD_START.isEqual(EFFECTIVE_DATE)) {
+                isCreate = true;
+            }
+            if (StringUtils.isBlank(PERIOD)) {
+                LocalDate ADJUST_PERIOD_END = getLocalDate(ADJUST_PERIOD.split("~")[1]);
+                if (!ADJUST_PERIOD_END.isEqual(END_DATE)) {
+                    isCreate = true;
                 }
+            }
+        }
 
-                if (StringUtils.isNotBlank(PERIOD)) {
-                    LocalDate PERIOD_END = getLocalDate(PERIOD.split("~")[1]);
-                    if (!PERIOD_END.isEqual(END_DATE)) {
-                        isCreate = true;
-                    }
-                    if (StringUtils.isBlank(ADJUST_PERIOD)) {
-                        LocalDate PERIOD_START = getLocalDate(PERIOD.split("~")[0]);
-                        if (!PERIOD_START.isEqual(EFFECTIVE_DATE)) {
-                            isCreate = true;
-                        }
-                    }
+        if (StringUtils.isNotBlank(PERIOD)) {
+            LocalDate PERIOD_END = getLocalDate(PERIOD.split("~")[1]);
+            if (!PERIOD_END.isEqual(END_DATE)) {
+                isCreate = true;
+            }
+            if (StringUtils.isBlank(ADJUST_PERIOD)) {
+                LocalDate PERIOD_START = getLocalDate(PERIOD.split("~")[0]);
+                if (!PERIOD_START.isEqual(EFFECTIVE_DATE)) {
+                    isCreate = true;
                 }
+            }
+        }
 
+        String effectiveDateStr = EFFECTIVE_DATE.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+        effectiveDateStr = "%" + effectiveDateStr + "%";
+        //生效日期修改了
+        if (DBSql.getInt("SELECT count(1) FROM BO_EU_DNCTT_CONTRACT_SERVICE_ADJUST WHERE CONTRACT_SERVICE_ID=? AND EFFECTIVE_DATE LIKE ?", new Object[]{service.get("ID"), effectiveDateStr}) == 0 && DBSql.getInt("SELECT count(1) FROM BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD WHERE CONTRACT_SERVICE_ID=? AND PERIOD_BEGIN_DATE LIKE ?", new Object[]{service.get("ID"), effectiveDateStr}) == 0) {
+            isCreate = true;
+        }
 
-                //2、服务单价或数量变化???
-                if (service.get("ADJUSTED_PRICE") == null || StringUtils.isBlank(service.getString("ADJUSTED_PRICE"))) {
-                    isCreate = true;
-                } else {
-                    BigDecimal ADJUSTED_PRICE = new BigDecimal(service.getString("ADJUSTED_PRICE"));
 
-                    ADJUSTED_PRICE = ADJUSTED_PRICE.setScale(8, RoundingMode.HALF_UP);
+        //2、服务单价或数量变化???
+        if (service.get("ADJUSTED_PRICE") == null || StringUtils.isBlank(service.getString("ADJUSTED_PRICE"))) {
+            isCreate = true;
+        } else {
+            BigDecimal ADJUSTED_PRICE = new BigDecimal(service.getString("ADJUSTED_PRICE"));
+
+            ADJUSTED_PRICE = ADJUSTED_PRICE.setScale(8, RoundingMode.HALF_UP);
 
-                    if (ADJUSTED_PRICE.compareTo(multiply(service.get("QUANTITY"), service.get("UNIT_PRICE"))) != 0) {
-                        isCreate = true;
-                    }
-                }
+            if (ADJUSTED_PRICE.compareTo(multiply(service.get("QUANTITY"), service.get("UNIT_PRICE"))) != 0) {
+                isCreate = true;
+            }
+        }
 
-                if (!isCreate)
-                    continue;
+        if (!isCreate)
+            return true;
 
-                //服务已经审批并提交则不需要重新生成
-                // 暂时不考虑 审批并提交之后修改服务,不需要重新生成
-                if (DBSql.getInt("SELECT count(1) FROM BO_EU_DNCTT_CONTRACT_SERVICE_ADJUST 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) {
+        //服务已经审批并提交则不需要重新生成
+        // 暂时不考虑 审批并提交之后修改服务,不需要重新生成
+        if (DBSql.getInt("SELECT count(1) FROM BO_EU_DNCTT_CONTRACT_SERVICE_ADJUST 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) {
                     /*
                     boolean flag = EditServiceServiceBundle(conn, uc, contract, (RowMap) service.asMap());//调整未审批的服务
                     if (!flag) {
@@ -327,11 +367,11 @@ public class contractService {
                         return false;
                     }
                      */
-                    continue;
-                }
+            return true;
+        }
 
-                //暂时不考虑 审批并提交之后,修改服务,不需要重新生成
-                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) {
+        //暂时不考虑 审批并提交之后,修改服务,不需要重新生成
+        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) {
                     /*
                     boolean flag = EditServiceServiceBundle(conn, uc, contract, (RowMap) service.asMap());//调整未审批的服务
                     if (!flag) {
@@ -340,244 +380,229 @@ public class contractService {
                     }
 
                      */
-                    continue;
-                }
+            return true;
+        }
 
-                //删除历史数据
-                if (StringUtils.isNotBlank(ADJUST_PERIOD)) {
+        //删除历史数据
+        if (StringUtils.isNotBlank(ADJUST_PERIOD)) {
 
-                    List<String> csaIdList = DBSql.getList(conn, "select ID from BO_EU_DNCTT_CONTRACT_SERVICE_ADJUST where BINDID=? and CONTRACT_ID=? and CONTRACT_SERVICE_ID=?", String.class, new Object[]{service.get("BINDID"), contract.get("ID"), service.get("ID")});
+            List<String> csaIdList = DBSql.getList(conn, "select ID from BO_EU_DNCTT_CONTRACT_SERVICE_ADJUST where BINDID=? and CONTRACT_ID=? and CONTRACT_SERVICE_ID=?", String.class, new Object[]{service.get("BINDID"), contract.get("ID"), service.get("ID")});
 
-                    for (String csaId : csaIdList) {
-                        DBSql.update(conn, "delete from BO_EU_DNCTT_CONTRACT_SERVICE_ADJUST_BUNDLE_SERVICE where BINDID=? and CONTRACT_SERVICE_ADJUST_ID=? ", new Object[]{service.get("BINDID"), csaId});
-                    }
+            for (String csaId : csaIdList) {
+                DBSql.update(conn, "delete from BO_EU_DNCTT_CONTRACT_SERVICE_ADJUST_BUNDLE_SERVICE where BINDID=? and CONTRACT_SERVICE_ADJUST_ID=? ", new Object[]{service.get("BINDID"), csaId});
+            }
 
-                    DBSql.update(conn, "delete from BO_EU_DNCTT_CONTRACT_SERVICE_ADJUST where BINDID=? and CONTRACT_ID=? and CONTRACT_SERVICE_ID=?", new Object[]{service.get("BINDID"), contract.get("ID"), service.get("ID")});
-                }
+            DBSql.update(conn, "delete from BO_EU_DNCTT_CONTRACT_SERVICE_ADJUST where BINDID=? and CONTRACT_ID=? and CONTRACT_SERVICE_ID=?", new Object[]{service.get("BINDID"), contract.get("ID"), service.get("ID")});
+        }
 
-                if (StringUtils.isNotBlank(PERIOD)) {
-                    List<String> cspIdList = DBSql.getList(conn, "select ID from BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD where BINDID=? and CONTRACT_ID=? and OBJECT_ID=? and CONTRACT_SERVICE_ID=?", String.class, new Object[]{service.get("BINDID"), contract.get("ID"), service.get("OBJECT_ID"), service.get("ID")});
-                    for (String cspId : cspIdList) {
-                        DBSql.update(conn, "delete from BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD_BUNDLE_SERVICE where BINDID=? and CONTRACT_SERVICE_PERIOD_ID=? ", new Object[]{service.get("BINDID"), cspId});
-                    }
-                    DBSql.update(conn, "delete from BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD where BINDID=? and CONTRACT_ID=? and OBJECT_ID=? and CONTRACT_SERVICE_ID=?", new Object[]{service.get("BINDID"), contract.get("ID"), service.get("OBJECT_ID"), service.get("ID")});
-                }
+        if (StringUtils.isNotBlank(PERIOD)) {
+            List<String> cspIdList = DBSql.getList(conn, "select ID from BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD where BINDID=? and CONTRACT_ID=? and OBJECT_ID=? and CONTRACT_SERVICE_ID=?", String.class, new Object[]{service.get("BINDID"), contract.get("ID"), service.get("OBJECT_ID"), service.get("ID")});
+            for (String cspId : cspIdList) {
+                DBSql.update(conn, "delete from BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD_BUNDLE_SERVICE where BINDID=? and CONTRACT_SERVICE_PERIOD_ID=? ", new Object[]{service.get("BINDID"), cspId});
+            }
+            DBSql.update(conn, "delete from BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD where BINDID=? and CONTRACT_ID=? and OBJECT_ID=? and CONTRACT_SERVICE_ID=?", new Object[]{service.get("BINDID"), contract.get("ID"), service.get("OBJECT_ID"), service.get("ID")});
+        }
 
-                service.set("CONTRACT_ID", contract.get("ID"));
-                service.set("EFFECTIVE_DATE", EFFECTIVE_DATE);//生效日期
+        service.set("CONTRACT_ID", contract.get("ID"));
+        service.set("EFFECTIVE_DATE", EFFECTIVE_DATE);//生效日期
 
-                if (service.getString("OBJECT_TYPE").equals("1"))//服务
-                {
-                    int NEED_PURCHASE = DBSql.getInt(conn, "select NEED_PURCHASE from BO_EU_DNIVT_SERVICE where ID=? ", new Object[]{service.getString("OBJECT_ID")});
+        if (service.getString("OBJECT_TYPE").equals("1"))//服务
+        {
+            int NEED_PURCHASE = DBSql.getInt(conn, "select NEED_PURCHASE from BO_EU_DNIVT_SERVICE where ID=? ", new Object[]{service.getString("OBJECT_ID")});
 
-                    if (NEED_PURCHASE == 1)//需要购买
-                    {
-                        service.set("STATUS_ID", cttConstant.CONTRACT_SERVICE_STATUS_WAIT_INSTALL);//待安装
-                    } else {
-                        service.set("STATUS_ID", cttConstant.CONTRACT_SERVICE_STATUS_NO_INSTALL);//不需要购买
-                    }
-                }
+            if (NEED_PURCHASE == 1)//需要购买
+            {
+                service.set("STATUS_ID", cttConstant.CONTRACT_SERVICE_STATUS_WAIT_INSTALL);//待安装
+            } else {
+                service.set("STATUS_ID", cttConstant.CONTRACT_SERVICE_STATUS_NO_INSTALL);//不需要购买
+            }
+        }
 
-                int maxPeriod = contract.getInt("PERIOD_TYPE") > service.get("PERIOD_TYPE", Integer.class) ? contract.getInt("PERIOD_TYPE") : service.get("PERIOD_TYPE", Integer.class);  // 合同与服务周期类型中较大的周期类型
+        int maxPeriod = contract.getInt("PERIOD_TYPE") > service.get("PERIOD_TYPE", Integer.class) ? contract.getInt("PERIOD_TYPE") : service.get("PERIOD_TYPE", Integer.class);  // 合同与服务周期类型中较大的周期类型
 
-                BigDecimal rate = GetPeriodRate(contract.getString("PERIOD_TYPE"), service.getString("PERIOD_TYPE"));
+        BigDecimal rate = GetPeriodRate(contract.getString("PERIOD_TYPE"), service.getString("PERIOD_TYPE"));
 
-                BigDecimal unit_cost = service.get("UNIT_COST", BigDecimal.class);
-                BigDecimal unit_price = service.get("UNIT_PRICE", BigDecimal.class);
+        BigDecimal unit_cost = service.get("UNIT_COST", BigDecimal.class);
+        BigDecimal unit_price = service.get("UNIT_PRICE", BigDecimal.class);
 
-                // 合同周期更长,服务周期使用合同周期,单价和成本根据周期倍数翻倍
-                if (rate.compareTo(BigDecimal.ONE) > 0) {
-                    unit_cost = unit_cost.multiply(rate);
-                    service.set("UNIT_COST", unit_cost);
-                    unit_price = unit_price.multiply(rate);
-                    service.set("UNIT_PRICE", unit_price);
-                }
+        // 合同周期更长,服务周期使用合同周期,单价和成本根据周期倍数翻倍
+        if (rate.compareTo(BigDecimal.ONE) > 0) {
+            unit_cost = unit_cost.multiply(rate);
+            service.set("UNIT_COST", unit_cost);
+            unit_price = unit_price.multiply(rate);
+            service.set("UNIT_PRICE", unit_price);
+        }
 
-                contractServiceLogger.info("计算-service-ADJUSTED_PRICE");
+        contractServiceLogger.info("计算-service-ADJUSTED_PRICE");
 
-                service.set("ADJUSTED_PRICE", multiply(service.get("QUANTITY"), service.get("UNIT_PRICE")));//总价
+        service.set("ADJUSTED_PRICE", multiply(service.get("QUANTITY"), service.get("UNIT_PRICE")));//总价
 
-                SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_SERVICE", service, conn);//保存
+        SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_SERVICE", service, conn);//保存
 
-                List<String> sbsList = null;
-                String serviceIds = DBSql.getString("select SERVICE_ID from BO_EU_DNIVT_SERVICE_BUNDLE where ID=?", new Object[]{service.get("OBJECT_ID")});
-                if (StringUtils.isNotBlank(serviceIds)) {
-                    sbsList = Arrays.asList(serviceIds.split(","));
-                }
+        List<String> sbsList = null;
+        String serviceIds = DBSql.getString("select SERVICE_ID from BO_EU_DNIVT_SERVICE_BUNDLE where ID=?", new Object[]{service.get("OBJECT_ID")});
+        if (StringUtils.isNotBlank(serviceIds)) {
+            sbsList = Arrays.asList(serviceIds.split(","));
+        }
                 /*
                 if (service.getString("OBJECT_TYPE").equals("2"))//服务包
                     sbsList = DBSql.getMaps(conn, "SELECT * FROM BO_EU_DNIVT_SERVICE_BUNDLE_SERVICE WHERE SERVICE_BUNDLE_ID=?", new Object[]{service.getString("OBJECT_ID")});
                  */
-                String BILL_METHOD_ID = null;//计费方式  4601:自然月  4602:实际月
-                if (service.getString("OBJECT_TYPE").equals("2"))//服务包
-                {
-                    BILL_METHOD_ID = DBSql.getString(conn, "select BILL_METHOD_ID from BO_EU_DNIVT_SERVICE_BUNDLE where ID=?", new Object[]{service.getString("OBJECT_ID")});
-                    // 插入合同服务包对应的服务 ctt_contract_service_bundle_service
-                    if (sbsList != null) {
-                        for (String sbs : sbsList) {
-                            if (DBSql.getInt(conn, "select count(1) from BO_EU_DNCTT_CONTRACT_SERVICE_BUNDLE_SERVICE where SERVICE_ID=? and CONTRACT_SERVICE_ID=?", new Object[]{sbs, service.get("ID")}) == 0) {
-                                BO csbs = new BO();
-                                csbs.set("SERVICE_ID", sbs);
-                                csbs.set("CONTRACT_SERVICE_ID", service.get("ID"));
-                                csbs.setBindId(service.getString("BINDID"));
-                                SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_BUNDLE_SERVICE", csbs, uc, conn);
-                            }
-
-                        }
+        String BILL_METHOD_ID = null;//计费方式  4601:自然月  4602:实际月
+        if (service.getString("OBJECT_TYPE").equals("2"))//服务包
+        {
+            BILL_METHOD_ID = DBSql.getString(conn, "select BILL_METHOD_ID from BO_EU_DNIVT_SERVICE_BUNDLE where ID=?", new Object[]{service.getString("OBJECT_ID")});
+            // 插入合同服务包对应的服务 ctt_contract_service_bundle_service
+            if (sbsList != null) {
+                for (String sbs : sbsList) {
+                    if (DBSql.getInt(conn, "select count(1) from BO_EU_DNCTT_CONTRACT_SERVICE_BUNDLE_SERVICE where SERVICE_ID=? and CONTRACT_SERVICE_ID=?", new Object[]{sbs, service.get("ID")}) == 0) {
+                        BO csbs = new BO();
+                        csbs.set("SERVICE_ID", sbs);
+                        csbs.set("CONTRACT_SERVICE_ID", service.get("ID"));
+                        csbs.setBindId(service.getString("BINDID"));
+                        SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_BUNDLE_SERVICE", csbs, uc, conn);
                     }
-                } else {
-                    BILL_METHOD_ID = DBSql.getString(conn, "select BILL_METHOD_ID from BO_EU_DNIVT_SERVICE where ID=?", new Object[]{service.getString("OBJECT_ID")});
+
                 }
+            }
+        } else {
+            BILL_METHOD_ID = DBSql.getString(conn, "select BILL_METHOD_ID from BO_EU_DNIVT_SERVICE where ID=?", new Object[]{service.getString("OBJECT_ID")});
+        }
 
 
-                String vendor_account_id = DBSql.getString(conn, "select VENDOR_ACCOUNT_ID from BO_EU_DNIVT_SERVICE where ID=?", new Object[]{service.getString("OBJECT_ID")});//供应商账号
+        String vendor_account_id = DBSql.getString(conn, "select VENDOR_ACCOUNT_ID from BO_EU_DNIVT_SERVICE where ID=?", new Object[]{service.getString("OBJECT_ID")});//供应商账号
 
 
-                //如果不是从一号开始,则需要调整到从1号开始
-                if (BILL_METHOD_ID.equals("4601") && START_DATE.getDayOfMonth() != 1) {
-                    //本月底日期
-                    LocalDate currMontLastDay = START_DATE.with(TemporalAdjusters.lastDayOfMonth());
-                    if (currMontLastDay.isBefore(END_DATE))
-                        START_DATE = currMontLastDay.plusDays(1);//周期开始日期
-                }
+        //如果不是从一号开始,则需要调整到从1号开始
+        if (StringUtils.isNotBlank(BILL_METHOD_ID) && BILL_METHOD_ID.equals("4601") && START_DATE.getDayOfMonth() != 1) {
+            //本月底日期
+            LocalDate currMontLastDay = START_DATE.with(TemporalAdjusters.lastDayOfMonth());
+            if (currMontLastDay.isBefore(END_DATE))
+                START_DATE = currMontLastDay.plusDays(1);//周期开始日期
+        }
 
-                // 计算首周期起止日期,并判断是否需要新增服务调整记录
-                Map<String, Object> firstPeriodDate = getFirstPeriodDate(START_DATE, END_DATE, EFFECTIVE_DATE, contract.getString("PERIOD_TYPE"), service.getString("PERIOD_TYPE"));
-                boolean isStartOfPeriod = (boolean) firstPeriodDate.get("isStartOfPeriod");
-                // 合同服务的周期起止日期
-                LocalDate start = getLocalDate(firstPeriodDate.get("periodStart"));
-                LocalDate end = getLocalDate(firstPeriodDate.get("periodEnd"));
-                ADJUST_PERIOD = null;
-
-                contractServiceLogger.info("getFirstPeriodDate" + firstPeriodDate.toString());
-
-                //增加服务周期调整
-                if (!isStartOfPeriod) {
-                    LocalDate periodEnd = getNextPeriodStart(start, String.valueOf(maxPeriod)).minusDays(1);//周期结束日期
-                    BigDecimal periodRate = divideToBigDecimal(GetPeriodDays(EFFECTIVE_DATE, end), GetPeriodDays(start, periodEnd));    // 首周期占整周期比例
-                    BO csa = new BO();//合同服务调整
-                    csa.set("CONTRACT_ID", contract.get("ID"));
-                    csa.set("OBJECT_ID", service.get("ID"));
-                    csa.set("OBJECT_TYPE", service.get("OBJECT_TYPE"));
-                    csa.set("QUANTITY_CHANGE", service.get("QUANTITY"));
-                    csa.set("CONTRACT_SERVICE_ID", service.get("ID"));
-                    csa.set("EFFECTIVE_DATE", EFFECTIVE_DATE);
-                    csa.set("END_DATE", end);
-
-                    ADJUST_PERIOD = LocalDateYYYYMMDD(EFFECTIVE_DATE) + "~" + LocalDateYYYYMMDD(end);
-
-                    csa.set("PRORATED_COST_CHANGE", service.get("ADJUSTED_PRICE"));
-
-                    contractServiceLogger.info("计算-csa-ADJUST_PRORATED_PRICE_CHANGE");
-                    csa.set("ADJUST_PRORATED_PRICE_CHANGE", multiply(service.get("ADJUSTED_PRICE"), periodRate));
-                    csa.set("PRORATED_PRICE_CHANGE", csa.get("ADJUST_PRORATED_PRICE_CHANGE"));
-                    csa.set("VENDOR_ACCOUNT_ID", vendor_account_id);
-                    csa.setBindId(service.getString("BINDID"));
-                    SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_ADJUST", csa, uc, conn);
-
-                    // 插入服务调整表包含的服务ctt_contract_service_adjust_bundle_service
-                    if (service.getString("OBJECT_TYPE").equals("2"))//服务包
-                    {
-                        //本周期成本
-                        String prorated_cost_change = DBSql.getString(conn, "select UNIT_COST from BO_EU_DNIVT_SERVICE where ID=?", new Object[]{service.getString("OBJECT_ID")});//供应商账号
-
-                        if (sbsList != null) {
-                            for (String sbs : sbsList) {
-                                BO csabs = new BO();
-                                csabs.set("CONTRACT_SERVICE_ADJUST_ID", csa.getId());
-                                csabs.set("SERVICE_ID", sbs);
-                                csabs.set("VENDOR_ACCOUNT_ID", vendor_account_id);
-                                csabs.set("PRORATED_COST_CHANGE", prorated_cost_change);
-                                csabs.setBindId(service.getString("BINDID"));
-                                SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_ADJUST_BUNDLE_SERVICE", csabs, uc, conn);
-                            }
-                        }
+        // 计算首周期起止日期,并判断是否需要新增服务调整记录
+        Map<String, Object> firstPeriodDate = getFirstPeriodDate(START_DATE, END_DATE, EFFECTIVE_DATE, contract.getString("PERIOD_TYPE"), service.getString("PERIOD_TYPE"));
+        boolean isStartOfPeriod = (boolean) firstPeriodDate.get("isStartOfPeriod");
+        // 合同服务的周期起止日期
+        LocalDate start = getLocalDate(firstPeriodDate.get("periodStart"));
+        LocalDate end = getLocalDate(firstPeriodDate.get("periodEnd"));
+        ADJUST_PERIOD = null;
+
+        contractServiceLogger.info("getFirstPeriodDate" + firstPeriodDate.toString());
+
+        //增加服务周期调整
+        if (!isStartOfPeriod) {
+            LocalDate periodEnd = getNextPeriodStart(start, String.valueOf(maxPeriod)).minusDays(1);//周期结束日期
+            BigDecimal periodRate = divideToBigDecimal(GetPeriodDays(EFFECTIVE_DATE, end), GetPeriodDays(start, periodEnd));    // 首周期占整周期比例
+            BO csa = new BO();//合同服务调整
+            csa.set("CONTRACT_ID", contract.get("ID"));
+            csa.set("OBJECT_ID", service.get("ID"));
+            csa.set("OBJECT_TYPE", service.get("OBJECT_TYPE"));
+            csa.set("QUANTITY_CHANGE", service.get("QUANTITY"));
+            csa.set("CONTRACT_SERVICE_ID", service.get("ID"));
+            csa.set("EFFECTIVE_DATE", EFFECTIVE_DATE);
+            csa.set("END_DATE", end);
+
+            ADJUST_PERIOD = LocalDateYYYYMMDD(EFFECTIVE_DATE) + "~" + LocalDateYYYYMMDD(end);
+
+            csa.set("PRORATED_COST_CHANGE", service.get("ADJUSTED_PRICE"));
+
+            contractServiceLogger.info("计算-csa-ADJUST_PRORATED_PRICE_CHANGE");
+            csa.set("ADJUST_PRORATED_PRICE_CHANGE", multiply(service.get("ADJUSTED_PRICE"), periodRate));
+            csa.set("PRORATED_PRICE_CHANGE", csa.get("ADJUST_PRORATED_PRICE_CHANGE"));
+            csa.set("VENDOR_ACCOUNT_ID", vendor_account_id);
+            csa.setBindId(service.getString("BINDID"));
+            SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_ADJUST", csa, uc, conn);
+
+            // 插入服务调整表包含的服务ctt_contract_service_adjust_bundle_service
+            if (service.getString("OBJECT_TYPE").equals("2"))//服务包
+            {
+                //本周期成本
+                String prorated_cost_change = DBSql.getString(conn, "select UNIT_COST from BO_EU_DNIVT_SERVICE where ID=?", new Object[]{service.getString("OBJECT_ID")});//供应商账号
+
+                if (sbsList != null) {
+                    for (String sbs : sbsList) {
+                        BO csabs = new BO();
+                        csabs.set("CONTRACT_SERVICE_ADJUST_ID", csa.getId());
+                        csabs.set("SERVICE_ID", sbs);
+                        csabs.set("VENDOR_ACCOUNT_ID", vendor_account_id);
+                        csabs.set("PRORATED_COST_CHANGE", prorated_cost_change);
+                        csabs.setBindId(service.getString("BINDID"));
+                        SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_ADJUST_BUNDLE_SERVICE", csabs, uc, conn);
                     }
-                    start = end.plusDays(1);     // 周期开始日期指
                 }
+            }
+            start = end.plusDays(1);     // 周期开始日期指
+        }
 
-                PERIOD = null;
-                //生成服务周期
-                if (start.isBefore(END_DATE)) {
-                    PERIOD = LocalDateYYYYMMDD(start);
-                    //循环添加全部周期
-                    while (!start.isAfter(END_DATE)) {
-                        BigDecimal periodRate = BigDecimal.ONE;
-                        LocalDate periodEnd = getNextPeriodStart(start, String.valueOf(maxPeriod)).minusDays(1);//本周期结束时间
-                        if (periodEnd.isAfter(END_DATE)) {//如果结束日期大于合同结束日期,则计算结束日期和合同结束日期的差值,并计算该差值占整周期的比例
-                            periodRate = divideToBigDecimal(GetPeriodDays(start, END_DATE), GetPeriodDays(start, periodEnd));
-                            periodEnd = END_DATE;
-                        }
+        PERIOD = null;
+        //生成服务周期
+        if (start.isBefore(END_DATE)) {
+            PERIOD = LocalDateYYYYMMDD(start);
+            //循环添加全部周期
+            while (!start.isAfter(END_DATE)) {
+                BigDecimal periodRate = BigDecimal.ONE;
+                LocalDate periodEnd = getNextPeriodStart(start, String.valueOf(maxPeriod)).minusDays(1);//本周期结束时间
+                if (periodEnd.isAfter(END_DATE)) {//如果结束日期大于合同结束日期,则计算结束日期和合同结束日期的差值,并计算该差值占整周期的比例
+                    periodRate = divideToBigDecimal(GetPeriodDays(start, END_DATE), GetPeriodDays(start, periodEnd));
+                    periodEnd = END_DATE;
+                }
 
-                        BO csp = new BO();//服务周期
-                        csp.set("CONTRACT_ID", contract.get("ID"));
-                        csp.set("OBJECT_ID", service.get("OBJECT_ID"));
-                        csp.set("OBJECT_TYPE", service.get("OBJECT_TYPE"));
-                        csp.set("CONTRACT_SERVICE_ID", service.get("ID"));
-
-                        csp.set("PERIOD_BEGIN_DATE", start);
-                        csp.set("PERIOD_END_DATE", periodEnd);
-                        csp.set("QUANTITY", service.get("QUANTITY"));
-
-                        contractServiceLogger.info("计算-csp-PERIOD_PRICE");
-                        BigDecimal period_price = multiply(service.get("UNIT_PRICE"), service.get("QUANTITY"));
-                        period_price = periodRate.multiply(period_price);
-                        csp.set("PERIOD_PRICE", period_price);
-
-                        contractServiceLogger.info("计算-csp-PERIOD_COST");
-                        BigDecimal period_cost = multiply(service.get("PERIOD_COST"), service.get("QUANTITY"));
-                        period_cost = periodRate.multiply(period_cost);
-                        csp.set("PERIOD_COST", period_cost);
-
-                        csp.set("PERIOD_ADJUSTED_PRICE", csp.get("PERIOD_PRICE"));
-
-                        csp.set("VENDOR_ACCOUNT_ID", vendor_account_id);
-                        csp.setBindId(service.getString("BINDID"));
-                        SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", csp, uc, conn);
-
-                        if (service.getString("OBJECT_TYPE").equals("2"))//服务包
-                        {
-                            //本周期成本
-                            String prorated_cost_change = DBSql.getString(conn, "select UNIT_COST from BO_EU_DNIVT_SERVICE where ID=?", new Object[]{service.getString("OBJECT_ID")});//供应商账号
-                            if (sbsList != null) {
-                                for (String sbs : sbsList) {
-                                    BO cspbs = new BO();
-                                    cspbs.set("CONTRACT_SERVICE_PERIOD_ID", csp.getId());
-                                    cspbs.set("SERVICE_ID", sbs);
-                                    cspbs.set("VENDOR_ACCOUNT_ID", vendor_account_id);
-                                    cspbs.set("PERIOD_COST", prorated_cost_change);
-                                    cspbs.setBindId(service.getString("BINDID"));
-                                    SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD_BUNDLE_SERVICE", cspbs, uc, conn);
-                                }
-                            }
-                        }
+                BO csp = new BO();//服务周期
+                csp.set("CONTRACT_ID", contract.get("ID"));
+                csp.set("OBJECT_ID", service.get("OBJECT_ID"));
+                csp.set("OBJECT_TYPE", service.get("OBJECT_TYPE"));
+                csp.set("CONTRACT_SERVICE_ID", service.get("ID"));
 
-                        if (periodEnd != null) {
-                            start = periodEnd.plusDays(1);
-                        }
-                    }
+                csp.set("PERIOD_BEGIN_DATE", start);
+                csp.set("PERIOD_END_DATE", periodEnd);
+                csp.set("QUANTITY", service.get("QUANTITY"));
 
-                    PERIOD = PERIOD + "~" + LocalDateYYYYMMDD(END_DATE);
-                }
+                contractServiceLogger.info("计算-csp-PERIOD_PRICE");
+                BigDecimal period_price = multiply(service.get("UNIT_PRICE"), service.get("QUANTITY"));
+                period_price = periodRate.multiply(period_price);
+                csp.set("PERIOD_PRICE", period_price);
 
-                //更新合同服务上的
-                DBSql.update(conn, "update BO_EU_DNCTT_CONTRACT_SERVICE set PERIOD=?,ADJUST_PERIOD=? where ID=? and BINDID=?", new Object[]{PERIOD, ADJUST_PERIOD, service.get("ID"), service.get("BINDID")});
-            }
+                contractServiceLogger.info("计算-csp-PERIOD_COST");
+                BigDecimal period_cost = multiply(service.get("PERIOD_COST"), service.get("QUANTITY"));
+                period_cost = periodRate.multiply(period_cost);
+                csp.set("PERIOD_COST", period_cost);
 
+                csp.set("PERIOD_ADJUSTED_PRICE", csp.get("PERIOD_PRICE"));
 
-            conn.commit();
-            return true;
-        } catch (SQLException e) {
-            e.printStackTrace();
-            conn.rollback();
+                csp.set("VENDOR_ACCOUNT_ID", vendor_account_id);
+                csp.setBindId(service.getString("BINDID"));
+                SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", csp, uc, conn);
 
-            contractServiceLogger.error("AddServiceServiceBundle--error--失败。。。", e);
+                if (service.getString("OBJECT_TYPE").equals("2"))//服务包
+                {
+                    //本周期成本
+                    String prorated_cost_change = DBSql.getString(conn, "select UNIT_COST from BO_EU_DNIVT_SERVICE where ID=?", new Object[]{service.getString("OBJECT_ID")});//供应商账号
+                    if (sbsList != null) {
+                        for (String sbs : sbsList) {
+                            BO cspbs = new BO();
+                            cspbs.set("CONTRACT_SERVICE_PERIOD_ID", csp.getId());
+                            cspbs.set("SERVICE_ID", sbs);
+                            cspbs.set("VENDOR_ACCOUNT_ID", vendor_account_id);
+                            cspbs.set("PERIOD_COST", prorated_cost_change);
+                            cspbs.setBindId(service.getString("BINDID"));
+                            SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD_BUNDLE_SERVICE", cspbs, uc, conn);
+                        }
+                    }
+                }
 
-        } finally {
-            if (conn != null)
-                DBSql.close(conn);
+                if (periodEnd != null) {
+                    start = periodEnd.plusDays(1);
+                }
+            }
+
+            PERIOD = PERIOD + "~" + LocalDateYYYYMMDD(END_DATE);
         }
-        return false;
+
+        //更新合同服务上的
+        DBSql.update(conn, "update BO_EU_DNCTT_CONTRACT_SERVICE set PERIOD=?,ADJUST_PERIOD=? where ID=? and BINDID=?", new Object[]{PERIOD, ADJUST_PERIOD, service.get("ID"), service.get("BINDID")});
+        return true;
     }
 
     /**
@@ -598,7 +623,7 @@ public class contractService {
      * @param uc
      * @return
      */
-    private boolean AddContractServiceProduct(UserContext uc, RowMap contract) throws SQLException {
+    public boolean AddContractServiceProduct(UserContext uc, RowMap contract) throws SQLException {
         contractServiceLogger.info("新增服务或服务包");
 
         Connection conn = null;
@@ -610,6 +635,7 @@ public class contractService {
 
             for (BO service : serviceList) {
 
+                String PRODUCT_ID = null;
                 if (service.getString("OBJECT_TYPE").equals("2"))//服务包
                 {
                     String serviceIDS = DBSql.getString(conn, "select SERVICE_ID from BO_EU_DNIVT_SERVICE_BUNDLE where ID=?", new Object[]{service.getString("OBJECT_ID")});
@@ -621,7 +647,8 @@ public class contractService {
                         contractCost.put("SERVICE_ID", service.getString("ID"));
                         contractCost.put("serviceID", serviceID);
                         contractCost.put("CONTRACT_ID", contract.getString("ID"));
-                        AddContractServiceProduct(uc, conn, contractCost);
+                        contractCost.put("QUANTITY", service.getString("QUANTITY"));
+                        PRODUCT_ID = AddContractServiceProduct(uc, conn, contractCost);
                     }
                 } else {
                     String contractCostId = DBSql.getString(conn, "select ID from BO_EU_DNCTT_CONTRACT_COST where CONTRACT_ID=? and SERVICE_ID=?", new Object[]{contract.getString("ID"), service.getString("ID")});
@@ -630,8 +657,10 @@ public class contractService {
                     contractCost.put("SERVICE_ID", service.getString("ID"));
                     contractCost.put("serviceID", service.getString("OBJECT_ID"));
                     contractCost.put("CONTRACT_ID", contract.getString("ID"));
-                    AddContractServiceProduct(uc, conn, contractCost);
+                    contractCost.put("QUANTITY", service.getString("QUANTITY"));
+                    PRODUCT_ID = AddContractServiceProduct(uc, conn, contractCost);
                 }
+
             }
             conn.commit();
             return true;
@@ -652,7 +681,7 @@ public class contractService {
      * @param service
      * @return
      */
-    private boolean AddContractServiceProduct(UserContext uc, Connection conn, Map<String, String> service) {
+    private String AddContractServiceProduct(UserContext uc, Connection conn, Map<String, String> service) {
         contractServiceLogger.info("新增合同产品");
         System.out.println(service);
         BO contractCost = null;
@@ -668,24 +697,29 @@ public class contractService {
         contractCost.set("SERVICE_ID", service.get("SERVICE_ID"));
         contractCost.set("PRODUCT_ID", DBSql.getString(conn, "select PRODUCT_ID from BO_EU_DNIVT_SERVICE where ID=?", new Object[]{service.get("serviceID")}));
 
-        BO product = SDK.getBOAPI().get("BO_EU_DNIVT_PRODUCT", contractCost.getString("PRODUCT_ID"));
+        if (StringUtils.isNotBlank(contractCost.getString("PRODUCT_ID"))) {
+            BO product = SDK.getBOAPI().get("BO_EU_DNIVT_PRODUCT", contractCost.getString("PRODUCT_ID"));
 
-        contractCost.set("NAME", product.getString("NAME"));
+            if (product != null) {
+                contractCost.set("NAME", product.getString("NAME"));
+                contractCost.set("DESCRIPTION", product.getString("DESCRIPTION"));
+                contractCost.set("COST_CODE_ID", product.getString("COST_CODE_ID"));
+                contractCost.set("UNIT_COST", product.getString("UNIT_COST"));
+                contractCost.set("UNIT_PRICE", product.getString("UNIT_PRICE"));
+                contractCost.set("PRODUCT_NAME", product.getString("NAME"));
 
-        contractCost.set("DESCRIPTION", product.getString("DESCRIPTION"));
-        contractCost.set("COST_CODE_ID", product.getString("COST_CODE_ID"));
-        contractCost.set("UNIT_COST", product.getString("UNIT_COST"));
-        contractCost.set("UNIT_PRICE", product.getString("UNIT_PRICE"));
-        contractCost.set("TAX_CATEGORY_ID", DBSql.getString("select TAX_CATEGORY_ID from BO_EU_DND_COST_CODE where ID=?", new Object[]{product.getString("COST_CODE_ID")}));
-        contractCost.set("COST_CODE_NAME", DBSql.getString("select NAME from BO_EU_DND_COST_CODE where ID=?", new Object[]{product.getString("COST_CODE_ID")}));
-        contractCost.set("PRODUCT_NAME", product.getString("NAME"));
+                contractCost.set("TAX_CATEGORY_ID", DBSql.getString("select TAX_CATEGORY_ID from BO_EU_DND_COST_CODE where OID=?", new Object[]{product.getString("COST_CODE_ID")}));
+                contractCost.set("COST_CODE_NAME", DBSql.getString("select NAME from BO_EU_DND_COST_CODE where OID=?", new Object[]{product.getString("COST_CODE_ID")}));
+            }
+        }
 
         if (contractCost.isNew()) {
             SDK.getBOAPI().create("BO_EU_DNCTT_CONTRACT_COST", contractCost, contractCost.getBindId(), uc.getUID());
         } else {
             SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_COST", contractCost);
         }
-        return false;
+
+        return contractCost.getId();
     }
 
     private static String LocalDateYYYYMMDD(LocalDate date) {
@@ -768,10 +802,9 @@ public class contractService {
         LocalDate end;
 
         if (serviceEffect.isBefore(start)) {
-
             dto.put("periodStart", serviceEffect);
             dto.put("periodEnd", start.minusDays(1));
-            dto.put("isStartOfPeriod", true);
+            dto.put("isStartOfPeriod", false);
             // 返回结果
             return dto;
         }
@@ -942,16 +975,19 @@ public class contractService {
         // 判断排除费用代码是否为空,如果为空,则清空排除费用代码
         if (StringUtils.isBlank(exclusionCostCode)) {
             //清空
-            DBSql.update("UPDATE BO_EU_DNCTT_CONTRACT_EXCLUSION_COST_CODE SET CLOSED =1 WHERE BINDID = ? OR CONTRACT_ID=?", new Object[]{rowMap.getString("ID"), rowMap.getString("BINDID")});
+            //DBSql.update("UPDATE BO_EU_DNCTT_CONTRACT_EXCLUSION_COST_CODE SET CLOSED =1 WHERE BINDID = ? OR CONTRACT_ID=?", new Object[]{rowMap.getString("ID"), rowMap.getString("BINDID")});
+            DBSql.update("DELETE FROM BO_EU_DNCTT_CONTRACT_EXCLUSION_COST_CODE WHERE BINDID = ? OR CONTRACT_ID=?", new Object[]{rowMap.getString("ID"), rowMap.getString("BINDID")});
         } else {
             String[] exclusionCostCodeArr = exclusionCostCode.split(",");
             for (String costCode : exclusionCostCodeArr) {
+                /*
                 String ccID = DBSql.getString("SELECT ID FROM BO_EU_DNCTT_CONTRACT_EXCLUSION_COST_CODE WHERE (BINDID =? OR CONTRACT_ID=?) AND COST_CODE_ID = ?", new Object[]{rowMap.getString("BINDID"), rowMap.getString("ID"), costCode});
                 //更新
                 if (StringUtils.isNotBlank(ccID)) {
                     DBSql.update("UPDATE BO_EU_DNCTT_CONTRACT_EXCLUSION_COST_CODE SET CLOSED =0,BINDID =?,CONTRACT_ID=? WHERE ID = ?", new Object[]{rowMap.getString("BINDID"), rowMap.getString("ID"), ccID});
                     continue;
                 }
+                 */
                 //新增
                 BO bo = new BO();
                 bo.set("BINDID", rowMap.getString("BINDID"));
@@ -961,21 +997,27 @@ public class contractService {
             }
 
             //删除
-            DBSql.update("UPDATE BO_EU_DNCTT_CONTRACT_EXCLUSION_COST_CODE SET CLOSED =1 WHERE (BINDID = ? OR CONTRACT_ID=?) AND COST_CODE_ID NOT IN (?)", new Object[]{rowMap.getString("BINDID"), rowMap.getString("ID"), exclusionCostCode});
+            //DBSql.update("UPDATE BO_EU_DNCTT_CONTRACT_EXCLUSION_COST_CODE SET CLOSED =1 WHERE (BINDID = ? OR CONTRACT_ID=?) AND COST_CODE_ID NOT IN (?)", new Object[]{rowMap.getString("BINDID"), rowMap.getString("ID"), exclusionCostCode});
+
+            DBSql.update("DELETE FROM BO_EU_DNCTT_CONTRACT_EXCLUSION_COST_CODE WHERE (BINDID = ? OR CONTRACT_ID=?) AND COST_CODE_ID NOT IN (?)", new Object[]{rowMap.getString("BINDID"), rowMap.getString("ID"), exclusionCostCode});
         }
 
         if (StringUtils.isBlank(exclusionRole)) {
             //清空
-            DBSql.update("UPDATE BO_EU_DNCTT_CONTRACT_EXCLUSION_ROLE SET CLOSED =1 WHERE BINDID = ? OR CONTRACT_ID=?", new Object[]{rowMap.getString("BINDID"), rowMap.getString("ID")});
+            // DBSql.update("UPDATE BO_EU_DNCTT_CONTRACT_EXCLUSION_ROLE SET CLOSED =1 WHERE BINDID = ? OR CONTRACT_ID=?", new Object[]{rowMap.getString("BINDID"), rowMap.getString("ID")});
+            DBSql.update("DELETE FROM BO_EU_DNCTT_CONTRACT_EXCLUSION_ROLE WHERE BINDID = ? OR CONTRACT_ID=?", new Object[]{rowMap.getString("BINDID"), rowMap.getString("ID")});
         } else {
             String[] exclusionRoleArr = exclusionRole.split(",");
             for (String role : exclusionRoleArr) {
+                /*
                 String roleID = DBSql.getString("SELECT ID FROM BO_EU_DNCTT_CONTRACT_EXCLUSION_ROLE WHERE (BINDID =? OR CONTRACT_ID=?) AND ROLE_ID = ?", new Object[]{rowMap.getString("BINDID"), rowMap.getString("ID"), role});
                 //更新
                 if (StringUtils.isNotBlank(roleID)) {
                     DBSql.update("UPDATE BO_EU_DNCTT_CONTRACT_EXCLUSION_ROLE SET CLOSED =0,BINDID =?,CONTRACT_ID=? WHERE ID = ?", new Object[]{rowMap.getString("BINDID"), rowMap.getString("ID"), roleID});
                     continue;
                 }
+
+                 */
                 //新增
                 BO bo = new BO();
                 bo.set("BINDID", rowMap.getString("BINDID"));
@@ -985,7 +1027,8 @@ public class contractService {
             }
 
             //删除
-            DBSql.update("UPDATE BO_EU_DNCTT_CONTRACT_EXCLUSION_ROLE SET CLOSED =1 WHERE (BINDID = ? OR CONTRACT_ID=?) AND ROLE_ID NOT IN (?)", new Object[]{rowMap.getString("BINDID"), rowMap.getString("ID"), exclusionRole});
+            // DBSql.update("UPDATE BO_EU_DNCTT_CONTRACT_EXCLUSION_ROLE SET CLOSED =1 WHERE (BINDID = ? OR CONTRACT_ID=?) AND ROLE_ID NOT IN (?)", new Object[]{rowMap.getString("BINDID"), rowMap.getString("ID"), exclusionRole});
+            DBSql.update("DELETE FROM BO_EU_DNCTT_CONTRACT_EXCLUSION_ROLE WHERE (BINDID = ? OR CONTRACT_ID=?) AND ROLE_ID NOT IN (?)", new Object[]{rowMap.getString("BINDID"), rowMap.getString("ID"), exclusionRole});
         }
         return true;
     }

+ 29 - 2
com.awspaas.user.apps.donenow_ivt/src/com/awspaas/user/apps/donenow_ivt/controller/IVTController.java

@@ -15,6 +15,8 @@ import com.awspaas.user.apps.donenow_ivt.constant.IVTConstant;
 import com.awspaas.user.apps.donenow_ivt.utils.BigDecimalUtil;
 import me.chanjar.weixin.common.util.StringUtils;
 
+import java.sql.Connection;
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
@@ -371,8 +373,33 @@ public class IVTController extends BaseController {
         if (bo.getString("QUANTITY").equals("0") == false)
             return fail("库存数量不为零,不能删除!");
 
-        SDK.getBOAPI().removeByBindId(IVTConstant.BO_EU_DNIVT_WAREHOUSE_PRODUCT, bo.getBindId());
-        SDK.getBOAPI().removeByBindId(IVTConstant.BO_EU_DNIVT_WAREHOUSE_PRODUCT_LOT, bindId);
+        Connection conn = null;
+        try {
+            conn = DBSql.open();
+            conn.setAutoCommit(false);
+
+            //记录删除日志
+            dn.recordFormChanges.deleteByBindidBeforeRecord(uc, IVTConstant.BO_EU_DNIVT_WAREHOUSE_PRODUCT, bindId, "删除", conn);
+            dn.recordFormChanges.deleteByBindidBeforeRecord(uc, IVTConstant.BO_EU_DNIVT_WAREHOUSE_PRODUCT_LOT, bindId, "删除", conn);
+
+            SDK.getBOAPI().removeByBindId(IVTConstant.BO_EU_DNIVT_WAREHOUSE_PRODUCT, bindId, conn);
+            SDK.getBOAPI().removeByBindId(IVTConstant.BO_EU_DNIVT_WAREHOUSE_PRODUCT_LOT, bindId, conn);
+
+            conn.commit();
+        } catch (SQLException e) {
+            e.printStackTrace();
+            try {
+                if (conn != null && !conn.isClosed())
+                    conn.rollback();
+            } catch (SQLException e1) {
+
+            }
+        } catch (Exception e) {
+
+        } finally {
+            if (conn != null)
+                DBSql.close(conn);
+        }
 
         return success("删除成功!");
     }

BIN
com.awspaas.user.apps.donenow_sys/lib/com.awspaas.user.apps.donenow_sys.jar


+ 1 - 1
com.awspaas.user.apps.donenow_sys/src/com/awspaas/user/apps/donenow_sys/controller/udfController.java

@@ -497,7 +497,7 @@ public class udfController {
 
         map.put("6b277817-a32a-46db-8a94-11970a81d1e1", "SALESORDER");//销售订单备注-查询
         map.put("784690e1-b925-4bbe-ae21-ba9f11520ea2", "BUSINESS");//商机备注-查询
-        map.put("857c1cd4-e70e-4c49-8a99-5f4ce4e0f982", "WORKORDER");//工单 备注-查询
+        map.put("857c1cd4-e70e-4c49-8a99-5f4ce4e0f982", "TASK");//工单 备注-查询
         map.put("f8e1f132-95c4-46c1-8f1e-bcf13902bb72", "ADDRESS");//客户地址备注-查询
 
 

+ 19 - 2
com.awspaas.user.apps.donenow_sys/src/com/awspaas/user/apps/donenow_sys/event/GeneralDeactivate.java

@@ -1,5 +1,7 @@
 package com.awspaas.user.apps.donenow_sys.event;
 
+import com.actionsoft.bpms.bo.design.cache.BOCache;
+import com.actionsoft.bpms.bo.design.model.BOModel;
 import com.actionsoft.bpms.bo.engine.BO;
 import com.actionsoft.bpms.bpmn.engine.core.delegate.ProcessExecutionContext;
 import com.actionsoft.bpms.bpmn.engine.listener.ListenerConst;
@@ -40,12 +42,14 @@ public class GeneralDeactivate extends ValueListener {
         // Ajax方式
         ResponseObject ro = ResponseObject.newOkResponse();
         boolean r = true;// 针对业务进行处理
-        System.out.println("productCancle");
+
+        /*
         System.out.println("注销");
         System.out.println("boId:" + boId);
         System.out.println("formId:" + formId);
         System.out.println("boName:" + boName);
         System.out.println("rowData:" + rowData);
+         */
 
         List<String> Ids = new ArrayList<>();
 
@@ -64,6 +68,13 @@ public class GeneralDeactivate extends ValueListener {
                 }
                 Ids.add(id);
             }
+
+            if (StringUtils.isBlank(boName)) {
+                BOModel model = BOCache.getInstance().getModel(rowDataJson.getString("boDefId"));
+                //System.out.println("BOModel:" + model.toJson());
+                boName = model.getName();
+            }
+
         }
 
         if (Ids.size() == 0) {
@@ -71,6 +82,7 @@ public class GeneralDeactivate extends ValueListener {
             return ro.toString();
         }
         Connection conn = null;
+        int updateCount = 0;
         try {
             conn = DBSql.open();
             conn.setAutoCommit(false);
@@ -84,7 +96,9 @@ public class GeneralDeactivate extends ValueListener {
                 params.put("ID", id);
                 params.put("CLOSED", 1);
                 dn.recordFormChanges.record(ctx.getUserContext(), boName, params, "注销", conn);//记录操作日志
-                SDK.getBOAPI().update(boName, bo, conn);
+                if (SDK.getBOAPI().update(boName, bo, conn) > 0) {
+                    updateCount++;
+                }
             }
             conn.commit();
         } catch (SQLException e) {
@@ -103,6 +117,9 @@ public class GeneralDeactivate extends ValueListener {
                 DBSql.close(conn);
         }
 
+        if (updateCount != Ids.size())
+            r = false;
+
         // 处理业务逻辑成功时
         if (r) {
             ro.msg("成功");// 返回给服务器的消息

BIN
libs/dn_form_before_save.jar