HULEI 2 ماه پیش
والد
کامیت
29dba8da59

+ 139 - 142
com.awspaas.user.apps.donenow_crm/src/com/awspaas/user/apps/donenow_crm/controller/accountController.java

@@ -9,6 +9,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.JSONObject;
 import com.awspaas.user.apps.donenow_crm.constant.CrmConstant;
@@ -24,6 +25,8 @@ import java.util.Map;
 
 @Controller
 public class accountController extends BaseController {
+    private static final Logger logger = SDK.getLogAPI().getLogger(accountController.class);//记录日志
+
     /**
      * 删除客户
      * @param uc
@@ -33,15 +36,13 @@ public class accountController extends BaseController {
      */
     @Mapping(value = "com.awspaas.user.apps.donenow_DelAccount")
     public ResponseObject delAccount(UserContext uc, String ids) throws SQLException {
-        if (StringUtils.isBlank(ids))
-            return ResponseObject.newErrResponse("请选择要删除的数据");
+        if (StringUtils.isBlank(ids)) return ResponseObject.newErrResponse("请选择要删除的数据");
 
         String tableName = "BO_EU_DNCRM_ACCOUNT";
 
         //引用校验
         String result = verifyDel(tableName, ids);
-        if (result != null)
-            return ResponseObject.newErrResponse(result);
+        if (result != null) return ResponseObject.newErrResponse(result);
 
         Connection conn = null;
         try {
@@ -65,8 +66,7 @@ public class accountController extends BaseController {
 
                     //删除 组织中对应的用户
                     String userId = DBSql.getString(conn, "SELECT USERID FROM orguser WHERE ext5=? AND CLOSED=0 ", new Object[]{contact.getId()});
-                    if (StringUtils.isNotBlank(userId))
-                        SDK.getORGAPI().disabledUser(userId);//禁用组织中用户
+                    if (StringUtils.isNotBlank(userId)) SDK.getORGAPI().disabledUser(userId);//禁用组织中用户
                 }
 
                 List<BO> installedProducts = SDK.getBOAPI().query("BO_EU_DNCRM_INSTALLED_PRODUCT").addQuery("ACCOUNT_ID=", id).addQuery("CLOSED=", 0).list();
@@ -91,8 +91,7 @@ public class accountController extends BaseController {
         } catch (Exception e) {
             return ResponseObject.newErrResponse(e.getMessage());
         } finally {
-            if (conn != null)
-                DBSql.close(conn);
+            if (conn != null) DBSql.close(conn);
         }
         return ResponseObject.newOkResponse();
     }
@@ -116,15 +115,13 @@ public class accountController extends BaseController {
      */
     @Mapping(value = "com.awspaas.user.apps.donenow_DelContact")
     public ResponseObject delContact(UserContext uc, String ids) throws SQLException {
-        if (StringUtils.isBlank(ids))
-            return ResponseObject.newErrResponse("请选择要删除的数据");
+        if (StringUtils.isBlank(ids)) return ResponseObject.newErrResponse("请选择要删除的数据");
 
         String tableName = "BO_EU_DNCRM_CONTACT";
 
         //引用校验
         String result = verifyDel(tableName, ids);
-        if (result != null)
-            return ResponseObject.newErrResponse(result);
+        if (result != null) return ResponseObject.newErrResponse(result);
 
         Connection conn = null;
         try {
@@ -143,7 +140,7 @@ public class accountController extends BaseController {
                     throw new Exception("该联系人有关联的工单或任务");
                 }
 
-                if (DBSql.getInt(conn, "SELECT COUNT(*) from BO_EU_DNCOM_ACTIVITY where CREATEUSER=(SELECT USERID FROM orguser WHERE ext5=? AND CLOSED=0 ) and closed=0", new Object[]{id}) > 0) {
+                if (DBSql.getInt(conn, "SELECT COUNT(*) from BO_EU_DNCOM_ACTIVITY where CREATEUSER=(SELECT USERID FROM orguser WHERE ext5=? ) ", new Object[]{id}) > 0) {
                     throw new Exception("该联系人在自助服务台创建过工单备注");
                 }
 /*
@@ -169,8 +166,7 @@ public class accountController extends BaseController {
 
                 //删除 组织中对应的用户
                 String userId = DBSql.getString(conn, "SELECT USERID FROM orguser WHERE ext5=? AND CLOSED=0 ", new Object[]{contact.getId()});
-                if (StringUtils.isNotBlank(userId))
-                    SDK.getORGAPI().disabledUser(userId);//禁用组织中用户
+                if (StringUtils.isNotBlank(userId)) SDK.getORGAPI().disabledUser(userId);//禁用组织中用户
 
                 //配置项逻辑删除
                 List<BO> installedProducts = SDK.getBOAPI().query("BO_EU_DNCRM_INSTALLED_PRODUCT").addQuery("CONTACT_ID=", id).addQuery("CLOSED=", 0).list();
@@ -189,8 +185,7 @@ public class accountController extends BaseController {
         } catch (Exception e) {
             return ResponseObject.newErrResponse(e.getMessage());
         } finally {
-            if (conn != null)
-                DBSql.close(conn);
+            if (conn != null) DBSql.close(conn);
         }
         return ResponseObject.newOkResponse();
 
@@ -206,15 +201,13 @@ public class accountController extends BaseController {
     @Mapping(value = "com.awspaas.user.apps.donenow_DelInstallProd")
     public ResponseObject delInstallProd(UserContext uc, String ids) throws SQLException {
 
-        if (StringUtils.isBlank(ids))
-            return ResponseObject.newErrResponse("请选择要删除的数据");
+        if (StringUtils.isBlank(ids)) return ResponseObject.newErrResponse("请选择要删除的数据");
 
         String tableName = "BO_EU_DNCRM_INSTALLED_PRODUCT";
 
         //引用校验
         String result = verifyDel(tableName, ids);
-        if (result != null)
-            return ResponseObject.newErrResponse(result);
+        if (result != null) return ResponseObject.newErrResponse(result);
 
         Connection conn = null;
         try {
@@ -247,8 +240,7 @@ public class accountController extends BaseController {
         } catch (Exception e) {
             return ResponseObject.newErrResponse(e.getMessage());
         } finally {
-            if (conn != null)
-                DBSql.close(conn);
+            if (conn != null) DBSql.close(conn);
         }
 
         return ResponseObject.newOkResponse();
@@ -265,15 +257,13 @@ public class accountController extends BaseController {
     @Mapping(value = "com.awspaas.user.apps.donenow_delLocation")
     public ResponseObject delLocation(UserContext uc, String ids) throws SQLException {
 
-        if (StringUtils.isBlank(ids))
-            return ResponseObject.newErrResponse("请选择要删除的数据");
+        if (StringUtils.isBlank(ids)) return ResponseObject.newErrResponse("请选择要删除的数据");
 
         String tableName = "BO_EU_DNCRM_LOCATION";
 
         //引用校验
         String result = verifyDel(tableName, ids);
-        if (result != null)
-            return ResponseObject.newErrResponse(result);
+        if (result != null) return ResponseObject.newErrResponse(result);
 
         Connection conn = null;
         try {
@@ -297,8 +287,7 @@ public class accountController extends BaseController {
         } catch (Exception e) {
             return ResponseObject.newErrResponse(e.getMessage());
         } finally {
-            if (conn != null)
-                DBSql.close(conn);
+            if (conn != null) DBSql.close(conn);
         }
 
         return ResponseObject.newOkResponse();
@@ -312,11 +301,20 @@ public class accountController extends BaseController {
             sql = verify.getString("SEL_SQL");
             for (String id : ids.split(",")) {
                 id = DBSql.getString("select ID from " + tableName + " where ID=?", new Object[]{id});
-                String sqlById = sql.replace("**id**", "'" + id + "'");
+                if (StringUtils.isBlank(id) || id.length() < 2) continue;
+
+                //String sqlById = sql.replace("**id**", "'" + id + "'");
+                String sqlById = sql.replaceAll("\\*\\*id\\*\\*", "'" + id + "'");
+
+                logger.info("BO_EU_DNSYS_DELETE_VERIFY----" + sqlById);
+
                 List<RowMap> list = DBSql.getMaps(sqlById);
                 if (!list.isEmpty()) {
-                    String errMsg = null;
+                    String errMsg = StringUtils.EMPTY;
                     for (RowMap rowMap : list) {
+                        if (rowMap.containsKey("name")) rowMap.put("NAME", rowMap.get("name"));
+                        if (rowMap.containsKey("num")) rowMap.put("NUM", rowMap.get("num"));
+
                         errMsg += rowMap.getString("NAME") + rowMap.getString("NUM") + "\r\n";
                     }
                     return "删除失败,被以下数据引用:\r\n" + errMsg;
@@ -327,115 +325,114 @@ public class accountController extends BaseController {
     }
 
     @Mapping("com.awspaas.user.apps.donenow_crm.querydepartment")
-	    public String findPchSelect(String accountId,UserContext uc) {
-	       RowMap map = DBSql.getMap("SELECT * FROM orgdepartment WHERE EXT1=?", new Object[] {accountId});
-	       if(map==null) {
-	    	  return fail("���ȱ�����������"); 
-	       }
-		 return success("����ɹ�");
-	      
-	    }
-	 
-	 
-	 @Mapping("com.awspaas.user.apps.donenow_crm.queryhtml")
-	    public String queryhtml(String cateId,String objectId,UserContext uc) {
-		 System.out.println("cateId:"+cateId);
-		 System.out.println("objectId:"+objectId);
-
-		   Map<String, Object> map = new HashMap<>();
-		   map.put("uid", uc.getUID());
-		   map.put("sid", uc.getSessionId());
-		   map.put("cateId", cateId);
-		   map.put("objectId", objectId);
-		   
-		   String ORGID = uc.getCompanyModel().getId();
-			 System.out.println("ORGID:"+ORGID);
-			 //��ѯ����������
-			BO detail = SDK.getBOAPI().query(CrmConstant.BO_EU_DNSYS_UDF_GROUP).detailById(cateId);
-			if(null==detail) {
-				return StringUtils.EMPTY;
-			}
-			 //��ѯ�����������Զ����ֶΣ�����EXTTEXT5
-			List<BO> fieldList = SDK.getBOAPI().query(CrmConstant.BO_EU_DNSYS_UDF_GROUP_FIELD).bindId(detail.getBindId()).list();
-			List<String> list=new ArrayList<String>();
-			for (BO bo : fieldList) {
-				list.add("'"+bo.getString("UDF_FIELD_COL_NAME")+"'");
-			}
-			//����������Ϣȥ�Զ������Ա��в�ѯ�����ֶ���Ϣ������ǰ��ƴ�ӳ�ҳ��
-			String fieldSql="SELECT * FROM "+CrmConstant.BO_EU_DNSYS_UDF_FIELD+" WHERE COL_NAME IN ("+org.apache.commons.lang3.StringUtils.join(list, ",")+") AND ORGID=? AND CATE_ID="+CrmConstant.PZXID+"  ORDER BY SORT_ORDER";
-		   List<RowMap> udfList = DBSql.getMaps(fieldSql, new Object[] { ORGID }); 
-		   System.out.println("sql2:"+fieldSql);
-
-		   map.put("formTitle", "�������Զ����ֶ�");
-		   
-		   List<Map<String, Object>> colFields = new ArrayList<>();
-		   
-		   //��ѯ���ñ�洢����
-		   BO object=SDK.getBOAPI().query(CrmConstant.BO_EU_DNCRM_INSTALLED_PRODUCT).detailById(objectId);
-		   for (RowMap udf : udfList) {
-		     Map<String, Object> field = new HashMap<>();
-		     String COL_NAME = udf.getString("COL_NAME");
-		     
-		     field.put("name", COL_NAME);
-		     if (object != null) {
-		    	   field.put("value", object.getString(COL_NAME));
-		    	     } else {
-		    	     field.put("value", udf.getString("DEFAULT_VALUE"));
-		    	      } 
-		     String DATA_TYPE_ID = udf.getString("DATA_TYPE_ID");
-		     
-		     field.put("type", DATA_TYPE_ID);
-		     if (DATA_TYPE_ID.equals("530")) {
-		       
-		       String sql = udf.getString("SQL_CONFIG");
-		       
-		       if (sql.contains("@")) {
-		         sql = SDK.getRuleAPI().executeAtScript(sql, uc);
-		       }
-		       List<RowMap> list2 = DBSql.getMaps(sql, new Object[0]);
-		       
-		       field.put("list", list2);
-		     } 
-		     
-		     field.put("comment", udf.getString("COL_COMMENT"));
-		     field.put("readonly", udf.getString("IS_PROTECTED"));
-		     field.put("required", udf.getString("IS_REQUIRED"));
-		     
-		     colFields.add(field);
-		   } 
-		   
-		   map.put("colFields", JSON.toJSONString(colFields));
-		   
-		   return HtmlPageTemplate.merge("CONF.html", map);
-		 }
-	 
-	 @Mapping("com.awspaas.user.apps.donenow_crm_save")
-	    public ResponseObject udfSave(UserContext userContext, String cateId, String objectId, String data) throws Exception {
-	      System.out.println("cateId=" + cateId + " objectId=" + objectId);
-	      System.out.println(data);
-	      JSONObject json = JSON.parseObject(data);
-	     String set = "";
-	     List<String> values = new ArrayList<>();
-	     for (String key : json.keySet()) {
-	      String value = json.getString(key);
-	      	if(StringUtils.isBlank(value))
-	      		value="";
-	      	if(value.contains("[")&&value.length()>4) {
-	   		 value=value.substring(2, 3);
-	      	}
-	         set = set + key + "=?,";
-	         values.add(value);
-	     } 
-	     values.add(objectId);
-	
-	    
-	     String sql = "update " + CrmConstant.BO_EU_DNCRM_INSTALLED_PRODUCT + " set " + set.substring(0, set.length() - 1) + " where id=?";
-	      System.out.println("updateBO_EU_DNCRM_INSTALLED_PRODUCTSql:"+sql);
-
-	     DBSql.update(sql, values.toArray());
-	     
-	     return ResponseObject.newOkResponse("����ɹ�");
-   }
-	 
-	
+    public String findPchSelect(String accountId, UserContext uc) {
+        RowMap map = DBSql.getMap("SELECT * FROM orgdepartment WHERE EXT1=?", new Object[]{accountId});
+        if (map == null) {
+            return fail("���ȱ�����������");
+        }
+        return success("����ɹ�");
+
+    }
+
+
+    @Mapping("com.awspaas.user.apps.donenow_crm.queryhtml")
+    public String queryhtml(String cateId, String objectId, UserContext uc) {
+        System.out.println("cateId:" + cateId);
+        System.out.println("objectId:" + objectId);
+
+        Map<String, Object> map = new HashMap<>();
+        map.put("uid", uc.getUID());
+        map.put("sid", uc.getSessionId());
+        map.put("cateId", cateId);
+        map.put("objectId", objectId);
+
+        String ORGID = uc.getCompanyModel().getId();
+        System.out.println("ORGID:" + ORGID);
+        //��ѯ����������
+        BO detail = SDK.getBOAPI().query(CrmConstant.BO_EU_DNSYS_UDF_GROUP).detailById(cateId);
+        if (null == detail) {
+            return StringUtils.EMPTY;
+        }
+        //��ѯ�����������Զ����ֶΣ�����EXTTEXT5
+        List<BO> fieldList = SDK.getBOAPI().query(CrmConstant.BO_EU_DNSYS_UDF_GROUP_FIELD).bindId(detail.getBindId()).list();
+        List<String> list = new ArrayList<String>();
+        for (BO bo : fieldList) {
+            list.add("'" + bo.getString("UDF_FIELD_COL_NAME") + "'");
+        }
+        //����������Ϣȥ�Զ������Ա��в�ѯ�����ֶ���Ϣ������ǰ��ƴ�ӳ�ҳ��
+        String fieldSql = "SELECT * FROM " + CrmConstant.BO_EU_DNSYS_UDF_FIELD + " WHERE COL_NAME IN (" + org.apache.commons.lang3.StringUtils.join(list, ",") + ") AND ORGID=? AND CATE_ID=" + CrmConstant.PZXID + "  ORDER BY SORT_ORDER";
+        List<RowMap> udfList = DBSql.getMaps(fieldSql, new Object[]{ORGID});
+        System.out.println("sql2:" + fieldSql);
+
+        map.put("formTitle", "�������Զ����ֶ�");
+
+        List<Map<String, Object>> colFields = new ArrayList<>();
+
+        //��ѯ���ñ�洢����
+        BO object = SDK.getBOAPI().query(CrmConstant.BO_EU_DNCRM_INSTALLED_PRODUCT).detailById(objectId);
+        for (RowMap udf : udfList) {
+            Map<String, Object> field = new HashMap<>();
+            String COL_NAME = udf.getString("COL_NAME");
+
+            field.put("name", COL_NAME);
+            if (object != null) {
+                field.put("value", object.getString(COL_NAME));
+            } else {
+                field.put("value", udf.getString("DEFAULT_VALUE"));
+            }
+            String DATA_TYPE_ID = udf.getString("DATA_TYPE_ID");
+
+            field.put("type", DATA_TYPE_ID);
+            if (DATA_TYPE_ID.equals("530")) {
+
+                String sql = udf.getString("SQL_CONFIG");
+
+                if (sql.contains("@")) {
+                    sql = SDK.getRuleAPI().executeAtScript(sql, uc);
+                }
+                List<RowMap> list2 = DBSql.getMaps(sql, new Object[0]);
+
+                field.put("list", list2);
+            }
+
+            field.put("comment", udf.getString("COL_COMMENT"));
+            field.put("readonly", udf.getString("IS_PROTECTED"));
+            field.put("required", udf.getString("IS_REQUIRED"));
+
+            colFields.add(field);
+        }
+
+        map.put("colFields", JSON.toJSONString(colFields));
+
+        return HtmlPageTemplate.merge("CONF.html", map);
+    }
+
+    @Mapping("com.awspaas.user.apps.donenow_crm_save")
+    public ResponseObject udfSave(UserContext userContext, String cateId, String objectId, String data) throws Exception {
+        System.out.println("cateId=" + cateId + " objectId=" + objectId);
+        System.out.println(data);
+        JSONObject json = JSON.parseObject(data);
+        String set = "";
+        List<String> values = new ArrayList<>();
+        for (String key : json.keySet()) {
+            String value = json.getString(key);
+            if (StringUtils.isBlank(value)) value = "";
+            if (value.contains("[") && value.length() > 4) {
+                value = value.substring(2, 3);
+            }
+            set = set + key + "=?,";
+            values.add(value);
+        }
+        values.add(objectId);
+
+
+        String sql = "update " + CrmConstant.BO_EU_DNCRM_INSTALLED_PRODUCT + " set " + set.substring(0, set.length() - 1) + " where id=?";
+        System.out.println("updateBO_EU_DNCRM_INSTALLED_PRODUCTSql:" + sql);
+
+        DBSql.update(sql, values.toArray());
+
+        return ResponseObject.newOkResponse("����ɹ�");
+    }
+
+
 }

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

@@ -300,6 +300,8 @@ public class contractCreateController {
             DBSql.update("delete from BO_EU_DNCTT_CONTRACT_SERVICE where  ID=?", new Object[]{service.get("ID")});
 
             DBSql.update("delete from BO_EU_DNCTT_CONTRACT_SERVICE_EDIT where  CONTRACT_SERVICE_ID=?", new Object[]{service.get("ID")});
+
+            DBSql.update("delete from BO_EU_DNCTT_CONTRACT_COST where  IS_SERVICE_PRODUCT=1 AND SERVICE_ID=?", new Object[]{service.get("ID")});
         }
 
         return ResponseObject.newOkResponse();

+ 14 - 0
com.awspaas.user.apps.donenow_ctt/src/com/awspaas/user/apps/donenow_ctt/controller/invoiceController.java

@@ -4,6 +4,7 @@ import com.actionsoft.bpms.commons.mvc.view.ResponseObject;
 import com.actionsoft.bpms.server.UserContext;
 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.awspaas.user.apps.donenow_ctt.service.InvoiceDealDto;
 import com.awspaas.user.apps.donenow_ctt.service.InvoiceService;
@@ -83,4 +84,17 @@ public class invoiceController {
         return ResponseObject.newOkResponse();
     }
 
+
+    /**
+     * 获取税率
+     * @param uc
+     * @param taxCategoryId
+     * @return
+     */
+    @Mapping("com.awspaas.user.apps.donenow_ctt.getTaxRate")
+    public ResponseObject getTaxRate(UserContext uc, String taxCategoryId) {
+        String taxRate = DBSql.getString("select EXT1 from bo_eu_dnd_general where is_active=1 and closed=0 and general_table_id=44 AND OID=? AND ORGID=?", new Object[]{taxCategoryId, uc.getCompanyModel().getId()});
+        return ResponseObject.newOkResponse().put("taxRate", taxRate);
+    }
+
 }

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

@@ -66,10 +66,8 @@ public class contractService {
             if (contractBO.getString("IS_SUBMIT").equals("1"))//已提交
                 isSubmit = true;
             String TYPE_ID = contractBO.getString("TYPE_ID");//合同类型
-            if (isSubmit)
-                contractBO.set("IS_SUBMIT", 1);
-            else
-                contractBO.set("IS_SUBMIT", 0);
+            if (isSubmit) contractBO.set("IS_SUBMIT", 1);
+            else contractBO.set("IS_SUBMIT", 0);
 
             if (TYPE_ID.equals(cttConstant.CONTRACT_TYPE_SERVICE)) // 如果是服务合同
             {
@@ -81,34 +79,33 @@ public class contractService {
                 Date END_DATE = contractBO.get("END_DATE", Date.class);
 
                 //通过 合同周期个数和合同周期类型计算结束日期
-                if (END_DATE == null || END_DATE.before(START_DATE))
-                    if (OCCURRENCES != null && OCCURRENCES > 0) {
-                        // 使用 Calendar 进行日期操作
-                        Calendar calendar = Calendar.getInstance();
-                        calendar.setTime(START_DATE);
-                        if (PERIOD_TYPE.equals(cttConstant.PERIOD_TYPE_HALFYEAR)) {
-                            calendar.add(Calendar.MONTH, OCCURRENCES * 6);
-                            calendar.add(Calendar.DAY_OF_MONTH, -1);
-                            END_DATE = calendar.getTime();
-                        } else if (PERIOD_TYPE.equals(cttConstant.PERIOD_TYPE_MONTH)) {
-                            calendar.add(Calendar.MONTH, OCCURRENCES);
-                            calendar.add(Calendar.DAY_OF_MONTH, -1);
-                            END_DATE = calendar.getTime();
-                        } else if (PERIOD_TYPE.equals(cttConstant.PERIOD_TYPE_QUARTER)) {
-                            calendar.add(Calendar.MONTH, OCCURRENCES * 3);
-                            calendar.add(Calendar.DAY_OF_MONTH, -1);
-                            END_DATE = calendar.getTime();
-                        } else if (PERIOD_TYPE.equals(cttConstant.PERIOD_TYPE_YEAR)) {
-                            calendar.add(Calendar.MONTH, OCCURRENCES * 12);
-                            calendar.add(Calendar.DAY_OF_MONTH, -1);
-                            END_DATE = calendar.getTime();
-                        } else {
-                            resultDto.put("success", false);
-                            resultDto.put("msg", "周期类型输入错误!");
-                            return resultDto;
-                        }
-                        contractBO.set("END_DATE", END_DATE);
+                if (END_DATE == null || END_DATE.before(START_DATE)) if (OCCURRENCES != null && OCCURRENCES > 0) {
+                    // 使用 Calendar 进行日期操作
+                    Calendar calendar = Calendar.getInstance();
+                    calendar.setTime(START_DATE);
+                    if (PERIOD_TYPE.equals(cttConstant.PERIOD_TYPE_HALFYEAR)) {
+                        calendar.add(Calendar.MONTH, OCCURRENCES * 6);
+                        calendar.add(Calendar.DAY_OF_MONTH, -1);
+                        END_DATE = calendar.getTime();
+                    } else if (PERIOD_TYPE.equals(cttConstant.PERIOD_TYPE_MONTH)) {
+                        calendar.add(Calendar.MONTH, OCCURRENCES);
+                        calendar.add(Calendar.DAY_OF_MONTH, -1);
+                        END_DATE = calendar.getTime();
+                    } else if (PERIOD_TYPE.equals(cttConstant.PERIOD_TYPE_QUARTER)) {
+                        calendar.add(Calendar.MONTH, OCCURRENCES * 3);
+                        calendar.add(Calendar.DAY_OF_MONTH, -1);
+                        END_DATE = calendar.getTime();
+                    } else if (PERIOD_TYPE.equals(cttConstant.PERIOD_TYPE_YEAR)) {
+                        calendar.add(Calendar.MONTH, OCCURRENCES * 12);
+                        calendar.add(Calendar.DAY_OF_MONTH, -1);
+                        END_DATE = calendar.getTime();
+                    } else {
+                        resultDto.put("success", false);
+                        resultDto.put("msg", "周期类型输入错误!");
+                        return resultDto;
                     }
+                    contractBO.set("END_DATE", END_DATE);
+                }
             }
 
             contractBO.set("ADJUST_SETUP_FEE", contractBO.get("SETUP_FEE"));
@@ -124,8 +121,7 @@ public class contractService {
                 DBSql.update("update BO_EU_DNCTT_CONTRACT set IS_SDT_DEFAULT=0 where ACCOUNT_ID=?", new Object[]{contractBO.getString("ACCOUNT_ID")});
             }
 
-            if (idApply)
-                SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_APPLY", contractBO);//更新合同
+            if (idApply) SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_APPLY", contractBO);//更新合同
             else {
                 dn.recordFormChanges.record(uc, contractBO, "合同编辑");
                 SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT", contractBO);
@@ -139,8 +135,7 @@ public class contractService {
 
             RowMap dto = new RowMap(contractBO.asMap());//合同对象
 
-            if (idApply)
-                insertContract(uc, dto);//创建合同详情,用于提交后查看和修改相关配置项、工单、服务等
+            if (idApply) insertContract(uc, dto);//创建合同详情,用于提交后查看和修改相关配置项、工单、服务等
             else {
                 //更新
                 DBSql.update("update BO_EU_DNCTT_CONTRACT_RATE set CONTRACT_ID=? where BINDID=?", new Object[]{dto.getString("ID"), dto.getString("BINDID")});
@@ -330,6 +325,7 @@ public class contractService {
                             BigDecimal periodRate = divideToBigDecimal(GetPeriodDays(period_begin_date, new_period_end_date), GetPeriodDays(period_begin_date, period_end_date));
                             servicePeriod.set("PERIOD_PRICE", multiply(servicePeriod.get("PERIOD_PRICE"), periodRate));
                             servicePeriod.set("PERIOD_COST", multiply(servicePeriod.get("PERIOD_COST"), periodRate));
+                            servicePeriod.set("PARTYA_PERIOD_PRICE", multiply(servicePeriod.get("PARTYA_PERIOD_PRICE"), periodRate));
                             servicePeriod.set("PERIOD_ADJUSTED_PRICE", servicePeriod.get("PERIOD_PRICE"));
                             SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", servicePeriod, conn);
                         } else {
@@ -364,6 +360,9 @@ public class contractService {
                                 period_cost = periodRate.multiply(period_cost);
                                 csp.set("PERIOD_COST", period_cost);
                                 csp.set("PERIOD_ADJUSTED_PRICE", csp.get("PERIOD_PRICE"));
+
+                                csp.set("PARTYA_PERIOD_PRICE", multiply(service.get("PARTYA_TOTAL_PRICE"), periodRate));
+
                                 SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", csp, uc, conn);
 
                                 if (service.getString("OBJECT_TYPE").equals("2"))//服务包
@@ -399,6 +398,7 @@ public class contractService {
                         BigDecimal periodRate = divideToBigDecimal(GetPeriodDays(period_begin_date, END_DATE), GetPeriodDays(period_begin_date, period_end_date));
                         servicePeriod.set("PERIOD_PRICE", multiply(servicePeriod.get("PERIOD_PRICE"), periodRate));
                         servicePeriod.set("PERIOD_COST", multiply(servicePeriod.get("PERIOD_COST"), periodRate));
+                        servicePeriod.set("PARTYA_PERIOD_PRICE", multiply(servicePeriod.get("PARTYA_PERIOD_PRICE"), periodRate));
                         servicePeriod.set("PERIOD_ADJUSTED_PRICE", servicePeriod.get("PERIOD_PRICE"));
                         SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", servicePeriod, conn);
 
@@ -427,8 +427,7 @@ public class contractService {
             contractServiceLogger.error("AddServiceServiceBundle--error--失败。。。", e);
 
         } finally {
-            if (conn != null)
-                DBSql.close(conn);
+            if (conn != null) DBSql.close(conn);
         }
         return false;
     }
@@ -443,8 +442,7 @@ public class contractService {
      * @return
      */
     public boolean AddServiceServiceBundleOne(UserContext uc, Connection conn, RowMap contract, BO service) {
-        if (service == null)
-            return false;
+        if (service == null) return false;
 
         contractServiceLogger.info("AddServiceServiceBundleOne--开始");
 
@@ -512,8 +510,7 @@ public class contractService {
         }
          */
 
-        if (!isCreate)
-            return true;
+        if (!isCreate) return true;
 
         //服务已经审批并提交则不需要重新生成
         // 暂时不考虑 审批并提交之后修改服务,不需要重新生成
@@ -587,6 +584,14 @@ public class contractService {
             service.set("UNIT_PRICE", unit_price);
             // service.set("PERIOD_TYPE", contract.getString("PERIOD_TYPE"));//计费周期更新
             service.set("PERIOD_TYPE", maxPeriod);
+
+            //2025年10月24日 新增 三方合同甲方含税单价
+            service.set("UNIT_PRICE_NOTAX", multiply(service.get("UNIT_PRICE_NOTAX"), rate));
+            service.set("TOTAL_PRICE_NOTAX", multiply(service.get("TOTAL_PRICE_NOTAX"), rate));
+            service.set("PARTYA_UNIT_PRICE", multiply(service.get("PARTYA_UNIT_PRICE"), rate));
+            service.set("PARTYA_UNIT_PRICE_NOTAX", multiply(service.get("PARTYA_UNIT_PRICE_NOTAX"), rate));
+            service.set("PARTYA_TOTAL_PRICE", multiply(service.get("PARTYA_TOTAL_PRICE"), rate));//三方合同甲方含税总价
+            service.set("PARTYA_TOTAL_PRICE_NOTAX", multiply(service.get("PARTYA_TOTAL_PRICE_NOTAX"), rate));
         }
 
         contractServiceLogger.info("计算-service-ADJUSTED_PRICE");
@@ -631,8 +636,7 @@ public class contractService {
         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);//周期开始日期
+            if (currMontLastDay.isBefore(END_DATE)) START_DATE = currMontLastDay.plusDays(1);//周期开始日期
         }
 
 
@@ -651,6 +655,7 @@ public class contractService {
             BigDecimal period_cost = multiply(service.get("UNIT_COST"), service.get("QUANTITY"));
             csp.set("PERIOD_COST", period_cost);
             csp.set("PERIOD_ADJUSTED_PRICE", csp.get("PERIOD_PRICE"));
+            csp.set("PARTYA_PERIOD_PRICE", service.get("PARTYA_TOTAL_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);
@@ -707,6 +712,9 @@ public class contractService {
 
             csa.set("PERIOD_ADJUSTED_PRICE", multiply(service.get("ADJUSTED_PRICE"), periodRate));
             csa.set("PERIOD_PRICE", csa.get("PERIOD_ADJUSTED_PRICE"));
+
+            csa.set("PARTYA_PERIOD_PRICE", multiply(service.get("PARTYA_TOTAL_PRICE"), periodRate));//三方合同甲方含税总价
+
             csa.set("VENDOR_ACCOUNT_ID", vendor_account_id);
             csa.setBindId(service.getString("BINDID"));
 
@@ -771,6 +779,8 @@ public class contractService {
 
                 csp.set("PERIOD_ADJUSTED_PRICE", csp.get("PERIOD_PRICE"));
 
+                csp.set("PARTYA_PERIOD_PRICE", multiply(service.get("PARTYA_TOTAL_PRICE"), periodRate));//三方合同甲方含税总价
+
                 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);
@@ -818,8 +828,7 @@ public class contractService {
         contractServiceLogger.info("调整服务");
 
         String IS_EFFECTIVE = editService.getString("IS_EFFECTIVE");
-        if (!IS_EFFECTIVE.equals("未执行"))
-            return false;
+        if (!IS_EFFECTIVE.equals("未执行")) return false;
         LocalDate EFFECTIVE_DATE = getLocalDate(editService.get("EFFECTIVE_DATE"));//服务生效日期
         String EFFECTIVE_DATE_STR = EFFECTIVE_DATE.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
 
@@ -837,7 +846,10 @@ public class contractService {
             }
         }
 
+        //原合同服务
+        BO contractServiceBO = SDK.getBOAPI().get("BO_EU_DNCTT_CONTRACT_SERVICE", editService.getString("CONTRACT_SERVICE_ID"));
 
+        String maxPeriod = editService.getString("PERIOD_TYPE");
         //一次性收费服务
         if (editService.getString("PERIOD_TYPE").equals(cttConstant.PERIOD_TYPE_ONE_TIME)) {
             BO servicePeriod = SDK.getBOAPI().query("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD").connection(conn).addQuery("CONTRACT_SERVICE_ID =", editService.getString("CONTRACT_SERVICE_ID")).detail();
@@ -846,6 +858,8 @@ public class contractService {
             servicePeriod.set("PERIOD_PRICE", editService.get("TOTAL_PRICE"));
             servicePeriod.set("PERIOD_COST", editService.get("TOTAL_COST"));
 
+            servicePeriod.set("PARTYA_PERIOD_PRICE", editService.get("PARTYA_TOTAL_PRICE"));//三方合同甲方含税总价
+
             servicePeriod.set("PERIOD_ADJUSTED_PRICE", servicePeriod.get("PERIOD_PRICE"));
             SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", servicePeriod, conn);
 
@@ -893,46 +907,69 @@ public class contractService {
                             servicePeriodAdj.set("QUANTITY", editService.get("QUANTITY"));
 
                             String ORG_PERIOD_ID = servicePeriod.getString("ORG_PERIOD_ID");
-                            if (StringUtils.isBlank(ORG_PERIOD_ID))
-                                ORG_PERIOD_ID = servicePeriod.getId();
+                            if (StringUtils.isBlank(ORG_PERIOD_ID)) ORG_PERIOD_ID = servicePeriod.getId();
                             servicePeriodAdj.set("ORG_PERIOD_ID", ORG_PERIOD_ID);
 
-                            BigDecimal periodRateAdj = divideToBigDecimal(GetPeriodDays(EFFECTIVE_DATE, period_end_date), GetPeriodDays(period_begin_date, period_end_date));
 
-                            BigDecimal priceRate = editService.get("TOTAL_PRICE", BigDecimal.class).divide(editService.get("OLD_TOTAL_PRICE", BigDecimal.class), 10, RoundingMode.HALF_UP);
-                            BigDecimal costRate = editService.get("TOTAL_COST", BigDecimal.class).divide(editService.get("OLD_TOTAL_COST", BigDecimal.class), 10, RoundingMode.HALF_UP);
+                            int priodDays = GetPeriodDays(getPreviousPeriodStart(period_end_date.plusDays(1), editService.getString("PERIOD_TYPE")), period_end_date);
+                            BigDecimal periodRateAdj = divideToBigDecimal(GetPeriodDays(EFFECTIVE_DATE, period_end_date), priodDays);
 
-                            servicePeriodAdj.set("PERIOD_PRICE", multiply(servicePeriod.get("PERIOD_PRICE"), multiply(periodRateAdj, priceRate)));
-                            servicePeriodAdj.set("PERIOD_COST", multiply(servicePeriod.get("PERIOD_COST"), multiply(periodRateAdj, costRate)));
+                            servicePeriodAdj.set("PERIOD_PRICE", multiply(editService.get("TOTAL_PRICE"), periodRateAdj));
+                            servicePeriodAdj.set("PERIOD_COST", multiply(editService.get("TOTAL_COST"), periodRateAdj));
                             servicePeriodAdj.set("PERIOD_ADJUSTED_PRICE", servicePeriodAdj.get("PERIOD_PRICE"));
+
+                            //三方合同甲方含税总价
+                            servicePeriodAdj.set("PARTYA_PERIOD_PRICE", multiply(editService.get("PARTYA_TOTAL_PRICE"), periodRateAdj));
+
                             SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", servicePeriodAdj, uc, conn);
 
 
                             List<BO> sbsList = SDK.getBOAPI().query("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD_BUNDLE_SERVICE").connection(conn).addQuery("CONTRACT_SERVICE_PERIOD_ID =", ORG_PERIOD_ID).list();
-                            if (sbsList != null && sbsList.size() > 0)
-                                for (BO sbs : sbsList) {
-                                    BO newSbs = new BO();
-                                    newSbs.setAll(sbs.asMap());
-                                    newSbs.setId(null);
-                                    newSbs.set("CONTRACT_SERVICE_PERIOD_ID", servicePeriodAdj.getId());
-                                    SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD_BUNDLE_SERVICE", newSbs, uc, conn);
-                                }
+                            if (sbsList != null && sbsList.size() > 0) for (BO sbs : sbsList) {
+                                BO newSbs = new BO();
+                                newSbs.setAll(sbs.asMap());
+                                newSbs.setId(null);
+                                newSbs.set("CONTRACT_SERVICE_PERIOD_ID", servicePeriodAdj.getId());
+                                SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD_BUNDLE_SERVICE", newSbs, uc, conn);
+                            }
 
                             //旧的计费周期更新
                             servicePeriod.set("PERIOD_END_DATE", EFFECTIVE_DATE.minusDays(1));
+
                             BigDecimal periodRate = divideToBigDecimal(GetPeriodDays(period_begin_date, EFFECTIVE_DATE.minusDays(1)), GetPeriodDays(period_begin_date, period_end_date));
+
                             servicePeriod.set("PERIOD_PRICE", multiply(servicePeriod.get("PERIOD_PRICE"), periodRate));
                             servicePeriod.set("PERIOD_COST", multiply(servicePeriod.get("PERIOD_COST"), periodRate));
+
+                            servicePeriod.set("PARTYA_PERIOD_PRICE", multiply(servicePeriod.get("PARTYA_PERIOD_PRICE"), periodRate));
+
                             servicePeriod.set("PERIOD_ADJUSTED_PRICE", servicePeriod.get("PERIOD_PRICE"));
                             servicePeriod.set("ORG_PERIOD_ID", ORG_PERIOD_ID);
                             SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", servicePeriod, conn);
                         } else {
                             //重新计算
+                            /*
                             BigDecimal priceRate = editService.get("TOTAL_PRICE", BigDecimal.class).divide(editService.get("OLD_TOTAL_PRICE", BigDecimal.class), 10, RoundingMode.HALF_UP);
                             BigDecimal costRate = editService.get("TOTAL_COST", BigDecimal.class).divide(editService.get("OLD_TOTAL_COST", BigDecimal.class), 10, RoundingMode.HALF_UP);
                             servicePeriod.set("QUANTITY", editService.get("QUANTITY"));
                             servicePeriod.set("PERIOD_PRICE", multiply(servicePeriod.get("PERIOD_PRICE"), priceRate));
                             servicePeriod.set("PERIOD_COST", multiply(servicePeriod.get("PERIOD_COST"), costRate));
+
+                             */
+
+                            BigDecimal periodRate = BigDecimal.ONE;
+                            LocalDate periodEnd = getNextPeriodStart(period_begin_date, maxPeriod).minusDays(1);//本周期结束时间
+                            if (periodEnd.isAfter(period_end_date)) {//如果结束日期大于合同结束日期,则计算结束日期和合同结束日期的差值,并计算该差值占整周期的比例
+                                periodRate = divideToBigDecimal(GetPeriodDays(period_begin_date, period_end_date), GetPeriodDays(period_begin_date, periodEnd));
+                            }
+
+                            servicePeriod.set("QUANTITY", editService.get("QUANTITY"));
+                            servicePeriod.set("PERIOD_PRICE", multiply(editService.get("TOTAL_PRICE"), periodRate));
+                            servicePeriod.set("PERIOD_COST", multiply(editService.get("TOTAL_COST"), periodRate));
+                            servicePeriod.set("PERIOD_ADJUSTED_PRICE", servicePeriod.get("PERIOD_PRICE"));
+                            //三方合同甲方含税总价
+                            servicePeriod.set("PARTYA_PERIOD_PRICE", multiply(editService.get("PARTYA_TOTAL_PRICE"), periodRate));
+
                             servicePeriod.set("PERIOD_ADJUSTED_PRICE", servicePeriod.get("PERIOD_PRICE"));
                             SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", servicePeriod, conn);
                         }
@@ -966,6 +1003,7 @@ public class contractService {
                     servicePeriodAdj.set("QUANTITY", editService.get("QUANTITY"));
                     servicePeriodAdj.set("ORG_PERIOD_ID", ORG_PERIOD_ID);
 
+                    /*
                     BigDecimal periodRateAdj = divideToBigDecimal(GetPeriodDays(EFFECTIVE_DATE, period_end_date), GetPeriodDays(period_begin_date, period_end_date));
 
                     BigDecimal priceRate = editService.get("TOTAL_PRICE", BigDecimal.class).divide(editService.get("OLD_TOTAL_PRICE", BigDecimal.class), 10, RoundingMode.HALF_UP);
@@ -975,15 +1013,26 @@ public class contractService {
                     servicePeriodAdj.set("PERIOD_COST", multiply(firstServicePeriod.get("PERIOD_COST"), multiply(periodRateAdj, costRate)));
                     servicePeriodAdj.set("PERIOD_ADJUSTED_PRICE", servicePeriodAdj.get("PERIOD_PRICE"));
                     SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", servicePeriodAdj, uc, conn);
+                     */
+
+                    int priodDays = GetPeriodDays(getPreviousPeriodStart(period_end_date.plusDays(1), editService.getString("PERIOD_TYPE")), period_end_date);
+                    BigDecimal periodRateAdj = divideToBigDecimal(GetPeriodDays(EFFECTIVE_DATE, period_end_date), priodDays);
+                    servicePeriodAdj.set("PERIOD_PRICE", multiply(editService.get("TOTAL_PRICE"), periodRateAdj));
+                    servicePeriodAdj.set("PERIOD_COST", multiply(editService.get("TOTAL_COST"), periodRateAdj));
+                    servicePeriodAdj.set("PERIOD_ADJUSTED_PRICE", servicePeriodAdj.get("PERIOD_PRICE"));
+                    //三方合同甲方含税总价
+                    servicePeriodAdj.set("PARTYA_PERIOD_PRICE", multiply(editService.get("PARTYA_TOTAL_PRICE"), periodRateAdj));
+                    SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", servicePeriodAdj, uc, conn);
+
+
                     List<BO> sbsList = SDK.getBOAPI().query("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD_BUNDLE_SERVICE").connection(conn).addQuery("CONTRACT_SERVICE_PERIOD_ID =", ORG_PERIOD_ID).list();
-                    if (sbsList != null && sbsList.size() > 0)
-                        for (BO sbs : sbsList) {
-                            BO newSbs = new BO();
-                            newSbs.setAll(sbs.asMap());
-                            newSbs.setId(null);
-                            newSbs.set("CONTRACT_SERVICE_PERIOD_ID", servicePeriodAdj.getId());
-                            SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD_BUNDLE_SERVICE", newSbs, uc, conn);
-                        }
+                    if (sbsList != null && sbsList.size() > 0) for (BO sbs : sbsList) {
+                        BO newSbs = new BO();
+                        newSbs.setAll(sbs.asMap());
+                        newSbs.setId(null);
+                        newSbs.set("CONTRACT_SERVICE_PERIOD_ID", servicePeriodAdj.getId());
+                        SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD_BUNDLE_SERVICE", newSbs, uc, conn);
+                    }
 
 
                     //旧的计费周期更新
@@ -992,6 +1041,7 @@ public class contractService {
                     firstServicePeriod.set("PERIOD_PRICE", multiply(firstServicePeriod.get("PERIOD_PRICE"), periodRate));
                     firstServicePeriod.set("PERIOD_COST", multiply(firstServicePeriod.get("PERIOD_COST"), periodRate));
                     firstServicePeriod.set("PERIOD_ADJUSTED_PRICE", firstServicePeriod.get("PERIOD_PRICE"));
+                    firstServicePeriod.set("PARTYA_PERIOD_PRICE", multiply(firstServicePeriod.get("PARTYA_PERIOD_PRICE"), periodRate));
                     firstServicePeriod.set("ORG_PERIOD_ID", ORG_PERIOD_ID);
                     SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", firstServicePeriod, conn);
 
@@ -1004,6 +1054,9 @@ public class contractService {
                     BigDecimal periodRate = divideToBigDecimal(GetPeriodDays(period_begin_date, EFFECTIVE_DATE.minusDays(1)), GetPeriodDays(period_begin_date, period_end_date));
                     firstServicePeriod.set("PERIOD_PRICE", multiply(firstServicePeriod.get("PERIOD_PRICE"), periodRate));
                     firstServicePeriod.set("PERIOD_COST", multiply(firstServicePeriod.get("PERIOD_COST"), periodRate));
+
+                    firstServicePeriod.set("PARTYA_PERIOD_PRICE", multiply(firstServicePeriod.get("PARTYA_PERIOD_PRICE"), periodRate));
+
                     firstServicePeriod.set("PERIOD_ADJUSTED_PRICE", firstServicePeriod.get("PERIOD_PRICE"));
                     firstServicePeriod.set("ORG_PERIOD_ID", ORG_PERIOD_ID);
                     SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", firstServicePeriod, conn);
@@ -1036,19 +1089,20 @@ public class contractService {
                     servicePeriodAdj.set("PERIOD_PRICE", multiply(editService.get("TOTAL_PRICE"), periodRateAdj));
                     servicePeriodAdj.set("PERIOD_COST", multiply(editService.get("TOTAL_COST"), periodRateAdj));
 
+                    servicePeriodAdj.set("PARTYA_PERIOD_PRICE", multiply(editService.get("PARTYA_TOTAL_PRICE"), periodRateAdj));
+
                     servicePeriodAdj.set("PERIOD_ADJUSTED_PRICE", servicePeriodAdj.get("PERIOD_PRICE"));
                     SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", servicePeriodAdj, uc, conn);
 
 
                     List<BO> sbsList = SDK.getBOAPI().query("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD_BUNDLE_SERVICE").connection(conn).addQuery("CONTRACT_SERVICE_PERIOD_ID =", ORG_PERIOD_ID).list();
-                    if (sbsList != null && sbsList.size() > 0)
-                        for (BO sbs : sbsList) {
-                            BO newSbs = new BO();
-                            newSbs.setAll(sbs.asMap());
-                            newSbs.setId(null);
-                            newSbs.set("CONTRACT_SERVICE_PERIOD_ID", servicePeriodAdj.getId());
-                            SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD_BUNDLE_SERVICE", newSbs, uc, conn);
-                        }
+                    if (sbsList != null && sbsList.size() > 0) for (BO sbs : sbsList) {
+                        BO newSbs = new BO();
+                        newSbs.setAll(sbs.asMap());
+                        newSbs.setId(null);
+                        newSbs.set("CONTRACT_SERVICE_PERIOD_ID", servicePeriodAdj.getId());
+                        SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD_BUNDLE_SERVICE", newSbs, uc, conn);
+                    }
 
                     SATRT_DATE = last_period_end_date.plusDays(1);
                 }
@@ -1059,9 +1113,7 @@ public class contractService {
 
                 DBSql.update(conn, "DELETE FROM BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD WHERE CONTRACT_SERVICE_ID=? AND PERIOD_END_DATE>=?", new Object[]{editService.getString("CONTRACT_SERVICE_ID"), SATRT_DATE_STR});
 
-
                 LocalDate END_DATE = getLocalDate(contract.get("END_DATE"));//合同结束日期
-                String maxPeriod = editService.getString("PERIOD_TYPE");
 
                 //服务包上的服务
                 List<String> sbsList = null;
@@ -1097,6 +1149,9 @@ public class contractService {
                         period_cost = periodRate.multiply(period_cost);
                         csp.set("PERIOD_COST", period_cost);
                         csp.set("PERIOD_ADJUSTED_PRICE", csp.get("PERIOD_PRICE"));
+
+                        csp.set("PARTYA_PERIOD_PRICE", multiply(editService.get("PARTYA_TOTAL_PRICE"), periodRate));//三方合同甲方含税总价
+
                         SDK.getBOAPI().createDataBO("BO_EU_DNCTT_CONTRACT_SERVICE_PERIOD", csp, uc, conn);
 
                         if (editService.getString("OBJECT_TYPE").equals("2"))//服务包
@@ -1149,7 +1204,7 @@ public class contractService {
         SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_SERVICE_EDIT", editService, conn);
 
         //如果在此次调整之后还有调整,则设为失效状态
-        BO contractServiceBO = SDK.getBOAPI().get("BO_EU_DNCTT_CONTRACT_SERVICE", editService.getString("CONTRACT_SERVICE_ID"));
+
         contractServiceBO.set("OLD_QUANTITY", editService.get("OLD_QUANTITY"));
         contractServiceBO.set("OLD_UNIT_PRICE", editService.get("OLD_UNIT_PRICE"));
         contractServiceBO.set("OLD_TOTAL_PRICE", editService.get("OLD_TOTAL_PRICE"));
@@ -1161,6 +1216,9 @@ public class contractService {
         contractServiceBO.set("TOTAL_PRICE", editService.get("TOTAL_PRICE"));
         contractServiceBO.set("UNIT_COST", editService.get("UNIT_COST"));
         contractServiceBO.set("TOTAL_COST", editService.get("TOTAL_COST"));
+
+        contractServiceBO.set("PARTYA_TOTAL_PRICE", editService.get("PARTYA_TOTAL_PRICE"));
+
         SDK.getBOAPI().update("BO_EU_DNCTT_CONTRACT_SERVICE", contractServiceBO, conn);
 
         contractServiceLogger.info("服务调整成功");
@@ -1181,12 +1239,10 @@ public class contractService {
         List<BO> serviceList = SDK.getBOAPI().query("BO_EU_DNCTT_CONTRACT_SERVICE").connection(conn).addQuery("BINDID =", contract.get("BINDID")).list();
         List<BO> serviceList2 = SDK.getBOAPI().query("BO_EU_DNCTT_CONTRACT_SERVICE").connection(conn).addQuery("BINDID !=", contract.get("BINDID")).addQuery("CONTRACT_ID =", contract.get("ID")).list();
 
-        if (serviceList == null)
-            serviceList = new ArrayList<BO>();
-        if (serviceList2 != null && serviceList2.size() > 0)
-            for (BO service : serviceList2) {
-                serviceList.add(service);
-            }
+        if (serviceList == null) serviceList = new ArrayList<BO>();
+        if (serviceList2 != null && serviceList2.size() > 0) for (BO service : serviceList2) {
+            serviceList.add(service);
+        }
 
         for (BO service : serviceList) {
 
@@ -1295,8 +1351,7 @@ public class contractService {
             e.printStackTrace();
             conn.rollback();
         } finally {
-            if (conn != null)
-                DBSql.close(conn);
+            if (conn != null) DBSql.close(conn);
         }
         return false;
     }
@@ -1400,8 +1455,7 @@ public class contractService {
      */
     public static BigDecimal multiply(Object obj1, Object obj2) {
         try {
-            if (obj1 == null || obj2 == null)
-                return BigDecimal.ZERO;
+            if (obj1 == null || obj2 == null) return BigDecimal.ZERO;
 
             BigDecimal num1 = new BigDecimal(String.valueOf(obj1));
             BigDecimal num2 = new BigDecimal(String.valueOf(obj2));
@@ -1654,13 +1708,11 @@ public class contractService {
      */
     public static LocalDate getLocalDate(Object obj) {
         try {
-            if (obj == null)
-                return null;
+            if (obj == null) return null;
             if (obj instanceof LocalDate) {
                 return (LocalDate) obj;
             } else if (obj instanceof String) {
-                if (StringUtils.isBlank(obj.toString()))
-                    return null;
+                if (StringUtils.isBlank(obj.toString())) return null;
                 // 定义日期格式
                 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
                 // 解析字符串为 LocalDate
@@ -1873,8 +1925,7 @@ public class contractService {
                             costCodeId = DBSql.getString("SELECT COST_CODE_ID FROM BO_EU_DNIVT_SERVICE_BUNDLE WHERE ID = ?", new Object[]{bo.getString("OBJECT_ID")});
                         }
                         Object taxCategoryId = DBSql.getString("select TAX_CATEGORY_ID from BO_EU_DND_COST_CODE where OID=? and ORGID=?", new Object[]{costCodeId, ORGID}); //SDK.getBOAPI().get("BO_EU_DND_COST_CODE", costCodeId, "TAX_CATEGORY_ID");
-                        if (taxCategoryId != null)
-                            TAX_CATEGORY_ID = taxCategoryId.toString();
+                        if (taxCategoryId != null) TAX_CATEGORY_ID = taxCategoryId.toString();
                     }
 
                 }
@@ -1932,15 +1983,13 @@ public class contractService {
             connUpdate.commit();
         } catch (SQLException e) {
             e.printStackTrace();
-            if (connUpdate != null && !connUpdate.isClosed())
-                try {
-                    connUpdate.rollback();
-                } catch (SQLException ex) {
-                    ex.printStackTrace();
-                }
+            if (connUpdate != null && !connUpdate.isClosed()) try {
+                connUpdate.rollback();
+            } catch (SQLException ex) {
+                ex.printStackTrace();
+            }
         } finally {
-            if (connUpdate != null && !connUpdate.isClosed())
-                DBSql.close(connUpdate);
+            if (connUpdate != null && !connUpdate.isClosed()) DBSql.close(connUpdate);
         }
 
         return true;
@@ -2010,15 +2059,13 @@ public class contractService {
             connUpdate.commit();
         } catch (SQLException e) {
             e.printStackTrace();
-            if (connUpdate != null && !connUpdate.isClosed())
-                try {
-                    connUpdate.rollback();
-                } catch (SQLException ex) {
-                    ex.printStackTrace();
-                }
+            if (connUpdate != null && !connUpdate.isClosed()) try {
+                connUpdate.rollback();
+            } catch (SQLException ex) {
+                ex.printStackTrace();
+            }
         } finally {
-            if (connUpdate != null && !connUpdate.isClosed())
-                DBSql.close(connUpdate);
+            if (connUpdate != null && !connUpdate.isClosed()) DBSql.close(connUpdate);
         }
         return true;
     }
@@ -2106,15 +2153,13 @@ public class contractService {
             connUpdate.commit();
         } catch (SQLException e) {
             e.printStackTrace();
-            if (connUpdate != null && !connUpdate.isClosed())
-                try {
-                    connUpdate.rollback();
-                } catch (SQLException ex) {
-                    ex.printStackTrace();
-                }
+            if (connUpdate != null && !connUpdate.isClosed()) try {
+                connUpdate.rollback();
+            } catch (SQLException ex) {
+                ex.printStackTrace();
+            }
         } finally {
-            if (connUpdate != null && !connUpdate.isClosed())
-                DBSql.close(connUpdate);
+            if (connUpdate != null && !connUpdate.isClosed()) DBSql.close(connUpdate);
         }
         return true;
     }
@@ -2162,16 +2207,14 @@ public class contractService {
             }
             connUpdate.commit();
         } catch (SQLException e) {
-            if (connUpdate != null && !connUpdate.isClosed())
-                try {
-                    connUpdate.rollback();
-                } catch (SQLException ex) {
-                    ex.printStackTrace();
-                }
+            if (connUpdate != null && !connUpdate.isClosed()) try {
+                connUpdate.rollback();
+            } catch (SQLException ex) {
+                ex.printStackTrace();
+            }
             return e.getMessage();
         } finally {
-            if (connUpdate != null && !connUpdate.isClosed())
-                DBSql.close(connUpdate);
+            if (connUpdate != null && !connUpdate.isClosed()) DBSql.close(connUpdate);
         }
 
         return null;
@@ -2206,16 +2249,14 @@ public class contractService {
 
             connUpdate.commit();
         } catch (SQLException e) {
-            if (connUpdate != null && !connUpdate.isClosed())
-                try {
-                    connUpdate.rollback();
-                } catch (SQLException ex) {
-                    ex.printStackTrace();
-                }
+            if (connUpdate != null && !connUpdate.isClosed()) try {
+                connUpdate.rollback();
+            } catch (SQLException ex) {
+                ex.printStackTrace();
+            }
             return e.getMessage();
         } finally {
-            if (connUpdate != null && !connUpdate.isClosed())
-                DBSql.close(connUpdate);
+            if (connUpdate != null && !connUpdate.isClosed()) DBSql.close(connUpdate);
         }
         return null;
     }
@@ -2249,16 +2290,14 @@ public class contractService {
             }
             connUpdate.commit();
         } catch (SQLException e) {
-            if (connUpdate != null && !connUpdate.isClosed())
-                try {
-                    connUpdate.rollback();
-                } catch (SQLException ex) {
-                    ex.printStackTrace();
-                }
+            if (connUpdate != null && !connUpdate.isClosed()) try {
+                connUpdate.rollback();
+            } catch (SQLException ex) {
+                ex.printStackTrace();
+            }
             return e.getMessage();
         } finally {
-            if (connUpdate != null && !connUpdate.isClosed())
-                DBSql.close(connUpdate);
+            if (connUpdate != null && !connUpdate.isClosed()) DBSql.close(connUpdate);
         }
         return null;
     }
@@ -2412,15 +2451,13 @@ public class contractService {
             connUpdate.commit();
         } catch (SQLException e) {
             e.printStackTrace();
-            if (connUpdate != null && !connUpdate.isClosed())
-                try {
-                    connUpdate.rollback();
-                } catch (SQLException ex) {
-                    ex.printStackTrace();
-                }
+            if (connUpdate != null && !connUpdate.isClosed()) try {
+                connUpdate.rollback();
+            } catch (SQLException ex) {
+                ex.printStackTrace();
+            }
         } finally {
-            if (connUpdate != null && !connUpdate.isClosed())
-                DBSql.close(connUpdate);
+            if (connUpdate != null && !connUpdate.isClosed()) DBSql.close(connUpdate);
         }
 
         return true;