From 5506edbe54883b31db3cc8e4a1d9d0795a18a3c9 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期五, 27 十二月 2024 14:37:54 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/2.0.1' into 2.0.1

---
 server/service/src/main/java/com/doumee/service/business/CustomerCompanyService.java             |   97 
 company/src/api/business/solutions.js                                                            |   15 
 server/service/src/main/java/com/doumee/dao/business/join/CompanyUserApplyJoinMapper.java        |   13 
 company/src/components/common/UploadAvatarImage.vue                                              |    2 
 server/service/src/main/java/com/doumee/service/business/impl/ApplyChagneDetailServiceImpl.java  |    4 
 company/.env.developmentShop                                                                     |    5 
 server/service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java          |   39 
 server/shop/src/main/java/com/doumee/api/system/SystemUserController.java                        |    9 
 company/src/components/business/OperaCompanyUserApplyCarefulWindow.vue                           |  179 
 server/service/src/main/java/com/doumee/biz/system/SystemRoleBiz.java                            |    4 
 server/service/src/main/java/com/doumee/dao/business/dto/SaveUnionChangeDTO.java                 |    6 
 company/src/api/business/contract.js                                                             |   38 
 server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java     |  838 +++
 server/service/src/main/java/com/doumee/dao/business/model/CompanySolution.java                  |   54 
 server/shop/src/main/java/com/doumee/api/business/ApplyChangeController.java                     |   39 
 company/src/components/enterprise/importEmployees.vue                                            |   10 
 server/platform/src/main/java/com/doumee/api/business/ApplyDetailController.java                 |   13 
 server/platform/src/main/java/com/doumee/api/business/UnionApplyController.java                  |   15 
 server/service/src/main/java/com/doumee/dao/system/dto/QuerySystemUserDTO.java                   |   16 
 company/src/api/business/insuranceApply.js                                                       |    5 
 company/src/api/business/company.js                                                              |   10 
 company/.env                                                                                     |    2 
 server/company/src/main/java/com/doumee/api/business/WorktypeController.java                     |   11 
 server/company/src/main/java/com/doumee/api/system/SystemUserController.java                     |   17 
 server/platform/src/main/java/com/doumee/api/business/CompanyUserApplyController.java            |  101 
 server/service/src/main/java/com/doumee/dao/business/model/UnionChange.java                      |    6 
 server/platform/src/main/java/com/doumee/api/business/ContractController.java                    |  108 
 server/service/src/main/java/com/doumee/dao/business/model/InsuranceApply.java                   |   16 
 company/src/views/business/companyDepartment.vue                                                 |  162 
 company/src/components/business/selectPolicy.vue                                                 |  172 
 company/src/components/enterprise/selectEmployees.vue                                            |    6 
 company/.env.productionShop                                                                      |    9 
 server/company/src/main/java/com/doumee/api/business/MemberController.java                       |    2 
 company/src/api/system/role.js                                                                   |    5 
 server/company/src/main/java/com/doumee/api/business/CompanyController.java                      |   10 
 company/src/views/business/insurance.vue                                                         |   17 
 server/service/src/main/java/com/doumee/service/business/WorktypeService.java                    |    3 
 company/src/views/business/userManagement.vue                                                    |  141 
 server/platform/src/main/java/com/doumee/api/business/SolutionsBaseController.java               |   19 
 server/service/src/main/java/com/doumee/dao/business/model/CompanyPermission.java                |   35 
 server/shop/src/main/java/com/doumee/api/business/InsuranceApplyController.java                  |   32 
 company/src/assets/style/style.scss                                                              |   10 
 server/service/src/main/java/com/doumee/dao/business/CustomerServiceMapper.java                  |   12 
 server/service/src/main/java/com/doumee/dao/business/join/CompanyJoinMapper.java                 |   13 
 company/src/components/business/OperaApplyChangeUnitDetailWindow.vue                             |   45 
 company/src/views/business/companyUserApply.vue                                                  |  104 
 company/src/components/enterprise/reinsurance.vue                                                |   64 
 company/src/views/system/user.vue                                                                |  321 
 server/service/src/main/java/com/doumee/dao/business/join/SolutionsBaseJoinMapper.java           |   13 
 company/src/api/business/unionApply.js                                                           |    5 
 server/service/src/main/java/com/doumee/service/business/CompanyDepartmentService.java           |    2 
 server/service/src/main/java/com/doumee/dao/business/join/CustomerCompanyJoinMapper.java         |   13 
 company/src/components/business/OperaApplyChangeDetailWindow.vue                                 |   26 
 server/platform/src/main/java/com/doumee/api/business/WorktypeController.java                    |   10 
 company/src/views/business/customerService.vue                                                   |   93 
 server/service/src/main/java/com/doumee/service/system/impl/SystemUserServiceImpl.java           |   37 
 company/src/components/business/OperaCompanyDepartmentWindow.vue                                 |  138 
 company/src/components/system/role/PermissionConfigWindow.vue                                    |    7 
 server/company/src/main/java/com/doumee/api/business/CustomerServiceController.java              |  107 
 server/service/src/main/java/com/doumee/dao/business/model/Solutions.java                        |   34 
 server/service/src/main/java/com/doumee/dao/system/vo/SystemUserListVO.java                      |   21 
 server/service/src/main/java/com/doumee/service/business/impl/WorktypeServiceImpl.java           |   72 
 server/platform/src/main/java/com/doumee/api/system/SystemRoleController.java                    |   13 
 server/service/src/main/java/com/doumee/dao/business/model/Contract.java                         |   59 
 server/service/src/main/java/com/doumee/dao/business/vo/ApplyPowerVO.java                        |   29 
 server/service/src/main/java/com/doumee/core/utils/Constants.java                                |  167 
 company/src/components/enterprise/confirmJobType.vue                                             |   26 
 company/src/views/business/switchCourt.vue                                                       |   23 
 server/service/src/main/java/com/doumee/service/business/impl/CompanySolutionServiceImpl.java    |  116 
 server/platform/src/main/java/com/doumee/api/business/CustomerServiceController.java             |  108 
 server/service/src/main/java/com/doumee/config/shiro/ShiroToken.java                             |   12 
 server/service/src/main/java/com/doumee/dao/business/model/SolutionsBase.java                    |   26 
 company/src/components/enterprise/OperaInsuranceApplyAddWindow.vue                               |  125 
 server/service/src/main/java/com/doumee/dao/business/join/ContractJoinMapper.java                |   13 
 server/service/src/main/java/com/doumee/dao/system/vo/DepartmentTree.java                        |    6 
 server/company/src/main/java/com/doumee/api/business/ApplyDetailController.java                  |    2 
 company/src/components/business/OperaSolutionsWindow.vue                                         |  337 -
 company/src/views/business/contract.vue                                                          |  172 
 server/service/src/main/java/com/doumee/service/business/CustomerServiceService.java             |  113 
 company/src/components/business/OperaCompanyUserApplyWindow.vue                                  |  247 +
 company/src/api/business/companyUserApply.js                                                     |   38 
 company/src/api/business/companyPermission.js                                                    |   10 
 server/service/src/main/java/com/doumee/dao/business/model/ApplyChange.java                      |    9 
 server/shop/src/main/java/com/doumee/api/business/SolutionsController.java                       |   18 
 company/src/views/enterprise/insuranceApply.vue                                                  |  117 
 server/platform/src/main/java/com/doumee/api/business/InsuranceApplyController.java              |   35 
 server/service/src/main/java/com/doumee/dao/business/dto/InsuranceApplyQueryDTO.java             |    3 
 server/service/src/main/java/com/doumee/dao/business/model/Insurance.java                        |    8 
 server/service/src/main/java/com/doumee/service/system/impl/SystemDataPermissionServiceImpl.java |   23 
 company/.env.development                                                                         |    9 
 company/src/api/business/companyDepartment.js                                                    |   42 
 server/service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java            |  145 
 server/service/src/main/java/com/doumee/dao/business/model/CustomerService.java                  |   89 
 server/service/src/main/java/com/doumee/service/business/impl/ContractServiceImpl.java           |  520 +
 server/service/src/main/java/com/doumee/service/business/CompanyPermissionService.java           |    7 
 server/service/src/main/java/com/doumee/service/business/impl/InsuranceServiceImpl.java          |   47 
 company/src/components/business/OperaInsuranceWindow.vue                                         |   61 
 company/src/views/business/company.vue                                                           |    1 
 server/service/src/main/java/com/doumee/dao/system/model/SystemDataPermission.java               |    2 
 company/src/components/business/allocateEnterprises.vue                                          |  113 
 server/company/src/main/java/com/doumee/api/business/SolutionsController.java                    |   19 
 server/service/src/main/java/com/doumee/service/business/SolutionsService.java                   |    8 
 company/src/components/business/OperaApplyChangeCheckWindow.vue                                  |   34 
 server/shop/src/main/java/com/doumee/api/business/MemberController.java                          |   12 
 company/src/components/business/OperaUnionChangeUnitDetailWindow.vue                             |   37 
 server/service/src/main/java/com/doumee/service/business/ContractService.java                    |   13 
 server/service/src/main/java/com/doumee/service/business/CompanyUserApplyService.java            |    6 
 server/service/src/main/java/com/doumee/dao/business/model/ApplyDetail.java                      |    2 
 server/service/src/main/java/com/doumee/service/business/CompanyService.java                     |    6 
 company/src/components/enterprise/additionSubtractionApplication.vue                             |  186 
 company/src/main.js                                                                              |    2 
 server/service/src/main/resources/mappers/SystemUserMapper.xml                                   |   38 
 server/service/src/main/java/com/doumee/service/business/SolutionsBaseService.java               |    4 
 server/service/src/main/java/com/doumee/service/business/impl/UnionApplyServiceImpl.java         |  247 
 server/shop/src/main/java/com/doumee/api/business/UnionApplyController.java                      |   10 
 server/service/src/main/java/com/doumee/dao/business/dto/ApplyPowerDTO.java                      |   20 
 server/company/src/main/java/com/doumee/api/business/CompanyPermissionController.java            |    1 
 company/src/components/business/OperaApplyChangeUnitCheckWindow.vue                              |   34 
 server/service/src/main/java/com/doumee/config/shiro/ShiroRealm.java                             |   75 
 server/service/src/main/java/com/doumee/service/business/impl/SolutionsServiceImpl.java          |  298 
 company/src/views/indexShop.vue                                                                  |   48 
 server/service/src/main/java/com/doumee/dao/business/dto/ApplyDetailPageDTO.java                 |    2 
 server/service/src/main/java/com/doumee/service/business/impl/CompanyPermissionServiceImpl.java  |  110 
 company/src/api/business/solutionsBase.js                                                        |   10 
 server/shop/src/main/java/com/doumee/api/business/ApplyDetailController.java                     |   12 
 server/service/src/main/java/com/doumee/service/business/impl/CustomerCompanyServiceImpl.java    |  145 
 company/src/utils/request.js                                                                     |    4 
 company/src/views/system/role.vue                                                                |   22 
 server/company/src/main/java/com/doumee/api/system/SystemController.java                         |   10 
 server/platform/src/main/java/com/doumee/api/business/ApplyChangeController.java                 |   48 
 server/platform/src/main/java/com/doumee/api/business/MemberController.java                      |   12 
 company/src/components/business/OperaContractWindow.vue                                          |  187 
 company/src/views/business/solutions.vue                                                         |   79 
 company/src/components/enterprise/factoryChange.vue                                              |  100 
 server/service/src/main/java/com/doumee/service/business/impl/ApplyDetailServiceImpl.java        |   28 
 server/platform/src/main/java/com/doumee/api/business/CompanyController.java                     |    1 
 server/company/src/main/java/com/doumee/api/business/CompanySolutionController.java              |    9 
 company/src/components/business/modification.vue                                                 |   25 
 server/company/src/main/java/com/doumee/api/business/InsuranceApplyController.java               |   17 
 server/company/src/main/java/com/doumee/api/system/SystemRoleController.java                     |   13 
 company/src/components/system/user/OperaUserWindow.vue                                           |   78 
 company/src/views/business/member.vue                                                            |   13 
 server/service/src/main/java/com/doumee/service/business/UnionApplyService.java                  |    8 
 company/src/views/index.vue                                                                      |  151 
 company/src/api/business/worktype.js                                                             |    5 
 server/service/src/main/java/com/doumee/core/model/LoginUserInfo.java                            |    8 
 server/service/src/main/java/com/doumee/service/business/impl/CompanyUserApplyServiceImpl.java   |  284 +
 server/service/src/main/java/com/doumee/service/business/impl/CustomerServiceServiceImpl.java    |  270 +
 company/src/components/business/OperaSolutionsBaseWindow.vue                                     |   64 
 company/src/api/business/customerService.js                                                      |   38 
 company/src/views/business/unionChange.vue                                                       |    8 
 server/service/src/main/java/com/doumee/biz/system/impl/SystemMenuBizImpl.java                   |    9 
 server/service/src/main/java/com/doumee/dao/business/join/CustomerServiceJoinMapper.java         |   13 
 company/public/template/personnel_no.xlsx                                                        |    0 
 server/service/src/main/java/com/doumee/dao/business/model/CompanyDepartment.java                |    3 
 server/service/src/main/java/com/doumee/dao/business/model/SolutionWorktype.java                 |    4 
 company/src/components/system/role/Permissions.vue                                               |  127 
 company/src/api/business/applyChange.js                                                          |    8 
 company/src/components/business/OperaWtbApplyShopWindow.vue                                      |   69 
 company/src/components/system/user/RoleConfigWindow.vue                                          |    7 
 server/service/src/main/java/com/doumee/service/business/impl/CompanyDepartmentServiceImpl.java  |   84 
 server/shop/src/main/java/com/doumee/api/business/CompanyDepartmentController.java               |   12 
 company/src/components/system/user/allocationEnterprises.vue                                     |   11 
 server/service/src/main/java/com/doumee/service/system/SystemUserService.java                    |    2 
 company/.env.production                                                                          |   10 
 company/src/components/business/authorizedEnterprise.vue                                         |  127 
 server/service/src/main/java/com/doumee/biz/system/impl/SystemRoleBizImpl.java                   |   31 
 company/src/components/business/OperaUnionChangeUnitCheckWindow.vue                              |   65 
 server/service/src/main/java/com/doumee/dao/system/dto/CreateSystemUserDTO.java                  |    5 
 server/service/src/main/java/com/doumee/core/annotation/excel/ExcelExporter.java                 |  196 
 server/service/src/main/java/com/doumee/service/business/impl/SolutionsBaseServiceImpl.java      |  445 +
 company/src/components/business/OperaSolutionsDescWindow.vue                                     |  165 
 company/src/components/business/OperaInsuranceApplyWindow.vue                                    |  113 
 company/src/components/enterprise/addEmployeeWithDu.vue                                          |   51 
 company/src/components/business/OperaInsuranceApplyCheckWindow.vue                               |   25 
 company/src/components/common/chooseCompany.vue                                                  |  144 
 company/src/components/business/OperaUnionApplyCheckWindow.vue                                   |   13 
 server/service/src/main/java/com/doumee/dao/business/dto/UnionChangeBXDDTO.java                  |    6 
 company/src/views/business/unionChangeUnit.vue                                                   |   22 
 server/platform/src/main/java/com/doumee/api/system/SystemDataPermissionController.java          |    7 
 server/service/src/main/java/com/doumee/service/system/SystemDataPermissionService.java          |    3 
 server/service/src/main/java/com/doumee/dao/system/vo/SystemRoleListVO.java                      |   10 
 server/shop/src/main/java/com/doumee/api/business/ContractController.java                        |   19 
 server/service/src/main/java/com/doumee/dao/system/model/SystemUser.java                         |   21 
 company/src/api/system/user.js                                                                   |   10 
 company/src/layouts/AppLayout.vue                                                                |    3 
 server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java        |  395 +
 company/src/components/business/OperaCompanyDescWindow.vue                                       |   34 
 company/src/views/business/unionApply.vue                                                        |   20 
 company/src/components/business/detailsEntrustedInsurance.vue                                    |   74 
 company/src/views/business/applyChange.vue                                                       |   37 
 company/.env.developmentCom                                                                      |    8 
 server/company/src/main/java/com/doumee/api/business/CompanyUserApplyController.java             |    6 
 server/company/src/main/java/com/doumee/api/business/ApplyChangeController.java                  |   25 
 company/src/components/business/OperaUnionChangeDetailWindow.vue                                 |   48 
 server/platform/src/main/java/com/doumee/api/business/CompanyDepartmentController.java           |  111 
 server/service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java             |  118 
 server/company/src/main/java/com/doumee/api/business/CompanyDepartmentController.java            |   10 
 server/service/src/main/java/com/doumee/service/business/CompanySolutionService.java             |    8 
 company/src/assets/icons/ic_company@2x.png                                                       |    0 
 company/src/components/business/OperaUnionChangeCheckWindow.vue                                  |   75 
 company/src/components/business/operaCompanyUserApplyDescWindow.vue                              |  168 
 server/platform/src/main/java/com/doumee/api/business/CustomerCompanyController.java             |   90 
 server/service/src/main/java/com/doumee/service/business/ApplyChangeService.java                 |    5 
 company/src/views/enterprise/myPolicy.vue                                                        |   16 
 server/service/src/main/java/com/doumee/dao/business/model/UnionApply.java                       |   20 
 company/src/components/enterprise/renewalInsurance.vue                                           |   16 
 server/service/src/main/java/com/doumee/service/system/impl/SystemRoleServiceImpl.java           |    8 
 server/service/src/main/java/com/doumee/service/business/impl/NoticesServiceImpl.java            |   21 
 company/src/components/business/OperaContractDescWindow.vue                                      |  169 
 server/platform/src/main/java/com/doumee/api/business/CompanySolutionController.java             |    1 
 server/platform/src/main/java/com/doumee/api/business/SolutionsController.java                   |   20 
 server/service/src/main/java/com/doumee/dao/business/model/CompanyUserApply.java                 |   22 
 company/src/utils/resetMessage.js                                                                |   18 
 company/src/components/business/OperaSolutionsBaseDescWindow.vue                                 |    9 
 server/service/src/main/java/com/doumee/dao/business/CustomerCompanyMapper.java                  |   12 
 server/service/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java                   |   41 
 company/src/views/business/insuranceApply.vue                                                    |  115 
 server/service/src/main/java/com/doumee/dao/business/model/CustomerCompany.java                  |   79 
 server/platform/src/main/java/com/doumee/api/system/SystemUserController.java                    |   15 
 server/service/src/main/java/com/doumee/dao/business/dto/CloseDTO.java                           |    2 
 server/service/src/main/java/com/doumee/service/system/SystemLoginService.java                   |    2 
 server/company/src/main/java/com/doumee/api/business/ContractController.java                     |   18 
 server/service/src/main/java/com/doumee/service/business/impl/UnionChangeServiceImpl.java        |  277 
 company/.env.productionCom                                                                       |    4 
 company/src/api/system/common.js                                                                 |    5 
 server/service/src/main/java/com/doumee/dao/business/dto/UpdateSortDTO.java                      |   26 
 company/src/components/business/OperaCustomerServiceWindow.vue                                   |   64 
 company/src/components/common/CommonHeader.vue                                                   |  101 
 server/service/src/main/java/com/doumee/dao/business/join/CompanyPermissionJoinMapper.java       |   15 
 server/service/src/main/java/com/doumee/dao/business/model/Multifile.java                        |    6 
 company/src/components/common/UploadFile.vue                                                     |   13 
 server/service/src/main/java/com/doumee/service/business/InsuranceApplyService.java              |   23 
 233 files changed, 11,236 insertions(+), 2,158 deletions(-)

diff --git a/company/.env b/company/.env
index d0e2989..db9f162 100644
--- a/company/.env
+++ b/company/.env
@@ -5,7 +5,7 @@
 
 # 椤圭洰涓婁笅鏂囪矾寰�
 # VUE_APP_CONTEXT_PATH = '/yyb_admin'
-VUE_APP_CONTEXT_PATH = '/yyb_web'
+# VUE_APP_CONTEXT_PATH = '/yyb_web'
 # VUE_APP_CONTEXT_PATH = '/yyb_shop'
 
 # 鎺ュ彛鍓嶇紑
diff --git a/company/.env.development b/company/.env.development
index a7e4e84..26cfba6 100644
--- a/company/.env.development
+++ b/company/.env.development
@@ -2,13 +2,14 @@
 NODE_ENV = 'development'
 
 # 鎺ュ彛鍓嶇紑
-# VUE_APP_API_PREFIX = '/yyb_admin_api'
+VUE_APP_API_PREFIX = '/yyb_admin_api'
 VUE_APP_SYSTEM_TITLE = '浜戞槗淇濆鎴锋湇鍔$郴缁�-骞冲彴绔�'
+VUE_APP_CONTEXT_PATH = '/yyb_admin'
 
 VUE_APP_COOKIE_NAME='dmplat-auth-token'
 
+# 娴嬭瘯鏈�
 # VUE_APP_API = 'https://dmtest.ahapp.net/yyb_admin_api/'
 
-#VUE_APP_API = 'http://localhost:10030/'
-#VUE_APP_API = 'http://192.168.0.135:10030/'
-VUE_APP_API = 'https://www.yyb.red/yyb_admin_api/'
+# 浠诲悍
+VUE_APP_API = 'http://192.168.0.162:10030/'
diff --git a/company/.env.developmentCom b/company/.env.developmentCom
index 111d872..c2c8c29 100644
--- a/company/.env.developmentCom
+++ b/company/.env.developmentCom
@@ -4,11 +4,11 @@
 # 鎺ュ彛鍓嶇紑
 # VUE_APP_API_PREFIX = '/yyb_admin_api'
 VUE_APP_SYSTEM_TITLE = '浜戞槗淇濆鎴锋湇鍔$郴缁�-浼佷笟绔�'
-
+VUE_APP_CONTEXT_PATH = '/yyb_web'
 VUE_APP_COOKIE_NAME='doumee-auth-token'
-VUE_APP_API = 'https://dmtest.ahapp.net/yyb_admin_api/'
 
-#VUE_APP_API = 'http://localhost:10031/'
-#VUE_APP_API = 'http://192.168.0.135:10031/'
+# VUE_APP_API = 'https://dmtest.ahapp.net/yyb_web_api/'
+
+VUE_APP_API = 'http://192.168.0.162:10031/'
 
 # VUE_APP_API = 'https://www.yyb.red/yyb_web_api/'
diff --git a/company/.env.developmentShop b/company/.env.developmentShop
index 1c61b78..f3cbf46 100644
--- a/company/.env.developmentShop
+++ b/company/.env.developmentShop
@@ -5,9 +5,10 @@
 # VUE_APP_API_PREFIX = '/yyb_admin_api'
 VUE_APP_COOKIE_NAME='dmshop-auth-token'
 VUE_APP_SYSTEM_TITLE = '浜戞槗淇濆鎴锋湇鍔$郴缁�-鍟嗘埛绔�'
-#VUE_APP_API = 'https://www.yyb.red/yyb_shop_api/'
+VUE_APP_CONTEXT_PATH = '/yyb_shop'
+VUE_APP_API = 'https://dmtest.ahapp.net/yyb_shop_api/'
 
- VUE_APP_API = 'http://192.168.0.135:10032/'
+# VUE_APP_API = 'http://192.168.0.162:10032/'
 
 #VUE_APP_API = 'http://localhost:10032/'
 
diff --git a/company/.env.production b/company/.env.production
index 03b6275..1e74d9e 100644
--- a/company/.env.production
+++ b/company/.env.production
@@ -1,14 +1,14 @@
 # 鐢熶骇鐜閰嶇疆
 NODE_ENV = 'production'
-VUE_APP_CONTEXT_PATH = '/admin'
-
 VUE_APP_API_PREFIX = '/yyb_admin_api'
-VUE_APP_CONTEXT_NAME = 'admin'
+VUE_APP_CONTEXT_NAME = 'yyb_admin'
 VUE_APP_COOKIE_NAME='dmplat-auth-token'
 VUE_APP_SYSTEM_TITLE = '浜戞槗淇濆鎴锋湇鍔$郴缁�-骞冲彴绔�'
 
+VUE_APP_CONTEXT_PATH = '/yyb_admin'
+
 # 骞冲彴绔�
-# VUE_APP_API = 'https://dmtest.ahapp.net/yyb_admin_api/'
+VUE_APP_API = 'https://dmtest.ahapp.net/yyb_admin_api/'
 
 # 浼佷笟绔�
-VUE_APP_API = 'https://www.yyb.red/yyb_admin_api/'
+# VUE_APP_API = 'https://www.yyb.red/yyb_admin_api/'
diff --git a/company/.env.productionCom b/company/.env.productionCom
index 74dbcc8..e58bfab 100644
--- a/company/.env.productionCom
+++ b/company/.env.productionCom
@@ -3,9 +3,9 @@
 
 VUE_APP_API_PREFIX = '/yyb_web_api'
 
-#VUE_APP_CONTEXT_PATH = '/company'
+VUE_APP_CONTEXT_PATH = '/yyb_web'
 
-VUE_APP_CONTEXT_NAME = 'company'
+VUE_APP_CONTEXT_NAME = 'yyb_company'
 
 VUE_APP_COOKIE_NAME='doumee-auth-token'
 
diff --git a/company/.env.productionShop b/company/.env.productionShop
index 6623bf3..b73fc35 100644
--- a/company/.env.productionShop
+++ b/company/.env.productionShop
@@ -1,15 +1,14 @@
 # 鐢熶骇鐜閰嶇疆
 NODE_ENV = 'production'
 
-VUE_APP_CONTEXT_PATH = '/shop'
 VUE_APP_API_PREFIX = '/yyb_shop_api'
-VUE_APP_CONTEXT_NAME = 'shop'
+VUE_APP_CONTEXT_NAME = 'yyb_shop'
 VUE_APP_COOKIE_NAME='dmshop-auth-token'
-
+VUE_APP_CONTEXT_PATH = '/yyb_shop'
 # 骞冲彴绔�
-# VUE_APP_API = 'https://dmtest.ahapp.net/yyb_shop_api/'
+VUE_APP_API = 'https://dmtest.ahapp.net/yyb_shop_api/'
 
 VUE_APP_SYSTEM_TITLE = '浜戞槗淇濆鎴锋湇鍔$郴缁�-鍟嗘埛绔�'
 
 # 浼佷笟绔�
-VUE_APP_API = 'https://www.yyb.red/yyb_shop_api/'
+# VUE_APP_API = 'https://www.yyb.red/yyb_shop_api/'
diff --git a/company/public/template/personnel_no.xlsx b/company/public/template/personnel_no.xlsx
new file mode 100644
index 0000000..bf128e5
--- /dev/null
+++ b/company/public/template/personnel_no.xlsx
Binary files differ
diff --git a/company/src/api/business/applyChange.js b/company/src/api/business/applyChange.js
index 53f514b..bf4a495 100644
--- a/company/src/api/business/applyChange.js
+++ b/company/src/api/business/applyChange.js
@@ -57,3 +57,11 @@
 export function update (data) {
     return request.post('/business/applyChange/update', data)
 }
+
+// 瀵煎嚭淇濆崟涓嬫墍鏈夊姞鍑忎繚璇︽儏鍗�
+export function exportApplyJiajianBaoExcel (data) {
+    return request.post('/business/applyChange/exportApplyJiajianBaoExcel', data, {
+        trim: true,
+        download: true
+    })
+}
diff --git a/company/src/api/business/company.js b/company/src/api/business/company.js
index dba1e13..090cd33 100644
--- a/company/src/api/business/company.js
+++ b/company/src/api/business/company.js
@@ -55,3 +55,13 @@
 export function updateSolutions (data) {
     return request.post('/business/company/updateSolutions', data)
 }
+
+// 鏌ヨ褰撳墠浼佷笟杩涜闆嗗洟鐢宠鍙互鐢宠鐨勪紒涓�
+export function findAllCompanyList (data) {
+    return request.post('/business/company/findAllCompanyList', data)
+}
+
+// 鍙戣捣绛剧讲
+export function getSignLink (id) {
+    return request.get(`/business/companySolution/getSignLink?id=${id}`)
+}
diff --git a/company/src/api/business/companyDepartment.js b/company/src/api/business/companyDepartment.js
new file mode 100644
index 0000000..cb9f259
--- /dev/null
+++ b/company/src/api/business/companyDepartment.js
@@ -0,0 +1,42 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/business/companyDepartment/page', data, {
+    trim: true
+  })
+}
+
+// 鍒涘缓
+export function create (data) {
+  return request.post('/business/companyDepartment/create', data)
+}
+
+// 淇敼
+export function updateById (data) {
+  return request.post('/business/companyDepartment/updateById', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+  return request.get(`/business/companyDepartment/delete/${id}`)
+}
+
+// 缁勭粐鏍戞煡璇�
+export function tree () {
+  return request.get(`/business/companyDepartment/tree`)
+}
+
+// 鎺掑簭
+export function updateSort (data) {
+  return request.post('/business/companyDepartment/updateSort', data)
+}
+
+// 鎵归噺鍒犻櫎
+export function deleteByIdInBatch (ids) {
+  return request.get('/business/companyDepartment/delete/batch', {
+    params: {
+      ids
+    }
+  })
+}
diff --git a/company/src/api/business/companyPermission.js b/company/src/api/business/companyPermission.js
index 6afbf1a..c73e1fd 100644
--- a/company/src/api/business/companyPermission.js
+++ b/company/src/api/business/companyPermission.js
@@ -4,3 +4,13 @@
 export function create (data) {
     return request.post('/business/companyPermission/create', data)
 }
+
+// 鍒嗛〉鏌ヨ
+export function page (data) {
+    return request.post('/business/companyPermission/page', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+    return request.get(`/business/companyPermission/delete/${id}`)
+}
diff --git a/company/src/api/business/companyUserApply.js b/company/src/api/business/companyUserApply.js
new file mode 100644
index 0000000..c35a759
--- /dev/null
+++ b/company/src/api/business/companyUserApply.js
@@ -0,0 +1,38 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/business/companyUserApply/page', data, {
+    trim: true
+  })
+}
+
+// 鍒涘缓
+export function create (data) {
+  return request.post('/business/companyUserApply/create', data)
+}
+
+// 淇敼
+export function updateById (data) {
+  return request.post('/business/companyUserApply/updateById', data)
+}
+
+// 鏍规嵁ID鏌ヨ
+export function getById (id) {
+  return request.get(`business/companyUserApply/${id}`)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+  return request.get(`/business/companyUserApply/delete/${id}`)
+}
+
+// 瀹℃壒
+export function audit (data) {
+  return request.post('/business/companyUserApply/audit', data)
+}
+
+// 鍒嗛〉鏌ヨ
+export function page (data) {
+  return request.post('/business/companyUserApply/page', data)
+}
diff --git a/company/src/api/business/contract.js b/company/src/api/business/contract.js
new file mode 100644
index 0000000..2107d0b
--- /dev/null
+++ b/company/src/api/business/contract.js
@@ -0,0 +1,38 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/business/contract/page', data, {
+    trim: true
+  })
+}
+
+// 鍒涘缓
+export function create (data) {
+  return request.post('/business/contract/create', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+  return request.get(`/business/contract/delete/${id}`)
+}
+
+// 鏍规嵁id鏌ヨ
+export function contractId (id) {
+  return request.get(`/business/contract/${id}`)
+}
+
+// 淇敼
+export function updateById (data) {
+  return request.post('/business/contract/updateById', data)
+}
+
+// 鍚堝悓鍙栨秷
+export function cancel (id) {
+  return request.get(`/business/contract/cancel?id=${id}`)
+}
+
+// 鍙戣捣绛剧讲
+export function getSignLink (id) {
+  return request.get(`/business/contract/getSignLink?id=${id}`)
+}
diff --git a/company/src/api/business/customerService.js b/company/src/api/business/customerService.js
new file mode 100644
index 0000000..32675ea
--- /dev/null
+++ b/company/src/api/business/customerService.js
@@ -0,0 +1,38 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/business/customerService/page', data, {
+    trim: true
+  })
+}
+
+// 鍒涘缓
+export function create (data) {
+  return request.post('/business/customerService/create', data)
+}
+
+// 淇敼
+export function updateById (data) {
+  return request.post('/business/customerService/updateById', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+  return request.get(`/business/customerService/delete/${id}`)
+}
+
+// 鏍规嵁ID鏌ヨ
+export function findByCompanyId (companyId) {
+  return request.get(`/business/customerService/findByCompanyId?companyId=${companyId}`)
+}
+
+// 鎺堟潈浼佷笟
+export function auth (data) {
+  return request.post('/business/customerService/auth', data)
+}
+
+// 鏍规嵁ID鏌ヨ
+export function getById (id) {
+  return request.get(`/business/customerService/${id}`)
+}
diff --git a/company/src/api/business/insuranceApply.js b/company/src/api/business/insuranceApply.js
index bc52189..5976ae6 100644
--- a/company/src/api/business/insuranceApply.js
+++ b/company/src/api/business/insuranceApply.js
@@ -185,3 +185,8 @@
 export function getApplyPower (data) {
     return request.post('/business/insuranceApply/getApplyPower', data)
 }
+
+// 鎶曚繚澶嶅
+export function reexamineCheck (data) {
+    return request.post('/business/insuranceApply/reexamineCheck', data)
+}
diff --git a/company/src/api/business/solutions.js b/company/src/api/business/solutions.js
index 4d890c1..aedfa3a 100644
--- a/company/src/api/business/solutions.js
+++ b/company/src/api/business/solutions.js
@@ -13,7 +13,10 @@
 }
 
 // 鏌ヨ鍏ㄩ儴淇濋櫓鏂规
-export function all (data) {
+export function all (data, type) {
+    if (!type) {
+        data.status = 0
+    }
     return request.post('/business/solutions/list', data)
 }
 
@@ -41,3 +44,13 @@
 export function getNewVersion (id) {
     return request.get(`/business/solutions/getNewVersion?solutionId=${id}`)
 }
+
+// 鏌ヨ浼佷笟鍙娇鐢ㄦ柟妗堬紙宸茬缃诧級
+export function getUseList (companyId, dateType) {
+    return request.get(`/business/solutions/getUseList?companyId=${companyId}&dateType=${dateType}`)
+}
+
+// 鏍规嵁ID鍒犻櫎
+export function deleteById (id) {
+    return request.get(`/business/solutions/delete/${id}`)
+}
diff --git a/company/src/api/business/solutionsBase.js b/company/src/api/business/solutionsBase.js
index ed0f114..477706e 100644
--- a/company/src/api/business/solutionsBase.js
+++ b/company/src/api/business/solutionsBase.js
@@ -17,6 +17,16 @@
   return request.post('/business/solutionsBase/updateById', data)
 }
 
+// 鍒楄〃鏌ヨ
+export function list (data) {
+  return request.post('/business/solutionsBase/list', data)
+}
+
+// 绂佺敤鍚敤
+export function updateStatus (data) {
+  return request.post('/business/solutionsBase/updateStatus', data)
+}
+
 // 鍒犻櫎
 export function deleteById (id) {
   return request.get(`/business/solutionsBase/delete/${id}`)
diff --git a/company/src/api/business/unionApply.js b/company/src/api/business/unionApply.js
index ec6b3af..aa0de3b 100644
--- a/company/src/api/business/unionApply.js
+++ b/company/src/api/business/unionApply.js
@@ -43,3 +43,8 @@
 export function getById (id) {
     return request.get(`/business/unionApply/${id}`)
 }
+
+// 鎶曚繚澶嶅
+export function reexamineCheck (data) {
+    return request.post('/business/unionApply/reexamineCheck', data)
+}
diff --git a/company/src/api/business/worktype.js b/company/src/api/business/worktype.js
index c6fbbfc..39238ec 100644
--- a/company/src/api/business/worktype.js
+++ b/company/src/api/business/worktype.js
@@ -14,3 +14,8 @@
 export function findListByDTO (data) {
     return request.post('/business/worktype/findListByDTO', data)
 }
+
+// 涓绘柟妗堝鍏ュ伐绉�
+export function importExcelForSolution (data) {
+    return request.post('/business/worktype/importExcelForSolution', data)
+}
diff --git a/company/src/api/system/common.js b/company/src/api/system/common.js
index 7689187..220281c 100644
--- a/company/src/api/system/common.js
+++ b/company/src/api/system/common.js
@@ -32,6 +32,11 @@
   })
 }
 
+// 鍒囨崲浼佷笟
+export function switchCompany (params) {
+  return request.get('/system/switchCompany', { params })
+}
+
 // 鍝佺墝鍒楄〃鏌ヨ
 export function brand (data) {
   return request.post('/business/brand/list', data)
diff --git a/company/src/api/system/role.js b/company/src/api/system/role.js
index 5d9e34b..8f9093f 100644
--- a/company/src/api/system/role.js
+++ b/company/src/api/system/role.js
@@ -47,3 +47,8 @@
 export function createRoleMenu (data) {
   return request.post('/system/role/createRoleMenu', data)
 }
+
+// 閰嶇疆瑙掕壊鏁版嵁鏉冮檺
+export function createRoleDataPermission (data) {
+  return request.post('/system/role/createRoleDataPermission', data)
+}
diff --git a/company/src/api/system/user.js b/company/src/api/system/user.js
index 6473428..e47475a 100644
--- a/company/src/api/system/user.js
+++ b/company/src/api/system/user.js
@@ -47,3 +47,13 @@
 export function updUserStatus (params) {
   return request.get('/system/user/updUserStatus', {params})
 }
+
+// 璁剧疆鎴栧彇娑堜富绠�
+export function updateHead (data) {
+  return request.post('/system/user/updateHead', data)
+}
+
+// 鏌ヨ褰撳墠浼佷笟涓嬫墍鏈夌敤鎴�
+export function findUserList (data) {
+  return request.post('/system/user/findUserList', data)
+}
diff --git a/company/src/assets/icons/ic_company@2x.png b/company/src/assets/icons/ic_company@2x.png
new file mode 100644
index 0000000..c98e42c
--- /dev/null
+++ b/company/src/assets/icons/ic_company@2x.png
Binary files differ
diff --git a/company/src/assets/style/style.scss b/company/src/assets/style/style.scss
index 620ff86..e3d4276 100644
--- a/company/src/assets/style/style.scss
+++ b/company/src/assets/style/style.scss
@@ -99,7 +99,15 @@
 .settle-status1,.change-status6,
 .tax-status2,.union-apply-status4,
 .du-status2 {
-  color: #F95601 !important;
+  color: #f95601 !important;
+}
+
+.change-status6 {
+  color: #999 !important;
+}
+
+.change-status5, .change-status8 {
+  color: red !important;
 }
 
 .tip-warn {
diff --git a/company/src/components/business/OperaApplyChangeCheckWindow.vue b/company/src/components/business/OperaApplyChangeCheckWindow.vue
index eebee83..b14447b 100644
--- a/company/src/components/business/OperaApplyChangeCheckWindow.vue
+++ b/company/src/components/business/OperaApplyChangeCheckWindow.vue
@@ -101,7 +101,7 @@
                 <div class="form_item">
                     <div class="form_item_label"><span>*</span>涓婁紶鎵瑰崟锛�</div>
                     <div class="form_item_val">
-                      <UploadFile :uploadData="{ folder: 'apply',fileType:'.pdf' }" :fileList="form.fileList1" @uploadSuccess="baoxianFileUploaded" />
+                      <UploadFile :limit="99" :uploadData="{ folder: 'apply',fileType:'.pdf' }" :fileList="form.fileList1" @remove="removePIDAN" @uploadSuccess="baoxianFileUploaded" />
                     </div>
                 </div>
             </div>
@@ -122,7 +122,7 @@
                 <div class="form_item">
                     <div class="form_item_label"><span>*</span>涓婁紶鎵瑰崟锛�</div>
                     <div class="form_item_val">
-                      <UploadFile :uploadData="{ folder: 'apply',fileType:'.pdf' }" :fileList="form.fileList2" @uploadSuccess="editBaoxianFileUploaded" />
+                      <UploadFile :limit="99" :uploadData="{ folder: 'apply',fileType:'.pdf' }" @remove="removeEditPiDan" :fileList="form.fileList2" @uploadSuccess="editBaoxianFileUploaded" />
                     </div>
                 </div>
                 <div class="form_item">
@@ -185,8 +185,8 @@
         applyStartTime: null,
         delValidTime: null,
         validCode: null,
-        pidanFile: null,
-        editPidanFile: null,
+        pidanFile: [],
+        editPidanFile: [],
         fileList1: [],
         fileList2: [],
         selectRadio: 0
@@ -217,8 +217,8 @@
         delValidTime: null,
         applyStartTime: null,
         validCode: null,
-        pidanFile: null,
-        editPidanFile: null,
+        pidanFile: [],
+        editPidanFile: [],
         fileList1: [],
         fileList2: [],
         selectRadio: 0
@@ -313,10 +313,24 @@
       }
     },
     baoxianFileUploaded (data) {
-      this.form.pidanFile = data
+      this.form.pidanFile.push(data)
+    },
+    removePIDAN(e) {
+      this.form.pidanFile.forEach((item, index) => {
+        if (e === item.imgaddr) {
+          this.form.pidanFile.splice(index, 1)
+        }
+      })
     },
     editBaoxianFileUploaded (data) {
-      this.form.editPidanFile = data
+      this.form.editPidanFile.push(data)
+    },
+    removeEditPiDan(e) {
+        this.form.editPidanFile.forEach((item, index) => {
+            if (e === item.imgaddr) {
+                this.form.editPidanFile.splice(index, 1)
+            }
+        })
     },
     backDo () {
       this.$dialog.messageConfirm('纭杩涜璇ユ搷浣滃悧锛�')
@@ -353,7 +367,7 @@
             applyStartTime: (this.model.delOnlyReplace != 1 ? this.form.applyStartTime : this.form.delValidTime),
             delValidTime: this.form.delValidTime,
             validCode: this.form.validCode,
-            pidanFile: this.form.pidanFile
+            pidanFileList: this.form.pidanFile
           })
             .then(response => {
               this.visible = false
@@ -367,7 +381,7 @@
       this.$dialog.messageConfirm('纭杩涜璇ユ搷浣滃悧锛�')
         .then(() => {
           this.isWorking = true
-          editChangePidan({ id: this.model.id, checkInfo: this.form.editCheckInfo, validCode: this.form.editValidCode, pidanFile: this.form.editPidanFile })
+          editChangePidan({ id: this.model.id, checkInfo: this.form.editCheckInfo, validCode: this.form.editValidCode, pidanFileList: this.form.editPidanFile })
             .then(response => {
               this.visible = false
               this.$emit('success')
diff --git a/company/src/components/business/OperaApplyChangeDetailWindow.vue b/company/src/components/business/OperaApplyChangeDetailWindow.vue
index 763ce82..9e76416 100644
--- a/company/src/components/business/OperaApplyChangeDetailWindow.vue
+++ b/company/src/components/business/OperaApplyChangeDetailWindow.vue
@@ -49,8 +49,9 @@
                           <el-button v-if="[2].includes(model.status)" type="primary" @click="viewPidan">鏌ョ湅鎵瑰崟</el-button>
                           <el-button v-if=" model.solutionType == 0 && [1].includes(model.status)" type="primary" @click="$refs.OperaApplyChangeCheckWindow.open('涓婁紶鎵瑰崟',model,3)">涓婁紶鎵瑰崟</el-button>
                           <el-button  v-if="model.solutionType == 0 &&[3,4].includes(model.status)"  type="primary" @click="$refs.OperaApplyChangeCheckWindow.open('椹冲洖閫�鍥炵敵璇�',model,5)">椹冲洖閫�鍥炵敵璇�</el-button>
-                          <el-button  v-if="model.solutionType == 0 &&[0,1,3,4].includes(model.status)" type="danger" @click="$refs.OperaApplyChangeCheckWindow.open('閫�鍥炵敵璇�',model,1)">閫�鍥炵敵璇�</el-button>
+                          <el-button  v-if="[0,1].includes(model.solutionType) &&[0,1,3,4].includes(model.status)" type="danger" @click="$refs.OperaApplyChangeCheckWindow.open('閫�鍥炵敵璇�',model,1)">閫�鍥炵敵璇�</el-button>
                           <el-button  v-if="model.solutionType == 0 &&[2].includes(model.status)"  type="danger" @click="$refs.OperaApplyChangeCheckWindow.open('淇敼鎵瑰崟',model,4)">淇敼鎵瑰崟</el-button>
+                            <el-button v-if=" model.solutionType == 1 && [1].includes(model.status)" type="primary" @click="$refs.ApplyChangeDetails.open('鎶曚繚瀹℃牳',apply,model,1)">鎵规敼瀹℃牳</el-button>
                         </template>
                   </div>
                 </div>
@@ -146,6 +147,7 @@
                             label="韬唤璇佸彿">
                         </el-table-column>
                         <el-table-column
+                            v-if="apply && apply.hasDispatchUnit !== 1"
                             prop="duName"
                             label="娲鹃仯鍗曚綅">
                         </el-table-column>
@@ -242,11 +244,20 @@
                 <el-button @click="visiblePhone=false">鍙� 娑�</el-button>
             </span>
       </el-dialog>
+        <el-dialog title="鎵瑰崟鍒楄〃" :modal="false" :visible.sync="flieVisible">
+            <el-table :data="model.pidanFileList">
+                <el-table-column property="name" label="鏂囦欢鍚嶇О"></el-table-column>
+                <el-table-column label="鎿嶄綔" width="90">
+                    <template slot-scope="{row}">
+                        <el-button type="primary" @click="yulan(row.name, row.fileurlFull)">棰勮</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+        </el-dialog>
       <template v-slot:footer>
         <el-button @click="visible=false">杩斿洖</el-button>
       </template>
     </GlobalWindow>
-
 </template>
 
 <script>
@@ -320,7 +331,8 @@
       activeName: '0',
         total: 0,
       currentPage: 1,
-        loading: false
+        loading: false,
+      flieVisible: false,
     }
   },
   created () {
@@ -447,10 +459,10 @@
        }
     },
     viewPidan(){
-      if(this.model.pidanFile && this.model.pidanFile.fileurlFull){
-        this.$refs.OperaPdfViewerWindow.open('鏌ョ湅鎵瑰崟',this.model.pidanFile.fileurlFull)
-        // window.open(this.model.pidanFile.fileurlFull)
-      }
+       this.flieVisible = true
+    },
+    yulan(name, url) {
+      this.$refs.OperaPdfViewerWindow.open(name, url)
     },
     handleSizeChange(val){
         console.log(val)
diff --git a/company/src/components/business/OperaApplyChangeUnitCheckWindow.vue b/company/src/components/business/OperaApplyChangeUnitCheckWindow.vue
index 61c3a72..bcae577 100644
--- a/company/src/components/business/OperaApplyChangeUnitCheckWindow.vue
+++ b/company/src/components/business/OperaApplyChangeUnitCheckWindow.vue
@@ -54,7 +54,7 @@
                 <div class="form_item">
                     <div class="form_item_label">涓婁紶鎵瑰崟锛�</div>
                     <div class="form_item_val">
-                      <UploadFile :uploadData="{ folder: 'apply',fileType:'.pdf' }" :fileList="form.fileList1" @uploadSuccess="baoxianFileUploaded" />
+                      <UploadFile :uploadData="{ folder: 'apply',fileType:'.pdf' }" :limit="99" :fileList="form.fileList1" @remove="removePIDAN" @uploadSuccess="baoxianFileUploaded" />
                     </div>
                 </div>
             </div>
@@ -73,7 +73,7 @@
                 <div class="form_item">
                     <div class="form_item_label"><span>*</span>涓婁紶鎵瑰崟锛�</div>
                     <div class="form_item_val">
-                      <UploadFile :uploadData="{ folder: 'apply',fileType:'.pdf' }" :fileList="form.fileList2" @uploadSuccess="editBaoxianFileUploaded" />
+                      <UploadFile :uploadData="{ folder: 'apply',fileType:'.pdf' }" :limit="99" @remove="removeEditPiDan" :fileList="form.fileList2" @uploadSuccess="editBaoxianFileUploaded" />
                     </div>
                 </div>
                 <div class="form_item">
@@ -135,8 +135,8 @@
           editValidCode: '',
           applyStartTime:null,
          validCode:null,
-          pidanFile:null,
-         editPidanFile:null,
+          pidanFile:[],
+         editPidanFile:[],
           fileList1: [],
           fileList2: [],
           selectRadio:0
@@ -166,8 +166,8 @@
          editValidCode: '',
          applyStartTime:null,
          validCode:null,
-         pidanFile:null,
-         editPidanFile:null,
+         pidanFile:[],
+         editPidanFile:[],
          fileList1: [],
          fileList2: [],
          selectRadio:0
@@ -219,11 +219,25 @@
        }
     },
     baoxianFileUploaded(data){
-      this.form.pidanFile=data
+      this.form.pidanFile.push(data)
     },
+      removePIDAN(e) {
+          this.form.pidanFile.forEach((item, index) => {
+              if (item.imgaddr === e) {
+                  this.form.pidanFile.splice(index, 1)
+              }
+          })
+      },
     editBaoxianFileUploaded(data){
-      this.form.editPidanFile=data
+      this.form.editPidanFile.push(data)
     },
+      removeEditPiDan(imgaddr) {
+          this.form.editPidanFile.forEach((item, index) => {
+              if (imgaddr === item.imgaddr) {
+                  this.form.editPidanFile.splice(index, 1)
+              }
+          })
+      },
     backDo(){
       this.$dialog.messageConfirm('纭杩涜璇ユ搷浣滃悧锛�')
           .then(() => {
@@ -254,7 +268,7 @@
       this.$dialog.messageConfirm('纭杩涜璇ユ搷浣滃悧锛�')
           .then(() => {
             this.isWorking = true
-            uploadChangePidan({id:this.model.id,applyStartTime:this.form.applyStartTime, validCode:this.form.validCode,pidanFile:this.form.pidanFile})
+            uploadChangePidan({id:this.model.id,applyStartTime:this.form.applyStartTime, validCode:this.form.validCode,pidanFileList:this.form.pidanFile})
                 .then(response => {
                   this.visible = false
                   this.$emit('success')
@@ -268,7 +282,7 @@
       this.$dialog.messageConfirm('纭杩涜璇ユ搷浣滃悧锛�')
           .then(() => {
             this.isWorking = true
-            editChangePidan({id:this.model.id, checkInfo:this.form.editCheckInfo,validCode:this.form.editValidCode,pidanFile:this.form.editPidanFile})
+            editChangePidan({id:this.model.id, checkInfo:this.form.editCheckInfo,validCode:this.form.editValidCode,pidanFileList:this.form.editPidanFile})
                 .then(response => {
                   this.visible = false
                   this.$emit('success')
diff --git a/company/src/components/business/OperaApplyChangeUnitDetailWindow.vue b/company/src/components/business/OperaApplyChangeUnitDetailWindow.vue
index d245367..e4fcf77 100644
--- a/company/src/components/business/OperaApplyChangeUnitDetailWindow.vue
+++ b/company/src/components/business/OperaApplyChangeUnitDetailWindow.vue
@@ -49,7 +49,8 @@
                       <el-button v-if="[2].includes(model.status)" type="primary" @click="viewPidan">鏌ョ湅鎵瑰崟</el-button>
                       <el-button v-if=" model.solutionType == 0 && [1].includes(model.status)" type="primary" @click="$refs.OperaApplyChangeCheckWindow.open('涓婁紶鎵瑰崟',model,3)">涓婁紶鎵瑰崟</el-button>
                       <el-button  v-if="model.solutionType == 0 &&[3,4].includes(model.status)"  type="primary" @click="$refs.OperaApplyChangeCheckWindow.open('椹冲洖閫�鍥炵敵璇�',model,5)">椹冲洖閫�鍥炵敵璇�</el-button>
-                      <el-button  v-if="model.solutionType == 0 &&[0,1,3,4].includes(model.status)" type="danger" @click="$refs.OperaApplyChangeCheckWindow.open('閫�鍥炵敵璇�',model,1)">閫�鍥炵敵璇�</el-button>
+                        <el-button v-if=" model.solutionType == 1 && [1].includes(model.status)" type="primary" @click="$refs.ApplyChangeDetails.open('鎶曚繚瀹℃牳',apply,model,1)">鎵规敼瀹℃牳</el-button>
+                        <el-button  v-if="[0,1,3,4].includes(model.status)" type="danger" @click="$refs.OperaApplyChangeCheckWindow.open('閫�鍥炵敵璇�',model,1)">閫�鍥炵敵璇�</el-button>
                       <el-button  v-if="model.solutionType == 0 &&[2].includes(model.status)"  type="danger" @click="$refs.OperaApplyChangeCheckWindow.open('淇敼鎵瑰崟',model,4)">淇敼鎵瑰崟</el-button>
                     </template>
                   </div>
@@ -126,6 +127,7 @@
                             label="韬唤璇佸彿">
                         </el-table-column>
                         <el-table-column
+                            v-if="hasDispatchUnit !== 1"
                             prop="oldDuName"
                             label="鍘熸淳閬e崟浣�">
                         </el-table-column>
@@ -138,6 +140,7 @@
                             label="淇濋櫓鐢熸晥璧锋湡">
                         </el-table-column>
                       <el-table-column
+                          v-if="hasDispatchUnit !== 1"
                           prop="duName"
                           label="鏇存崲鍚庢淳閬e崟浣�">
                       </el-table-column>
@@ -211,6 +214,27 @@
                 <el-button @click="visiblePhone=false">鍙� 娑�</el-button>
             </span>
       </el-dialog>
+        <el-dialog
+                title="鏌ョ湅鎵瑰崟"
+                :visible.sync="visibleFile"
+                width="800px"
+                :modal="false"
+                :show-close="true"
+                :close-on-click-modal="false"
+                append-to-body
+                center>
+            <el-table :data="model.pidanFileList">
+                <el-table-column property="name" label="鏂囦欢鍚�"></el-table-column>
+                <el-table-column label="鎿嶄綔" width="90px">
+                    <template slot-scope="{row}">
+                        <el-button type="primary" @click="chakan(row.name, row.fileurlFull)">鏌ョ湅</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+            <span slot="footer" class="dialog-footer">
+                <el-button @click="visibleFile=false">鍏� 闂�</el-button>
+            </span>
+        </el-dialog>
         <ApplyChangeUnitDetails ref="ApplyChangeDetails" @success="successEvent" />
         <OperaApplyChangeUnitCheckWindow ref="OperaApplyChangeCheckWindow" @success="successEvent" />
         <!--    浼佷笟鐢宠閫�鍥�    -->
@@ -307,7 +331,9 @@
       activeName: '0',
       total: 0,
       currentPage: 1,
-        loading: false
+        loading: false,
+      hasDispatchUnit: null,
+      visibleFile: false
     }
   },
   created () {
@@ -330,6 +356,9 @@
       this.timer=null
       this.getDetail()
       this.getList()
+    },
+    chakan(name, url) {
+      this.$refs.OperaPdfViewerWindow.open(name, url)
     },
     send () {
       sendSms({
@@ -439,10 +468,11 @@
       }
     },
     viewPidan(){
-      if(this.model.pidanFile && this.model.pidanFile.fileurlFull){
-        this.$refs.OperaPdfViewerWindow.open('鏌ョ湅鎵瑰崟',this.model.pidanFile.fileurlFull)
-        // window.open(this.model.pidanFile.fileurlFull)
-      }
+      this.visibleFile = true
+      // if(this.model.pidanFile && this.model.pidanFile.fileurlFull){
+      //   this.$refs.OperaPdfViewerWindow.open('鏌ョ湅鎵瑰崟',this.model.pidanFile.fileurlFull)
+      //   // window.open(this.model.pidanFile.fileurlFull)
+      // }
     },
     handleSizeChange (val) {
       console.log(val)
@@ -457,15 +487,14 @@
     },
     getDetail () {
       getDetail(this.dataId).then(res => {
+        this.hasDispatchUnit = res.hasDispatchUnit
         this.apply = res
-        console.log(this.tableData)
       }).catch(err => {
       })
       getChangeDetail(this.modelId).then(res => {
         this.model = res
         this.tableData = new Array()
         this.tableData.push(res)
-        console.log(this.tableData)
         this.activities = res.applyLogList
       }).catch(err => {
       })
diff --git a/company/src/components/business/OperaCompanyDepartmentWindow.vue b/company/src/components/business/OperaCompanyDepartmentWindow.vue
new file mode 100644
index 0000000..ae1d5d8
--- /dev/null
+++ b/company/src/components/business/OperaCompanyDepartmentWindow.vue
@@ -0,0 +1,138 @@
+<template>
+    <GlobalWindow
+        :title="title"
+        :visible.sync="visible"
+        :confirm-working="isWorking"
+        @confirm="confirm"
+    >
+        <el-form :model="form" ref="form" :rules="rules">
+            <el-form-item label="涓婄骇缁勭粐" prop="parentId">
+                <el-cascader
+                    :options="organization"
+                    v-model="form.parentId"
+                    :disabled="form.disabled"
+                    placeholder="璇烽�夋嫨涓婄骇缁勭粐"
+                    :props="{ label: 'name', value: 'id', checkStrictly: true }"
+                    clearable />
+            </el-form-item>
+            <el-form-item label="缁勭粐鍚嶇О" prop="name">
+                <el-input v-model="form.name" placeholder="璇疯緭鍏ュ悕绉�" v-trim/>
+            </el-form-item>
+        </el-form>
+    </GlobalWindow>
+</template>
+
+<script>
+  import BaseOpera from '@/components/base/BaseOpera'
+  import GlobalWindow from '@/components/common/GlobalWindow'
+  import { tree } from '@/api/business/companyDepartment'
+  import { mapState } from 'vuex'
+  export default {
+    name: 'OperaCompanyDepartmentWindow',
+    extends: BaseOpera,
+    components: { GlobalWindow },
+    computed: {
+      ...mapState(['userInfo'])
+    },
+    data () {
+      return {
+        // 琛ㄥ崟鏁版嵁
+        form: {
+          id: null,
+          name: '',
+          parentId: [],
+          type: '',
+          disabled: false
+        },
+        // 楠岃瘉瑙勫垯
+        rules: {
+          name: [
+            { required: true, message: '璇疯緭鍏ョ粍缁囧悕绉�' }
+          ]
+        },
+        organization: []
+      }
+    },
+    created () {
+      this.config({
+        api: '/business/companyDepartment',
+        'field.id': 'id'
+      })
+    },
+    methods: {
+      __confirmCreate () {
+        this.$refs.form.validate((valid) => {
+          if (!valid) {
+            return
+          }
+          let obj = JSON.parse(JSON.stringify(this.form))
+          obj.parentId = obj.parentId && obj.parentId.length > 0 ? obj.parentId[0] : ''
+          obj.type = this.userInfo.type
+          // 璋冪敤鏂板缓鎺ュ彛
+          this.isWorking = true
+          this.api.create(obj)
+            .then(() => {
+              this.visible = false
+              this.$tip.apiSuccess('鏂板缓鎴愬姛')
+              this.$emit('success')
+            })
+            .catch(e => {
+              this.$tip.apiFailed(e)
+            })
+            .finally(() => {
+              this.isWorking = false
+            })
+        })
+      },
+      __confirmEdit () {
+        this.$refs.form.validate((valid) => {
+          if (!valid) {
+            return
+          }
+          // 璋冪敤鏂板缓鎺ュ彛
+          let obj = JSON.parse(JSON.stringify(this.form))
+          obj.parentId = obj.parentId && obj.parentId.length > 0 ? obj.parentId[0] : ''
+          obj.type = this.userInfo.type
+          this.isWorking = true
+          this.api.updateById(obj)
+            .then(() => {
+              this.visible = false
+              this.$tip.apiSuccess('淇敼鎴愬姛')
+              this.$emit('success')
+            })
+            .catch(e => {
+              this.$tip.apiFailed(e)
+            })
+            .finally(() => {
+              this.isWorking = false
+            })
+        })
+      },
+      open (title, target) {
+        this.title = title
+        this.visible = true
+        this.getTree()
+        // 鏂板缓
+        if (target == null) {
+          this.$nextTick(() => {
+            this.$refs.form.resetFields()
+            this.form[this.configData['field.id']] = null
+          })
+          return
+        }
+        // 缂栬緫
+        this.$nextTick(() => {
+          for (const key in this.form) {
+            this.form[key] = target[key]
+          }
+        })
+      },
+      getTree() {
+        tree()
+          .then(records => {
+            this.organization = records
+          })
+      }
+    }
+  }
+</script>
diff --git a/company/src/components/business/OperaCompanyDescWindow.vue b/company/src/components/business/OperaCompanyDescWindow.vue
index b10e676..eaf6c4a 100644
--- a/company/src/components/business/OperaCompanyDescWindow.vue
+++ b/company/src/components/business/OperaCompanyDescWindow.vue
@@ -98,6 +98,30 @@
                         <el-checkbox :true-label="1" :false-label="0" disabled v-model="row.canReduce">鍑忎繚</el-checkbox>
                     </template>
                 </el-table-column>
+                <el-table-column
+                    align="center"
+                    label="绛剧讲鐘舵��">
+                    <template slot-scope="{row}">
+                        <template v-if="row.signStatus == 0">寰呯缃�</template>
+                        <template v-else-if="row.signStatus == 1">宸茬缃�</template>
+                    </template>
+                </el-table-column>
+                <el-table-column
+                    prop="signDate"
+                    align="center"
+                    label="绛剧讲鏃堕棿">
+                </el-table-column>
+                <el-table-column
+                    prop="signUserName"
+                    align="center"
+                    label="绛剧讲浜�">
+                </el-table-column>
+                <el-table-column
+                    label="鎿嶄綔">
+                    <template slot-scope="{row}">
+                        <el-button type="text" v-if="row.signStatus === 1" @click="openFile(row.fileSignUrl)">鏌ョ湅绛剧讲鏂规涔�</el-button>
+                    </template>
+                </el-table-column>
             </el-table>
             <div class="info_list" v-if="JSON.stringify(form) !== '{}'">
                 <div class="info_list_item">
@@ -155,6 +179,7 @@
         <OperaCompanyWindow ref="operaCompanyWindow" @success="callback"/>
         <!-- 淇敼淇濋櫓鏂规 -->
         <modification ref="modification" @success="callback"/>
+        <OperaPdfViewerWindow ref="operaPdfViewerWindow" />
         <!-- 淇敼鎵嬫満鍙� -->
         <el-dialog
             title="鏇存敼缁戝畾鎵嬫満鍙�"
@@ -193,13 +218,14 @@
 import GlobalWindow from '@/components/common/GlobalWindow'
 import OperaCompanyWindow from '@/components/business/OperaCompanyWindow'
 import modification from '@/components/business/modification'
+import OperaPdfViewerWindow from '@/components/business/OperaPdfViewerWindow'
 import { getById, updatePhone } from '@/api/business/company'
 import { listForCompany } from '@/api/business/solutions'
 import { sendSms } from '@/api/business/smsEmail'
 export default {
   name: 'OperaCompanyDescWindow',
   extends: BaseOpera,
-  components: { GlobalWindow, OperaCompanyWindow, modification },
+  components: { GlobalWindow, OperaCompanyWindow, modification, OperaPdfViewerWindow },
   data () {
     return {
       ruleForm: {
@@ -225,6 +251,9 @@
     })
   },
   methods: {
+    openFile(url) {
+      this.$refs.operaPdfViewerWindow.open('鏂规纭涔�', url)
+    },
     close () {
       this.visiblePhone = false
       this.phone = ''
@@ -344,7 +373,8 @@
                   solutionName: item.solutionName,
                   shopName: item.shopName,
                   canAdd: item.canAdd,
-                  canReduce: item.canReduce
+                  canReduce: item.canReduce,
+                  ...item
                 }
               })
               console.log(that.form)
diff --git a/company/src/components/business/OperaCompanyUserApplyCarefulWindow.vue b/company/src/components/business/OperaCompanyUserApplyCarefulWindow.vue
new file mode 100644
index 0000000..60d5475
--- /dev/null
+++ b/company/src/components/business/OperaCompanyUserApplyCarefulWindow.vue
@@ -0,0 +1,179 @@
+<template>
+    <GlobalWindow
+        :title="title"
+        width="100%"
+        :visible.sync="visible"
+        :confirm-working="isWorking"
+        @confirm="confirm"
+    >
+        <div class="info" v-if="info">
+            <div class="info_list">
+                <div class="info_list_item" style="width: 100%;">
+                    <div class="info_list_item_label">鐢宠鎺堟潈璐﹀彿锛�</div>
+                    <div class="info_list_item_val">{{info.userName}}</div>
+                </div>
+                <div class="info_list_item" style="width: 100%;">
+                    <div class="info_list_item_label">鎺堟潈绠$悊浼佷笟锛�</div>
+                    <div class="info_list_item_val">{{info.companyNames}}</div>
+                </div>
+                <div class="info_list_item" style="width: 100%;">
+                    <div class="info_list_item_label">鐢宠璇存槑锛�</div>
+                    <div class="info_list_item_val">{{info.content}}</div>
+                </div>
+                <div class="info_list_item" style="width: 100%;">
+                    <div class="info_list_item_label">鐢宠闄勪欢锛�</div>
+                    <div class="info_list_item_val">
+                        <div class="info_list_item_val_cul">
+                            <u v-for="(item, index) in info.multifileList" :key="index" @click="openFile(item.fileurlFull)">{{item.name}}</u>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <el-form :model="form" ref="form" :rules="rules">
+            <el-form-item label="鏄惁閫氳繃" prop="status">
+                <el-radio-group v-model="form.status">
+                    <el-radio :label="1">瀹℃牳閫氳繃</el-radio>
+                    <el-radio :label="2">瀹℃牳涓嶉�氳繃</el-radio>
+                </el-radio-group>
+            </el-form-item>
+            <el-form-item :label="form.status === 1 ? '澶囨敞鐞嗙敱' : '椹冲洖鐞嗙敱'" prop="checkInfo" :rules="form.status === 2 ? { required: true, message: '椹冲洖鐞嗙敱涓嶈兘涓虹┖', trigger: 'blur' } : { required: false } ">
+                <el-input
+                    type="textarea"
+                    placeholder="璇疯緭鍏�"
+                    v-model="form.checkInfo"
+                    maxlength="300"
+                    show-word-limit />
+            </el-form-item>
+        </el-form>
+        <!-- 棰勮pdf -->
+        <OperaPdfViewerWindow ref="OperaPdfViewerWindow" />
+    </GlobalWindow>
+</template>
+
+<script>
+  import BaseOpera from '@/components/base/BaseOpera'
+  import GlobalWindow from '@/components/common/GlobalWindow'
+  import UploadFile from '@/components/common/UploadFile'
+  import OperaPdfViewerWindow from '@/components/business/OperaPdfViewerWindow'
+  import { audit, getById } from '@/api/business/companyUserApply'
+  export default {
+    name: 'OperaCompanyUserApplyCarefulWindow',
+    extends: BaseOpera,
+    components: { GlobalWindow, UploadFile, OperaPdfViewerWindow },
+    data () {
+      return {
+        // 琛ㄥ崟鏁版嵁
+        form: {
+          id: null,
+          status: 1,
+          checkInfo: ''
+        },
+        info: null,
+        // 楠岃瘉瑙勫垯
+        rules: {}
+      }
+    },
+    methods: {
+      open (title, id) {
+        this.title = title
+        this.form.checkInfo = ''
+        this.form.status = 1
+        this.form.id = id
+        getById(id)
+          .then(res => {
+            this.info = res
+            this.visible = true
+          })
+      },
+      openFile(url) {
+        this.$refs.OperaPdfViewerWindow.open('闄勪欢', url)
+      },
+      confirm() {
+        this.$refs.form.validate((valid) => {
+          if (!valid) {
+            return
+          }
+          // 璋冪敤鏂板缓鎺ュ彛
+          this.isWorking = true
+          audit(this.form)
+            .then(() => {
+              this.visible = false
+              this.$tip.apiSuccess('瀹℃牳鎴愬姛')
+              this.$emit('success')
+            })
+            .catch(e => {
+              this.$tip.apiFailed(e)
+            })
+            .finally(() => {
+              this.isWorking = false
+            })
+        })
+      }
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+    .info {
+        width: 100%;
+        .info_label {
+            width: 100%;
+            display: flex;
+            align-items: center;
+            justify-content: space-between;
+            margin-bottom: 20px;
+            span {
+                font-size: 18px;
+                font-weight: 600;
+                color: #000000;
+            }
+        }
+        .info_list {
+            width: 100%;
+            display: flex;
+            align-items: center;
+            flex-wrap: wrap;
+            .info_list_item {
+                width: 50%;
+                display: flex;
+                align-items: start;
+                margin-bottom: 20px;
+                .info_list_item_label {
+                    font-size: 15px;
+                    flex-shrink: 0;
+                }
+                .info_list_item_val {
+                    flex: 1;
+                    display: flex;
+                    align-items: center;
+                    font-size: 15px;
+                    .info_list_item_val_cul {
+                        display: flex;
+                        flex-direction: column;
+                        u {
+                            font-size: 15px;
+                            color: #2E68EC;
+                            cursor: pointer;
+                            margin-top: 5px;
+                            &:first-child {
+                                margin: 0;
+                            }
+                        }
+                    }
+                    .image {
+                        width: 100px;
+                        height: 100px;
+                        display: flex;
+                        align-items: center;
+                        justify-content: center;
+                        overflow: hidden;
+                        img {
+                            width: 100%;
+                        }
+                    }
+                }
+            }
+        }
+    }
+</style>
diff --git a/company/src/components/business/OperaCompanyUserApplyWindow.vue b/company/src/components/business/OperaCompanyUserApplyWindow.vue
new file mode 100644
index 0000000..17e1d39
--- /dev/null
+++ b/company/src/components/business/OperaCompanyUserApplyWindow.vue
@@ -0,0 +1,247 @@
+<template>
+    <GlobalWindow
+        :title="title"
+        width="50%"
+        :visible.sync="visible"
+        :confirm-working="isWorking"
+        @confirm="confirm"
+    >
+        <el-form :model="form" ref="form" :rules="rules">
+            <el-form-item label="鎺堟潈璐﹀彿" prop="userId">
+                <el-select v-model="form.userId" filterable placeholder="璇烽�夋嫨">
+                    <el-option
+                        v-for="item in account"
+                        :key="item.id"
+                        :label="item.username"
+                        :value="item.id">
+                    </el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item label="鐢宠鎺堟潈浼佷笟" prop="companyIds">
+                <el-select
+                    v-model="form.companyIds"
+                    multiple
+                    filterable
+                    placeholder="璇烽�夋嫨">
+                    <el-option
+                        v-for="item in company"
+                        :key="item.id"
+                        :label="item.name"
+                        :value="item.id">
+                    </el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item label="鐢宠璇存槑" prop="content">
+                <el-input
+                    type="textarea"
+                    placeholder="璇疯緭鍏ョ敵璇疯鏄�"
+                    v-model="form.content"
+                    maxlength="300"
+                    show-word-limit />
+            </el-form-item>
+            <el-form-item label="鎺堟潈涔�" prop="multifileList">
+                <UploadFile v-if="visible" @remove="deleFile" :limit="99" :uploadData="{ folder: 'companyUserApply', fileType:'.pdf' }" :fileList="fileList" @uploadSuccess="editFanganFile" />
+            </el-form-item>
+        </el-form>
+    </GlobalWindow>
+</template>
+
+<script>
+  import BaseOpera from '@/components/base/BaseOpera'
+  import GlobalWindow from '@/components/common/GlobalWindow'
+  import UploadFile from '@/components/common/UploadFile'
+  import { findUserList } from '@/api/system/user'
+  import { findAllCompanyList } from '@/api/business/company'
+  export default {
+    name: 'OperaCompanyUserApplyWindow',
+    extends: BaseOpera,
+    components: { GlobalWindow, UploadFile },
+    data () {
+      return {
+        // 琛ㄥ崟鏁版嵁
+        form: {
+          id: null,
+          userId: '',
+          content: '',
+          companyIds: [],
+          multifileList: []
+        },
+        // 楠岃瘉瑙勫垯
+        rules: {
+          multifileList: [
+            { required: true, message: '璇蜂笂浼犳巿鏉冧功' }
+          ],
+          companyIds: [
+            { required: true, message: '璇烽�夋嫨鎺堟潈浼佷笟' }
+          ],
+          userId: [
+            { required: true, message: '璇烽�夋嫨鎺堟潈璐﹀彿' }
+          ]
+        },
+        account: [],
+        fileList: [],
+        company: []
+      }
+    },
+    created () {
+      this.config({
+        api: '/business/companyUserApply',
+        'field.id': 'id'
+      })
+    },
+    methods: {
+      __confirmCreate () {
+        this.$refs.form.validate((valid) => {
+          if (!valid) {
+            return
+          }
+          let obj = JSON.parse(JSON.stringify(this.form))
+          obj.companyIds = obj.companyIds.join(',')
+          obj.companyNames = []
+          this.form.companyIds.forEach(item => {
+            this.company.forEach(row => {
+              if (item === row.id) {
+                obj.companyNames.push(row.name)
+              }
+            })
+          })
+          obj.companyNames = obj.companyNames.join(',')
+          this.isWorking = true
+          this.api.create(obj)
+            .then(() => {
+              this.visible = false
+              this.$tip.apiSuccess('鏂板缓鎴愬姛')
+              this.$emit('success')
+            })
+            .catch(e => {
+              this.$tip.apiFailed(e)
+            })
+            .finally(() => {
+              this.isWorking = false
+            })
+        })
+      },
+      // 纭淇敼
+      __confirmEdit () {
+        this.$refs.form.validate((valid) => {
+          if (!valid) {
+            return
+          }
+          let obj = JSON.parse(JSON.stringify(this.form))
+          obj.companyIds = obj.companyIds.join(',')
+          obj.companyNames = []
+          this.form.companyIds.forEach(item => {
+            this.company.forEach(row => {
+              if (item === row.id) {
+                obj.companyNames.push(row.name)
+              }
+            })
+          })
+          obj.companyNames = obj.companyNames.join(',')
+          this.isWorking = true
+          this.api.updateById(obj)
+            .then(() => {
+              this.visible = false
+              this.$tip.apiSuccess('淇敼鎴愬姛')
+              this.$emit('success')
+            })
+            .catch(e => {
+              this.$tip.apiFailed(e)
+            })
+            .finally(() => {
+              this.isWorking = false
+            })
+        })
+      },
+      open (title, target) {
+        this.title = title
+        this.visible = true
+        this.getAccount()
+        this.getFindAllCompanyList()
+        // 鏂板缓
+        if (target == null) {
+          this.$nextTick(() => {
+            this.$refs.form.resetFields()
+            this.form[this.configData['field.id']] = null
+          })
+          return
+        }
+        // 缂栬緫
+        this.$nextTick(() => {
+          for (const key in this.form) {
+            this.form[key] = target[key]
+          }
+        })
+      },
+      deleFile (imgaddr) {
+        this.form.multifileList.forEach((item, index) => {
+          if (item.imgaddr === imgaddr) {
+            this.form.multifileList.splice(index, 1)
+          }
+        })
+      },
+      editFanganFile (data) {
+        this.form.multifileList.push(data)
+      },
+      getAccount() {
+        findUserList({})
+          .then(res => {
+            console.log(res)
+            this.account = res
+          })
+      },
+      getFindAllCompanyList() {
+        findAllCompanyList({})
+          .then(res => {
+            console.log(res)
+            this.company = res
+          })
+      }
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+    .list {
+        width: 100%;
+        padding: 10px 16px;
+        box-sizing: border-box;
+        background: #F4F7FC;
+        border-radius: 2px;
+        border: 1px solid #DFE2E8;
+        margin-top: 10px;
+        .list_label {
+            font-weight: 400;
+            font-size: 13px;
+            color: #333333;
+        }
+        .list_box {
+            width: 100%;
+            display: flex;
+            align-items: center;
+            flex-wrap: wrap;
+            .list_box_row {
+                padding: 0 10px;
+                box-sizing: border-box;
+                background: #FFFFFF;
+                border-radius: 2px;
+                display: flex;
+                align-items: center;
+                margin-right: 10px;
+                &:last-child {
+                    margin: 0 !important;
+                }
+                span {
+                    font-weight: 400;
+                    font-size: 12px;
+                    color: #3F4F69;
+                    margin-right: 12px;
+                }
+                i {
+                    color: #BFC3CB;
+                    cursor: pointer;
+                }
+            }
+        }
+    }
+</style>
diff --git a/company/src/components/business/OperaContractDescWindow.vue b/company/src/components/business/OperaContractDescWindow.vue
new file mode 100644
index 0000000..da17f44
--- /dev/null
+++ b/company/src/components/business/OperaContractDescWindow.vue
@@ -0,0 +1,169 @@
+<template>
+    <GlobalWindow
+        :title="title"
+        width="100%"
+        :withFooter="false"
+        :visible.sync="visible"
+        :confirm-working="isWorking"
+        @confirm="confirm"
+    >
+        <div class="info" v-if="info">
+            <div class="info_label">
+                <span>鍚堝悓璇︽儏</span>
+            </div>
+            <div class="info_list">
+                <div class="info_list_item">
+                    <div class="info_list_item_label">鍚堝悓鍚嶇О锛�</div>
+                    <div class="info_list_item_val">{{info.name}}</div>
+                </div>
+                <div class="info_list_item">
+                    <div class="info_list_item_label">鍚堝悓鏃堕棿锛�</div>
+                    <div class="info_list_item_val">{{info.startTime}} - {{info.endTime}}</div>
+                </div>
+                <div class="info_list_item" v-if="userInfo.type === 0 || info.type === 2">
+                    <div class="info_list_item_label">鍚堝悓绫诲瀷锛�</div>
+                    <div class="info_list_item_val">
+                        <template v-if="info.signType === 0">骞冲彴-鍟嗘埛</template>
+                        <template v-if="info.signType === 1">骞冲彴-浼佷笟</template>
+                        <template v-if="info.signType === 2">鍟嗘埛-浼佷笟</template>
+                    </div>
+                </div>
+                <div class="info_list_item">
+                    <div class="info_list_item_label">浼佷笟鍚嶇О锛�</div>
+                    <div class="info_list_item_val">{{info.companyName}}</div>
+                </div>
+                <div class="info_list_item" style="width: 100%;" v-if="userInfo.type === 0 || info.type === 2">
+                    <div class="info_list_item_label">绛剧讲鏂瑰紡锛�</div>
+                    <div class="info_list_item_val">
+                        <template v-if="info.type === 0">鍙屾柟绛剧珷</template>
+                        <template v-if="info.type === 1">浠呮垜鏂圭绔�</template>
+                    </div>
+                </div>
+                <div class="info_list_item" style="width: 100%;">
+                    <div class="info_list_item_label">鍘熷闄勪欢锛�</div>
+                    <div class="info_list_item_val" v-if="info.multifile">
+                        <u @click.stop="openPDF(info.multifile.name, info.multifile.fileurlFull)">{{info.multifile.name}}</u>
+                    </div>
+                </div>
+                <div class="info_list_item" style="width: 100%;">
+                    <div class="info_list_item_label">澶囨敞锛�</div>
+                    <div class="info_list_item_val">{{info.remark}}</div>
+                </div>
+            </div>
+        </div>
+        <div class="info" v-if="info && info.status !== 0">
+            <div class="info_label">
+                <span>鍚堝悓绛剧讲鎯呭喌</span>
+            </div>
+            <div class="info_list">
+                <div class="info_list_item">
+                    <div class="info_list_item_label">{{info.signType === 2 ? '鍟嗘埛' :  [0, 1].includes(info.signType) ? '骞冲彴' : ''}}绛剧讲浜猴細</div>
+                    <div class="info_list_item_val">{{info.firstSignUserName}}</div>
+                </div>
+                <div class="info_list_item">
+                    <div class="info_list_item_label">{{info.signType === 2 ? '鍟嗘埛' :  [0, 1].includes(info.signType) ? '骞冲彴' : ''}}绛剧讲鏃堕棿锛�</div>
+                    <div class="info_list_item_val">{{info.signDate}}</div>
+                </div>
+                <div class="info_list_item" v-if="info.type !== 1">
+                    <div class="info_list_item_label">{{info.signType === 0 ? '鍟嗘埛' :  [1, 2].includes(info.signType) ? '浼佷笟' : ''}}绛剧讲浜猴細</div>
+                    <div class="info_list_item_val">{{info.doneSignUserName}}</div>
+                </div>
+                <div class="info_list_item" v-if="info.type !== 1">
+                    <div class="info_list_item_label">{{info.signType === 0 ? '鍟嗘埛' :  [1, 2].includes(info.signType) ? '浼佷笟' : ''}}绛剧讲鏃堕棿锛�</div>
+                    <div class="info_list_item_val">{{info.comSignDate}}</div>
+                </div>
+                <div class="info_list_item">
+                    <div class="info_list_item_label">绛剧讲浠讹細</div>
+                    <div class="info_list_item_val">
+                        <u v-if="info.multiDoneFile" @click.stop="openPDF(info.multiDoneFile.name, info.multiDoneFile.fileurlFull)">{{info.multiDoneFile.name}}</u>
+                        <u v-else-if="info.multiFirstFile" @click.stop="openPDF(info.multiFirstFile.name, info.multiFirstFile.fileurlFull)">{{info.multiFirstFile.name}}</u>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <!-- 棰勮pdf -->
+        <OperaPdfViewerWindow ref="OperaPdfViewerWindow"  />
+    </GlobalWindow>
+</template>
+
+<script>
+  import BaseOpera from '@/components/base/BaseOpera'
+  import GlobalWindow from '@/components/common/GlobalWindow'
+  import OperaPdfViewerWindow from '@/components/business/OperaPdfViewerWindow'
+  import { contractId } from '@/api/business/contract'
+  import { mapState } from 'vuex'
+  export default {
+    name: 'OperaContractDescWindow',
+    extends: BaseOpera,
+    computed: {
+      ...mapState(['userInfo'])
+    },
+    components: { GlobalWindow, OperaPdfViewerWindow },
+    data () {
+      return {
+        info: null
+      }
+    },
+    methods: {
+      open (title, id) {
+        this.title = title
+        this.info = null
+        this.visible = true
+        console.log(this.userInfo)
+        contractId(id)
+          .then(res => {
+            console.log(res)
+            this.info = res
+          })
+      },
+      openPDF(name, url) {
+        this.$refs.OperaPdfViewerWindow.open(name, url)
+      },
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+    .info {
+        width: 100%;
+        .info_label {
+            width: 100%;
+            display: flex;
+            align-items: center;
+            justify-content: space-between;
+            margin-bottom: 20px;
+            span {
+                font-size: 18px;
+                font-weight: 600;
+                color: #000000;
+            }
+        }
+        .info_list {
+            width: 100%;
+            display: flex;
+            align-items: start;
+            flex-wrap: wrap;
+            .info_list_item {
+                width: 50%;
+                display: flex;
+                align-items: start;
+                margin-bottom: 20px;
+                .info_list_item_label {
+                    flex-shrink: 0;
+                    font-size: 16px;
+                }
+                .info_list_item_val {
+                    flex: 1;
+                    display: flex;
+                    align-items: center;
+                    font-size: 16px;
+                    u {
+                        font-size: 16px;
+                        color: #2E68EC;
+                        cursor: pointer;
+                    }
+                }
+            }
+        }
+    }
+</style>
diff --git a/company/src/components/business/OperaContractWindow.vue b/company/src/components/business/OperaContractWindow.vue
new file mode 100644
index 0000000..a9717b9
--- /dev/null
+++ b/company/src/components/business/OperaContractWindow.vue
@@ -0,0 +1,187 @@
+<template>
+    <GlobalWindow
+        :title="title"
+        :visible.sync="visible"
+        :confirm-working="isWorking"
+        @confirm="confirm"
+    >
+        <el-form :model="form" ref="form" :rules="rules">
+            <el-form-item label="鍚堝悓鍚嶇О" prop="name">
+                <el-input v-model="form.name" maxlength="50" show-word-limit placeholder="璇疯緭鍏ュ悎鍚屽悕绉�" v-trim/>
+            </el-form-item>
+            <el-form-item label="鍚堝悓瀵硅薄" prop="companyType" v-if="type !== 2">
+                <el-radio-group v-model="form.companyType" @change="getList">
+                    <el-radio :label="0">浼佷笟</el-radio>
+                    <el-radio :label="1">鍟嗘埛</el-radio>
+                </el-radio-group>
+            </el-form-item>
+            <el-form-item :label="type !== 2 ? '浼佷笟/鍟嗘埛鍚嶇О' : '浼佷笟鍚嶇О'" prop="companyId">
+                <el-select v-model="form.companyId" filterable placeholder="璇烽�夋嫨锛屾敮鎸佹悳绱�">
+                    <el-option
+                        v-for="item in nameList"
+                        :key="item.id"
+                        :label="item.name"
+                        :value="item.id">
+                    </el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item label="鍚堝悓鏃堕棿" prop="date">
+                <el-date-picker
+                    v-model="form.date"
+                    type="daterange"
+                    @change="changeDate"
+                    value-format="yyyy-MM-dd"
+                    range-separator="鑷�"
+                    start-placeholder="寮�濮嬫棩鏈�"
+                    end-placeholder="缁撴潫鏃ユ湡">
+                </el-date-picker>
+            </el-form-item>
+            <el-form-item label="绛剧珷鏂瑰紡" prop="type">
+                <el-radio-group v-model="form.type">
+                    <el-radio :label="0">鍙屾柟绛剧珷</el-radio>
+                    <el-radio :label="1">浠呮垜鏂圭绔�</el-radio>
+                </el-radio-group>
+            </el-form-item>
+            <el-form-item label="鍚堝悓闄勪欢" prop="multifile" :rules="[{required:true,message:'璇蜂笂浼犳柟妗堢‘璁や功'}]">
+                <div v-if="visible">
+                    <UploadFile @remove="deleFile" :uploadData="{ folder: 'contract', fileType:'.pdf' }" :fileList="fileList" @uploadSuccess="editFanganFile" />
+                </div>
+            </el-form-item>
+            <el-form-item label="澶囨敞" prop="remark">
+                <el-input
+                    type="textarea"
+                    placeholder="璇疯緭鍏ュ娉�"
+                    v-model="form.remark"
+                    maxlength="300"
+                    show-word-limit
+                    v-trim
+                />
+            </el-form-item>
+        </el-form>
+    </GlobalWindow>
+</template>
+
+<script>
+  import BaseOpera from '@/components/base/BaseOpera'
+  import GlobalWindow from '@/components/common/GlobalWindow'
+  import UploadFile from '@/components/common/UploadFile'
+  import { pageAll } from '@/api/business/company'
+  import { mapState } from 'vuex'
+  export default {
+    name: 'OperaContractWindow',
+    extends: BaseOpera,
+    computed: {
+      ...mapState(['userInfo'])
+    },
+    components: { GlobalWindow, UploadFile },
+    data () {
+      const validatorTime = (rule, value, callback) => {
+        if (!this.form.startTime || !this.form.endTime) {
+          return callback(new Error('璇烽�夋嫨鍚堝悓鏃堕棿'))
+        }
+        callback()
+      }
+      const validatorMultifile = (rule, value, callback) => {
+        if (!this.form.multifile) {
+          return callback(new Error('璇蜂笂浼犲悎鍚岄檮浠�'))
+        }
+        callback()
+      }
+      return {
+        // 琛ㄥ崟鏁版嵁
+        form: {
+          id: null,
+          remark: '',
+          name: '',
+          companyType: 0,
+          type: 0,
+          startTime: '',
+          endTime: '',
+          date: [],
+          multifile: null,
+          companyId: ''
+        },
+        fileList: [],
+        // 楠岃瘉瑙勫垯
+        rules: {
+          name: [
+            { required: true, message: '璇疯緭鍏ュ悎鍚屽悕绉�' }
+          ],
+          companyType: [
+            { required: true, message: '璇烽�夋嫨鍚堝悓瀵硅薄' }
+          ],
+          companyId: [
+            { required: true, message: '璇烽�夋嫨浼佷笟/鍟嗘埛鍚嶇О' }
+          ],
+          date: [
+            { required: true, validator: validatorTime }
+          ],
+          multifile: [
+            { required: true, validator: validatorMultifile }
+          ],
+        },
+        nameList: [],
+        list: [],
+        type: null
+      }
+    },
+    created () {
+      this.config({
+        api: '/business/contract',
+        'field.id': 'id'
+      })
+    },
+    methods: {
+      open (title, target, type) {
+        this.title = title
+        this.type = type
+        this.visible = true
+        if (this.userInfo.type === 0) {
+          this.list = [{ label: '浼佷笟', id: 0 },{ label: '鍟嗘埛', id: 1 }]
+        } else if (this.userInfo.type === 2) {
+          this.list = [{ label: '浼佷笟', id: 0 }]
+        }
+        // 鏂板缓
+        if (target == null) {
+          this.$nextTick(() => {
+            this.$refs.form.resetFields()
+            this.form[this.configData['field.id']] = null
+          })
+          this.getList()
+          return
+        }
+        // 缂栬緫
+        this.$nextTick(() => {
+          for (const key in this.form) {
+            this.form[key] = target[key]
+          }
+        })
+        this.getList()
+      },
+      getList() {
+        this.form.companyId = ''
+        pageAll({ type: this.form.companyType })
+            .then(res => {
+              console.log(res)
+              this.nameList = res
+            })
+      },
+      deleFile () {
+        this.form.multifile = null
+      },
+      editFanganFile (data) {
+        console.log(data)
+        this.form.multifile = data
+      },
+      changeDate(e) {
+        if (e) {
+          this.form.startTime = e[0]
+          this.form.endTime = e[1]
+        } else {
+          this.form.startTime = ''
+          this.form.endTime = ''
+        }
+      }
+    }
+  }
+</script>
diff --git a/company/src/components/business/OperaCustomerServiceWindow.vue b/company/src/components/business/OperaCustomerServiceWindow.vue
new file mode 100644
index 0000000..b2775b6
--- /dev/null
+++ b/company/src/components/business/OperaCustomerServiceWindow.vue
@@ -0,0 +1,64 @@
+<template>
+    <GlobalWindow
+        :title="title"
+        :visible.sync="visible"
+        :confirm-working="isWorking"
+        @confirm="confirm"
+    >
+        <el-form :model="form" ref="form" :rules="rules">
+            <el-form-item label="瀹㈡湇濮撳悕" prop="name">
+                <el-input v-model="form.name" placeholder="璇疯緭鍏ュ悕绉�" v-trim/>
+            </el-form-item>
+            <el-form-item label="鎵嬫満鍙�" prop="mobile">
+                <el-input v-model="form.mobile" maxlength="11" show-word-limit placeholder="璇疯緭鍏ユ墜鏈哄彿" v-trim/>
+            </el-form-item>
+            <el-form-item label="澶囨敞" prop="remark">
+                <el-input v-model="form.remark" type="textarea" placeholder="璇疯緭鍏ュ娉�" v-trim/>
+            </el-form-item>
+        </el-form>
+    </GlobalWindow>
+</template>
+
+<script>
+  import BaseOpera from '@/components/base/BaseOpera'
+  import GlobalWindow from '@/components/common/GlobalWindow'
+  export default {
+    name: 'OperaCustomerServiceWindow',
+    extends: BaseOpera,
+    components: { GlobalWindow },
+    data () {
+      const validatorMobile = (rule, value, callback) => {
+        if (value === '') {
+          callback(new Error('璇疯緭鍏ユ墜鏈哄彿'));
+        } else if (!/^1[3-9]\d{9}$/.test(value)) {
+          callback(new Error('鎵嬫満鍙蜂笉鍚堟硶'));
+        }
+        callback()
+      };
+      return {
+        // 琛ㄥ崟鏁版嵁
+        form: {
+          id: null,
+          remark: '',
+          name: '',
+          mobile: ''
+        },
+        // 楠岃瘉瑙勫垯
+        rules: {
+          name: [
+            { required: true, message: '璇疯緭鍏ュ鏈嶅鍚�' }
+          ],
+          mobile: [
+            { required: true, validator: validatorMobile }
+          ]
+        }
+      }
+    },
+    created () {
+      this.config({
+        api: '/business/customerService',
+        'field.id': 'id'
+      })
+    }
+  }
+</script>
diff --git a/company/src/components/business/OperaInsuranceApplyCheckWindow.vue b/company/src/components/business/OperaInsuranceApplyCheckWindow.vue
index 71d0815..c0eb2dd 100644
--- a/company/src/components/business/OperaInsuranceApplyCheckWindow.vue
+++ b/company/src/components/business/OperaInsuranceApplyCheckWindow.vue
@@ -84,6 +84,7 @@
   uploadToubaodan,
   check
 } from "@/api/business/insuranceApply";
+import { uploadBXD } from "@/api/business/unionApply";
 import UploadFile from "@/components/common/UploadFile";
 import {remark} from "@/api/business/settleClaims";
 export default {
@@ -155,6 +156,7 @@
       visible4: false,
       visible5: false,
       visible6: false,
+      type: null
     }
   },
   created () {
@@ -167,8 +169,9 @@
     dele2() {
       this.form.toubaodanFile = ''
     },
-     open(title,target,flag){
+     open(title,target,flag,type){
        this.visible=true
+       this.type = type
        this.model={}
        this.form= {
          id: null,
@@ -242,7 +245,11 @@
           if (!valid) {
             return
           }
-          this.uploadBaoxiandan()
+          if (!this.type) {
+            this.uploadBaoxiandan()
+          } else if (this.type === 1) {
+            this.uploadBaoxiandan1()
+          }
         })
       } else if (this.flag == 4) {
         this.$refs.form4.validate((valid) => {
@@ -337,7 +344,19 @@
                   this.$tip.apiFailed(err)
                 })
           })
-
+    },
+    uploadBaoxiandan1(){
+      this.$dialog.messageConfirm('纭杩涜璇ユ搷浣滃悧锛�')
+        .then(() => {
+          this.isWorking = true
+          uploadBXD({id:this.model.id,startTime:this.form.startTime,code:this.form.code,baoxiandanFile:this.form.baoxianFile})
+            .then(response => {
+              this.visible = false
+              this.$emit('success')
+            }).catch(err => {
+            this.$tip.apiFailed(err)
+          })
+        })
     },
     editBaoxiandan(){
       this.$dialog.messageConfirm('纭杩涜璇ユ搷浣滃悧锛�')
diff --git a/company/src/components/business/OperaInsuranceApplyWindow.vue b/company/src/components/business/OperaInsuranceApplyWindow.vue
index 3337197..98cdbfa 100644
--- a/company/src/components/business/OperaInsuranceApplyWindow.vue
+++ b/company/src/components/business/OperaInsuranceApplyWindow.vue
@@ -19,14 +19,20 @@
                 <div class="desc_item_label">
                     <div class="desc_item_label_left">
                         <span>鎶曚繚浼佷笟锛歿{ model.companyName }}</span>
-                      <span>淇濆崟鐘舵�侊細<span  :class="'apply-status'+model.status" >{{ model.statusInfo }}</span></span>
+                        <span>淇濆崟鐘舵�侊細
+                            <span style="color: #f95601;" v-if="[5,27].includes(model.status) && model.statusInfo === '寰呯敓鏁�'">{{ model.statusInfo }}</span>
+                            <span :class="'apply-status'+model.status" v-else>{{ model.statusInfo }}</span>
+                        </span>
                         <span>鎻愪氦鏃堕棿锛歿{ model.createDate }}</span>
                     </div>
                   <div class="desc_item_label_right">
+                      <el-button type="primary" @click="viewConfirmationLetter">鏌ョ湅鏂规纭涔�</el-button>
+                      <el-button type="primary" v-if="[1].includes(model.solutionType) && model.shenqingdanFile" @click="viewShenqingdan(model.shenqingdanFile)">鏌ョ湅鐢宠鍗�</el-button>
                       <template v-if="userInfo.type === 1">
                         <el-button type="primary" @click="$refs.InsuranceDetails.open('鎶曚繚璇︽儏鍗�',model,0)">瀵煎嚭璇﹀崟</el-button>
                         <el-button v-if="[2, 3, 5, 7, 8].includes(model.status)" type="primary" @click="viewToubaodan">鏌ョ湅鎶曚繚鍗�</el-button>
 <!--                          $refs.operaverifyPhoneNumberWindew.open('楠岃瘉鎵嬫満鍙�')-->
+<!--                          <el-button v-if="[22].includes(model.status) && model.solutionType === 1" type="primary" @click="viewShenqingdan(model.shenqingdanFile)">鏌ョ湅鐢宠鍗�</el-button>-->
                         <el-button v-if="model.status == 2" type="primary" :disabled="loading" :loading="loading" @click="goSign()">绛剧讲鎶曚繚鍗�</el-button>
                         <el-button v-if="model.status == 5" type="primary" @click="viewBaoxiandan">鏌ョ湅淇濋櫓鍗�</el-button>
                         <el-button v-if="model.status == 4" type="primary" @click="$refs.operaInsuranceApplyAddWindow.open('鎶曚繚鐢宠', {id: dataId})">鍐嶆鎶曚繚</el-button>
@@ -34,15 +40,20 @@
                         <el-button v-if="model.status == 4" type="primary" @click="closeOrder">鍏抽棴鐢宠</el-button>
                       </template>
                     <template v-else>
+                        <el-button v-if="[12].includes(model.status)" type="primary" @click="review">鎶曚繚澶嶅</el-button>
                       <el-button type="primary" @click="$refs.InsuranceDetails.open('鎶曚繚璇︽儏鍗�',model,0)">瀵煎嚭璇﹀崟</el-button>
-                      <el-button v-if="[2, 3, 5, 7, 8].includes(model.status)" type="primary" @click="viewToubaodan">鏌ョ湅鎶曚繚鍗�</el-button>
-                      <el-button v-if="model.status == 5" type="primary" @click="viewBaoxiandan">鏌ョ湅淇濋櫓鍗�</el-button>
+                      <el-button v-if="[2, 3, 5, 7, 8, 26].includes(model.status) && (model.toubaodanFile || model.toubaodanSignedFile)" type="primary" @click="viewToubaodan">鏌ョ湅鎶曚繚鍗�</el-button>
+                      <el-button v-if="[27,5].includes(model.status)" type="primary" @click="viewBaoxiandan">鏌ョ湅淇濋櫓鍗�</el-button>
                       <el-button v-if="[2,10].includes(model.status) && model.solutionType ==0" type="primary" @click="$refs.OperaInsuranceApplyCheckWindow.open('涓婁紶鎶曚繚鍗�',model,2)">涓婁紶鎶曚繚鍗�</el-button>
-                      <el-button v-if="model.status == 3 && model.solutionType ==0" type="primary" @click="$refs.OperaInsuranceApplyCheckWindow.open('涓婁紶淇濋櫓鍗�',model,3)">涓婁紶淇濋櫓鍗�</el-button>
+                      <el-button v-if="model.status === 3 && userInfo.type === 0" type="primary" @click="$refs.OperaInsuranceApplyCheckWindow.open('涓婁紶淇濋櫓鍗�',model,3)">涓婁紶淇濋櫓鍗�</el-button>
+
+<!--                        <el-button v-if="model.status == 26 && model.solutionType == 1" type="primary" @click="$refs.OperaUnionApplyCheckWindow.open('涓婁紶淇濋櫓鍗�',model,3)">涓婁紶淇濋櫓鍗�</el-button>-->
+<!--                        <el-button v-if="[22].includes(model.status) && model.solutionType === 1 && model.shenqingdanFile" type="primary" @click="viewShenqingdan(model.shenqingdanFile)">鏌ョ湅鐢宠鍗�</el-button>-->
                       <el-button  v-if="[6,7,8,11].includes(model.status) && model.solutionType ==0" type="primary" @click="$refs.OperaInsuranceApplyCheckWindow.open('椹冲洖閫�鍥炵敵璇�',model,5)">椹冲洖閫�鍥炵敵璇�</el-button>
-                      <el-button v-if="model.status == 0 && model.solutionType ==0" type="primary" @click="$refs.InsuranceDetails.open('鎶曚繚瀹℃牳',model,1)">鎶曚繚瀹℃牳</el-button>
-                      <el-button v-if="![1,4,,5].includes(model.status) && model.solutionType ==0" type="danger" @click="$refs.OperaInsuranceApplyCheckWindow.open('閫�鍥炵敵璇�',model,1)">閫�鍥炵敵璇�</el-button>
-                      <el-button v-if="model.status == 5  && model.solutionType ==0" type="danger" @click="$refs.OperaInsuranceApplyCheckWindow.open('淇敼淇濋櫓鍗�',model,4)">淇敼淇濋櫓鍗�</el-button>
+                      <el-button v-if="[22, 0].includes(model.status) && [0,1].includes(model.solutionType)" type="primary" @click="$refs.InsuranceDetails.open('鎶曚繚瀹℃牳',model,1)">鎶曚繚瀹℃牳</el-button>
+                      <el-button v-if="![1, 4, 5].includes(model.status) && [0,1].includes(model.solutionType)" type="danger" @click="$refs.OperaInsuranceApplyCheckWindow.open('閫�鍥炵敵璇�',model,1)">閫�鍥炵敵璇�</el-button>
+                      <el-button v-if="[5,27].includes(model.status) && ['寰呯敓鏁�'].includes(model.statusInfo) && userInfo.type === 0" type="danger" @click="$refs.OperaInsuranceApplyCheckWindow.open('淇敼淇濋櫓鍗�',model,4)">淇敼淇濋櫓鍗�</el-button>
+
                     </template>
                   </div>
                 </div>
@@ -72,12 +83,12 @@
                             align="center"
                             label="淇濋櫓鐢熸晥姝㈡湡">
                         </el-table-column>
-                        <el-table-column
-                            prop="insureNum"
-                            align="center"
-                            label="鎶曚繚浜烘暟">
-                        </el-table-column>
-                      <el-table-column prop="guaranteeNum"  align="center" label="鍦ㄤ繚浜烘暟" ></el-table-column>
+<!--                        <el-table-column-->
+<!--                            prop="insureNum"-->
+<!--                            align="center"-->
+<!--                            label="鎶曚繚浜烘暟">-->
+<!--                        </el-table-column>-->
+                      <el-table-column prop="guaranteeNum"  align="center" label="褰撳墠鍦ㄤ繚浜烘暟" ></el-table-column>
                         <el-table-column
                             prop="serviceDays"
                             align="center"
@@ -86,9 +97,9 @@
                         <el-table-column
                             prop="currentFee"
                             align="center"
-                            label="宸蹭骇鐢熻垂鐢�(鍏�)">
+                            label="鎵规敼璐圭敤鍚堣">
                           <template slot-scope="{row}">
-                            <span>{{row.currentFee!=null?row.currentFee: '-'}}</span>
+                            <span>{{row.changeMoney}}鍏�</span>
                           </template>
                         </el-table-column>
                         <el-table-column
@@ -103,9 +114,9 @@
                 </div>
                 <div class="desc_item_cate">
                     <el-tabs v-model="activeName" @tab-click="handleClick">
-                        <el-tab-pane label="鍦ㄤ繚浜哄憳" name="0" ></el-tab-pane>
+                        <el-tab-pane label="淇濆崟浜哄憳" name="0" ></el-tab-pane>
                         <el-tab-pane label="鍔�/鍑忎繚璁板綍"  name="1"></el-tab-pane>
-                        <el-tab-pane label="鏇存崲娲鹃仯鍗曚綅璁板綍" name="2"></el-tab-pane>
+                        <el-tab-pane :label="model.hasDispatchUnit !== 1 ? '鏇存崲娲鹃仯鍗曚綅' : '鏇存崲宸ョ璁板綍'" name="2"></el-tab-pane>
                     </el-tabs>
                 </div>
                 <div class="desc_item_search">
@@ -116,9 +127,10 @@
                                     <el-option label="鍏ㄩ儴" value="0"></el-option>
                                     <el-option label="淇濋殰涓�" value="1"></el-option>
                                     <el-option label="涓嶅湪淇�" value="2"></el-option>
+                                    <el-option label="寰呯敓鏁�" value="3"></el-option>
                                 </el-select>
                             </el-form-item>
-                            <el-form-item label="娲鹃仯鍗曚綅" prop="duId">
+                            <el-form-item label="娲鹃仯鍗曚綅" prop="duId" v-if="model.hasDispatchUnit !== 1">
                                 <el-select v-model="formInline.duId" placeholder="璇烽�夋嫨" @change="search">
                                     <el-option
                                         v-for="item in dwList"
@@ -195,8 +207,8 @@
                             <el-button type="primary" style="width: 80px;" @click="search">鏌ヨ</el-button>
                             <el-button @click="resetting" style="width: 80px;">閲嶇疆</el-button>
                             <el-button type="primary" style="width: 80px;" @click="exportExcel" v-if="activeName === '0'">瀵煎嚭鍚嶅崟</el-button>
-                          <el-button type="primary" style="width: 100px;" @click="$refs.OperaApplyChangeMonthWindow.open('鍔犲噺淇濊垂鐢ㄦ湀搴︾粺璁�',model)" v-if="activeName === '1'">璐圭敤缁熻鏌ヨ</el-button>
-
+                            <el-button type="primary" style="width: 100px;" @click="$refs.OperaApplyChangeMonthWindow.open('鍔犲噺淇濊垂鐢ㄦ湀搴︾粺璁�',model)" v-if="activeName === '1'">璐圭敤缁熻鏌ヨ</el-button>
+                            <el-button type="primary" style="width: 120px;" @click="exportRecords" v-if="activeName === '1' && (model.status === 5 || model.status === 27)">瀵煎嚭鍔犲噺淇濊褰�</el-button>
                         </el-form-item>
                     </el-form>
                 </div>
@@ -208,7 +220,7 @@
                         v-if="activeName === '0'"
                         style="width: 100%">
                         <el-table-column label="搴忓彿"
-                                         align="center">
+                             align="center">
                             <template slot-scope="scope">
                                 <span>{{scope.$index + 1}}</span>
                             </template>
@@ -229,12 +241,23 @@
                             </template>
                         </el-table-column>
                         <el-table-column
+                            align="center"
+                            :key="Math.random()"
+                            label="鍦ㄤ繚鐘舵��">
+                            <template slot-scope="{row}">
+                                <span v-if="row.applyStatus === 0" style="color: #00BA92;">淇濋殰涓�</span>
+                                <span v-if="row.applyStatus === 1" style="color: #999;">涓嶅湪淇�</span>
+                                <span v-if="row.applyStatus === 2" style="color: #f95601;">寰呯敓鏁�</span>
+                            </template>
+                        </el-table-column>
+                        <el-table-column
                             :key="Math.random()"
                             prop="idcardNo"
                             align="center"
                             label="韬唤璇佸彿">
                         </el-table-column>
                         <el-table-column
+                            v-if="model.hasDispatchUnit !== 1"
                             :key="Math.random()"
                             prop="duName"
                             align="center"
@@ -373,7 +396,7 @@
                         v-if="activeName === '2'"
                         style="width: 100%">
                         <el-table-column label="搴忓彿"
-                                         align="center">
+                             align="center">
                             <template slot-scope="scope">
                                 <span>{{scope.$index + 1}}</span>
                             </template>
@@ -401,7 +424,7 @@
                             :key="Math.random()"
                             prop="changeNum"
                             align="center"
-                            label="鏇存崲娲鹃仯鍗曚綅浜烘暟">
+                            :label="model.hasDispatchUnit !== 1 ? '鏇存崲娲鹃仯鍗曚綅浜烘暟' : '鏇存崲宸ョ浜烘暟'">
                           <template scope="{row}">
                             {{row.changeNum||0}} 浜�
                           </template>
@@ -483,6 +506,7 @@
         <operaverifyPhoneNumberWindew ref="operaverifyPhoneNumberWindew" @success="goSign" />
         <OperaPdfViewerWindow ref="OperaPdfViewerWindow" />
         <OperaApplyChangeMonthWindow ref="OperaApplyChangeMonthWindow" />
+        <OperaUnionApplyCheckWindow ref="OperaUnionApplyCheckWindow" @success="successEvent" />
         <template v-slot:footer>
             <el-button @click="visible=false">杩斿洖</el-button>
         </template>
@@ -500,15 +524,16 @@
 import OperaApplyChangeDetailWindow from '@/components/business/OperaApplyChangeDetailWindow'
 import OperaApplyChangeMonthWindow from '@/components/business/OperaApplyChangeMonthWindow'
 import OperaApplyChangeUnitDetailWindow from '@/components/business/OperaApplyChangeUnitDetailWindow'
-
 import applyReturn from '@/components/enterprise/applyReturn'
 import { getDetail, getSignLink, applyDetailPage,  exportExcel, applyChagneDetailExcel, applyOpt } from '@/api/business/insuranceApply'
 import { findListByDTO } from '@/api/business/dispatchUnit'
-import { fetchList } from '@/api/business/applyChange'
+import { fetchList, exportApplyJiajianBaoExcel } from '@/api/business/applyChange'
+import { reexamineCheck } from '@/api/business/insuranceApply'
 import { findListByDTO as worktypeFindListByDTO } from '@/api/business/worktype'
 import OperaInsuranceApplyAddWindow from '@/components/enterprise/OperaInsuranceApplyAddWindow'
 import { mapState } from 'vuex'
 import OperaPdfViewerWindow from '@/components/business/OperaPdfViewerWindow'
+import OperaUnionApplyCheckWindow from '@/components/business/OperaUnionApplyCheckWindow'
 export default {
   name: 'OperaInsuranceApplyWindow1',
   extends: BaseOpera,
@@ -524,7 +549,8 @@
     OperaApplyChangeDetailWindow,
     OperaApplyChangeUnitDetailWindow,
     OperaInsuranceApplyAddWindow,
-    operaverifyPhoneNumberWindew
+    operaverifyPhoneNumberWindew,
+    OperaUnionApplyCheckWindow
   },
   data () {
     return {
@@ -603,6 +629,33 @@
       this.getList()
       this.getDW()
       this.getGZ()
+    },
+    viewShenqingdan(row) {
+      if (!row) return;
+      this.$refs.OperaPdfViewerWindow.open(row.name, row.fileurlFull)
+    },
+    viewConfirmationLetter() {
+      this.$refs.OperaPdfViewerWindow.open('鏌ョ湅鏂规纭涔�', this.model.fanganFile.fileurlFull)
+    },
+    review() {
+      this.$confirm('鏄惁纭畾澶嶆牳閫氳繃?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        reexamineCheck({ id: this.dataId })
+          .then(res => {
+            this.getDetail()
+          })
+      }).catch(() => {
+
+      });
+    },
+    exportRecords() {
+      exportApplyJiajianBaoExcel({ id: this.dataId })
+        .then(response => {
+          this.download(response)
+        })
     },
     result(flag,param){
       console.log(flag,param)
@@ -946,14 +999,18 @@
             .desc_item_label {
                 width: 100%;
                 display: flex;
-                align-items: center;
-                justify-content: space-between;
+                align-items: start;
+                flex-direction: column;
                 margin-bottom: 10px;
                 span {
                     font-size: 14px;
                     color: black;
                     margin-right: 30px;
                 }
+                .desc_item_label_right {
+                    width: 100%;
+                    margin: 10px 0;
+                }
             }
             .desc_item_from {
                 width: 100%;
diff --git a/company/src/components/business/OperaInsuranceWindow.vue b/company/src/components/business/OperaInsuranceWindow.vue
index 914aec3..71e833c 100644
--- a/company/src/components/business/OperaInsuranceWindow.vue
+++ b/company/src/components/business/OperaInsuranceWindow.vue
@@ -9,6 +9,18 @@
             <el-form-item label="淇濋櫓鍏徃" prop="name">
                 <el-input v-model="form.name" placeholder="骞冲畨淇濋櫓" v-trim/>
             </el-form-item>
+            <el-form-item label="logo" prop="logo">
+                <UploadAvatarImage :uploadData="{ folder: 'insurance' }" :file="file" @uploadSuccess="result" />
+            </el-form-item>
+            <el-form-item label="鑻辨枃鍚嶇О" prop="englishName">
+                <el-input v-model="form.englishName" maxlength="100" show-word-limit placeholder="璇疯緭鍏ヨ嫳鏂囧悕绉�" v-trim/>
+            </el-form-item>
+            <el-form-item label="鑱旂郴浜�" prop="linkName">
+                <el-input v-model="form.linkName" maxlength="10" show-word-limit placeholder="璇疯緭鍏ヨ仈绯讳汉" v-trim/>
+            </el-form-item>
+            <el-form-item label="鑱旂郴浜虹數璇�" prop="linkPhone">
+                <el-input v-model="form.linkPhone"  maxlength="11" show-word-limit placeholder="璇疯緭鍏ヨ仈绯讳汉鐢佃瘽" v-trim/>
+            </el-form-item>
             <div style="width: 100%; display: flex; align-items: center;margin-bottom: 10px;">
                 <el-button type="primary" @click="add">娣诲姞</el-button>
                 <el-button type="primary" @click="impor">瀵煎叆宸ョ</el-button>
@@ -42,6 +54,15 @@
                     </template>
                 </el-table-column>
             </el-table>
+            <el-form-item label="鐞嗚禂鎵�闇�鏉愭枡" prop="claimsInformation">
+                <RichEditor :richData="form.claimsInformation" :styleEditor="'border: 1px solid #ccc;display: inline-block;'" @getWangedditor="getWangedditor" :readonly="false"/>
+            </el-form-item>
+            <el-form-item label="淇濋櫓鏀跨瓥" prop="policy">
+                <RichEditor :richData="form.policy" :styleEditor="'border: 1px solid #ccc;display: inline-block;'" @getWangedditor="getWangedditor1" :readonly="false"/>
+            </el-form-item>
+            <el-form-item label="淇濋櫓鏉℃" prop="agreement">
+                <RichEditor :richData="form.agreement" :styleEditor="'border: 1px solid #ccc;display: inline-block;'" @getWangedditor="getWangedditor2" :readonly="false"/>
+            </el-form-item>
         </el-form>
         <!--    涓婁紶宸ョ    -->
         <input type="file" @change="getFile" style="opacity: 0;" ref="upload" accept=".xlsx" />
@@ -51,24 +72,47 @@
 <script>
     import BaseOpera from '@/components/base/BaseOpera'
     import GlobalWindow from '@/components/common/GlobalWindow'
+    import UploadAvatarImage from '@/components/common/UploadAvatarImage'
+    import RichEditor from '@/components/common/RichEditor'
     import { importExcel, all } from '@/api/business/worktype'
 
     export default {
         name: 'OperaInsuranceWindow',
         extends: BaseOpera,
-        components: { GlobalWindow },
+        components: { GlobalWindow, UploadAvatarImage, RichEditor },
         data () {
+          var phoneRule = (rule, value, callback) => {
+            if (value) {
+                if (!/^1[3-9]\d{9}$/.test(value)) {
+                  return callback(new Error('璇疯緭鍏ユ纭殑鎵嬫満鍙凤紒'))
+                }
+            }
+            callback()
+          }
             return {
                 // 琛ㄥ崟鏁版嵁
                 form: {
                     id: null,
                     name: '',
+                    logo: '',
+                    englishName: '',
+                    linkName: '',
+                    linkPhone: '',
+                    agreement: '',
+                    claimsInformation: '',
+                    policy: '',
                     worktypeList: [
                         { name: '' }
                     ]
                 },
+                file: {
+                    imgurlfull: ''
+                },
                 // 楠岃瘉瑙勫垯
                 rules: {
+                  linkPhone: [
+                    { required: false, validator: phoneRule }
+                  ]
                 }
             }
         },
@@ -96,6 +140,8 @@
                     for (const key in this.form) {
                         this.form[key] = target[key]
                     }
+                    this.file.imgurlfull = target.logoFullUrl
+                    console.log(this.form)
                     all({ insuranceId: this.form.id })
                         .then(res => {
                             let arr = []
@@ -106,6 +152,19 @@
                         })
                 })
             },
+            getWangedditor(val){
+                this.form.claimsInformation = val;
+            },
+            getWangedditor1(val){
+                this.form.policy = val;
+            },
+            getWangedditor2(val){
+                this.form.agreement = val;
+            },
+            result(res) {
+              this.form.logo = res.imgurl
+              this.file.imgurlfull = res.imgurlfull
+            },
             // 瀵煎嚭妯℃澘
             exprot() {
                 window.open(process.env.VUE_APP_TYPEWORK_URL)
diff --git a/company/src/components/business/OperaSolutionsBaseDescWindow.vue b/company/src/components/business/OperaSolutionsBaseDescWindow.vue
index 852982d..7c689dc 100644
--- a/company/src/components/business/OperaSolutionsBaseDescWindow.vue
+++ b/company/src/components/business/OperaSolutionsBaseDescWindow.vue
@@ -2,8 +2,7 @@
     <GlobalWindow
         :title="title"
         width="100%"
-        text="淇敼"
-        :withFooter="userInfo.type !== 1"
+        :withFooter="false"
         :visible.sync="visible"
         :confirm-working="isWorking"
         @confirm="$refs.operaSolutionsWindow.open('缂栬緫鏂规', form)"
@@ -22,10 +21,6 @@
                     <div class="info_list_item_label">鎵夸繚鍏徃锛�</div>
                     <div class="info_list_item_val">{{form.companyName}}</div>
                 </div>
-<!--                <div class="info_list_item">-->
-<!--                    <div class="info_list_item_label">鎶曚繚鍛ㄦ湡锛�</div>-->
-<!--                    <div class="info_list_item_val">1鏈�</div>-->
-<!--                </div>-->
                 <div class="info_list_item">
                     <div class="info_list_item_label">鎵规敼鎻愰啋鏃堕棿锛�</div>
                     <div class="info_list_item_val">{{form.correctWarnTime}}</div>
@@ -36,7 +31,7 @@
                 </div>
                 <div class="info_list_item">
                     <div class="info_list_item_label">鎵瑰噺鐢熸晥锛�</div>
-                    <div class="info_list_item_val">{{form.delOnlyReplace === 1 ? '鏄�' : '鍚�'}}</div>
+                    <div class="info_list_item_val">{{form.delValidDays||0}} 澶�</div>
                 </div>
                 <div class="info_list_item">
                     <div class="info_list_item_label">鎵规敼鏀寔锛�</div>
diff --git a/company/src/components/business/OperaSolutionsBaseWindow.vue b/company/src/components/business/OperaSolutionsBaseWindow.vue
index 24ea717..bbb4437 100644
--- a/company/src/components/business/OperaSolutionsBaseWindow.vue
+++ b/company/src/components/business/OperaSolutionsBaseWindow.vue
@@ -25,7 +25,7 @@
             </el-form-item>
             <el-form-item label="鎶曚繚骞撮緞" prop="minAge">
                 <div style="display: flex; align-items: center;">
-                    <el-select v-model="form.minAge" style="flex: 1;" placeholder="璇烽�夋嫨">
+                    <el-select v-model="form.minAge" @change="changeMinAge" style="flex: 1;" placeholder="璇烽�夋嫨">
                         <el-option
                             v-for="item in 80"
                             :key="item"
@@ -34,7 +34,7 @@
                         </el-option>
                     </el-select>
                     <span style="margin: 0 30px;">鑷�</span>
-                    <el-select v-model="form.maxAge" style="flex: 1;" placeholder="璇烽�夋嫨">
+                    <el-select v-model="form.maxAge" @change="changeMaxAge" style="flex: 1;" placeholder="璇烽�夋嫨">
                         <el-option
                             v-for="item in 80"
                             :key="item"
@@ -80,14 +80,18 @@
                     <el-input style="margin-left: 0px;" type="number" v-model="form.delValidDays"   placeholder="璇疯緭鍏ユ壒鍑忕敓鏁堟椂闂达紙澶╂暟锛�" ></el-input>
                 </div>
             </el-form-item>
-            <el-form-item label="鎵规敼鎻愰啋鏃堕棿" prop="correctWarnTime">{{form.correctWarnTime}}
+            <el-form-item label="鎵规敼鎻愰啋鏃堕棿" prop="correctWarnTime">
                 <el-time-picker
-                    value-format="HH:hh:mm"
+                    value-format="HH:mm"
                     v-model="form.correctWarnTime"
                     placeholder="璇烽�夋嫨鎵规敼鎻愰啋鏃堕棿">
                 </el-time-picker>
             </el-form-item>
-            <el-button type="primary" @click="add" style="margin-bottom: 10px;">娣诲姞宸ョ</el-button>
+            <div style="display: flex; align-items: center;">
+                <el-button type="primary" @click="add" style="margin-bottom: 10px;">娣诲姞宸ョ</el-button>
+                <el-button type="primary" @click="impor" style="margin-bottom: 10px;">瀵煎叆宸ョ</el-button>
+                <el-button type="text" @click="exprot">瀵煎叆妯$増xls</el-button>
+            </div>
             <el-table
                 :data="form.worktypeIdList"
                 border
@@ -133,6 +137,8 @@
                 <RichEditor :richData="form.ortherInfo" :styleEditor="'border: 1px solid #ccc;display: inline-block;'" @getWangedditor="getWangedditor2" :readonly="false"/>
             </el-form-item>
         </el-form>
+        <!--    涓婁紶宸ョ    -->
+        <input type="file" @change="getFile" style="opacity: 0;" ref="upload" accept=".xlsx" />
     </GlobalWindow>
 </template>
 
@@ -140,7 +146,7 @@
   import BaseOpera from '@/components/base/BaseOpera'
   import GlobalWindow from '@/components/common/GlobalWindow'
   import { all } from '@/api/business/insurance'
-  import { all as allWorktype } from '@/api/business/worktype'
+  import { all as allWorktype, importExcelForSolution } from '@/api/business/worktype'
   import { solutionsBaseId } from '@/api/business/solutionsBase'
   import { pageAll as shopList } from '@/api/business/company'
   import UploadFile from '@/components/common/UploadFile'
@@ -233,6 +239,37 @@
       })
     },
     methods: {
+      // 瀵煎叆宸ョ妯℃澘
+      getFile(e) {
+        const formdate = new FormData()
+        formdate.append('file', e.target.files[0])
+        formdate.append('insuranceId', this.form.insuranceId)
+        importExcelForSolution(formdate)
+          .then(res => {
+            console.log(res)
+            res.forEach(id => {
+              if (this.form.worktypeIdList.length === 1 && !this.form.worktypeIdList[0].worktypeId) {
+                this.form.worktypeIdList[0].worktypeId = id
+              } else {
+                this.form.worktypeIdList.push({ worktypeId: id })
+              }
+            })
+          })
+          .catch(err => {
+            this.$message.error(err.message)
+          })
+          .finally(() => {
+            this.$refs.upload.value = null
+          })
+      },
+      impor() {
+        if (!this.form.insuranceId) return this.$message.warning('璇峰厛閫夋嫨浼佷笟')
+        this.$refs.upload.click()
+      },
+      // 瀵煎嚭妯℃澘
+      exprot() {
+        window.open(process.env.VUE_APP_TYPEWORK_URL)
+      },
       getWangedditor(val){
         this.form.specialAgreement = val;
       },
@@ -242,7 +279,18 @@
       getWangedditor2(val){
         this.form.ortherInfo = val;
       },
-
+      changeMinAge(e) {
+        if (this.form.maxAge && this.form.maxAge >= 0 && e > this.form.maxAge) {
+          this.form.minAge = ''
+          this.$message.warning('璧峰骞撮緞涓嶈兘澶т簬鎴骞撮緞锛�')
+        }
+      },
+      changeMaxAge(e) {
+        if (this.form.minAge && this.form.minAge >= 0 && e < this.form.minAge) {
+          this.form.maxAge = ''
+          this.$message.warning('鎴骞撮緞涓嶈兘澶т簬璧峰骞撮緞锛�')
+        }
+      },
       handNumberInput (value) {
         const regex = /^[-+]?\d*$/
         if (!regex.test(value)) {
@@ -268,7 +316,6 @@
       confirm () {
         const data = JSON.parse(JSON.stringify(this.form))
         data.worktypeIdList = data.worktypeIdList.map(item => item.worktypeId)
-        data.correctWarnTime = data.correctWarnTime.substring(0, data.correctWarnTime.lastIndexOf(':'))
         this.$refs.form.validate((valid) => {
           if (!valid) {
             return
@@ -339,7 +386,6 @@
                 this.form[key] = res[key]
               }
               this.form.correctWarnTime = `${this.form.correctWarnTime}:00`
-              console.log(this.form.correctWarnTime)
               if (res.worktypeList) {
                 this.form.worktypeIdList = res.worktypeList.map(item => {
                   return {
diff --git a/company/src/components/business/OperaSolutionsDescWindow.vue b/company/src/components/business/OperaSolutionsDescWindow.vue
index ff8ba1c..67a8b60 100644
--- a/company/src/components/business/OperaSolutionsDescWindow.vue
+++ b/company/src/components/business/OperaSolutionsDescWindow.vue
@@ -1,9 +1,8 @@
 <template>
     <GlobalWindow
         :title="title"
-        width="70%"
-        text="淇敼"
-        :withFooter="userInfo.type !== 1"
+        width="100%"
+        :withFooter="false"
         :visible.sync="visible"
         :confirm-working="isWorking"
         @confirm="$refs.operaSolutionsWindow.open('缂栬緫鏂规', form)"
@@ -11,48 +10,21 @@
         <div class="info">
             <div class="info_list">
                 <div class="info_list_item">
-                    <div class="info_list_item_label">鏂规鍚嶇О锛�</div>
+                    <div class="info_list_item_label">瀛愭柟妗堬細</div>
                     <div class="info_list_item_val">{{form.name}}</div>
                 </div>
                 <div class="info_list_item">
-                    <div class="info_list_item_label">淇濋櫓鍏徃锛�</div>
-                    <div class="info_list_item_val">{{form.insuranceName}}</div>
+                    <div class="info_list_item_label">涓绘柟妗堬細</div>
+                    <div class="info_list_item_val"><a @click="$refs.operaSolutionsBaseDescWindow.open('涓绘柟妗堣鎯�', { id: form.parentId })" style="cursor: pointer;color: #2E68EC;">{{form.solutionBaseName}}</a></div>
                 </div>
                 <div class="info_list_item">
-                    <div class="info_list_item_label">鎵夸繚鍏徃锛�</div>
-                    <div class="info_list_item_val">{{form.companyName}}</div>
-                </div>
-              <div class="info_list_item">
-                <div class="info_list_item_label">鎶曚繚绫诲瀷锛�</div>
-                <div class="info_list_item_val" v-if="form.type === 0 "> 鐩翠繚</div>
-                <div class="info_list_item_val" v-if="form.type === 1">濮旀墭鎶曚繚</div>
-              </div>
-              <div class="info_list_item" v-if="form.type === 1">
-                <div class="info_list_item_label">濮旀墭鍟嗘埛锛�</div>
-                <div class="info_list_item_val" > {{form.shopName}}</div>
-              </div>
-                <div class="info_list_item">
-                    <div class="info_list_item_label">鎶曚繚骞撮緞锛�</div>
-                    <div class="info_list_item_val">{{form.minAge}}鑷硔{form.maxAge}}</div>
-                </div>
-                <div class="info_list_item">
-                    <div class="info_list_item_label" v-if="form.type !=1">鏂规璐圭敤锛�</div>
-                    <div class="info_list_item_label" v-else>鏈嶅姟璐圭敤锛�</div>
+                    <div class="info_list_item_label">淇濋櫓璐圭敤锛�</div>
                     <div class="info_list_item_val">
-                        {{form.price}}鍏�/浜�/
-<!--                        <span v-if="form.timeUnit === 0">澶�</span>
-                        <span v-if="form.timeUnit === 1">鍗婃湀</span>
-                        <span v-if="form.timeUnit === 2">鏈�</span>
-                        <span v-if="form.timeUnit === 3">骞�</span>-->
-                      <span v-if="form.timeUnit === 0">澶�</span>
-                      <span v-if="form.timeUnit === 2">鏈�</span>
-                      <span v-if="form.timeUnit === 3">瀛e害</span>
-                      <span v-if="form.timeUnit === 4">鍗婂勾</span>
-                      <span v-if="form.timeUnit === 5">骞�</span>
+                        {{form.price}}鍏�/浜�/<template v-if="form.timeUnit === 0">澶�</template><template v-if="form.timeUnit === 2">鏈�</template><template v-if="form.timeUnit === 3">瀛e害</template><template v-if="form.timeUnit === 4">鍗婂勾</template><template v-if="form.timeUnit === 5">骞�</template>
                     </div>
                 </div>
                 <div class="info_list_item">
-                    <div class="info_list_item_label">鎵规敼璁¤垂鍗曚綅锛�</div>
+                    <div class="info_list_item_label">鎵规敼璁¤垂瑙勫垯锛�</div>
                     <div class="info_list_item_val">
                         <span v-if="form.insureCycleUnit === 0">澶�</span>
                         <span v-if="form.insureCycleUnit === 1">鍗婃湀</span>
@@ -63,42 +35,32 @@
                     </div>
                 </div>
                 <div class="info_list_item">
-                    <div class="info_list_item_label">鐢熸晥鏃堕棿锛�</div>
-                    <div class="info_list_item_val">{{form.validType === 0 ? form.validTypeNum + '鏃ュ悗鐢熸晥' : '娆℃湀鐢熸晥'}}</div>
+                    <div class="info_list_item_label">鎶曚繚绫诲瀷锛�</div>
+                    <div class="info_list_item_val" v-if="form.type === 0 ">鐩翠繚</div>
+                    <div class="info_list_item_val" v-if="form.type === 1">濮旀墭鎶曚繚</div>
                 </div>
-
+                <div class="info_list_item">
+                    <div class="info_list_item_label">濮旀墭鍟嗘埛锛�</div>
+                    <div class="info_list_item_val" > {{form.shopName}}</div>
+                </div>
+                <div class="info_list_item">
+                    <div class="info_list_item_label">娲鹃仯鍗曚綅锛�</div>
+                    <div class="info_list_item_val" v-if="form.hasDispatchUnit === 1">鏃�</div>
+                    <div class="info_list_item_val" v-else-if="form.hasDispatchUnit === 0">鏈�</div>
+                </div>
                 <div class="info_list_item">
                     <div class="info_list_item_label">鎺ユ敹鏂囦欢閭锛�</div>
                     <div class="info_list_item_val">{{form.email}}</div>
                 </div>
-                <div class="info_list_item">
-                    <div class="info_list_item_label">鎵瑰鐢熸晥锛�</div>
-                    <div class="info_list_item_val">{{form.addValidDays||0}} 澶�</div>
+                <div class="info_list_item" style="width: 100%">
+                    <div class="info_list_item_label">鏂规纭涔︼細</div>
+                    <div class="info_list_item_val" ><a v-if="form.fanganFile && form.fanganFile.fileurlFull" style="cursor: pointer;color: #2E68EC" title="鐐瑰嚮鏌ョ湅" @click="openFile(form.fanganFile.fileurlFull)">{{ form.fanganFile.name || '鐐瑰嚮鏌ョ湅' }}</a></div>
                 </div>
-                <div class="info_list_item">
-                    <div class="info_list_item_label">鎵瑰噺鐢熸晥锛�</div>
-                    <div class="info_list_item_val">{{form.delValidDays||0}} 澶�</div>
-                </div>
-                <div class="info_list_item">
-                    <div class="info_list_item_label">鎵规敼鏀寔锛�</div>
-                    <div class="info_list_item_val">
-                      <span style="margin-right: 50px">鍔犱繚 <i  :class="form.canAdd ==1?'el-icon-circle-check':'el-icon-circle-close'" :style="form.canAdd ==1?'color:green;font-weight:bold':'color:red;font-weight:bold'"></i></span>
-                      <span  style="margin-right: 50px">鍑忎繚  <i   :class="form.canReduce ==1?'el-icon-circle-check':'el-icon-circle-close'" :style="form.canReduce ==1?'color:green;font-weight:bold':'color:red;font-weight:bold'"></i></span>
-                      <span>鏇存崲娲鹃仯鍗曚綅 <i   :class="form.canChangeUnit ==1?'el-icon-circle-check':'el-icon-circle-close'" :style="form.canChangeUnit ==1?'color:green;font-weight:bold':'color:red;font-weight:bold'"></i></span>
-                    </div>
-                </div>
-                <div class="info_list_item" v-if="form.insureCycleUnit===0 || (form.insureCycleUnit===form.timeUnit)">
-                    <div class="info_list_item_label">鎵规敼浠呮敮鎸佹浛鎹細</div>
-                    <div class="info_list_item_val" v-if="form.delOnlyReplace == 1">鏄�</div>
-                    <div class="info_list_item_val" v-else>鍚�</div>
-                </div>
-              <div class="info_list_item" style="width: 100%" v-if="form.type==1">
-                <div class="info_list_item_label">鏂规纭涔︼細</div>
-                <div class="info_list_item_val" ><a v-if="form.fanganFile && form.fanganFile.fileurlFull" style="cursor: pointer;color: #2E68EC" title="鐐瑰嚮鏌ョ湅" @click="openFile(form.fanganFile.fileurlFull)">{{ form.fanganFile.name || '鐐瑰嚮鏌ョ湅' }}</a></div>
-              </div>
             </div>
+            <div style="font-size: 18px; font-weight: bold; margin-bottom: 10px;" v-if="userInfo.type === 0">鏂规浣跨敤鎯呭喌</div>
             <el-table
-                :data="form.worktypeList"
+                v-if="userInfo.type === 0"
+                :data="list"
                 border
                 style="width: 100%; margin-bottom: 20px;">
                 <el-table-column
@@ -110,20 +72,42 @@
                     </template>
                 </el-table-column>
                 <el-table-column
-                    prop="worktypeName"
+                    prop="companyName"
                     align="center"
-                    label="宸ョ鍚嶇О">
+                    label="浼佷笟鍚嶇О">
+                </el-table-column>
+                <el-table-column
+                    align="center"
+                    label="绛剧珷鎯呭喌">
+                    <template slot-scope="{row}">
+                        <span v-if="row.signStatus === 0">寰呯绔�</span>
+                        <span v-if="row.signStatus === 1">宸茬绔�</span>
+                    </template>
                 </el-table-column>
             </el-table>
-            <div class="info_agree">
-              <div class="info_agree_label">鐗瑰埆绾﹀畾锛�<div v-html="form.specialAgreement"></div></div>
-                <div class="info_agree_label">鐗瑰埆璇存槑锛�<div v-html="form.specialInfo"></div></div>
-                <div class="info_agree_label">鍏朵粬璇存槑锛�<div v-html="form.ortherInfo"></div></div>
-            </div>
+<!--            <el-table-->
+<!--                :data="form.worktypeList"-->
+<!--                border-->
+<!--                style="width: 100%; margin-bottom: 20px;">-->
+<!--                <el-table-column-->
+<!--                    label="搴忓彿"-->
+<!--                    align="center"-->
+<!--                    width="80">-->
+<!--                    <template slot-scope="scope">-->
+<!--                        <span>{{scope.$index + 1}}</span>-->
+<!--                    </template>-->
+<!--                </el-table-column>-->
+<!--                <el-table-column-->
+<!--                    prop="worktypeName"-->
+<!--                    align="center"-->
+<!--                    label="宸ョ鍚嶇О">-->
+<!--                </el-table-column>-->
+<!--            </el-table>-->
         </div>
         <!-- 淇敼 -->
         <OperaSolutionsWindow ref="operaSolutionsWindow" @success="callback"/>
         <OperaPdfViewerWindow ref="OperaPdfViewerWindow"  />
+        <OperaSolutionsBaseDescWindow ref="operaSolutionsBaseDescWindow" />
     </GlobalWindow>
 </template>
 
@@ -132,12 +116,13 @@
 import GlobalWindow from '@/components/common/GlobalWindow'
 import OperaSolutionsWindow from '@/components/business/OperaSolutionsWindow'
 import OperaPdfViewerWindow from '@/components/business/OperaPdfViewerWindow'
-import { solutionsId } from '@/api/business/solutions'
+import OperaSolutionsBaseDescWindow from '@/components/business/OperaSolutionsBaseDescWindow'
+import { solutionsId, listForCompany } from '@/api/business/solutions'
 import { mapState } from 'vuex'
 export default {
   name: 'OperaSolutionsDescWindow',
   extends: BaseOpera,
-  components: { GlobalWindow, OperaPdfViewerWindow,OperaSolutionsWindow },
+  components: { GlobalWindow, OperaPdfViewerWindow,OperaSolutionsWindow, OperaSolutionsBaseDescWindow },
   data () {
     return {
       // 琛ㄥ崟鏁版嵁
@@ -153,8 +138,11 @@
         price: '',
         timeUnit: '',
         insureCycle: '',
+        parentId: '',
         shopName: '',
         insureCycleUnit: '',
+        hasDispatchUnit: '',
+        solutionBaseName: '',
         validTypeNum: '',
         email: '',
         canReduce: 0,
@@ -170,7 +158,8 @@
         signKeyword: '',
         worktypeList: [],
         worktypeIdList: []
-      }
+      },
+      list: []
     }
   },
   computed: {
@@ -195,14 +184,17 @@
         type: 0,
         minAge: '',
         maxAge: '',
+        parentId: '',
         price: '',
         timeUnit: '',
         insureCycle: '',
+        hasDispatchUnit: '',
         shopName: '',
         insureCycleUnit: '',
         validTypeNum: '',
         email: '',
         specialAgreement: '',
+        solutionBaseName: '',
         specialInfo: '',
         ortherInfo: '',
         fanganFile: null,
@@ -223,7 +215,14 @@
           this.form[key] = target[key]
         }
         this.getDetails()
+        this.getList()
       })
+    },
+    getList() {
+      listForCompany({ solutionId: this.form.id })
+        .then(res => {
+          this.list = res
+        })
     },
     openFile (url) {
       setTimeout(() => {
@@ -255,24 +254,6 @@
 <style lang="scss" scoped>
     .info {
         width: 100%;
-        .info_agree {
-            width: 100%;
-            display: flex;
-            flex-direction: column;
-            margin-top: 20px;
-            .info_agree_label {
-                font-size: 14px;
-                font-weight: 500;
-                color: #000000;
-                margin-top: 5px;
-            }
-            .info_agree_val {
-                font-size: 14px;
-                font-weight: 500;
-                color: #000000;
-                margin-top: 5px;
-            }
-        }
         .info_label {
             width: 100%;
             display: flex;
diff --git a/company/src/components/business/OperaSolutionsWindow.vue b/company/src/components/business/OperaSolutionsWindow.vue
index 260c454..4d23b6e 100644
--- a/company/src/components/business/OperaSolutionsWindow.vue
+++ b/company/src/components/business/OperaSolutionsWindow.vue
@@ -7,54 +7,30 @@
         @confirm="confirm"
     >
         <el-form :model="form" ref="form" :rules="rules">
-            <el-form-item label="鏂规鍚嶇О" prop="name">
-                <el-input v-model="form.name" placeholder="璇疯緭鍏�" v-trim/>
-            </el-form-item>
-            <el-form-item label="淇濋櫓鍏徃" prop="insuranceId">
-                <el-select v-model="form.insuranceId" @change="getAllWorktype1" placeholder="璇烽�夋嫨">
+            <el-form-item label="涓绘柟妗�" prop="parentId">
+                <el-select v-model="form.parentId" filterable @change="changeParent" placeholder="璇烽�夋嫨">
                     <el-option
-                        v-for="item in company"
+                        v-for="item in list"
                         :key="item.id"
                         :label="item.name"
                         :value="item.id">
                     </el-option>
                 </el-select>
             </el-form-item>
-            <el-form-item label="鎵夸繚鍏徃" prop="companyName">
-                <el-input v-model="form.companyName" placeholder="璇疯緭鍏�" v-trim/>
+            <el-form-item label="瀛愭柟妗堝悕绉�" prop="name">
+                <el-input v-model="form.name" placeholder="璇疯緭鍏�" v-trim/>
             </el-form-item>
-            <el-form-item label="鎶曚繚骞撮緞" prop="minAge">
-                <div style="display: flex; align-items: center;">
-                    <el-select v-model="form.minAge" style="flex: 1;" placeholder="璇烽�夋嫨">
-                        <el-option
-                            v-for="item in 80"
-                            :key="item"
-                            :label="item"
-                            :value="item">
-                        </el-option>
-                    </el-select>
-                    <span style="margin: 0 30px;">鑷�</span>
-                    <el-select v-model="form.maxAge" style="flex: 1;" placeholder="璇烽�夋嫨">
-                        <el-option
-                            v-for="item in 80"
-                            :key="item"
-                            :label="item"
-                            :value="item">
-                        </el-option>
-                    </el-select>
-                </div>
-            </el-form-item>
-            <el-form-item label="鏂规璐圭敤" prop="price">
+            <el-form-item label="淇濋櫓璐圭敤" prop="price">
                 <div style="display: flex; align-items: center;">
                     <el-input v-model="form.price" style="flex: 1;" placeholder="璇疯緭鍏�" v-trim/>
                     <span style="margin: 0 30px;">鍏�/浜�</span>
                     <el-select v-model="form.timeUnit" style="flex: 1;" placeholder="璇烽�夋嫨鍛ㄦ湡鍗曚綅" @change="changeTimeUnit">
                         <el-option label="澶�" :value="0"></el-option>
-<!--                        <el-option label="鍗婃湀" :value="1"></el-option>-->
-                      <el-option label="鏈�" :value="2"></el-option>
-                      <el-option label="瀛e害" :value="3"></el-option>
-                      <el-option label="鍗婂勾" :value="4"></el-option>
-                      <el-option label="骞�" :value="5"></el-option>
+                        <!--                        <el-option label="鍗婃湀" :value="1"></el-option>-->
+                        <el-option label="鏈�" :value="2"></el-option>
+                        <el-option label="瀛e害" :value="3"></el-option>
+                        <el-option label="鍗婂勾" :value="4"></el-option>
+                        <el-option label="骞�" :value="5"></el-option>
                     </el-select>
                 </div>
             </el-form-item>
@@ -70,193 +46,96 @@
                     </el-select>
                 </div>
             </el-form-item>
-            <el-form-item label="鐢熸晥鏃堕棿" prop="validTypeNum">
-                <div style="width: 100%; display: flex; align-items: center;">
-                    <div style="flex-shrink: 0;">
-                        <el-radio-group v-model="form.validType" @change="form.validTypeNum = ''">
-                            <el-radio :label="0">鏃ュ悗鐢熸晥</el-radio>
-                            <el-radio :label="1">娆℃湀鐢熸晥</el-radio>
-                        </el-radio-group>
-                    </div>
-                    <el-input style="margin-left: 20px;" type="number" v-model="form.validTypeNum"   placeholder="璇疯緭鍏ュ欢杩熷ぉ鏁�" v-if="form.validType === 0"></el-input>
-                </div>
-            </el-form-item>
-          <el-form-item label="鎵规敼鏀寔" >
-            <div style="width: 100%; display: flex; align-items: center;">
-              <el-checkbox :true-label="1" :false-label="0"   v-model="form.canAdd">鍔犱繚</el-checkbox>
-              <el-checkbox :true-label="1" :false-label="0"   v-model="form.canReduce">鍑忎繚</el-checkbox>
-              <el-checkbox :true-label="1" :false-label="0"   v-model="form.canChangeUnit">鏇存崲娲鹃仯鍗曚綅</el-checkbox>
-            </div>
-          </el-form-item>
-          <el-form-item label="鎵瑰噺鍙敮鎸佹浛鎹紙鍑忎繚鎵规敼浠呮敮鎸佹浛鎹汉鍛�,鍗冲噺淇濅汉鍛樹笉灏戜簬鍔犱繚浜哄憳鏁伴噺锛�"  prop="delOnlyReplace" v-if="form.insureCycleUnit===0 || (form.insureCycleUnit===form.timeUnit)">
-            <div style="width: 100%; display: flex; align-items: center;">
-              <el-radio-group v-model="form.delOnlyReplace">
-              <el-radio :label="1">鏄�</el-radio>
-              <el-radio :label="0">鍚�</el-radio>
-              </el-radio-group>
-            </div>
-          </el-form-item>
-          <el-form-item label="鎵瑰鐢熸晥锛堝ぉ鏁帮級" prop="addValidDays" v-if="form.delOnlyReplace != 1">
-            <div style="width: 100%; display: flex; align-items: center;">
-              <el-input style="margin-left: 0px;" type="number" v-model="form.addValidDays"   placeholder="璇疯緭鍏ユ壒澧炵敓鏁堟椂闂达紙澶╂暟锛�" ></el-input>
-            </div>
-          </el-form-item>
-          <el-form-item label="鎵瑰噺鐢熸晥锛堝ぉ鏁帮級" prop="delValidDays">
-            <div style="width: 100%; display: flex; align-items: center;">
-              <el-input style="margin-left: 0px;" type="number" v-model="form.delValidDays"   placeholder="璇疯緭鍏ユ壒鍑忕敓鏁堟椂闂达紙澶╂暟锛�" ></el-input>
-            </div>
-          </el-form-item>
             <el-form-item label="鎶曚繚绫诲瀷" prop="type">
-                <el-radio-group v-model="form.type" :disabled="form.id!=null">
-                    <el-radio :label="0" >鐩翠繚</el-radio>
+                <el-radio-group v-model="form.type" :disabled="form.id!=null" @change="form.signType = ''">
+                    <el-radio :label="0">鐩翠繚</el-radio>
                     <el-radio :label="1">濮旀墭鎶曚繚</el-radio>
                 </el-radio-group>
             </el-form-item>
-          <el-form-item label="濮旀墭鍟嗘埛" prop="shopId" v-if="form.type =='1'" :rules="form.type===1?[{required:true,message:'璇烽�夋嫨鍟嗘埛'}]:[{required:false}]">
-            <el-select v-model="form.shopId"  placeholder="璇烽�夋嫨濮旀墭鍟嗘埛">
-              <el-option
-                  v-for="item in shops"
-                  :key="item.id"
-                  :label="item.name"
-                  :value="item.id">
-              </el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="涓婁紶鏂规纭涔︼細" prop="fanganFile" v-if="form.type =='1'" :rules="form.type===1?[{required:true,message:'璇蜂笂浼犳柟妗堢‘璁や功'}]:[{required:false}]">
-            <UploadFile  @remove="deleFile" :uploadData="{ folder: 'apply',fileType:'.pdf' }" :fileList="form.fileList1" @uploadSuccess="editFanganFile" />
-          </el-form-item>
+            <el-form-item label="濮旀墭鍟嗘埛" prop="shopId" :rules="form.type === 1 ? [{required:true,message:'璇烽�夋嫨鍟嗘埛'}] : [{ required:false }]">
+                <el-select v-model="form.shopId" filterable placeholder="璇烽�夋嫨濮旀墭鍟嗘埛">
+                    <el-option
+                        v-for="item in shops"
+                        :key="item.id"
+                        :label="item.name"
+                        :value="item.id">
+                    </el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item label="绛剧珷鏂瑰紡" prop="signType" v-if="form.type === 1">
+                <el-select v-model="form.signType" placeholder="璇烽�夋嫨濮旀墭鍟嗘埛">
+                    <el-option label="鍟嗘埛绛剧讲鍟嗘埛涓婁紶鎶曚繚鍗�" :value="0"></el-option>
+                    <el-option label="鍟嗘埛绛炬姇淇濈敵璇�" :value="1"></el-option>
+                    <el-option label="鍟嗘埛鏃犻渶绛剧珷" :value="2"></el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item label="鏈夋淳閬e崟浣�" prop="hasDispatchUnit">
+                <el-radio-group v-model="form.hasDispatchUnit">
+                    <el-radio :label="0">鏈�</el-radio>
+                    <el-radio :label="1">鏃�</el-radio>
+                </el-radio-group>
+            </el-form-item>
+            <el-form-item label="闇�瑕佸鏍�" prop="retrial">
+                <el-radio-group v-model="form.retrial">
+                    <el-radio :label="1">闇�瑕�</el-radio>
+                    <el-radio :label="0">涓嶉渶瑕�</el-radio>
+                </el-radio-group>
+            </el-form-item>
+            <el-form-item label="涓婁紶鏂规纭涔︼細" prop="fanganFile" :rules="[{required:true,message:'璇蜂笂浼犳柟妗堢‘璁や功'}]">
+                <div>
+                    <UploadFile @remove="deleFile" :uploadData="{ folder: 'apply', fileType:'.pdf' }" :fileList="form.fileList1" @uploadSuccess="editFanganFile" />
+                </div>
+            </el-form-item>
             <el-form-item label="鎺ユ敹鏂囦欢閭" prop="email">
                 <el-input v-model="form.email" placeholder="璇疯緭鍏�" v-trim/>
-            </el-form-item>
-<!--            <el-form-item label="鎶曚繚鍗曠绔犲叧閿瓧锛堝鏈夊涓叧閿瓧锛岃浣跨敤鑻辨枃鍒嗗彿 ; 闅斿紑锛�" prop="signKeyword">
-                <el-input v-model="form.signKeyword" placeholder="澶氫釜鑻辨枃鍒嗗彿 ; 闅斿紑" v-trim/>
-            </el-form-item>-->
-            <el-button type="primary" @click="add">娣诲姞宸ョ</el-button>
-            <el-table
-                :data="form.worktypeIdList"
-                border
-                style="width: 100%; margin-bottom: 20px;">
-                <el-table-column
-                    label="搴忓彿"
-                    align="center"
-                    width="80">
-                    <template slot-scope="scope">
-                        <span>{{scope.$index + 1}}</span>
-                    </template>
-                </el-table-column>
-                <el-table-column
-                    align="center"
-                    label="鎵�灞炲伐绉�">
-                    <template slot-scope="{row}">
-                        <el-select filterable v-model="row.worktypeId" placeholder="璇烽�夋嫨">
-                            <el-option
-                                v-for="item in typeWork"
-                                :key="item.id"
-                                :label="item.name"
-                                :value="item.id">
-                            </el-option>
-                        </el-select>
-                    </template>
-                </el-table-column>
-                <el-table-column
-                    label="鎿嶄綔"
-                    align="center"
-                    width="100">
-                    <template slot-scope="scope">
-                        <el-button type="text" size="small" style="color: red;" @click="dele(scope.$index)">鍒犻櫎</el-button>
-                    </template>
-                </el-table-column>
-            </el-table>
-            <el-form-item label="鐗瑰埆绾﹀畾" prop="specialAgreement">
-                <RichEditor   :richData="form.specialAgreement" :styleEditor="'border: 1px solid #ccc;display: inline-block;'" @getWangedditor="getWangedditor" :readonly="false"/>
-            </el-form-item>
-            <el-form-item label="鐗瑰埆璇存槑" prop="specialInfo">
-              <RichEditor   :richData="form.specialInfo" :styleEditor="'border: 1px solid #ccc;display: inline-block;'" @getWangedditor="getWangedditor1" :readonly="false"/>
-            </el-form-item>
-          <el-form-item label="鍏朵粬璇存槑" prop="ortherInfo">
-               <RichEditor   :richData="form.ortherInfo" :styleEditor="'border: 1px solid #ccc;display: inline-block;'" @getWangedditor="getWangedditor2" :readonly="false"/>
             </el-form-item>
         </el-form>
     </GlobalWindow>
 </template>
 
 <script>
-import BaseOpera from '@/components/base/BaseOpera'
-import GlobalWindow from '@/components/common/GlobalWindow'
-import { all } from '@/api/business/insurance'
-import { all as allWorktype } from '@/api/business/worktype'
-import { solutionsId } from '@/api/business/solutions'
-import { pageAll as shopList } from '@/api/business/company'
-import UploadFile from '@/components/common/UploadFile'
-import { checkMobile, numRule } from '@/utils/form'
-import RichEditor from '@/components/common/RichEditor'
-export default {
+  import BaseOpera from '@/components/base/BaseOpera'
+  import GlobalWindow from '@/components/common/GlobalWindow'
+  import { all } from '@/api/business/insurance'
+  import { solutionsId } from '@/api/business/solutions'
+  import { list } from '@/api/business/solutionsBase'
+  import { pageAll as shopList } from '@/api/business/company'
+  import UploadFile from '@/components/common/UploadFile'
+  import RichEditor from '@/components/common/RichEditor'
+
+  export default {
   name: 'OperaSolutionsWindow',
   extends: BaseOpera,
   components: { GlobalWindow, UploadFile, RichEditor },
   data () {
-    var validType = (rule, value, callback) => {
-      if (this.form.validType === 0 && !value) {
-        return callback(new Error('寤惰繜澶╂暟涓嶈兘涓虹┖'))
-      } else if (this.form.validType === 0 && !/^[0-9]*[1-9][0-9]*$/.test(value)) {
-        return callback(new Error('寤惰繜澶╂暟鍙兘涓烘鏁存暟'))
-      }
-      callback()
-    }
     return {
       // 琛ㄥ崟鏁版嵁
       form: {
         id: null,
         name: '',
-        companyName: '',
-        insuranceId: '',
-        validType: 0,
+        parentId: '',
+        signType: '',
         type: 0,
-        minAge: '',
-        maxAge: '',
         price: '',
         timeUnit: '',
         shopId: null,
-        insureCycle: '',
+        retrial: 0,
+        hasDispatchUnit: 0,
         insureCycleUnit: '',
         email: '',
-        specialAgreement: '',
-        specialInfo: '',
-        ortherInfo: '',
-        signKeyword: '',
-        validTypeNum: '',
-        canReduce: 0,
-        canChangeUnit: 0,
-        addValidDays: 0,
-        delValidDays: 0,
-        delOnlyReplace: 0,
-        canAdd: 0,
         fileList1: [],
-        fanganFile: null,
-        worktypeIdList: [{ worktypeId: '' }]
+        fanganFile: null
       },
       // 楠岃瘉瑙勫垯
       rules: {
         name: [
           { required: true, message: '璇疯緭鍏ユ柟妗堝悕绉�' }
         ],
-        delOnlyReplace: [
-          { required: true, message: '璇烽�夋嫨' }
+        parentId: [
+          { required: true, message: '璇烽�夋嫨涓绘柟妗�' }
         ],
-        addValidDays: [
-          { validator: numRule }
-        ],
-        delValidDays: [
-          { validator: numRule }
-        ],
-        insuranceId: [
-          { required: true, message: '璇烽�夋嫨淇濋櫓鍏徃' }
-        ],
-        companyName: [
-          { required: true, message: '璇疯緭鍏ユ壙淇濆叕鍙�' }
-        ],
-        minAge: [
-          { required: true, message: '璇烽�夋嫨鎶曚繚骞撮緞' }
+        signType: [
+          { required: true, message: '璇烽�夋嫨绛剧珷鏂瑰紡' }
         ],
         price: [
           { required: true, message: '璇疯緭鍏ユ柟妗堣垂鐢�' }
@@ -264,19 +143,13 @@
         insureCycleUnit: [
           { required: true, message: '璇疯緭鍏ユ壒鏀硅璐瑰崟浣�' }
         ],
-        validTypeNum: [
-          { required: true, validator: validType }
-        ],
         type: [
           { required: true, message: '璇烽�夋嫨鎶曚繚绫诲瀷' }
         ]
-        // signKeyword: [
-        //     { required: false, message: '璇疯緭鍏ユ姇淇濆崟绛剧珷鍏抽敭瀛�' }
-        // ]
       },
+      list: [],
       shops: [],
-      company: [],
-      typeWork: []
+      company: []
     }
   },
   created () {
@@ -286,24 +159,16 @@
     })
   },
   methods: {
-    getWangedditor(val){
-      this.form.specialAgreement = val;
+    changeParent(e) {
+      let name = this.list.filter(item => {
+        if (e === item.id) {
+          return item.name
+        }
+      })
+      this.form.name = name[0].name
     },
-    getWangedditor1(val){
-      this.form.specialInfo = val;
-    },
-    getWangedditor2(val){
-      this.form.ortherInfo = val;
-    },
-
-    handNumberInput (value) {
-      const regex = /^[-+]?\d*$/
-      if (!regex.test(value)) {
-        // 濡傛灉杈撳叆鐨勪笉鏄暣鏁帮紝鍒欒缃负涓婁竴涓湁鏁堢殑鏁存暟鍊�
-        this.form.addValidDays = value.replace(/[^0-9]/g, '')
-        this.form.addValidDays = value.replace(/[^0-9]/g, '')
-        this.form.delValidDays = value.replace(/[^0-9]/g, '')
-      }
+    async getList() {
+      this.list = await list({})
     },
     changeTimeUnit () {
       if (this.form.timeUnit < this.form.insureCycleUnit) {
@@ -313,15 +178,9 @@
     editFanganFile (data) {
       this.form.fanganFile = data
     },
-    // 鍒囨崲鍏徃
-    getAllWorktype1 () {
-      this.form.worktypeIdList = [{ worktypeId: '' }]
-      this.getAllWorktype()
-    },
     // 纭鏂板缓/淇敼
     confirm () {
       const data = JSON.parse(JSON.stringify(this.form))
-      data.worktypeIdList = data.worktypeIdList.map(item => item.worktypeId)
       this.$refs.form.validate((valid) => {
         if (!valid) {
           return
@@ -367,33 +226,21 @@
     open (title, target) {
       this.title = title
       this.visible = true
-      this.form.maxAge = ''
       this.form.timeUnit = ''
       this.form.insureCycleUnit = ''
-      this.form.validTypeNum = ''
       this.form.fanganFile = null
-      this.form.canReduce = 0
-      this.form.canChangeUnit = 0
-      this.form.addValidDays = 0
-      this.form.delOnlyReplace = 0
-      this.form.delValidDays = 0
-      this.form.canAdd = 0
       this.form.fileList1 = []
-      this.form.worktypeIdList = [{ worktypeId: '' }]
-      // this.$refs['$upload'].clearFiles()//鍒濆鍖栧鍏ョ粍浠�
       this.allCompany()
       this.allShops()
+      this.getList()
       // 鏂板缓
       if (target == null) {
         this.$nextTick(() => {
           this.$refs.form.resetFields()
-          this.form.maxAge = ''
           this.form.timeUnit = ''
           this.form.insureCycleUnit = ''
-          this.form.validTypeNum = ''
           this.form.fanganFile = null
           this.form.fileList1 = []
-          this.form.worktypeIdList = [{ worktypeId: '' }]
           this.form[this.configData['field.id']] = null
         })
         return
@@ -408,49 +255,21 @@
             if (this.form.fanganFile && this.form.fanganFile.fileurl) {
               this.form.fileList1 = [{ url: this.form.fanganFile.fileurlFull, name: this.form.fanganFile.name }]
             }
-            console.log(this.form.fileList1)
-            this.form.worktypeIdList = res.worktypeList.map(item => {
-              return {
-                worktypeId: item.worktypeId
-              }
-            })
-            this.getAllWorktype()
           })
       })
     },
-    // 鏌ヨ淇濋櫓鍏徃涓嬪叏閮ㄥ伐绉�
-    getAllWorktype () {
-      allWorktype({
-        insuranceId: this.form.insuranceId
-      }).then(res => {
-        this.typeWork = res
-      })
-    },
-
     // 鏌ヨ鍏ㄩ儴淇濋櫓鍏徃
     allCompany () {
       all({ dataType: 2, status: 0 })
         .then(res => {
-          console.log(res)
           this.company = res
         })
     },
     allShops () {
       shopList({ type: 1, status: 0 })
         .then(res => {
-          console.log(res)
           this.shops = res
         })
-    },
-    add () {
-      this.form.worktypeIdList.push({ worktypeId: '' })
-    },
-    dele (index) {
-      if (this.form.worktypeIdList.length === 1) {
-        this.$message.warning('鑷冲皯瑕佷繚鐣欎竴椤�')
-        return
-      }
-      this.form.worktypeIdList.splice(index, 1)
     }
   }
 }
diff --git a/company/src/components/business/OperaUnionApplyCheckWindow.vue b/company/src/components/business/OperaUnionApplyCheckWindow.vue
index 4ccb8b5..becba97 100644
--- a/company/src/components/business/OperaUnionApplyCheckWindow.vue
+++ b/company/src/components/business/OperaUnionApplyCheckWindow.vue
@@ -16,11 +16,11 @@
           <el-form-item label="涓婁紶鎶曚繚鍗曪細" prop="toubaodanFile">
             <UploadFile @remove="dele2" :uploadData="{ folder: 'apply',fileType:'.pdf' }" :fileList="form.fileList" @uploadSuccess="toubaoFileUploaded" />
           </el-form-item>
-          <div v-for="(item,index) in this.model.applyList" :key="index">
-            <el-form-item :label="(index+1)+'.琚繚闄╀汉锛�'+item.companyName+')锛�'" prop="tbdMultifileList[index]">
-              <UploadFile  @remove="deleIndex(0,index)"  :uploadData="{ folder: 'apply',fileType:'.pdf' }"  :fileIndex="index"  :showTips="showTips" :fileList="model.applyList[index].fileList" @uploadSuccess="toubaoFileUploaded2" />
-            </el-form-item>
-          </div>
+<!--          <div v-for="(item,index) in this.model.applyList" :key="index">-->
+<!--            <el-form-item :label="(index+1)+'.琚繚闄╀汉锛�'+item.companyName+')锛�'" prop="tbdMultifileList[index]">-->
+<!--              <UploadFile  @remove="deleIndex(0,index)"  :uploadData="{ folder: 'apply',fileType:'.pdf' }"  :fileIndex="index"  :showTips="showTips" :fileList="model.applyList[index].fileList" @uploadSuccess="toubaoFileUploaded2" />-->
+<!--            </el-form-item>-->
+<!--          </div>-->
         </el-form>
         <!--    涓婁紶淇濋櫓鍗�    -->
       <el-form v-if="visible3==true" :model="form" ref="form3" :rules="rules3" style="width: 100%;">
@@ -56,7 +56,7 @@
         <el-form-item label="涓婁紶淇濋櫓鍗曪細" prop="baoxianFile">
           <UploadFile @remove="dele3"  :uploadData="{ folder: 'apply',fileType:'.pdf' }" :fileList="form.fileList1" @uploadSuccess="baoxianFileUploaded" />
         </el-form-item>
-        <div class="box_table">
+        <div class="box_table" v-if="false">
           <div class="box_table_head">
             <div class="box_table_head_item">搴忓彿</div>
             <div class="box_table_head_item">琚繚闄╀汉</div>
@@ -204,6 +204,7 @@
       }
 
       this.model = target
+      console.log(target)
       this.form.startTime = target.startTime
       this.form.endTime = target.endTime
       this.title = title
diff --git a/company/src/components/business/OperaUnionChangeCheckWindow.vue b/company/src/components/business/OperaUnionChangeCheckWindow.vue
index 4a85267..d758456 100644
--- a/company/src/components/business/OperaUnionChangeCheckWindow.vue
+++ b/company/src/components/business/OperaUnionChangeCheckWindow.vue
@@ -71,30 +71,30 @@
           <el-input v-model="form.code" placeholder="璇疯緭鍏�" v-trim/>
         </el-form-item>
         <el-form-item label="涓婁紶鎵瑰崟锛�" prop="baoxianFile">
-          <UploadFile @remove="dele3"  :uploadData="{ folder: 'apply',fileType:'.pdf' }" :fileList="form.fileList1" @uploadSuccess="baoxianFileUploaded" />
+          <UploadFile @remove="dele3" :limit="99" :uploadData="{ folder: 'apply',fileType:'.pdf' }" :fileList="form.fileList1" @uploadSuccess="baoxianFileUploaded" />
         </el-form-item>
-        <div class="box_table">
-          <div class="box_table_head">
-            <div class="box_table_head_item">搴忓彿</div>
-            <div class="box_table_head_item">琚繚闄╀汉</div>
-            <div v-if="model.type==0" class="box_table_head_item">鍔犱繚浜烘暟</div>
-            <div v-if="model.type==0" class="box_table_head_item">鍑忎繚浜烘暟</div>
-            <div v-if="model.type==1" class="box_table_head_item">鍙樻洿浜烘暟</div>
-            <div class="box_table_head_item">涓婁紶鎵瑰崟</div>
-          </div>
-          <div class="box_table_content" v-for="(item, index) in model.applyList" :key="index">
-            <div class="box_table_content_item">{{index + 1}}</div>
-            <div class="box_table_content_item" >{{ item.companyName }}</div>
-            <div v-if="model.type==0" class="box_table_content_item">{{ item.addNum }}</div>
-            <div v-if="model.type==0" class="box_table_content_item">{{ item.delNum }}</div>
-            <div  v-if="model.type==1" class="box_table_content_item">{{ item.changeNum }}</div>
-            <div class="box_table_content_item">
-              <el-form-item label="" prop="bxdMultifileList[index]">
-                <UploadFileLink   @remove="deleIndex(1,index)" :uploadData="{ folder: 'apply',fileType:'.pdf' }" :fileIndex="index" :showTips="showTips" :fileList="model.applyList[index].fileList1" @uploadSuccess="baoxianFileUploaded2" />
-              </el-form-item>
-            </div>
-          </div>
-        </div>
+<!--        <div class="box_table">-->
+<!--          <div class="box_table_head">-->
+<!--            <div class="box_table_head_item">搴忓彿</div>-->
+<!--            <div class="box_table_head_item">琚繚闄╀汉</div>-->
+<!--            <div v-if="model.type==0" class="box_table_head_item">鍔犱繚浜烘暟</div>-->
+<!--            <div v-if="model.type==0" class="box_table_head_item">鍑忎繚浜烘暟</div>-->
+<!--            <div v-if="model.type==1" class="box_table_head_item">鍙樻洿浜烘暟</div>-->
+<!--            <div class="box_table_head_item">涓婁紶鎵瑰崟</div>-->
+<!--          </div>-->
+<!--          <div class="box_table_content" v-for="(item, index) in model.applyList" :key="index">-->
+<!--            <div class="box_table_content_item">{{index + 1}}</div>-->
+<!--            <div class="box_table_content_item" >{{ item.companyName }}</div>-->
+<!--            <div v-if="model.type==0" class="box_table_content_item">{{ item.addNum }}</div>-->
+<!--            <div v-if="model.type==0" class="box_table_content_item">{{ item.delNum }}</div>-->
+<!--            <div  v-if="model.type==1" class="box_table_content_item">{{ item.changeNum }}</div>-->
+<!--            <div class="box_table_content_item">-->
+<!--              <el-form-item label="" prop="bxdMultifileList[index]">-->
+<!--                <UploadFileLink   @remove="deleIndex(1,index)" :uploadData="{ folder: 'apply',fileType:'.pdf' }" :fileIndex="index" :showTips="showTips" :fileList="model.applyList[index].fileList1" @uploadSuccess="baoxianFileUploaded2" />-->
+<!--              </el-form-item>-->
+<!--            </div>-->
+<!--          </div>-->
+<!--        </div>-->
       </el-form>
       <template v-slot:footer>
         <el-button type="primary" @click="doSubmit">纭� 瀹�</el-button>
@@ -118,6 +118,13 @@
   extends: BaseOpera,
   components: { UploadFile, GlobalWindow ,UploadFileLink},
   data () {
+    const checkFile = (rule, value, callback) => {
+      if (value.length === 0) {
+        callback(new Error('璇蜂笂浼犳壒鍗�'));
+      } else {
+        callback();
+      }
+    };
     return {
       // 琛ㄥ崟鏁版嵁
       model: {},
@@ -136,7 +143,7 @@
           { required: true, message: '璇峰畬鍠勪俊鎭�' }
         ],
         baoxianFile: [
-          { required: true, message: '璇峰畬鍠勪俊鎭�' }
+          { required: true, validator: checkFile }
         ]
       },
       form: {
@@ -145,7 +152,7 @@
         applyTime: null,
         delValidTime: null,
         code: null,
-        baoxianFile: null,
+        baoxianFile: [],
         bxdMultifileList: [],
         fileList1: [],
         selectRadio: 0
@@ -171,8 +178,12 @@
         this.form.bxdMultifileList[index].name = null
       }
     },
-    dele3 () {
-      this.form.baoxianFile = null
+    dele3 (imgaddr) {
+      this.form.baoxianFile.forEach((item, index) => {
+        if (imgaddr === item.imgaddr) {
+          this.form.baoxianFile.splice(index, 1)
+        }
+      })
     },
     open (title, target, flag) {
       this.visible = true
@@ -182,7 +193,7 @@
         backCheckInfo: '',
         startTime: null,
         code: null,
-        baoxianFile: null,
+        baoxianFile: [],
         delValidTime: null,
         bxdMultifileList:[],
         fileList1: [],
@@ -238,7 +249,8 @@
       }
     },
     baoxianFileUploaded (data) {
-      this.form.baoxianFile = data
+      this.form.baoxianFile.push(data)
+      console.log(this.form.baoxianFile)
     },
     baoxianFileUploaded2 (data) {
       this.form.bxdMultifileList[data.index].fileurl = data.fileurl
@@ -266,8 +278,9 @@
             applyDate: (this.model.delOnlyReplace != 1 ? this.form.applyTime : this.form.delValidTime),
             delValidTime:this.form.delValidTime,
             code: this.form.code,
-            fileurl: this.form.baoxianFile.fileurl,
-            name: this.form.baoxianFile.name,
+            pidanFileList: this.form.baoxianFile,
+            // fileurl: this.form.baoxianFile.fileurl,
+            // name: this.form.baoxianFile.name,
             applyChangeBXDList:this.form.bxdMultifileList
           }
           uploadBXD(param)
diff --git a/company/src/components/business/OperaUnionChangeDetailWindow.vue b/company/src/components/business/OperaUnionChangeDetailWindow.vue
index e606aca..9e708d2 100644
--- a/company/src/components/business/OperaUnionChangeDetailWindow.vue
+++ b/company/src/components/business/OperaUnionChangeDetailWindow.vue
@@ -27,8 +27,9 @@
                             <el-button v-if="[1,2].includes(model.status)" type="primary" @click="viewApplyFile">鏌ョ湅鐢宠鍗�</el-button>
                             <el-button v-if="[0].includes(model.status)" type="primary" :disabled="loading" :loading="loading" @click="getSignLink(0)">绛剧讲鐢宠鍗�</el-button>
                             <el-button v-if="[2].includes(model.status)" type="primary" @click="viewPidan">鏌ョ湅鎵瑰崟</el-button>
-                            <el-button v-if=" [1].includes(model.status)" type="primary" @click="$refs.OperaUnionChangeCheckWindow.open('涓婁紶鎵瑰崟',model,3)">涓婁紶鎵瑰崟</el-button>
-                            <el-button  v-if="[0,1].includes(model.status)" type="danger" @click="$refs.OperaUnionChangeCheckWindow.open('閫�鍥炵敵璇�',model,1)">閫�鍥炵敵璇�</el-button>
+                            <el-button v-if=" [1].includes(model.status) && userInfo.type === 0" type="primary" @click="$refs.OperaUnionChangeCheckWindow.open('涓婁紶鎵瑰崟',model,3)">涓婁紶鎵瑰崟</el-button>
+
+                            <el-button  v-if="[0,1].includes(model.status)" type="danger" @click="$refs.OperaUnionChangeCheckWindow.open('鍏抽棴鐢宠',model,1)">鍏抽棴鐢宠</el-button>
                         </template>
                         <template  v-if="0">
                           <template  v-if="0">
@@ -136,6 +137,7 @@
                           label="琚繚闄╀汉">
                       </el-table-column>
                         <el-table-column
+                            v-if="hasDispatchUnit !== 1"
                             prop="duName"
                             label="娲鹃仯鍗曚綅">
                         </el-table-column>
@@ -235,21 +237,37 @@
             </span>
       </el-dialog>
       <el-dialog
-          title="鏌ョ湅淇濋櫓鍗�"
+          title="鏌ョ湅鎵瑰崟"
           :visible.sync="visibleFile"
-          width="500px"
-          :modal="true"
+          width="700px"
+          :modal="false"
           :show-close="true"
           :close-on-click-modal="false"
           append-to-body
           center>
-        <div class="desc_item_from" v-for="(item, index) in pidanFileData" :key="index"  style="margin-bottom: 15px">
-          <span v-if="index ==0">{{item.name}}锛�</span>
-          <span v-if="index >0">琚繚闄╀汉锛坽{item.name}}锛変繚闄╁崟锛�</span>
-          <a  style="cursor: pointer;color: #2E68EC" v-if="item.file && item.file.fileurl && index ==0" @click="openFile(item.file.fileurlFull,item.name)">鍦ㄧ嚎棰勮</a>
-          <a   style="cursor: pointer;color: #2E68EC" v-if="item.file && item.file.fileurl && index !=0 " @click="openFile(item.file.fileurlFull,'琚繚闄╀汉锛�'+item.name+'锛変繚闄╁崟')">鍦ㄧ嚎棰勮</a>
-          <span v-if="!item.file || !item.file.fileurl">鏈笂浼�</span>
-        </div>
+          <el-table
+              :data="model.pidanFileList"
+              border
+              style="width: 100%">
+              <el-table-column
+                  prop="name"
+                  label="鍚嶇О">
+              </el-table-column>
+              <el-table-column
+                  width="90"
+                  label="鎿嶄綔">
+                  <template slot-scope="{ row }">
+                      <el-button type="primary" @click="seePidan(row.name, row.fileurlFull)">鏌ョ湅</el-button>
+                  </template>
+              </el-table-column>
+          </el-table>
+<!--        <div class="desc_item_from" v-for="(item, index) in pidanFileData" :key="index"  style="margin-bottom: 15px">-->
+<!--          <span v-if="index ==0">{{item.name}}锛�</span>-->
+<!--          <span v-if="index >0">琚繚闄╀汉锛坽{item.name}}锛変繚闄╁崟锛�</span>-->
+<!--          <a  style="cursor: pointer;color: #2E68EC" v-if="item.file && item.file.fileurl && index ==0" @click="openFile(item.file.fileurlFull,item.name)">鍦ㄧ嚎棰勮</a>-->
+<!--          <a   style="cursor: pointer;color: #2E68EC" v-if="item.file && item.file.fileurl && index !=0 " @click="openFile(item.file.fileurlFull,'琚繚闄╀汉锛�'+item.name+'锛変繚闄╁崟')">鍦ㄧ嚎棰勮</a>-->
+<!--          <span v-if="!item.file || !item.file.fileurl">鏈笂浼�</span>-->
+<!--        </div>-->
         <span slot="footer" class="dialog-footer">
                 <el-button @click="visibleFile=false">鍏� 闂�</el-button>
             </span>
@@ -311,6 +329,7 @@
       model: {},
       visiblePhone: false,
       visibleFile:false,
+      hasDispatchUnit: null,
       form: {
           businessId: null,
           phone: this.$store.state.userInfo.company? this.$store.state.userInfo.company.phone:null,
@@ -364,6 +383,9 @@
         this.getDetail()
         this.getList()
      },
+    seePidan(name, url) {
+       this.$refs.OperaPdfViewerWindow.open(name, url)
+    },
     send () {
       sendSms({
         phone: this.form.phone
@@ -493,7 +515,6 @@
         this.model = res
         this.tableData = new Array()
         this.tableData.push(res)
-          console.log(this.tableData)
         this.pidanFileData.push({ name: '鍟嗘埛淇濋櫓鍗�', file: this.model.pidanFile })
         this.getApplyList()
       }).catch(err => {
@@ -502,6 +523,7 @@
     getApplyList () {
       applyList({ unionChangeId: this.model.id, getFiles: 1 }).then(res => {
         this.model.applyList = res
+        this.hasDispatchUnit = res[0].hasDispatchUnit
         if (res && res.length > 0) {
           res.forEach(item => {
             if (item.pidanFile) {
diff --git a/company/src/components/business/OperaUnionChangeUnitCheckWindow.vue b/company/src/components/business/OperaUnionChangeUnitCheckWindow.vue
index 5791392..685a964 100644
--- a/company/src/components/business/OperaUnionChangeUnitCheckWindow.vue
+++ b/company/src/components/business/OperaUnionChangeUnitCheckWindow.vue
@@ -35,30 +35,30 @@
         <el-input v-model="form.code" placeholder="璇疯緭鍏�" v-trim/>
       </el-form-item>
       <el-form-item label="涓婁紶鎵瑰崟锛�" prop="baoxianFile">
-        <UploadFile @remove="dele3"  :uploadData="{ folder: 'apply',fileType:'.pdf' }" :fileList="form.fileList1" @uploadSuccess="baoxianFileUploaded" />
+        <UploadFile @remove="dele3" :limit="99" :uploadData="{ folder: 'apply',fileType:'.pdf' }" :fileList="form.fileList1" @uploadSuccess="baoxianFileUploaded" />
       </el-form-item>
-      <div class="box_table">
-        <div class="box_table_head">
-          <div class="box_table_head_item">搴忓彿</div>
-          <div class="box_table_head_item">琚繚闄╀汉</div>
-          <div v-if="model.type==0" class="box_table_head_item">鍔犱繚浜烘暟</div>
-          <div v-if="model.type==0" class="box_table_head_item">鍑忎繚浜烘暟</div>
-          <div v-if="model.type==1" class="box_table_head_item">鍙樻洿浜烘暟</div>
-          <div class="box_table_head_item">涓婁紶鎵瑰崟</div>
-        </div>
-        <div class="box_table_content" v-for="(item, index) in model.applyList" :key="index">
-          <div class="box_table_content_item">{{index + 1}}</div>
-          <div class="box_table_content_item" >{{ item.companyName }}</div>
-          <div v-if="model.type==0" class="box_table_content_item">{{ item.addNum }}</div>
-          <div v-if="model.type==0" class="box_table_content_item">{{ item.delNum }}</div>
-          <div  v-if="model.type==1" class="box_table_content_item">{{ item.changeNum }}</div>
-          <div class="box_table_content_item">
-            <el-form-item label="" prop="bxdMultifileList[index]">
-              <UploadFileLink   @remove="deleIndex(1,index)" :uploadData="{ folder: 'apply',fileType:'.pdf' }" :fileIndex="index" :showTips="showTips" :fileList="model.applyList[index].fileList1" @uploadSuccess="baoxianFileUploaded2" />
-            </el-form-item>
-          </div>
-        </div>
-      </div>
+<!--      <div class="box_table">-->
+<!--        <div class="box_table_head">-->
+<!--          <div class="box_table_head_item">搴忓彿</div>-->
+<!--          <div class="box_table_head_item">琚繚闄╀汉</div>-->
+<!--          <div v-if="model.type==0" class="box_table_head_item">鍔犱繚浜烘暟</div>-->
+<!--          <div v-if="model.type==0" class="box_table_head_item">鍑忎繚浜烘暟</div>-->
+<!--          <div v-if="model.type==1" class="box_table_head_item">鍙樻洿浜烘暟</div>-->
+<!--          <div class="box_table_head_item">涓婁紶鎵瑰崟</div>-->
+<!--        </div>-->
+<!--        <div class="box_table_content" v-for="(item, index) in model.applyList" :key="index">-->
+<!--          <div class="box_table_content_item">{{index + 1}}</div>-->
+<!--          <div class="box_table_content_item" >{{ item.companyName }}</div>-->
+<!--          <div v-if="model.type==0" class="box_table_content_item">{{ item.addNum }}</div>-->
+<!--          <div v-if="model.type==0" class="box_table_content_item">{{ item.delNum }}</div>-->
+<!--          <div  v-if="model.type==1" class="box_table_content_item">{{ item.changeNum }}</div>-->
+<!--          <div class="box_table_content_item">-->
+<!--            <el-form-item label="" prop="bxdMultifileList[index]">-->
+<!--              <UploadFileLink   @remove="deleIndex(1,index)" :uploadData="{ folder: 'apply',fileType:'.pdf' }" :fileIndex="index" :showTips="showTips" :fileList="model.applyList[index].fileList1" @uploadSuccess="baoxianFileUploaded2" />-->
+<!--            </el-form-item>-->
+<!--          </div>-->
+<!--        </div>-->
+<!--      </div>-->
     </el-form>
     <template v-slot:footer>
       <el-button type="primary" @click="doSubmit">纭� 瀹�</el-button>
@@ -108,7 +108,7 @@
         backCheckInfo: '',
         applyTime: null,
         code: null,
-        baoxianFile: null,
+        baoxianFile: [],
         bxdMultifileList: [],
         fileList1: [],
         selectRadio: 0
@@ -134,8 +134,12 @@
         this.form.bxdMultifileList[index].name = null
       }
     },
-    dele3 () {
-      this.form.baoxianFile = null
+    dele3 (e) {
+        this.form.baoxianFile.forEach((item, index) => {
+          if (e === item.imgaddr) {
+            this.form.baoxianFile.splice(index, 1)
+          }
+        })
     },
     open (title, target, flag) {
       this.visible = true
@@ -145,7 +149,7 @@
         backCheckInfo: '',
         startTime: null,
         code: null,
-        baoxianFile: null,
+        baoxianFile: [],
         bxdMultifileList:[],
         fileList1: [],
         selectRadio: 0,
@@ -198,7 +202,7 @@
       }
     },
     baoxianFileUploaded (data) {
-      this.form.baoxianFile = data
+      this.form.baoxianFile.push(data)
     },
     baoxianFileUploaded2 (data) {
       this.form.bxdMultifileList[data.index].fileurl = data.fileurl
@@ -225,8 +229,9 @@
               id: this.model.id,
               applyDate: this.form.applyTime,
               code: this.form.code,
-              fileurl: this.form.baoxianFile.fileurl,
-              name: this.form.baoxianFile.name,
+              // fileurl: this.form.baoxianFile.fileurl,
+              // name: this.form.baoxianFile.name,
+              pidanFileList: this.form.baoxianFile,
               applyChangeBXDList:this.form.bxdMultifileList
             }
             uploadBXD(param)
diff --git a/company/src/components/business/OperaUnionChangeUnitDetailWindow.vue b/company/src/components/business/OperaUnionChangeUnitDetailWindow.vue
index df35918..61d53af 100644
--- a/company/src/components/business/OperaUnionChangeUnitDetailWindow.vue
+++ b/company/src/components/business/OperaUnionChangeUnitDetailWindow.vue
@@ -10,7 +10,7 @@
             <div class="desc_item">
                 <div class="desc_item_label">
                     <div class="desc_item_label_left">
-                        <span>鎶曚繚浜猴細{{ model.shopName}}</span>
+                        <span>鎶曚繚浜猴細{{ model.shopName}} </span>
                       <span v-if="model.status === 0">淇濆崟鐘舵�侊細<span  :class="'change-status'+model.status" >寰呯缃�</span></span>
                       <span v-if="model.status === 1">淇濆崟鐘舵�侊細<span  :class="'change-status'+model.status" >寰呭鏍�</span></span>
                       <span v-if="model.status === 2">淇濆崟鐘舵�侊細<span  :class="'change-status'+model.status" >宸茬敓鏁�</span></span>
@@ -27,7 +27,7 @@
                             <el-button v-if="[1,2].includes(model.status)" type="primary" @click="viewApplyFile">鏌ョ湅鐢宠鍗�</el-button>
                             <el-button v-if="[0].includes(model.status)" type="primary" :disabled="loading" :loading="loading" @click="getSignLink(0)">绛剧讲鐢宠鍗�</el-button>
                             <el-button v-if="[2].includes(model.status)" type="primary" @click="viewPidan">鏌ョ湅鎵瑰崟</el-button>
-                            <el-button v-if=" [1].includes(model.status)" type="primary" @click="$refs.OperaUnionChangeCheckWindow.open('涓婁紶鎵瑰崟',model,3)">涓婁紶鎵瑰崟</el-button>
+                            <el-button v-if=" [1].includes(model.status) && userInfo.type !== 2" type="primary" @click="$refs.OperaUnionChangeCheckWindow.open('涓婁紶鎵瑰崟',model,3)">涓婁紶鎵瑰崟</el-button>
                             <el-button  v-if="[0,1].includes(model.status)" type="danger" @click="$refs.OperaUnionChangeCheckWindow.open('閫�鍥炵敵璇�',model,1)">閫�鍥炵敵璇�</el-button>
                         </template>
                         <template  v-if="0">
@@ -113,6 +113,7 @@
                           label="琚繚闄╀汉">
                       </el-table-column>
                       <el-table-column
+                          v-if="hasDispatchUnit !== 1"
                           prop="oldDuName"
                           label="鍘熸淳閬e崟浣�">
                       </el-table-column>
@@ -121,6 +122,7 @@
                           label="鍘熸墍灞炲伐绉�">
                       </el-table-column>
                       <el-table-column
+                          v-if="hasDispatchUnit !== 1"
                           prop="duName"
                           label="鏇存崲鍚庢淳閬e崟浣�">
                       </el-table-column>
@@ -203,21 +205,29 @@
             </span>
       </el-dialog>
       <el-dialog
-          title="鏌ョ湅淇濋櫓鍗�"
+          title="鏌ョ湅鎵瑰崟"
           :visible.sync="visibleFile"
           width="800px"
-          :modal="true"
+          :modal="false"
           :show-close="true"
           :close-on-click-modal="false"
           append-to-body
           center>
-        <div class="desc_item_from" v-for="(item, index) in pidanFileData" :key="index"  style="margin-bottom: 15px">
-          <span v-if="index ==0">{{item.name}}锛�</span>
-          <span v-if="index >0">琚繚闄╀汉锛坽{item.name}}锛変繚闄╁崟锛�</span>
-          <a  style="cursor: pointer;color: #2E68EC" v-if="item.file && item.file.fileurl && index ==0" @click="openFile(item.file.fileurlFull,item.name)">鍦ㄧ嚎棰勮</a>
-          <a  style="cursor: pointer;color: #2E68EC" v-if="item.file && item.file.fileurl && index !=0 " @click="openFile(item.file.fileurlFull,'琚繚闄╀汉锛�'+item.name+'锛変繚闄╁崟')">鍦ㄧ嚎棰勮</a>
-          <span v-if="!item.file || !item.file.fileurl">鏈笂浼�</span>
-        </div>
+          <el-table :data="model.pidanFileList">
+              <el-table-column property="name" label="鏂囦欢鍚�"></el-table-column>
+              <el-table-column label="鎿嶄綔" width="90px">
+                  <template slot-scope="{row}">
+                      <el-button type="primary" @click="chakan(row.name, row.fileurlFull)">鏌ョ湅</el-button>
+                  </template>
+              </el-table-column>
+          </el-table>
+<!--        <div class="desc_item_from" v-for="(item, index) in pidanFileData" :key="index"  style="margin-bottom: 15px">-->
+<!--          <span v-if="index ==0">{{item.name}}锛�</span>-->
+<!--          <span v-if="index >0">琚繚闄╀汉锛坽{item.name}}锛変繚闄╁崟锛�</span>-->
+<!--          <a  style="cursor: pointer;color: #2E68EC" v-if="item.file && item.file.fileurl && index ==0" @click="openFile(item.file.fileurlFull,item.name)">鍦ㄧ嚎棰勮</a>-->
+<!--          <a  style="cursor: pointer;color: #2E68EC" v-if="item.file && item.file.fileurl && index !=0 " @click="openFile(item.file.fileurlFull,'琚繚闄╀汉锛�'+item.name+'锛変繚闄╁崟')">鍦ㄧ嚎棰勮</a>-->
+<!--          <span v-if="!item.file || !item.file.fileurl">鏈笂浼�</span>-->
+<!--        </div>-->
 <!--
         <div class="desc_item_from" v-for="(item, index) in pidanFileData" :key="index"  style="margin-bottom: 15px">
           <span v-if="index ==0">{{item.name}}锛�</span>
@@ -283,6 +293,7 @@
       model: {},
       visiblePhone: false,
       visibleFile:false,
+      hasDispatchUnit: null,
       form: {
           businessId: null,
           phone: this.$store.state.userInfo.company? this.$store.state.userInfo.company.phone:null,
@@ -336,6 +347,9 @@
         this.getDetail()
         this.getList()
      },
+    chakan(name, url) {
+       this.$refs.OperaPdfViewerWindow.open(name, url)
+    },
     send () {
       sendSms({
         phone: this.form.phone
@@ -472,6 +486,7 @@
     getApplyList () {
       applyList({ unionChangeId: this.model.id, getFiles: 1 }).then(res => {
         this.model.applyList = res
+        this.hasDispatchUnit = res[0].hasDispatchUnit
         if (res && res.length > 0) {
           res.forEach(item => {
             if (item.pidanFile) {
diff --git a/company/src/components/business/OperaWtbApplyShopWindow.vue b/company/src/components/business/OperaWtbApplyShopWindow.vue
index ec7d1b2..3ea73c1 100644
--- a/company/src/components/business/OperaWtbApplyShopWindow.vue
+++ b/company/src/components/business/OperaWtbApplyShopWindow.vue
@@ -20,16 +20,19 @@
                     <div class="desc_item_label_left">
                         <span>鎶曚繚浜猴細{{ model.shopName }}</span>
                         <span>琚繚闄╀汉锛歿{ model.companyName }}</span>
-                      <span>淇濆崟鐘舵�侊細<span  :class="'apply-status'+model.status" >{{ model.statusInfo }}</span></span>
+                      <span>淇濆崟鐘舵�侊細
+                          <span  :class="'apply-status'+model.status" >{{ model.statusInfo }}</span>
+                      </span>
                         <span>鎻愪氦鏃堕棿锛歿{ model.createDate }}</span>
                     </div>
                   <div class="desc_item_label_right">
+                      <el-button type="primary" @click="viewConfirmationLetter">鏌ョ湅鏂规纭涔�</el-button>
                     <el-button type="primary" @click="$refs.InsuranceDetails.open('鎶曚繚璇︽儏鍗�',model,0)">瀵煎嚭璇﹀崟</el-button>
                       <template v-if="userInfo.type === 1">
                           <el-button v-if="model.status == 24" type="primary" @click="$refs.OperaInsuranceApplyAddWindow.open('鎶曚繚鐢宠', {id: dataId})">鍐嶆鎶曚繚</el-button>
-                          <el-button v-if="[21,22,23,24,25,26,27].includes(model.status)" type="primary" @click="viewFanganshu">鏌ョ湅纭涔�</el-button>
+<!--                          <el-button v-if="[21,22,23,24,25,26,27].includes(model.status)" type="primary" @click="viewFanganshu">鏌ョ湅纭涔�</el-button>-->
                         <el-button v-if="[22,23,24,25,26,27].includes(model.status)  && model.shenqingdanFile" type="primary" @click="viewShenqingdan">鏌ョ湅鐢宠鍗�</el-button>
-                        <el-button v-if="[1,2,3].includes(model.unionApplyTbdStatus) &&(model.toubaodanFile || model.oubaodanSignedFile)" type="primary" @click="viewToubaodan">鏌ョ湅鎶曚繚鍗�</el-button>
+                        <el-button v-if="[1,2,3].includes(model.unionApplyTbdStatus) && (model.toubaodanFile || model.toubaodanSignedFile) && model.signType !== 1" type="primary" @click="viewToubaodan">鏌ョ湅鎶曚繚鍗�</el-button>
                         <el-button v-if="[3].includes(model.unionApplyTbdStatus) &&(model.baoxiandanFile)" type="primary" @click="viewBaoxiandan">鏌ョ湅淇濋櫓鍗�</el-button>
                         <!--                          goSign-->
                         <el-button v-if="model.status == 20" type="primary" :disabled="loading" :loading="loading" @click="getSignLink(0)">绛剧讲鏂规纭涔�</el-button>
@@ -38,7 +41,7 @@
                         <el-button v-if="model.status == 24" type="danger" @click="closeOrder">鍏抽棴鐢宠</el-button>
                       </template>
                     <template v-if="userInfo.type === 2">
-                      <el-button v-if="[21,22,23,24,25,26,27].includes(model.status)" type="primary" @click="viewFanganshu">鏌ョ湅纭涔�</el-button>
+<!--                      <el-button v-if="[21,22,23,24,25,26,27].includes(model.status)" type="primary" @click="viewFanganshu">鏌ョ湅纭涔�</el-button>-->
                       <el-button v-if="[22,23,24,25,26,27].includes(model.status)  && model.shenqingdanFile" type="primary" @click="viewShenqingdan">鏌ョ湅鐢宠鍗�</el-button>
                       <el-button v-if="[1,2,3].includes(model.unionApplyTbdStatus) &&(model.toubaodanFile || model.oubaodanSignedFile)" type="primary" @click="viewToubaodan">鏌ョ湅鎶曚繚鍗�</el-button>
                       <el-button v-if="[3].includes(model.unionApplyTbdStatus) &&(model.baoxiandanFile)" type="primary" @click="viewBaoxiandan">鏌ョ湅淇濋櫓鍗�</el-button>
@@ -47,7 +50,7 @@
                       <el-button v-if="model.status == 23" type="danger" @click="$refs.OperaWtbApplyCheckWindow.open('鍏抽棴鐢宠',model,2)">鍏抽棴鐢宠</el-button>
                     </template>
                     <template v-if="userInfo.type === 0">
-                      <el-button v-if="[21,22,23,24,25,26,27].includes(model.status)" type="primary" @click="viewFanganshu">鏌ョ湅纭涔�</el-button>
+<!--                      <el-button v-if="[21,22,23,24,25,26,27].includes(model.status)" type="primary" @click="viewFanganshu">鏌ョ湅纭涔�</el-button>-->
                       <el-button v-if="[22,23,24,25,26,27].includes(model.status)  && model.shenqingdanFile" type="primary" @click="viewShenqingdan">鏌ョ湅鐢宠鍗�</el-button>
                       <el-button v-if="[1,2,3].includes(model.unionApplyTbdStatus) &&(model.toubaodanFile || model.oubaodanSignedFile)" type="primary" @click="viewToubaodan">鏌ョ湅鎶曚繚鍗�</el-button>
                       <el-button v-if="[3].includes(model.unionApplyTbdStatus) &&(model.baoxiandanFile)" type="primary" @click="viewBaoxiandan">鏌ョ湅淇濋櫓鍗�</el-button>
@@ -80,15 +83,7 @@
                             align="center"
                             :label="getApplyTimeTitle(1,model.solutionType,model)">
                         </el-table-column>
-                        <el-table-column
-                            prop="insureNum"
-                            align="center"
-                            label="鎶曚繚浜烘暟">
-                          <template scope="{row}">
-                            <span>{{row.insureNum||0}} 浜�</span>
-                          </template>
-                        </el-table-column>
-                      <el-table-column prop="guaranteeNum"  align="center" label="鍦ㄤ繚浜烘暟" >
+                      <el-table-column prop="guaranteeNum"  align="center" label="褰撳墠鍦ㄤ繚浜烘暟" >
                         <template scope="{row}">
                           <span>{{row.guaranteeNum||0}} 浜�</span>
                         </template>
@@ -104,10 +99,10 @@
                         <el-table-column
                             prop="currentFee"
                             align="center"
-                            label="宸蹭骇鐢熻垂鐢�">
-                          <template scope="{row}">
-                            <span>{{row.currentFee!=null?row.currentFee+' 鍏�': '-'}}</span>
-                          </template>
+                            label="鎵规敼璐圭敤鍚堣">
+                            <template slot-scope="{row}">
+                                <span>{{row.changeMoney}}鍏�</span>
+                            </template>
                         </el-table-column>
                         <el-table-column
                             prop="fee"
@@ -121,9 +116,9 @@
                 </div>
                 <div class="desc_item_cate">
                     <el-tabs v-model="activeName" @tab-click="handleClick">
-                        <el-tab-pane label="鍦ㄤ繚浜哄憳" name="0" ></el-tab-pane>
+                        <el-tab-pane label="淇濆崟浜哄憳" name="0" ></el-tab-pane>
                         <el-tab-pane label="鍔�/鍑忎繚璁板綍"  name="1"></el-tab-pane>
-                        <el-tab-pane label="鏇存崲娲鹃仯鍗曚綅璁板綍" name="2"></el-tab-pane>
+                        <el-tab-pane :label="model.hasDispatchUnit !== 1 ? '鏇存崲娲鹃仯鍗曚綅' : '鏇存崲宸ョ璁板綍'" name="2"></el-tab-pane>
                     </el-tabs>
                 </div>
                 <div class="desc_item_search">
@@ -134,9 +129,10 @@
                                     <el-option label="鍏ㄩ儴" value="0"></el-option>
                                     <el-option label="淇濋殰涓�" value="1"></el-option>
                                     <el-option label="涓嶅湪淇�" value="2"></el-option>
+                                    <el-option label="寰呯敓鏁�" value="3"></el-option>
                                 </el-select>
                             </el-form-item>
-                            <el-form-item label="娲鹃仯鍗曚綅" prop="duId">
+                            <el-form-item label="娲鹃仯鍗曚綅" prop="duId" v-if="model.hasDispatchUnit !== 1">
                                 <el-select v-model="formInline.duId" placeholder="璇烽�夋嫨" @change="search">
                                     <el-option
                                         v-for="item in dwList"
@@ -216,6 +212,7 @@
                             <el-button @click="resetting" style="width: 80px;">閲嶇疆</el-button>
                             <el-button type="primary" style="width: 80px;" @click="exportExcel" v-if="activeName === '0'">瀵煎嚭鍚嶅崟</el-button>
                             <el-button type="primary" style="width: 100px;" @click="$refs.OperaApplyChangeMonthWindow.open('鍔犲噺淇濊垂鐢ㄦ湀搴︾粺璁�',model)" v-if="activeName === '1'">璐圭敤缁熻鏌ヨ</el-button>
+                            <el-button type="primary" style="width: 120px;" @click="exportRecords" v-if="activeName === '1' && [5,27].includes(model.status)">瀵煎嚭鍔犲噺淇濊褰�</el-button>
                         </el-form-item>
                     </el-form>
                 </div>
@@ -248,12 +245,23 @@
                             </template>
                         </el-table-column>
                         <el-table-column
+                            align="center"
+                            :key="Math.random()"
+                            label="鍦ㄤ繚鐘舵��">
+                            <template slot-scope="{row}">
+                                <span v-if="row.applyStatus === 0" style="color: #00BA92;">淇濋殰涓�</span>
+                                <span v-if="row.applyStatus === 1" style="color: #999;">涓嶅湪淇�</span>
+                                <span v-if="row.applyStatus === 2" style="color: #f95601;">寰呯敓鏁�</span>
+                            </template>
+                        </el-table-column>
+                        <el-table-column
                             :key="Math.random()"
                             prop="idcardNo"
                             align="center"
                             label="韬唤璇佸彿">
                         </el-table-column>
                         <el-table-column
+                            v-if="model.hasDispatchUnit !== 1"
                             :key="Math.random()"
                             prop="duName"
                             align="center"
@@ -410,7 +418,7 @@
                             :key="Math.random()"
                             prop="changeNum"
                             align="center"
-                            label="鏇存崲娲鹃仯鍗曚綅浜烘暟">
+                            :label="model.hasDispatchUnit !== 1 ? '鏇存崲娲鹃仯鍗曚綅浜烘暟' : '鏇存崲宸ョ浜烘暟'">
                         </el-table-column>
                         <el-table-column
                             :key="Math.random()"
@@ -544,7 +552,7 @@
   getMemberListOnlineSignLink, getSignTBQRSLink, getSignWTBTBDLink
 } from '@/api/business/insuranceApply'
 import { findListByDTO } from '@/api/business/dispatchUnit'
-import { fetchList } from '@/api/business/applyChange'
+import { fetchList, exportApplyJiajianBaoExcel } from '@/api/business/applyChange'
 import { findListByDTO as worktypeFindListByDTO } from '@/api/business/worktype'
 import { mapState } from 'vuex'
 import {sendSms} from '@/api/business/smsEmail';
@@ -657,6 +665,15 @@
       this.getDW()
       this.getGZ()
     },
+    exportRecords() {
+      exportApplyJiajianBaoExcel({ id: this.dataId })
+        .then(response => {
+          this.download(response)
+        })
+    },
+    viewConfirmationLetter() {
+      this.$refs.OperaPdfViewerWindow.open('鏌ョ湅鏂规纭涔�', this.model.fanganFile.fileurlFull)
+    },
     getSignLink (flag) {
       if (flag === 0) {
         this.signTitle = '绛剧讲鏂规纭涔�'
@@ -688,6 +705,8 @@
             // }, 500)
           }).catch(err => {
             this.$tip.apiFailed(err)
+          }).finally(() => {
+            this.loading = false
           })
         } else if (this.form.type === 1) {
           getMemberListOnlineSignLink(this.form).then(res => {
@@ -698,6 +717,8 @@
             // }, 500)
           }).catch(err => {
             this.$tip.apiFailed(err)
+          }).finally(() => {
+            this.loading = false
           })
         } else if (this.form.type === 2) {
           getSignWTBTBDLink(this.form).then(res => {
@@ -708,6 +729,8 @@
             // }, 500)
           }).catch(err => {
             this.$tip.apiFailed(err)
+          }).finally(() => {
+            this.loading = false
           })
         }
       // })
diff --git a/company/src/components/business/allocateEnterprises.vue b/company/src/components/business/allocateEnterprises.vue
new file mode 100644
index 0000000..9488e2c
--- /dev/null
+++ b/company/src/components/business/allocateEnterprises.vue
@@ -0,0 +1,113 @@
+<template>
+    <GlobalWindow
+        class="menu-config-dialog"
+        :visible.sync="visible"
+        :confirm-working="isWorking"
+        width="800px"
+        title="鍒嗛厤鏈嶅姟浼佷笟"
+        @confirm="confirm"
+    >
+        <p class="tip">涓虹敤鎴� <em>{{form.name || ''}}</em> 鍒嗛厤浼佷笟</p>
+        <el-transfer
+            :titles="['鏈垎閰嶄紒涓�', '宸插垎閰嶄紒涓�']"
+            v-model="form.companyIds"
+            :data="enterprise" />
+    </GlobalWindow>
+</template>
+
+<script>
+  import GlobalWindow from '@/components/common/GlobalWindow'
+  import { allForFp } from '@/api/business/company'
+  import { auth, getById } from '@/api/business/customerService'
+  import { mapState } from 'vuex'
+  export default {
+    name: 'allocateEnterprises',
+    components: { GlobalWindow },
+    computed: {
+      ...mapState(['userInfo'])
+    },
+    data () {
+      return {
+        visible: false,
+        isWorking: false,
+        form: {
+          id: null,
+          name: '',
+          companyIds: []
+        },
+        enterprise: []
+      }
+    },
+    methods: {
+      open (title, id) {
+        this.title = title
+        this.visible = true
+        this.getCompany()
+        for (const key in this.form) {
+          this.form[key] = ''
+        }
+        getById(id)
+          .then(res => {
+            this.form.id = res.id
+            this.form.name = res.name
+            this.form.companyIds = res.customerCompanyList.map(item => item.companyId)
+          })
+      },
+      getCompany() {
+        allForFp({ type: this.userInfo.type })
+          .then(res => {
+            this.enterprise = res.map(item => {
+              return {
+                key: item.id,
+                label: item.name
+              }
+            })
+          })
+      },
+      confirm() {
+        let obj = {
+          id: this.form.id,
+          customerCompanyList: []
+        }
+        if (this.form.companyIds.length > 0) {
+          obj.customerCompanyList = this.form.companyIds.map(item => {
+            return {
+              companyId: item
+            }
+          })
+        }
+        this.isWorking = true
+        auth(obj)
+          .then(() => {
+            this.visible = false
+            this.$tip.apiSuccess('鎿嶄綔鎴愬姛')
+            this.$emit('success')
+          })
+          .catch(e => {
+            this.$tip.apiFailed(e)
+          })
+          .finally(() => {
+            this.isWorking = false
+          })
+      }
+    }
+  }
+</script>
+<style>
+    .el-transfer-panel {
+        width: 300px !important;
+    }
+</style>
+<style scoped lang="scss">
+    @import "@/assets/style/variables.scss";
+    .global-window {
+        .tip {
+            margin-bottom: 12px;
+            em {
+                font-style: normal;
+                color: $primary-color;
+                font-weight: bold;
+            }
+        }
+    }
+</style>
diff --git a/company/src/components/business/authorizedEnterprise.vue b/company/src/components/business/authorizedEnterprise.vue
new file mode 100644
index 0000000..3817fde
--- /dev/null
+++ b/company/src/components/business/authorizedEnterprise.vue
@@ -0,0 +1,127 @@
+<template>
+    <GlobalWindow
+        :title="title"
+        width="100%"
+        :withFooter="false"
+        :visible.sync="visible"
+        :confirm-working="isWorking"
+        @confirm="confirm"
+    >
+        <el-table
+            :data="tableData"
+            border
+            style="width: 100%">
+            <el-table-column
+                prop="username"
+                label="璐﹀彿">
+            </el-table-column>
+            <el-table-column
+                prop="realname"
+                label="濮撳悕">
+            </el-table-column>
+            <el-table-column
+                prop="mobile"
+                label="鑱旂郴鏂瑰紡">
+            </el-table-column>
+            <el-table-column
+                width="200"
+                prop="companyName"
+                label="鎺堟潈浼佷笟鍚嶇О">
+            </el-table-column>
+            <el-table-column
+                prop="auditName"
+                label="鎺堟潈浜�">
+            </el-table-column>
+            <el-table-column
+                width="170"
+                prop="createDate"
+                label="鎺堟潈鏃堕棿">
+            </el-table-column>
+            <el-table-column
+                label="鎿嶄綔">
+                <template slot-scope="{row}">
+                    <el-button type="text" @click="cancel(row.id)">鍙栨秷鎺堟潈</el-button>
+                </template>
+            </el-table-column>
+        </el-table>
+        <div style="width: 100%; height: 15px;"></div>
+        <el-pagination
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+            :current-page="form.page"
+            :page-sizes="[10, 30, 50, 100]"
+            :page-size="form.size"
+            layout="total, sizes, prev, pager, next, jumper"
+            :total="total">
+        </el-pagination>
+    </GlobalWindow>
+</template>
+
+<script>
+  import BaseOpera from '@/components/base/BaseOpera'
+  import GlobalWindow from '@/components/common/GlobalWindow'
+  import { page, deleteById } from '@/api/business/companyPermission'
+  export default {
+    name: 'authorizedEnterprise',
+    extends: BaseOpera,
+    components: { GlobalWindow },
+    data () {
+      return {
+        model: {},
+        tableData: [],
+        form: {
+          page: 1,
+          capacity: 10,
+          model: {
+            userId: null
+          }
+        },
+        total: 0
+      }
+    },
+    methods: {
+      cancel(id) {
+        this.$confirm('纭畾鍙栨秷鎺堟潈璇ヤ紒涓氬悧?', '鎻愮ず', {
+          confirmButtonText: '纭畾',
+          cancelButtonText: '鍙栨秷',
+          type: 'warning'
+        }).then(() => {
+          deleteById(id)
+            .then(res => {
+              this.getList()
+            })
+        }).catch(() => {
+
+        });
+      },
+      handleSizeChange(e) {
+        this.form.capacity = e
+        this.getList()
+      },
+      handleCurrentChange(e) {
+        this.form.page = e
+        this.getList()
+      },
+      open (title, id) {
+        this.title = title
+        this.visible = true
+        this.form.page = 1
+        this.form.capacity = 10
+        this.form.model.userId = id
+        this.getList()
+      },
+      getList() {
+        page(this.form)
+          .then(res => {
+            console.log(res)
+            this.total = res.total
+            this.tableData = res.records
+          })
+      }
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+
+</style>
diff --git a/company/src/components/business/detailsEntrustedInsurance.vue b/company/src/components/business/detailsEntrustedInsurance.vue
index 6b07c9c..cae5e24 100644
--- a/company/src/components/business/detailsEntrustedInsurance.vue
+++ b/company/src/components/business/detailsEntrustedInsurance.vue
@@ -11,23 +11,40 @@
         <div class="desc_item_label">
           <div class="desc_item_label_left">
             <span>鎶曚繚浜猴細{{ model.companyName }}</span>
-            <span>淇濆崟鐘舵�侊細<span  :class="'union-apply-status'+model.status" >{{ model.statusInfo }}</span></span>
+            <span>淇濆崟鐘舵�侊細
+              <span v-if="model.status === 5 && model.statusInfo === '寰呭鏍�'" style="color: #216EEE;">{{ model.statusInfo }}</span>
+              <span v-else-if="model.status === 3 && model.statusInfo === '宸茶繃鏈�'" style="color: #999;">{{ model.statusInfo }}</span>
+              <span v-else-if="model.status === 3 && model.statusInfo === '寰呯敓鏁�'" style="color: #f95601;">{{ model.statusInfo }}</span>
+              <span v-else-if="model.status === 4 && model.statusInfo === '宸查��鍥�'" style="color: red;">{{ model.statusInfo }}</span>
+              <span :class="'union-apply-status'+model.status" v-else>{{ model.statusInfo }}</span>
+            </span>
             <span>鎻愪氦鏃堕棿锛歿{ model.createDate }}</span>
           </div>
           <div class="desc_item_label_right">
             <template v-if="userInfo.type === 2">
-              <el-button type="primary"   @click="$refs.InsuranceDetails.open('瀵煎嚭璇﹀崟',model,0)">瀵煎嚭璇﹀崟</el-button>
+              <el-button type="primary" @click="$refs.InsuranceDetails.open('瀵煎嚭璇﹀崟',model,0)">瀵煎嚭璇﹀崟</el-button>
               <el-button v-if="[0].includes(model.status) " type="primary" @click="$refs.OperaUnionApplyCheckWindow.open('涓婁紶鎶曚繚鍗�',model,2)">涓婁紶鎶曚繚鍗�</el-button>
-              <el-button v-if="model.status == 1" type="primary" :disabled="loading" :loading="loading" @click="getSignLink(0)">绛剧讲鎶曚繚鍗�</el-button>
-              <el-button v-if="[2,3,4].includes(model.status)" type="primary" @click="viewToubaodan">鏌ョ湅鎶曚繚鍗�</el-button>
-              <el-button v-if="[2].includes(model.status) " type="primary" @click="$refs.OperaUnionApplyCheckWindow.open('涓婁紶淇濋櫓鍗�',model,3)">涓婁紶淇濋櫓鍗�</el-button>
+              <el-button v-if="model.status == 1" type="primary" :disabled="loading" :loading="loading" @click="getSignLink(0)">{{model.signType === 1 ? '绛剧讲鐢宠鍗�' : '绛剧讲鎶曚繚鍗�'}}</el-button>
+              <el-button v-if="[2,3,4].includes(model.status)" type="primary" @click="viewToubaodan">{{model.signType === 1 ? '鏌ョ湅鐢宠鍗�' : '鏌ョ湅鎶曚繚鍗�'}}</el-button>
+<!--              <el-button v-if="[2].includes(model.status) " type="primary" @click="$refs.OperaUnionApplyCheckWindow.open('涓婁紶淇濋櫓鍗�',model,3)">涓婁紶淇濋櫓鍗�</el-button>-->
               <el-button v-if="model.status == 3" type="primary" @click="viewBaoxiandan">鏌ョ湅淇濋櫓鍗�</el-button>
-              <el-button v-if="[0,1,2].includes(model.status) " type="danger" @click="$refs.OperaUnionApplyCheckWindow.open('閫�鍥炵敵璇�',model,1)">閫�鍥炵敵璇�</el-button>
+
+              <el-button v-if="[2,3,4,1,5].includes(model.status) && (model.toubaodanFile || model.toubaodanSignedFile)" type="primary" @click="viewToubaodan">{{model.signType === 1 ? '鏌ョ湅鐢宠鍗�' : '鏌ョ湅鎶曚繚鍗�'}}</el-button>
+              <el-button v-if="[0,1,2,5].includes(model.status) " type="danger" @click="$refs.OperaUnionApplyCheckWindow.open('閫�鍥炵敵璇�',model,1)">閫�鍥炵敵璇�</el-button>
+              <el-button v-if="[5].includes(model.status)" type="primary" @click="fusheng">鎶曚繚澶嶅</el-button>
+
+<!--              <el-button v-if="[0,1,2].includes(model.status) " type="danger" @click="$refs.OperaUnionApplyCheckWindow.open('閫�鍥炵敵璇�',model,1)">閫�鍥炵敵璇�</el-button>-->
             </template>
             <template v-if="userInfo.type ===0">
+              <el-button v-if="[2,3,4,1,5].includes(model.status) && (model.toubaodanFile || model.toubaodanSignedFile)" type="primary" @click="viewToubaodan">{{model.signType === 1 ? '鏌ョ湅鐢宠鍗�' : '鏌ョ湅鎶曚繚鍗�'}}</el-button>
+              <el-button v-if="[0].includes(model.status) " type="primary" @click="$refs.OperaUnionApplyCheckWindow.open('涓婁紶鎶曚繚鍗�',model,2)">涓婁紶鎶曚繚鍗�</el-button>
+              <el-button v-if="[0, 1].includes(model.status)" type="primary" :disabled="loading" :loading="loading" @click="getSignLink(0)">{{model.signType === 1 ? '绛剧讲鐢宠鍗�' : '绛剧讲鎶曚繚鍗�'}}</el-button>
+              <el-button v-if="[0,1,2,5].includes(model.status) " type="danger" @click="$refs.OperaUnionApplyCheckWindow.open('閫�鍥炵敵璇�',model,1)">閫�鍥炵敵璇�</el-button>
+              <el-button v-if="[2].includes(model.status)" type="primary" @click="$refs.OperaUnionApplyCheckWindow.open('涓婁紶淇濋櫓鍗�',model,3)">涓婁紶淇濋櫓鍗�</el-button>
               <el-button type="primary"   @click="$refs.InsuranceDetails.open('瀵煎嚭璇﹀崟',model,0)">瀵煎嚭璇﹀崟</el-button>
-              <el-button v-if="[2,3,4].includes(model.status)" type="primary" @click="viewToubaodan">鏌ョ湅鎶曚繚鍗�</el-button>
+<!--              <el-button v-if="[2,3,4].includes(model.status)" type="primary" @click="viewToubaodan">鏌ョ湅鎶曚繚鍗�</el-button>-->
               <el-button v-if="[4].includes(model.status)" type="primary" @click="viewBaoxiandan">鏌ョ湅淇濋櫓鍗�</el-button>
+              <el-button v-if="[5].includes(model.status)" type="primary" @click="fusheng">鎶曚繚澶嶅</el-button>
             </template>
           </div>
         </div>
@@ -98,9 +115,9 @@
         </div>
         <div class="desc_item_cate">
           <el-tabs v-model="activeName" @tab-click="handleClick">
-            <el-tab-pane label="鍦ㄤ繚浜哄憳" name="0" ></el-tab-pane>
+            <el-tab-pane label="淇濆崟浜哄憳" name="0" ></el-tab-pane>
             <el-tab-pane label="鍔�/鍑忎繚璁板綍"  name="1"></el-tab-pane>
-            <el-tab-pane label="鏇存崲娲鹃仯鍗曚綅璁板綍" name="2"></el-tab-pane>
+            <el-tab-pane label="鏇存崲宸ョ璁板綍" name="2"></el-tab-pane>
           </el-tabs>
         </div>
         <div class="desc_item_search">
@@ -111,6 +128,7 @@
                   <el-option label="鍏ㄩ儴" value="0"></el-option>
                   <el-option label="淇濋殰涓�" value="1"></el-option>
                   <el-option label="涓嶅湪淇�" value="2"></el-option>
+                  <el-option label="寰呯敓鏁�" value="3"></el-option>
                 </el-select>
               </el-form-item>
               <el-form-item label="鍛樺伐濮撳悕" prop="memberName">
@@ -178,6 +196,16 @@
               </template>
             </el-table-column>
             <el-table-column
+              align="center"
+              :key="Math.random()"
+              label="鍦ㄤ繚鐘舵��">
+              <template slot-scope="{row}">
+                <span v-if="row.applyStatus === 0" style="color: #00BA92;">淇濋殰涓�</span>
+                <span v-if="row.applyStatus === 1" style="color: #999;">涓嶅湪淇�</span>
+                <span v-if="row.applyStatus === 2" style="color: #00BA92;">寰呯敓鏁�</span>
+              </template>
+            </el-table-column>
+            <el-table-column
                 :key="Math.random()"
                 prop="idcardNo"
                 align="center"
@@ -190,6 +218,7 @@
                 label="琚繚闄╀汉">
             </el-table-column>
             <el-table-column
+                v-if="model.hasDispatchUnit !== 1"
                 :key="Math.random()"
                 prop="duName"
                 align="center"
@@ -322,7 +351,7 @@
                 :key="Math.random()"
                 prop="changeNum"
                 align="center"
-                label="鏇存崲娲鹃仯鍗曚綅浜烘暟">
+                label="鏇存崲宸ョ浜烘暟">
             </el-table-column>
             <el-table-column
                 :key="Math.random()"
@@ -450,7 +479,7 @@
 import OperaApplyChangeUnitDetailWindow from '@/components/business/OperaApplyChangeUnitDetailWindow'
 
 import OperaUnionApplyCheckWindow from '@/components/business/OperaUnionApplyCheckWindow'
-import { getById, getSignLink } from '@/api/business/unionApply'
+import { getById, getSignLink, reexamineCheck } from '@/api/business/unionApply'
 
 import {
   applyDetailPage,
@@ -560,6 +589,20 @@
       this.getList()
       this.getDW()
       this.getGZ()
+    },
+    fusheng() {
+      this.$confirm('鏄惁纭畾澶嶅閫氳繃?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        reexamineCheck({ id: this.dataId })
+          .then(res => {
+            this.getDetail()
+          })
+      }).catch(() => {
+
+      });
     },
     getSignLink (flag) {
       if (flag === 0) {
@@ -814,10 +857,11 @@
       }, 500)
     },
     viewToubaodan () {
-      this.fileData = this.taobaodanFileData;
-      this.visibleFile=true
-      this.fileTitle='鏌ョ湅鎶曚繚鍗�'
-      this.fileFlag = 0
+      if (this.model.toubaodanSignedFile) {
+        this.$refs.OperaPdfViewerWindow.open(this.model.toubaodanSignedFile.name, this.model.toubaodanSignedFile.fileurlFull)
+      } else if (this.model.toubaodanFile) {
+        this.$refs.OperaPdfViewerWindow.open(this.model.toubaodanFile.name, this.model.toubaodanFile.fileurlFull)
+      }
     },
     viewBaoxiandan () {
       this.fileFlag = 1
diff --git a/company/src/components/business/modification.vue b/company/src/components/business/modification.vue
index 53e9d17..7d186a0 100644
--- a/company/src/components/business/modification.vue
+++ b/company/src/components/business/modification.vue
@@ -10,6 +10,7 @@
         <el-table v-if="form.solutionList && form.solutionList.length>0"
             :data="form.solutionList"
             border
+            border
             style="width: 100%">
             <el-table-column
                 label="搴忓彿"
@@ -23,8 +24,7 @@
                 align="center"
                 label="淇濋櫓鏂规">
                 <template slot-scope="scope">
-<!--                    :value="{ id:item.id, baseId: item.baseId }"-->
-                    <el-select v-model="scope.row.solution.id" @change="changeSolution($event, scope.$index)" placeholder="璇烽�夋嫨">
+                    <el-select v-model="scope.row.solution.id" :disabled="scope.row.disabled" filterable @change="changeSolution($event, scope.$index)" placeholder="璇烽�夋嫨">
                         <el-option
                             v-for="item in programme"
                             :key="item.id"
@@ -38,7 +38,7 @@
               align="center"
               label="濮旀墭鍟嗘埛">
             <template slot-scope="scope">
-              <el-select :ref="'shopSelect'+scope.$index" :disabled="scope.row.solution.type ==1" v-model="scope.row.shopId" clearable value-key="id" placeholder="璇烽�夋嫨">
+              <el-select :ref="'shopSelect'+scope.$index" disabled v-model="scope.row.shopId" clearable value-key="id" placeholder="璇烽�夋嫨">
                 <el-option
                     v-for="item in shops"
                     :key="item.id"
@@ -54,6 +54,14 @@
                 <template slot-scope="{row}">
                     <el-checkbox :true-label="1" :false-label="0" disabled  v-model="row.canAdd">鍔犱繚</el-checkbox>
                     <el-checkbox :true-label="1" :false-label="0"  disabled   v-model="row.canReduce">鍑忎繚</el-checkbox>
+                </template>
+            </el-table-column>
+            <el-table-column
+                align="center"
+                label="绛剧讲鐘舵��">
+                <template slot-scope="{row}">
+                    <template v-if="row.signStatus === 0">寰呯绔�</template>
+                    <template v-else-if="row.signStatus === 1">宸茬绔�</template>
                 </template>
             </el-table-column>
             <el-table-column
@@ -116,9 +124,10 @@
         if (item.id === e) {
           baseId = item.baseId
           this.form.solutionList[index].solution.type = item.type
-          if(item.type == 1){
+          // console.log(item.type)
+          // if(item.type == 1){
             this.form.solutionList[index].shopId =item.shopId
-          }
+          // }
         }
       })
 
@@ -163,18 +172,20 @@
         .then(resa => {
           resa.forEach(item => {
             this.form.solutionList.push({
+              disabled: true,
               solution: { id: item.solutionId, baseId: item.solutionBaseId,type:item.solutionType },
               shopId: item.shopId,
               canAdd: 1,
-              canReduce: 1
+              canReduce: 1,
+              signStatus: item.signStatus
             })
           })
-          console.log(this.form.solutionList)
           that.visible = true
         })
     },
     add () {
       this.form.solutionList.push({
+        disabled: false,
         solution: { id: null, baseId: null },
         shopId: null,
         canAdd: 1,
diff --git a/company/src/components/business/operaCompanyUserApplyDescWindow.vue b/company/src/components/business/operaCompanyUserApplyDescWindow.vue
new file mode 100644
index 0000000..9c7a58e
--- /dev/null
+++ b/company/src/components/business/operaCompanyUserApplyDescWindow.vue
@@ -0,0 +1,168 @@
+<template>
+    <GlobalWindow
+        :title="title"
+        width="100%"
+        :withFooter="false"
+        :visible.sync="visible"
+    >
+        <div class="info">
+            <div class="info_label">
+                <span>鐢宠璁板綍璇︽儏</span>
+            </div>
+            <div class="info_list">
+                <div class="info_list_item">
+                    <div class="info_list_item_label">鐢宠浜猴細</div>
+                    <div class="info_list_item_val">{{form.realName}}</div>
+                </div>
+                <div class="info_list_item">
+                    <div class="info_list_item_label">鐢宠鏃堕棿锛�</div>
+                    <div class="info_list_item_val">{{form.createDate}}</div>
+                </div>
+                <div class="info_list_item" style="width: 100%;">
+                    <div class="info_list_item_label">鎺堟潈璐﹀彿锛�</div>
+                    <div class="info_list_item_val">{{form.userName}}</div>
+                </div>
+                <div class="info_list_item" style="width: 100%;">
+                    <div class="info_list_item_label">鎺堟潈绠$悊浼佷笟锛�</div>
+                    <div class="info_list_item_val">{{form.companyNames}}</div>
+                </div>
+                <div class="info_list_item" style="width: 100%;">
+                    <div class="info_list_item_label">鐢宠璇存槑锛�</div>
+                    <div class="info_list_item_val">{{form.content}}</div>
+                </div>
+                <div class="info_list_item" style="width: 100%;">
+                    <div class="info_list_item_label">鐢宠闄勪欢锛�</div>
+                    <div class="info_list_item_val">
+                        <div class="info_list_item_val_cul">
+                            <u v-for="(item, index) in form.multifileList" :key="index" @click="openFile(item.name, item.fileurlFull)">{{item.name}}</u>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <div class="info">
+            <div class="info_label">
+                <span>瀹℃壒鎯呭喌</span>
+            </div>
+            <div class="info_list">
+                <div class="info_list_item">
+                    <div class="info_list_item_label">瀹℃壒缁撴灉锛�</div>
+                    <div class="info_list_item_val">
+                        <template v-if="form.status === 0">寰呭鏍�</template>
+                        <template v-if="form.status === 1">瀹℃牳閫氳繃</template>
+                        <template v-if="form.status === 2">瀹℃牳涓嶉�氳繃</template>
+                    </div>
+                </div>
+                <div class="info_list_item">
+                    <div class="info_list_item_label">瀹℃牳鏃堕棿锛�</div>
+                    <div class="info_list_item_val">{{form.checkDate}}</div>
+                </div>
+                <div class="info_list_item" style="width: 100%;">
+                    <div class="info_list_item_label">瀹℃牳璇存槑锛�</div>
+                    <div class="info_list_item_val">{{form.checkInfo}}</div>
+                </div>
+            </div>
+        </div>
+        <!-- 棰勮pdf -->
+        <OperaPdfViewerWindow ref="OperaPdfViewerWindow" />
+    </GlobalWindow>
+</template>
+
+<script>
+  import BaseOpera from '@/components/base/BaseOpera'
+  import GlobalWindow from '@/components/common/GlobalWindow'
+  import { getById } from '@/api/business/companyUserApply'
+  import { mapState } from 'vuex'
+  import OperaPdfViewerWindow from '@/components/business/OperaPdfViewerWindow'
+  export default {
+    name: 'operaCompanyUserApplyDescWindow',
+    extends: BaseOpera,
+    components: { GlobalWindow, OperaPdfViewerWindow },
+    data () {
+      return {
+        form: {}
+      }
+    },
+    computed: {
+      ...mapState(['userInfo'])
+    },
+    methods: {
+      open (title, id) {
+        this.title = title
+        getById(id)
+          .then(res => {
+            console.log(res)
+            this.form = res
+            this.visible = true
+          })
+      },
+      openFile(name, url) {
+        this.$refs.OperaPdfViewerWindow.open(name, url)
+      }
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+    .info {
+        width: 100%;
+        .info_label {
+            width: 100%;
+            display: flex;
+            align-items: center;
+            justify-content: space-between;
+            margin-bottom: 20px;
+            span {
+                font-size: 18px;
+                font-weight: 600;
+                color: #000000;
+            }
+        }
+        .info_list {
+            width: 100%;
+            display: flex;
+            align-items: center;
+            flex-wrap: wrap;
+            .info_list_item {
+                width: 50%;
+                display: flex;
+                align-items: start;
+                margin-bottom: 20px;
+                .info_list_item_label {
+                    font-size: 15px;
+                    flex-shrink: 0;
+                }
+                .info_list_item_val {
+                    flex: 1;
+                    display: flex;
+                    align-items: center;
+                    font-size: 15px;
+                    .info_list_item_val_cul {
+                        display: flex;
+                        flex-direction: column;
+                        u {
+                            font-size: 15px;
+                            color: #2E68EC;
+                            cursor: pointer;
+                            margin-top: 5px;
+                            &:first-child {
+                                margin: 0;
+                            }
+                        }
+                    }
+                    .image {
+                        width: 100px;
+                        height: 100px;
+                        display: flex;
+                        align-items: center;
+                        justify-content: center;
+                        overflow: hidden;
+                        img {
+                            width: 100%;
+                        }
+                    }
+                }
+            }
+        }
+    }
+</style>
diff --git a/company/src/components/business/selectPolicy.vue b/company/src/components/business/selectPolicy.vue
new file mode 100644
index 0000000..8d187e7
--- /dev/null
+++ b/company/src/components/business/selectPolicy.vue
@@ -0,0 +1,172 @@
+<template>
+    <GlobalWindow
+        :title="title"
+        width="100%"
+        :withFooter="false"
+        :visible.sync="visible"
+        :confirm-working="isWorking"
+        @confirm="confirm"
+    >
+<!--        <el-form ref="form" :model="form" label-width="100px" inline>-->
+<!--            <el-form-item label="浼佷笟鍚嶇О" prop="name">-->
+<!--                <el-input v-model="form.model.name" placeholder="璇疯緭鍏�" @keypress.enter.native="getList"></el-input>-->
+<!--            </el-form-item>-->
+<!--            <el-form-item>-->
+<!--                <div style="display: flex; align-items: center;">-->
+<!--                    <el-button type="primary" @click="getList">鎼滅储</el-button>-->
+<!--                    <el-button @click="reset">閲嶇疆</el-button>-->
+<!--                </div>-->
+<!--            </el-form-item>-->
+<!--        </el-form>-->
+        <el-table
+            :data="tableData"
+            border
+            style="width: 100%">
+            <el-table-column label="搴忓彿" width="80px" align="center" fixed>
+                <template slot-scope="scope">
+                    <span>{{scope.$index + 1}}</span>
+                </template>
+            </el-table-column>
+            <el-table-column prop="statusInfo" align="center" fixed label="鐘舵��">
+                <template slot-scope="{row}">
+                    <span :class="'apply-status'+row.status">{{row.statusInfo}}</span>
+                </template>
+            </el-table-column>
+            <el-table-column prop="solutionsName" align="center" fixed label="淇濋櫓鏂规" min-width="150"></el-table-column>
+            <el-table-column label="绫诲瀷" fixed  align="center">
+                <template slot-scope="{row}">
+                    <span style="color: #00BA92" v-if="row.solutionType == 1">濮旀墭鎶曚繚</span>
+                    <span style="color: #F95601;"  v-else>鐩存帴鎶曚繚</span>
+                </template>
+            </el-table-column>
+            <el-table-column label="淇濆崟鍙�" align="center" fixed>
+                <template slot-scope="{row}">
+                    <span>{{row.code ? row.code : '-'}}</span>
+                </template>
+            </el-table-column>
+            <el-table-column prop="guaranteeNum"  align="center" label="褰撳墠鍦ㄤ繚浜烘暟" width="120">
+                <template slot-scope="{row}">
+                    <span>{{(row.guaranteeNum||0)}} 浜�</span>
+                </template>
+            </el-table-column>
+            <el-table-column label="鎶曚繚鏃堕暱" align="center">
+                <template slot-scope="{row}">
+                    <span>{{(row.serviceDays - row.loseEfficacyDays) < 0 ? `-` : (row.serviceDays - row.loseEfficacyDays+'澶�')}}</span>
+                </template>
+            </el-table-column>
+            <el-table-column prop="fee" label="鎵规敼璐圭敤鍚堣"  align="center" width="120">
+                <template slot-scope="{row}">
+                    <span>{{row.changeMoney+' 鍏�'}}</span>
+                </template>
+            </el-table-column>
+            <el-table-column prop="fee" label="鎬昏垂鐢�"  align="center">
+                <template slot-scope="{row}">
+                    <span>{{row.fee!=null?row.fee+' 鍏�': '-'}}</span>
+                </template>
+            </el-table-column>
+            <el-table-column prop="createDate" label="鎻愪氦鏃ユ湡"  align="center" min-width="150"></el-table-column>
+            <el-table-column prop="startTime" label="鎶曚繚鐢熸晥鏃ユ湡"  align="center" min-width="150"></el-table-column>
+            <el-table-column prop="endTime" label="鎶曚繚澶辨晥鏃ユ湡"  align="center" min-width="150"></el-table-column>
+            <el-table-column
+                fixed="right"
+                width="120"
+                label="鎿嶄綔">
+                <template slot-scope="{row}">
+                    <el-button type="text" @click="$refs.factoryChange.open('鏇存崲娲鹃仯鍗曚綅鐢宠', { id: row.id })" v-if="isShow(row.status, row.endTime) && type === 2">{{ row.hasDispatchUnit === 1 ? '鏇存崲宸ョ' : '鏇存崲娲鹃仯鍗曚綅' }}</el-button>
+                    <el-button type="text" @click="$refs.additionSubtractionApplication.open('鍔犲噺淇濈敵璇�', { id: row.id })" v-else-if="isShow(row.status, row.endTime) && type === 1">鍔犲噺淇濈敵璇�</el-button>
+                </template>
+            </el-table-column>
+        </el-table>
+        <div style="width: 100%; height: 15px;"></div>
+        <el-pagination
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+            :current-page="form.page"
+            :page-sizes="[10, 30, 50, 100]"
+            :page-size="form.size"
+            layout="total, sizes, prev, pager, next, jumper"
+            :total="total">
+        </el-pagination>
+        <!--    鍔犲噺淇濈敵璇�    -->
+        <additionSubtractionApplication ref="additionSubtractionApplication" @success="selectItem" />
+        <!--    鏇存崲娲鹃仯鍗曚綅鐢宠    -->
+        <factoryChange ref="factoryChange" @success="selectItem" />
+    </GlobalWindow>
+</template>
+
+<script>
+  import BaseOpera from '@/components/base/BaseOpera'
+  import GlobalWindow from '@/components/common/GlobalWindow'
+  import additionSubtractionApplication from '@/components/enterprise/additionSubtractionApplication'
+  import factoryChange from '@/components/enterprise/factoryChange'
+  import { fetchList } from '@/api/business/insuranceApply'
+  export default {
+    name: 'selectPolicy',
+    extends: BaseOpera,
+    components: { GlobalWindow, additionSubtractionApplication, factoryChange },
+    data () {
+      return {
+        model: {},
+        tableData: [],
+        type: null,
+        form: {
+          page: 1,
+          capacity: 10,
+          model: {
+            companyId: '',
+            status: '5,27',
+            timeOut: 3
+          }
+        },
+        total: 0
+      }
+    },
+    methods: {
+      // 鍒ゆ柇鏄惁鏄剧ず鍔犲噺淇�
+      isShow(status, endTime) {
+        const currentDate = new Date();
+        const specifiedDate = new Date(endTime);
+        return [5,27].includes(status) && (currentDate < specifiedDate);
+      },
+      selectItem() {
+        this.$emit('success')
+        this.visible = false
+      },
+      handleSizeChange(e) {
+        this.form.capacity = e
+        this.getList()
+      },
+      handleCurrentChange(e) {
+        this.form.page = e
+        this.getList()
+      },
+      open (title, id, type) {
+        this.title = title
+        this.type = type
+        this.form.model.companyId = id
+        this.form.name = ''
+        this.visible = true
+        this.form.page = 1
+        this.form.capacity = 10
+        this.getList()
+      },
+      reset() {
+        this.form.page = 1
+        this.form.capacity = 10
+        this.form.model.name = ''
+        this.getList()
+      },
+      getList() {
+        fetchList(this.form)
+          .then(res => {
+            this.total = res.total
+            this.tableData = res.records
+          })
+      }
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+
+</style>
diff --git a/company/src/components/common/CommonHeader.vue b/company/src/components/common/CommonHeader.vue
index a5705fc..606771e 100644
--- a/company/src/components/common/CommonHeader.vue
+++ b/company/src/components/common/CommonHeader.vue
@@ -6,16 +6,40 @@
         <!-- <div class="title-en">Diagnosis of Intelligent Manufacturing Integrated Service Platfrom</div> -->
       </div>
       <div class="user">
-        <el-dropdown v-if="isLogined" trigger="click">
+        <!--    浼佷笟    -->
+        <div style="display: flex; align-items: center;" v-if="userInfo.type === 1">
+          <div class="user_kf" v-if="info">
+            鏈嶅姟浜哄憳锛歿{info.name}} {{info.mobile}}
+          </div>
+          <el-dropdown v-if="isLogined" trigger="click">
           <span class="el-dropdown-link">
-            <!-- <img v-if="userInfo != null" :src="userInfo.avatar == null ? `${require('@/assets/avatar/man.png')}` : userInfo.avatar" alt="">{{userInfo | displayName}}<i class="el-icon-arrow-down el-icon--right"></i> -->
-            <img v-if="userInfo != null" style="width: 30px !important;" src="@/assets/avatar/man.png" alt="">{{userInfo | displayName}}<i class="el-icon-arrow-down el-icon--right"></i>
+            <img v-if="userInfo != null" class="img1" style="width: 20px !important;" src="@/assets/icons/ic_company@2x.png" alt="">{{userInfo.showCompany.name}}<i class="el-icon-arrow-down el-icon--right"></i>
           </span>
-          <el-dropdown-menu slot="dropdown">
-            <el-dropdown-item @click.native="changePwd">淇敼瀵嗙爜</el-dropdown-item>
-            <el-dropdown-item @click.native="logout">閫�鍑虹櫥褰�</el-dropdown-item>
-          </el-dropdown-menu>
-        </el-dropdown>
+            <el-dropdown-menu slot="dropdown">
+              <el-dropdown-item @click.native="changeCompany(item)" v-for="(item, index) in userInfo.companyPermissionList" :key="index">{{item.companyName}}</el-dropdown-item>
+            </el-dropdown-menu>
+          </el-dropdown>
+          <el-dropdown v-if="isLogined" trigger="click" style="top: -7px;">
+          <span class="el-dropdown-link">
+            <img v-if="userInfo != null" class="img2" style="width: 30px !important;" src="@/assets/avatar/man.png" alt="">{{userInfo.realname}}<i class="el-icon-arrow-down el-icon--right"></i>
+          </span>
+            <el-dropdown-menu slot="dropdown">
+              <el-dropdown-item @click.native="changePwd">淇敼瀵嗙爜</el-dropdown-item>
+              <el-dropdown-item @click.native="logout">閫�鍑虹櫥褰�</el-dropdown-item>
+            </el-dropdown-menu>
+          </el-dropdown>
+        </div>
+        <div v-else>
+          <el-dropdown v-if="isLogined" trigger="click" style="top: -7px;">
+          <span class="el-dropdown-link">
+            <img v-if="userInfo != null" class="img2" style="width: 30px !important;" src="@/assets/avatar/man.png" alt="">{{userInfo | displayName}}<i class="el-icon-arrow-down el-icon--right"></i>
+          </span>
+            <el-dropdown-menu slot="dropdown">
+              <el-dropdown-item @click.native="changePwd">淇敼瀵嗙爜</el-dropdown-item>
+              <el-dropdown-item @click.native="logout">閫�鍑虹櫥褰�</el-dropdown-item>
+            </el-dropdown-menu>
+          </el-dropdown>
+        </div>
       </div>
     </div>
     <!-- 淇敼瀵嗙爜 -->
@@ -43,7 +67,8 @@
 <script>
 import { mapState, mapMutations } from 'vuex'
 import GlobalAlertWindow from './GlobalAlertWindow'
-import { logout, updatePwd } from '@/api/system/common'
+import { logout, updatePwd, switchCompany } from '@/api/system/common'
+import { findByCompanyId } from '@/api/business/customerService'
 export default {
   name: 'CommonHeader',
   components: { GlobalAlertWindow },
@@ -65,6 +90,7 @@
         changePwd: false
       },
       username: 'bob', // 鐢ㄦ埛鍚�
+      info: null,
       // 淇敼瀵嗙爜寮规
       changePwdData: {
         form: {
@@ -88,6 +114,9 @@
   },
   created () {
     document.title=this.systemTitle
+    if (this.userInfo.companyId) {
+      this.setFindByCompanyId(this.userInfo.companyId)
+    }
   },
   computed: {
     ...mapState(['menuData', 'userInfo']),
@@ -114,6 +143,24 @@
   },
   methods: {
     ...mapMutations(['setUserInfo', 'switchCollapseMenu']),
+    // 鍒囨崲浼佷笟
+    changeCompany(row) {
+      if (row.companyId === this.userInfo.companyId) {
+        this.$message.warning('涓嶈兘鍒囨崲褰撳墠浼佷笟')
+        return
+      }
+      switchCompany({ companyId: row.companyId })
+        .then(res => {
+          location.reload();
+        })
+    },
+    setFindByCompanyId(companyId) {
+      if (this.userInfo.type !== 1) return
+      findByCompanyId(companyId)
+        .then(res => {
+          this.info = res
+        })
+    },
     // 淇敼瀵嗙爜
     changePwd () {
       this.visible.changePwd = true
@@ -167,7 +214,11 @@
   }
 }
 </script>
-
+<style>
+  .el-dropdown-menu {
+    width: 240px !important;
+  }
+</style>
 <style scoped lang="scss">
 @import "@/assets/style/variables.scss";
 .common-header {
@@ -205,13 +256,31 @@
     padding-right: 25px;
     background: url('../../assets/images/top_ic_bolang@2x.png') no-repeat;
     flex-shrink: 0;
-    text-align: right;
-    .el-dropdown {
-      top: 10px;
-      color: #fff;
+    /*text-align: right;*/
+    display: flex;
+    align-items: center;
+    justify-content: end;
+    .user_kf {
+      color: #ffffff;
+      font-size: 14px;
+      margin-right: 30px;
     }
-    img {
-      width: 32px;
+    .el-dropdown {
+      top: -2px;
+      color: #fff;
+      margin-right: 30px;
+      &:last-child {
+        margin: 0 !important;
+      }
+    }
+    .img1 {
+      width: 20px;
+      position: relative;
+      top: 5px;
+      margin-right: 10px;
+    }
+    .img2 {
+      width: 20px;
       position: relative;
       top: 10px;
       margin-right: 10px;
diff --git a/company/src/components/common/UploadAvatarImage.vue b/company/src/components/common/UploadAvatarImage.vue
index 7d5ddae..8319d4d 100644
--- a/company/src/components/common/UploadAvatarImage.vue
+++ b/company/src/components/common/UploadAvatarImage.vue
@@ -10,7 +10,7 @@
       :on-success="handleAvatarSuccess"
       :on-error="uploadError"
       :before-upload="beforeAvatarUpload">
-      <img v-if=" file.imgurlfull" style="width: 100%;" :src="file.imgurlfull" :style="customStyle" class="avatar">
+      <img v-if="file.imgurlfull" style="width: 100%;" :src="file.imgurlfull" :style="customStyle" class="avatar">
       <div v-else :style="customStyle">
         <i class="el-icon-plus avatar-uploader-icon"></i>
         <div class="tips-style">{{ tipsLabel }}</div>
diff --git a/company/src/components/common/UploadFile.vue b/company/src/components/common/UploadFile.vue
index 8624fa0..4bb6bfb 100644
--- a/company/src/components/common/UploadFile.vue
+++ b/company/src/components/common/UploadFile.vue
@@ -5,7 +5,7 @@
       class="upload-demo"
       :accept="uploadData.fileType"
       :action="uploadImgUrl"
-      :limit="1"
+      :limit="limit"
       :before-remove="removes"
       :on-exceed="handleExceed"
       :on-success="handleFileSuccess"
@@ -42,7 +42,11 @@
       type: String,
       default: 'width: 190px; height: 190px;'
     },
-    uploadData: Object
+    uploadData: Object,
+    limit: {
+      type: Number,
+      default: () => 1
+    }
   },
   data() {
     return {
@@ -70,9 +74,10 @@
     }
   },
   methods: {
-    removes() {
+    removes(e) {
       this.uploaded=false
-      this.$emit('remove')
+      console.log(e.imgaddr)
+      this.$emit('remove', e.imgaddr)
     },
     // 涓婁紶鍥剧墖
     handleExceed(){
diff --git a/company/src/components/common/chooseCompany.vue b/company/src/components/common/chooseCompany.vue
new file mode 100644
index 0000000..34caaf5
--- /dev/null
+++ b/company/src/components/common/chooseCompany.vue
@@ -0,0 +1,144 @@
+<template>
+    <GlobalWindow
+        :title="title"
+        width="100%"
+        :withFooter="false"
+        :visible.sync="visible"
+        :confirm-working="isWorking"
+        @confirm="confirm"
+    >
+        <el-form ref="form" :model="form" label-width="100px" inline>
+            <el-form-item label="浼佷笟鍚嶇О" prop="name">
+                <el-input v-model="form.model.name" placeholder="璇疯緭鍏�" @keypress.enter.native="getList"></el-input>
+            </el-form-item>
+            <el-form-item>
+                <div style="display: flex; align-items: center;">
+                    <el-button type="primary" @click="getList">鎼滅储</el-button>
+                    <el-button @click="reset">閲嶇疆</el-button>
+                </div>
+            </el-form-item>
+        </el-form>
+        <el-table
+            :data="tableData"
+            border
+            style="width: 100%">
+            <el-table-column
+                prop="name"
+                label="浼佷笟鍚嶇О">
+            </el-table-column>
+            <el-table-column
+                width="170"
+                prop="code"
+                label="缁熶竴淇$敤浠g爜">
+            </el-table-column>
+            <el-table-column
+                prop="createDate"
+                label="鍒涘缓鏃堕棿">
+            </el-table-column>
+            <el-table-column
+                prop="phone"
+                label="缁戝畾鎵嬫満">
+            </el-table-column>
+            <el-table-column
+                width="90"
+                label="鍚敤鐘舵��">
+                <template slot-scope="{row}">
+                    <span v-if="row.status === 0">鍚敤</span>
+                    <span v-if="row.status === 1">绂佺敤</span>
+                </template>
+            </el-table-column>
+            <el-table-column
+                label="鐢靛瓙绛捐璇佺姸鎬�">
+                <template slot-scope="{row}">
+                    <template v-if="row.signStatus === 0">寰呰璇�</template>
+                    <template v-if="row.signStatus === 1">璁よ瘉涓�</template>
+                    <template v-if="row.signStatus === 2">璁よ瘉澶辫触</template>
+                    <template v-if="row.signStatus === 3">璁よ瘉閫氳繃</template>
+                </template>
+            </el-table-column>
+            <el-table-column
+                label="鎿嶄綔">
+                <template slot-scope="{row}">
+                    <el-button type="text" @click="selectItem(row)">閫夋嫨</el-button>
+                </template>
+            </el-table-column>
+        </el-table>
+        <div style="width: 100%; height: 15px;"></div>
+        <el-pagination
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+            :current-page="form.page"
+            :page-sizes="[10, 30, 50, 100]"
+            :page-size="form.size"
+            layout="total, sizes, prev, pager, next, jumper"
+            :total="total">
+        </el-pagination>
+    </GlobalWindow>
+</template>
+
+<script>
+  import BaseOpera from '@/components/base/BaseOpera'
+  import GlobalWindow from '@/components/common/GlobalWindow'
+  import { fetchList } from '@/api/business/company'
+  export default {
+    name: 'chooseCompany',
+    extends: BaseOpera,
+    components: { GlobalWindow },
+    data () {
+      return {
+        model: {},
+        tableData: [],
+        form: {
+          page: 1,
+          capacity: 10,
+          model: {
+            type: 0,
+            name: '',
+            status: 0,
+            isdeleted: 1
+          }
+        },
+        total: 0
+      }
+    },
+    methods: {
+      selectItem(row) {
+        this.$emit('submit', { companyId: row.id, companyName: row.name })
+        this.visible = false
+      },
+      handleSizeChange(e) {
+        this.form.capacity = e
+        this.getList()
+      },
+      handleCurrentChange(e) {
+        this.form.page = e
+        this.getList()
+      },
+      open (title, id) {
+        this.title = title
+        this.form.name = ''
+        this.visible = true
+        this.form.page = 1
+        this.form.capacity = 10
+        this.getList()
+      },
+      reset() {
+        this.form.page = 1
+        this.form.capacity = 10
+        this.form.model.name = ''
+        this.getList()
+      },
+      getList() {
+        fetchList(this.form)
+          .then(res => {
+            this.total = res.total
+            this.tableData = res.records
+          })
+      }
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+
+</style>
diff --git a/company/src/components/enterprise/OperaInsuranceApplyAddWindow.vue b/company/src/components/enterprise/OperaInsuranceApplyAddWindow.vue
index 15fb687..2b3f5b0 100644
--- a/company/src/components/enterprise/OperaInsuranceApplyAddWindow.vue
+++ b/company/src/components/enterprise/OperaInsuranceApplyAddWindow.vue
@@ -10,7 +10,7 @@
     <div class="list">
       <el-form :inline="true" ref="form" :model="form" :rules="rules" class="demo-form-inline">
         <el-form-item label="淇濋櫓鏂规" prop="solutionId">
-          <el-select v-model="form.solutionId" @change="changeSolution" placeholder="璇烽�夋嫨">
+          <el-select v-model="form.solutionId" filterable @change="changeSolution" placeholder="璇烽�夋嫨">
             <el-option
                 v-for="item in company"
                 :key="item.id"
@@ -83,7 +83,8 @@
         <div style="display: inline-block;margin-right: 30px;font-size: 14px"><span>鍚堣璐圭敤锛�</span>
         <span style="font-weight: bold;color: red">{{sumFee}}</span>鍏�
         </div>
-        <el-button type="primary" @click="sele">閫夊彇娲鹃仯鍗曚綅</el-button>
+        <el-button type="primary" @click="sele(1)" v-if="item && item.hasDispatchUnit !== 1">閫夊彇娲鹃仯鍗曚綅</el-button>
+        <el-button type="primary" @click="sele(2)" v-if="item && item.hasDispatchUnit === 1">閫夊彇宸ョ</el-button>
       </div>
     </div>
 <!--    show-summary
@@ -124,6 +125,7 @@
         </template>
       </u-table-column>
       <u-table-column
+          v-if="item && item.hasDispatchUnit !== 1"
           prop="duName"
           label="娲鹃仯鍗曚綅">
       </u-table-column>
@@ -183,7 +185,7 @@
 import importEmployees from '@/components/enterprise/importEmployees'
 import confirmJobType from '@/components/enterprise/confirmJobType'
 import detailsPolicyholder from '@/components/business/detailsPolicyholder'
-import { all, getNewVersion } from '@/api/business/solutions'
+import { all, getNewVersion, getUseList } from '@/api/business/solutions'
 import { mapState } from 'vuex'
 import { create, getCountCyclePriceVO, getDetail, findList } from '@/api/business/insuranceApply'
 import { UTable, UTableColumn } from 'umy-ui'
@@ -208,7 +210,8 @@
         ID: null,
         solutionId: '',
         applyStartTime: '',
-        applyEndTime: ''
+        applyEndTime: '',
+        companyId: null
       },
       solutionName: '',
       type: '',
@@ -258,6 +261,7 @@
       this.isWorking = true
       // if (!this.form.id) {
       create({
+        companyId: this.form.companyId,
         applyDetailList: arr,
         applyStartTime: this.form.applyStartTime,
         applyEndTime: this.form.applyEndTime,
@@ -305,6 +309,10 @@
       this.form.solutionId = ''
       this.form.applyStartTime = ''
       this.form.applyEndTime = ''
+      if (target.companyId) {
+        this.form.companyId = target.companyId
+        this.form.companyName = target.companyName
+      }
       if (target && target.id) {
         this.$nextTick(() => {
           this.$refs.form.resetFields()
@@ -397,31 +405,90 @@
             this.$message.warning('鑷冲皯娣诲姞涓�椤瑰憳宸�')
             return
           }
-          for (let i = 0; i < this.tableData.length; i++) {
-            console.log(this.tableData[i].worktypeId)
-            console.log(this.tableData[i].duId)
-            if (!this.tableData[i].worktypeId || !this.tableData[i].duId) {
-              this.$message.warning('璇峰畬鍠勬淳閬e崟浣嶅拰宸ョ淇℃伅')
-              return
+          if (this.item.hasDispatchUnit !== 1) {
+            for (let i = 0; i < this.tableData.length; i++) {
+              if (!this.tableData[i].worktypeId || !this.tableData[i].duId) {
+                this.$message.warning('璇峰畬鍠勬淳閬e崟浣嶅拰宸ョ淇℃伅')
+                return
+              }
+            }
+          } else {
+            for (let i = 0; i < this.tableData.length; i++) {
+              if (!this.tableData[i].worktypeId) {
+                this.$message.warning('璇峰畬鍠勬淳宸ョ淇℃伅')
+                return
+              }
             }
           }
-
           let price = 0
           // if (this.item && this.item.type != 1) {
           this.tableData.forEach(item => {
             price = price + item.fee
           })
           // }
-          this.$refs.detailsPolicyholder.open('鎶曚繚璇︽儏鍗�', {
-            companyName: this.userInfo.company.name,
-            solutionName: this.item.name,
-            solutionType: this.item.type,
-            applyStartTime: this.form.applyStartTime,
-            applyEndTime: this.form.applyEndTime,
-            insureNum: this.tableData.length,
-            totalPrice: price,
-            detailList: this.tableData
-          })
+          const endTime = Number(this.item.correctWarnTime.split(':')[0] + this.item.correctWarnTime.split(':')[1])
+          const now = new Date();
+          const hours = now.getHours();
+          const minutes = now.getMinutes();
+          const date = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;
+          const startTime = Number(date.split(':')[0] + date.split(':')[1])
+          if (startTime > endTime) {
+            this.$confirm('鎮ㄥ凡瓒呰繃褰撳ぉ鏈�鏅氭壒鏀规椂闂达紝淇濆崟瀹為檯鐢熸晥鏃堕棿浠ヤ繚闄╁叕鍙稿鏍镐负鍑嗭紒', '鎻愮ず', {
+              confirmButtonText: '纭畾',
+              cancelButtonText: '鍙栨秷',
+              type: 'warning'
+            }).then(() => {
+              if (!this.form.companyId) {
+                this.$refs.detailsPolicyholder.open('鎶曚繚璇︽儏鍗�', {
+                  companyName: this.userInfo.company.name,
+                  solutionName: this.item.name,
+                  solutionType: this.item.type,
+                  applyStartTime: this.form.applyStartTime,
+                  applyEndTime: this.form.applyEndTime,
+                  insureNum: this.tableData.length,
+                  totalPrice: price,
+                  detailList: this.tableData
+                })
+              } else {
+                this.$refs.detailsPolicyholder.open('鎶曚繚璇︽儏鍗�', {
+                  companyName: this.form.companyName,
+                  solutionName: this.item.name,
+                  solutionType: this.item.type,
+                  applyStartTime: this.form.applyStartTime,
+                  applyEndTime: this.form.applyEndTime,
+                  insureNum: this.tableData.length,
+                  totalPrice: price,
+                  detailList: this.tableData
+                })
+              }
+            }).catch(() => {
+
+            });
+          } else {
+            if (!this.form.companyId) {
+              this.$refs.detailsPolicyholder.open('鎶曚繚璇︽儏鍗�', {
+                companyName: this.userInfo.company.name,
+                solutionName: this.item.name,
+                solutionType: this.item.type,
+                applyStartTime: this.form.applyStartTime,
+                applyEndTime: this.form.applyEndTime,
+                insureNum: this.tableData.length,
+                totalPrice: price,
+                detailList: this.tableData
+              })
+            } else {
+              this.$refs.detailsPolicyholder.open('鎶曚繚璇︽儏鍗�', {
+                companyName: this.form.companyName,
+                solutionName: this.item.name,
+                solutionType: this.item.type,
+                applyStartTime: this.form.applyStartTime,
+                applyEndTime: this.form.applyEndTime,
+                insureNum: this.tableData.length,
+                totalPrice: price,
+                detailList: this.tableData
+              })
+            }
+          }
         }
       })
     },
@@ -470,21 +537,21 @@
         this.$message.warning('璇峰厛閫夋嫨淇濋櫓鏂规')
         return
       }
-      this.$refs.selectEmployees.open('閫夊彇鍛樺伐', { arr: this.tableData, price: this.price, type: 1 })
+      this.$refs.selectEmployees.open('閫夊彇鍛樺伐', { arr: this.tableData, price: this.price, type: 1, companyId: this.form.companyId })
     },
     addUser () {
       if (!this.form.solutionId) {
         this.$message.warning('璇峰厛閫夋嫨淇濋櫓鏂规')
         return
       }
-      this.$refs.addEmployee.open('娣诲姞鍛樺伐', { arr: this.tableData, price: this.price, solutionId: this.form.solutionId })
+      this.$refs.addEmployee.open('娣诲姞鍛樺伐', { arr: this.tableData, price: this.price, solutionId: this.form.solutionId, hasDispatchUnit: this.item.hasDispatchUnit, companyId: this.userInfo.type === 1 ? this.userInfo.companyId : this.form.companyId })
     },
     uploadUser () {
       if (!this.form.solutionId) {
         this.$message.warning('璇峰厛閫夋嫨淇濋櫓鏂规')
         return
       }
-      this.$refs.importEmployees.open('涓婁紶鍚嶅崟', { arr: this.tableData, solutionId: this.form.solutionId, type: 1, price: this.price })
+      this.$refs.importEmployees.open('涓婁紶鍚嶅崟', { arr: this.tableData, solutionId: this.form.solutionId, type: 1, hasDispatchUnit: this.item.hasDispatchUnit, price: this.price })
     },
     // 鍒囨崲鏂规
     changeSolution (e) {
@@ -555,7 +622,7 @@
       this.$refs.multipleTable.clearSelection()
     },
     // 閫夋嫨鍛樺伐
-    sele () {
+    sele (type) {
       if (!this.form.solutionId) {
         this.$message.warning('璇烽�夋嫨淇濋櫓鏂规')
         return
@@ -564,14 +631,18 @@
         this.$message.warning('璇烽�夋嫨鍛樺伐')
         return
       }
-      this.$refs.confirmJobType.open('纭宸ョ', { solutionId: this.form.solutionId })
+      this.$refs.confirmJobType.open('纭宸ョ', { solutionId: this.form.solutionId, type })
     },
     // 鏌ヨ鍏ㄩ儴鏂规
     getCompany () {
-      all({})
+      getUseList(this.form.companyId ? this.form.companyId : this.userInfo.companyId, 2)
         .then(res => {
           this.company = res
         })
+      // all({ companyId: this.form.companyId })
+      //   .then(res => {
+      //     this.company = res
+      //   })
     },
     getAgeByIdCard (idCard) {
       const sexAndAge = {}
diff --git a/company/src/components/enterprise/addEmployeeWithDu.vue b/company/src/components/enterprise/addEmployeeWithDu.vue
index 7565552..80b00ca 100644
--- a/company/src/components/enterprise/addEmployeeWithDu.vue
+++ b/company/src/components/enterprise/addEmployeeWithDu.vue
@@ -14,7 +14,7 @@
                 <el-form-item label="韬唤璇佸彿" required>
                     <el-input v-model="item.idCard" maxlength="18" placeholder="璇疯緭鍏�"></el-input>
                 </el-form-item>
-              <el-form-item label="娲鹃仯鍗曚綅" >
+              <el-form-item label="娲鹃仯鍗曚綅" v-if="hasDispatchUnit !== 1">
                 <el-select v-model="item.duId" @change="selectChange(index)" placeholder="璇烽�夋嫨" clearable>
                   <el-option
                       v-for="item in dispatching"
@@ -57,6 +57,8 @@
       tempIndex: -1,
       dispatching: [],
       solutionId: null,
+      companyId: null,
+      hasDispatchUnit: null,
       list: [
         {
           memberName: '',
@@ -79,6 +81,8 @@
       this.visible = true
       this.tempIndex = tempIndex
       this.solutionId = obj.solutionId
+      this.companyId = obj.companyId
+      this.hasDispatchUnit = obj.hasDispatchUnit
       this.dispatching = []
       this.list = [
         {
@@ -94,7 +98,14 @@
       ]
       this.arr = obj.arr
       this.price = obj.price
-      this.getFindListByDTO()
+      if (obj.hasDispatchUnit === 1) {
+        this.getFindListByDTO()
+      } else {
+        worktype({ id: obj.solutionId, queryType: 0 })
+          .then(res => {
+            this.list[0].options = res
+          })
+      }
     },
     getFindListByDTO () {
       findListByDTO({
@@ -128,17 +139,31 @@
       })
     },
     add () {
-      this.list.push({
-        memberName: '',
-        idCard: '',
-        workTypeName: '',
-        worktypeId: '',
-        duName: '',
-        duId: '',
-        options: [],
-        fee: '',
-        id: this.tempIndex - 1
-      })
+      if (!this.companyId) {
+        this.list.push({
+          memberName: '',
+          idCard: '',
+          workTypeName: '',
+          worktypeId: '',
+          duName: '',
+          duId: '',
+          options: [],
+          fee: '',
+          id: this.tempIndex - 1
+        })
+      } else {
+        this.list.push({
+          memberName: '',
+          idCard: '',
+          workTypeName: '',
+          worktypeId: '',
+          duName: '',
+          duId: '',
+          options: JSON.parse(JSON.stringify(this.list[0].options)),
+          fee: '',
+          id: this.tempIndex - 1
+        })
+      }
     },
     dele (index) {
       this.list.splice(index, 1)
diff --git a/company/src/components/enterprise/additionSubtractionApplication.vue b/company/src/components/enterprise/additionSubtractionApplication.vue
index c3e10b6..af434aa 100644
--- a/company/src/components/enterprise/additionSubtractionApplication.vue
+++ b/company/src/components/enterprise/additionSubtractionApplication.vue
@@ -68,25 +68,35 @@
                     align="center"
                     label="淇濋櫓鐢熸晥姝㈡湡">
                 </el-table-column>
-                <el-table-column
-                    prop="insureNum"
-                    align="center"
-                    label="鎶曚繚浜烘暟">
-                </el-table-column>
-                <el-table-column
-                    prop="guaranteeNum"
-                    align="center"
-                    label="鍦ㄤ繚浜烘暟">
+<!--                <el-table-column-->
+<!--                    prop="insureNum"-->
+<!--                    align="center"-->
+<!--                    label="鎶曚繚浜烘暟">-->
+<!--                </el-table-column>-->
+<!--                <el-table-column-->
+<!--                    prop="guaranteeNum"-->
+<!--                    align="center"-->
+<!--                    label="鍦ㄤ繚浜烘暟">-->
+<!--                </el-table-column>-->
+                <el-table-column prop="guaranteeNum"  align="center" label="褰撳墠鍦ㄤ繚浜烘暟" width="120">
+                    <template slot-scope="{row}">
+                        <span>{{(row.guaranteeNum||0)}} 浜�</span>
+                    </template>
                 </el-table-column>
                 <el-table-column
                     prop="serviceDays"
                     align="center"
                     label="淇濆崟鏃堕暱锛堝ぉ锛�">
                 </el-table-column>
-                <el-table-column
-                    prop="currentFee"
-                    align="center"
-                    label="宸蹭骇鐢熻垂鐢�(鍏�)">
+<!--                <el-table-column-->
+<!--                    prop="currentFee"-->
+<!--                    align="center"-->
+<!--                    label="宸蹭骇鐢熻垂鐢�(鍏�)">-->
+<!--                </el-table-column>-->
+                <el-table-column prop="fee" label="鎵规敼璐圭敤鍚堣"  align="center" width="120">
+                    <template slot-scope="{row}">
+                        <span>{{row.changeMoney+' 鍏�'}}</span>
+                    </template>
                 </el-table-column>
                 <el-table-column
                     prop="fee"
@@ -109,10 +119,13 @@
                 <el-button type="danger" @click="deleItem">鍒犻櫎</el-button>
             </div>
             <div class="btns_item" v-if="activeName !== '1'">
-                <el-button type="primary" @click="sele">閫夊彇娲鹃仯鍗曚綅</el-button>
+<!--                <el-button type="primary" @click="sele">閫夊彇娲鹃仯鍗曚綅</el-button>-->
+                <el-button type="primary" @click="sele(1)" v-if="item && item.hasDispatchUnit !== 1">閫夊彇娲鹃仯鍗曚綅</el-button>
+                <el-button type="primary" @click="sele(2)" v-if="item && item.hasDispatchUnit === 1">閫夊彇宸ョ</el-button>
             </div>
         </div>
         <el-table
+            v-if="item"
             :data="activeName === '0' ? form.addDetailList : form.delDetailList"
             border
             show-summary
@@ -145,6 +158,7 @@
                 </template>
             </el-table-column>
             <el-table-column
+                v-if="item && item.hasDispatchUnit !== 1"
                 prop="duName"
                 label="娲鹃仯鍗曚綅">
             </el-table-column>
@@ -324,14 +338,6 @@
     },
     // 鑾峰彇鎶曚繚璇︽儏
     getDetails () {
-      // findList({ applyId: this.form.id })
-      //     .then(res => {
-      //         res.forEach(item => {
-      //             item.idCard = item.idcardNo
-      //             item.fee = ''
-      //         })
-      //         this.tableData = res
-      //     })
       getDetail(this.form.id)
         .then(res => {
           this.list.push(res)
@@ -368,7 +374,20 @@
       columns.forEach((column, index) => {
         if (index === 0) {
           sums[index] = '鎬讳环'
-        } else if (index === 7) {
+        } else if (this.item.hasDispatchUnit === 1 && index === 6) {
+          let total = 0
+          if (this.activeName === '0') {
+            this.form.addDetailList.forEach(item => {
+              total += item.fee || 0
+            })
+            sums[index] = (total || 0).toFixed(2)
+          } else {
+            this.form.delDetailList.forEach(item => {
+              total += item.reducePrice
+            })
+            sums[index] = (total || 0).toFixed(2)
+          }
+        } else if (this.item.hasDispatchUnit !== 1 && index === 7) {
           let total = 0
           if (this.activeName === '0') {
             this.form.addDetailList.forEach(item => {
@@ -435,7 +454,8 @@
         this.visible = false
         this.$tip.apiSuccess('鎿嶄綔鎴愬姛')
         // this.$refs.OperaApplyChangeDetailWindow.open('鍔犲噺淇濊鎯�', { applyId: this.form.id, id: res })
-        this.$emit('success', { applyId: this.form.id, id: res })
+        //   { applyId: this.form.id, id: res }
+        this.$emit('success')
       }).catch(e => {
         this.$tip.apiFailed(e)
       }).finally(() => {
@@ -450,56 +470,67 @@
           //     this.$message.warning('鑷冲皯娣诲姞涓�椤瑰憳宸�')
           //     return
           // }
-          for (let i = 0; i < this.form.addDetailList.length; i++) {
-            if (!this.form.addDetailList[i].worktypeId || !this.form.addDetailList[i].duId) {
-              this.$message.warning('璇峰畬鍠勫姞淇濇淳閬e崟浣嶅拰宸ョ淇℃伅')
-              return
+          if (this.item.hasDispatchUnit !== 1) {
+            for (let i = 0; i < this.form.addDetailList.length; i++) {
+              if (!this.form.addDetailList[i].worktypeId || !this.form.addDetailList[i].duId) {
+                this.$message.warning('璇峰畬鍠勫姞淇濇淳閬e崟浣嶅拰宸ョ淇℃伅')
+                return
+              }
+            }
+            for (let i = 0; i < this.form.delDetailList.length; i++) {
+              if (!this.form.delDetailList[i].worktypeId || !this.form.delDetailList[i].duId) {
+                this.$message.warning('璇峰畬鍠勫噺淇濇淳閬e崟浣嶅拰宸ョ淇℃伅')
+                return
+              }
+            }
+          } else {
+            for (let i = 0; i < this.form.addDetailList.length; i++) {
+              if (!this.form.addDetailList[i].worktypeId) {
+                this.$message.warning('璇峰畬鍠勫姞淇濆伐绉嶄俊鎭�')
+                return
+              }
+            }
+            for (let i = 0; i < this.form.delDetailList.length; i++) {
+              if (!this.form.delDetailList[i].worktypeId) {
+                this.$message.warning('璇峰畬鍠勫噺淇濆伐绉嶄俊鎭�')
+                return
+              }
             }
           }
-          for (let i = 0; i < this.form.delDetailList.length; i++) {
-            if (!this.form.delDetailList[i].worktypeId || !this.form.delDetailList[i].duId) {
-              this.$message.warning('璇峰畬鍠勫噺淇濇淳閬e崟浣嶅拰宸ョ淇℃伅')
-              return
-            }
+          let arr = this.company.filter(item => item.id === this.form.solutionId)
+          const endTime = Number(arr[0].correctWarnTime.split(':')[0] + arr[0].correctWarnTime.split(':')[1])
+          const now = new Date();
+          const hours = now.getHours();
+          const minutes = now.getMinutes();
+          const date = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;
+          const startTime = Number(date.split(':')[0] + date.split(':')[1])
+          if (startTime > endTime) {
+            this.$confirm('鎮ㄥ凡瓒呰繃褰撳ぉ鏈�鏅氭壒鏀规椂闂达紝淇濆崟瀹為檯鐢熸晥鏃堕棿浠ヤ繚闄╁叕鍙稿鏍镐负鍑嗭紒', '鎻愮ず', {
+              confirmButtonText: '纭畾',
+              cancelButtonText: '鍙栨秷',
+              type: 'warning'
+            }).then(() => {
+              this.$refs.ApplyChangeDetails1.open('鍔犲噺淇濊鍗�', this.form.addDetailList, this.form.delDetailList, {
+                companyName: this.item.companyName,
+                solutionsName: this.form.solutionsName,
+                code: this.list[0].code,
+                startTime: this.list[0].startTime,
+                endTime: this.list[0].endTime,
+                applyStartTime: this.form.applyStartTime
+              })
+            }).catch(() => {
+
+            });
+          } else {
+            this.$refs.ApplyChangeDetails1.open('鍔犲噺淇濊鍗�', this.form.addDetailList, this.form.delDetailList, {
+              companyName: this.item.companyName,
+              solutionsName: this.form.solutionsName,
+              code: this.list[0].code,
+              startTime: this.list[0].startTime,
+              endTime: this.list[0].endTime,
+              applyStartTime: this.form.applyStartTime
+            })
           }
-
-          this.$refs.ApplyChangeDetails1.open('鍔犲噺淇濊鍗�', this.form.addDetailList, this.form.delDetailList, {
-            companyName: this.userInfo.company.name,
-            solutionsName: this.form.solutionsName,
-            code: this.list[0].code,
-            startTime: this.list[0].startTime,
-            endTime: this.list[0].endTime,
-            applyStartTime: this.form.applyStartTime
-          })
-
-          // return
-
-          // this.form.addDetailList.forEach(item => {
-          //     item.idcardNo = item.idCard
-          // })
-          // this.form.delDetailList.forEach(item => {
-          //     item.idcardNo = item.idCard
-          // })
-          // // let arr = JSON.parse(JSON.stringify(this.form.addDetailList))
-          // // arr.forEach(item => {
-          // //     item.idcardNo = item.idCard
-          // // })
-          // this.isWorking = true
-          // create({
-          //     applyId: this.form.id,
-          //     addDetailList: this.form.addDetailList,
-          //     delDetailList: this.form.delDetailList,
-          //     validTime: this.form.applyStartTime,
-          //     type: 0
-          // }).then(() => {
-          //     this.visible = false
-          //     this.$tip.apiSuccess('鎿嶄綔鎴愬姛')
-          //     this.$emit('success')
-          // }).catch(e => {
-          //     this.$tip.apiFailed(e)
-          // }).finally(() => {
-          //     this.isWorking = false
-          // })
         }
       })
     },
@@ -534,9 +565,9 @@
         return
       }
       if (this.activeName === '0') {
-        this.$refs.addEmployee.open('娣诲姞鍔犱繚鍛樺伐', { arr: this.form.addDetailList, solutionId: this.item.newVersionSolutionId, price: this.price })
+        this.$refs.addEmployee.open('娣诲姞鍔犱繚鍛樺伐', { arr: this.form.addDetailList, solutionId: this.item.newVersionSolutionId, price: this.price, companyId: this.item.hasDispatchUnit === 1 ? '1' : '' })
       } else {
-        this.$refs.addEmployee.open('娣诲姞鍑忎繚鍛樺伐', { arr: this.form.delDetailList, solutionId: this.item.newVersionSolutionId, price: this.reducePrice })
+        this.$refs.addEmployee.open('娣诲姞鍑忎繚鍛樺伐', { arr: this.form.delDetailList, solutionId: this.item.newVersionSolutionId, price: this.reducePrice, companyId: this.item.hasDispatchUnit === 1 ? '1' : '' })
       }
     },
     uploadUser () {
@@ -551,9 +582,9 @@
       }
 
       if (this.activeName === '0') {
-        this.$refs.importEmployees.open('鍔犱繚鍛樺伐鍚嶅崟', { arr: this.form.addDetailList, type: 1, price: this.price, solutionId: this.item.newVersionSolutionId })
+        this.$refs.importEmployees.open('鍔犱繚鍛樺伐鍚嶅崟', { arr: this.form.addDetailList, type: 1, price: this.price, hasDispatchUnit: this.item.hasDispatchUnit, solutionId: this.item.newVersionSolutionId })
       } else {
-        this.$refs.importEmployees.open('鍑忎繚鍛樺伐鍚嶅崟', { arr: this.form.delDetailList, type: 0, price: this.reducePrice, solutionId: this.item.newVersionSolutionId, insuranceApplyId: this.form.id })
+        this.$refs.importEmployees.open('鍑忎繚鍛樺伐鍚嶅崟', { arr: this.form.delDetailList, type: 0, price: this.reducePrice, hasDispatchUnit: this.item.hasDispatchUnit, solutionId: this.item.newVersionSolutionId, insuranceApplyId: this.form.id })
       }
     },
     // 鍒囨崲鏂规
@@ -577,7 +608,6 @@
       }
     },
     getUser (obj) {
-      console.log(this.seleData)
       this.seleData.forEach(item => {
         if (this.activeName === '0') {
           this.form.addDetailList.forEach(row => {
@@ -603,7 +633,7 @@
       this.$refs.multipleTable.clearSelection()
     },
     // 閫夋嫨鍛樺伐
-    sele () {
+    sele (type) {
       if (this.activeName === '0') {
         if (this.addTrue !== 0) return this.$message.warning('褰撳墠淇濆崟鏆備笉鏀寔鎿嶄綔')
       } else {
@@ -617,7 +647,7 @@
         this.$message.warning('璇烽�夋嫨鍛樺伐')
         return
       }
-      this.$refs.confirmJobType.open('纭宸ョ', { solutionId: this.item.newVersionSolutionId })
+      this.$refs.confirmJobType.open('纭宸ョ', { solutionId: this.item.newVersionSolutionId, type })
     },
     // 鏌ヨ鍏ㄩ儴鏂规
     getCompany () {
diff --git a/company/src/components/enterprise/confirmJobType.vue b/company/src/components/enterprise/confirmJobType.vue
index 638a430..5425aec 100644
--- a/company/src/components/enterprise/confirmJobType.vue
+++ b/company/src/components/enterprise/confirmJobType.vue
@@ -7,7 +7,7 @@
         @confirm="confirm"
     >
         <el-form class="demo-form-inline">
-            <el-form-item label="娲鹃仯鍗曚綅" required>
+            <el-form-item label="娲鹃仯鍗曚綅" required v-if="type !== 2">
                 <el-select v-model="dw" @change="selectChange" placeholder="璇烽�夋嫨">
                     <el-option
                         v-for="item in dispatching"
@@ -45,6 +45,7 @@
                 form: {
                     solutionId: ''
                 },
+                type: null,
                 data: [],
                 dw: [],
                 gz: [],
@@ -59,9 +60,17 @@
                 this.gz = ''
                 this.form.solutionId = arr.solutionId
                 this.data = arr.seleData
+                this.type = arr.type
                 this.visible = true
                 this.options=[]
-                this.getFindListByDTO()
+                if (arr.type === 2) {
+                  worktype({ id: arr.solutionId, queryType: 0 })
+                    .then(res => {
+                      this.options = res
+                    })
+                } else {
+                  this.getFindListByDTO()
+                }
             },
             getFindListByDTO () {
                 findListByDTO({
@@ -85,9 +94,16 @@
                     })
             },
             confirm() {
-              if(!this.dw || !this.gz){
-                this.$message.error("璇峰厛閫夋嫨娲鹃仯鍗曚綅鍜屽伐绉嶏紒")
-                return;
+              if (this.type === 2) {
+                if(!this.gz){
+                  this.$message.error("璇峰厛閫夋嫨宸ョ锛�")
+                  return;
+                }
+              } else {
+                if(!this.dw || !this.gz){
+                  this.$message.error("璇峰厛閫夋嫨娲鹃仯鍗曚綅鍜屽伐绉嶏紒")
+                  return;
+                }
               }
                 let obj = {
                     workTypeName: '',
diff --git a/company/src/components/enterprise/factoryChange.vue b/company/src/components/enterprise/factoryChange.vue
index 9ee1676..9865d81 100644
--- a/company/src/components/enterprise/factoryChange.vue
+++ b/company/src/components/enterprise/factoryChange.vue
@@ -64,21 +64,31 @@
                     align="center"
                     label="淇濋櫓鐢熸晥姝㈡湡">
                 </el-table-column>
-                <el-table-column
-                    prop="insureNum"
-                    align="center"
-                    label="鎶曚繚浜烘暟">
+<!--                <el-table-column-->
+<!--                    prop="insureNum"-->
+<!--                    align="center"-->
+<!--                    label="鎶曚繚浜烘暟">-->
+<!--                </el-table-column>-->
+<!--              <el-table-column prop="guaranteeNum"  align="center" label="鍦ㄤ繚浜烘暟" ></el-table-column>-->
+                <el-table-column prop="guaranteeNum"  align="center" label="褰撳墠鍦ㄤ繚浜烘暟" width="120">
+                    <template slot-scope="{row}">
+                        <span>{{(row.guaranteeNum||0)}} 浜�</span>
+                    </template>
                 </el-table-column>
-              <el-table-column prop="guaranteeNum"  align="center" label="鍦ㄤ繚浜烘暟" ></el-table-column>
                 <el-table-column
                     prop="serviceDays"
                     align="center"
                     label="淇濆崟鏃堕暱锛堝ぉ锛�">
                 </el-table-column>
-                <el-table-column
-                    prop="currentFee"
-                    align="center"
-                    label="宸蹭骇鐢熻垂鐢�(鍏�)">
+<!--                <el-table-column-->
+<!--                    prop="currentFee"-->
+<!--                    align="center"-->
+<!--                    label="宸蹭骇鐢熻垂鐢�(鍏�)">-->
+<!--                </el-table-column>-->
+                <el-table-column prop="fee" label="鎵规敼璐圭敤鍚堣"  align="center" width="120">
+                    <template slot-scope="{row}">
+                        <span>{{row.changeMoney+' 鍏�'}}</span>
+                    </template>
                 </el-table-column>
                 <el-table-column
                     prop="fee"
@@ -93,7 +103,9 @@
                 <el-button type="danger" @click="deleItem">鍒犻櫎</el-button>
             </div>
             <div class="btns_item">
-                <el-button type="primary" @click="sele">閫夊彇娲鹃仯鍗曚綅</el-button>
+<!--                <el-button type="primary" @click="sele">閫夊彇娲鹃仯鍗曚綅</el-button>-->
+                <el-button type="primary" @click="sele(1)" v-if="item && item.hasDispatchUnit !== 1">閫夊彇娲鹃仯鍗曚綅</el-button>
+                <el-button type="primary" @click="sele(2)" v-if="item && item.hasDispatchUnit === 1">閫夊彇宸ョ</el-button>
             </div>
         </div>
         <el-table
@@ -120,6 +132,7 @@
                 label="韬唤璇佸彿">
             </el-table-column>
             <el-table-column
+                v-if="item && item.hasDispatchUnit !== 1"
                 prop="oldDuName"
                 label="鍘熸淳閬e崟浣�">
             </el-table-column>
@@ -128,6 +141,7 @@
                 label="鍘熸墍灞炲伐绉�">
             </el-table-column>
             <el-table-column
+                v-if="item && item.hasDispatchUnit !== 1"
                 prop="duName"
                 label="鍙樻洿鍚庢淳閬e崟浣�">
             </el-table-column>
@@ -348,35 +362,41 @@
           //     this.$message.warning('鑷冲皯娣诲姞涓�椤瑰憳宸�')
           //     return
           // }
-          for (let i = 0; i < this.form.factory.length; i++) {
-            if (!this.form.factory[i].worktypeId || !this.form.factory[i].duId) {
-              this.$message.warning('璇峰畬鍠勬淳閬e崟浣嶅拰宸ョ淇℃伅')
-              return
+          if (this.item.hasDispatchUnit !== 1) {
+            for (let i = 0; i < this.form.factory.length; i++) {
+              if (!this.form.factory[i].worktypeId || !this.form.factory[i].duId) {
+                this.$message.warning('璇峰畬鍠勬淳閬e崟浣嶅拰宸ョ淇℃伅')
+                return
+              }
+            }
+          } else {
+            for (let i = 0; i < this.form.factory.length; i++) {
+              if (!this.form.factory[i].worktypeId) {
+                this.$message.warning('璇峰畬鍠勫伐绉嶄俊鎭�')
+                return
+              }
             }
           }
-          this.$refs.ApplyChangeUnitDetails1.open('鏇存崲娲鹃仯鍗曚綅璇﹀崟', this.form.factory, { ...this.list[0], applyStartTime: this.form.applyStartTime })
-          // this.form.factory.forEach(item => {
-          //     item.idcardNo = item.idCard
-          // })
-          // let arr = JSON.parse(JSON.stringify(this.form.factory))
-          // arr.forEach(item => {
-          //     item.idcardNo = item.idCard
-          // })
-          // this.isWorking = true
-          // create({
-          //     applyId: this.form.id,
-          //     changeDetailList: this.form.factory,
-          //     validTime: this.form.applyStartTime,
-          //     type: 1
-          // }).then(() => {
-          //     this.visible = false
-          //     this.$tip.apiSuccess('鎿嶄綔鎴愬姛')
-          //     this.$emit('success')
-          // }).catch(e => {
-          //     this.$tip.apiFailed(e)
-          // }).finally(() => {
-          //     this.isWorking = false
-          // })
+          let arr = this.company.filter(item => item.id === this.form.solutionId)
+          const endTime = Number(arr[0].correctWarnTime.split(':')[0] + arr[0].correctWarnTime.split(':')[1])
+          const now = new Date();
+          const hours = now.getHours();
+          const minutes = now.getMinutes();
+          const date = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;
+          const startTime = Number(date.split(':')[0] + date.split(':')[1])
+          if (startTime > endTime) {
+            this.$confirm('鎮ㄥ凡瓒呰繃褰撳ぉ鏈�鏅氭壒鏀规椂闂达紝淇濆崟瀹為檯鐢熸晥鏃堕棿浠ヤ繚闄╁叕鍙稿鏍镐负鍑嗭紒', '鎻愮ず', {
+              confirmButtonText: '纭畾',
+              cancelButtonText: '鍙栨秷',
+              type: 'warning'
+            }).then(() => {
+              this.$refs.ApplyChangeUnitDetails1.open('鏇存崲娲鹃仯鍗曚綅璇﹀崟', this.form.factory, { ...this.list[0], applyStartTime: this.form.applyStartTime })
+            }).catch(() => {
+
+            });
+          } else {
+            this.$refs.ApplyChangeUnitDetails1.open('鏇存崲娲鹃仯鍗曚綅璇﹀崟', this.form.factory, { ...this.list[0], applyStartTime: this.form.applyStartTime })
+          }
         }
       })
     },
@@ -403,7 +423,7 @@
         this.$message.warning('璇峰厛閫夋嫨淇濋櫓鏂规')
         return
       }
-      this.$refs.importEmployees.open('涓婁紶鍚嶅崟', { arr: this.form.factory, price: this.price })
+      this.$refs.importEmployees.open('涓婁紶鍚嶅崟', { arr: this.form.factory, price: this.price, hasDispatchUnit: this.item.hasDispatchUnit })
     },
     // 鍒囨崲鏂规
     changeSolution1 (e) {
@@ -435,7 +455,7 @@
       this.$refs.multipleTable.clearSelection()
     },
     // 閫夋嫨鍛樺伐
-    sele () {
+    sele (type) {
       if (!this.form.solutionId) {
         this.$message.warning('璇烽�夋嫨淇濋櫓鏂规')
         return
@@ -444,7 +464,7 @@
         this.$message.warning('璇烽�夋嫨鍛樺伐')
         return
       }
-      this.$refs.confirmJobType.open('纭宸ョ', { solutionId: this.newVersionSolutionId })
+      this.$refs.confirmJobType.open('纭宸ョ', { solutionId: this.newVersionSolutionId, type })
     },
     // 鏌ヨ鍏ㄩ儴鏂规
     getCompany () {
diff --git a/company/src/components/enterprise/importEmployees.vue b/company/src/components/enterprise/importEmployees.vue
index a61616f..8e3f2df 100644
--- a/company/src/components/enterprise/importEmployees.vue
+++ b/company/src/components/enterprise/importEmployees.vue
@@ -48,7 +48,8 @@
       applyId: null,
       addList: [],
       delList: [],
-      fileName: ''
+      fileName: '',
+      hasDispatchUnit: null
     }
   },
   methods: {
@@ -63,6 +64,7 @@
       this.applyId = obj.insuranceApplyId
       this.list = obj.arr
       this.price = obj.price
+      this.hasDispatchUnit = obj.hasDispatchUnit
       this.importing= false
       this.confirming= false
     },
@@ -70,7 +72,11 @@
     exportTemplate () {
       // 鎶曚繚鐢宠
       if (this.type === 1) {
-        window.open('/template/personnel_add.xlsx')
+        if (this.hasDispatchUnit === 1) {
+          window.open('/template/personnel_no.xlsx')
+        } else {
+          window.open('/template/personnel_add.xlsx')
+        }
       } else {
         window.open('/template/personnel_reduce.xlsx')
       }
diff --git a/company/src/components/enterprise/reinsurance.vue b/company/src/components/enterprise/reinsurance.vue
index 68651eb..0286f4f 100644
--- a/company/src/components/enterprise/reinsurance.vue
+++ b/company/src/components/enterprise/reinsurance.vue
@@ -102,7 +102,9 @@
                 <el-button type="danger" @click="deleItem">鍒犻櫎</el-button>
             </div>
             <div class="btns_item" v-if="activeName !== '1'">
-                <el-button type="primary" @click="sele">閫夊彇娲鹃仯鍗曚綅</el-button>
+<!--                <el-button type="primary" @click="sele">閫夊彇娲鹃仯鍗曚綅</el-button>-->
+                <el-button type="primary" @click="sele(1)" v-if="item && item.hasDispatchUnit !== 1">閫夊彇娲鹃仯鍗曚綅</el-button>
+                <el-button type="primary" @click="sele(2)" v-if="item && item.hasDispatchUnit === 1">閫夊彇宸ョ</el-button>
             </div>
         </div>
         <el-table
@@ -144,6 +146,7 @@
                 </template>
             </el-table-column>
             <el-table-column
+                v-if="item && item.hasDispatchUnit !== 1"
                 :key="Math.random()"
                 prop="duName"
                 label="娲鹃仯鍗曚綅">
@@ -205,14 +208,15 @@
                 </template>
             </el-table-column>
             <el-table-column
-                    :key="Math.random()"
-                    prop="duName"
-                    label="娲鹃仯鍗曚綅">
+                v-if="item && item.hasDispatchUnit !== 1"
+                :key="Math.random()"
+                prop="duName"
+                label="娲鹃仯鍗曚綅">
             </el-table-column>
             <el-table-column
-                    :key="Math.random()"
-                    prop="workTypeName"
-                    label="鎵�灞炲伐绉�">
+                :key="Math.random()"
+                prop="workTypeName"
+                label="鎵�灞炲伐绉�">
             </el-table-column>
             <el-table-column
                 :key="Math.random()"
@@ -346,7 +350,7 @@
         types: [0]
       }).then(res => {
         res.forEach(item => {
-          item.fee = ''
+          item.fee = item.fee
           item.idCard = item.memberIdcardNo
           item.workTypeName = ''
           item.worktypeId = ''
@@ -409,7 +413,7 @@
       columns.forEach((column, index) => {
         if (index === 0) {
           sums[index] = '鎬讳环'
-        } else if (index === 7) {
+        } else if (this.item && this.item.hasDispatchUnit === 1 && index === 6) {
           let total = 0
           if (this.activeName === '0') {
             this.form.addDetailList.forEach(item => {
@@ -421,14 +425,26 @@
             this.form.delDetailList.forEach(item => {
               total += item.fee
             })
-            // if (total < 0) {
             sums[index] = (total||0).toFixed(2)
-            // } else {
-            //     sums[index] = '-' + total
-            // }
             return
           }
           sums[index] = ''
+        } else if (this.item && this.item.hasDispatchUnit === 0 && index === 7) {
+            let total = 0
+            if (this.activeName === '0') {
+                this.form.addDetailList.forEach(item => {
+                    total += item.fee
+                })
+                sums[index] = total.toFixed(2)
+                return
+            } else {
+                this.form.delDetailList.forEach(item => {
+                    total += item.fee
+                })
+                sums[index] = (total||0).toFixed(2)
+                return
+            }
+            sums[index] = ''
         }
       })
       return sums
@@ -441,7 +457,7 @@
       if (this.activeName === '0') {
         this.seleData.forEach(item => {
           this.form.addDetailList.forEach((row, index) => {
-            if (item === row.name) {
+            if (item === row.idCard) {
               this.form.addDetailList.splice(index, 1)
             }
           })
@@ -449,7 +465,7 @@
       } else {
         this.seleData.forEach(item => {
           this.form.delDetailList.forEach((row, index) => {
-            if (item === row.name) {
+            if (item === row.idCard) {
               this.form.delDetailList.splice(index, 1)
             }
           })
@@ -522,9 +538,9 @@
         return
       }
       if (this.activeName === '0') {
-        this.$refs.addEmployee.open('娣诲姞鍔犱繚鍛樺伐', { arr: this.form.addDetailList, solutionId: this.item.newVersionSolutionId, price: this.price })
+        this.$refs.addEmployee.open('娣诲姞鍔犱繚鍛樺伐', { arr: this.form.addDetailList, solutionId: this.item.newVersionSolutionId, price: this.price, companyId: this.item.hasDispatchUnit === 1 ? '1' : '' })
       } else {
-        this.$refs.addEmployee.open('娣诲姞鍑忎繚鍛樺伐', { arr: this.form.delDetailList, solutionId: this.item.newVersionSolutionId, price: this.reducePrice })
+        this.$refs.addEmployee.open('娣诲姞鍑忎繚鍛樺伐', { arr: this.form.delDetailList, solutionId: this.item.newVersionSolutionId, price: this.reducePrice, companyId: this.item.hasDispatchUnit === 1 ? '1' : '' })
       }
     },
     uploadUser () {
@@ -533,9 +549,9 @@
         return
       }
       if (this.activeName === '0') {
-        this.$refs.importEmployees.open('鍔犱繚鍛樺伐鍚嶅崟', { arr: this.form.addDetailList, type: 1, price: this.price, solutionId: this.item.newVersionSolutionId })
+        this.$refs.importEmployees.open('鍔犱繚鍛樺伐鍚嶅崟', { arr: this.form.addDetailList, type: 1, price: this.price, solutionId: this.item.newVersionSolutionId, hasDispatchUnit: this.item.hasDispatchUnit })
       } else {
-        this.$refs.importEmployees.open('鍑忎繚鍛樺伐鍚嶅崟', { arr: this.form.delDetailList, type: 0, price: this.reducePrice, solutionId: this.item.newVersionSolutionId, insuranceApplyId: this.form.id })
+        this.$refs.importEmployees.open('鍑忎繚鍛樺伐鍚嶅崟', { arr: this.form.delDetailList, type: 0, price: this.reducePrice, solutionId: this.item.newVersionSolutionId, insuranceApplyId: this.form.id, hasDispatchUnit: this.item.hasDispatchUnit })
       }
     },
     // 鍒囨崲鏂规
@@ -560,7 +576,7 @@
       this.seleData.forEach(item => {
         if (this.activeName === '0') {
           this.form.addDetailList.forEach(row => {
-            if (item === row.name) {
+            if (item === row.idCard) {
               row.workTypeName = obj.workTypeName
               row.worktypeId = obj.worktypeId
               row.duName = obj.duName
@@ -569,7 +585,7 @@
           })
         } else {
           this.form.delDetailList.forEach(row => {
-            if (item === row.name) {
+            if (item === row.idCard) {
               row.workTypeName = obj.workTypeName
               row.worktypeId = obj.worktypeId
               row.duName = obj.duName
@@ -582,7 +598,7 @@
       this.$refs.multipleTable.clearSelection()
     },
     // 閫夋嫨鍛樺伐
-    sele () {
+    sele (type) {
       if (!this.form.solutionId) {
         this.$message.warning('璇烽�夋嫨淇濋櫓鏂规')
         return
@@ -591,7 +607,7 @@
         this.$message.warning('璇烽�夋嫨鍛樺伐')
         return
       }
-      this.$refs.confirmJobType.open('纭宸ョ', { solutionId: this.newVersionSolutionId })
+      this.$refs.confirmJobType.open('纭宸ョ', { solutionId: this.newVersionSolutionId, type })
     },
     // 鏌ヨ鍏ㄩ儴鏂规
     getCompany () {
@@ -626,7 +642,7 @@
       return sexAndAge.age
     },
     handleSelectionChange (e) {
-      this.seleData = e.map(item => item.name)
+      this.seleData = e.map(item => item.memberIdcardNo)
     },
     getValue (list) {
       console.log(list)
diff --git a/company/src/components/enterprise/renewalInsurance.vue b/company/src/components/enterprise/renewalInsurance.vue
index 6638b2a..861f3f1 100644
--- a/company/src/components/enterprise/renewalInsurance.vue
+++ b/company/src/components/enterprise/renewalInsurance.vue
@@ -26,14 +26,24 @@
                     <span>{{row.code ? row.code : '-'}}</span>
                 </template>
             </el-table-column>
-            <el-table-column prop="insureNum" label="鎶曚繚浜烘暟"></el-table-column>
-          <el-table-column prop="guaranteeNum" label="鍦ㄤ繚浜烘暟" ></el-table-column>
+            <el-table-column prop="guaranteeNum"  align="center" label="褰撳墠鍦ㄤ繚浜烘暟" width="120">
+                <template slot-scope="{row}">
+                    <span>{{(row.guaranteeNum||0)}} 浜�</span>
+                </template>
+            </el-table-column>
+<!--            <el-table-column prop="insureNum" label="鎶曚繚浜烘暟"></el-table-column>-->
+<!--          <el-table-column prop="guaranteeNum" label="鍦ㄤ繚浜烘暟" ></el-table-column>-->
             <el-table-column label="鎶曚繚鏃堕暱锛堝ぉ锛�">
                 <template slot-scope="{row}">
                     <span>{{row.serviceDays < 0 ? `-` : row.serviceDays}}</span>
                 </template>
             </el-table-column>
-            <el-table-column prop="currentFee" label="宸蹭骇鐢熻垂鐢�"></el-table-column>
+<!--            <el-table-column prop="currentFee" label="宸蹭骇鐢熻垂鐢�"></el-table-column>-->
+            <el-table-column prop="fee" label="鎵规敼璐圭敤鍚堣"  align="center" width="120">
+                <template slot-scope="{row}">
+                    <span>{{row.changeMoney+' 鍏�'}}</span>
+                </template>
+            </el-table-column>
             <el-table-column prop="fee" label="鎬昏垂鐢紙鍏冿級"></el-table-column>
             <el-table-column prop="endTime" label="淇濋櫓鐢熸晥姝㈡湡"></el-table-column>
             <el-table-column label="澶辨晥鍓╀綑锛堝ぉ锛�">
diff --git a/company/src/components/enterprise/selectEmployees.vue b/company/src/components/enterprise/selectEmployees.vue
index dfa5994..90c6943 100644
--- a/company/src/components/enterprise/selectEmployees.vue
+++ b/company/src/components/enterprise/selectEmployees.vue
@@ -81,6 +81,7 @@
       confirming:false,
       type: '',
       val: '',
+      companyId: null,
       memberIds:[],
       loading:false,
       memberList:[],
@@ -115,6 +116,7 @@
       if (obj.type) {
         this.type = obj.type
       }
+      this.companyId = obj.companyId
       this.list = []
       if (obj.insuranceApplyId) {
         this.insuranceApplyId = obj.insuranceApplyId
@@ -162,9 +164,6 @@
         }
         item.fee = this.price
       })
-
-      console.log(this.oldList)
-      console.log(this.seleData)
       this.confirming=false
       this.$emit('result', this.seleData)
       this.seleData=[]
@@ -197,6 +196,7 @@
         this.loading = true;
         findListByDTO({
           name: query,
+          companyId: this.companyId,
           insuranceApplyId: this.insuranceApplyId,
           notInInsuranceApplyId: this.notInInsuranceApplyId,
           validTime: this.validTime
diff --git a/company/src/components/system/role/PermissionConfigWindow.vue b/company/src/components/system/role/PermissionConfigWindow.vue
index 17476a0..7c2c014 100644
--- a/company/src/components/system/role/PermissionConfigWindow.vue
+++ b/company/src/components/system/role/PermissionConfigWindow.vue
@@ -2,7 +2,7 @@
   <GlobalWindow
     :visible.sync="visible"
     :confirm-working="isWorking"
-    width="582px"
+    width="800px"
     title="閰嶇疆瑙掕壊鏉冮檺"
     @confirm="confirm"
   >
@@ -122,3 +122,8 @@
   }
 }
 </style>
+<style>
+  .el-transfer-panel {
+    width: 300px !important;
+  }
+</style>
diff --git a/company/src/components/system/role/Permissions.vue b/company/src/components/system/role/Permissions.vue
new file mode 100644
index 0000000..d7bed0a
--- /dev/null
+++ b/company/src/components/system/role/Permissions.vue
@@ -0,0 +1,127 @@
+<template>
+    <GlobalWindow
+        :title="title"
+        :visible.sync="visible"
+        :confirm-working="isWorking"
+        @confirm="confirm"
+    >
+        <el-form :model="form" ref="form" :rules="rules">
+            <el-form-item label="鏉冮檺绫诲瀷" prop="type">
+                <el-select v-model="form.type" @change="form.customData === []" placeholder="璇烽�夋嫨">
+                    <el-option
+                        v-for="item in options"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value">
+                    </el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item label="鑷畾涔夐儴闂�" prop="customData" v-if="form.type === 4">
+                <el-cascader
+                    :options="organization"
+                    v-model="form.customData"
+                    placeholder="璇烽�夋嫨涓婄骇缁勭粐"
+                    :props="{ label: 'name', value: 'id', multiple: true, checkStrictly: true }"
+                    clearable />
+            </el-form-item>
+        </el-form>
+    </GlobalWindow>
+</template>
+
+<script>
+  import BaseOpera from '@/components/base/BaseOpera'
+  import GlobalWindow from '@/components/common/GlobalWindow'
+  import { tree } from '@/api/business/companyDepartment'
+  import { createRoleDataPermission } from '@/api/system/role'
+  export default {
+    name: 'Permissions',
+    extends: BaseOpera,
+    components: { GlobalWindow },
+    data () {
+      return {
+        // 琛ㄥ崟鏁版嵁
+        form: {
+          roleId: null,
+          type: '',
+          customData: []
+        },
+        // 楠岃瘉瑙勫垯
+        rules: {
+          type: [
+            { required: true, message: '璇烽�夋嫨鏉冮檺绫诲瀷' }
+          ],
+          customData: [
+            { required: true, message: '璇烽�夋嫨閮ㄩ棬' }
+          ]
+        },
+        organization: [],
+        options: [
+          { label: '鍏ㄩ儴', value: 0 },
+          { label: '鎵�灞為儴闂ㄥ強涓嬪睘閮ㄩ棬', value: 1 },
+          { label: '鎵�灞為儴闂ㄥ強鍏跺瓙瀛欓儴闂�', value: 2 },
+          { label: '浠呮墍灞為儴闂�', value: 3 },
+          { label: '鑷畾涔夐儴闂�', value: 4 },
+          { label: '浠呰嚜宸�', value: -1 }
+        ]
+      }
+    },
+    methods: {
+      confirm () {
+        this.$refs.form.validate((valid) => {
+          if (!valid) {
+            return
+          }
+          this.isWorking = true
+          let obj = JSON.parse(JSON.stringify(this.form))
+          if (obj.customData.length > 0) {
+            obj.customData = obj.customData.flat().join(',')
+          } else {
+            obj.customData = ''
+          }
+          createRoleDataPermission(obj)
+            .then(() => {
+              this.visible = false
+              this.$tip.apiSuccess('鎿嶄綔鎴愬姛')
+              this.$emit('success')
+            })
+            .catch(e => {
+              this.$tip.apiFailed(e)
+            })
+            .finally(() => {
+              this.isWorking = false
+            })
+        })
+      },
+      getTree() {
+        tree()
+          .then(records => {
+            this.organization = records
+          })
+      },
+      open (title, target) {
+        this.title = title
+        this.visible = true
+        this.getTree()
+        // 鏂板缓
+        if (target == null) {
+          this.$nextTick(() => {
+            this.$refs.form.resetFields()
+            this.form[this.configData['field.id']] = null
+          })
+          return
+        }
+        // 缂栬緫
+        this.$nextTick(() => {
+          for (const key in this.form) {
+            this.form[key] = target[key]
+          }
+        })
+      }
+    },
+    created () {
+      this.config({
+        api: '/system/role'
+      })
+    }
+  }
+</script>
diff --git a/company/src/components/system/user/OperaUserWindow.vue b/company/src/components/system/user/OperaUserWindow.vue
index a64d417..85dce16 100644
--- a/company/src/components/system/user/OperaUserWindow.vue
+++ b/company/src/components/system/user/OperaUserWindow.vue
@@ -23,6 +23,14 @@
           <el-button type="primary" style="flex-shrink: 0; margin-left: 15px;" v-else>{{num}}s</el-button>
         </div>
       </el-form-item>
+      <el-form-item label="閮ㄩ棬" prop="departmentId">
+        <el-cascader
+          :options="organization"
+          v-model="form.departmentId"
+          placeholder="璇烽�夋嫨"
+          :props="{ label: 'name', value: 'id', children: 'childList', checkStrictly: true }"
+          clearable />
+      </el-form-item>
       <el-form-item label="鎶勯�佹枃浠堕偖绠�" prop="email">
         <el-input v-model="form.email" placeholder="璇疯緭鍏�" v-trim />
       </el-form-item>
@@ -37,7 +45,7 @@
 import PositionSelect from '@/components/common/PositionSelect'
 import { checkMobile, checkEmail } from '@/utils/form'
 import { sendSms } from '@/api/business/smsEmail'
-
+import { tree } from '@/api/business/companyDepartment'
 export default {
   name: 'OperaUserWindow',
   extends: BaseOpera,
@@ -51,10 +59,12 @@
         realname: '', // 濮撳悕
         mobile: '', // 鎵嬫満鍙风爜
         email: '',
-        captcha: ''
+        captcha: '',
+        departmentId: ''
       },
       num: 0,
       timer: null,
+      organization: [],
       // 楠岃瘉瑙勫垯
       rules: {
         username: [
@@ -66,6 +76,9 @@
         mobile: [
           { required: true, validator: checkMobile }
         ],
+        departmentId: [
+          { required: true, message: '璇烽�夋嫨閮ㄩ棬' }
+        ],
         email: [
           { required: true, message: '璇疯緭鍏ラ偖绠�' }
         ]
@@ -73,6 +86,52 @@
     }
   },
   methods: {
+    __confirmCreate () {
+      this.$refs.form.validate((valid) => {
+        if (!valid) {
+          return
+        }
+        let obj = JSON.parse(JSON.stringify(this.form))
+        obj.departmentId = obj.departmentId[obj.departmentId.length - 1]
+        // 璋冪敤鏂板缓鎺ュ彛
+        this.isWorking = true
+        this.api.create(obj)
+          .then(() => {
+            this.visible = false
+            this.$tip.apiSuccess('鏂板缓鎴愬姛')
+            this.$emit('success')
+          })
+          .catch(e => {
+            this.$tip.apiFailed(e)
+          })
+          .finally(() => {
+            this.isWorking = false
+          })
+      })
+    },
+    __confirmEdit () {
+      this.$refs.form.validate((valid) => {
+        if (!valid) {
+          return
+        }
+        let obj = JSON.parse(JSON.stringify(this.form))
+        obj.departmentId = obj.departmentId[obj.departmentId.length - 1]
+        // 璋冪敤鏂板缓鎺ュ彛
+        this.isWorking = true
+        this.api.updateById(obj)
+          .then(() => {
+            this.visible = false
+            this.$tip.apiSuccess('淇敼鎴愬姛')
+            this.$emit('success')
+          })
+          .catch(e => {
+            this.$tip.apiFailed(e)
+          })
+          .finally(() => {
+            this.isWorking = false
+          })
+      })
+    },
     send() {
       if (!this.form.mobile) {
         this.$message.warning('璇疯緭鍏ユ墜鏈哄彿')
@@ -82,6 +141,12 @@
         .then(res => {
           this.num = 60
           this.setTime()
+        })
+    },
+    getTree() {
+      tree()
+        .then(records => {
+          this.organization = records
         })
     },
     setTime() {
@@ -100,6 +165,7 @@
     open (title, target) {
       this.title = title
       this.visible = true
+      this.getTree()
       clearInterval(this.timer)
       this.num = 0
       // 鏂板缓
@@ -107,8 +173,8 @@
         this.$nextTick(() => {
           this.$refs.form.resetFields()
           this.form.id = null
-          this.form.departmentId = null
-          this.form.positionIds = []
+          // this.form.departmentId = null
+          // this.form.positionIds = []
         })
         return
       }
@@ -117,8 +183,8 @@
         for (const key in this.form) {
           this.form[key] = target[key]
         }
-        this.form.departmentId = target.department == null ? null : target.department.id
-        this.form.positionIds = target.positions == null ? [] : target.positions.map(p => p.id)
+        // this.form.departmentId = target.department == null ? null : target.department.id
+        // this.form.positionIds = target.positions == null ? [] : target.positions.map(p => p.id)
       })
     }
   },
diff --git a/company/src/components/system/user/RoleConfigWindow.vue b/company/src/components/system/user/RoleConfigWindow.vue
index 5b029f7..3bf8d7a 100644
--- a/company/src/components/system/user/RoleConfigWindow.vue
+++ b/company/src/components/system/user/RoleConfigWindow.vue
@@ -2,7 +2,7 @@
   <GlobalWindow
     :visible.sync="visible"
     :confirm-working="isWorking"
-    width="582px"
+    width="800px"
     title="閰嶇疆鐢ㄦ埛瑙掕壊"
     @confirm="confirm"
   >
@@ -125,3 +125,8 @@
   }
 }
 </style>
+<style>
+  .el-transfer-panel {
+    width: 300px !important;
+  }
+</style>
diff --git a/company/src/components/system/user/allocationEnterprises.vue b/company/src/components/system/user/allocationEnterprises.vue
index d9a9c14..0a26f64 100644
--- a/company/src/components/system/user/allocationEnterprises.vue
+++ b/company/src/components/system/user/allocationEnterprises.vue
@@ -2,8 +2,8 @@
     <GlobalWindow
         :visible.sync="visible"
         :confirm-working="isWorking"
-        width="582px"
-        title="閰嶇疆鐢ㄦ埛瑙掕壊"
+        width="800px"
+        title="鍒嗛厤浼佷笟"
         @confirm="confirm"
     >
         <p class="tip" v-if="user != null">涓虹敤鎴� <em>{{user.realname}}</em> 鍒嗛厤浼佷笟</p>
@@ -91,9 +91,14 @@
         }
     }
 </script>
-
+<style>
+    .el-transfer-panel {
+        width: 300px !important;
+    }
+</style>
 <style scoped lang="scss">
     @import "@/assets/style/variables.scss";
+
     // 瑙掕壊閰嶇疆
     .global-window {
         .tip {
diff --git a/company/src/layouts/AppLayout.vue b/company/src/layouts/AppLayout.vue
index 96b84b5..ab907f4 100644
--- a/company/src/layouts/AppLayout.vue
+++ b/company/src/layouts/AppLayout.vue
@@ -47,7 +47,8 @@
       // 浼佷笟绔敤鎴疯缃按鍗�
       if (this.userInfo.type === 1 || this.userInfo.type === 2) {
         if(this.userInfo.company && this.userInfo.company.name){
-          Watermark.set(this.userInfo.company.name, this.$refs.containerS);
+          Watermark.set(this.userInfo.showCompany.name, this.$refs.containerS);
+          // Watermark.set(this.userInfo.company.name, this.$refs.containerS);
         }
       }
     },
diff --git a/company/src/main.js b/company/src/main.js
index e3587f1..175888f 100644
--- a/company/src/main.js
+++ b/company/src/main.js
@@ -10,7 +10,6 @@
 import plugins from './plugins'
 import { mapState, mapMutations } from 'vuex'
 import { fetchMenuTree } from './api/system/menu'
-
 Vue.config.productionTip = false
 Vue.use(ElementUI, {
   size: 'small'
@@ -19,7 +18,6 @@
 Vue.use(directives)
 Vue.use(filters)
 Vue.use(plugins)
-
 new Vue({
   data: {
     loading: false
diff --git a/company/src/utils/request.js b/company/src/utils/request.js
index 39e92c7..ea38661 100644
--- a/company/src/utils/request.js
+++ b/company/src/utils/request.js
@@ -42,8 +42,7 @@
 
 // 鏂板缓鍝嶅簲鎷︽埅鍣�
 axiosInstance.interceptors.response.use((response) => {
-  // console.log(response.status)
-  // debugger
+  // console.log(response)
   // 璇锋眰澶辫触
   if (response.status !== 200) {
     return Promise.reject(new Error('鏈嶅姟鍣ㄧ箒蹇欙紝璇风◢鍚庡啀璇�'))
@@ -66,6 +65,7 @@
   }
   return response.data.data
 }, function (error) {
+  console.log(error)
   if (error.code == null) {
     return Promise.reject(new Error('鏈嶅姟鍣ㄧ箒蹇欙紝璇风◢鍚庡啀璇�'))
   }
diff --git a/company/src/utils/resetMessage.js b/company/src/utils/resetMessage.js
new file mode 100644
index 0000000..4fca990
--- /dev/null
+++ b/company/src/utils/resetMessage.js
@@ -0,0 +1,18 @@
+import { Message } from 'element-ui';
+
+let messageInstance = null;
+
+export const showMessage = (message) => {
+  if (messageInstance) {
+    // 濡傛灉宸茬粡瀛樺湪涓�涓秷鎭彁绀哄疄渚嬶紝鍒欏厛鍏抽棴瀹�
+    Message.closeAll();
+  }
+
+  // 鏄剧ず鏂扮殑娑堟伅鎻愮ず锛屽苟淇濆瓨璇ュ疄渚�
+  messageInstance = Message({
+    message: message,
+    onClose: () => {
+      messageInstance = null; // 褰撴秷鎭彁绀哄叧闂椂锛屽皢瀹炰緥缃负null
+    }
+  });
+}
diff --git a/company/src/views/business/applyChange.vue b/company/src/views/business/applyChange.vue
index 1e2c6e7..2031d8a 100644
--- a/company/src/views/business/applyChange.vue
+++ b/company/src/views/business/applyChange.vue
@@ -9,9 +9,15 @@
           <el-option label="寰呭鏍�" value="1"></el-option>
           <el-option label="宸茬敓鏁�" value="2"></el-option>
           <el-option label="鐢宠閫�鍥�" value="3"></el-option>
-          <!--                    3 4 閮芥槸閫�鍥炵敵璇蜂腑-->
           <el-option label="宸查��鍥�" value="5"></el-option>
           <el-option label="宸插叧闂�" value="6"></el-option>
+          <el-option label="鎵规敼鐢宠涓�" value="9"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="鎶曚繚绫诲瀷" prop="solutionType">
+        <el-select v-model="searchForm.solutionType" placeholder="璇烽�夋嫨" @change="search">
+          <el-option label="鐩翠繚鎶曚繚" :value="0"></el-option>
+          <el-option label="濮旀墭鎶曚繚" :value="1"></el-option>
         </el-select>
       </el-form-item>
       <el-form-item label="鎶曚繚浼佷笟" prop="companyId">
@@ -52,6 +58,9 @@
     </el-form>
     <!-- 琛ㄦ牸鍜屽垎椤� -->
     <template v-slot:table-wrap>
+      <ul class="toolbar">
+        <li><el-button type="primary" @click="$refs.chooseCompany.open('閫夋嫨浼佷笟')">鏂板</el-button></li>
+      </ul>
       <el-table
           v-loading="isWorking.search"
           :data="tableData.list"
@@ -70,6 +79,7 @@
             <span  :class="'change-status'+row.status" v-if="row.status === 3 || row.status === 4">閫�鍥炵敵璇�</span>
             <span  :class="'change-status'+row.status" v-if="row.status ===5 || row.status === 8">宸查��鍥�</span>
             <span  :class="'change-status'+row.status" v-if="row.status ===6">宸插叧闂�</span>
+            <span  :class="'change-status'+row.status" v-if="row.status ===9">鎵规敼鐢宠涓�</span>
           </template>
         </el-table-column>
         <el-table-column prop="companyName" label="鎶曚繚浼佷笟" min-width="100px"></el-table-column>
@@ -85,7 +95,7 @@
             fixed="right"
         >
           <template slot-scope="{row}">
-            <el-button type="text" @click="$refs.operaApplyChangeDetailWindow.open('鍔犲噺淇濊鎯�', row)">鏌ョ湅璇︽儏</el-button>
+            <el-button type="text" @click="openEdit(row)">鏌ョ湅璇︽儏</el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -98,6 +108,11 @@
     </template>
     <!-- 璇︽儏 -->
     <OperaApplyChangeDetailWindow ref="operaApplyChangeDetailWindow" @success="handlePageChange"/>
+    <OperaUnionChangeDetailWindow ref="OperaUnionChangeDetailWindow" @success="handlePageChange"/>
+    <!--    閫夋嫨浼佷笟    -->
+    <chooseCompany ref="chooseCompany" @submit="getCompany" />
+    <!--    閫夋嫨淇濆崟    -->
+    <selectPolicy ref="selectPolicy" @success="handlePageChange" />
   </TableLayout>
 </template>
 
@@ -105,13 +120,16 @@
 import BaseTable from '@/components/base/BaseTable'
 import TableLayout from '@/layouts/TableLayout'
 import Pagination from '@/components/common/Pagination'
+import OperaUnionChangeDetailWindow from '@/components/business/OperaUnionChangeDetailWindow'
 import OperaApplyChangeDetailWindow from '@/components/business/OperaApplyChangeDetailWindow'
 import {all as solutionAll, all} from '@/api/business/solutions'
 import {pageAll as companyAll} from "@/api/business/company";
+import chooseCompany from '@/components/common/chooseCompany'
+import selectPolicy from '@/components/business/selectPolicy'
 export default {
   name: 'add_subtract',
   extends: BaseTable,
-  components: { TableLayout, Pagination, OperaApplyChangeDetailWindow },
+  components: { TableLayout, Pagination, OperaApplyChangeDetailWindow, OperaUnionChangeDetailWindow, chooseCompany, selectPolicy },
   data () {
     return {
       // 鎼滅储
@@ -122,7 +140,7 @@
         createDateE: '',
         createDateS: '',
         companyId: '',
-        solutionType: 0,
+        solutionType: '',
         baseSolutionsId: '',
         time: []
       },
@@ -141,6 +159,17 @@
     this.loadSelectList()
   },
   methods: {
+    getCompany(e) {
+      this.$refs.selectPolicy.open('閫夋嫨淇濆崟', e.companyId, 1)
+    },
+    openEdit(row) {
+      this.$refs.operaApplyChangeDetailWindow.open('鍔犲噺淇濊鎯�', row)
+      // if (row.solutionType === 0) {
+      //   this.$refs.operaApplyChangeDetailWindow.open('鍔犲噺淇濊鎯�', row)
+      // } else if (row.solutionType === 1) {
+      //   this.$refs.OperaUnionChangeDetailWindow.open('鍔犲噺淇濊鎯�', row)
+      // }
+    },
     loadSelectList() {
       solutionAll({dataType:2,type:0}).then(res => {
         this.solutionList = res
diff --git a/company/src/views/business/company.vue b/company/src/views/business/company.vue
index 87a5ea1..ea58a9e 100644
--- a/company/src/views/business/company.vue
+++ b/company/src/views/business/company.vue
@@ -23,6 +23,7 @@
                 :data="tableData.list"
                 stripe
             >
+                <el-table-column prop="username" label="鐧诲綍璐﹀彿" min-width="150px" fixed  align="center"></el-table-column>
                 <el-table-column prop="name" label="浼佷笟鍚嶇О" min-width="150px" fixed  align="center"></el-table-column>
                 <el-table-column prop="code" label="缁熶竴淇$敤浠g爜" min-width="150px" fixed     align="center"></el-table-column>
               <el-table-column prop="phone" label="缁戝畾鎵嬫満鍙�" min-width="100px" fixed     align="center"></el-table-column>
diff --git a/company/src/views/business/companyDepartment.vue b/company/src/views/business/companyDepartment.vue
new file mode 100644
index 0000000..ca9b260
--- /dev/null
+++ b/company/src/views/business/companyDepartment.vue
@@ -0,0 +1,162 @@
+<template>
+    <TableLayout :permissions="['business:companydepartment:query']">
+        <!-- 琛ㄦ牸鍜屽垎椤� -->
+        <template v-slot:table-wrap>
+            <ul class="toolbar" v-permissions="['business:companydepartment:create']">
+                <li><el-button type="primary" @click="$refs.operaCompanyDepartmentWindow.open('鏂板缓缁勭粐', { disabled: false })" icon="el-icon-plus" v-permissions="['business:companydepartment:create']">鏂板缓</el-button></li>
+                <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['system:menu:delete']">鍒犻櫎</el-button></li>
+                <li><el-button @click="sort('top')" :loading="isWorking.sort" icon="el-icon-sort-up" v-permissions="['system:menu:sort']">涓婄Щ</el-button></li>
+                <li><el-button @click="sort('bottom')" :loading="isWorking.sort" icon="el-icon-sort-down" v-permissions="['system:menu:sort']">涓嬬Щ</el-button></li>
+            </ul>
+            <el-table
+                ref="table"
+                v-loading="isWorking.search"
+                :data="tableData.list"
+                :tree-props="{children: 'childList', hasChildren: 'hasChildren'}"
+                row-key="id"
+                stripe
+                :default-expand-all="false"
+                @selection-change="handleSelectionChange"
+            >
+                <el-table-column type="selection" width="55" fixed="left"></el-table-column>
+                <el-table-column prop="name" label="缁勭粐鍚嶇О" min-width="100px"></el-table-column>
+                <el-table-column prop="name" label="缁勭粐绫诲瀷" min-width="100px"></el-table-column>
+                <el-table-column prop="editorName" label="鎿嶄綔浜�" min-width="100px"></el-table-column>
+                <el-table-column prop="editDate" label="鎿嶄綔鏃堕棿" min-width="100px"></el-table-column>
+                <el-table-column
+                    v-if="containPermissions(['business:companydepartment:update', 'business:companydepartment:delete'])"
+                    label="鎿嶄綔"
+                    min-width="140"
+                    fixed="right"
+                >
+                    <template slot-scope="{row}">
+                        <el-button type="text" @click="$refs.operaCompanyDepartmentWindow.open('缂栬緫缁勭粐', {...row, parentId: [row.id], disabled: true})" icon="el-icon-edit" v-permissions="['business:companydepartment:update']">缂栬緫</el-button>
+                        <el-button type="text" icon="el-icon-plus" @click="$refs.operaCompanyDepartmentWindow.open('鏂板缓瀛愮粍缁�', {...row, id: null, parentId: [row.id], disabled: true})">鏂板缓瀛愮粍缁�</el-button>
+                        <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:companydepartment:delete']">鍒犻櫎</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+        </template>
+        <!-- 鏂板缓/淇敼 -->
+        <OperaCompanyDepartmentWindow ref="operaCompanyDepartmentWindow" @success="handlePageChange"/>
+    </TableLayout>
+</template>
+
+<script>
+  import BaseTable from '@/components/base/BaseTable'
+  import TableLayout from '@/layouts/TableLayout'
+  import Pagination from '@/components/common/Pagination'
+  import OperaCompanyDepartmentWindow from '@/components/business/OperaCompanyDepartmentWindow'
+  import { tree, updateSort } from '@/api/business/companyDepartment'
+  export default {
+    name: 'CompanyDepartment',
+    extends: BaseTable,
+    components: { TableLayout, Pagination, OperaCompanyDepartmentWindow },
+    data () {
+      return {
+        // 鎼滅储
+        searchForm: {
+        },
+        isWorking: {
+          sort: false
+        }
+      }
+    },
+    created () {
+      this.config({
+        module: '浼佷笟淇℃伅琛�',
+        api: '/business/companyDepartment',
+        'field.id': 'id',
+        'field.main': 'id'
+      })
+      this.search()
+    },
+    methods: {
+      // 鏌ヨ鏁版嵁
+      handlePageChange () {
+        this.isWorking.search = true
+        tree()
+          .then(records => {
+            this.tableData.list = records
+          })
+          .catch(e => {
+            this.$tip.apiFailed(e)
+          })
+          .finally(() => {
+            this.isWorking.search = false
+          })
+      },
+      // 鎺掑簭
+      sort (direction) {
+        if (this.isWorking.sort) {
+          return
+        }
+        if (this.tableData.selectedRows.length === 0) {
+          this.$tip.warning('璇烽�夋嫨涓�鏉℃暟鎹�')
+          return
+        }
+        if (this.tableData.selectedRows.length > 1) {
+          this.$tip.warning('鎺掑簭鏃朵粎鍏佽閫夋嫨涓�鏉℃暟鎹�')
+          return
+        }
+        const menuId = this.tableData.selectedRows[0].id
+        // 鎵惧埌鑿滃崟鑼冨洿
+        let menuPool
+        for (const rootMenu of this.tableData.list) {
+          const parent = this.__findParent(menuId, rootMenu)
+          if (parent != null) {
+            menuPool = parent.children
+          }
+        }
+        menuPool = menuPool || this.tableData.list
+        const menuIndex = menuPool.findIndex(menu => menu.id === menuId)
+        // 涓婄Щ鏍¢獙
+        if (direction === 'top' && menuIndex === 0) {
+          this.$tip.warning('鑿滃崟宸插埌椤堕儴')
+          return
+        }
+        // 涓嬬Щ鏍¢獙
+        if (direction === 'bottom' && menuIndex === menuPool.length - 1) {
+          this.$tip.warning('鑿滃崟宸插埌搴曢儴')
+          return
+        }
+        this.isWorking.sort = true
+        updateSort({
+          id: this.tableData.selectedRows[0].id,
+          direction
+        })
+          .then(() => {
+            if (direction === 'top') {
+              menuPool.splice(menuIndex, 0, menuPool.splice(menuIndex - 1, 1)[0])
+            } else {
+              menuPool.splice(menuIndex, 0, menuPool.splice(menuIndex + 1, 1)[0])
+            }
+          })
+          .catch(e => {
+            this.$tip.apiFailed(e)
+          })
+          .finally(() => {
+            this.isWorking.sort = false
+          })
+      },
+      // 鏌ヨ鐖惰妭鐐�
+      __findParent (id, parent) {
+        if (parent.childList === 0) {
+          return
+        }
+        for (const menu of parent.childList) {
+          if (menu.id === id) {
+            return parent
+          }
+          if (menu.childList.length > 0) {
+            const m = this.__findParent(id, menu)
+            if (m != null) {
+              return m
+            }
+          }
+        }
+        return null
+      }
+    }
+  }
+</script>
diff --git a/company/src/views/business/companyUserApply.vue b/company/src/views/business/companyUserApply.vue
new file mode 100644
index 0000000..4a4e0cd
--- /dev/null
+++ b/company/src/views/business/companyUserApply.vue
@@ -0,0 +1,104 @@
+<template>
+    <TableLayout :permissions="['business:companyuserapply:query']">
+        <!-- 鎼滅储琛ㄥ崟 -->
+        <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+            <el-form-item label="鐢宠鐘舵��" prop="status">
+                <el-select v-model="searchForm.status" @change="search" placeholder="璇烽�夋嫨">
+                    <el-option label="寰呭鏍�" :value="0"></el-option>
+                    <el-option label="瀹℃牳閫氳繃" :value="1"></el-option>
+                    <el-option label="瀹℃牳涓嶉�氳繃" :value="2"></el-option>
+                </el-select>
+            </el-form-item>
+            <section>
+                <el-button type="primary" @click="search">鎼滅储</el-button>
+                <el-button @click="reset">閲嶇疆</el-button>
+            </section>
+        </el-form>
+        <!-- 琛ㄦ牸鍜屽垎椤� -->
+        <template v-slot:table-wrap>
+            <ul class="toolbar" v-permissions="['business:companyuserapply:create']" v-if="userInfo.type === 1">
+                <li><el-button type="primary" @click="$refs.operaCompanyUserApplyWindow.open('鏂板缓鐢宠')" icon="el-icon-plus" v-permissions="['business:companyuserapply:create']">鏂板缓</el-button></li>
+            </ul>
+            <el-table
+                v-loading="isWorking.search"
+                :data="tableData.list"
+                stripe
+            >
+                <el-table-column label="搴忓彿" width="80px">
+                    <template slot-scope="scope">
+                        <span>{{scope.$index + 1}}</span>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="realName" label="鐢宠浜�"></el-table-column>
+                <el-table-column prop="userName" label="鎺堟潈璐﹀彿"></el-table-column>
+                <el-table-column prop="content" label="鐢宠璇存槑"></el-table-column>
+                <el-table-column prop="createDate" label="鐢宠鏃堕棿"></el-table-column>
+                <el-table-column label="鐢宠鐘舵��">
+                    <template slot-scope="{row}">
+                        <span style="color: #216EEE;" v-if="row.status === 0">寰呭鏍�</span>
+                        <span style="color: #00BA92;" v-if="row.status === 1">瀹℃牳閫氳繃</span>
+                        <span style="color: red;" v-if="row.status === 2">瀹℃牳涓嶉�氳繃</span>
+                    </template>
+                </el-table-column>
+                <el-table-column
+                    label="鎿嶄綔"
+                    min-width="120"
+                    fixed="right"
+                >
+                    <template slot-scope="{row}">
+                        <el-button type="text" @click="$refs.operaCompanyUserApplyDescWindow.open('鐢宠璁板綍璇︽儏', row.id)" icon="el-icon-view">鏌ョ湅</el-button>
+                        <el-button type="text" v-if="userInfo.type === 0 && row.status === 0" @click="$refs.operaCompanyUserApplyCarefulWindow.open('闆嗗洟鐢宠璁板綍瀹℃牳', row.id)">瀹℃牳</el-button>
+                        <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-if="userInfo.type === 1 && row.status === 0" v-permissions="['business:companyuserapply:delete']">鍒犻櫎</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+            <pagination
+                @size-change="handleSizeChange"
+                @current-change="handlePageChange"
+                :pagination="tableData.pagination"
+            >
+            </pagination>
+        </template>
+        <!-- 鏂板缓/淇敼 -->
+        <OperaCompanyUserApplyWindow ref="operaCompanyUserApplyWindow" @success="handlePageChange"/>
+        <!--    鏌ョ湅    -->
+        <operaCompanyUserApplyDescWindow ref="operaCompanyUserApplyDescWindow" />
+        <!--    瀹℃牳    -->
+        <OperaCompanyUserApplyCarefulWindow ref="operaCompanyUserApplyCarefulWindow" @success="handlePageChange"/>
+    </TableLayout>
+</template>
+
+<script>
+  import BaseTable from '@/components/base/BaseTable'
+  import TableLayout from '@/layouts/TableLayout'
+  import Pagination from '@/components/common/Pagination'
+  import OperaCompanyUserApplyCarefulWindow from '@/components/business/OperaCompanyUserApplyCarefulWindow'
+  import OperaCompanyUserApplyWindow from '@/components/business/OperaCompanyUserApplyWindow'
+  import operaCompanyUserApplyDescWindow from '@/components/business/operaCompanyUserApplyDescWindow'
+  import { mapState } from 'vuex'
+  export default {
+    name: 'CompanyUserApply',
+    extends: BaseTable,
+    components: { TableLayout, Pagination, OperaCompanyUserApplyWindow, operaCompanyUserApplyDescWindow, OperaCompanyUserApplyCarefulWindow },
+    computed: {
+      ...mapState(['userInfo'])
+    },
+    data () {
+      return {
+        // 鎼滅储
+        searchForm: {
+          status: ''
+        }
+      }
+    },
+    created () {
+      this.config({
+        module: '闆嗗洟鐢宠璁板綍琛�',
+        api: '/business/companyUserApply',
+        'field.id': 'id',
+        'field.main': 'id'
+      })
+      this.search()
+    }
+  }
+</script>
diff --git a/company/src/views/business/contract.vue b/company/src/views/business/contract.vue
new file mode 100644
index 0000000..84b03d5
--- /dev/null
+++ b/company/src/views/business/contract.vue
@@ -0,0 +1,172 @@
+<template>
+    <TableLayout :permissions="['business:contract:query']">
+        <!-- 鎼滅储琛ㄥ崟 -->
+        <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+            <el-form-item label="鍚堝悓鍚嶇О" prop="name">
+                <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ュ悎鍚屽悕绉�" @keypress.enter.native="search"></el-input>
+            </el-form-item>
+            <el-form-item label="鍚堝悓绫诲瀷" prop="signType">
+                <el-select v-model="searchForm.signType" placeholder="璇烽�夋嫨" @change="search">
+                    <el-option label="骞冲彴-鍟嗘埛" :value="0"></el-option>
+                    <el-option label="骞冲彴-浼佷笟" :value="1"></el-option>
+                    <el-option label="鍟嗘埛-浼佷笟" :value="2"></el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item label="鐘舵��" prop="queryStatus">
+                <el-select v-model="searchForm.queryStatus" placeholder="璇烽�夋嫨" @change="search">
+                    <el-option label="寰呭钩鍙扮缃�" :value="0"></el-option>
+                    <el-option label="寰呭晢鎴风缃�" :value="1"></el-option>
+                    <el-option label="寰呬紒涓氱缃�" :value="2"></el-option>
+                    <el-option label="宸插畬鎴�" :value="3"></el-option>
+                    <el-option label="宸插彇娑�" :value="4"></el-option>
+                    <el-option label="宸插叧闂�" :value="5"></el-option>
+                </el-select>
+            </el-form-item>
+            <section>
+                <el-button type="primary" @click="search">鎼滅储</el-button>
+                <el-button @click="reset">閲嶇疆</el-button>
+            </section>
+        </el-form>
+        <!-- 琛ㄦ牸鍜屽垎椤� -->
+        <template v-slot:table-wrap>
+            <ul class="toolbar" v-permissions="['business:contract:create']" v-if="[0,2].includes(userInfo.type)">
+                <li><el-button type="primary" @click="$refs.operaContractWindow.open('鏂板缓鍚堝悓淇℃伅琛�', null, userInfo.type)" icon="el-icon-plus" v-permissions="['business:contract:create']">鏂板缓</el-button></li>
+            </ul>
+            <el-table
+                v-loading="isWorking.search"
+                :data="tableData.list"
+                stripe
+            >
+                <el-table-column label="搴忓彿" width="80px">
+                    <template slot-scope="scope">
+                        <span>{{scope.$index + 1}}</span>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="name" label="鍚堝悓鍚嶇О" min-width="100px"></el-table-column>
+                <el-table-column label="鍚堝悓绫诲瀷" min-width="100px">
+                    <template slot-scope="{row}">
+                        <template v-if="row.signType === 0">骞冲彴-鍟嗘埛</template>
+                        <template v-else-if="row.signType === 1">骞冲彴-浼佷笟</template>
+                        <template v-else-if="row.signType === 2">鍟嗘埛-浼佷笟</template>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="companyName" label="鐢蹭箼鏂瑰悕绉�" min-width="100px">
+                    <template slot-scope="{row}">
+                        {{ row.partyCompanyName }} / {{ row.companyName }}
+                    </template>
+                </el-table-column>
+                <el-table-column label="鍚堝悓寮�濮嬫椂闂�" min-width="100px">
+                    <template slot-scope="{row}">
+                        {{ row.startTime }} - {{ row.endTime }}
+                    </template>
+                </el-table-column>
+                <el-table-column label="鐘舵��" min-width="100px">
+                    <template slot-scope="{row}">
+                        <template v-if="row.queryStatus === 0">寰呭钩鍙扮缃�</template>
+                        <template v-else-if="row.queryStatus === 1">寰呭晢鎴风缃�</template>
+                        <template v-else-if="row.queryStatus === 2">寰呬紒涓氱缃�</template>
+                        <template v-else-if="row.queryStatus === 3">宸插畬鎴�</template>
+                        <template v-else-if="row.queryStatus === 4">宸插彇娑�</template>
+                        <template v-else-if="row.queryStatus === 5">宸插叧闂�</template>
+                    </template>
+                </el-table-column>
+                <el-table-column
+                    label="鎿嶄綔"
+                    min-width="150"
+                    fixed="right"
+                >
+                    <template slot-scope="{row}">
+                        <el-button type="text" @click="$refs.operaContractDescWindow.open('鍚堝悓璇︽儏', row.id)" icon="el-icon-view">鏌ョ湅璇︽儏</el-button>
+                        <template v-if="userInfo.type === 0">
+                            <template v-if="(row.signType === 0 && row.status === 0) || (row.signType === 1 && row.status === 0)">
+                                <el-button type="text" @click="sign(row)" icon="el-icon-document-checked">绛剧讲</el-button>
+                            </template>
+                        </template>
+                        <template v-if="userInfo.type === 1">
+                            <template v-if="(row.signType === 1 && row.status === 1) || (row.signType === 2 && row.status === 1)">
+                                <el-button type="text" @click="sign(row)" icon="el-icon-document-checked">绛剧讲</el-button>
+                            </template>
+                        </template>
+                        <template v-if="userInfo.type === 2">
+                            <template v-if="(row.signType === 0 && row.status === 1) || (row.signType === 2 && row.status === 0)">
+                                <el-button type="text" @click="sign(row)" icon="el-icon-document-checked">绛剧讲</el-button>
+                            </template>
+                        </template>
+                        <el-button type="text" icon="el-icon-document-remove" v-if="row.status === 0" @click="cancelHT(row.id)">鍙栨秷</el-button>
+                        <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:contract:delete']" v-if="row.status === 4">鍒犻櫎</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+            <pagination
+                @size-change="handleSizeChange"
+                @current-change="handlePageChange"
+                :pagination="tableData.pagination"
+            >
+            </pagination>
+        </template>
+        <!-- 鏂板缓/淇敼 -->
+        <OperaContractWindow ref="operaContractWindow" @success="handlePageChange"/>
+        <!--    璇︽儏    -->
+        <OperaContractDescWindow ref="operaContractDescWindow" />
+    </TableLayout>
+</template>
+
+<script>
+  import BaseTable from '@/components/base/BaseTable'
+  import TableLayout from '@/layouts/TableLayout'
+  import Pagination from '@/components/common/Pagination'
+  import OperaContractWindow from '@/components/business/OperaContractWindow'
+  import OperaContractDescWindow from '@/components/business/OperaContractDescWindow'
+  import { cancel, getSignLink } from '@/api/business/contract'
+  import { mapState } from 'vuex'
+  export default {
+    name: 'Contract',
+    extends: BaseTable,
+    components: { TableLayout, Pagination, OperaContractWindow, OperaContractDescWindow },
+    computed: {
+      ...mapState(['userInfo'])
+    },
+    data () {
+      return {
+        // 鎼滅储
+        searchForm: {
+          name: '',
+          signType: '',
+          queryStatus: ''
+        }
+      }
+    },
+    created () {
+      this.config({
+        module: '鍚堝悓淇℃伅琛�',
+        api: '/business/contract',
+        'field.id': 'id',
+        'field.main': 'id'
+      })
+      this.search()
+    },
+    methods: {
+      // 绛剧讲
+      sign(row) {
+        getSignLink(row.id)
+          .then(res => {
+            window.open(res)
+          })
+      },
+      // 鍙栨秷鍚堝悓
+      cancelHT(id) {
+        this.$confirm('纭鍙栨秷褰撳墠鍚堝悓鍚�?', '鎻愮ず', {
+          confirmButtonText: '纭畾',
+          cancelButtonText: '鍙栨秷',
+          type: 'warning'
+        }).then(() => {
+          cancel(id).then(res => {
+            this.search()
+          })
+        }).catch(() => {
+
+        });
+      }
+    }
+  }
+</script>
diff --git a/company/src/views/business/customerService.vue b/company/src/views/business/customerService.vue
new file mode 100644
index 0000000..a5a33c6
--- /dev/null
+++ b/company/src/views/business/customerService.vue
@@ -0,0 +1,93 @@
+<template>
+    <TableLayout :permissions="['business:customerservice:query']">
+        <!-- 鎼滅储琛ㄥ崟 -->
+        <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+            <el-form-item label="鍚嶇О" prop="name">
+                <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ュ悕绉�" @keypress.enter.native="search"></el-input>
+            </el-form-item>
+            <el-form-item label="鎵嬫満鍙�" prop="mobile">
+                <el-input v-model="searchForm.mobile" placeholder="璇疯緭鍏ユ墜鏈哄彿" @keypress.enter.native="search"></el-input>
+            </el-form-item>
+            <section>
+                <el-button type="primary" @click="search">鎼滅储</el-button>
+                <el-button @click="reset">閲嶇疆</el-button>
+            </section>
+        </el-form>
+        <!-- 琛ㄦ牸鍜屽垎椤� -->
+        <template v-slot:table-wrap>
+            <ul class="toolbar" v-permissions="['business:customerservice:create']">
+                <li><el-button type="primary" @click="$refs.operaCustomerServiceWindow.open('鏂板璐﹀彿')" icon="el-icon-plus" v-permissions="['business:customerservice:create']">鏂板缓</el-button></li>
+            </ul>
+            <el-table
+                v-loading="isWorking.search"
+                :data="tableData.list"
+                stripe
+            >
+                <el-table-column label="搴忓彿" width="80px">
+                    <template slot-scope="scope">
+                        <span>{{scope.$index + 1}}</span>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="name" label="瀹㈡湇濮撳悕" min-width="100px"></el-table-column>
+                <el-table-column prop="mobile" label="鎵嬫満鍙�" min-width="100px"></el-table-column>
+                <el-table-column prop="companyNum" label="鏈嶅姟浼佷笟鏁�" min-width="100px"></el-table-column>
+                <el-table-column prop="remark" label="澶囨敞" min-width="100px"></el-table-column>
+                <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column>
+                <el-table-column prop="createUserName" label="鍒涘缓浜�" min-width="100px"></el-table-column>
+                <el-table-column
+                    v-if="containPermissions(['business:customerservice:update', 'business:customerservice:delete'])"
+                    label="鎿嶄綔"
+                    min-width="180"
+                    fixed="right"
+                >
+                    <template slot-scope="{row}">
+                        <el-button type="text" @click="$refs.operaCustomerServiceWindow.open('缂栬緫璐﹀彿', row)" icon="el-icon-edit" v-permissions="['business:customerservice:update']">缂栬緫</el-button>
+                        <el-button type="text" @click="$refs.allocateEnterprises.open('鍒嗛厤鏈嶅姟浼佷笟', row.id)" icon="el-icon-connection">浼佷笟鎺堟潈</el-button>
+                        <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:customerservice:delete']">鍒犻櫎</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+            <pagination
+                @size-change="handleSizeChange"
+                @current-change="handlePageChange"
+                :pagination="tableData.pagination"
+            >
+            </pagination>
+        </template>
+        <!-- 鏂板缓/淇敼 -->
+        <OperaCustomerServiceWindow ref="operaCustomerServiceWindow" @success="handlePageChange"/>
+        <!--    鍒嗛厤浼佷笟    -->
+        <allocateEnterprises ref="allocateEnterprises" @success="handlePageChange"/>
+    </TableLayout>
+</template>
+
+<script>
+  import BaseTable from '@/components/base/BaseTable'
+  import TableLayout from '@/layouts/TableLayout'
+  import Pagination from '@/components/common/Pagination'
+  import OperaCustomerServiceWindow from '@/components/business/OperaCustomerServiceWindow'
+  import allocateEnterprises from '@/components/business/allocateEnterprises'
+  export default {
+    name: 'CustomerService',
+    extends: BaseTable,
+    components: { TableLayout, Pagination, OperaCustomerServiceWindow, allocateEnterprises },
+    data () {
+      return {
+        // 鎼滅储
+        searchForm: {
+          name: '',
+          mobile: ''
+        }
+      }
+    },
+    created () {
+      this.config({
+        module: '瀹㈡湇淇℃伅琛�',
+        api: '/business/customerService',
+        'field.id': 'id',
+        'field.main': 'id'
+      })
+      this.search()
+    }
+  }
+</script>
diff --git a/company/src/views/business/insurance.vue b/company/src/views/business/insurance.vue
index 1c463d6..8861143 100644
--- a/company/src/views/business/insurance.vue
+++ b/company/src/views/business/insurance.vue
@@ -27,10 +27,19 @@
                     </template>
                 </el-table-column>
                 <el-table-column prop="name" label="淇濋櫓鍏徃" min-width="100px"></el-table-column>
-                <el-table-column prop="name" label="LOGO" min-width="100px"></el-table-column>
-                <el-table-column prop="name" label="鑻辨枃鍚嶇О" min-width="100px"></el-table-column>
-                <el-table-column prop="name" label="鑱旂郴浜�" min-width="100px"></el-table-column>
-                <el-table-column prop="name" label="鑱旂郴鐢佃瘽" min-width="100px"></el-table-column>
+                <el-table-column prop="logo" label="LOGO" min-width="100px">
+                    <template slot-scope="{row}">
+                        <el-image
+                            v-if="row.logoFullUrl"
+                            style="width: 100px; height: 100px"
+                            :src="row.logoFullUrl"
+                            :preview-src-list="[row.logoFullUrl]">
+                        </el-image>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="englishName" label="鑻辨枃鍚嶇О" min-width="100px"></el-table-column>
+                <el-table-column prop="linkName" label="鑱旂郴浜�" min-width="100px"></el-table-column>
+                <el-table-column prop="linkPhone" label="鑱旂郴鐢佃瘽" min-width="100px"></el-table-column>
                 <el-table-column label="鍚敤鐘舵��" min-width="100px">
                     <template slot-scope="{row}">
                         <el-switch
diff --git a/company/src/views/business/insuranceApply.vue b/company/src/views/business/insuranceApply.vue
index 9f674f5..4a49a27 100644
--- a/company/src/views/business/insuranceApply.vue
+++ b/company/src/views/business/insuranceApply.vue
@@ -3,15 +3,18 @@
         <!-- 鎼滅储琛ㄥ崟 -->
         <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
             <el-form-item label="淇濆崟鐘舵��" prop="statusCollect">
-                <el-select v-model="searchForm.statusCollect" placeholder="璇烽�夋嫨" @keypress.enter.native="search">
-                    <el-option label="寰呭鏍�" value="0"></el-option>
-                    <el-option label="寰呭嚭鍗�" value="1"></el-option>
-                  <el-option label="寰呯缃�" value="7"></el-option>
-                  <el-option label="淇濋殰涓�" value="2"></el-option>
-                  <el-option label="宸茶繃鏈�" value="3"></el-option>
-                  <el-option label="宸查��鍥�" value="4"></el-option>
-                  <el-option label="閫�鍥炵敵璇蜂腑" value="5"></el-option>
-                  <el-option label="宸插叧闂�" value="6"></el-option>
+                <el-select v-model="statusCollect" placeholder="璇烽�夋嫨" @change="changeStatus">
+                    <el-option
+                        v-for="(item, index) in status"
+                        :key="index"
+                        :label="item.label"
+                        :value="item.id" />
+                </el-select>
+            </el-form-item>
+            <el-form-item label="鎶曚繚绫诲瀷" prop="solutionType">
+                <el-select v-model="searchForm.solutionType" placeholder="璇烽�夋嫨" @change="search">
+                    <el-option label="鐩翠繚鎶曚繚" :value="0"></el-option>
+                    <el-option label="濮旀墭鎶曚繚" :value="1"></el-option>
                 </el-select>
             </el-form-item>
             <el-form-item label="鎶曚繚浼佷笟" prop="companyId">
@@ -52,6 +55,9 @@
         </el-form>
         <!-- 琛ㄦ牸鍜屽垎椤� -->
         <template v-slot:table-wrap>
+            <ul class="toolbar">
+                <li><el-button type="primary" @click="$refs.chooseCompany.open('閫夋嫨闇�瑕佹姇淇濈殑浼佷笟')">鏂板</el-button></li>
+            </ul>
               <el-table
                   v-loading="isWorking.search"
                   :data="tableData.list"
@@ -62,9 +68,13 @@
                     <span>{{scope.$index + 1}}</span>
                   </template>
                 </el-table-column>
-                <el-table-column prop="statusInfo"   align="center"  fixed label="鐘舵��">
+                <el-table-column prop="statusInfo" align="center"  fixed label="鐘舵��">
                   <template slot-scope="{row}">
-                    <span :class="'apply-status'+row.status" >{{row.statusInfo}}</span>
+                    <span style="color: #666;" v-if="[9,25,27,5].includes(row.status) && ['宸插叧闂�','宸茶繃鏈�'].includes(row.statusInfo)">{{row.statusInfo}}</span>
+                    <span style="color: red;" v-else-if="row.status === 4 && row.statusInfo === '宸查��鍥�'">{{ row.statusInfo}}</span>
+                    <span style="color: #f95601;" v-else-if="[5,27].includes(row.status) && row.statusInfo === '寰呯敓鏁�'">{{ row.statusInfo}}</span>
+                      <span style="color: #216EEE;" v-else-if="[12].includes(row.status) && row.statusInfo === '寰呭鏍�'">{{ row.statusInfo}}</span>
+                    <span :class="'apply-status'+row.status" v-else>{{row.statusInfo}}</span>
                   </template>
                 </el-table-column>
                 <el-table-column prop="solutionsName" fixed label="淇濋櫓鏂规" align="center" min-width="150"></el-table-column>
@@ -79,26 +89,36 @@
                     <span>{{row.code ? row.code : '-'}}</span>
                   </template>
                 </el-table-column>
-                <el-table-column prop="insureNum" align="center" label="鎶曚繚浜烘暟"  >
-                  <template slot-scope="{row}">
-                    <span>{{(row.insureNum||0)}} 浜�</span>
-                  </template>
-                </el-table-column>
-                <el-table-column prop="guaranteeNum"  align="center" label="鍦ㄤ繚浜烘暟"  >
-                  <template slot-scope="{row}">
-                    <span>{{(row.guaranteeNum||0)}} 浜�</span>
-                  </template>
-                </el-table-column>
+<!--                <el-table-column prop="insureNum" align="center" label="鎶曚繚浜烘暟"  >-->
+<!--                  <template slot-scope="{row}">-->
+<!--                    <span>{{(row.insureNum||0)}} 浜�</span>-->
+<!--                  </template>-->
+<!--                </el-table-column>-->
+                  <el-table-column prop="guaranteeNum"  align="center" label="褰撳墠鍦ㄤ繚浜烘暟" width="120">
+                      <template slot-scope="{row}">
+                          <span>{{(row.guaranteeNum||0)}} 浜�</span>
+                      </template>
+                  </el-table-column>
+<!--                <el-table-column prop="guaranteeNum"  align="center" label="鍦ㄤ繚浜烘暟"  >-->
+<!--                  <template slot-scope="{row}">-->
+<!--                    <span>{{(row.guaranteeNum||0)}} 浜�</span>-->
+<!--                  </template>-->
+<!--                </el-table-column>-->
                 <el-table-column label="鎶曚繚鏃堕暱">
                   <template slot-scope="{row}">
                     <span>{{(row.serviceDays - row.loseEfficacyDays) < 0 ? `-` : (row.serviceDays - row.loseEfficacyDays+'澶�')}}</span>
                   </template>
                 </el-table-column>
-                <el-table-column prop="currentFee" label="宸蹭骇鐢熻垂鐢�"  align="center">
-                  <template slot-scope="{row}">
-                    <span>{{row.currentFee!=null?row.currentFee+' 鍏�': '-'}}</span>
-                  </template>
-                </el-table-column>
+                  <el-table-column prop="fee" label="鎵规敼璐圭敤鍚堣"  align="center" width="120">
+                      <template slot-scope="{row}">
+                          <span>{{row.changeMoney+' 鍏�'}}</span>
+                      </template>
+                  </el-table-column>
+<!--                <el-table-column prop="currentFee" label="宸蹭骇鐢熻垂鐢�"  align="center">-->
+<!--                  <template slot-scope="{row}">-->
+<!--                    <span>{{row.currentFee!=null?row.currentFee+' 鍏�': '-'}}</span>-->
+<!--                  </template>-->
+<!--                </el-table-column>-->
                 <el-table-column prop="fee" label="鎬昏垂鐢�"  align="center">
                   <template slot-scope="{row}">
                     <span>{{row.fee!=null?row.fee+' 鍏�': '-'}}</span>
@@ -127,6 +147,10 @@
         </template>
         <!-- 鏂板缓/淇敼 -->
         <OperaInsuranceApplyWindow ref="operaInsuranceApplyWindow" @success="handlePageChange"/>
+        <!--    閫夋嫨浼佷笟    -->
+        <chooseCompany ref="chooseCompany" @submit="getVal" />
+        <!--    鏂板鎶曚繚    -->
+            <OperaInsuranceApplyAddWindow ref="OperaInsuranceApplyAddWindow" @success="handlePageChange" />
     </TableLayout>
 </template>
 
@@ -137,10 +161,12 @@
 import { all as solutionAll} from '@/api/business/solutions'
 import { pageAll as companyAll} from '@/api/business/company'
 import OperaInsuranceApplyWindow from '@/components/business/OperaInsuranceApplyWindow'
+import OperaInsuranceApplyAddWindow from '@/components/enterprise/OperaInsuranceApplyAddWindow'
+import chooseCompany from '@/components/common/chooseCompany'
 export default {
     name: 'InsuranceApply',
     extends: BaseTable,
-    components: { TableLayout, Pagination, OperaInsuranceApplyWindow },
+    components: { TableLayout, Pagination, OperaInsuranceApplyWindow, chooseCompany, OperaInsuranceApplyAddWindow },
     data () {
         return {
             // 鎼滅储
@@ -149,12 +175,25 @@
                 createTimeE: '',
                 time: [],
                 baseSolutionId: '',
-                 solutionType: 0,
+                solutionType: '',
                 companyId: '',
-                statusCollect: ''
+                statusCollect: '',
             },
+          statusCollect: '',
           solutionList:[],
-          companyList:[]
+          companyList:[],
+          status: [
+            { label: '寰呭鏍�', id: '0' },
+            { label: '寰呭嚭鍗�', id: '1' },
+            { label: '鎶曚繚涓�', id: '26' },
+            { label: '寰呯缃�', id: '7' },
+            { label: '寰呯敓鏁�', id: '2,0' },
+            { label: '淇濋殰涓�', id: '2,1' },
+            { label: '宸茶繃鏈�', id: '2,2' },
+            { label: '宸查��鍥�', id: '4' },
+            { label: '閫�鍥炵敵璇蜂腑', id: '5' },
+            { label: '宸插叧闂�', id: '6' },
+          ]
         }
     },
     created () {
@@ -168,9 +207,25 @@
         this.loadSelectList()
     },
     methods:{
+      changeStatus(e) {
+        if (e.indexOf(',') !== -1) {
+          this.searchForm.timeOut = e.split(',')[1]
+          this.searchForm.statusCollect = e.split(',')[0]
+        } else {
+          this.searchForm.timeOut = ''
+          this.searchForm.statusCollect = e
+        }
+        this.search()
+      },
+      getVal(company) {
+        this.$refs.OperaInsuranceApplyAddWindow.open('鎶曚繚鐢宠', { type: '', companyName: company.companyName, companyId: company.companyId })
+      },
         // 鎼滅储妗嗛噸缃�
         reset () {
             this.$refs.searchForm.resetFields()
+            this.statusCollect = ''
+            this.searchForm.timeOut = ''
+            this.searchForm.statusCollect = ''
             this.searchForm.createTimeS = ''
             this.searchForm.createTimeE = ''
             this.search()
diff --git a/company/src/views/business/member.vue b/company/src/views/business/member.vue
index 1519e05..c1a976f 100644
--- a/company/src/views/business/member.vue
+++ b/company/src/views/business/member.vue
@@ -172,16 +172,11 @@
                     .then(res => {
                         this.solutions = res
                     })
-             /* if(this.userInfo.type ==1){
-                findListByDTO({ dataType: 2 })
-                    .then(res => {
-                      this.options = res
+                if (this.userInfo.type === 0) {
+                    companyAll({}).then(res => {
+                        this.companyList = res
                     })
-              }*/
-
-              companyAll({}).then(res => {
-                this.companyList = res
-              })
+                }
             },
             calculateAge(idNumber) {
                 if (!idNumber) return
diff --git a/company/src/views/business/solutions.vue b/company/src/views/business/solutions.vue
index 2186280..17f8511 100644
--- a/company/src/views/business/solutions.vue
+++ b/company/src/views/business/solutions.vue
@@ -5,6 +5,12 @@
             <el-form-item label="淇濋櫓鏂规" prop="name">
                 <el-input v-model="searchForm.name" placeholder="璇疯緭鍏�" @keypress.enter.native="search"></el-input>
             </el-form-item>
+            <el-form-item label="绛剧讲鐘舵��" prop="signStatus">
+                <el-select v-model="searchForm.signStatus" placeholder="璇烽�夋嫨">
+                    <el-option label="寰呯缃�" :value="0"></el-option>
+                    <el-option label="宸茬缃�" :value="1"></el-option>
+                </el-select>
+            </el-form-item>
             <section>
                 <el-button type="primary" @click="search">鎼滅储</el-button>
                 <el-button @click="reset">閲嶇疆</el-button>
@@ -14,7 +20,7 @@
         <template v-slot:table-wrap>
             <ul class="toolbar" v-permissions="['business:solutions:create']">
                 <template v-if="userInfo.type !== 1">
-                    <li><el-button type="primary" @click="$refs.operaSolutionsWindow.open('鏂板缓淇濋櫓鏂规')" v-permissions="['business:solutions:create']">娣诲姞鏂规</el-button></li>
+                    <li><el-button type="primary" @click="$refs.operaSolutionsWindow.open('鏂板瀛愭柟妗�')" v-permissions="['business:solutions:create']">娣诲姞鏂规</el-button></li>
                 </template>
             </ul>
             <el-table
@@ -27,12 +33,13 @@
                         <span>{{scope.$index + 1}}</span>
                     </template>
                 </el-table-column>
-                <el-table-column prop="name" label="瀛愭柟妗堝悕绉�" min-width="150px"></el-table-column>
-                <el-table-column prop="insuranceName" label="涓绘柟妗�" min-width="100px"></el-table-column>
+                <el-table-column prop="name" label="瀛愭柟妗堝悕绉�" min-width="150px" v-if="userInfo.type === 0"></el-table-column>
+                <el-table-column prop="name" label="鏂规鍚嶇О" min-width="150px" v-if="userInfo.type === 1"></el-table-column>
+                <el-table-column prop="solutionBaseName" label="涓绘柟妗�" min-width="100px" v-if="userInfo.type === 0"></el-table-column>
                 <el-table-column label="鎶曚繚绫诲瀷" min-width="120px" align="center">
                     <template slot-scope="{row}">
-                        <span v-if="row.type === 0">鐩翠繚</span>
-                        <span v-if="row.type === 1">濮旀墭<div style="color: blue;display:  block" >{{row.shopName||'-'}}</div></span>
+                        <span v-if="row.type === 0">鐩翠繚<div style="color: blue;display:  block" >{{ row.shopName || '-' }}</div></span>
+                        <span v-if="row.type === 1">濮旀墭<div style="color: blue;display:  block" >{{ row.shopName || '-' }}</div></span>
                     </template>
                 </el-table-column>
                 <el-table-column label="鎶曚繚浠锋牸" min-width="100px">
@@ -46,31 +53,54 @@
                         <span v-if="row.timeUnit === 5">骞�</span>
                     </template>
                 </el-table-column>
-                <el-table-column prop="name" label="闇�瑕佸瀹�"></el-table-column>
+                <el-table-column prop="retrial" label="闇�瑕佸瀹�" v-if="userInfo.type === 0">
+                    <template slot-scope="{row}">
+                        <span v-if="row.retrial === 0">涓嶉渶瑕�</span>
+                        <span v-if="row.retrial === 1">闇�瑕�</span>
+                    </template>
+                </el-table-column>
                 <el-table-column prop="createDate" label="鏂规鍒涘缓鏃ユ湡" min-width="100px"></el-table-column>
                 <el-table-column prop="status" label="鍚敤鐘舵��" min-width="100px" v-if="userInfo.type !== 1">
                     <template slot-scope="{row}">
                         <el-switch
-                                @change="changeStatus($event, row)"
-                                v-model="row.status"
-                                active-color="#13ce66"
-                                inactive-color="#ff4949"
-                                :active-value="0"
-                                :inactive-value="1">
+                            @change="changeStatus($event, row)"
+                            v-model="row.status"
+                            active-color="#13ce66"
+                            inactive-color="#ff4949"
+                            :active-value="0"
+                            :inactive-value="1">
                         </el-switch>
                     </template>
                 </el-table-column>
+
+                <el-table-column prop="signDate" label="绛剧讲鏃堕棿" min-width="100px" v-if="userInfo.type === 1"></el-table-column>
+                <el-table-column prop="signUserName" label="绛剧讲浜�" min-width="100px" v-if="userInfo.type === 1"></el-table-column>
+                <el-table-column label="绛剧讲鐘舵��" min-width="100px" v-if="userInfo.type === 1">
+                    <template slot-scope="{row}">
+                        <span v-if="row.signStatus === 0">寰呯绔�</span>
+                        <span v-else-if="!row.signStatus">寰呯绔�</span>
+                        <span v-else-if="row.signStatus === 1">宸茬绔�</span>
+                    </template>
+                </el-table-column>
+
                 <el-table-column
                     v-if="containPermissions(['business:solutions:update', 'business:solutions:delete'])"
                     label="鎿嶄綔"
-                    min-width="150"
+                    min-width="230"
                     fixed="right"
                 >
                     <template slot-scope="{row}">
-                        <el-button type="text" @click="$refs.OperaSolutionsDescWindow.open('鏂规璇︽儏', { id: row.id })" icon="el-icon-edit" v-permissions="['business:solutions:update']">鏌ョ湅璇︽儏</el-button>
+                        <el-button type="text" @click="$refs.OperaSolutionsDescWindow.open('瀛愭柟妗堣鎯�', { id: row.id })" icon="el-icon-edit" v-permissions="['business:solutions:update']">鏌ョ湅璇︽儏</el-button>
                         <template v-if="userInfo.type !== 1">
-                            <el-button type="text" @click="$refs.operaSolutionsWindow.open('缂栬緫淇濋櫓鏂规', { id: row.id })" icon="el-icon-edit" v-permissions="['business:solutions:update']">淇敼</el-button>
+                            <el-button type="text" @click="$refs.operaSolutionsWindow.open('缂栬緫瀛愭柟妗�', { id: row.id })" icon="el-icon-edit" v-permissions="['business:solutions:update']">淇敼</el-button>
                         </template>
+                        <template v-if="userInfo.type === 1 && (!row.signStatus || row.signStatus === 0)">
+                            <el-button type="text" icon="el-icon-tickets" @click="sign(row.companySolutionId)">绛剧讲</el-button>
+                        </template>
+                        <template v-if="userInfo.type === 1 && row.signStatus === 1">
+                            <el-button type="text" icon="el-icon-tickets" @click="seeFleSignUrl(row.fileSignUrl)">鏌ョ湅鏂规纭涔�</el-button>
+                        </template>
+                        <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:solutions:delete']">鍒犻櫎</el-button>
                     </template>
                 </el-table-column>
             </el-table>
@@ -85,6 +115,8 @@
         <OperaSolutionsWindow ref="operaSolutionsWindow" @success="handlePageChange"/>
         <!-- 璇︽儏 -->
         <OperaSolutionsDescWindow ref="OperaSolutionsDescWindow" @success="handlePageChange"/>
+        <!-- 棰勮pdf -->
+        <OperaPdfViewerWindow ref="OperaPdfViewerWindow"  />
     </TableLayout>
 </template>
 <script>
@@ -93,19 +125,23 @@
   import Pagination from '@/components/common/Pagination'
   import OperaSolutionsWindow from '@/components/business/OperaSolutionsWindow'
   import OperaSolutionsDescWindow from '@/components/business/OperaSolutionsDescWindow'
+  import OperaPdfViewerWindow from '@/components/business/OperaPdfViewerWindow'
   import { updateStatus } from '@/api/business/solutions'
+  import { getSignLink } from '@/api/business/company'
   import { mapState } from 'vuex'
   export default {
     name: 'Solutions',
     extends: BaseTable,
-    components: { TableLayout, Pagination, OperaSolutionsWindow, OperaSolutionsDescWindow },
+    components: { TableLayout, Pagination, OperaSolutionsWindow, OperaSolutionsDescWindow, OperaPdfViewerWindow },
     data () {
       return {
         // 鎼滅储
         searchForm: {
           name: '',
           status: '',
-          type: ''
+          type: '',
+          signStatus: '',
+          dataType: 0
         }
       }
     },
@@ -127,6 +163,15 @@
       this.search()
     },
     methods: {
+      seeFleSignUrl(url) {
+        this.$refs.OperaPdfViewerWindow.open('鏂规纭涔�', url)
+      },
+      sign(id) {
+        getSignLink(id)
+          .then(res => {
+            window.open(res)
+          })
+      },
       // 淇敼鐘舵��
       changeStatus (status, row) {
         updateStatus({ id: row.id, status })
diff --git a/company/src/views/business/switchCourt.vue b/company/src/views/business/switchCourt.vue
index c329e25..d0e21ae 100644
--- a/company/src/views/business/switchCourt.vue
+++ b/company/src/views/business/switchCourt.vue
@@ -14,6 +14,12 @@
           <el-option label="宸插叧闂�" value="6"></el-option>
         </el-select>
       </el-form-item>
+      <el-form-item label="鎶曚繚绫诲瀷" prop="solutionType">
+        <el-select v-model="searchForm.solutionType" placeholder="璇烽�夋嫨" @change="search">
+          <el-option label="鐩翠繚鎶曚繚" :value="0"></el-option>
+          <el-option label="濮旀墭鎶曚繚" :value="1"></el-option>
+        </el-select>
+      </el-form-item>
       <el-form-item label="鎶曚繚浼佷笟" prop="companyId">
         <el-select v-model="searchForm.companyId" filterable placeholder="璇烽�夋嫨" @change="search">
           <el-option
@@ -52,6 +58,9 @@
     </el-form>
     <!-- 琛ㄦ牸鍜屽垎椤� -->
     <template v-slot:table-wrap>
+      <ul class="toolbar">
+        <li><el-button type="primary" @click="$refs.chooseCompany.open('閫夋嫨浼佷笟')">鏂板</el-button></li>
+      </ul>
       <el-table
           v-loading="isWorking.search"
           :data="tableData.list"
@@ -70,6 +79,7 @@
             <span :class="'change-status'+ row.status" v-if="row.status === 3 || row.status === 4">閫�鍥炵敵璇�</span>
             <span :class="'change-status'+ row.status" v-if="row.status ===5 || row.status === 8">宸查��鍥�</span>
             <span :class="'change-status'+ row.status" v-if="row.status ===6">宸插叧闂�</span>
+            <span :class="'change-status'+ row.status" v-if="row.status ===9">鎵规敼鐢宠涓�</span>
           </template>
         </el-table-column>
         <el-table-column prop="companyName" label="鎶曚繚浼佷笟" min-width="150px" align="center"></el-table-column>
@@ -100,6 +110,10 @@
     </template>
     <!-- 璇︽儏 -->
     <OperaApplyChangeUnitDetailWindow ref="operaApplyChangeDetailWindow" @success="handlePageChange"/>
+    <!--    閫夋嫨浼佷笟    -->
+    <chooseCompany ref="chooseCompany" @submit="getCompany" />
+    <!--    閫夋嫨淇濆崟    -->
+    <selectPolicy ref="selectPolicy" @success="handlePageChange" />
   </TableLayout>
 </template>
 
@@ -110,10 +124,12 @@
 import OperaApplyChangeUnitDetailWindow from '@/components/business/OperaApplyChangeUnitDetailWindow'
 import {all as solutionAll, all} from '@/api/business/solutions'
 import {pageAll as companyAll} from "@/api/business/company";
+import chooseCompany from '@/components/common/chooseCompany'
+import selectPolicy from '@/components/business/selectPolicy'
 export default {
   name: 'switchCourt',
   extends: BaseTable,
-  components: { TableLayout, Pagination, OperaApplyChangeUnitDetailWindow },
+  components: { TableLayout, Pagination, OperaApplyChangeUnitDetailWindow, chooseCompany, selectPolicy },
   data () {
     return {
       // 鎼滅储
@@ -122,7 +138,7 @@
         type: '1',
         solutionsId: '',
         createDateE: '',
-        solutionType: 0,
+        solutionType: '',
         createDateS: '',
         baseSolutionsId: '',
         companyId: '',
@@ -143,6 +159,9 @@
     this.loadSelectList()
   },
   methods: {
+    getCompany(e) {
+      this.$refs.selectPolicy.open('閫夋嫨淇濆崟', e.companyId, 2)
+    },
     loadSelectList() {
       solutionAll({dataType:2,type:0}).then(res => {
         this.solutionList = res
diff --git a/company/src/views/business/unionApply.vue b/company/src/views/business/unionApply.vue
index 3944843..cf2521e 100644
--- a/company/src/views/business/unionApply.vue
+++ b/company/src/views/business/unionApply.vue
@@ -2,13 +2,15 @@
     <TableLayout :permissions="['business:insuranceapply:query']">
         <!-- 鎼滅储琛ㄥ崟 -->
         <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
-            <el-form-item label="淇濆崟鐘舵��" prop="status" >
-                <el-select v-model="searchForm.status" placeholder="璇烽�夋嫨"  clearable   @keypress.enter.native="search">
+            <el-form-item label="淇濆崟鐘舵��" prop="queryStatus" >
+                <el-select v-model="searchForm.queryStatus" placeholder="璇烽�夋嫨" clearable @change="search">
                     <el-option label="寰呭鏍�" value="0"></el-option>
                     <el-option label="寰呯缃�" value="1"></el-option>
                     <el-option label="寰呭嚭鍗�" value="2"></el-option>
                     <el-option label="淇濋殰涓�" value="3"></el-option>
                     <el-option label="宸查��鍥�" value="4"></el-option>
+                    <el-option label="寰呯敓鏁�" value="5"></el-option>
+                    <el-option label="宸茶繃鏈�" value="6"></el-option>
                 </el-select>
             </el-form-item>
             <el-form-item label="淇濋櫓鏂规" prop="solutionId">
@@ -39,9 +41,9 @@
         </el-form>
         <!-- 琛ㄦ牸鍜屽垎椤� -->
         <template v-slot:table-wrap>
-            <ul class="toolbar"  v-if="userInfo.type==2"  v-permissions="['business:unionapply:create']">
-                <li><el-button type="primary" @click="$refs.OpearaUnionApply.open('濮旀墭鎶曚繚鐢宠')" v-permissions="['business:unionapply:create']">鎻愪氦鐢宠</el-button></li>
-            </ul>
+<!--            <ul class="toolbar"  v-if="userInfo.type==2"  v-permissions="['business:unionapply:create']">-->
+<!--                <li><el-button type="primary" @click="$refs.OpearaUnionApply.open('濮旀墭鎶曚繚鐢宠')" v-permissions="['business:unionapply:create']">鎻愪氦鐢宠</el-button></li>-->
+<!--            </ul>-->
             <el-table
                 v-loading="isWorking.search"
                 :data="tableData.list"
@@ -54,7 +56,11 @@
                 </el-table-column>
                 <el-table-column prop="statusInfo" label="鐘舵��" min-width="100px">
                     <template slot-scope="{row}">
-                        <span :class="'union-apply-status'+row.status"  >{{ row.statusInfo}}</span>
+                        <span v-if="row.status === 3 && row.statusInfo === '宸茶繃鏈�'" style="color: #999;">{{ row.statusInfo}}</span>
+                        <span v-else-if="row.status === 3 && row.statusInfo === '寰呯敓鏁�'" style="color: #f95601;">{{ row.statusInfo}}</span>
+                        <span v-else-if="row.status === 4 && row.statusInfo === '宸查��鍥�'" style="color: red;">{{ row.statusInfo}}</span>
+                        <span v-else-if="row.status === 5 && row.statusInfo === '寰呭鏍�'" style="color: #216EEE;">{{ row.statusInfo}}</span>
+                        <span :class="'union-apply-status'+row.status" v-else>{{ row.statusInfo}}</span>
                     </template>
                 </el-table-column>
                 <el-table-column prop="solutionName" label="淇濋櫓鏂规" min-width="100px"></el-table-column>
@@ -106,7 +112,7 @@
                     queryStartTime: '',
                     queryEndTime: '',
                     solutionId: '',
-                    status: '',
+                    queryStatus: '',
                     time: []
                 },
                 solutionList: []
diff --git a/company/src/views/business/unionChange.vue b/company/src/views/business/unionChange.vue
index b06f1e6..3a5e242 100644
--- a/company/src/views/business/unionChange.vue
+++ b/company/src/views/business/unionChange.vue
@@ -31,9 +31,9 @@
         </el-form>
         <!-- 琛ㄦ牸鍜屽垎椤� -->
         <template v-slot:table-wrap>
-            <ul class="toolbar"  v-if="userInfo.type==2" v-permissions="['business:unionchange:create']">
-                <li><el-button type="primary" @click="$refs.OpearaUnionChange.open('鍔犲噺淇濈敵璇�')" v-permissions="['business:unionchange:create']">鎻愪氦鐢宠</el-button></li>
-            </ul>
+<!--            <ul class="toolbar"  v-if="userInfo.type==2 && " v-permissions="['business:unionchange:create']">-->
+<!--                <li><el-button type="primary" @click="$refs.OpearaUnionChange.open('鍔犲噺淇濈敵璇�')" v-permissions="['business:unionchange:create']">鎻愪氦鐢宠</el-button></li>-->
+<!--            </ul>-->
             <el-table
                 v-loading="isWorking.search"
                 :data="tableData.list"
@@ -49,7 +49,7 @@
                         <span :class="'union-change-status'+row.status" v-if="row.status === 0">寰呯缃�</span>
                         <span :class="'union-change-status'+row.status" v-if="row.status === 1">寰呭鏍�</span>
                         <span :class="'union-change-status'+row.status" v-if="row.status === 2">宸茬敓鏁�</span>
-                        <span :class="'union-change-status'+row.status" v-if="row.status === 3">宸查��鍥�</span>
+                        <span style="color: red;" v-if="row.status === 3">宸查��鍥�</span>
                     </template>
                 </el-table-column>
                  <el-table-column align="center" prop="applyCode" label="鍏宠仈淇濆崟鍙�" min-width="150px"></el-table-column>
diff --git a/company/src/views/business/unionChangeUnit.vue b/company/src/views/business/unionChangeUnit.vue
index cc0beb3..1b2b926 100644
--- a/company/src/views/business/unionChangeUnit.vue
+++ b/company/src/views/business/unionChangeUnit.vue
@@ -4,10 +4,10 @@
     <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
       <el-form-item label="淇濆崟鐘舵��" prop="status">
         <el-select v-model="searchForm.status" clearable  @change="search">
-          <el-option label="寰呯缃�" value="1"></el-option>
-          <el-option label="寰呭鏍�" value="2"></el-option>
-          <el-option label="宸茬敓鏁�" value="3"></el-option>
-          <el-option label="宸查��鍥�" value="4"></el-option>
+            <el-option label="寰呯缃�" value="0"></el-option>
+            <el-option label="寰呭鏍�" value="1"></el-option>
+            <el-option label="宸茬敓鏁�" value="2"></el-option>
+            <el-option label="宸查��鍥�" value="3"></el-option>
         </el-select>
       </el-form-item>
       <el-form-item label="淇濋櫓鏂规" prop="solutionName">
@@ -31,9 +31,9 @@
     </el-form>
     <!-- 琛ㄦ牸鍜屽垎椤� -->
     <template v-slot:table-wrap>
-      <ul class="toolbar"  v-if="userInfo.type==2" v-permissions="['business:unionchange:create']">
-        <li><el-button type="primary" @click="$refs.OpearaUnionChangeUnit.open('鏇存崲娲鹃仯鍗曚綅鐢宠')" v-permissions="['business:unionchange:create']">鎻愪氦鐢宠</el-button></li>
-      </ul>
+<!--      <ul class="toolbar"  v-if="userInfo.type==2" v-permissions="['business:unionchange:create']">-->
+<!--        <li><el-button type="primary" @click="$refs.OpearaUnionChangeUnit.open('鏇存崲娲鹃仯鍗曚綅鐢宠')" v-permissions="['business:unionchange:create']">鎻愪氦鐢宠</el-button></li>-->
+<!--      </ul>-->
       <el-table
           v-loading="isWorking.search"
           :data="tableData.list"
@@ -46,10 +46,10 @@
         </el-table-column>
          <el-table-column align="center" prop="status" label="淇濆崟鐘舵��" min-width="80px">
           <template slot-scope="{row}">
-            <span :class="'union-change-status'+row.status" v-if="row.status === 0">寰呯缃�</span>
-            <span :class="'union-change-status'+row.status" v-if="row.status === 1">寰呭鏍�</span>
-            <span :class="'union-change-status'+row.status" v-if="row.status === 2">宸茬敓鏁�</span>
-            <span :class="'union-change-status'+row.status" v-if="row.status === 3">宸查��鍥�</span>
+              <span :class="'union-change-status'+row.status" v-if="row.status === 0">寰呯缃�</span>
+              <span :class="'union-change-status'+row.status" v-if="row.status === 1">寰呭鏍�</span>
+              <span :class="'union-change-status'+row.status" v-if="row.status === 2">宸茬敓鏁�</span>
+              <span style="color: red;" v-if="row.status === 3">宸查��鍥�</span>
           </template>
         </el-table-column>
          <el-table-column align="center" prop="applyCode" label="鍏宠仈淇濆崟鍙�" min-width="150px"></el-table-column>
diff --git a/company/src/views/business/userManagement.vue b/company/src/views/business/userManagement.vue
new file mode 100644
index 0000000..f0d98fb
--- /dev/null
+++ b/company/src/views/business/userManagement.vue
@@ -0,0 +1,141 @@
+<template>
+    <TableLayout :permissions="['system:user:query']">
+        <!-- 鎼滅储琛ㄥ崟 -->
+        <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="80px" inline>
+            <el-form-item label="璐﹀彿" prop="username">
+                <el-input v-model="searchForm.username" v-trim placeholder="璇疯緭鍏�" @keypress.enter.native="search"/>
+            </el-form-item>
+            <el-form-item label="濮撳悕" prop="realname">
+                <el-input v-model="searchForm.realname" v-trim placeholder="璇疯緭鍏�" @keypress.enter.native="search"/>
+            </el-form-item>
+            <el-form-item label="鑱旂郴鏂瑰紡" prop="mobile">
+                <el-input v-model="searchForm.mobile" v-trim placeholder="璇疯緭鍏�" @keypress.enter.native="search"/>
+            </el-form-item>
+            <el-form-item label="浼佷笟鍚嶇О" prop="companyName">
+                <el-input v-model="searchForm.companyName" v-trim placeholder="璇疯緭鍏�" @keypress.enter.native="search"/>
+            </el-form-item>
+            <section>
+                <el-button type="primary" icon="el-icon-search" @click="search">鎼滅储</el-button>
+                <el-button @click="reset">閲嶇疆</el-button>
+            </section>
+        </el-form>
+        <!-- 琛ㄦ牸鍜屽垎椤� -->
+        <template v-slot:table-wrap>
+            <el-table
+                v-loading="isWorking.search"
+                :data="tableData.list"
+                :default-sort = "{prop: 'createTime', order: 'descending'}"
+                stripe
+                @sort-change="handleSortChange"
+            >
+                <el-table-column label="搴忓彿" width="80px">
+                    <template slot-scope="scope">
+                        <span>{{scope.$index + 1}}</span>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="username" label="璐﹀彿" min-width="120px"></el-table-column>
+                <el-table-column prop="realname" label="濮撳悕" min-width="100px"></el-table-column>
+                <el-table-column prop="mobile" label="鑱旂郴鏂瑰紡" min-width="100px"></el-table-column>
+                <el-table-column prop="companyName" label="褰掑睘鍏徃" min-width="100px"></el-table-column>
+                <el-table-column label="鎺堟潈浼佷笟" min-width="100px">
+                    <template slot-scope="{row}">
+                        <span>{{row.authNum}}瀹�</span>
+                    </template>
+                </el-table-column>
+                <el-table-column label="鏄惁瓒呯" min-width="100px">
+                    <template slot-scope="{row}">
+                        <span v-if="row.isAdmin === '1'">鏄�</span>
+                        <span v-if="row.isAdmin === '0'">鍚�</span>
+                    </template>
+                </el-table-column>
+                <el-table-column label="鐘舵��" min-width="100px">
+                    <template slot-scope="{row}">
+                        <el-switch
+                            v-if="!row.fixed"
+                            @change="changeStatus($event, row)"
+                            v-model="row.status"
+                            active-color="#13ce66"
+                            inactive-color="#ff4949"
+                            :active-value="0"
+                            :inactive-value="1">
+                        </el-switch>
+                    </template>
+                </el-table-column>
+                <el-table-column
+                    label="鎿嶄綔"
+                    width="100"
+                    fixed="right"
+                >
+                    <template slot-scope="{row}">
+                        <el-button type="text" @click="$refs.authorizedEnterprise.open('鎺堟潈浼佷笟璁板綍', row.id)">鎺堟潈浼佷笟</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+            <pagination
+                @size-change="handleSizeChange"
+                @current-change="handlePageChange"
+                :pagination="tableData.pagination"
+            ></pagination>
+        </template>
+        <authorizedEnterprise ref="authorizedEnterprise" />
+    </TableLayout>
+</template>
+
+<script>
+  import Pagination from '@/components/common/Pagination'
+  import TableLayout from '@/layouts/TableLayout'
+  import BaseTable from '@/components/base/BaseTable'
+  import { updUserStatus } from '@/api/system/user'
+  import authorizedEnterprise from '@/components/business/authorizedEnterprise'
+  export default {
+    name: 'userManagement',
+    extends: BaseTable,
+    components: { TableLayout, Pagination, authorizedEnterprise },
+    data () {
+      return {
+        // 鎼滅储
+        searchForm: {
+          username: '',
+          realname: '',
+          mobile: '',
+          companyName: '',
+          type: 1
+        }
+      }
+    },
+    created () {
+      this.config({
+        module: '鐢ㄦ埛',
+        api: '/system/user',
+        'field.main': 'realname',
+        sorts: [{
+          property: 'CREATE_TIME',
+          direction: 'DESC'
+        }]
+      })
+      this.search()
+    },
+    methods: {
+      changeStatus(status, row) {
+        updUserStatus({
+          id: row.id,
+          status
+        }).then(res => {
+          this.search()
+        }).catch(err => {
+          row.status = row.status === 0 ? 1 : 0
+        })
+      }
+    }
+  }
+</script>
+
+<style scoped lang="scss">
+    @import "@/assets/style/variables.scss";
+    // 鍒楄〃澶村儚澶勭悊
+    .table-column-avatar {
+        img {
+            width: 48px;
+        }
+    }
+</style>
diff --git a/company/src/views/enterprise/insuranceApply.vue b/company/src/views/enterprise/insuranceApply.vue
index 1013974..73fc0c6 100644
--- a/company/src/views/enterprise/insuranceApply.vue
+++ b/company/src/views/enterprise/insuranceApply.vue
@@ -3,16 +3,12 @@
         <!-- 鎼滅储琛ㄥ崟 -->
         <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
             <el-form-item label="鐘舵��" prop="statusCollect">
-                <el-select v-model="searchForm.statusCollect" placeholder="璇烽�夋嫨" @change="search">
-                    <el-option label="寰呭鏍�" value="0"></el-option>
-                    <el-option label="寰呭嚭鍗�" value="1"></el-option>
-                    <el-option label="寰呯缃�" value="7"></el-option>
-                    <el-option label="淇濋殰涓�" value="2"></el-option>
-                    <el-option label="宸茶繃鏈�" value="3"></el-option>
-                    <el-option label="宸查��鍥�" value="4"></el-option>
-                    <el-option label="閫�鍥炵敵璇蜂腑" value="5"></el-option>
-                    <el-option label="宸插叧闂�" value="6"></el-option>
-                    <el-option label="鎶曚繚涓�" value="26"></el-option>
+                <el-select v-model="statusCollect" placeholder="璇烽�夋嫨" @change="changeStatus">
+                    <el-option
+                        v-for="(item, index) in status"
+                        :key="index"
+                        :label="item.label"
+                        :value="item.id" />
                 </el-select>
             </el-form-item>
             <el-form-item label="淇濋櫓鏂规" prop="baseSolutionId">
@@ -58,7 +54,12 @@
             </el-table-column>
             <el-table-column prop="statusInfo"   align="center"  fixed label="鐘舵��">
               <template slot-scope="{row}">
-                <span :class="'apply-status'+row.status" >{{row.statusInfo}}</span>
+                  <span style="color: #666;" v-if="[9,25,27,5].includes(row.status) && ['宸插叧闂�','宸茶繃鏈�'].includes(row.statusInfo)">{{row.statusInfo}}</span>
+                  <span style="color: red;" v-else-if="row.status === 4 && row.statusInfo === '宸查��鍥�'">{{ row.statusInfo}}</span>
+                  <span style="color: #f95601;" v-else-if="[5,27].includes(row.status) && row.statusInfo === '寰呯敓鏁�'">{{ row.statusInfo}}</span>
+                  <span style="color: #216EEE;" v-else-if="[12].includes(row.status) && row.statusInfo === '寰呭鏍�'">{{ row.statusInfo}}</span>
+                  <span :class="'apply-status'+row.status" v-else>{{row.statusInfo}}</span>
+<!--                <span :class="'apply-status'+row.status" >{{row.statusInfo}}</span>-->
               </template>
             </el-table-column>
             <el-table-column prop="solutionsName" fixed label="淇濋櫓鏂规" align="center" min-width="150"></el-table-column>
@@ -73,26 +74,31 @@
                 <span>{{row.code ? row.code : '-'}}</span>
               </template>
             </el-table-column>
-            <el-table-column prop="insureNum" align="center" label="鎶曚繚浜烘暟"  >
-              <template slot-scope="{row}">
-                <span>{{(row.insureNum||0)}} 浜�</span>
-              </template>
-            </el-table-column>
-            <el-table-column prop="guaranteeNum"  align="center" label="鍦ㄤ繚浜烘暟"  >
-              <template slot-scope="{row}">
-                <span>{{(row.guaranteeNum||0)}} 浜�</span>
-              </template>
-            </el-table-column>
+<!--            <el-table-column prop="insureNum" align="center" label="鎶曚繚浜烘暟"  >-->
+<!--              <template slot-scope="{row}">-->
+<!--                <span>{{(row.insureNum||0)}} 浜�</span>-->
+<!--              </template>-->
+<!--            </el-table-column>-->
+              <el-table-column prop="guaranteeNum"  align="center" label="褰撳墠鍦ㄤ繚浜烘暟" width="120">
+                  <template slot-scope="{row}">
+                      <span>{{(row.guaranteeNum||0)}} 浜�</span>
+                  </template>
+              </el-table-column>
             <el-table-column label="鎶曚繚鏃堕暱">
               <template slot-scope="{row}">
                 <span>{{(row.serviceDays - row.loseEfficacyDays) < 0 ? `-` : (row.serviceDays - row.loseEfficacyDays+'澶�')}}</span>
               </template>
             </el-table-column>
-            <el-table-column prop="currentFee" label="宸蹭骇鐢熻垂鐢�"  align="center">
-              <template slot-scope="{row}">
-                <span>{{row.currentFee!=null?row.currentFee+' 鍏�': '-'}}</span>
-              </template>
-            </el-table-column>
+<!--            <el-table-column prop="currentFee" label="宸蹭骇鐢熻垂鐢�"  align="center">-->
+<!--              <template slot-scope="{row}">-->
+<!--                <span>{{row.currentFee!=null?row.currentFee+' 鍏�': '-'}}</span>-->
+<!--              </template>-->
+<!--            </el-table-column>-->
+              <el-table-column prop="fee" label="鎵规敼璐圭敤鍚堣"  align="center" width="120">
+                  <template slot-scope="{row}">
+                      <span>{{row.changeMoney+' 鍏�'}}</span>
+                  </template>
+              </el-table-column>
             <el-table-column prop="fee" label="鎬昏垂鐢�"  align="center">
               <template slot-scope="{row}">
                 <span>{{row.fee!=null?row.fee+' 鍏�': '-'}}</span>
@@ -110,10 +116,10 @@
             >
               <template slot-scope="{row}">
                 <el-button type="text" @click="godetail(row)" v-permissions="['business:insuranceapply:update']">鏌ョ湅璇︽儏</el-button>
-                <!--     <el-button type="text" @click="$refs.OperaApplyChangeMonthWindow.open('鍔犲噺淇濇湀搴﹁垂鐢ㄧ粺璁�',row)" v-permissions="['business:applychange:query']">鍔犲噺淇濊垂鐢�</el-button>
-                                 <template v-if="row.statusCollect === 2">-->
-                <!--                            <el-button type="text" @click="$refs.additionSubtractionApplication.open('鍔犲噺淇濈敵璇�', { id: row.id })">鍔犲噺淇濈敵璇�</el-button>-->
-                <!--                        </template>-->
+<!--                <el-button type="text" @click="$refs.OperaApplyChangeMonthWindow.open('鍔犲噺淇濇湀搴﹁垂鐢ㄧ粺璁�',row)" v-permissions="['business:applychange:query']">鍔犲噺淇濊垂鐢�</el-button>-->
+                <template v-if="isShow(row.status, row.endTime)">
+                    <el-button type="text" @click="$refs.additionSubtractionApplication.open('鍔犲噺淇濈敵璇�', { id: row.id })">鍔犲噺淇濈敵璇�</el-button>
+                </template>
               </template>
             </el-table-column>
           </el-table>
@@ -132,6 +138,8 @@
         <OperaWtbApplyShopWindow ref="OperaWtbApplyShopWindow" @success="handlePageChange" />
         <!--    鎶曚繚璇︽儏    -->
         <OperaInsuranceApplyDetails ref="OperaInsuranceApplyDetails" @success="handlePageChange" />
+        <!--    鍔犲噺淇濈敵璇�    -->
+        <additionSubtractionApplication ref="additionSubtractionApplication" @success="handlePageChange" />
     </TableLayout>
 </template>
 <script>
@@ -141,6 +149,7 @@
 import OperaInsuranceApplyAddWindow from '@/components/enterprise/OperaInsuranceApplyAddWindow'
 import OperaInsuranceApplyDetails from '@/components/business/OperaInsuranceApplyWindow'
 import OperaWtbApplyShopWindow from '@/components/business/OperaWtbApplyShopWindow'
+import additionSubtractionApplication from '@/components/enterprise/additionSubtractionApplication'
 import OperaApplyChangeMonthWindow from '@/components/business/OperaApplyChangeMonthWindow'
 
 import { all as solutionAll } from '@/api/business/solutions'
@@ -149,7 +158,7 @@
   extends: BaseTable,
   components: { TableLayout, Pagination,
     // OperaApplyChangeMonthWindow,
-    OperaInsuranceApplyAddWindow, OperaInsuranceApplyDetails,OperaWtbApplyShopWindow },
+    OperaInsuranceApplyAddWindow, OperaInsuranceApplyDetails,OperaWtbApplyShopWindow, additionSubtractionApplication },
   data () {
     return {
       // 鎼滅储
@@ -157,9 +166,23 @@
         createTimeS: '',
         createTimeE: '',
         baseSolutionId: '',
-        statusCollect: ''
+        statusCollect: '',
+        timeOut: ''
       },
-      solutionList: []
+      statusCollect: '',
+      solutionList: [],
+      status: [
+        { label: '寰呭鏍�', id: '0' },
+        { label: '寰呭嚭鍗�', id: '1' },
+        { label: '鎶曚繚涓�', id: '26' },
+        { label: '寰呯缃�', id: '7' },
+        { label: '寰呯敓鏁�', id: '2,0' },
+        { label: '淇濋殰涓�', id: '2,1' },
+        { label: '宸茶繃鏈�', id: '2,2' },
+        { label: '宸查��鍥�', id: '4' },
+        { label: '閫�鍥炵敵璇蜂腑', id: '5' },
+        { label: '宸插叧闂�', id: '6' },
+      ]
     }
   },
   created () {
@@ -173,14 +196,32 @@
     this.loadSelectList()
   },
   methods: {
+    // 鍒ゆ柇鏄惁鏄剧ず鍔犲噺淇�
+    isShow(status, endTime) {
+      const currentDate = new Date();
+      const specifiedDate = new Date(endTime);
+      return [5,27].includes(status) && (currentDate < specifiedDate);
+    },
+    changeStatus(e) {
+      if (e.indexOf(',') !== -1) {
+        this.searchForm.timeOut = e.split(',')[1]
+        this.searchForm.statusCollect = e.split(',')[0]
+      } else {
+        this.searchForm.timeOut = ''
+        this.searchForm.statusCollect = e
+      }
+      this.search()
+    },
       reset() {
-          this.searchForm.createTimeS = ''
-          this.searchForm.createTimeE = ''
-          this.$refs.searchForm.resetFields()
-          this.search()
+        this.searchForm.createTimeS = ''
+        this.searchForm.timeOut = ''
+        this.searchForm.createTimeE = ''
+        this.statusCollect = ''
+        this.searchForm.statusCollect = ''
+        this.$refs.searchForm.resetFields()
+        this.search()
       },
     result(flag,param){
-      console.log(flag,param)
       if(param && param.godetail && param.id){
         if (param.type == 1) {
           this.$refs.OperaWtbApplyShopWindow.open('濮旀墭鎶曚繚璇︽儏', { id: param.id })
diff --git a/company/src/views/enterprise/myPolicy.vue b/company/src/views/enterprise/myPolicy.vue
index b711b90..2f1dd47 100644
--- a/company/src/views/enterprise/myPolicy.vue
+++ b/company/src/views/enterprise/myPolicy.vue
@@ -23,7 +23,7 @@
             </el-form-item>
             <el-form-item label="鐘舵��" prop="timeOut">
                 <el-select v-model="searchForm.timeOut" placeholder="璇烽�夋嫨" @change="search">
-                    <el-option label="鏈紑濮�" value="0"></el-option>
+                    <el-option label="寰呯敓鏁�" value="0"></el-option>
                     <el-option label="淇濋殰涓�" value="1"></el-option>
                     <el-option label="宸茶繃鏈�" value="2"></el-option>
                 </el-select>
@@ -97,7 +97,9 @@
                 </el-table-column>
                 <el-table-column prop="statusInfo" align="center" fixed label="鐘舵��">
                   <template slot-scope="{row}">
-                    <span :class="'apply-status'+row.status">{{row.statusInfo}}</span>
+                    <span style="color:#f95601;" v-if="row.status === 5 && row.statusInfo === '寰呯敓鏁�'">{{row.statusInfo}}</span>
+                    <span style="color:#999;" v-else-if="row.status === 5 && row.statusInfo === '宸茶繃鏈�'">{{row.statusInfo}}</span>
+                    <span :class="'apply-status'+row.status" v-else>{{row.statusInfo}}</span>
                   </template>
                 </el-table-column>
                 <el-table-column prop="solutionsName" align="center" fixed label="淇濋櫓鏂规" min-width="150"></el-table-column>
@@ -156,7 +158,7 @@
                         <el-button type="text" @click="godetail(row)" v-permissions="['business:insuranceapply:update']">鏌ョ湅璇︽儏</el-button>
                       <!--                        <el-button type="text" @click="$refs.OperaApplyChangeMonthWindow.open('鍔犲噺淇濇湀搴﹁垂鐢ㄧ粺璁�',row)" v-permissions="['business:applychange:query']">鍔犲噺淇濊垂鐢�</el-button>
                                           <template v-if="row.statusCollect === 2">-->
-                        <el-button type="text" @click="$refs.additionSubtractionApplication.open('鍔犲噺淇濈敵璇�', { id: row.id })">鍔犲噺淇濈敵璇�</el-button>
+                        <el-button type="text" @click="$refs.additionSubtractionApplication.open('鍔犲噺淇濈敵璇�', { id: row.id })" v-if="isShow(row.status, row.endTime)">鍔犲噺淇濈敵璇�</el-button>
 <!--                        </template>-->
                     </template>
                 </el-table-column>
@@ -216,7 +218,7 @@
         startTimeE: '',
         startTimeS: '',
         baseSolutionId: '',
-        status: '5',
+        status: '5,27',
         solutionType: '',
         timeOut: ''
       },
@@ -241,6 +243,12 @@
     this.getNum()
   },
   methods: {
+    // 鍒ゆ柇鏄惁鏄剧ず鍔犲噺淇�
+    isShow(status, endTime) {
+      const currentDate = new Date();
+      const specifiedDate = new Date(endTime);
+      return [5,27].includes(status) && (currentDate < specifiedDate);
+    },
     godetail (row) {
       if (row.solutionType == 1) {
         this.$refs.OperaWtbApplyShopWindow.open('濮旀墭鎶曚繚璇︽儏', { id: row.id })
diff --git a/company/src/views/index.vue b/company/src/views/index.vue
index ff4cb7f..80fc354 100644
--- a/company/src/views/index.vue
+++ b/company/src/views/index.vue
@@ -115,7 +115,7 @@
           </div>
           <div class="home_content_right_page">
             <el-pagination
-                @current-change="handleCurrentChange2"
+                @current-change="handleCurrentChange6"
                 :current-page="page2"
                 :page-size="5"
                 layout="total, prev, pager, next, jumper"
@@ -123,10 +123,105 @@
             </el-pagination>
           </div>
         </div>
+
+        <div v-if="activeName === '6'">
+          <div class="home_content_right_list" v-if="tableData6 && tableData6.length">
+            <div class="list_item" v-for="(item, index) in tableData6" :key="index">
+              <div class="list_item_left">
+                <span>{{item.title}}锛坽{ item.typeDetail }}锛�</span>
+                <span>{{item.content}}</span>
+              </div>
+              <div class="list_item_center">
+                <span>{{item.companyName}}</span>
+                <span>鎻愪氦鏃堕棿  {{item.createDate}}</span>
+              </div>
+              <div class="list_item_right">
+                <span @click="jump('/business/contract')">鏌ョ湅</span>
+              </div>
+            </div>
+          </div>
+          <div class="home_content_right_list" v-else>
+            <div class="list_item" style="width: 100%;font-size: 12px;display:block;color: #8c939d;text-align: center; padding: 20px">
+              鏆傛棤娑堟伅
+            </div>
+          </div>
+          <div class="home_content_right_page">
+            <el-pagination
+              @current-change="handleCurrentChange6"
+              :current-page="page6"
+              :page-size="5"
+              layout="total, prev, pager, next, jumper"
+              :total="totalPage6">
+            </el-pagination>
+          </div>
+        </div>
+        <div v-if="activeName === '7'">
+          <div class="home_content_right_list" v-if="tableData7 && tableData7.length">
+            <div class="list_item" v-for="(item, index) in tableData7" :key="index">
+              <div class="list_item_left">
+                <span>{{item.title}}锛坽{ item.typeDetail }}锛�</span>
+                <span>{{item.content}}</span>
+              </div>
+              <div class="list_item_center">
+                <span>{{item.companyName}}</span>
+                <span>鎻愪氦鏃堕棿  {{item.createDate}}</span>
+              </div>
+              <div class="list_item_right">
+                <span @click="jump('/business/solutions')">鏌ョ湅</span>
+              </div>
+            </div>
+          </div>
+          <div class="home_content_right_list" v-else>
+            <div class="list_item" style="width: 100%;font-size: 12px;display:block;color: #8c939d;text-align: center; padding: 20px">
+              鏆傛棤娑堟伅
+            </div>
+          </div>
+          <div class="home_content_right_page">
+            <el-pagination
+              @current-change="handleCurrentChange7"
+              :current-page="page7"
+              :page-size="5"
+              layout="total, prev, pager, next, jumper"
+              :total="totalPage7">
+            </el-pagination>
+          </div>
+        </div>
+        <div v-if="activeName === '8'">
+          <div class="home_content_right_list" v-if="tableData8 && tableData8.length">
+            <div class="list_item" v-for="(item, index) in tableData8" :key="index">
+              <div class="list_item_left">
+                <span>{{item.title}}锛堝緟瀹℃牳锛�</span>
+                <span>{{item.info}}锛坽{item.content}}锛�</span>
+              </div>
+              <div class="list_item_center">
+                <span>{{item.companyName}}</span>
+                <span>鎻愪氦鏃堕棿  {{item.createDate}}</span>
+              </div>
+              <div class="list_item_right">
+                <span @click="jump('/business/companyUserApply')">鏌ョ湅</span>
+              </div>
+            </div>
+          </div>
+          <div class="home_content_right_list" v-else>
+            <div class="list_item" style="width: 100%;font-size: 12px;display:block;color: #8c939d;text-align: center; padding: 20px">
+              鏆傛棤娑堟伅
+            </div>
+          </div>
+          <div class="home_content_right_page">
+            <el-pagination
+              @current-change="handleCurrentChange8"
+              :current-page="page8"
+              :page-size="5"
+              layout="total, prev, pager, next, jumper"
+              :total="totalPage8">
+            </el-pagination>
+          </div>
+        </div>
+
       </div>
     </div>
     <OperaInsuranceApplyWindow ref="operaInsuranceApplyWindow" @success="handleCurrentChange0()"/>
-    <OperaWtbApplyShopWindow ref="OperaWtbApplyShopWindow" @success="handleCurrentChange0()"/>
+    <OperaWtbApplyShopWindow ref="OperaWatbApplyShopWindow" @success="handleCurrentChange0()"/>
     <dispatchUnitDetailsPlat ref="dispatchUnitDetailsPlat" @success="handleCurrentChange0()"/>
     <OperaSettleClaimsWindow ref="operaSettleClaimsWindow" @success="handleCurrentChange2()"/>
     <OperaApplyChangeUnitDetailWindow ref="operaApplyChangeUnitDetailWindow" @success="handleCurrentChange0()"/>
@@ -165,12 +260,21 @@
       page0: 1,
       page1: 1,
       page2: 1,
+      page6: 1,
+      page7: 1,
+      page8: 1,
+      totalPage8: 0,
+      totalPage7: 0,
+      totalPage6: 0,
       totalPage2: 0,
       totalPage1: 0,
       totalPage0: 0,
       tableData0: [],
       tableData1: [],
       tableData2: [],
+      tableData6: [],
+      tableData7: [],
+      tableData8: [],
       cate: [
         {
           name: '鎶曚繚鐢宠',
@@ -317,9 +421,22 @@
           if (type === 1) {
             this.tableData1 = response.records
             this.totalPage1 = response.total
-          } if (type === 2) {
+          }
+          if (type === 2) {
             this.tableData2 = response.records
             this.totalPage2 = response.total
+          }
+          if (type === 6) {
+            this.tableData6 = response.records
+            this.totalPage6 = response.total
+          }
+          if (type === 7) {
+            this.tableData7 = response.records
+            this.totalPage7 = response.total
+          }
+          if (type === 8) {
+            this.tableData8 = response.records
+            this.totalPage8 = response.total
           }
         })
         .catch(e => {
@@ -341,10 +458,12 @@
         this.tabs.push({ name: '2', label: '鐞嗚禂鎻愰啋' })
         // this.handleCurrentChange2(0);
       }
-      //鏂板鍒嗙被
-      if (pemissons.includes('business:notice:settle')) {
-        this.tabs.push({ name: '3', label: '鍚堝悓绛剧讲鎻愰啋' })
-        // this.handleCurrentChange2(0);
+      if (this.userInfo.type === 1) {
+        this.tabs.push({ name: '7', label: '鏂规绛剧讲鎻愰啋' })
+      }
+      this.tabs.push({ name: '6', label: '鍚堝悓绛剧讲鎻愰啋' })
+      if (this.userInfo.type === 0) {
+        this.tabs.push({ name: '8', label: '闆嗗洟鐢宠鎻愰啋' })
       }
       /* if (pemissons.includes('business:notice:insurance')) {
         this.getNoticeList(0, this.page0)
@@ -364,6 +483,12 @@
         this.handleCurrentChange1(0)
       } else if (this.activeName === '2') {
         this.handleCurrentChange2(0)
+      } else if (this.activeName === '6') {
+        this.handleCurrentChange6(0)
+      } else if (this.activeName === '7') {
+        this.handleCurrentChange7(0)
+      } else if (this.activeName === '8') {
+        this.handleCurrentChange8(0)
       }
     },
     handleCurrentChange0 (page) {
@@ -378,6 +503,18 @@
       this.page2 = page
       this.getNoticeList(2, this.page2)
     },
+    handleCurrentChange6 (page) {
+      this.page6 = page
+      this.getNoticeList(6, this.page6)
+    },
+    handleCurrentChange7 (page) {
+      this.page7 = page
+      this.getNoticeList(7, this.page7)
+    },
+    handleCurrentChange8 (page) {
+      this.page8 = page
+      this.getNoticeList(8, this.page8)
+    },
     jump (url) {
       if (!url) return
       this.$router.push({ path: url })
diff --git a/company/src/views/indexShop.vue b/company/src/views/indexShop.vue
index ce5e346..0f4f29d 100644
--- a/company/src/views/indexShop.vue
+++ b/company/src/views/indexShop.vue
@@ -86,6 +86,39 @@
             </el-pagination>
           </div>
         </div>
+
+        <div v-if="activeName === '6'"  >
+          <div class="home_content_right_list" v-if="tableData6&&tableData6.length">
+            <div class="list_item"  v-for="(item, index) in tableData6" :key="index">
+              <div class="list_item_left">
+                <span>{{item.title}}锛坽{ item.typeDetail }}锛�</span>
+                <span>{{item.content}}</span>
+              </div>
+              <div class="list_item_center">
+                <span>{{item.companyName}}</span>
+                <span>鎻愪氦鏃堕棿  {{item.createDate}}</span>
+              </div>
+              <div class="list_item_right">
+                <span @click="jump('/business/contract')">鏌ョ湅</span>
+              </div>
+            </div>
+          </div>
+          <div class="home_content_right_list" v-else>
+            <div class="list_item" style="width: 100%;font-size: 12px;display:block;color: #8c939d;text-align: center; padding: 20px">
+              鏆傛棤娑堟伅
+            </div>
+          </div>
+          <div class="home_content_right_page">
+            <el-pagination
+              @current-change="handleCurrentChange1"
+              :current-page="page1"
+              :page-size="5"
+              layout="total, prev, pager, next, jumper"
+              :total="totalPage1">
+            </el-pagination>
+          </div>
+        </div>
+
       </div>
     </div>
     <OperaInsuranceApplyWindow ref="operaInsuranceApplyWindow" @success="handleCurrentChange0()"/>
@@ -118,12 +151,15 @@
       page0: 1,
       page1: 1,
       page2: 1,
+      page6: 1,
+      totalPage6: 0,
       totalPage2: 0,
       totalPage1: 0,
       totalPage0: 0,
       tableData0: [],
       tableData1: [],
       tableData2: [],
+      tableData6: [],
       cate: [
         {
           name: '鎶曚繚鐢宠瀹℃牳',
@@ -201,6 +237,7 @@
     initLoadData () {
         this.handleCurrentChange0(0)
         this.handleCurrentChange1(0)
+        this.handleCurrentChange6(0)
     },
     getNoticeList (type, page) {
       noticeList({
@@ -218,6 +255,10 @@
             this.tableData1 = response.records
             this.totalPage1 = response.total
           }
+          if (type === 6) {
+            this.tableData6 = response.records
+            this.totalPage6 = response.total
+          }
         })
         .catch(e => {
           this.$tip.apiFailed(e)
@@ -226,6 +267,7 @@
     initPanel () {
       this.tabs.push({ name: '0', label: '鐩存帴鎶曚繚寰呭姙' })
       this.tabs.push({ name: '1', label: '濮旀墭鎶曚繚寰呭姙' })
+      this.tabs.push({ name: '6', label: '鍚堝悓绛剧讲鎻愰啋' })
     },
     handleClick (e) {
       this.activeName = e.name
@@ -233,6 +275,8 @@
         this.handleCurrentChange0(0)
       } else if (this.activeName === '1') {
         this.handleCurrentChange1(0)
+      } else if (this.activeName === '6') {
+        this.handleCurrentChange6(0)
       }
     },
     handleCurrentChange0 (page) {
@@ -243,6 +287,10 @@
       this.page1 = page
       this.getNoticeList(4, this.page1)
     },
+    handleCurrentChange6 (page) {
+      this.page6 = page
+      this.getNoticeList(6, this.page6)
+    },
     jump (url) {
       if (!url) return
       this.$router.push({ path: url })
diff --git a/company/src/views/system/role.vue b/company/src/views/system/role.vue
index 45cab31..579e7ca 100644
--- a/company/src/views/system/role.vue
+++ b/company/src/views/system/role.vue
@@ -42,12 +42,12 @@
         <el-table-column
           v-if="containPermissions(['system:role:update', 'system:role:createRolePermission', 'system:role:createRoleMenu', 'system:role:delete'])"
           label="鎿嶄綔"
-          min-width="270"
+          min-width="260"
           fixed="right"
         >
-<!--          v-if="isAdmin || (row.code !== adminCode && userInfo.roles.findIndex(code => code === row.code) === -1)"-->
           <template slot-scope="{row}">
             <el-button type="text" @click="$refs.operaRoleWindow.open('缂栬緫瑙掕壊', row)" icon="el-icon-edit" v-permissions="['system:role:update']">缂栬緫</el-button>
+<!--            <el-button type="text" @click="openRole(row.systemDataPermission, row.id)">鏁版嵁鏉冮檺</el-button>-->
             <el-button type="text" @click="$refs.permissionConfigWindow.open(row)" v-permissions="['system:role:createRolePermission']">閰嶇疆鏉冮檺</el-button>
             <el-button type="text" @click="$refs.menuConfigWindow.open(row)" icon="el-icon-menu" v-permissions="['system:role:createRoleMenu']">鎺堟潈鑿滃崟</el-button>
             <el-button v-if="!row.fixed" type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['system:role:delete']">鍒犻櫎</el-button>
@@ -66,6 +66,8 @@
     <PermissionConfigWindow ref="permissionConfigWindow" @success="handlePageChange(tableData.pagination.pageIndex)"/>
     <!-- 鎺堟潈鑿滃崟 -->
     <MenuConfigWindow ref="menuConfigWindow" @success="handlePageChange(tableData.pagination.pageIndex)"/>
+    <!--  鏁版嵁鏉冮檺  -->
+    <Permissions ref="permissions" @success="handlePageChange(tableData.pagination.pageIndex)"/>
   </TableLayout>
 </template>
 
@@ -76,10 +78,11 @@
 import OperaRoleWindow from '@/components/system/role/OperaRoleWindow'
 import PermissionConfigWindow from '@/components/system/role/PermissionConfigWindow'
 import MenuConfigWindow from '@/components/system/role/MenuConfigWindow'
+import Permissions from '@/components/system/role/Permissions'
 export default {
   name: 'SystemRole',
   extends: BaseTable,
-  components: { MenuConfigWindow, PermissionConfigWindow, OperaRoleWindow, TableLayout, Pagination },
+  components: { MenuConfigWindow, PermissionConfigWindow, OperaRoleWindow, TableLayout, Pagination, Permissions },
   data () {
     return {
       // 鎼滅储
@@ -100,6 +103,19 @@
       }]
     })
     this.search()
+  },
+  methods: {
+    openRole(row, id) {
+      if (row) {
+        let customData = []
+        row.customData.split(',').forEach(item => {
+          customData.push([item])
+        })
+        this.$refs.permissions.open('鏁版嵁鏉冮檺', { ...row, customData })
+      } else {
+        this.$refs.permissions.open('鏁版嵁鏉冮檺', { roleId: id, customData: [] })
+      }
+    }
   }
 }
 </script>
diff --git a/company/src/views/system/user.vue b/company/src/views/system/user.vue
index e43e158..26bceaf 100644
--- a/company/src/views/system/user.vue
+++ b/company/src/views/system/user.vue
@@ -1,163 +1,180 @@
 <template>
-  <TableLayout :permissions="['system:user:query']">
-    <!-- 鎼滅储琛ㄥ崟 -->
-    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="80px" inline>
-<!--      <el-form-item label="鐢ㄦ埛鍚�" prop="username">-->
-<!--        <el-input v-model="searchForm.username" v-trim placeholder="璇疯緭鍏ョ敤鎴峰悕" @keypress.enter.native="search"/>-->
-<!--      </el-form-item>-->
-      <el-form-item label="濮撳悕" prop="realname">
-        <el-input v-model="searchForm.realname" v-trim placeholder="璇疯緭鍏�" @keypress.enter.native="search"/>
-      </el-form-item>
-<!--      <el-form-item label="鎵嬫満鍙风爜" prop="mobile">-->
-<!--        <el-input v-model="searchForm.mobile" v-trim placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�" @keypress.enter.native="search"/>-->
-<!--      </el-form-item>-->
-<!--            <el-form-item label="鎵�灞為儴闂�" prop="rootDeptId">-->
-<!--        <DepartmentSelect v-model="searchForm.rootDeptId" placeholder="璇烽�夋嫨鎵�灞為儴闂�" clearable/>-->
-<!--      </el-form-item>-->
-<!--      <el-form-item label="宀椾綅" prop="positionId">-->
-<!--        <PositionSelect v-model="searchForm.positionId" placeholder="璇烽�夋嫨宀椾綅" clearable/>-->
-<!--      </el-form-item>-->
-      <section>
-        <el-button type="primary" icon="el-icon-search" @click="search">鎼滅储</el-button>
-        <el-button @click="reset">閲嶇疆</el-button>
-      </section>
-    </el-form>
-    <!-- 琛ㄦ牸鍜屽垎椤� -->
-    <template v-slot:table-wrap>
-      <ul class="toolbar" v-permissions="['system:user:create', 'system:user:delete']">
-        <li v-permissions="['system:user:create']"><el-button type="primary" @click="$refs.operaUserWindow.open('鏂板璐﹀彿')">鏂板璐﹀彿</el-button></li>
-<!--        <li v-permissions="['system:user:delete']"><el-button icon="el-icon-delete" @click="deleteByIdInBatch">鍒犻櫎</el-button></li>-->
-      </ul>
-<!--      @selection-change="handleSelectionChange"-->
-      <el-table
-        v-loading="isWorking.search"
-        :data="tableData.list"
-        :default-sort = "{prop: 'createTime', order: 'descending'}"
-        stripe
-        @sort-change="handleSortChange"
-      >
-        <el-table-column label="搴忓彿" width="80px">
-          <template slot-scope="scope">
-            <span>{{scope.$index + 1}}</span>
-          </template>
-        </el-table-column>
-        <el-table-column prop="username" label="璐﹀彿" min-width="120px"></el-table-column>
-        <el-table-column prop="realname" label="濮撳悕" min-width="100px"></el-table-column>
-        <el-table-column prop="mobile" label="鑱旂郴鏂瑰紡" min-width="100px"></el-table-column>
-        <el-table-column prop="roles" label="瑙掕壊" min-width="160px" class-name="table-column-strings">
-          <template slot-scope="{row}">
-            <ul>
-              <li v-for="role in row.roles" :key="role.id">{{role.name}}</li>
-            </ul>
-          </template>
-        </el-table-column>
-        <el-table-column label="鍚敤鐘舵��" min-width="100px">
-          <template slot-scope="{row}">
-            <el-switch
-              v-if="!row.fixed"
-              @change="changeStatus($event, row)"
-              v-model="row.status"
-              active-color="#13ce66"
-              inactive-color="#ff4949"
-              :active-value="0"
-              :inactive-value="1">
-            </el-switch>
-          </template>
-        </el-table-column>
-        <el-table-column
-          v-if="containPermissions(['system:user:update', 'system:user:createUserRole', 'system:user:resetPwd', 'system:user:delete'])"
-          label="鎿嶄綔"
-          width="270"
-          fixed="right"
-        >
-<!--          row.id !== userInfo.id &&-->
-          <template v-if="isAdmin || (row.roles.findIndex(r => r.code === adminCode) === -1)" slot-scope="{row}">
-            <el-button type="text" icon="el-icon-edit" @click="$refs.operaUserWindow.open('缂栬緫鐢ㄦ埛', row)" v-permissions="['system:user:update']">缂栬緫</el-button>
-            <el-button type="text" @click="$refs.allocationEnterprises.open('鍒嗛厤浼佷笟', row)" v-if="userInfo.type !== 1">鍒嗛厤浼佷笟</el-button>
-            <el-button type="text" icon="el-icon-s-custom" @click="$refs.roleConfigWindow.open(row)" v-permissions="['system:user:createUserRole']">閰嶇疆瑙掕壊</el-button>
-            <el-button type="text" @click="$refs.resetPwdWindow.open(row)" v-permissions="['system:user:resetPwd']">閲嶇疆瀵嗙爜</el-button>
-<!--            <el-button v-if="!row.fixed" type="text" icon="el-icon-delete" @click="deleteById(row)" v-permissions="['system:user:delete']">鍒犻櫎</el-button>-->
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination
-        @size-change="handleSizeChange"
-        @current-change="handlePageChange"
-        :pagination="tableData.pagination"
-      ></pagination>
-    </template>
-    <!-- 鏂板缓/淇敼 -->
-    <OperaUserWindow ref="operaUserWindow" @success="handlePageChange(tableData.pagination.pageIndex)"/>
-    <!-- 閰嶇疆瑙掕壊 -->
-    <RoleConfigWindow ref="roleConfigWindow" @success="handlePageChange(tableData.pagination.pageIndex)"/>
-    <!-- 閲嶇疆瀵嗙爜 -->
-    <ResetPwdWindow ref="resetPwdWindow"/>
-    <!--  鍒嗛厤浼佷笟  -->
-    <allocationEnterprises ref="allocationEnterprises" @success="handlePageChange(tableData.pagination.pageIndex)"/>
-  </TableLayout>
+	<TableLayout :permissions="['system:user:query']">
+		<!-- 鎼滅储琛ㄥ崟 -->
+		<el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="80px" inline>
+			<el-form-item label="濮撳悕" prop="realname">
+				<el-input v-model="searchForm.realname" v-trim placeholder="璇疯緭鍏�" @keypress.enter.native="search"/>
+			</el-form-item>
+			<el-form-item label="鎵�灞為儴闂�" prop="companyDepartmentPathName">
+				<el-input v-model="searchForm.companyDepartmentPathName" v-trim placeholder="璇疯緭鍏�" @keypress.enter.native="search"/>
+			</el-form-item>
+			<section>
+				<el-button type="primary" icon="el-icon-search" @click="search">鎼滅储</el-button>
+				<el-button @click="reset">閲嶇疆</el-button>
+			</section>
+		</el-form>
+		<!-- 琛ㄦ牸鍜屽垎椤� -->
+		<template v-slot:table-wrap>
+			<ul class="toolbar" v-permissions="['system:user:create', 'system:user:delete']">
+				<li v-permissions="['system:user:create']"><el-button type="primary" @click="$refs.operaUserWindow.open('鏂板璐﹀彿')">鏂板璐﹀彿</el-button></li>
+				<!--        <li v-permissions="['system:user:delete']"><el-button icon="el-icon-delete" @click="deleteByIdInBatch">鍒犻櫎</el-button></li>-->
+			</ul>
+			<!--      @selection-change="handleSelectionChange"-->
+			<el-table
+					v-loading="isWorking.search"
+					:data="tableData.list"
+					:default-sort = "{prop: 'createTime', order: 'descending'}"
+					stripe
+					@sort-change="handleSortChange"
+			>
+				<el-table-column label="搴忓彿" width="80px">
+					<template slot-scope="scope">
+						<span>{{scope.$index + 1}}</span>
+					</template>
+				</el-table-column>
+				<el-table-column prop="username" label="璐﹀彿" min-width="120px"></el-table-column>
+				<el-table-column prop="realname" label="濮撳悕" min-width="100px"></el-table-column>
+				<el-table-column prop="mobile" label="鑱旂郴鏂瑰紡" min-width="100px"></el-table-column>
+				<el-table-column label="涓荤" min-width="100px">
+					<template slot-scope="{ row }">
+						<el-switch
+								v-model="row.headStatus"
+								@change="setHeadStatus($event, row)"
+								active-color="#13ce66"
+								inactive-color="#ff4949"
+								:active-value="1"
+								:inactive-value="0">
+						</el-switch>
+					</template>
+				</el-table-column>
+				<el-table-column prop="companyDepartmentPathName" label="鎵�鍦ㄩ儴闂�" min-width="100px"></el-table-column>
+				<el-table-column prop="roles" label="瑙掕壊" min-width="160px" class-name="table-column-strings">
+					<template slot-scope="{row}">
+						<ul>
+							<li v-for="role in row.roles" :key="role.id">{{role.name}}</li>
+						</ul>
+					</template>
+				</el-table-column>
+				<el-table-column label="鍚敤鐘舵��" min-width="100px">
+					<template slot-scope="{row}">
+						<el-switch
+								v-if="!row.fixed"
+								@change="changeStatus($event, row)"
+								v-model="row.status"
+								active-color="#13ce66"
+								inactive-color="#ff4949"
+								:active-value="0"
+								:inactive-value="1">
+						</el-switch>
+					</template>
+				</el-table-column>
+				<el-table-column
+						v-if="containPermissions(['system:user:update', 'system:user:createUserRole', 'system:user:resetPwd', 'system:user:delete'])"
+						label="鎿嶄綔"
+						width="270"
+						fixed="right"
+				>
+					<!--          row.id !== userInfo.id &&-->
+					<template v-if="isAdmin || (row.roles.findIndex(r => r.code === adminCode) === -1)" slot-scope="{row}">
+						<el-button type="text" icon="el-icon-edit" @click="$refs.operaUserWindow.open('缂栬緫鐢ㄦ埛', {...row, departmentId: row.companyDepartmentPathId ? row.companyDepartmentPathId.substring(0, row.companyDepartmentPathId.length - 1).split('/').map(val => +val) : '' })" v-permissions="['system:user:update']">缂栬緫</el-button>
+						<el-button type="text" @click="$refs.allocationEnterprises.open('鍒嗛厤浼佷笟', row)" v-if="[0,2].includes(userInfo.type)">鍒嗛厤浼佷笟</el-button>
+						<el-button type="text" icon="el-icon-s-custom" @click="$refs.roleConfigWindow.open(row)" v-permissions="['system:user:createUserRole']">閰嶇疆瑙掕壊</el-button>
+						<el-button type="text" @click="$refs.resetPwdWindow.open(row)" v-permissions="['system:user:resetPwd']">閲嶇疆瀵嗙爜</el-button>
+						<!--            <el-button v-if="!row.fixed" type="text" icon="el-icon-delete" @click="deleteById(row)" v-permissions="['system:user:delete']">鍒犻櫎</el-button>-->
+					</template>
+				</el-table-column>
+			</el-table>
+			<pagination
+					@size-change="handleSizeChange"
+					@current-change="handlePageChange"
+					:pagination="tableData.pagination"
+			></pagination>
+		</template>
+		<!-- 鏂板缓/淇敼 -->
+		<OperaUserWindow ref="operaUserWindow" @success="handlePageChange(tableData.pagination.pageIndex)"/>
+		<!-- 閰嶇疆瑙掕壊 -->
+		<RoleConfigWindow ref="roleConfigWindow" @success="handlePageChange(tableData.pagination.pageIndex)"/>
+		<!-- 閲嶇疆瀵嗙爜 -->
+		<ResetPwdWindow ref="resetPwdWindow"/>
+		<!--  鍒嗛厤浼佷笟  -->
+		<allocationEnterprises ref="allocationEnterprises" @success="handlePageChange(tableData.pagination.pageIndex)"/>
+	</TableLayout>
 </template>
 
 <script>
-import Pagination from '@/components/common/Pagination'
-import TableLayout from '@/layouts/TableLayout'
-import BaseTable from '@/components/base/BaseTable'
-import OperaUserWindow from '@/components/system/user/OperaUserWindow'
-import allocationEnterprises from '@/components/system/user/allocationEnterprises'
-import RoleConfigWindow from '@/components/system/user/RoleConfigWindow'
-import ResetPwdWindow from '@/components/system/user/ResetPwdWindow'
-import DepartmentSelect from '@/components/common/DepartmentSelect'
-import PositionSelect from '@/components/common/PositionSelect'
-import { updUserStatus } from '@/api/system/user'
-
-export default {
-  name: 'SystemUser',
-  extends: BaseTable,
-  components: { allocationEnterprises, PositionSelect, DepartmentSelect, ResetPwdWindow, RoleConfigWindow, OperaUserWindow, TableLayout, Pagination },
-  data () {
-    return {
-      // 鎼滅储
-      searchForm: {
-        username: '', // 鍚嶅瓧
-        realname: '', // 濮撳悕
-        rootDeptId: null, // 閮ㄩ棬ID
-        positionId: null, // 宀椾綅ID
-        mobile: '' // 鎵嬫満鍙风爜
+  import Pagination from '@/components/common/Pagination'
+  import TableLayout from '@/layouts/TableLayout'
+  import BaseTable from '@/components/base/BaseTable'
+  import OperaUserWindow from '@/components/system/user/OperaUserWindow'
+  import allocationEnterprises from '@/components/system/user/allocationEnterprises'
+  import RoleConfigWindow from '@/components/system/user/RoleConfigWindow'
+  import ResetPwdWindow from '@/components/system/user/ResetPwdWindow'
+  import DepartmentSelect from '@/components/common/DepartmentSelect'
+  import PositionSelect from '@/components/common/PositionSelect'
+  import { updUserStatus, updateHead } from '@/api/system/user'
+  import { mapState } from 'vuex'
+  export default {
+    name: 'SystemUser',
+    extends: BaseTable,
+    computed: {
+      ...mapState(['userInfo'])
+    },
+    components: { allocationEnterprises, PositionSelect, DepartmentSelect, ResetPwdWindow, RoleConfigWindow, OperaUserWindow, TableLayout, Pagination },
+    data () {
+      return {
+        // 鎼滅储
+        searchForm: {
+          username: '', // 鍚嶅瓧
+          realname: '', // 濮撳悕
+          rootDeptId: null, // 閮ㄩ棬ID
+          positionId: null, // 宀椾綅ID
+          mobile: '', // 鎵嬫満鍙风爜
+          type: '',
+          companyDepartmentPathName: ''   // 閮ㄩ棬鍚嶇О
+        }
+      }
+    },
+    created () {
+      this.config({
+        module: '鐢ㄦ埛',
+        api: '/system/user',
+        'field.main': 'realname',
+        sorts: [{
+          property: 'CREATE_TIME',
+          direction: 'DESC'
+        }]
+      })
+      this.searchForm.type = this.userInfo.type
+      this.search()
+    },
+    methods: {
+      // 璁剧疆鍙栨秷涓荤
+      setHeadStatus(e, row) {
+        updateHead({ id: row.id, headStatus: row.headStatus })
+          .then(res => {
+            this.search()
+          })
+      },
+      changeStatus(status, row) {
+        updUserStatus({
+          id: row.id,
+          status
+        }).then(res => {
+          this.search()
+        }).catch(err => {
+          row.status = row.status === 0 ? 1 : 0
+        })
       }
     }
-  },
-  created () {
-    this.config({
-      module: '鐢ㄦ埛',
-      api: '/system/user',
-      'field.main': 'realname',
-      sorts: [{
-        property: 'CREATE_TIME',
-        direction: 'DESC'
-      }]
-    })
-    this.search()
-  },
-  methods: {
-    changeStatus(status, row) {
-      updUserStatus({
-        id: row.id,
-        status
-      }).then(res => {
-        this.search()
-      }).catch(err => {
-        row.status = row.status === 0 ? 1 : 0
-      })
-    }
   }
-}
 </script>
 
 <style scoped lang="scss">
-@import "@/assets/style/variables.scss";
-// 鍒楄〃澶村儚澶勭悊
-.table-column-avatar {
-  img {
-    width: 48px;
-  }
-}
+	@import "@/assets/style/variables.scss";
+	// 鍒楄〃澶村儚澶勭悊
+	.table-column-avatar {
+		img {
+			width: 48px;
+		}
+	}
 </style>
diff --git a/server/company/src/main/java/com/doumee/api/business/ApplyChangeController.java b/server/company/src/main/java/com/doumee/api/business/ApplyChangeController.java
index d48549f..15b4bb6 100644
--- a/server/company/src/main/java/com/doumee/api/business/ApplyChangeController.java
+++ b/server/company/src/main/java/com/doumee/api/business/ApplyChangeController.java
@@ -3,6 +3,8 @@
 import com.doumee.api.BaseController;
 import com.doumee.core.annotation.excel.ExcelExporter;
 import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.ApiResponse;
 import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageWrap;
@@ -11,6 +13,7 @@
 import com.doumee.core.utils.DateUtil;
 import com.doumee.dao.business.dto.*;
 import com.doumee.dao.business.model.ApplyChange;
+import com.doumee.dao.business.model.InsuranceApply;
 import com.doumee.dao.business.vo.CountCyclePriceVO;
 import com.doumee.service.business.ApplyChangeService;
 import com.doumee.service.business.InsuranceApplyService;
@@ -19,12 +22,14 @@
 import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletResponse;
 
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * @author 姹熻箘韫�
@@ -104,6 +109,26 @@
     public void exportJiajianBaoExcel (@RequestBody ApplyChange model, HttpServletResponse response) {
         ExcelExporter.build(ApplyChange.class).exportJiajianBaoExcel(applyChangeService.exportJiajianBaoExcel(model),   response);
     }
+    @ApiOperation("瀵煎嚭淇濆崟涓嬫墍鏈夊姞鍑忎繚璇︽儏鍗�")
+    @PostMapping("/exportApplyJiajianBaoExcel")
+    @RequiresPermissions("business:applychange:exportExcel")
+    public void exportApplyJiajianBaoExcel (@RequestBody InsuranceApply insuranceApply, HttpServletResponse response) {
+        insuranceApply = insuranceApplyService.findDetail(insuranceApply.getId());
+        if(Objects.isNull(insuranceApply)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        List<ApplyChange> applyChangeList = applyChangeService.findListByApplyId(insuranceApply.getId(),Constants.ZERO);
+        List<ApplyChange> excelList = new ArrayList<>();
+        if(CollectionUtils.isEmpty(applyChangeList)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏃犲彲瀵煎嚭鐨勫姞鍑忎繚璁板綍");
+        }else{
+            for (ApplyChange applyChange:applyChangeList) {
+                excelList.add(applyChangeService.exportJiajianBaoExcel(applyChange));
+            }
+        }
+        ExcelExporter.build(ApplyChange.class).exportApplyJiajianBaoExcel(insuranceApply,excelList,   response);
+    }
+
     @ApiOperation("瀵煎嚭鎹㈠巶鐢宠璇︽儏鍗�")
     @PostMapping("/exportChangeUnitExcel")
     @RequiresPermissions("business:applychange:exportExcel")
diff --git a/server/company/src/main/java/com/doumee/api/business/ApplyDetailController.java b/server/company/src/main/java/com/doumee/api/business/ApplyDetailController.java
index 48b50ec..18f0c15 100644
--- a/server/company/src/main/java/com/doumee/api/business/ApplyDetailController.java
+++ b/server/company/src/main/java/com/doumee/api/business/ApplyDetailController.java
@@ -108,7 +108,7 @@
                 i.setFee(BigDecimal.ZERO);
             }
         });
-        ExcelExporter.build(ApplyDetail.class).exportWithFirstAndEnd(pageData.getRecords(), pageWrap.getModel().getSolutionName()+".xlsx","鍦ㄤ繚浜哄憳鍚嶅崟",null, response);
+        ExcelExporter.build(ApplyDetail.class).exportWithSheetAndFirstAndEnd(pageData.getRecords(), pageWrap.getModel().getSolutionName()+".xlsx","銆�"+pageWrap.getModel().getSolutionName()+"銆�"+"淇濆崟浜哄憳淇℃伅",null, "淇濆崟浜哄憳",response);
     }
 
     @ApiOperation("鏍规嵁ID鏌ヨ")
diff --git a/server/company/src/main/java/com/doumee/api/business/CompanyController.java b/server/company/src/main/java/com/doumee/api/business/CompanyController.java
index 647fcd8..4dff283 100644
--- a/server/company/src/main/java/com/doumee/api/business/CompanyController.java
+++ b/server/company/src/main/java/com/doumee/api/business/CompanyController.java
@@ -79,6 +79,16 @@
         return ApiResponse.success(companyService.findPage(pageWrap));
     }
 
+    @ApiOperation("鏌ヨ褰撳墠浼佷笟杩涜闆嗗洟鐢宠鍙互鐢宠鐨勪紒涓�")
+    @PostMapping("/findAllCompanyList")
+    @RequiresPermissions("business:company:query")
+    public ApiResponse<List<Company>> findAllCompanyList () {
+        return ApiResponse.success(companyService.findAllCompanyList());
+    }
+
+
+
+
     @ApiOperation("瀵煎嚭Excel")
     @PostMapping("/exportExcel")
     @RequiresPermissions("business:company:exportExcel")
diff --git a/server/company/src/main/java/com/doumee/api/business/CompanyDepartmentController.java b/server/company/src/main/java/com/doumee/api/business/CompanyDepartmentController.java
index 35a4621..bdeeddb 100644
--- a/server/company/src/main/java/com/doumee/api/business/CompanyDepartmentController.java
+++ b/server/company/src/main/java/com/doumee/api/business/CompanyDepartmentController.java
@@ -6,6 +6,7 @@
 import com.doumee.core.model.ApiResponse;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.model.PageData;
+import com.doumee.core.utils.Constants;
 import com.doumee.dao.business.model.CompanyDepartment;
 import com.doumee.service.business.CompanyDepartmentService;
 import io.swagger.annotations.Api;
@@ -87,4 +88,13 @@
     public ApiResponse findById(@PathVariable Integer id) {
         return ApiResponse.success(companyDepartmentService.findById(id));
     }
+
+
+    @ApiOperation("缁勭粐鏍戞煡璇�")
+    @GetMapping("/tree")
+    @RequiresPermissions("business:companydepartment:query")
+    public ApiResponse<List<CompanyDepartment>> tree () {
+        return ApiResponse.success(companyDepartmentService.departTree(Constants.ONE));
+    }
+
 }
diff --git a/server/company/src/main/java/com/doumee/api/business/CompanyPermissionController.java b/server/company/src/main/java/com/doumee/api/business/CompanyPermissionController.java
index b2db3d6..e8bc438 100644
--- a/server/company/src/main/java/com/doumee/api/business/CompanyPermissionController.java
+++ b/server/company/src/main/java/com/doumee/api/business/CompanyPermissionController.java
@@ -73,6 +73,7 @@
     public ApiResponse<PageData<CompanyPermission>> findPage (@RequestBody PageWrap<CompanyPermission> pageWrap) {
         return ApiResponse.success(companyPermissionService.findPage(pageWrap));
     }
+
     @ApiOperation("鏌ヨ鍏ㄩ儴")
     @PostMapping("/list")
     @RequiresPermissions("business:companypermission:query")
diff --git a/server/company/src/main/java/com/doumee/api/business/CompanySolutionController.java b/server/company/src/main/java/com/doumee/api/business/CompanySolutionController.java
index f988bcd..5a57c22 100644
--- a/server/company/src/main/java/com/doumee/api/business/CompanySolutionController.java
+++ b/server/company/src/main/java/com/doumee/api/business/CompanySolutionController.java
@@ -88,4 +88,13 @@
     public ApiResponse findById(@PathVariable Integer id) {
         return ApiResponse.success(companySolutionService.findById(id));
     }
+
+
+    @ApiOperation("鍙戣捣绛剧讲")
+    @GetMapping("/getSignLink")
+    @RequiresPermissions("business:contract:query")
+    public ApiResponse<String> getSignLink (@RequestParam Integer id) {
+        return ApiResponse.success(companySolutionService.getCompanySolutionSignLink(id));
+    }
+
 }
diff --git a/server/company/src/main/java/com/doumee/api/business/CompanyUserApplyController.java b/server/company/src/main/java/com/doumee/api/business/CompanyUserApplyController.java
index c869c85..c22185e 100644
--- a/server/company/src/main/java/com/doumee/api/business/CompanyUserApplyController.java
+++ b/server/company/src/main/java/com/doumee/api/business/CompanyUserApplyController.java
@@ -4,13 +4,15 @@
 import com.doumee.core.annotation.excel.ExcelExporter;
 import com.doumee.core.annotation.pr.PreventRepeat;
 import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.model.PageData;
 import com.doumee.dao.business.model.CompanyUserApply;
 import com.doumee.service.business.CompanyUserApplyService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.apache.shiro.authz.annotation.RequiresPermissions;    
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletResponse;
@@ -71,6 +73,8 @@
     @PostMapping("/page")
     @RequiresPermissions("business:companyuserapply:query")
     public ApiResponse<PageData<CompanyUserApply>> findPage (@RequestBody PageWrap<CompanyUserApply> pageWrap) {
+        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        pageWrap.getModel().setCompanyId(loginUserInfo.getCompanyId());
         return ApiResponse.success(companyUserApplyService.findPage(pageWrap));
     }
 
diff --git a/server/company/src/main/java/com/doumee/api/business/ContractController.java b/server/company/src/main/java/com/doumee/api/business/ContractController.java
index d392fce..4119192 100644
--- a/server/company/src/main/java/com/doumee/api/business/ContractController.java
+++ b/server/company/src/main/java/com/doumee/api/business/ContractController.java
@@ -87,4 +87,22 @@
     public ApiResponse findById(@PathVariable Integer id) {
         return ApiResponse.success(contractService.findById(id));
     }
+
+
+    @ApiOperation("鍚堝悓鍙栨秷")
+    @GetMapping("/cancel")
+    @RequiresPermissions("business:contract:update")
+    public ApiResponse cancel (@RequestParam Integer id) {
+        contractService.cancel(id);
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+    @ApiOperation("鍙戣捣绛剧讲")
+    @GetMapping("/getSignLink")
+    @RequiresPermissions("business:contract:query")
+    public ApiResponse<String> getSignLink (@RequestParam Integer id) {
+        return ApiResponse.success(contractService.getContractSignLink(id));
+    }
+
+
 }
diff --git a/server/company/src/main/java/com/doumee/api/business/CustomerServiceController.java b/server/company/src/main/java/com/doumee/api/business/CustomerServiceController.java
new file mode 100644
index 0000000..be2e23a
--- /dev/null
+++ b/server/company/src/main/java/com/doumee/api/business/CustomerServiceController.java
@@ -0,0 +1,107 @@
+package com.doumee.api.business;
+
+import com.doumee.api.BaseController;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.CustomerService;
+import com.doumee.service.business.CustomerServiceService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2024/11/05 18:41
+ */
+@Api(tags = "瀹㈡湇淇℃伅琛�")
+@RestController
+@RequestMapping("/business/customerService")
+public class CustomerServiceController extends BaseController {
+
+    @Autowired
+    private CustomerServiceService customerServiceService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @RequiresPermissions("business:customerservice:create")
+    public ApiResponse create(@RequestBody CustomerService customerService) {
+        return ApiResponse.success(customerServiceService.create(customerService));
+    }
+
+    @ApiOperation("鎺堟潈浼佷笟")
+    @PostMapping("/auth")
+    @RequiresPermissions("business:customerservice:create")
+    public ApiResponse auth(@RequestBody CustomerService customerService) {
+        customerServiceService.authCompany(customerService);
+        return ApiResponse.success(null);
+    }
+
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @RequiresPermissions("business:customerservice:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        customerServiceService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @RequiresPermissions("business:customerservice:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        customerServiceService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @RequiresPermissions("business:customerservice:update")
+    public ApiResponse updateById(@RequestBody CustomerService customerService) {
+        customerServiceService.updateById(customerService);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @RequiresPermissions("business:customerservice:query")
+    public ApiResponse<PageData<CustomerService>> findPage (@RequestBody PageWrap<CustomerService> pageWrap) {
+        return ApiResponse.success(customerServiceService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @RequiresPermissions("business:customerservice:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<CustomerService> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(CustomerService.class).export(customerServiceService.findPage(pageWrap).getRecords(), "瀹㈡湇淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @RequiresPermissions("business:customerservice:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(customerServiceService.findById(id));
+    }
+
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/findByCompanyId")
+    @RequiresPermissions("business:customerservice:query")
+    public ApiResponse<CustomerService> findByCompanyId(@RequestParam Integer companyId) {
+        return ApiResponse.success(customerServiceService.findByCompanyId(companyId));
+    }
+}
diff --git a/server/company/src/main/java/com/doumee/api/business/InsuranceApplyController.java b/server/company/src/main/java/com/doumee/api/business/InsuranceApplyController.java
index 6850e74..6f4e870 100644
--- a/server/company/src/main/java/com/doumee/api/business/InsuranceApplyController.java
+++ b/server/company/src/main/java/com/doumee/api/business/InsuranceApplyController.java
@@ -4,19 +4,19 @@
 import com.doumee.core.annotation.excel.ExcelExporter;
 import com.doumee.core.annotation.pr.PreventRepeat;
 import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.model.PageData;
 import com.doumee.core.utils.Constants;
-import com.doumee.dao.business.dto.CountCyclePriceDTO;
-import com.doumee.dao.business.dto.InsuranceApplyOptDTO;
-import com.doumee.dao.business.dto.InsuranceApplyQueryDTO;
-import com.doumee.dao.business.dto.SmsCheckDTO;
+import com.doumee.dao.business.dto.*;
 import com.doumee.dao.business.model.InsuranceApply;
+import com.doumee.dao.business.vo.ApplyPowerVO;
 import com.doumee.dao.business.vo.CountCyclePriceVO;
 import com.doumee.service.business.InsuranceApplyService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.models.auth.In;
+import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -43,6 +43,8 @@
     @PostMapping("/create")
     @RequiresPermissions("business:insuranceapply:create")
     public ApiResponse create(@RequestBody InsuranceApply insuranceApply) {
+        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        insuranceApply.setCompanyId(loginUserInfo.getCompanyId());
         return ApiResponse.success(insuranceApplyService.create(insuranceApply));
     }
 
@@ -184,5 +186,10 @@
         return ApiResponse.success(insuranceApplyService.getSignWTBTBDLink(smsCheckDTO));
     }
 
-
+    @ApiOperation("鏌ヨ淇濆崟鏄惁鍙繘琛屽姞鍑忎繚")
+    @PostMapping("/getApplyPower")
+    @RequiresPermissions("business:insuranceapply:query")
+    public ApiResponse<ApplyPowerVO> getApplyPower(@RequestBody ApplyPowerDTO applyPowerDTO) {
+        return ApiResponse.success(insuranceApplyService.getApplyPower(applyPowerDTO));
+    }
 }
diff --git a/server/company/src/main/java/com/doumee/api/business/MemberController.java b/server/company/src/main/java/com/doumee/api/business/MemberController.java
index fa86c20..760403d 100644
--- a/server/company/src/main/java/com/doumee/api/business/MemberController.java
+++ b/server/company/src/main/java/com/doumee/api/business/MemberController.java
@@ -125,6 +125,8 @@
     public ApiResponse<List<MemberImport>> importExcel (@ApiParam(value = "file") MultipartFile file,Integer  solutionId) {
         return ApiResponse.success(memberService.importBatch(file,solutionId));
     }
+
+
     @ApiOperation(value = "浜哄憳鍑忎繚淇℃伅瀵煎叆" ,notes = "淇濆崟鐢宠")
     @PostMapping("/importReuduceExcel")
     @ApiImplicitParams({
diff --git a/server/company/src/main/java/com/doumee/api/business/SolutionsController.java b/server/company/src/main/java/com/doumee/api/business/SolutionsController.java
index 56f85a2..e3a0a0a 100644
--- a/server/company/src/main/java/com/doumee/api/business/SolutionsController.java
+++ b/server/company/src/main/java/com/doumee/api/business/SolutionsController.java
@@ -3,6 +3,8 @@
 import com.doumee.api.BaseController;
 import com.doumee.core.annotation.excel.ExcelExporter;
 import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.ApiResponse;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.model.PageData;
@@ -99,6 +101,23 @@
         return ApiResponse.success(solutionsService.findListForCompany(dateType));
     }
 
+
+    @ApiOperation("鏌ヨ浼佷笟鍙娇鐢ㄦ柟妗堬紙宸茬缃诧級")
+    @GetMapping("/getUseList")
+    @RequiresPermissions("business:solutions:query")
+    public ApiResponse<List<Solutions>> getUseList (@RequestParam Integer companyId,Integer dateType) {
+        if(Objects.isNull(companyId)){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        if(Objects.isNull(dateType)){
+            dateType = Constants.TWO;
+        }
+        List<Solutions>  solutionsList = solutionsService.findListByCompanyId(dateType,companyId);
+        return ApiResponse.success(solutionsList);
+    }
+
+
+
     @ApiOperation("鏍规嵁鍘嗗彶鐗堟湰鏌ヨ褰撳墠鏈�鏂板惎鐢ㄧ増鏈�")
     @GetMapping("/getNewVersion")
     public ApiResponse<Solutions> getNewVersion (@RequestParam Integer solutionId) {
diff --git a/server/company/src/main/java/com/doumee/api/business/WorktypeController.java b/server/company/src/main/java/com/doumee/api/business/WorktypeController.java
index 7fafd25..bf04ad4 100644
--- a/server/company/src/main/java/com/doumee/api/business/WorktypeController.java
+++ b/server/company/src/main/java/com/doumee/api/business/WorktypeController.java
@@ -7,18 +7,19 @@
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.model.PageData;
 import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.dto.MemberImport;
 import com.doumee.dao.business.dto.WorkTypeQueryDTO;
 import com.doumee.dao.business.model.Worktype;
 import com.doumee.service.business.WorktypeService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import org.apache.shiro.authz.annotation.RequiresPermissions;    
+import io.swagger.annotations.*;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
 import javax.servlet.http.HttpServletResponse;
 
+import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
 
diff --git a/server/company/src/main/java/com/doumee/api/system/SystemController.java b/server/company/src/main/java/com/doumee/api/system/SystemController.java
index c6d61cb..08af63b 100644
--- a/server/company/src/main/java/com/doumee/api/system/SystemController.java
+++ b/server/company/src/main/java/com/doumee/api/system/SystemController.java
@@ -53,6 +53,16 @@
         return ApiResponse.success(systemLoginService.loginByPhone(dto, Constants.ONE, true, request));
     }
 
+
+    @ApiOperation("鍒囨崲浼佷笟 - 鍚庣")
+    @GetMapping("/switchCompany")
+    public ApiResponse<String> switchCompany (@RequestParam Integer companyId, HttpServletRequest request) {
+        return ApiResponse.success(systemLoginService.switchCompany(getLoginUser(),companyId, request));
+    }
+
+
+
+
     @PreventRepeat(limit = 10, lockTime = 10000)
     @ApiOperation("寰俊灏忕▼搴忕櫥褰�")
     @PostMapping("/loginByWxMini")
diff --git a/server/company/src/main/java/com/doumee/api/system/SystemRoleController.java b/server/company/src/main/java/com/doumee/api/system/SystemRoleController.java
index cf27fba..a9b7958 100644
--- a/server/company/src/main/java/com/doumee/api/system/SystemRoleController.java
+++ b/server/company/src/main/java/com/doumee/api/system/SystemRoleController.java
@@ -12,6 +12,7 @@
 import com.doumee.dao.system.dto.CreateRoleMenuDTO;
 import com.doumee.dao.system.dto.CreateRolePermissionDTO;
 import com.doumee.dao.system.dto.QuerySystemRoleDTO;
+import com.doumee.dao.system.model.SystemDataPermission;
 import com.doumee.dao.system.model.SystemRole;
 import com.doumee.dao.system.vo.SystemRoleListVO;
 import com.doumee.service.system.SystemRoleService;
@@ -115,4 +116,16 @@
         }
         return ApiResponse.success(systemRoleService.findList(systemRole));
     }
+
+
+    @PreventRepeat
+    @ApiOperation("閰嶇疆瑙掕壊鏁版嵁鏉冮檺")
+    @PostMapping("/createRoleDataPermission")
+    @RequiresPermissions("system:role:query")
+    public ApiResponse createRoleDataPermission (@Validated @RequestBody SystemDataPermission dto) {
+        systemRoleBiz.createRoleDataPermission(dto);
+        return ApiResponse.success(null);
+    }
+
+
 }
diff --git a/server/company/src/main/java/com/doumee/api/system/SystemUserController.java b/server/company/src/main/java/com/doumee/api/system/SystemUserController.java
index a80efe3..ca495cd 100644
--- a/server/company/src/main/java/com/doumee/api/system/SystemUserController.java
+++ b/server/company/src/main/java/com/doumee/api/system/SystemUserController.java
@@ -116,6 +116,14 @@
     }
 
 
+    @ApiOperation("鏌ヨ褰撳墠浼佷笟涓嬫墍鏈夌敤鎴�")
+    @PostMapping("/findUserList")
+    @RequiresPermissions("system:user:query")
+    public ApiResponse<List<SystemUser>> findUserList (@RequestBody SystemUser pageWrap) {
+        return ApiResponse.success(systemUserService.findAllList(pageWrap));
+    }
+
+
     @ApiOperation("鏍规嵁ID鏌ヨ")
     @GetMapping("/{id}")
     @RequiresPermissions("system:user:query")
@@ -143,4 +151,13 @@
         return ApiResponse.success(null);
     }
 
+
+    @ApiOperation("璁剧疆鎴栧彇娑堜富绠�")
+    @PostMapping("/updateHead")
+    @RequiresPermissions("system:user:query")
+    public ApiResponse updateHead(@RequestBody SystemUser systemUser){
+        systemUserService.updateHead(systemUser);
+        return ApiResponse.success(null);
+    }
+
 }
diff --git a/server/platform/src/main/java/com/doumee/api/business/ApplyChangeController.java b/server/platform/src/main/java/com/doumee/api/business/ApplyChangeController.java
index 9e16418..e0dd6fb 100644
--- a/server/platform/src/main/java/com/doumee/api/business/ApplyChangeController.java
+++ b/server/platform/src/main/java/com/doumee/api/business/ApplyChangeController.java
@@ -3,22 +3,32 @@
 import com.doumee.api.BaseController;
 import com.doumee.core.annotation.excel.ExcelExporter;
 import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.ApiResponse;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.model.PageData;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.DateUtil;
+import com.doumee.dao.business.dto.ApplyChangeCyclePriceDTO;
 import com.doumee.dao.business.model.ApplyChange;
 import com.doumee.dao.business.model.InsuranceApply;
+import com.doumee.dao.business.vo.CountCyclePriceVO;
 import com.doumee.service.business.ApplyChangeService;
 import com.doumee.service.business.InsuranceApplyService;
+import com.doumee.service.business.impl.UnionChangeServiceImpl;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.shiro.authz.annotation.RequiresPermissions;    
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletResponse;
 
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * @author 姹熻箘韫�
@@ -34,6 +44,9 @@
 
     @Autowired
     private InsuranceApplyService insuranceApplyService;
+
+    @Autowired
+    private UnionChangeServiceImpl unionChangeServiceImpl;
 
     @PreventRepeat
     @ApiOperation("鏂板缓")
@@ -161,4 +174,39 @@
     public ApiResponse<List<ApplyChange>> findPage (@RequestBody ApplyChange pageWrap) {
         return ApiResponse.success(applyChangeService.monthTotalList(pageWrap));
     }
+
+    @ApiOperation("鍔犲噺淇濅笟鍔¤ˉ鍏呴噾棰�")
+    @PostMapping("/getChangeCountCyclePriceVO")
+    public ApiResponse<CountCyclePriceVO> getChangeCountCyclePriceVO (@RequestBody ApplyChangeCyclePriceDTO applyChangeCyclePriceDTO) {
+        applyChangeCyclePriceDTO.setValidTime(DateUtil.getMontageDate(new Date(),1));
+        return ApiResponse.success("鎿嶄綔鎴愬姛",applyChangeService.getChangeCountCyclePriceVO(applyChangeCyclePriceDTO));
+    }
+
+    @ApiOperation("鍟嗘埛瀹℃牳 - 濮旀墭淇濅笟鍔�")
+    @PostMapping("/check")
+    @RequiresPermissions("business:applychange:check")
+    public ApiResponse check(@RequestBody ApplyChange model) {
+        return ApiResponse.success(applyChangeService.check(model,unionChangeServiceImpl));
+    }
+
+    @ApiOperation("瀵煎嚭淇濆崟涓嬫墍鏈夊姞鍑忎繚璇︽儏鍗�")
+    @PostMapping("/exportApplyJiajianBaoExcel")
+    @RequiresPermissions("business:applychange:exportExcel")
+    public void exportApplyJiajianBaoExcel (@RequestBody InsuranceApply insuranceApply, HttpServletResponse response) {
+        insuranceApply = insuranceApplyService.findDetail(insuranceApply.getId());
+        if(Objects.isNull(insuranceApply)){
+            throw new BusinessException(com.doumee.core.constants.ResponseStatus.DATA_EMPTY);
+        }
+        List<ApplyChange> applyChangeList = applyChangeService.findListByApplyId(insuranceApply.getId(), Constants.ZERO);
+        List<ApplyChange> excelList = new ArrayList<>();
+        if(CollectionUtils.isEmpty(applyChangeList)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏃犲彲瀵煎嚭鐨勫姞鍑忎繚璁板綍");
+        }else{
+            for (ApplyChange applyChange:applyChangeList) {
+                excelList.add(applyChangeService.exportJiajianBaoExcel(applyChange));
+            }
+        }
+        ExcelExporter.build(ApplyChange.class).exportApplyJiajianBaoExcel(insuranceApply,excelList,   response);
+    }
+
 }
diff --git a/server/platform/src/main/java/com/doumee/api/business/ApplyDetailController.java b/server/platform/src/main/java/com/doumee/api/business/ApplyDetailController.java
index 57780fc..c7844ae 100644
--- a/server/platform/src/main/java/com/doumee/api/business/ApplyDetailController.java
+++ b/server/platform/src/main/java/com/doumee/api/business/ApplyDetailController.java
@@ -73,6 +73,14 @@
     public ApiResponse<PageData<ApplyDetail>> findPage (@RequestBody PageWrap<ApplyDetailPageDTO> pageWrap) {
         return ApiResponse.success(applyDetailService.findPageForCompany(pageWrap));
     }
+
+    @ApiOperation("鍒楄〃鏌ヨ")
+    @PostMapping("/findList")
+    @RequiresPermissions("business:applydetail:query")
+    public ApiResponse<List<ApplyDetail>> findList (@RequestBody ApplyDetailPageDTO applyDetailPageDTO) {
+        return ApiResponse.success(applyDetailService.findListForCompany(applyDetailPageDTO));
+    }
+
     @ApiOperation("鏌ヨ鍏ㄩ儴")
     @PostMapping("/list")
     @RequiresPermissions("business:applydetail:query")
@@ -83,8 +91,9 @@
     @PostMapping("/exportExcel")
     @RequiresPermissions("business:applydetail:exportExcel")
     public void exportExcel (@RequestBody PageWrap<ApplyDetailPageDTO> pageWrap, HttpServletResponse response) {
-        ExcelExporter.build(ApplyDetail.class).exportWithFirstAndEnd(applyDetailService.findPageForCompany(pageWrap).getRecords(),
-                 pageWrap.getModel().getSolutionName(),"鍦ㄤ繚浜哄憳鍚嶅崟",null, response);
+        ExcelExporter.build(ApplyDetail.class).exportWithSheetAndFirstAndEnd(applyDetailService.findPageForCompany(pageWrap).getRecords(),
+                pageWrap.getModel().getSolutionName(),"銆�"+pageWrap.getModel().getSolutionName()+"銆�"+"淇濆崟浜哄憳淇℃伅",null,"淇濆崟浜哄憳", response);
+
     }
 
     @ApiOperation("鏍规嵁ID鏌ヨ")
diff --git a/server/platform/src/main/java/com/doumee/api/business/CompanyController.java b/server/platform/src/main/java/com/doumee/api/business/CompanyController.java
index 72cac19..0559c94 100644
--- a/server/platform/src/main/java/com/doumee/api/business/CompanyController.java
+++ b/server/platform/src/main/java/com/doumee/api/business/CompanyController.java
@@ -133,6 +133,7 @@
         pageWrap.setQueryFlag(Constants.ZERO);//鏌ヨ鍏ㄩ儴鏉冮檺鑼冨洿鍐�
         return ApiResponse.success(companyService.findList(pageWrap));
     }
+
     @ApiOperation("瀵煎嚭Excel")
     @PostMapping("/exportExcel")
     @RequiresPermissions("business:company:exportExcel")
diff --git a/server/platform/src/main/java/com/doumee/api/business/CompanyDepartmentController.java b/server/platform/src/main/java/com/doumee/api/business/CompanyDepartmentController.java
new file mode 100644
index 0000000..6e1357e
--- /dev/null
+++ b/server/platform/src/main/java/com/doumee/api/business/CompanyDepartmentController.java
@@ -0,0 +1,111 @@
+package com.doumee.api.business;
+
+import com.doumee.api.BaseController;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.dto.UpdateSortDTO;
+import com.doumee.dao.business.model.CompanyDepartment;
+import com.doumee.service.business.CompanyDepartmentService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2024/10/28 19:16
+ */
+@Api(tags = "浼佷笟淇℃伅琛�")
+@RestController
+@RequestMapping("/business/companyDepartment")
+public class CompanyDepartmentController extends BaseController {
+
+    @Autowired
+    private CompanyDepartmentService companyDepartmentService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @RequiresPermissions("business:companydepartment:create")
+    public ApiResponse create(@RequestBody CompanyDepartment companyDepartment) {
+        return ApiResponse.success(companyDepartmentService.create(companyDepartment));
+    }
+
+    @ApiOperation("缁勭粐鏍戞煡璇�")
+    @GetMapping("/tree")
+    @RequiresPermissions("business:companydepartment:query")
+    public ApiResponse<List<CompanyDepartment>> tree () {
+        return ApiResponse.success(companyDepartmentService.departTree(Constants.ZERO));
+    }
+
+
+
+    @ApiOperation("鎺掑簭")
+    @PostMapping("/updateSort")
+    @RequiresPermissions("business:companydepartment:query")
+    public ApiResponse updateSort (@Validated @RequestBody UpdateSortDTO dto){
+        companyDepartmentService.updateSort(dto);
+        return ApiResponse.success(null);
+    }
+
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @RequiresPermissions("business:companydepartment:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        companyDepartmentService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @RequiresPermissions("business:companydepartment:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        companyDepartmentService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @RequiresPermissions("business:companydepartment:update")
+    public ApiResponse updateById(@RequestBody CompanyDepartment companyDepartment) {
+        companyDepartmentService.updateById(companyDepartment);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @RequiresPermissions("business:companydepartment:query")
+    public ApiResponse<PageData<CompanyDepartment>> findPage (@RequestBody PageWrap<CompanyDepartment> pageWrap) {
+        return ApiResponse.success(companyDepartmentService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @RequiresPermissions("business:companydepartment:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<CompanyDepartment> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(CompanyDepartment.class).export(companyDepartmentService.findPage(pageWrap).getRecords(), "浼佷笟淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @RequiresPermissions("business:companydepartment:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(companyDepartmentService.findById(id));
+    }
+}
diff --git a/server/platform/src/main/java/com/doumee/api/business/CompanySolutionController.java b/server/platform/src/main/java/com/doumee/api/business/CompanySolutionController.java
index cf96873..95b462d 100644
--- a/server/platform/src/main/java/com/doumee/api/business/CompanySolutionController.java
+++ b/server/platform/src/main/java/com/doumee/api/business/CompanySolutionController.java
@@ -79,6 +79,7 @@
     public ApiResponse<List<CompanySolution>> findPage (@RequestBody CompanySolution  pageWrap) {
         return ApiResponse.success(companySolutionService.findList(pageWrap));
     }
+
     @ApiOperation("鏌ヨ浼佷笟鍏ㄩ儴鍏宠仈鏂规")
     @PostMapping("/listForCompany")
     @RequiresPermissions("business:companysolution:query")
diff --git a/server/platform/src/main/java/com/doumee/api/business/CompanyUserApplyController.java b/server/platform/src/main/java/com/doumee/api/business/CompanyUserApplyController.java
new file mode 100644
index 0000000..3738d17
--- /dev/null
+++ b/server/platform/src/main/java/com/doumee/api/business/CompanyUserApplyController.java
@@ -0,0 +1,101 @@
+package com.doumee.api.business;
+
+import com.doumee.api.BaseController;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.CompanyUserApply;
+import com.doumee.service.business.CompanyUserApplyService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2024/10/28 19:16
+ */
+@Api(tags = "闆嗗洟鐢宠璁板綍琛�")
+@RestController
+@RequestMapping("/business/companyUserApply")
+public class CompanyUserApplyController extends BaseController {
+
+    @Autowired
+    private CompanyUserApplyService companyUserApplyService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @RequiresPermissions("business:companyuserapply:create")
+    public ApiResponse create(@RequestBody CompanyUserApply companyUserApply) {
+        return ApiResponse.success(companyUserApplyService.create(companyUserApply));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @RequiresPermissions("business:companyuserapply:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        companyUserApplyService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @RequiresPermissions("business:companyuserapply:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        companyUserApplyService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @RequiresPermissions("business:companyuserapply:update")
+    public ApiResponse updateById(@RequestBody CompanyUserApply companyUserApply) {
+        companyUserApplyService.updateById(companyUserApply);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @RequiresPermissions("business:companyuserapply:query")
+    public ApiResponse<PageData<CompanyUserApply>> findPage (@RequestBody PageWrap<CompanyUserApply> pageWrap) {
+        return ApiResponse.success(companyUserApplyService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @RequiresPermissions("business:companyuserapply:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<CompanyUserApply> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(CompanyUserApply.class).export(companyUserApplyService.findPage(pageWrap).getRecords(), "闆嗗洟鐢宠璁板綍琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @RequiresPermissions("business:companyuserapply:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(companyUserApplyService.findById(id));
+    }
+
+
+    @ApiOperation("瀹℃壒")
+    @PostMapping("/audit")
+    @RequiresPermissions("business:companyuserapply:create")
+    public ApiResponse audit(@RequestBody CompanyUserApply companyUserApply) {
+        companyUserApplyService.audit(companyUserApply);
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+
+}
diff --git a/server/platform/src/main/java/com/doumee/api/business/ContractController.java b/server/platform/src/main/java/com/doumee/api/business/ContractController.java
new file mode 100644
index 0000000..25fe538
--- /dev/null
+++ b/server/platform/src/main/java/com/doumee/api/business/ContractController.java
@@ -0,0 +1,108 @@
+package com.doumee.api.business;
+
+import com.doumee.api.BaseController;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.Contract;
+import com.doumee.service.business.ContractService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2024/10/28 19:16
+ */
+@Api(tags = "鍚堝悓淇℃伅琛�")
+@RestController
+@RequestMapping("/business/contract")
+public class ContractController extends BaseController {
+
+    @Autowired
+    private ContractService contractService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @RequiresPermissions("business:contract:create")
+    public ApiResponse create(@RequestBody Contract contract) {
+        return ApiResponse.success(contractService.create(contract));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @RequiresPermissions("business:contract:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        contractService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @RequiresPermissions("business:contract:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        contractService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @RequiresPermissions("business:contract:update")
+    public ApiResponse updateById(@RequestBody Contract contract) {
+        contractService.updateById(contract);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @RequiresPermissions("business:contract:query")
+    public ApiResponse<PageData<Contract>> findPage (@RequestBody PageWrap<Contract> pageWrap) {
+        return ApiResponse.success(contractService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @RequiresPermissions("business:contract:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<Contract> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(Contract.class).export(contractService.findPage(pageWrap).getRecords(), "鍚堝悓淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @RequiresPermissions("business:contract:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(contractService.findById(id));
+    }
+
+
+    @ApiOperation("鍚堝悓鍙栨秷")
+    @GetMapping("/cancel")
+    @RequiresPermissions("business:contract:update")
+    public ApiResponse cancel (@RequestParam Integer id) {
+        contractService.cancel(id);
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+    @ApiOperation("鍙戣捣绛剧讲")
+    @GetMapping("/getSignLink")
+    @RequiresPermissions("business:contract:update")
+    public ApiResponse<String> getSignLink (@RequestParam Integer id) {
+        return ApiResponse.success(contractService.getContractSignLink(id));
+    }
+
+
+}
diff --git a/server/platform/src/main/java/com/doumee/api/business/CustomerCompanyController.java b/server/platform/src/main/java/com/doumee/api/business/CustomerCompanyController.java
new file mode 100644
index 0000000..4b9c051
--- /dev/null
+++ b/server/platform/src/main/java/com/doumee/api/business/CustomerCompanyController.java
@@ -0,0 +1,90 @@
+package com.doumee.api.business;
+
+import com.doumee.api.BaseController;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.model.PageData;
+import com.doumee.dao.business.model.CustomerCompany;
+import com.doumee.service.business.CustomerCompanyService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;    
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import javax.servlet.http.HttpServletResponse;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2024/11/05 18:41
+ */
+@Api(tags = "瀹㈡湇鍏宠仈浼佷笟琛�")
+@RestController
+@RequestMapping("/business/customerCompany")
+public class CustomerCompanyController extends BaseController {
+
+    @Autowired
+    private CustomerCompanyService customerCompanyService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @RequiresPermissions("business:customercompany:create")
+    public ApiResponse create(@RequestBody CustomerCompany customerCompany) {
+        return ApiResponse.success(customerCompanyService.create(customerCompany));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @RequiresPermissions("business:customercompany:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        customerCompanyService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @RequiresPermissions("business:customercompany:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        customerCompanyService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @RequiresPermissions("business:customercompany:update")
+    public ApiResponse updateById(@RequestBody CustomerCompany customerCompany) {
+        customerCompanyService.updateById(customerCompany);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @RequiresPermissions("business:customercompany:query")
+    public ApiResponse<PageData<CustomerCompany>> findPage (@RequestBody PageWrap<CustomerCompany> pageWrap) {
+        return ApiResponse.success(customerCompanyService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @RequiresPermissions("business:customercompany:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<CustomerCompany> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(CustomerCompany.class).export(customerCompanyService.findPage(pageWrap).getRecords(), "瀹㈡湇鍏宠仈浼佷笟琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @RequiresPermissions("business:customercompany:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(customerCompanyService.findById(id));
+    }
+}
diff --git a/server/platform/src/main/java/com/doumee/api/business/CustomerServiceController.java b/server/platform/src/main/java/com/doumee/api/business/CustomerServiceController.java
new file mode 100644
index 0000000..f06927b
--- /dev/null
+++ b/server/platform/src/main/java/com/doumee/api/business/CustomerServiceController.java
@@ -0,0 +1,108 @@
+package com.doumee.api.business;
+
+import com.doumee.api.BaseController;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.model.PageData;
+import com.doumee.dao.business.model.CustomerService;
+import com.doumee.service.business.CompanyService;
+import com.doumee.service.business.CustomerServiceService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;    
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import javax.servlet.http.HttpServletResponse;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2024/11/05 18:41
+ */
+@Api(tags = "瀹㈡湇淇℃伅琛�")
+@RestController
+@RequestMapping("/business/customerService")
+public class CustomerServiceController extends BaseController {
+
+    @Autowired
+    private CustomerServiceService customerServiceService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @RequiresPermissions("business:customerservice:create")
+    public ApiResponse create(@RequestBody CustomerService customerService) {
+        return ApiResponse.success(customerServiceService.create(customerService));
+    }
+
+    @ApiOperation("鎺堟潈浼佷笟")
+    @PostMapping("/auth")
+    @RequiresPermissions("business:customerservice:create")
+    public ApiResponse auth(@RequestBody CustomerService customerService) {
+        customerServiceService.authCompany(customerService);
+        return ApiResponse.success(null);
+    }
+
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @RequiresPermissions("business:customerservice:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        customerServiceService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @RequiresPermissions("business:customerservice:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        customerServiceService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @RequiresPermissions("business:customerservice:update")
+    public ApiResponse updateById(@RequestBody CustomerService customerService) {
+        customerServiceService.updateById(customerService);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @RequiresPermissions("business:customerservice:query")
+    public ApiResponse<PageData<CustomerService>> findPage (@RequestBody PageWrap<CustomerService> pageWrap) {
+        return ApiResponse.success(customerServiceService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @RequiresPermissions("business:customerservice:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<CustomerService> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(CustomerService.class).export(customerServiceService.findPage(pageWrap).getRecords(), "瀹㈡湇淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @RequiresPermissions("business:customerservice:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(customerServiceService.findById(id));
+    }
+
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/findByCompanyId")
+    @RequiresPermissions("business:customerservice:query")
+    public ApiResponse<CustomerService> findByCompanyId(@RequestParam Integer companyId) {
+        return ApiResponse.success(customerServiceService.findByCompanyId(companyId));
+    }
+}
diff --git a/server/platform/src/main/java/com/doumee/api/business/InsuranceApplyController.java b/server/platform/src/main/java/com/doumee/api/business/InsuranceApplyController.java
index 217e7c7..d8fe710 100644
--- a/server/platform/src/main/java/com/doumee/api/business/InsuranceApplyController.java
+++ b/server/platform/src/main/java/com/doumee/api/business/InsuranceApplyController.java
@@ -6,10 +6,15 @@
 import com.doumee.core.model.ApiResponse;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.model.PageData;
+import com.doumee.dao.business.dto.ApplyPowerDTO;
+import com.doumee.dao.business.dto.CountCyclePriceDTO;
 import com.doumee.dao.business.dto.InsuranceApplyQueryDTO;
 import com.doumee.dao.business.dto.SaveDispatchUnitDTO;
 import com.doumee.dao.business.model.InsuranceApply;
+import com.doumee.dao.business.vo.ApplyPowerVO;
+import com.doumee.dao.business.vo.CountCyclePriceVO;
 import com.doumee.service.business.InsuranceApplyService;
+import com.doumee.service.business.impl.UnionApplyServiceImpl;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.shiro.authz.annotation.RequiresPermissions;    
@@ -32,6 +37,9 @@
     @Autowired
     private InsuranceApplyService insuranceApplyService;
 
+    @Autowired
+    private UnionApplyServiceImpl unionApplyServiceImpl;
+
     @PreventRepeat
     @ApiOperation("鏂板缓")
     @PostMapping("/create")
@@ -43,8 +51,17 @@
     @PostMapping("/check")
     @RequiresPermissions("business:insuranceapply:check")
     public ApiResponse check(@RequestBody InsuranceApply insuranceApply) {
-        return ApiResponse.success(insuranceApplyService.check(insuranceApply));
+        return ApiResponse.success(insuranceApplyService.check(insuranceApply,unionApplyServiceImpl));
     }
+
+    @ApiOperation("鎶曚繚澶嶅")
+    @PostMapping("/reexamineCheck")
+    @RequiresPermissions("business:insuranceapply:check")
+    public ApiResponse reexamineCheck(@RequestBody InsuranceApply insuranceApply) {
+        return ApiResponse.success(insuranceApplyService.reexamineCheck(insuranceApply));
+    }
+
+
     @ApiOperation("骞冲彴閫�鍥炵敵璇�")
     @PostMapping("/back")
     @RequiresPermissions("business:insuranceapply:back")
@@ -145,4 +162,20 @@
     public ApiResponse<InsuranceApply> findById(@PathVariable Integer id) {
         return ApiResponse.success(insuranceApplyService.findDetail(id));
     }
+
+
+    @ApiOperation("鑾峰彇淇濆崟姝㈡湡涓庡垵濮嬮噾棰�")
+    @PostMapping("/getCountCyclePriceVO")
+    public ApiResponse<CountCyclePriceVO> getCountCyclePriceVO (@RequestBody CountCyclePriceDTO countCyclePriceDTO) {
+        return ApiResponse.success("鎿嶄綔鎴愬姛",insuranceApplyService.getCountCyclePriceVO(countCyclePriceDTO));
+    }
+
+
+    @ApiOperation("鏌ヨ淇濆崟鏄惁鍙繘琛屽姞鍑忎繚")
+    @PostMapping("/getApplyPower")
+    @RequiresPermissions("business:insuranceapply:query")
+    public ApiResponse<ApplyPowerVO> getApplyPower(@RequestBody ApplyPowerDTO applyPowerDTO) {
+        return ApiResponse.success(insuranceApplyService.getApplyPower(applyPowerDTO));
+    }
+
 }
diff --git a/server/platform/src/main/java/com/doumee/api/business/MemberController.java b/server/platform/src/main/java/com/doumee/api/business/MemberController.java
index fe33e4a..c57e268 100644
--- a/server/platform/src/main/java/com/doumee/api/business/MemberController.java
+++ b/server/platform/src/main/java/com/doumee/api/business/MemberController.java
@@ -100,4 +100,16 @@
     public ApiResponse findById(@PathVariable Integer id) {
         return ApiResponse.success(memberService.findById(id));
     }
+
+
+    @ApiOperation("鏁版嵁鍒楄〃")
+    @PostMapping("/findListByDTO")
+    @RequiresPermissions("business:member:query")
+    public ApiResponse<List<Member>> findListByDTO (@RequestBody MemberQueryDTO memberQueryDTO) {
+        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        return ApiResponse.success(memberService.findListByDTO(memberQueryDTO));
+    }
+
+
+
 }
diff --git a/server/platform/src/main/java/com/doumee/api/business/SolutionsBaseController.java b/server/platform/src/main/java/com/doumee/api/business/SolutionsBaseController.java
index c1f73b4..03151e4 100644
--- a/server/platform/src/main/java/com/doumee/api/business/SolutionsBaseController.java
+++ b/server/platform/src/main/java/com/doumee/api/business/SolutionsBaseController.java
@@ -6,6 +6,7 @@
 import com.doumee.core.model.ApiResponse;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.model.PageData;
+import com.doumee.dao.business.model.Solutions;
 import com.doumee.dao.business.model.SolutionsBase;
 import com.doumee.service.business.SolutionsBaseService;
 import io.swagger.annotations.Api;
@@ -67,6 +68,16 @@
         return ApiResponse.success(null);
     }
 
+
+    @ApiOperation("绂佺敤鍚敤")
+    @PostMapping("/updateStatus")
+    @RequiresPermissions("business:solutionsbase:update")
+    public ApiResponse updateStatus(@RequestBody SolutionsBase bean) {
+        solutionsBaseService.updateStatus(bean);
+        return ApiResponse.success(null);
+    }
+
+
     @ApiOperation("鍒嗛〉鏌ヨ")
     @PostMapping("/page")
     @RequiresPermissions("business:solutionsbase:query")
@@ -74,6 +85,14 @@
         return ApiResponse.success(solutionsBaseService.findPage(pageWrap));
     }
 
+
+    @ApiOperation("鍒楄〃鏌ヨ")
+    @PostMapping("/list")
+    @RequiresPermissions("business:solutionsbase:query")
+    public ApiResponse<List<SolutionsBase>> list (@RequestBody SolutionsBase solutionsBase) {
+        return ApiResponse.success(solutionsBaseService.findList(solutionsBase));
+    }
+
     @ApiOperation("瀵煎嚭Excel")
     @PostMapping("/exportExcel")
     @RequiresPermissions("business:solutionsbase:exportExcel")
diff --git a/server/platform/src/main/java/com/doumee/api/business/SolutionsController.java b/server/platform/src/main/java/com/doumee/api/business/SolutionsController.java
index 6232731..d4d001f 100644
--- a/server/platform/src/main/java/com/doumee/api/business/SolutionsController.java
+++ b/server/platform/src/main/java/com/doumee/api/business/SolutionsController.java
@@ -3,9 +3,12 @@
 import com.doumee.api.BaseController;
 import com.doumee.core.annotation.excel.ExcelExporter;
 import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.ApiResponse;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.model.PageData;
+import com.doumee.core.utils.Constants;
 import com.doumee.dao.business.model.Solutions;
 import com.doumee.service.business.SolutionsService;
 import io.swagger.annotations.Api;
@@ -17,6 +20,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * @author 姹熻箘韫�
@@ -102,4 +106,20 @@
     public ApiResponse findById(@PathVariable Integer id) {
         return ApiResponse.success(solutionsService.findById(id));
     }
+
+    @ApiOperation("鏌ヨ浼佷笟鍙娇鐢ㄦ柟妗堬紙宸茬缃诧級")
+    @GetMapping("/getUseList")
+    @RequiresPermissions("business:solutions:query")
+    public ApiResponse<List<Solutions>> getUseList (@RequestParam Integer companyId,Integer dateType) {
+        if(Objects.isNull(companyId)){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        if(Objects.isNull(dateType)){
+            dateType = Constants.TWO;
+        }
+        List<Solutions>  solutionsList = solutionsService.findListByCompanyId(dateType,companyId);
+        return ApiResponse.success(solutionsList);
+    }
+
+
 }
diff --git a/server/platform/src/main/java/com/doumee/api/business/UnionApplyController.java b/server/platform/src/main/java/com/doumee/api/business/UnionApplyController.java
index 9878c66..52d7860 100644
--- a/server/platform/src/main/java/com/doumee/api/business/UnionApplyController.java
+++ b/server/platform/src/main/java/com/doumee/api/business/UnionApplyController.java
@@ -6,8 +6,10 @@
 import com.doumee.core.model.ApiResponse;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
 import com.doumee.dao.business.dto.*;
 import com.doumee.dao.business.model.UnionApply;
+import com.doumee.service.business.InsuranceApplyService;
 import com.doumee.service.business.UnionApplyService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -30,6 +32,8 @@
 
     @Autowired
     private UnionApplyService unionApplyService;
+    @Autowired
+    private InsuranceApplyService insuranceApplyService;
 
     @PreventRepeat
     @ApiOperation("鏂板缓")
@@ -112,6 +116,15 @@
         return ApiResponse.success(null);
     }
 
+    @ApiOperation("鍚堝苟鍗曞瀹�")
+    @PostMapping("/reexamineCheck")
+    @RequiresPermissions("business:unionapply:cancel")
+    public ApiResponse reexamineCheck(@RequestBody UnionApply unionApply) {
+        unionApplyService.reexamineCheck(unionApply);
+        return ApiResponse.success(null);
+    }
+
+
     @PreventRepeat
     @ApiOperation("涓婁紶鎶曚繚鍗�")
     @PostMapping("/uploadToubaodan")
@@ -134,6 +147,8 @@
     @RequiresPermissions("business:unionapply:uploadBXD")
     public ApiResponse uploadBXD(@RequestBody UnionApplyBXDDTO unionApplyBXDDTO) {
         unionApplyService.uploadBXD(unionApplyBXDDTO);
+        insuranceApplyService.updateApplyCurrentFee(null,unionApplyBXDDTO.getId());
+        unionApplyService.updateUnionApplyCurrentFee(unionApplyBXDDTO.getId());
         return ApiResponse.success(null);
     }
 
diff --git a/server/platform/src/main/java/com/doumee/api/business/WorktypeController.java b/server/platform/src/main/java/com/doumee/api/business/WorktypeController.java
index eaa4bf5..0d78535 100644
--- a/server/platform/src/main/java/com/doumee/api/business/WorktypeController.java
+++ b/server/platform/src/main/java/com/doumee/api/business/WorktypeController.java
@@ -20,6 +20,7 @@
 import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
 
 /**
  * @author 姹熻箘韫�
@@ -107,6 +108,15 @@
     }
 
 
+    @ApiOperation("涓绘柟妗堝鍏ュ伐绉�")
+    @PostMapping("/importExcelForSolution")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "file", value = "file", required = true, paramType = "query", dataType = "file", dataTypeClass = File.class),
+    })
+    @RequiresPermissions("business:worktype:create")
+    public ApiResponse<Set<Integer>> importExcelForSolution (@ApiParam(value = "file") MultipartFile file , Integer insuranceId) {
+        return ApiResponse.success(worktypeService.importBatchForSolutions(file,insuranceId));
+    }
 
     @ApiOperation("鏍规嵁ID鏌ヨ")
     @GetMapping("/{id}")
diff --git a/server/platform/src/main/java/com/doumee/api/system/SystemDataPermissionController.java b/server/platform/src/main/java/com/doumee/api/system/SystemDataPermissionController.java
index fcb5b7c..d1f133f 100644
--- a/server/platform/src/main/java/com/doumee/api/system/SystemDataPermissionController.java
+++ b/server/platform/src/main/java/com/doumee/api/system/SystemDataPermissionController.java
@@ -38,6 +38,13 @@
     @Autowired
     private SystemDataPermissionBiz systemDataPermissionBiz;
 
+    @ApiOperation("鏍规嵁roleId鏌ヨ浼佷笟鏁版嵁鏉冮檺")
+    @PostMapping("/findByRoleId")
+    @RequiresPermissions("system:datapermission:query")
+    public ApiResponse<SystemDataPermission> findByRoleId (@RequestBody  SystemDataPermission  pageWrap) {
+        return ApiResponse.success(systemDataPermissionService.findByRoleId(pageWrap));
+    }
+
     @PreventRepeat
     @ApiOperation("鏂板缓")
     @PostMapping("/create")
diff --git a/server/platform/src/main/java/com/doumee/api/system/SystemRoleController.java b/server/platform/src/main/java/com/doumee/api/system/SystemRoleController.java
index 622d6bf..d597d16 100644
--- a/server/platform/src/main/java/com/doumee/api/system/SystemRoleController.java
+++ b/server/platform/src/main/java/com/doumee/api/system/SystemRoleController.java
@@ -12,6 +12,7 @@
 import com.doumee.dao.system.dto.CreateRoleMenuDTO;
 import com.doumee.dao.system.dto.CreateRolePermissionDTO;
 import com.doumee.dao.system.dto.QuerySystemRoleDTO;
+import com.doumee.dao.system.model.SystemDataPermission;
 import com.doumee.dao.system.model.SystemRole;
 import com.doumee.dao.system.vo.SystemRoleListVO;
 import com.doumee.service.system.SystemRoleService;
@@ -113,4 +114,16 @@
         systemRole.setDeleted(Boolean.FALSE);
         return ApiResponse.success(systemRoleService.findList(systemRole));
     }
+
+
+    @PreventRepeat
+    @ApiOperation("閰嶇疆瑙掕壊鏁版嵁鏉冮檺")
+    @PostMapping("/createRoleDataPermission")
+    @RequiresPermissions("system:role:query")
+    public ApiResponse createRoleDataPermission (@Validated @RequestBody SystemDataPermission dto) {
+        systemRoleBiz.createRoleDataPermission(dto);
+        return ApiResponse.success(null);
+    }
+
+
 }
diff --git a/server/platform/src/main/java/com/doumee/api/system/SystemUserController.java b/server/platform/src/main/java/com/doumee/api/system/SystemUserController.java
index 9ceb7a4..8ca288d 100644
--- a/server/platform/src/main/java/com/doumee/api/system/SystemUserController.java
+++ b/server/platform/src/main/java/com/doumee/api/system/SystemUserController.java
@@ -8,6 +8,8 @@
 import com.doumee.core.constants.OperaType;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.Member;
 import com.doumee.dao.system.dto.CreateSystemUserDTO;
 import com.doumee.dao.system.dto.CreateUserRoleDTO;
 import com.doumee.dao.system.dto.QuerySystemUserDTO;
@@ -70,6 +72,7 @@
         systemUserBiz.create(systemUser);
         return ApiResponse.success(null);
     }
+
     @Trace(withRequestParameters = false)
     @PreventRepeat
     @ApiOperation("鏂板缓浼佷笟鎴栬�呭晢鎴疯处鍙�")
@@ -127,6 +130,9 @@
     public ApiResponse<PageData<SystemUserListVO>> findPage (@RequestBody PageWrap<QuerySystemUserDTO> pageWrap) {
         return ApiResponse.success(systemUserService.findPage(pageWrap));
     }
+
+
+
     @ApiOperation("鍒嗛〉鏌ヨ")
     @PostMapping("/pageCompany")
     @RequiresPermissions("system:user:query")
@@ -155,4 +161,13 @@
         return ApiResponse.success(systemUserService.findById(id));
     }
 
+
+    @ApiOperation("璁剧疆鎴栧彇娑堜富绠�")
+    @PostMapping("/updateHead")
+    @RequiresPermissions("system:user:query")
+    public ApiResponse updateHead(@RequestBody SystemUser systemUser){
+        systemUserService.updateHead(systemUser);
+        return ApiResponse.success(null);
+    }
+
 }
diff --git a/server/service/src/main/java/com/doumee/biz/system/SystemRoleBiz.java b/server/service/src/main/java/com/doumee/biz/system/SystemRoleBiz.java
index 3784377..e6ae434 100644
--- a/server/service/src/main/java/com/doumee/biz/system/SystemRoleBiz.java
+++ b/server/service/src/main/java/com/doumee/biz/system/SystemRoleBiz.java
@@ -2,6 +2,7 @@
 
 import com.doumee.dao.system.dto.CreateRoleMenuDTO;
 import com.doumee.dao.system.dto.CreateRolePermissionDTO;
+import com.doumee.dao.system.model.SystemDataPermission;
 import com.doumee.dao.system.model.SystemRole;
 
 import java.util.List;
@@ -54,4 +55,7 @@
      * @date 2023/03/21 14:49
      */
     void createRoleMenu(CreateRoleMenuDTO dto);
+
+    void createRoleDataPermission(SystemDataPermission dto);
+
 }
diff --git a/server/service/src/main/java/com/doumee/biz/system/impl/SystemMenuBizImpl.java b/server/service/src/main/java/com/doumee/biz/system/impl/SystemMenuBizImpl.java
index 0089867..1f9e5ef 100644
--- a/server/service/src/main/java/com/doumee/biz/system/impl/SystemMenuBizImpl.java
+++ b/server/service/src/main/java/com/doumee/biz/system/impl/SystemMenuBizImpl.java
@@ -72,6 +72,8 @@
         List<SystemMenu> menuPool;
         if (currentMenu.getParentId() == null) {
             menuPool = systemMenuService.findRootList();
+            //2024骞�11鏈�16鏃�13:51:53 杩囨护鍚岀被鍨嬫暟鎹�
+            menuPool = menuPool.stream().filter(i->Constants.equalsInteger(i.getType(),currentMenu.getType())).collect(Collectors.toList());
         } else {
             SystemMenu queryDto = new SystemMenu();
             queryDto.setParentId(currentMenu.getParentId());
@@ -144,11 +146,14 @@
             if(Objects.isNull(company)){
                 return rootNodes;
             }
-            SystemUser systemUser = systemUserService.findById(userId);
+            SystemUser dbUser = new SystemUser();
+            dbUser.setId(loginUserInfo.getId());
+            SystemUser systemUser = systemUserService.findOne(dbUser);
             if(Objects.isNull(systemUser)){
                 return rootNodes;
             }
-            if(company.getUsername().equals(systemUser.getUsername())){
+            if(company.getUsername().equals(systemUser.getUsername())
+            || (Constants.equalsInteger(type,Constants.ONE) && !Constants.equalsInteger(systemUser.getCompanyId(),company.getId()))){
                 SystemMenu systemMenu = new SystemMenu();
                 systemMenu.setType(type);
                 systemMenu.setDeleted(Boolean.FALSE);
diff --git a/server/service/src/main/java/com/doumee/biz/system/impl/SystemRoleBizImpl.java b/server/service/src/main/java/com/doumee/biz/system/impl/SystemRoleBizImpl.java
index 0a71621..65ea552 100644
--- a/server/service/src/main/java/com/doumee/biz/system/impl/SystemRoleBizImpl.java
+++ b/server/service/src/main/java/com/doumee/biz/system/impl/SystemRoleBizImpl.java
@@ -3,14 +3,19 @@
 import com.doumee.biz.system.SystemRoleBiz;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
+import com.doumee.core.model.LoginUserInfo;
+import com.doumee.core.utils.DateUtil;
 import com.doumee.dao.system.dto.CreateRoleMenuDTO;
 import com.doumee.dao.system.dto.CreateRolePermissionDTO;
+import com.doumee.dao.system.model.SystemDataPermission;
 import com.doumee.dao.system.model.SystemRole;
 import com.doumee.dao.system.model.SystemRoleMenu;
 import com.doumee.dao.system.model.SystemRolePermission;
+import com.doumee.service.system.SystemDataPermissionService;
 import com.doumee.service.system.SystemRoleMenuService;
 import com.doumee.service.system.SystemRolePermissionService;
 import com.doumee.service.system.SystemRoleService;
+import org.apache.shiro.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -29,6 +34,9 @@
 
     @Autowired
     private SystemRoleMenuService systemRoleMenuService;
+
+    @Autowired
+    private SystemDataPermissionService systemDataPermissionService;
 
     @Override
     public Integer create(SystemRole systemRole) {
@@ -110,4 +118,27 @@
             systemRoleMenuService.create(newRoleMenu);
         }
     }
+
+
+
+    @Override
+    @Transactional
+    public void createRoleDataPermission(SystemDataPermission dto) {
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        if(dto.getRoleId()==null || dto.getType()==null ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝璇锋眰鍙傛暟涓嶆纭紒");
+        }
+        // 鍒犻櫎鍏宠仈鏉冮檺
+        SystemDataPermission deleteDto = new SystemDataPermission();
+        deleteDto.setRoleId(dto.getRoleId());
+
+        systemDataPermissionService.delete(deleteDto);
+        // 鏂板鏂扮殑鏉冮檺
+        dto.setDeleted(Boolean.FALSE);
+        dto.setBusinessCode("DEPARTMENT");
+        dto.setCreateTime(DateUtil.getCurrentDate());
+        dto.setCreateUser(user.getId());
+        dto.setDisabled(Boolean.FALSE);
+        systemDataPermissionService.create(dto);
+    }
 }
diff --git a/server/service/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java b/server/service/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java
index 1bb9727..3e10b1f 100644
--- a/server/service/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java
+++ b/server/service/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java
@@ -9,8 +9,10 @@
 import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.CompanyDepartmentMapper;
 import com.doumee.dao.business.SmsEmailMapper;
 import com.doumee.dao.business.model.Company;
+import com.doumee.dao.business.model.CompanyDepartment;
 import com.doumee.dao.system.dto.*;
 import com.doumee.dao.system.model.SystemDepartment;
 import com.doumee.dao.system.model.SystemDepartmentUser;
@@ -46,6 +48,9 @@
     private SystemDictDataBiz systemDictDataBiz;
     @Autowired
     private CompanyService companyService;
+    @Autowired
+    private CompanyDepartmentMapper companyDepartmentMapper;
+
     @Value("${debug_model}")
     private boolean debugModel;
 
@@ -181,7 +186,6 @@
     @Transactional(rollbackFor = {Exception.class,BusinessException.class})
     public void createCompany(CreateSystemUserDTO systemUser) {
         // 楠岃瘉鐢ㄦ埛鍚�
-
         LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
         if(!Constants.equalsInteger(loginUserInfo.getType(),Constants.UserType.SYSTEM.getKey())){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED);
@@ -205,12 +209,10 @@
         SystemUser queryUserDto = new SystemUser();
         queryUserDto.setUsername(systemUser.getUsername());
         queryUserDto.setDeleted(Boolean.FALSE);
-//        queryUserDto.setType(Constants.ZERO);
         SystemUser user = systemUserService.findOne(queryUserDto);
         if (user != null) {
             throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "鐧诲綍璐﹀彿宸插瓨鍦�");
         }
-
         // 楠岃瘉鎵嬫満鍙�
        if (StringUtils.isNotBlank(systemUser.getMobile())) {
             queryUserDto = new SystemUser();
@@ -229,8 +231,17 @@
         systemUser.setType(Constants.equalsInteger(company.getType(),Constants.ONE)?Constants.UserType.ZHUBO.getKey():Constants.UserType.COMPANY.getKey());
         systemUser.setType(loginUserInfo.getType());
         systemUser.setStatus(Constants.ZERO);
+
+        //濡傛灉鏄紒涓氱敤鎴� 蹇呴』濉啓email
+        if(Constants.equalsInteger(systemUser.getType(),Constants.ONE)){
+            if( systemUser.getEmail() == null){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST);
+            }
+        }
+        this.dealCompanyDepartmentData(systemUser);
         Integer userId = systemUserService.create(systemUser);
-        // 璁剧疆閮ㄩ棬
+
+        /*// 璁剧疆閮ㄩ棬
         if (systemUser.getDepartmentId() != null) {
             SystemDepartmentUser systemDepartmentUser = new SystemDepartmentUser();
             systemDepartmentUser.setDepartmentId(systemUser.getDepartmentId());
@@ -248,7 +259,7 @@
             systemDepartmentUser.setOperaUser(systemUser.getCreateUser());
             systemDepartmentUser.setOperaTime(new Date());
             systemDepartmentUserService.create(systemDepartmentUser);
-        }
+        }*/
 
     }
 
@@ -258,7 +269,6 @@
         SystemUser queryUserDto = new SystemUser();
         SystemUser user = null;
         if (StringUtils.isNotBlank(systemUser.getUsername())){
-
             queryUserDto.setUsername(systemUser.getUsername());
             queryUserDto.setDeleted(Boolean.FALSE);
             user = systemUserService.findOne(queryUserDto);
@@ -291,12 +301,11 @@
                 }
             }
         }
-        systemUser.setType(null);//涓嶆敮鎸佷慨鏀�
         systemUser.setCompanyId(null);//涓嶆敮鎸佷慨鏀�
         // 淇敼鐢ㄦ埛
         systemUserService.updateById(systemUser);
         // 璁剧疆閮ㄩ棬
-        SystemDepartmentUser deleteDepartmentDto = new SystemDepartmentUser();
+        /*SystemDepartmentUser deleteDepartmentDto = new SystemDepartmentUser();
         deleteDepartmentDto.setUserId(systemUser.getId());
         systemDepartmentUserService.delete(deleteDepartmentDto);
         if (systemUser.getDepartmentId() != null) {
@@ -306,7 +315,23 @@
             systemDepartmentUser.setOperaUser(systemUser.getUpdateUser());
             systemDepartmentUser.setOperaTime(new Date());
             systemDepartmentUserService.create(systemDepartmentUser);
+        }*/
+    }
+
+
+    public void dealCompanyDepartmentData(CreateSystemUserDTO systemUser){
+        if(Objects.isNull(systemUser.getDepartmentId())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
         }
+        //澶勭悊缁勭粐鏁版嵁
+        CompanyDepartment companyDepartment = companyDepartmentMapper.selectById(systemUser.getDepartmentId());
+        if(Objects.isNull(companyDepartment)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌缁勭粐鏁版嵁");
+        }
+        if(Constants.equalsInteger(companyDepartment.getType(),systemUser.getType())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"缁勭粐鍖归厤澶辫触,闈炲悓绫诲瀷缁勭粐");
+        }
+        systemUser.setDepartmentId(companyDepartment.getId());
 
     }
 
diff --git a/server/service/src/main/java/com/doumee/config/shiro/ShiroRealm.java b/server/service/src/main/java/com/doumee/config/shiro/ShiroRealm.java
index 111f58a..9c9af4b 100644
--- a/server/service/src/main/java/com/doumee/config/shiro/ShiroRealm.java
+++ b/server/service/src/main/java/com/doumee/config/shiro/ShiroRealm.java
@@ -4,6 +4,8 @@
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.CompanyPermissionMapper;
+import com.doumee.dao.business.join.CompanyPermissionJoinMapper;
 import com.doumee.dao.business.model.Company;
 import com.doumee.dao.business.model.CompanyPermission;
 import com.doumee.dao.system.model.SystemDataPermission;
@@ -16,6 +18,7 @@
 import com.doumee.service.system.SystemPermissionService;
 import com.doumee.service.system.SystemRoleService;
 import com.doumee.service.system.SystemUserService;
+import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.authc.AuthenticationException;
 import org.apache.shiro.authc.AuthenticationInfo;
@@ -31,6 +34,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 鑷畾涔塕ealm锛屽鐞嗚璇佸拰鏉冮檺
@@ -60,6 +64,7 @@
     @Lazy
     @Autowired
     private SystemPermissionService systemPermissionService;
+
 
     /**
      * 鏉冮檺澶勭悊
@@ -109,26 +114,60 @@
         // 鑾峰彇鐧诲綍鐢ㄦ埛淇℃伅
          if(authenticationToken.getUserType() == 0){
             roles =   systemRoleService.findByUserId(user.getId());
-            CompanyPermission c = new CompanyPermission();
-            c.setUserId(user.getId());
-            c.setIsdeleted(Constants.ZERO);
-            List<CompanyPermission> pList = companyPermissionService.findList(c);
-            if(pList!=null){
-                for (CompanyPermission cc : pList){
-                    if(user.getCompanyIdList() == null){
-                        user.setCompanyIdList(new ArrayList<>());
-                    }
-                    user.getCompanyIdList().add(cc.getCompanyId());
-                }
-            }
-            permissions =  systemPermissionService.findByUserId(user.getId());
+             CompanyPermission c = new CompanyPermission();
+             c.setUserId(user.getId());
+             c.setIsdeleted(Constants.ZERO);
+             List<CompanyPermission> pList = companyPermissionService.findList(c);
+             if(pList!=null){
+                 for (CompanyPermission cc : pList){
+                     if(user.getCompanyIdList() == null){
+                         user.setCompanyIdList(new ArrayList<>());
+                     }
+                     user.getCompanyIdList().add(cc.getCompanyId());
+                 }
+             }
+             permissions =  systemPermissionService.findByUserId(user.getId());
         }else{
-            Company company = companyService.findById(user.getCompanyId());
+            Integer selfCompanyId = user.getCompanyId();
+            Company company = companyService.findById(selfCompanyId);
             if(company == null){
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝浼佷笟璐﹀彿淇℃伅涓嶆纭紒");
             }
             user.setCompany(company);
-            if(StringUtils.equals(company.getUsername(),user.getUsername())){
+            user.setShowCompany(company);
+             if(authenticationToken.getUserType() == 1){
+                 List<CompanyPermission> pList  = companyPermissionService.getUserCompanyPermission(user.getId());
+                 //鍔犲叆鑷繁鐨勯粯璁や紒涓�
+                 CompanyPermission companyPermission = new CompanyPermission();
+                 companyPermission.setUserId(user.getId());
+                 companyPermission.setCompanyId(company.getId());
+                 companyPermission.setType(Constants.ONE);
+                 companyPermission.setId(Constants.ONE);
+                 companyPermission.setIsSelfCompany(Constants.ONE);
+                 companyPermission.setIsShow(Constants.ONE);
+                 companyPermission.setCompanyName(company.getName());
+                 pList.add(companyPermission);
+                 if(Objects.nonNull(authenticationToken.getCompanyId())){
+                     for (CompanyPermission c:pList) {
+                         if(Constants.equalsInteger(c.getCompanyId(),authenticationToken.getCompanyId())){
+                             c.setIsShow(Constants.ONE);
+                             Company showCompany = companyService.findById(authenticationToken.getCompanyId());
+                             user.setShowCompany(showCompany);
+                         }else{
+                             c.setIsShow(Constants.ZERO);
+                         }
+                     }
+                 }
+                 if(CollectionUtils.isNotEmpty(pList)) {
+                     user.setCompanyPermissionList(pList);
+                 }
+             }
+             //濡傛灉鐢ㄦ埛涓庝紒涓氳秴绠¤处鍙风浉鍚� 鎴栬�� 浼佷笟涓婚敭涓庡綋鍓嶅垏鎹㈠悗鐨勪富閿笉鐩稿悓鏃� 缁欒秴绠℃潈闄�
+            if(StringUtils.equals(company.getUsername(),user.getUsername())
+                    ||( Objects.nonNull(authenticationToken.getCompanyId()) && !Constants.equalsInteger(company.getId(),authenticationToken.getCompanyId())  )){
+                if(Objects.nonNull(authenticationToken.getCompanyId())){
+                    user.setCompanyId(authenticationToken.getCompanyId());
+                }
                 //濡傛灉鏄秴绠★紝
                 SystemRole role = new SystemRole();
                 role.setType(Constants.ONE);
@@ -145,7 +184,11 @@
         SystemRole rt = new SystemRole();
         rt.setDeleted(Boolean.FALSE);
         //鏁版嵁閮ㄩ棬鏉冮檺闆嗗悎
-        user.setDepartIdList(systemDataPermissionService.selectHighRole(new SystemDataPermission(),rt,user));
+        if(Constants.equalsInteger(user.getType(),Constants.ONE) && Constants.equalsInteger(user.getCompany().getId(),user.getCompanyId())){
+            user.setDepartIdList(null);
+        }else{
+            user.setDepartIdList(systemDataPermissionService.selectHighRole(new SystemDataPermission(),rt,user));
+        }
 
         LoginUserInfo userInfo = LoginUserInfo.from(user, roles, permissions);
         // 楠岃瘉鐢ㄦ埛
diff --git a/server/service/src/main/java/com/doumee/config/shiro/ShiroToken.java b/server/service/src/main/java/com/doumee/config/shiro/ShiroToken.java
index 121e1fc..87626ab 100644
--- a/server/service/src/main/java/com/doumee/config/shiro/ShiroToken.java
+++ b/server/service/src/main/java/com/doumee/config/shiro/ShiroToken.java
@@ -15,14 +15,24 @@
      */
     boolean needPassword;
     int userType;
+    Integer companyId;
 
     public ShiroToken() {
     }
-    public  ShiroToken( String username, String password, boolean needPassword,int userType) {
+    public  ShiroToken( String username, String password, boolean needPassword,int userType,Integer companyId) {
         super(username,  password, false, (String)null);
         this.needPassword = needPassword;
         this.userType = userType;
+        this.companyId = companyId;
     }
+    public Integer getCompanyId() {
+        return companyId;
+    }
+
+    public void setCompanyId(Integer companyId) {
+        this.companyId = companyId;
+    }
+
 
     public boolean isNeedPassword() {
         return needPassword;
diff --git a/server/service/src/main/java/com/doumee/core/annotation/excel/ExcelExporter.java b/server/service/src/main/java/com/doumee/core/annotation/excel/ExcelExporter.java
index fe18711..c9ce1a1 100644
--- a/server/service/src/main/java/com/doumee/core/annotation/excel/ExcelExporter.java
+++ b/server/service/src/main/java/com/doumee/core/annotation/excel/ExcelExporter.java
@@ -233,6 +233,10 @@
         this.exportWithFirstAndEnd(data, fileName, DEFAULT_SHEET_NAME, first,end,response);
     }
 
+
+    public void exportWithSheetAndFirstAndEnd (List<T> data, String fileName,String first,String end, String sheetName, HttpServletResponse response) {
+        this.exportWithFirstAndEnd(data, fileName, sheetName, first,end,response);
+    }
     /**O
      * 鑾峰彇鍒楅泦鍚�
      */
@@ -598,6 +602,9 @@
             throw new BusinessException(ResponseStatus.EXPORT_EXCEL_ERROR, e);
         }
     }
+
+
+
 
     /**
      * 鍔犲噺鐢宠琛ㄥ鍑�
@@ -1030,6 +1037,9 @@
             }
         }
     }
+
+
+
     /**
      * 瀵煎嚭鍔犲噺淇濈敵璇疯鍗�
      * @param data 鏁版嵁
@@ -2113,4 +2123,190 @@
             }
         }
     }
+
+    public void exportApplyJiajianBaoExcel(InsuranceApply insuranceApply,List<ApplyChange> applyChangeList, HttpServletResponse response) {
+        try {
+            String encodeFileName = URLEncoder.encode(insuranceApply.getCode(), Charset.forName("UTF-8").toString()) + ".xlsx";
+            response.setHeader("Content-Disposition","attachment;filename=" + encodeFileName);
+            response.setContentType("application/octet-stream");
+            response.setHeader("eva-opera-type", "download");
+            response.setHeader("eva-download-filename", encodeFileName);
+            this.exportApplyJiajianBaoExcelDo(applyChangeList, response.getOutputStream());
+        } catch (IOException e) {
+            throw new BusinessException(ResponseStatus.EXPORT_EXCEL_ERROR, e);
+        }
+    }
+
+
+    public String getSheetName(List<String> nameList ,String sheetName){
+        if(CollectionUtils.isEmpty(nameList)){
+            return sheetName;
+        }
+        Integer count = nameList.stream().filter(i->i.equals(sheetName)).collect(Collectors.toList()).size();
+        if(count>Constants.ZERO){
+            return sheetName + "("+(count)+")";
+        }else{
+            return sheetName;
+        }
+
+    }
+
+
+    /**
+     * 瀵煎嚭淇濆崟涓� 鍔犲噺淇濈敵璇疯鍗�
+     * @param applyChangeList 鏁版嵁
+     * @param sheetName Sheet鍚嶇О
+     * @param os 杈撳嚭娴�
+     */
+    public void exportApplyJiajianBaoExcelDo (List<ApplyChange> applyChangeList, OutputStream os) {
+        SXSSFWorkbook sxssfWorkbook;
+        try {
+            sxssfWorkbook = new SXSSFWorkbook();
+            List<String> nameList = new ArrayList<>();
+            for (int x = 0; x < applyChangeList.size(); x++) {
+
+                ApplyChange data = applyChangeList.get(x);
+                Sheet sheet = sxssfWorkbook.createSheet(getSheetName(nameList,com.doumee.core.utils.DateUtil.getDate(data.getCreateDate(),"yyyy-MM-dd")));
+                for (int i = 0; i < 13; i++) {
+                    sheet.setColumnWidth(i, ((i==2|| i== 3 || i==8|| i==9|| i==10)?16:8) * 2 * 256);
+                }
+                sheet.createFreezePane(0, 1);
+                sheet.addMergedRegion(new CellRangeAddress(0   ,0,0,12));
+                Row title = sheet.createRow(0);
+                title.setHeight((short) 800);
+                Cell c = title.createCell(0);
+                c.setCellValue("鍔犲噺淇濊褰�");
+                nameList.add(com.doumee.core.utils.DateUtil.getDate(data.getCreateDate(),"yyyy-MM-dd"));
+                for (int i = 0; i < 13; i++) {
+//                title.createCell(i).setCellValue(i==0?sheetName:"");
+                    configTitleCell(sxssfWorkbook,title.getCell(i));
+                }
+                Row header1 = sheet.createRow(1);
+                header1.createCell(0).setCellValue("鎶曚繚浼佷笟");
+                header1.createCell(1).setCellValue("");
+                header1.createCell(2).setCellValue("淇濋櫓鏂规");
+                header1.createCell(3).setCellValue("淇濆崟鍙�");
+                header1.createCell(4).setCellValue("淇濋櫓鐢熸晥璧锋湡");
+                header1.createCell(5).setCellValue("");
+                header1.createCell(6).setCellValue("淇濋櫓鐢熸晥姝㈡湡");
+                header1.createCell(7).setCellValue("");
+                header1.createCell(8).setCellValue(Constants.getChangeApplyTimeTitle(1,data));
+                header1.createCell(9).setCellValue(Constants.getChangeApplyTimeTitle(0,data));
+                header1.createCell(10).setCellValue("鍔犱繚浜烘暟");
+                header1.createCell(11).setCellValue("鍑忎繚浜烘暟");
+                header1.createCell(12).setCellValue("鎵规敼閲戦");
+                for (int i = 0; i < 13; i++) {
+                    configFirstCell(sxssfWorkbook,header1.getCell(i));
+                }
+                sheet.addMergedRegion(new CellRangeAddress(1  ,1,0,1));
+                sheet.addMergedRegion(new CellRangeAddress(1  ,1,4,5));
+                sheet.addMergedRegion(new CellRangeAddress(1  ,1,6,7));
+
+                Row header2 = sheet.createRow(2);
+                header2.createCell(0).setCellValue(data.getCompanyName());
+                header2.createCell(1).setCellValue("");
+                header2.createCell(2).setCellValue(data.getSolutionsName());
+                header2.createCell(3).setCellValue(data.getApplyCode());
+                header2.createCell(4).setCellValue(com.doumee.core.utils.DateUtil.getPlusTime2(data.getStartTime()));
+                header2.createCell(5).setCellValue("");
+                header2.createCell(6).setCellValue(com.doumee.core.utils.DateUtil.getPlusTime2(data.getEndTime()));
+                header2.createCell(7).setCellValue("");
+                header2.createCell(8).setCellValue(com.doumee.core.utils.DateUtil.getPlusTime2(data.getValidTime()));
+                header2.createCell(9).setCellValue(com.doumee.core.utils.DateUtil.getPlusTime2(data.getDelValidTime()));
+                header2.createCell(10).setCellValue(data.getAddNum());
+                header2.createCell(11).setCellValue(data.getDelNum());
+                header2.createCell(12).setCellValue(data.getFee()+"鍏�");
+                sheet.addMergedRegion(new CellRangeAddress(2 ,2,0,1));
+                sheet.addMergedRegion(new CellRangeAddress(2 ,2,4,5));
+                sheet.addMergedRegion(new CellRangeAddress(2  ,2,6,7));
+                for (int i = 0; i < 13; i++) {
+                    configDataCell(sxssfWorkbook,   header2.getCell(i));
+                }
+                Row header3 = sheet.createRow(3);
+                for (int i = 0; i < 13; i++) {
+                    header3.createCell(i).setCellValue("");
+                }
+                header3.createCell(0).setCellValue("鍔犱繚浜哄憳");
+                header3.createCell(6).setCellValue("鍑忎繚浜哄憳");
+                sheet.addMergedRegion(new CellRangeAddress(3  ,3,0,5));
+                sheet.addMergedRegion(new CellRangeAddress(3  ,3,6,12));
+                for (int i = 0; i < 13; i++) {
+                    configFirstCell(sxssfWorkbook,   header3.getCell(i));
+                }
+                Row header4 = sheet.createRow(4);
+                header4.createCell(0).setCellValue("搴忓彿");
+                header4.createCell(1).setCellValue("鍛樺伐濮撳悕");
+//            header4.createCell(2).setCellValue("鎬у埆");
+                header4.createCell(2).setCellValue("韬唤璇佸彿");
+                header4.createCell(3).setCellValue("娲鹃仯鍗曚綅");
+                header4.createCell(4).setCellValue("鎵�灞炲伐绉�");
+                header4.createCell(5).setCellValue("澶囨敞");
+                header4.createCell(6).setCellValue("搴忓彿");
+                header4.createCell(7).setCellValue("鍛樺伐濮撳悕");
+//            header4.createCell(8).setCellValue("鎬у埆");
+                header4.createCell(8).setCellValue("韬唤璇佸彿");
+                header4.createCell(9).setCellValue("娲鹃仯鍗曚綅");
+                header4.createCell(10).setCellValue("鎵�灞炲伐绉�");
+                header4.createCell(11).setCellValue("澶囨敞");
+                header4.createCell(12).setCellValue("");
+                sheet.addMergedRegion(new CellRangeAddress(4  ,4,11,12));
+                for (int i = 0; i < 13; i++) {
+                    configFirstCell(sxssfWorkbook,header4.getCell(i));
+                }
+                int maxNum = data.getAddNum()>data.getDelNum()?data.getAddNum():data.getDelNum();
+                // 鍒涘缓鏁版嵁璁板綍
+                for (int rowIndex = 0; rowIndex <maxNum; rowIndex++) {
+                    ApplyChagneDetail addModel =  data.getAddDetailList().size()> rowIndex?data.getAddDetailList().get(rowIndex):null;
+                    ApplyChagneDetail delModel =  data.getDelDetailList().size()> rowIndex?data.getDelDetailList().get(rowIndex):null;
+                    Row header5 = sheet.createRow(rowIndex + 5);
+                    if(addModel!=null){
+                        header5.createCell(0).setCellValue(rowIndex+1);
+                        header5.createCell(1).setCellValue(StringUtils.defaultString(addModel.getMemberName(),""));
+//                    header5.createCell(2).setCellValue(Constants.equalsInteger(addModel.getSex(),0)?"鐢�":(Constants.equalsInteger(addModel.getSex(),1)?"濂�":"-"));
+                        header5.createCell(2).setCellValue(StringUtils.defaultString(addModel.getMemberIdcardNo(),""));
+                        header5.createCell(3).setCellValue(StringUtils.defaultString(addModel.getDuName(),""));
+                        header5.createCell(4).setCellValue(StringUtils.defaultString(addModel.getWorkTypeName(),""));
+                        header5.createCell(5).setCellValue(StringUtils.defaultString(addModel.getRemark(),""));
+                    }else{
+                        for (int i = 0; i < 6; i++) {
+                            header5.createCell(i).setCellValue("");
+                        }
+                    }
+                    if(delModel!=null){
+                        header5.createCell(6).setCellValue(rowIndex+1);
+                        header5.createCell(7).setCellValue(StringUtils.defaultString(delModel.getMemberName(),""));
+//                    header5.createCell(8).setCellValue(Constants.equalsInteger(delModel.getSex(),0)?"鐢�":(Constants.equalsInteger(delModel.getSex(),1)?"濂�":"-"));
+                        header5.createCell(8).setCellValue(StringUtils.defaultString(delModel.getMemberIdcardNo(),""));
+                        header5.createCell(9).setCellValue(StringUtils.defaultString(delModel.getDuName(),""));
+                        header5.createCell(10).setCellValue(StringUtils.defaultString(delModel.getWorkTypeName(),""));
+                        header5.createCell(11).setCellValue(StringUtils.defaultString(delModel.getRemark(),""));
+                        header5.createCell(12).setCellValue("");
+                        sheet.addMergedRegion(new CellRangeAddress(rowIndex + 5  ,rowIndex + 5,11,12));
+                    }else{
+                        for (int i =6; i < 13; i++) {
+                            header5.createCell(i).setCellValue("");
+                        }
+                    }
+                    for (int i = 0; i < 13; i++) {
+                        configDataCell(sxssfWorkbook,   header5.getCell(i));
+                    }
+                }
+            }
+            sxssfWorkbook.write(os);
+            os.close();
+        } catch (Exception e) {
+            throw new BusinessException(ResponseStatus.EXPORT_EXCEL_ERROR, e);
+        } finally {
+            if (os != null) {
+                try {
+                    os.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
+
+
 }
diff --git a/server/service/src/main/java/com/doumee/core/model/LoginUserInfo.java b/server/service/src/main/java/com/doumee/core/model/LoginUserInfo.java
index c79f12d..4faa580 100644
--- a/server/service/src/main/java/com/doumee/core/model/LoginUserInfo.java
+++ b/server/service/src/main/java/com/doumee/core/model/LoginUserInfo.java
@@ -1,6 +1,7 @@
 package com.doumee.core.model;
 
 import com.doumee.dao.business.model.Company;
+import com.doumee.dao.business.model.CompanyPermission;
 import com.doumee.dao.system.model.SystemPermission;
 import com.doumee.dao.system.model.SystemRole;
 import com.doumee.dao.system.model.SystemUser;
@@ -33,20 +34,24 @@
 
     private String sex;
     private String mobile;
+    private Boolean fixed;
 
     private String openid;
     private Integer companyId;
     private Integer areaId;
     private Integer cityId;
     private Integer parentId;
+    //绫诲瀷 0骞冲彴鐢ㄦ埛 1浼佷笟鐢ㄦ埛 2鍟嗘埛
     private Integer type;
     private Company company;
+    private Company showCompany;
 
     private List<String> roles;
 
     private List<String> permissions;
     private List<Integer> companyIdList;
     private List<Integer> departIdList;
+    private List<CompanyPermission> companyPermissionList;
 
     public static LoginUserInfo from(SystemUser user, List<SystemRole> roles, List<SystemPermission> permissions ) {
         if (user == null) {
@@ -56,6 +61,7 @@
         LoginUserInfo loginUserInfo = new LoginUserInfo();
         BeanUtils.copyProperties(user, loginUserInfo);
         loginUserInfo.setCompany(user.getCompany());
+        loginUserInfo.setShowCompany(user.getShowCompany());
         // 璁剧疆瑙掕壊淇℃伅
         List<String> rs = new ArrayList<>();
         for (SystemRole role : roles) {
@@ -72,6 +78,8 @@
         }
         loginUserInfo.setPermissions(pms);
         loginUserInfo.setCompanyIdList(user.getCompanyIdList());
+        loginUserInfo.setDepartIdList(user.getDepartIdList());
+        loginUserInfo.setCompanyPermissionList(user.getCompanyPermissionList());
         return loginUserInfo;
     }
 }
diff --git a/server/service/src/main/java/com/doumee/core/utils/Constants.java b/server/service/src/main/java/com/doumee/core/utils/Constants.java
index ca292c1..c7d899f 100644
--- a/server/service/src/main/java/com/doumee/core/utils/Constants.java
+++ b/server/service/src/main/java/com/doumee/core/utils/Constants.java
@@ -35,6 +35,8 @@
     public static final int TWO = 2 ;
     public static final int
             THREE = 3 ;
+    public static final int FIVE = 5 ;
+    public static final int SIX = 6 ;
     public static final int SEVEN = 7 ;
     public static final String ACCESS_ID="ACCESS_ID";
     public static final String BUCKETNAME = "BUCKETNAME";
@@ -54,6 +56,9 @@
     public static final String WX_MIN_APPID = "WX_MIN_APPID";
     public static final String WX_MIN_SECRET = "WX_MIN_SECRET";
 
+    public static final String PLAT_COMPANY_NAME ="PLAT_COMPANY_NAME";
+    public static final String PLAT_CREDIT_CODE ="PLAT_CREDIT_CODE";
+    public static final String PLAT_EMAIL ="PLAT_EMAIL";
     public static final String SYSTEM ="SYSTEM";
     public static final String PROTOCOL ="PROTOCOL";
     public static final String PRIVACY ="PRIVACY";
@@ -91,6 +96,10 @@
     public static final String SMS_COMNAME = "SMS_COMNAME";
     public static final String TAXES_FILE = "TAXES_FILE";
     public static final String APPLY_FILE ="APPLY_FILE" ;
+    public static final String COMPANY_USER_APPLY ="COMPANY_USER_APPLY" ;
+    public static final String INSURANCE ="INSURANCE" ;
+    public static final String CONTRACT ="CONTRACT" ;
+
     public static final String SETTLE_FILE ="SETTLE_FILE" ;
     public static final String DU_FILE ="DU_FILE" ;
     public static final String SIGN_DONE_NOTIFY_URL = "SIGN_DONE_NOTIFY_URL";
@@ -717,6 +726,12 @@
         WTB_CA_DONE_PDF(23, "濮旀墭鍔犲噺淇�/鎹㈠巶涓氬姟 - 鍚堝苟鍗曟渶缁堜繚鍗�", "濮旀墭鍔犲噺淇�/鎹㈠巶涓氬姟 - 鍚堝苟鍗曟渶缁堜繚鍗�"),
         WTB_CONFIRMATION_LATTER(24, "濮旀墭淇� - 鎶曚繚鏂规纭涔�", "濮旀墭淇� - 鎶曚繚鏂规纭涔�"),
         WTB_CA_TBD_PDF(25, "濮旀墭鍔犲噺淇�/鎹㈠巶涓氬姟 -鐢宠鍗曪紙鍟嗘埛绛剧讲鍚嶱DF锛�", "濮旀墭鍔犲噺淇�/鎹㈠巶涓氬姟 -鐢宠鍗曪紙鍟嗘埛绛剧讲鍚嶱DF锛�"),
+
+        CONTRACT_PDF(26, "鍚堝悓闄勪欢", "鍚堝悓闄勪欢"),
+        CONTRACT_FIRST_PDF(27, "鍚堝悓绛剧讲闄勪欢", "鍚堝悓绛剧讲闄勪欢"),
+        CONTRACT_DONE_PDF(28, "鍚堝悓绛剧讲闄勪欢", "鍚堝悓绛剧讲闄勪欢"),
+        COMPANY_SOLUTION_SIGN_PDF(29, "浼佷笟绛剧讲鍚庢柟妗堢‘璁や功", "浼佷笟绛剧讲鍚庢柟妗堢‘璁や功"),
+        COMPANY_USER_APPLY(30, "浼佷笟鐢宠闆嗗洟鐢ㄦ埛闄勪欢", "浼佷笟鐢宠闆嗗洟鐢ㄦ埛闄勪欢"),
         ;
         // 鎴愬憳鍙橀噺
         private String name;
@@ -833,10 +848,8 @@
     }
 
     public static void main(String[] args) {
-        System.out.println(IdcardUtil.isValidCard("342623199201150101"));
-        System.out.println(IdcardUtil.isValidCard("342623199201150102"));
-        System.out.println(IdcardUtil.isValidCard("342623199201150103"));
-        System.out.println(IdcardUtil.isValidCard("342623199201150104"));
+         System.out.println(BigDecimal.valueOf(3.45678).setScale(2,BigDecimal.ROUND_HALF_UP));
+        System.out.println(BigDecimal.valueOf(3.45678).setScale(2,BigDecimal.ROUND_DOWN));
 //        System.out.println(IdcardUtil.isValidCard("340621199310134818"));
 //        System.out.println(IdcardUtil.isValidCard("341621199310134818"));
 
@@ -1077,6 +1090,7 @@
         IA_HBD_UPLOAD_INSURANCE(35, "鎶曚繚瀹屾垚","淇濋櫓鐢熸晥璧锋湡锛�${param1}鍙樻洿涓�${param2}",3),
         IA_HBD_CLOSE(36, "閫�鍥炵敵璇�","鍘熷洜锛�${param}",3),
         IA_HBD_UPLOAD_BXD(41, "涓婁紶淇濋櫓鍗�","",3),
+        IA_HBD_REEXAMINE_PASS(42, "澶嶅閫氳繃","",3),
 
 
 
@@ -1176,6 +1190,7 @@
         UPLOAD_INSURANCE_POLICY(2, "寰呭嚭鍗�","",0),
         FINISH(3, "淇濋殰涓�","",0),
         CLOSE(4, "宸查��鍥�","",0),
+        RETRIAL(5, "寰呭鏍�","",0),
         ;
         // 鎴愬憳鍙橀噺
         private String name;
@@ -1463,7 +1478,7 @@
         CLOSE(9, "璁㈠崟鍏抽棴","",6),
         PLATFORM_CHECK_PASS(10,"骞冲彴鎶曚繚瀹℃牳閫氳繃","鎻愪氦鎰忚锛�${param}",0),
         COMPANY_BACK_APPLY_PASS(11, "浼佷笟鐢宠閫�鍥�(骞冲彴鎶曚繚瀹℃牳閫氳繃)","鎻愪氦鎰忚锛�${param}",5),
-
+        REEXAMINE(12, "鍟嗘埛鎴栧钩鍙板瀹�","澶嶅鎰忚锛�${param}",0),
 
 
         WTB_UPLOAD(20, "鎻愪氦鎶曚繚","",28),
@@ -1472,7 +1487,7 @@
         WTB_BUSINESS_CHECK_PASS(23,"鍟嗘埛鎶曚繚瀹℃牳閫氳繃","鎻愪氦鎰忚锛�${param}",23),
         WTB_RETURN(24, "宸查��鍥�","鎻愪氦鎰忚锛�${param}",24),
         WTB_CLOSED(25, "宸插叧闂�","鎻愪氦鎰忚锛�${param}",25),
-        WTB_TOUBAOING(26, "鎶曚繚涓�","鎻愪氦鎰忚锛�${param}",26),
+        WTB_TOUBAOING(26, "寰呭嚭鍗�","鎻愪氦鎰忚锛�${param}",26),
         WTB_DONE(27, "淇濋殰涓�","鎻愪氦鎰忚锛�${param}",27),
 
         ;
@@ -1569,7 +1584,10 @@
         CHANGE_FACTORY(2, "鍛樺伐鎹㈠巶鐢宠","淇濋櫓鏂规"),
         DISPATCH_UNIT(3, "娲鹃仯鍗曚綅鐢宠","娲鹃仯鍗曚綅"),
         TAXES(4, "寮�绁ㄧ敵璇�","寮�绁ㄩ噾棰�"),
-        SETTLE_CLAIMS(5, "鎶ユ鐞嗚禂","鎶ユ浜�")
+        SETTLE_CLAIMS(5, "鎶ユ鐞嗚禂","鎶ユ浜�"),
+        CONTRACT(6, "鍚堝悓绛剧讲","鍚堝悓绛剧讲"),
+        SOLUTIONS(7, "鏂规绛剧讲","鏂规绛剧讲"),
+        COMPANY_USER_APPLY(8, "闆嗗洟鐢宠","闆嗗洟鐢宠"),
         ;
         // 鎴愬憳鍙橀噺
         private int key;
@@ -1624,18 +1642,19 @@
 
     public  enum NoticeType {
 
-        ZERO(0, "寰呭鏍�","","","寰呭鏍�","寰呭鐞�","澶勭悊涓�"),
-        ONE(1, "浼佷笟寰呯缃�","","","宸ョ寰呭鏍�","","宸茬粨妗�"),
-        TWO(2, "寰呭嚭鍗�","寰呭鏍�","寰呭鏍�","","",""),
-        THREE(3, "鐢宠閫�鍥�","鐢宠閫�鍥�","鐢宠閫�鍥�","","",""),
-        FOUR(4, "宸查��鍥�","宸查��鍥�","宸查��鍥�","","","宸叉挙閿�"),
-        FIVE(5, "鐢宠椹冲洖","鐢宠椹冲洖","鐢宠椹冲洖","","",""),
+        ZERO(0, "寰呭鏍�","","","寰呭鏍�","寰呭鐞�","澶勭悊涓�","寰呯缃�","寰呯缃�"),
+        ONE(1, "浼佷笟寰呯缃�","","","宸ョ寰呭鏍�","","宸茬粨妗�","",""),
+        TWO(2, "寰呭嚭鍗�","寰呭鏍�","寰呭鏍�","","","","",""),
+        THREE(3, "鐢宠閫�鍥�","鐢宠閫�鍥�","鐢宠閫�鍥�","","","","",""),
+        FOUR(4, "宸查��鍥�","宸查��鍥�","宸查��鍥�","","","宸叉挙閿�","",""),
+        FIVE(5, "鐢宠椹冲洖","鐢宠椹冲洖","鐢宠椹冲洖","","","","",""),
         //缁繚閫氱煡
-        SIX(6, "","","","","",""),
+        SIX(6, "","","","","","","",""),
         //鍟嗘埛绔� 濮旀墭淇� - 鎶曚繚寰呭鏍� 鍔犲噺淇� 鎹㈠巶 寰呭鏍�
-        SEVEN(7, "寰呭鏍�","寰呭鏍�","寰呭鏍�","","",""),
-        EIGHT(8, "","","","","",""),
-        NINE(9, "","","","","",""),
+        SEVEN(7, "寰呭鏍�","寰呭鏍�","寰呭鏍�","","","","",""),
+        //寰呭瀹�
+        EIGHT(8, "寰呭鏍�","","","","","","",""),
+        NINE(9, "","","","","","","",""),
         ;
 
         // 鎴愬憳鍙橀噺
@@ -1646,11 +1665,13 @@
         private String dispatchUnitDetail;
         private String taxesDetail;
         private String settleClaimsDetail;
+        private String contract;
+        private String solutions;
 
         // 鏋勯�犳柟娉�
         NoticeType(int status, String insuranceApplyDetail,String applyChangeDetail
                 , String changeFactoryDetail,String dispatchUnitDetail
-                , String taxesDetail,String settleClaimsDetail) {
+                , String taxesDetail,String settleClaimsDetail,String contract,String solutions) {
             this.status = status;
             this.insuranceApplyDetail = insuranceApplyDetail;
             this.applyChangeDetail = applyChangeDetail;
@@ -1658,6 +1679,8 @@
             this.dispatchUnitDetail = dispatchUnitDetail;
             this.taxesDetail = taxesDetail;
             this.settleClaimsDetail = settleClaimsDetail;
+            this.contract = contract;
+            this.solutions = solutions;
         }
 
         // 鏅�氭柟娉�
@@ -1676,6 +1699,10 @@
                         return c.getTaxesDetail();
                     }else if(type == NoticeObjectType.SETTLE_CLAIMS.getKey()){
                         return c.getSettleClaimsDetail();
+                    }else if(type == NoticeObjectType.CONTRACT.getKey()){
+                        return c.getContract();
+                    }else if(type == NoticeObjectType.SOLUTIONS.getKey()){
+                        return c.getContract();
                     }
                 }
             }
@@ -1739,6 +1766,13 @@
             this.settleClaimsDetail = settleClaimsDetail;
         }
 
+        public String getContract() {
+            return contract;
+        }
+
+        public void setContract(String info) {
+            this.contract = contract;
+        }
 
     }
 
@@ -1813,6 +1847,52 @@
 
     }
 
+    public enum CONTRACT_STATUS{
+        WAIT(0, "寰呯缃�"),
+        OUT_SIGN(1, "鎴戞柟宸茬缃�"),
+        COMPANY_SIGN(2, "浼佷笟/鍟嗘埛宸茬缃�"),
+        FINISH(3, "宸插畬鎴�"),
+        CANCEL(4, "宸插彇娑�"),
+        CLOSE(5, "宸插叧闂�"),
+        ;
+        // 鎴愬憳鍙橀噺
+        private String name;
+        private int key;
+
+        // 鏋勯�犳柟娉�
+        CONTRACT_STATUS(int key, String name) {
+            this.name = name;
+            this.key = key;
+        }
+        // 鏅�氭柟娉�
+        public static String getName(int index) {
+            for (CONTRACT_STATUS c : CONTRACT_STATUS.values()) {
+                if (c.getKey() == index) {
+                    return c.name;
+                }
+            }
+            return null;
+        }
+        // get set 鏂规硶
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public int getKey() {
+            return key;
+        }
+
+        public void setKey(int key) {
+            this.key = key;
+        }
+
+
+
+    }
 
 
     public  enum SettleClaimsStatus {
@@ -2306,18 +2386,18 @@
         }else{
             if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.DAY.getValue())){
                 //澶╀负鎵规敼鍗曚綅
-                return fee.multiply(new BigDecimal(days)).divide(new BigDecimal(countDays),2, RoundingMode.HALF_UP);
+                return fee.multiply(new BigDecimal(days)).divide(new BigDecimal(countDays),6, RoundingMode.HALF_UP);
             }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.HALF_MONTH.getValue())) {
                 //鍗婃湀涓烘壒鏀瑰崟浣�
                 BigDecimal cycle = new BigDecimal(days).divide(insureCycleUnit.getDays(),0,RoundingMode.CEILING);
                 //鏍规嵁鎶曚繚鍛ㄦ湡 瀹氫箟鐨� 姣忎釜鍛ㄦ湡 = X涓� 鍗婃湀鍛ㄦ湡 杩涜璁$畻
                 // 鎬婚噾棰� * 浜х敓璐圭敤鐨勫懆鏈� / 鎶曚繚鍛ㄦ湡瀹氫箟鐨� 鍗婃湀鍛ㄦ湡鏁�
-                return fee.multiply(cycle).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP);
+                return fee.multiply(cycle).divide(new BigDecimal(timeUnit.getCoefficient()),6, RoundingMode.HALF_UP);
             }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.MONTH.getValue())) {
                 //鏈堜唤涓烘壒鏀瑰崟浣�
                 BigDecimal cycle = new BigDecimal(DateUtil.getDifferenceMonths(reduceEndTime,reduceStartTime));
                 // 鎬婚噾棰� * 浜х敓璐圭敤鐨勫懆鏈� / 鎶曚繚鍛ㄦ湡瀹氫箟鐨� 鍗婃湀鍛ㄦ湡鏁� * 2
-                return fee.multiply(cycle).multiply(new BigDecimal(2)).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP);
+                return fee.multiply(cycle).multiply(new BigDecimal(2)).divide(new BigDecimal(timeUnit.getCoefficient()),6, RoundingMode.HALF_UP);
 
             }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.QUARTER.getValue())) {
                 //瀛e害涓烘壒鏀瑰崟浣�
@@ -2326,7 +2406,7 @@
                 //杞崲涓� 鎬诲搴�
                 cycle = cycle.divide(new BigDecimal(3),0,RoundingMode.CEILING);
                 // 鎬婚噾棰� * 浜х敓璐圭敤鐨勫懆鏈� / 鎶曚繚鍛ㄦ湡瀹氫箟鐨� 鍗婃湀鍛ㄦ湡鏁� * 6
-                return fee.multiply(cycle).multiply(new BigDecimal(6)).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP);
+                return fee.multiply(cycle).multiply(new BigDecimal(6)).divide(new BigDecimal(timeUnit.getCoefficient()),6, RoundingMode.HALF_UP);
             }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.HALF_YEAR.getValue())) {
                 //鍗婂勾涓烘壒鏀瑰崟浣�
                 //鏌ヨ浜х敓璐圭敤鎬绘湀浠�
@@ -2334,7 +2414,7 @@
                 //杞崲涓� 鍗婂勾
                 cycle = cycle.divide(new BigDecimal(6),0,RoundingMode.CEILING);
                 // 鎬婚噾棰� * 浜х敓璐圭敤鐨勫懆鏈� / 鎶曚繚鍛ㄦ湡瀹氫箟鐨� 鍗婃湀鍛ㄦ湡鏁� * 6
-                return fee.multiply(cycle).multiply(new BigDecimal(12)).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP);
+                return fee.multiply(cycle).multiply(new BigDecimal(12)).divide(new BigDecimal(timeUnit.getCoefficient()),6, RoundingMode.HALF_UP);
             }else {
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏂规閰嶇疆閿欒");
             }
@@ -2359,18 +2439,18 @@
         }else{
             if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.DAY.getValue())){
                 //澶╀负鎵规敼鍗曚綅
-                return fee.multiply(new BigDecimal(days)).divide(new BigDecimal(countDays),2, RoundingMode.HALF_UP);
+                return fee.multiply(new BigDecimal(days)).divide(new BigDecimal(countDays),6, RoundingMode.HALF_UP);
             }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.HALF_MONTH.getValue())) {
                 //鍗婃湀涓烘壒鏀瑰崟浣�
                 BigDecimal cycle = new BigDecimal(days).divide(insureCycleUnit.getDays(),0,RoundingMode.CEILING);
                 //鏍规嵁鎶曚繚鍛ㄦ湡 瀹氫箟鐨� 姣忎釜鍛ㄦ湡 = X涓� 鍗婃湀鍛ㄦ湡 杩涜璁$畻
                 // 鎬婚噾棰� * 浜х敓璐圭敤鐨勫懆鏈� / 鎶曚繚鍛ㄦ湡瀹氫箟鐨� 鍗婃湀鍛ㄦ湡鏁�
-                return fee.multiply(cycle).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP);
+                return fee.multiply(cycle).divide(new BigDecimal(timeUnit.getCoefficient()),6, RoundingMode.HALF_UP);
             }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.MONTH.getValue())) {
                 //鏈堜唤涓烘壒鏀瑰崟浣�
                 BigDecimal cycle = new BigDecimal(DateUtil.getDifferenceMonths(newEndTime,newStartTime));
                 // 鎬婚噾棰� * 浜х敓璐圭敤鐨勫懆鏈� / 鎶曚繚鍛ㄦ湡瀹氫箟鐨� 鍗婃湀鍛ㄦ湡鏁� * 2
-                return fee.multiply(cycle).multiply(new BigDecimal(2)).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP);
+                return fee.multiply(cycle).multiply(new BigDecimal(2)).divide(new BigDecimal(timeUnit.getCoefficient()),6, RoundingMode.HALF_UP);
 
             }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.QUARTER.getValue())) {
                 //瀛e害涓烘壒鏀瑰崟浣�
@@ -2379,7 +2459,7 @@
                 //杞崲涓� 鎬诲搴�
                 cycle = cycle.divide(new BigDecimal(3),0,RoundingMode.CEILING);
                 // 鎬婚噾棰� * 浜х敓璐圭敤鐨勫懆鏈� / 鎶曚繚鍛ㄦ湡瀹氫箟鐨� 鍗婃湀鍛ㄦ湡鏁� * 6
-                return fee.multiply(cycle).multiply(new BigDecimal(6)).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP);
+                return fee.multiply(cycle).multiply(new BigDecimal(6)).divide(new BigDecimal(timeUnit.getCoefficient()),6, RoundingMode.HALF_UP);
             }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.HALF_YEAR.getValue())) {
                 //鍗婂勾涓烘壒鏀瑰崟浣�
                 //鏌ヨ浜х敓璐圭敤鎬绘湀浠�
@@ -2387,7 +2467,7 @@
                 //杞崲涓� 鍗婂勾
                 cycle = cycle.divide(new BigDecimal(6),0,RoundingMode.CEILING);
                 // 鎬婚噾棰� * 浜х敓璐圭敤鐨勫懆鏈� / 鎶曚繚鍛ㄦ湡瀹氫箟鐨� 鍗婃湀鍛ㄦ湡鏁� * 6
-                return fee.multiply(cycle).multiply(new BigDecimal(12)).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP);
+                return fee.multiply(cycle).multiply(new BigDecimal(12)).divide(new BigDecimal(timeUnit.getCoefficient()),6, RoundingMode.HALF_UP);
             }else {
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏂规閰嶇疆閿欒");
             }
@@ -2415,18 +2495,18 @@
         }else{
             if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.DAY.getValue())){
                 //澶╀负鎵规敼鍗曚綅
-                return fee.multiply(new BigDecimal(days)).divide(new BigDecimal(countDays),2, RoundingMode.HALF_UP);
+                return fee.multiply(new BigDecimal(days)).divide(new BigDecimal(countDays),6, RoundingMode.HALF_UP);
             }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.HALF_MONTH.getValue())) {
                 //鍗婃湀涓烘壒鏀瑰崟浣�
                 BigDecimal cycle = new BigDecimal(days).divide(insureCycleUnit.getDays(),0,RoundingMode.CEILING);
                 //鏍规嵁鎶曚繚鍛ㄦ湡 瀹氫箟鐨� 姣忎釜鍛ㄦ湡 = X涓� 鍗婃湀鍛ㄦ湡 杩涜璁$畻
                 // 鎬婚噾棰� * 浜х敓璐圭敤鐨勫懆鏈� / 鎶曚繚鍛ㄦ湡瀹氫箟鐨� 鍗婃湀鍛ㄦ湡鏁�
-                return fee.multiply(cycle).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP);
+                return fee.multiply(cycle).divide(new BigDecimal(timeUnit.getCoefficient()),6, RoundingMode.HALF_UP);
             }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.MONTH.getValue())) {
                 //鏈堜唤涓烘壒鏀瑰崟浣�
                 BigDecimal cycle = new BigDecimal(DateUtil.getDifferenceMonths(new Date(),startTime));
                 // 鎬婚噾棰� * 浜х敓璐圭敤鐨勫懆鏈� / 鎶曚繚鍛ㄦ湡瀹氫箟鐨� 鍗婃湀鍛ㄦ湡鏁� * 2
-                return fee.multiply(cycle).multiply(new BigDecimal(2)).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP);
+                return fee.multiply(cycle).multiply(new BigDecimal(2)).divide(new BigDecimal(timeUnit.getCoefficient()),6, RoundingMode.HALF_UP);
 
             }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.QUARTER.getValue())) {
                 //瀛e害涓烘壒鏀瑰崟浣�
@@ -2435,7 +2515,7 @@
                 //杞崲涓� 鎬诲搴�
                 cycle = cycle.divide(new BigDecimal(3),0,RoundingMode.CEILING);
                 // 鎬婚噾棰� * 浜х敓璐圭敤鐨勫懆鏈� / 鎶曚繚鍛ㄦ湡瀹氫箟鐨� 鍗婃湀鍛ㄦ湡鏁� * 6
-                return fee.multiply(cycle).multiply(new BigDecimal(6)).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP);
+                return fee.multiply(cycle).multiply(new BigDecimal(6)).divide(new BigDecimal(timeUnit.getCoefficient()),6, RoundingMode.HALF_UP);
             }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.HALF_YEAR.getValue())) {
                 //鍗婂勾涓烘壒鏀瑰崟浣�
                 //鏌ヨ浜х敓璐圭敤鎬绘湀浠�
@@ -2443,7 +2523,7 @@
                 //杞崲涓� 鍗婂勾
                 cycle = cycle.divide(new BigDecimal(6),0,RoundingMode.CEILING);
                 // 鎬婚噾棰� * 浜х敓璐圭敤鐨勫懆鏈� / 鎶曚繚鍛ㄦ湡瀹氫箟鐨� 鍗婃湀鍛ㄦ湡鏁� * 6
-                return fee.multiply(cycle).multiply(new BigDecimal(12)).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP);
+                return fee.multiply(cycle).multiply(new BigDecimal(12)).divide(new BigDecimal(timeUnit.getCoefficient()),6, RoundingMode.HALF_UP);
             }else {
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏂规閰嶇疆閿欒");
             }
@@ -2459,27 +2539,38 @@
         }else{
             if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.DAY.getValue())){
                 //澶╀负鎵规敼鍗曚綅
-                return fee.divide(new BigDecimal(countDays),2, RoundingMode.HALF_UP);
+                return fee.divide(new BigDecimal(countDays),6, RoundingMode.HALF_UP);
             }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.HALF_MONTH.getValue())) {
                 //鏍规嵁鎶曚繚鍛ㄦ湡 瀹氫箟鐨� 姣忎釜鍛ㄦ湡 = X涓� 鍗婃湀鍛ㄦ湡 杩涜璁$畻
                 // 鎬婚噾棰� / 鎶曚繚鍛ㄦ湡瀹氫箟鐨� 鍗婃湀鍛ㄦ湡鏁�
-                return fee.divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP);
+                return fee.divide(new BigDecimal(timeUnit.getCoefficient()),6, RoundingMode.HALF_UP);
             }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.MONTH.getValue())) {
                 // 鎬婚噾棰� / 鎶曚繚鍛ㄦ湡瀹氫箟鐨� 鍗婃湀鍛ㄦ湡鏁� * 2
-                return fee.multiply(new BigDecimal(2)).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP);
+                return fee.multiply(new BigDecimal(2)).divide(new BigDecimal(timeUnit.getCoefficient()),6, RoundingMode.HALF_UP);
             }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.QUARTER.getValue())) {
                 //瀛e害涓烘壒鏀瑰崟浣�
                 // 鎬婚噾棰�  / 鎶曚繚鍛ㄦ湡瀹氫箟鐨� 鍗婃湀鍛ㄦ湡鏁� * 6
-                return fee.multiply(new BigDecimal(6)).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP);
+                return fee.multiply(new BigDecimal(6)).divide(new BigDecimal(timeUnit.getCoefficient()),6, RoundingMode.HALF_UP);
             }else if(solutions.getInsureCycleUnit().equals(Constants.InsureCycleUnit.HALF_YEAR.getValue())) {
                 //鍗婂勾涓烘壒鏀瑰崟浣�
                 // 鎬婚噾棰� * 浜х敓璐圭敤鐨勫懆鏈� / 鎶曚繚鍛ㄦ湡瀹氫箟鐨� 鍗婃湀鍛ㄦ湡鏁� * 6
-                return fee.multiply(new BigDecimal(12)).divide(new BigDecimal(timeUnit.getCoefficient()),2, RoundingMode.HALF_UP);
+                return fee.multiply(new BigDecimal(12)).divide(new BigDecimal(timeUnit.getCoefficient()),6, RoundingMode.HALF_UP);
             }else {
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏂规閰嶇疆閿欒");
             }
         }
     }
 
+    public static BigDecimal getTwoPoint(BigDecimal bigDecimal){
+        if(Objects.isNull(bigDecimal)){
+            return BigDecimal.ZERO;
+        }
+        if(BigDecimal.ZERO.compareTo(bigDecimal) == 0){
+            return BigDecimal.ZERO;
+        }
+        return bigDecimal.setScale(2,BigDecimal.ROUND_DOWN);
+    }
+
+
 
 }
diff --git a/server/service/src/main/java/com/doumee/dao/business/CustomerCompanyMapper.java b/server/service/src/main/java/com/doumee/dao/business/CustomerCompanyMapper.java
new file mode 100644
index 0000000..057504f
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/dao/business/CustomerCompanyMapper.java
@@ -0,0 +1,12 @@
+package com.doumee.dao.business;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.CustomerCompany;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2024/11/05 18:41
+ */
+public interface CustomerCompanyMapper extends BaseMapper<CustomerCompany> {
+
+}
diff --git a/server/service/src/main/java/com/doumee/dao/business/CustomerServiceMapper.java b/server/service/src/main/java/com/doumee/dao/business/CustomerServiceMapper.java
new file mode 100644
index 0000000..36d5280
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/dao/business/CustomerServiceMapper.java
@@ -0,0 +1,12 @@
+package com.doumee.dao.business;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.CustomerService;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2024/11/05 18:41
+ */
+public interface CustomerServiceMapper extends BaseMapper<CustomerService> {
+
+}
diff --git a/server/service/src/main/java/com/doumee/dao/business/dto/ApplyDetailPageDTO.java b/server/service/src/main/java/com/doumee/dao/business/dto/ApplyDetailPageDTO.java
index 73638f3..c6a1f02 100644
--- a/server/service/src/main/java/com/doumee/dao/business/dto/ApplyDetailPageDTO.java
+++ b/server/service/src/main/java/com/doumee/dao/business/dto/ApplyDetailPageDTO.java
@@ -13,7 +13,7 @@
 @Data
 public class ApplyDetailPageDTO {
 
-    @ApiModelProperty(value = "鍦ㄤ繚鐘舵�侊細1=淇濋殰涓紱2=涓嶅湪淇濓紱 0=鍏ㄩ儴")
+    @ApiModelProperty(value = "鍦ㄤ繚鐘舵�侊細1=淇濋殰涓紱2=涓嶅湪淇濓紱3=寰呯敓鏁� 0=鍏ㄩ儴")
     private Integer applyStatus;
 
 
diff --git a/server/service/src/main/java/com/doumee/dao/business/dto/ApplyPowerDTO.java b/server/service/src/main/java/com/doumee/dao/business/dto/ApplyPowerDTO.java
new file mode 100644
index 0000000..c4103d9
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/dao/business/dto/ApplyPowerDTO.java
@@ -0,0 +1,20 @@
+package com.doumee.dao.business.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author RenKang
+ */
+@Data
+public class ApplyPowerDTO {
+
+    @ApiModelProperty(value = "淇濆崟涓婚敭", example = "1")
+    private Integer applyId;
+
+    @ApiModelProperty(value = "鐢宠鏃ユ湡")
+    private Date beginDate;
+
+}
diff --git a/server/service/src/main/java/com/doumee/dao/business/dto/CloseDTO.java b/server/service/src/main/java/com/doumee/dao/business/dto/CloseDTO.java
index de521b8..0f27cac 100644
--- a/server/service/src/main/java/com/doumee/dao/business/dto/CloseDTO.java
+++ b/server/service/src/main/java/com/doumee/dao/business/dto/CloseDTO.java
@@ -18,6 +18,4 @@
     @ApiModelProperty(value = "閫�鍥炲師鍥�")
     private String reason;
 
-
-
 }
diff --git a/server/service/src/main/java/com/doumee/dao/business/dto/InsuranceApplyQueryDTO.java b/server/service/src/main/java/com/doumee/dao/business/dto/InsuranceApplyQueryDTO.java
index c26a454..9043f7c 100644
--- a/server/service/src/main/java/com/doumee/dao/business/dto/InsuranceApplyQueryDTO.java
+++ b/server/service/src/main/java/com/doumee/dao/business/dto/InsuranceApplyQueryDTO.java
@@ -71,6 +71,9 @@
     @ApiModelProperty(value = "绫诲瀷 0鐩翠繚 1濮旀墭鎶曚繚")
     private Integer type;
 
+    @ApiModelProperty(value = "0=鏈紑濮嬶紱1=淇濋殰涓� 锛�2=宸茶繃鏈� 3=鏈繃鏈�")
+    private Integer timeOut;
+
     @ApiModelProperty(value = "涓婚敭鍒楄〃",notes = "濮旀墭鎶曚繚寮�绁ㄤ娇鐢�")
     private List<Integer> ids;
 
diff --git a/server/service/src/main/java/com/doumee/dao/business/dto/SaveUnionChangeDTO.java b/server/service/src/main/java/com/doumee/dao/business/dto/SaveUnionChangeDTO.java
index 1e7789e..11836d7 100644
--- a/server/service/src/main/java/com/doumee/dao/business/dto/SaveUnionChangeDTO.java
+++ b/server/service/src/main/java/com/doumee/dao/business/dto/SaveUnionChangeDTO.java
@@ -1,5 +1,6 @@
 package com.doumee.dao.business.dto;
 
+import com.doumee.dao.business.model.ApplyChange;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -22,6 +23,9 @@
     @ApiModelProperty(value = "鍔犲噺淇�/鎹㈠巶鍗曟嵁涓婚敭 澶氫釜浠�,鍒嗗壊")
     private List<Integer> applyIds;
 
+    @ApiModelProperty(value = "鍔犲噺淇�/鎹㈠巶鍗曟嵁鍗曞ご" ,hidden = true)
+    private ApplyChange applyChange;
+
     @ApiModelProperty(value = "鎵瑰崟鏃ユ湡")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date applyDate;
@@ -38,4 +42,6 @@
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date delValidDate;
 
+    @ApiModelProperty(value = "鍟嗘埛涓婚敭")
+    private Integer shopId;
 }
diff --git a/server/service/src/main/java/com/doumee/dao/business/dto/UnionChangeBXDDTO.java b/server/service/src/main/java/com/doumee/dao/business/dto/UnionChangeBXDDTO.java
index 6be285d..a6b0881 100644
--- a/server/service/src/main/java/com/doumee/dao/business/dto/UnionChangeBXDDTO.java
+++ b/server/service/src/main/java/com/doumee/dao/business/dto/UnionChangeBXDDTO.java
@@ -1,5 +1,6 @@
 package com.doumee.dao.business.dto;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.dao.business.model.Multifile;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
@@ -43,4 +44,9 @@
     @ApiModelProperty(value = "鍔犲噺淇� 淇濆崟鏂囦欢鏁版嵁")
     private List<Multifile> applyChangeBXDList;
 
+
+    @ApiModelProperty(value = "鎵瑰崟闄勪欢鍒楄〃")
+    @TableField(exist = false)
+    private List<Multifile> pidanFileList;
+
 }
diff --git a/server/service/src/main/java/com/doumee/dao/business/dto/UpdateSortDTO.java b/server/service/src/main/java/com/doumee/dao/business/dto/UpdateSortDTO.java
new file mode 100644
index 0000000..7a3cf5b
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/dao/business/dto/UpdateSortDTO.java
@@ -0,0 +1,26 @@
+package com.doumee.dao.business.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * @author Eva.Caesar Liu
+ * @date 2023/05/04 18:21
+ */
+@Data
+@ApiModel("绯荤粺鑿滃崟鎺掑簭鍙傛暟")
+public class UpdateSortDTO implements Serializable {
+
+    @ApiModelProperty(value = "鑿滃崟ID")
+    @NotNull(message = "鑿滃崟ID涓嶈兘涓虹┖")
+    private Integer id;
+
+    @ApiModelProperty(value = "鎺掑簭鏂瑰悜锛宼op鍚戜笂锛宐ottom鍚戜笅")
+    @NotBlank(message = "鎺掑簭鏂瑰悜涓嶈兘涓虹┖")
+    private String direction;
+}
diff --git a/server/service/src/main/java/com/doumee/dao/business/join/CompanyJoinMapper.java b/server/service/src/main/java/com/doumee/dao/business/join/CompanyJoinMapper.java
new file mode 100644
index 0000000..15550ba
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/dao/business/join/CompanyJoinMapper.java
@@ -0,0 +1,13 @@
+package com.doumee.dao.business.join;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.Company;
+import com.github.yulichang.base.mapper.MPJJoinMapper;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2024/01/16 10:03
+ */
+public interface CompanyJoinMapper extends MPJJoinMapper<Company> {
+
+}
diff --git a/server/service/src/main/java/com/doumee/dao/business/join/CompanyPermissionJoinMapper.java b/server/service/src/main/java/com/doumee/dao/business/join/CompanyPermissionJoinMapper.java
new file mode 100644
index 0000000..9d91731
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/dao/business/join/CompanyPermissionJoinMapper.java
@@ -0,0 +1,15 @@
+package com.doumee.dao.business.join;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.CompanyPermission;
+import com.github.yulichang.base.mapper.MPJJoinMapper;
+
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2024/01/16 10:03
+ */
+public interface CompanyPermissionJoinMapper extends MPJJoinMapper<CompanyPermission> {
+
+}
diff --git a/server/service/src/main/java/com/doumee/dao/business/join/CompanyUserApplyJoinMapper.java b/server/service/src/main/java/com/doumee/dao/business/join/CompanyUserApplyJoinMapper.java
new file mode 100644
index 0000000..1a49c99
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/dao/business/join/CompanyUserApplyJoinMapper.java
@@ -0,0 +1,13 @@
+package com.doumee.dao.business.join;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.CompanyUserApply;
+import com.github.yulichang.base.mapper.MPJJoinMapper;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2024/10/28 19:16
+ */
+public interface CompanyUserApplyJoinMapper extends MPJJoinMapper<CompanyUserApply> {
+
+}
diff --git a/server/service/src/main/java/com/doumee/dao/business/join/ContractJoinMapper.java b/server/service/src/main/java/com/doumee/dao/business/join/ContractJoinMapper.java
new file mode 100644
index 0000000..3a9ac2a
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/dao/business/join/ContractJoinMapper.java
@@ -0,0 +1,13 @@
+package com.doumee.dao.business.join;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.Contract;
+import com.github.yulichang.base.mapper.MPJJoinMapper;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2024/10/28 19:16
+ */
+public interface ContractJoinMapper extends MPJJoinMapper<Contract> {
+
+}
diff --git a/server/service/src/main/java/com/doumee/dao/business/join/CustomerCompanyJoinMapper.java b/server/service/src/main/java/com/doumee/dao/business/join/CustomerCompanyJoinMapper.java
new file mode 100644
index 0000000..2e75dcb
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/dao/business/join/CustomerCompanyJoinMapper.java
@@ -0,0 +1,13 @@
+package com.doumee.dao.business.join;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.CustomerCompany;
+import com.github.yulichang.base.mapper.MPJJoinMapper;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2024/11/05 18:41
+ */
+public interface CustomerCompanyJoinMapper extends MPJJoinMapper<CustomerCompany> {
+
+}
diff --git a/server/service/src/main/java/com/doumee/dao/business/join/CustomerServiceJoinMapper.java b/server/service/src/main/java/com/doumee/dao/business/join/CustomerServiceJoinMapper.java
new file mode 100644
index 0000000..f0a6b4f
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/dao/business/join/CustomerServiceJoinMapper.java
@@ -0,0 +1,13 @@
+package com.doumee.dao.business.join;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.CustomerService;
+import com.github.yulichang.base.mapper.MPJJoinMapper;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2024/11/05 18:41
+ */
+public interface CustomerServiceJoinMapper extends MPJJoinMapper<CustomerService> {
+
+}
diff --git a/server/service/src/main/java/com/doumee/dao/business/join/SolutionsBaseJoinMapper.java b/server/service/src/main/java/com/doumee/dao/business/join/SolutionsBaseJoinMapper.java
new file mode 100644
index 0000000..4b4def1
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/dao/business/join/SolutionsBaseJoinMapper.java
@@ -0,0 +1,13 @@
+package com.doumee.dao.business.join;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.SolutionsBase;
+import com.github.yulichang.base.mapper.MPJJoinMapper;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2024/10/28 19:16
+ */
+public interface SolutionsBaseJoinMapper extends MPJJoinMapper<SolutionsBase> {
+
+}
diff --git a/server/service/src/main/java/com/doumee/dao/business/model/ApplyChange.java b/server/service/src/main/java/com/doumee/dao/business/model/ApplyChange.java
index 591c63c..3e67a4c 100644
--- a/server/service/src/main/java/com/doumee/dao/business/model/ApplyChange.java
+++ b/server/service/src/main/java/com/doumee/dao/business/model/ApplyChange.java
@@ -182,9 +182,15 @@
     @ApiModelProperty(value = "鐢宠鍗曟崲鍘傞檮浠�")
     @TableField(exist = false)
     private Multifile applyUnitFile;
+
     @ApiModelProperty(value = "鎵瑰崟闄勪欢")
     @TableField(exist = false)
     private Multifile pidanFile;
+
+    @ApiModelProperty(value = "鎵瑰崟闄勪欢鍒楄〃")
+    @TableField(exist = false)
+    private List<Multifile> pidanFileList;
+
 
     @ApiModelProperty(value = "鎵瑰噺鏄惁浠呮敮鎸佹浛鎹� 0鍚� 1鏄�", example = "1")
     @TableField(exist = false)
@@ -226,6 +232,9 @@
     @ApiModelProperty(value = "鏂规绫诲瀷 0鐩翠繚 1濮旀墭鎶曚繚")
     @TableField(exist = false)
     private Integer solutionType;
+    @ApiModelProperty(value = "鏄惁鏈夋淳閬e崟浣� 0鏈� 1鏃�", example = "1")
+    @TableField(exist = false)
+    private Integer hasDispatchUnit;
 
     @ApiModelProperty(value = "鍚堝苟鍗曚富閿紙淇濆崟锛�")
     @TableField(exist = false)
diff --git a/server/service/src/main/java/com/doumee/dao/business/model/ApplyDetail.java b/server/service/src/main/java/com/doumee/dao/business/model/ApplyDetail.java
index 2fadde3..8b41529 100644
--- a/server/service/src/main/java/com/doumee/dao/business/model/ApplyDetail.java
+++ b/server/service/src/main/java/com/doumee/dao/business/model/ApplyDetail.java
@@ -142,7 +142,7 @@
     @TableField(exist = false)
     private String validCode;
 
-    @ApiModelProperty(value = "淇濋殰鐘舵�侊細0=淇濋殰涓紱1=涓嶅湪淇�")
+    @ApiModelProperty(value = "淇濋殰鐘舵�侊細-1=鐢宠涓紱0=淇濋殰涓紱1=涓嶅湪淇濓紱2=鏈敓鏁�")
     @TableField(exist = false)
     private Integer applyStatus;
 
diff --git a/server/service/src/main/java/com/doumee/dao/business/model/CompanyDepartment.java b/server/service/src/main/java/com/doumee/dao/business/model/CompanyDepartment.java
index cba61b8..841ced4 100644
--- a/server/service/src/main/java/com/doumee/dao/business/model/CompanyDepartment.java
+++ b/server/service/src/main/java/com/doumee/dao/business/model/CompanyDepartment.java
@@ -110,6 +110,9 @@
     @ApiModelProperty(value = "璐熻矗浜哄悕瀛�")
     @TableField(exist = false)
     private String headName;
+    @ApiModelProperty(value = "鏄惁鏃犲瓙闆嗭細ture=鏃狅紱false=鏈�")
+    @TableField(exist = false)
+    private Boolean hasChildren;
     @ApiModelProperty(value = "鎿嶄綔浜哄悕瀛�")
     @TableField(exist = false)
     private String editorName;
diff --git a/server/service/src/main/java/com/doumee/dao/business/model/CompanyPermission.java b/server/service/src/main/java/com/doumee/dao/business/model/CompanyPermission.java
index 6ebf465..956c7c0 100644
--- a/server/service/src/main/java/com/doumee/dao/business/model/CompanyPermission.java
+++ b/server/service/src/main/java/com/doumee/dao/business/model/CompanyPermission.java
@@ -9,6 +9,8 @@
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.io.Serializable;
 import java.util.Date;
 import java.util.List;
 
@@ -20,7 +22,7 @@
 @Data
 @ApiModel("绠$悊鍛樼鐞嗕紒涓氭潈闄�")
 @TableName("`company_permission`")
-public class CompanyPermission {
+public class CompanyPermission implements Serializable {
 
     @TableId(type = IdType.AUTO)
     @ApiModelProperty(value = "涓婚敭", example = "1")
@@ -63,8 +65,39 @@
     @ApiModelProperty(value = "鐢ㄦ埛缂栫爜", example = "1")
     @ExcelColumn(name="鐢ㄦ埛缂栫爜")
     private Integer userId;
+
+    @ApiModelProperty(value = "浼佷笟鍚嶇О", example = "1")
+    @TableField(exist = false)
+    private String companyName;
+
+    @ApiModelProperty(value = "璐﹀彿", example = "1")
+    @TableField(exist = false)
+    private String username;
+
+    @ApiModelProperty(value = "濮撳悕", example = "1")
+    @TableField(exist = false)
+    private String realname;
+
+    @ApiModelProperty(value = "鑱旂郴鏂瑰紡", example = "1")
+    @TableField(exist = false)
+    private String mobile;
+
+    @ApiModelProperty(value = "鎺堟潈浜�", example = "1")
+    @TableField(exist = false)
+    private String auditName;
+
     @ApiModelProperty(value = "浼佷笟缂栫爜闆嗗悎", example = "1")
     @TableField(exist = false)
     private List<Integer> companyIdList;
 
+
+    @ApiModelProperty(value = "鏄惁褰撳墠灞曠ず浼佷笟 0 = 鍚� 锛� 1 = 鏄�", example = "1")
+    @TableField(exist = false)
+    private Integer isShow = 0;
+
+    @ApiModelProperty(value = "鏄惁鑷韩浼佷笟 0 = 鍚� 锛� 1 = 鏄�", example = "1")
+    @TableField(exist = false)
+    private Integer isSelfCompany = 0;
+
+
 }
diff --git a/server/service/src/main/java/com/doumee/dao/business/model/CompanySolution.java b/server/service/src/main/java/com/doumee/dao/business/model/CompanySolution.java
index 173a079..fc8922c 100644
--- a/server/service/src/main/java/com/doumee/dao/business/model/CompanySolution.java
+++ b/server/service/src/main/java/com/doumee/dao/business/model/CompanySolution.java
@@ -76,6 +76,45 @@
     @ApiModelProperty(value = "鏄惁鍙噺淇� 0鍚� 1鏄�", example = "1")
     @ExcelColumn(name="鏄惁鍙噺淇� 0鍚� 1鏄�")
     private Integer canReduce;
+    @ApiModelProperty(value = "鏂规涓婚敭锛堝叧鑱攕olutions锛�", example = "1")
+    @ExcelColumn(name="鏂规涓婚敭锛堝叧鑱攕olutions锛�")
+    private Integer solutionId;
+    @ApiModelProperty(value = "鍟嗘埛涓婚敭锛堝叧鑱攃ompany锛�", example = "1")
+    @ExcelColumn(name="鍟嗘埛涓婚敭锛堝叧鑱攃ompany锛�")
+    private Integer shopId;
+    @ApiModelProperty(value = "鐘舵�� 0寰呯绔� 1宸茬绔�", example = "1")
+    @ExcelColumn(name="鐘舵�� 0寰呯绔� 1宸茬绔�")
+    private Integer signStatus;
+
+    @ApiModelProperty(value = "绛剧讲浜哄憳缂栫爜", example = "1")
+    @ExcelColumn(name="绛剧讲浜哄憳缂栫爜")
+    private Integer signUserId;
+
+    @ApiModelProperty(value = "绛剧珷鏃堕棿", example = "1")
+    @ExcelColumn(name="绛剧珷鏃堕棿")
+    private Date signDate;
+
+
+    @ApiModelProperty(value = "绛剧珷澶囨敞", example = "1")
+    @ExcelColumn(name="绛剧珷澶囨敞")
+    private String signInfo;
+
+    @ApiModelProperty(value = "绛剧珷鍚庢枃浠跺湴鍧�", example = "1")
+    @ExcelColumn(name="绛剧珷鍚庢枃浠跺湴鍧�")
+    private String fileSignUrl;
+
+    @ApiModelProperty(value = "绛剧讲鍚堝悓鍙�", example = "1")
+    @ExcelColumn(name="绛剧讲鍚堝悓鍙�")
+    private String applyNo;
+
+    @ApiModelProperty(value = "绛剧讲鍓嶆枃浠跺湴鍧�", example = "1")
+    @ExcelColumn(name="绛剧讲鍓嶆枃浠跺湴鍧�")
+    private String fileUrl;
+
+    @ApiModelProperty(value = "鏂规瀵硅薄", example = "1")
+    @TableField(exist = false)
+    private Solutions solution;
+
     @ApiModelProperty(value = "鏂规鍚嶇О" )
     @TableField(exist = false)
     private String solutionName  ;
@@ -86,14 +125,13 @@
     @ApiModelProperty(value = "濮旀墭鍟嗘埛鍚嶇О" )
     @TableField(exist = false)
     private String shopName  ;
-    @ApiModelProperty(value = "鏂规涓婚敭锛堝叧鑱攕olutions锛�", example = "1")
-    @ExcelColumn(name="鏂规涓婚敭锛堝叧鑱攕olutions锛�")
-    private Integer solutionId;
-    @ApiModelProperty(value = "鍟嗘埛涓婚敭锛堝叧鑱攃ompany锛�", example = "1")
-    @ExcelColumn(name="鍟嗘埛涓婚敭锛堝叧鑱攃ompany锛�")
-    private Integer shopId;
-    @ApiModelProperty(value = "鏂规瀵硅薄", example = "1")
+
+    @ApiModelProperty(value = "浼佷笟鍚嶇О" )
     @TableField(exist = false)
-    private Solutions solution;
+    private String companyName  ;
+    @ApiModelProperty(value = "绛剧讲浜哄悕绉�" )
+    @TableField(exist = false)
+    private String signUserName  ;
+
 
 }
diff --git a/server/service/src/main/java/com/doumee/dao/business/model/CompanyUserApply.java b/server/service/src/main/java/com/doumee/dao/business/model/CompanyUserApply.java
index b150676..4ba9e53 100644
--- a/server/service/src/main/java/com/doumee/dao/business/model/CompanyUserApply.java
+++ b/server/service/src/main/java/com/doumee/dao/business/model/CompanyUserApply.java
@@ -1,5 +1,6 @@
 package com.doumee.dao.business.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.core.annotation.excel.ExcelColumn;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -9,6 +10,7 @@
 import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 闆嗗洟鐢宠璁板綍琛�
@@ -84,4 +86,24 @@
     @ExcelColumn(name="瀹℃牳澶囨敞")
     private String checkInfo;
 
+    @ApiModelProperty(value = "鎺堟潈鏂囦欢")
+    @TableField(exist = false)
+    private List<Multifile> multifileList;
+
+    @ApiModelProperty(value = "鐢宠浜轰紒涓�")
+    @TableField(exist = false)
+    private String companyName;
+
+    @ApiModelProperty(value = "鐢宠浜轰紒涓氫富閿�")
+    @TableField(exist = false)
+    private Integer companyId;
+
+    @ApiModelProperty(value = "鐢宠浜哄悕绉�")
+    @TableField(exist = false)
+    private String realName;
+
+    @ApiModelProperty(value = "鎺堟潈璐﹀彿")
+    @TableField(exist = false)
+    private String userName;
+
 }
diff --git a/server/service/src/main/java/com/doumee/dao/business/model/Contract.java b/server/service/src/main/java/com/doumee/dao/business/model/Contract.java
index e2d8d0f..20e1e44 100644
--- a/server/service/src/main/java/com/doumee/dao/business/model/Contract.java
+++ b/server/service/src/main/java/com/doumee/dao/business/model/Contract.java
@@ -1,5 +1,6 @@
 package com.doumee.dao.business.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.core.annotation.excel.ExcelColumn;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -55,8 +56,13 @@
     @ExcelColumn(name="鍚堝悓鍚嶇О")
     private String name;
 
-    @ApiModelProperty(value = "浼佷笟鎴栬�呭晢鎴风紪鐮�(鍏宠仈company锛�", example = "1")
-    @ExcelColumn(name="浼佷笟鎴栬�呭晢鎴风紪鐮�(鍏宠仈company锛�")
+
+    @ApiModelProperty(value = "鐢叉柟浼佷笟涓婚敭", example = "1")
+    @ExcelColumn(name="鐢叉柟浼佷笟涓婚敭")
+    private Integer partyCompanyId;
+
+    @ApiModelProperty(value = "涔欐柟浼佷笟涓婚敭", example = "1")
+    @ExcelColumn(name="涔欐柟浼佷笟涓婚敭")
     private Integer companyId;
 
     @ApiModelProperty(value = "璇存槑")
@@ -111,11 +117,11 @@
 
     @ApiModelProperty(value = "鎴戞柟绛剧讲鍚堝悓鍙�")
     @ExcelColumn(name="鎴戞柟绛剧讲鍚堝悓鍙�")
-    private String appyno;
+    private String applyNo;
 
     @ApiModelProperty(value = "鏈�缁堢缃插悎鍚屽彿")
     @ExcelColumn(name="鏈�缁堢缃插悎鍚屽彿")
-    private String doneApplyno;
+    private String doneApplyNo;
 
     @ApiModelProperty(value = "鍚堝悓寮�濮嬫椂闂�")
     @ExcelColumn(name="鍚堝悓寮�濮嬫椂闂�")
@@ -140,4 +146,49 @@
     @ExcelColumn(name="鍙栨秷澶囨敞")
     private String cancelInfo;
 
+
+    @ApiModelProperty(value = "鏌ヨ鐘舵�侊細0=骞冲彴绛剧讲锛�1=鍟嗘埛绛剧讲锛�2=浼佷笟绛剧讲锛�3=宸插畬鎴愶紱4=宸插彇娑堬紱5=鍏抽棴")
+    @TableField(exist = false)
+    private Integer queryStatus;
+
+
+    @ApiModelProperty(value = "绛剧讲鏂囦欢")
+    @TableField(exist = false)
+    private Multifile multifile;
+
+    @ApiModelProperty(value = "缁勭粐绫诲瀷锛�0浼佷笟 1鍟嗘埛")
+    @TableField(exist = false)
+    private Integer companyType;
+
+    @ApiModelProperty(value = "涔欐柟缁勭粐鍚嶇О")
+    @TableField(exist = false)
+    private String companyName;
+
+    @ApiModelProperty(value = "鐢叉柟缁勭粐鍚嶇О")
+    @TableField(exist = false)
+    private String partyCompanyName;
+
+    @ApiModelProperty(value = "绛剧讲绫诲瀷锛�0 = 骞冲彴-鍟嗘埛锛�1= 骞冲彴-浼佷笟锛�2=鍟嗘埛-浼佷笟")
+    @ExcelColumn(name="鍙栨秷澶囨敞")
+    private Integer signType;
+
+
+    @ApiModelProperty(value = "鎴戞柟 宸茬缃叉枃浠�")
+    @TableField(exist = false)
+    private Multifile multiFirstFile;
+
+    @ApiModelProperty(value = "鍟嗘埛鎴栦紒涓氬凡绛剧讲鏂囦欢")
+    @TableField(exist = false)
+    private Multifile multiDoneFile;
+
+    @ApiModelProperty(value = "鎴戞柟绛剧讲浜�")
+    @TableField(exist = false)
+    private String firstSignUserName;
+
+    @ApiModelProperty(value = "浼佷笟鎴栧晢鎴风缃蹭汉鍚嶇О")
+    @TableField(exist = false)
+    private String doneSignUserName;
+
+
+
 }
diff --git a/server/service/src/main/java/com/doumee/dao/business/model/CustomerCompany.java b/server/service/src/main/java/com/doumee/dao/business/model/CustomerCompany.java
new file mode 100644
index 0000000..efc6371
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/dao/business/model/CustomerCompany.java
@@ -0,0 +1,79 @@
+package com.doumee.dao.business.model;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+
+/**
+ * 瀹㈡湇鍏宠仈浼佷笟琛�
+ * @author 姹熻箘韫�
+ * @date 2024/11/05 18:41
+ */
+@Data
+@ApiModel("瀹㈡湇鍏宠仈浼佷笟琛�")
+@TableName("`customer_company`")
+public class CustomerCompany {
+
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "涓婚敭", example = "1")
+    @ExcelColumn(name="涓婚敭")
+    private Integer id;
+
+    @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+    @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+    private Integer creator;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @ExcelColumn(name="鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date createDate;
+
+    @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
+    @ExcelColumn(name="鏇存柊浜虹紪鐮�")
+    private Integer editor;
+
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    @ExcelColumn(name="鏇存柊鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date editDate;
+
+    @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
+    @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
+    private Integer isdeleted;
+
+    @ApiModelProperty(value = "鍚嶇О")
+    @ExcelColumn(name="鍚嶇О")
+    private String name;
+
+    @ApiModelProperty(value = "澶囨敞")
+    @ExcelColumn(name="澶囨敞")
+    private String remark;
+
+    @ApiModelProperty(value = "鐘舵�� 0鍚敤 1绂佺敤", example = "1")
+    @ExcelColumn(name="鐘舵�� 0鍚敤 1绂佺敤")
+    private Integer status;
+
+    @ApiModelProperty(value = "鎺掑簭鐮�", example = "1")
+    @ExcelColumn(name="鎺掑簭鐮�")
+    private Integer sortnum;
+
+    @ApiModelProperty(value = "瀹㈡湇涓婚敭 鍏宠仈 customer_service 琛�", example = "1")
+    @ExcelColumn(name="瀹㈡湇涓婚敭 鍏宠仈 customer_service 琛�")
+    private Integer customerServiceId;
+
+    @ApiModelProperty(value = "浼佷笟涓婚敭", example = "1")
+    @ExcelColumn(name="浼佷笟涓婚敭")
+    private Integer companyId;
+
+    @ApiModelProperty(value = "浼佷笟鍚嶇О", example = "1")
+    @TableField(exist = false)
+    private String companyName;
+
+}
diff --git a/server/service/src/main/java/com/doumee/dao/business/model/CustomerService.java b/server/service/src/main/java/com/doumee/dao/business/model/CustomerService.java
new file mode 100644
index 0000000..c53849e
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/dao/business/model/CustomerService.java
@@ -0,0 +1,89 @@
+package com.doumee.dao.business.model;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 瀹㈡湇淇℃伅琛�
+ * @author 姹熻箘韫�
+ * @date 2024/11/05 18:41
+ */
+@Data
+@ApiModel("瀹㈡湇淇℃伅琛�")
+@TableName("`customer_service`")
+public class CustomerService {
+
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "涓婚敭", example = "1")
+    @ExcelColumn(name="涓婚敭")
+    private Integer id;
+
+    @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+    @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+    private Integer creator;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @ExcelColumn(name="鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date createDate;
+
+    @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
+    @ExcelColumn(name="鏇存柊浜虹紪鐮�")
+    private Integer editor;
+
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    @ExcelColumn(name="鏇存柊鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date editDate;
+
+    @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
+    @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
+    private Integer isdeleted;
+
+    @ApiModelProperty(value = "澶囨敞")
+    @ExcelColumn(name="澶囨敞")
+    private String remark;
+
+    @ApiModelProperty(value = "鐘舵�� 0鍚敤 1绂佺敤", example = "1")
+    @ExcelColumn(name="鐘舵�� 0鍚敤 1绂佺敤")
+    private Integer status;
+
+    @ApiModelProperty(value = "鎺掑簭鐮�", example = "1")
+    @ExcelColumn(name="鎺掑簭鐮�")
+    private Integer sortnum;
+
+    @ApiModelProperty(value = "鍚嶇О")
+    @ExcelColumn(name="鍚嶇О")
+    private String name;
+
+    @ApiModelProperty(value = "鎵嬫満鍙�")
+    @ExcelColumn(name="鎵嬫満鍙�")
+    private String mobile;
+
+    @ApiModelProperty(value = "鍒涘缓浜�")
+    @TableField(exist = false)
+    private String createUserName;
+
+    @ApiModelProperty(value = "浼佷笟鍚嶇О")
+    @TableField(exist = false)
+    private String companyName;
+
+    @ApiModelProperty(value = "寮�閫氱粍缁囨暟閲�")
+    @TableField(exist = false)
+    private Integer companyNum;
+
+
+    @ApiModelProperty(value = "鍏宠仈浼佷笟鏁版嵁")
+    @TableField(exist = false)
+    private List<CustomerCompany> customerCompanyList;
+
+}
diff --git a/server/service/src/main/java/com/doumee/dao/business/model/Insurance.java b/server/service/src/main/java/com/doumee/dao/business/model/Insurance.java
index 31df4eb..9ab9a20 100644
--- a/server/service/src/main/java/com/doumee/dao/business/model/Insurance.java
+++ b/server/service/src/main/java/com/doumee/dao/business/model/Insurance.java
@@ -85,6 +85,11 @@
     @ApiModelProperty(value = "LOGO鍥炬爣", example = "1")
     @ExcelColumn(name="LOGO鍥炬爣")
     private String logo;
+
+    @ApiModelProperty(value = "LOGO鍥炬爣", example = "1")
+    @TableField(exist = false)
+    private String logoFullUrl;
+
     @ApiModelProperty(value = "鑻辨枃鍚嶇О", example = "1")
     @ExcelColumn(name="鑻辨枃鍚嶇О")
     private String englishName;
@@ -100,4 +105,7 @@
     @ApiModelProperty(value = "淇濋櫓鏉℃", example = "1")
     @ExcelColumn(name="淇濋櫓鏉℃")
     private String agreement;
+    @ApiModelProperty(value = "鐞嗚禂璧勬枡", example = "1")
+    @ExcelColumn(name="鐞嗚禂璧勬枡")
+    private String claimsInformation;
 }
diff --git a/server/service/src/main/java/com/doumee/dao/business/model/InsuranceApply.java b/server/service/src/main/java/com/doumee/dao/business/model/InsuranceApply.java
index a3dc45b..b31921d 100644
--- a/server/service/src/main/java/com/doumee/dao/business/model/InsuranceApply.java
+++ b/server/service/src/main/java/com/doumee/dao/business/model/InsuranceApply.java
@@ -154,6 +154,8 @@
 //    @JsonFormat(pattern="yyyy-MM-dd")
     private Date finalEndTime;
 
+    @ApiModelProperty(value = "澶嶅浜轰富閿�")
+    private Integer retrialId;
 
     @ApiModelProperty(value = "浼佷笟鍚嶇О")
     @TableField(exist = false)
@@ -162,6 +164,15 @@
     @ApiModelProperty(value = "鏂规鍚嶇О")
     @TableField(exist = false)
     private String solutionsName;
+
+    @ApiModelProperty(value = "鏄惁鏈夋淳閬e崟浣� 0鏈� 1鏃�", example = "1")
+    @TableField(exist = false)
+    private Integer hasDispatchUnit;
+
+    @ApiModelProperty(value = "濮旀墭鏂规绛剧珷鏂瑰紡 0浼佷笟绛剧讲鍟嗘埛涓婁紶鎶曚繚鍗� 1浼佷笟绛炬姇淇濈敵璇� 2浼佷笟鏃犻渶绛剧珷", example = "1")
+    @TableField(exist = false)
+    private Integer signType;
+
     @ApiModelProperty(value = "鏂规绫诲瀷 0鐩翠繚 1濮旀墭鎶曚繚")
     @TableField(exist = false)
     private Integer solutionType;
@@ -252,6 +263,11 @@
     @TableField(exist = false)
     private Integer timeUnit;
 
+
+    @ApiModelProperty(value = "鎵规敼鎬婚噾棰�")
+    @TableField(exist = false)
+    private BigDecimal changeMoney;
+
     @ApiModelProperty(value = "鏂规鍩虹鐗堟湰涓婚敭", example = "1")
     @TableField(exist = false)
     private Integer solutionBaseId;
diff --git a/server/service/src/main/java/com/doumee/dao/business/model/Multifile.java b/server/service/src/main/java/com/doumee/dao/business/model/Multifile.java
index 8f42f11..0fc7214 100644
--- a/server/service/src/main/java/com/doumee/dao/business/model/Multifile.java
+++ b/server/service/src/main/java/com/doumee/dao/business/model/Multifile.java
@@ -65,8 +65,10 @@
     @ExcelColumn(name="绫诲瀷0鍥剧墖 1瑙嗛  2PDF 3鍏朵粬")
     private Integer type;
 
-    @ApiModelProperty(value = "鍏宠仈瀵硅薄绫诲瀷 0浼佷笟钀ヤ笟鎵х収 1鐞嗚禂鎶ユ浜嬫晠瑙嗛鎴栧浘鐗� 2鐞嗚禂鍛樺伐鍏崇郴璇佹槑鏉愭枡 3鐞嗚禂闂ㄨ瘖璧勬枡 4鐞嗚禂浣忛櫌璧勬枡 5鐞嗚禂浼ゆ畫璧勬枡 6鐞嗚禂璧斾粯缁撴鏉愭枡 7浼佷笟韬唤璇佸彿 8淇濆崟鐢宠琛≒DF 9绛剧讲鍚庝繚鍗曠敵璇疯〃PDF ", example = "1")
-    @ExcelColumn(name="鍏宠仈瀵硅薄绫诲瀷 0浼佷笟钀ヤ笟鎵х収 1鐞嗚禂鎶ユ浜嬫晠瑙嗛鎴栧浘鐗� 2鐞嗚禂鍛樺伐鍏崇郴璇佹槑鏉愭枡 3鐞嗚禂闂ㄨ瘖璧勬枡 4鐞嗚禂浣忛櫌璧勬枡 5鐞嗚禂浼ゆ畫璧勬枡 6鐞嗚禂璧斾粯缁撴鏉愭枡 7浼佷笟韬唤璇佸彿 8淇濆崟鐢宠琛≒DF 9绛剧讲鍚庝繚鍗曠敵璇疯〃PDF ")
+    @ApiModelProperty(value = "鍏宠仈瀵硅薄绫诲瀷 0浼佷笟钀ヤ笟鎵х収 1鐞嗚禂鎶ユ浜嬫晠瑙嗛鎴栧浘鐗� 2鐞嗚禂鍛樺伐鍏崇郴璇佹槑鏉愭枡 3鐞嗚禂闂ㄨ瘖璧勬枡" +
+            " 4鐞嗚禂浣忛櫌璧勬枡 5鐞嗚禂浼ゆ畫璧勬枡 6鐞嗚禂璧斾粯缁撴鏉愭枡 7浼佷笟韬唤璇佸彿 8淇濆崟鐢宠琛≒DF 9绛剧讲鍚庝繚鍗曠敵璇疯〃PDF ", example = "1")
+    @ExcelColumn(name="鍏宠仈瀵硅薄绫诲瀷 0浼佷笟钀ヤ笟鎵х収 1鐞嗚禂鎶ユ浜嬫晠瑙嗛鎴栧浘鐗� 2鐞嗚禂鍛樺伐鍏崇郴璇佹槑鏉愭枡 3鐞嗚禂闂ㄨ瘖璧勬枡 4鐞嗚禂浣忛櫌璧勬枡 5鐞嗚禂浼ゆ畫璧勬枡 6鐞嗚禂璧斾粯缁撴鏉愭枡 " +
+            "7浼佷笟韬唤璇佸彿 8淇濆崟鐢宠琛≒DF 9绛剧讲鍚庝繚鍗曠敵璇疯〃PDF  ")
     private Integer objType;
 
     @ApiModelProperty(value = "鏂囦欢鍦板潃")
diff --git a/server/service/src/main/java/com/doumee/dao/business/model/SolutionWorktype.java b/server/service/src/main/java/com/doumee/dao/business/model/SolutionWorktype.java
index 40a5f9a..686088e 100644
--- a/server/service/src/main/java/com/doumee/dao/business/model/SolutionWorktype.java
+++ b/server/service/src/main/java/com/doumee/dao/business/model/SolutionWorktype.java
@@ -48,6 +48,10 @@
     @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
     private Integer isdeleted;
 
+    @ApiModelProperty(value = "缁戝畾绫诲瀷锛�0=瀛愭柟妗堬紱1=涓绘柟妗�", example = "1")
+    @ExcelColumn(name="缁戝畾绫诲瀷锛�0=瀛愭柟妗堬紱1=涓绘柟妗�")
+    private Integer type;
+
     @ApiModelProperty(value = "澶囨敞")
     @ExcelColumn(name="澶囨敞")
     private String remark;
diff --git a/server/service/src/main/java/com/doumee/dao/business/model/Solutions.java b/server/service/src/main/java/com/doumee/dao/business/model/Solutions.java
index 18b5dad..dc1c690 100644
--- a/server/service/src/main/java/com/doumee/dao/business/model/Solutions.java
+++ b/server/service/src/main/java/com/doumee/dao/business/model/Solutions.java
@@ -103,7 +103,7 @@
     @ExcelColumn(name="淇濋櫓鏃堕棿鍗曚綅0澶� 1鍗婃湀 2鏈� 3骞�")
     private Integer timeUnit;
     @ApiModelProperty(value = "濮旀墭鏂规绛剧珷鏂瑰紡 0浼佷笟绛剧讲鍟嗘埛涓婁紶鎶曚繚鍗� 1浼佷笟绛炬姇淇濈敵璇� 2浼佷笟鏃犻渶绛剧珷", example = "1")
-    @ExcelColumn(name="濮旀墭鏂规绛剧珷鏂瑰紡 0浼佷笟绛剧讲鍟嗘埛涓婁紶鎶曚繚鍗� 1浼佷笟绛炬姇淇濈敵璇� 2浼佷笟鏃犻渶绛剧珷")
+    @ExcelColumn(name="濮旀墭鏂规绛剧珷鏂瑰紡 0绛剧讲鍟嗘埛涓婁紶鎶曚繚鍗� 1绛炬姇淇濈敵璇� 2浼佷笟鏃犻渶绛剧珷")
     private Integer signType;
     @ApiModelProperty(value = "鏄惁闇�瑕佸瀹� 0涓嶉渶瑕� 1闇�瑕�", example = "1")
     @ExcelColumn(name="鏄惁闇�瑕佸瀹� 0涓嶉渶瑕� 1闇�瑕�")
@@ -173,8 +173,8 @@
     @ExcelColumn(name="鐗堟湰鍙�")
     private String version;
 
-    @ApiModelProperty(value = "璁板綍绫诲瀷 0鍩鸿〃鏁版嵁 1鍘嗗彶鐗堟湰鏁版嵁", example = "1")
-    @ExcelColumn(name="璁板綍绫诲瀷 0鍩鸿〃鏁版嵁 1鍘嗗彶鐗堟湰鏁版嵁")
+    @ApiModelProperty(value = "璁板綍绫诲瀷 0鍩鸿〃鏁版嵁 1鍘嗗彶鐗堟湰鏁版嵁 2鏈�鏂板惎鐢ㄧ増鏈�", example = "1")
+    @ExcelColumn(name="璁板綍绫诲瀷 0鍩鸿〃鏁版嵁 1鍘嗗彶鐗堟湰鏁版嵁 2鏈�鏂板惎鐢ㄧ増鏈�")
     private Integer dataType;
 
     @ApiModelProperty(value = "鍩鸿〃缂栫爜锛堣嚜鍏宠仈锛�", example = "1")
@@ -184,6 +184,31 @@
     @ApiModelProperty(value = "寤惰繜澶╂暟鐢熸晥锛圴ALID_TYPE锛�0 浣跨敤锛�", example = "1")
     @ExcelColumn(name="寤惰繜澶╂暟鐢熸晥锛圴ALID_TYPE锛�0 浣跨敤锛�")
     private Integer validTypeNum;
+
+    @ApiModelProperty(value = "鎵规敼鎻愰啋鏃堕棿 HH:mm")
+    @ExcelColumn(name="鎵规敼鎻愰啋鏃堕棿")
+    private String correctWarnTime;
+
+    @ApiModelProperty(value = "鐘舵�� 0寰呯绔� 1宸茬绔�", example = "1")
+    @TableField(exist = false)
+    private Integer signStatus;
+
+    @ApiModelProperty(value = "绛剧讲鏃堕棿", example = "1")
+    @TableField(exist = false)
+    private Date signDate;
+
+
+    @ApiModelProperty(value = "绛剧讲鍚庢枃浠跺湴鍧�", example = "1")
+    @TableField(exist = false)
+    private String fileSignUrl;
+
+    @ApiModelProperty(value = "绛剧讲浜�", example = "1")
+    @TableField(exist = false)
+    private String signUserName;
+
+    @ApiModelProperty(value = "浼佷笟鏂规琛ㄤ富閿紙company_solutions锛�", example = "1")
+    @TableField(exist = false)
+    private Integer companySolutionId;
 
     @ApiModelProperty(value = "鍛樺伐", example = "1")
     @TableField(exist = false)
@@ -213,4 +238,7 @@
     @TableField(exist = false)
     private Multifile fanganFile;
 
+    @ApiModelProperty(value = "涓绘柟妗堝悕绉�", example = "1")
+    @TableField(exist = false)
+    private String solutionBaseName;
 }
diff --git a/server/service/src/main/java/com/doumee/dao/business/model/SolutionsBase.java b/server/service/src/main/java/com/doumee/dao/business/model/SolutionsBase.java
index 2c34cfc..0d70646 100644
--- a/server/service/src/main/java/com/doumee/dao/business/model/SolutionsBase.java
+++ b/server/service/src/main/java/com/doumee/dao/business/model/SolutionsBase.java
@@ -1,5 +1,6 @@
 package com.doumee.dao.business.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.core.annotation.excel.ExcelColumn;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -9,6 +10,7 @@
 import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 淇濋櫓鏂规淇℃伅琛�
@@ -99,8 +101,8 @@
     @ExcelColumn(name="鐗堟湰鍙�")
     private String version;
 
-    @ApiModelProperty(value = "璁板綍绫诲瀷 0鍩鸿〃鏁版嵁 1鍘嗗彶鐗堟湰鏁版嵁", example = "1")
-    @ExcelColumn(name="璁板綍绫诲瀷 0鍩鸿〃鏁版嵁 1鍘嗗彶鐗堟湰鏁版嵁")
+    @ApiModelProperty(value = "璁板綍绫诲瀷 0鍩鸿〃鏁版嵁 1鍘嗗彶鐗堟湰鏁版嵁 2褰撳墠鍚敤鐗堟湰", example = "1")
+    @ExcelColumn(name="璁板綍绫诲瀷 0鍩鸿〃鏁版嵁 1鍘嗗彶鐗堟湰鏁版嵁 2褰撳墠鍚敤鐗堟湰")
     private Integer dataType;
 
     @ApiModelProperty(value = "鍩鸿〃缂栫爜锛堣嚜鍏宠仈锛�", example = "1")
@@ -147,4 +149,24 @@
     @ExcelColumn(name="鎵垮寘鍏徃")
     private String companyName;
 
+    @ApiModelProperty(value = "鎵规敼鎻愰啋鏃堕棿 HH:mm")
+    @ExcelColumn(name="鎵规敼鎻愰啋鏃堕棿")
+    private String correctWarnTime;
+
+    @ApiModelProperty(value = "淇濋櫓鍏徃鍚嶇О", example = "1")
+    @TableField(exist = false)
+    private String insuranceName;
+
+    @ApiModelProperty(value = "濮旀墭鍟嗘埛鍚嶇О", example = "1")
+    @TableField(exist = false)
+    private String shopName;
+
+    @ApiModelProperty(value = "宸ョ鍒楄〃 - 鍥炴樉浣跨敤", example = "1")
+    @TableField(exist = false)
+    private List<SolutionWorktype> worktypeList;
+
+    @ApiModelProperty(value = "宸ョ缂栫爜闆嗗悎 - 淇濆瓨浣跨敤", example = "1")
+    @TableField(exist = false)
+    private List<Integer> worktypeIdList;
+
 }
diff --git a/server/service/src/main/java/com/doumee/dao/business/model/UnionApply.java b/server/service/src/main/java/com/doumee/dao/business/model/UnionApply.java
index 0b5bb97..0ff462e 100644
--- a/server/service/src/main/java/com/doumee/dao/business/model/UnionApply.java
+++ b/server/service/src/main/java/com/doumee/dao/business/model/UnionApply.java
@@ -84,8 +84,8 @@
     @ExcelColumn(name="鍗曞彿")
     private String code;
 
-    @ApiModelProperty(value = "鐘舵�� 0寰呬笂浼犳姇淇濆崟 1寰呯缃叉姇淇濆崟 2寰呬笂浼犱繚鍗� 3宸蹭笂浼犳壒鍗� 4宸查��鍥�", example = "1")
-    @ExcelColumn(name="鐘舵�� 0寰呬笂浼犳姇淇濆崟 1寰呯缃叉姇淇濆崟 2寰呬笂浼犱繚鍗� 3宸蹭笂浼犳壒鍗� 4宸查��鍥�")
+    @ApiModelProperty(value = "鐘舵�� 0寰呬笂浼犳姇淇濆崟 1寰呯缃叉姇淇濆崟 2寰呬笂浼犱繚鍗� 3宸蹭笂浼犳壒鍗� 4宸查��鍥� 5寰呭瀹�", example = "1")
+    @ExcelColumn(name="鐘舵�� 0寰呬笂浼犳姇淇濆崟 1寰呯缃叉姇淇濆崟 2寰呬笂浼犱繚鍗� 3宸蹭笂浼犳壒鍗� 4宸查��鍥� 5寰呭瀹�")
     private Integer status;
 
     @ApiModelProperty(value = "褰撳墠浜х敓璐圭敤", example = "1")
@@ -104,6 +104,11 @@
     @ExcelColumn(name="鏂规缂栫爜锛堝叧鑱攕olutions锛�")
     private Integer solutionId;
 
+
+    @ApiModelProperty(value = "澶嶅瀹℃壒浜�", example = "1")
+    @ExcelColumn(name="澶嶅瀹℃壒浜�")
+    private Integer retrialId;
+
     @ApiModelProperty(value = "鍟嗘埛鍚嶇О", example = "1")
     @TableField(exist = false)
     private String companyName;
@@ -119,6 +124,13 @@
     @TableField(exist = false)
     private Integer delOnlyReplace;
 
+    @ApiModelProperty(value = "鏄惁鏈夋淳閬e崟浣� 0鏈� 1鏃�", example = "1")
+    @TableField(exist = false)
+    private Integer hasDispatchUnit;
+
+    @ApiModelProperty(value = "濮旀墭鏂规绛剧珷鏂瑰紡 0浼佷笟绛剧讲鍟嗘埛涓婁紶鎶曚繚鍗� 1浼佷笟绛炬姇淇濈敵璇� 2浼佷笟鏃犻渶绛剧珷", example = "1")
+    @TableField(exist = false)
+    private Integer signType;
     @ApiModelProperty(value = "鏌ヨ寮�濮嬫棩鏈�", example = "1")
     @JsonFormat(pattern = "yyyy-MM-dd")
     @TableField(exist = false)
@@ -190,6 +202,10 @@
     private Integer changeApplyNum;
 
 
+    @ApiModelProperty(value = "鏌ヨ鐘舵�� 0寰呬笂浼犳姇淇濆崟 1寰呯缃叉姇淇濆崟 2寰呬笂浼犱繚鍗� 3宸蹭笂浼犳壒鍗曪紙淇濋殰涓級 4宸查��鍥� 5宸蹭笂浼犳壒鍗曪紙寰呯敓鏁堬級 6宸蹭笂浼犳壒鍗曪紙宸茶繃鏈燂級", example = "1")
+    @TableField(exist = false)
+    private Integer queryStatus;
+
 
     @ApiModelProperty(value = "鏃ュ織璁板綍")
     @TableField(exist = false)
diff --git a/server/service/src/main/java/com/doumee/dao/business/model/UnionChange.java b/server/service/src/main/java/com/doumee/dao/business/model/UnionChange.java
index cb69e8c..a4c1a4a 100644
--- a/server/service/src/main/java/com/doumee/dao/business/model/UnionChange.java
+++ b/server/service/src/main/java/com/doumee/dao/business/model/UnionChange.java
@@ -168,8 +168,8 @@
     @TableField(exist = false)
     private Multifile applyFile;
 
-    @ApiModelProperty(value = "鎵瑰崟闄勪欢")
-    @TableField(exist = false)
-    private Multifile pidanFile;
 
+    @ApiModelProperty(value = "鎵瑰崟闄勪欢鍒楄〃")
+    @TableField(exist = false)
+    private List<Multifile> pidanFileList;
 }
diff --git a/server/service/src/main/java/com/doumee/dao/business/vo/ApplyPowerVO.java b/server/service/src/main/java/com/doumee/dao/business/vo/ApplyPowerVO.java
new file mode 100644
index 0000000..f465070
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/dao/business/vo/ApplyPowerVO.java
@@ -0,0 +1,29 @@
+package com.doumee.dao.business.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 鎶曚繚鍗� 鍙搷浣滄潈闄�
+ * @author RenKang
+ */
+@Data
+public class ApplyPowerVO {
+
+    @ApiModelProperty(value = "鍔犱繚鐢熸晥鏈�", example = "1")
+    private Date  addStartDate;
+
+    @ApiModelProperty(value = "鍑忎繚鐢熸晥鏈�", example = "1")
+    private Date  delStartDate;
+
+    @ApiModelProperty(value = "鏄惁鍙姞淇� 0=鍙互鍔犱繚;1=涓嶅彲浠ュ姞淇�")
+    private Integer addTrue;
+
+    @ApiModelProperty(value = "鏄惁鍙噺淇� 0=鍙互鍑忎繚;1=涓嶅彲浠ュ噺淇�")
+    private Integer delTrue;
+
+
+}
diff --git a/server/service/src/main/java/com/doumee/dao/system/dto/CreateSystemUserDTO.java b/server/service/src/main/java/com/doumee/dao/system/dto/CreateSystemUserDTO.java
index 4c94f3f..f3eb9ce 100644
--- a/server/service/src/main/java/com/doumee/dao/system/dto/CreateSystemUserDTO.java
+++ b/server/service/src/main/java/com/doumee/dao/system/dto/CreateSystemUserDTO.java
@@ -23,6 +23,11 @@
 
     @ApiModelProperty(value = "瀛愯处鍙疯妭鐐�")
     private String sonUserId;
+
     @ApiModelProperty(value = "鐭俊楠岃瘉鐮�")
     private String captcha;
+
+    @ApiModelProperty(value = "鎶勯�佹枃浠堕偖绠�")
+    private String email;
+
 }
diff --git a/server/service/src/main/java/com/doumee/dao/system/dto/QuerySystemUserDTO.java b/server/service/src/main/java/com/doumee/dao/system/dto/QuerySystemUserDTO.java
index f4bc48a..a2fab05 100644
--- a/server/service/src/main/java/com/doumee/dao/system/dto/QuerySystemUserDTO.java
+++ b/server/service/src/main/java/com/doumee/dao/system/dto/QuerySystemUserDTO.java
@@ -30,6 +30,9 @@
     @ApiModelProperty(value = "鐢ㄦ埛鍚�")
     private String username;
 
+    @ApiModelProperty(value = "浼佷笟鍚嶇О")
+    private String companyName;
+
 
     @ApiModelProperty(value = "鐢ㄦ埛鍚嶃�佹墜鏈哄彿妯$硦鏌ヨ")
     private String keyword;
@@ -61,11 +64,20 @@
 
     @ApiModelProperty(value = "鍩庡競缂栫爜", hidden = true)
     private List<Integer> cityIds;
-    @ApiModelProperty(value = "绫诲瀷 0骞冲彴鐢ㄦ埛 1浼佷笟鐢ㄦ埛 2涓绘挱")
+    @ApiModelProperty(value = "绫诲瀷 0骞冲彴鐢ㄦ埛 1浼佷笟鐢ㄦ埛 2鍟嗘埛")
     private Integer type;
-
 
     @ApiModelProperty(value = "鐢ㄦ埛绫诲瀷闆嗗悎",hidden = true )
     private List<Integer> typeList;
 
+    @ApiModelProperty(value = "閮ㄩ棬涓婚敭 - 鏂�")
+    private Integer companyDepartmentId;
+
+    @ApiModelProperty(value = "閮ㄩ棬鍚嶇О - 鏂�")
+    private String companyDepartmentPathName;
+
+
+
+
+
 }
diff --git a/server/service/src/main/java/com/doumee/dao/system/model/SystemDataPermission.java b/server/service/src/main/java/com/doumee/dao/system/model/SystemDataPermission.java
index 70aad3b..69a37fe 100644
--- a/server/service/src/main/java/com/doumee/dao/system/model/SystemDataPermission.java
+++ b/server/service/src/main/java/com/doumee/dao/system/model/SystemDataPermission.java
@@ -36,7 +36,7 @@
     @NotNull(message = "瑙掕壊ID涓嶈兘涓虹┖", groups = {OperaType.Create.class, OperaType.Update.class})
     private Integer roleId;
 
-    @ApiModelProperty(value = "鏉冮檺绫诲瀷锛�0鍏ㄩ儴锛�1鑷畾涔夛紝2浠呯敤鎴锋墍灞烇紝3鐢ㄦ埛鎵�灞炲強鍏跺瓙鏁版嵁锛�", example = "1")
+    @ApiModelProperty(value = "鏉冮檺绫诲瀷锛�0=鍏ㄩ儴銆�1=鎵�灞為儴闂ㄥ強涓嬪睘閮ㄩ棬銆�2=鎵�灞為儴闂ㄥ強鍏跺瓙瀛欓儴闂ㄣ��3=浠呮墍灞為儴闂ㄣ��4=鑷畾涔夐儴闂ㄣ��-1=浠呰嚜宸憋級", example = "1")
     @NotNull(message = "鏉冮檺绫诲瀷涓嶈兘涓虹┖", groups = {OperaType.Create.class, OperaType.Update.class})
     private Integer type;
 
diff --git a/server/service/src/main/java/com/doumee/dao/system/model/SystemUser.java b/server/service/src/main/java/com/doumee/dao/system/model/SystemUser.java
index 198aad2..8d0394c 100644
--- a/server/service/src/main/java/com/doumee/dao/system/model/SystemUser.java
+++ b/server/service/src/main/java/com/doumee/dao/system/model/SystemUser.java
@@ -5,6 +5,7 @@
 import com.doumee.core.constants.OperaType;
 import com.doumee.dao.business.model.Company;
 import com.doumee.dao.business.model.CompanyDepartment;
+import com.doumee.dao.business.model.CompanyPermission;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import com.baomidou.mybatisplus.annotation.IdType;
@@ -114,16 +115,32 @@
     @TableField(exist = false)
     private Integer authNum;
 
-    @ApiModelProperty(value = "鎵�灞炰紒涓氫俊鎭")
+    @ApiModelProperty(value = "鏄惁涓荤 0鍚� 1鏄�", example = "1")
+    @TableField(exist = false)
+    private Integer headStatus;
+
+    @ApiModelProperty(value = "鎵�灞炰紒涓氫俊鎭�")
     @TableField(exist = false)
     private Company company;
+
+
+    @ApiModelProperty(value = "灞曠ず鐨勪紒涓氫俊鎭�")
+    @TableField(exist = false)
+    private Company showCompany;
+
+
     @ApiModelProperty(value = "鎵�灞炵粍缁囧璞�")
     @TableField(exist = false)
-    private CompanyDepartment department;
+    private CompanyDepartment companyDepartment;
 
     @ApiModelProperty(value = "骞冲彴绠$悊鍛樻潈闄愬唴浼佷笟缂栫爜闆嗗悎")
     @TableField(exist = false)
     private List<Integer> companyIdList;
+
+    @ApiModelProperty(value = "浼佷笟鐢ㄦ埛 - 鍙煡鐪嬬粍缁囨暟鎹�")
+    @TableField(exist = false)
+    private List<CompanyPermission> companyPermissionList;
+
     @ApiModelProperty(value = "鏁版嵁鏉冮檺鍐呯粍缁囩紪鐮侀泦鍚�")
     @TableField(exist = false)
     private List<Integer> departIdList;
diff --git a/server/service/src/main/java/com/doumee/dao/system/vo/DepartmentTree.java b/server/service/src/main/java/com/doumee/dao/system/vo/DepartmentTree.java
index e8446bc..35b759b 100644
--- a/server/service/src/main/java/com/doumee/dao/system/vo/DepartmentTree.java
+++ b/server/service/src/main/java/com/doumee/dao/system/vo/DepartmentTree.java
@@ -3,6 +3,7 @@
 import com.doumee.core.utils.Constants;
 import com.doumee.dao.business.model.Company;
 import com.doumee.dao.business.model.CompanyDepartment;
+import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 
 import java.util.ArrayList;
@@ -95,6 +96,11 @@
         }
         // for寰幆缁撴潫锛屽嵆鑺傜偣涓嬫病鏈変换浣曡妭鐐癸紝鏍戝舰鏋勫缓缁撴潫锛岃缃爲缁撴灉
         pNode.setChildList(childTree);
+        if(CollectionUtils.isNotEmpty(childTree)){
+            pNode.setHasChildren(false);
+        }else{
+            pNode.setHasChildren(true);
+        }
         return pNode;
     }
 
diff --git a/server/service/src/main/java/com/doumee/dao/system/vo/SystemRoleListVO.java b/server/service/src/main/java/com/doumee/dao/system/vo/SystemRoleListVO.java
index 4c24494..467282a 100644
--- a/server/service/src/main/java/com/doumee/dao/system/vo/SystemRoleListVO.java
+++ b/server/service/src/main/java/com/doumee/dao/system/vo/SystemRoleListVO.java
@@ -1,9 +1,6 @@
 package com.doumee.dao.system.vo;
 
-import com.doumee.dao.system.model.SystemMenu;
-import com.doumee.dao.system.model.SystemPermission;
-import com.doumee.dao.system.model.SystemRole;
-import com.doumee.dao.system.model.SystemUser;
+import com.doumee.dao.system.model.*;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -29,4 +26,9 @@
 
     @ApiModelProperty(value = "鏇存柊浜轰俊鎭�")
     private SystemUser updateUserInfo;
+
+    @ApiModelProperty(value = "瑙掕壊鏁版嵁鏉冮檺")
+    private SystemDataPermission systemDataPermission;
+
+
 }
diff --git a/server/service/src/main/java/com/doumee/dao/system/vo/SystemUserListVO.java b/server/service/src/main/java/com/doumee/dao/system/vo/SystemUserListVO.java
index dc7946d..d2fb605 100644
--- a/server/service/src/main/java/com/doumee/dao/system/vo/SystemUserListVO.java
+++ b/server/service/src/main/java/com/doumee/dao/system/vo/SystemUserListVO.java
@@ -23,18 +23,33 @@
 
     @ApiModelProperty(value = "宀椾綅淇℃伅")
     private List<SystemPosition> positions;
-
-    @ApiModelProperty(value = "閮ㄩ棬淇℃伅")
-    private SystemDepartment department;
+//
+//    @ApiModelProperty(value = "閮ㄩ棬淇℃伅")
+//    private SystemDepartment department;
 
     @ApiModelProperty(value = "鍒涘缓浜轰俊鎭�")
     private SystemUser createUserInfo;
 
     @ApiModelProperty(value = "鏇存柊浜轰俊鎭�")
     private SystemUser updateUserInfo;
+
     @ApiModelProperty(value = "浼佷笟鍚嶇О")
     private String companyName;
 
+    @ApiModelProperty(value = "缁勭粐鍚嶇О")
+    private String companyDepartmentPathName;
+
+    @ApiModelProperty(value = "缁勭粐涓婚敭")
+    private Integer companyDepartmentId;
+
+    @ApiModelProperty(value = "鍏ㄧ粍缁囦富閿�")
+    private String companyDepartmentPathId;
+
+    @ApiModelProperty(value = "宸叉巿鏉冧紒涓氭暟")
+    private Integer authNum;
+
+    @ApiModelProperty(value = "鏄惁瓒呯 1=鏄紱0=鍚�")
+    private String isAdmin;
 
     @ApiModelProperty(value = "涓绘挱绔湴鍧�")
     private String zhuboRoomUrl;
diff --git a/server/service/src/main/java/com/doumee/service/business/ApplyChangeService.java b/server/service/src/main/java/com/doumee/service/business/ApplyChangeService.java
index 858f5ea..9305b68 100644
--- a/server/service/src/main/java/com/doumee/service/business/ApplyChangeService.java
+++ b/server/service/src/main/java/com/doumee/service/business/ApplyChangeService.java
@@ -8,6 +8,7 @@
 import com.doumee.dao.business.model.ApplyChange;
 import com.doumee.dao.business.model.InsuranceApply;
 import com.doumee.dao.business.vo.CountCyclePriceVO;
+import com.doumee.service.business.impl.UnionChangeServiceImpl;
 
 import java.util.List;
 
@@ -29,7 +30,7 @@
     Integer back(ApplyChange param);
     Integer dealBackApply(ApplyChange param);
     Integer uploadPidan(ApplyChange insuranceApply);
-    Integer check(ApplyChange applyChange);
+    Integer check(ApplyChange applyChange, UnionChangeServiceImpl unionChangeService);
     /**
      * 涓婚敭鍒犻櫎
      *
@@ -88,6 +89,8 @@
      * @return List<ApplyChange>
      */
     List<ApplyChange> findList(ApplyChange applyChange);
+
+    List<ApplyChange> findListByApplyId(Integer applyId,Integer type);
   
     /**
      * 鍒嗛〉鏌ヨ
diff --git a/server/service/src/main/java/com/doumee/service/business/CompanyDepartmentService.java b/server/service/src/main/java/com/doumee/service/business/CompanyDepartmentService.java
index 9ce3c77..f5157bd 100644
--- a/server/service/src/main/java/com/doumee/service/business/CompanyDepartmentService.java
+++ b/server/service/src/main/java/com/doumee/service/business/CompanyDepartmentService.java
@@ -2,6 +2,7 @@
 
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.dto.UpdateSortDTO;
 import com.doumee.dao.business.model.CompanyDepartment;
 import java.util.List;
 
@@ -20,6 +21,7 @@
      */
     Integer create(CompanyDepartment companyDepartment);
     List<CompanyDepartment> departTree(Integer type);
+    void updateSort(UpdateSortDTO dto);
     /**
      * 涓婚敭鍒犻櫎
      *
diff --git a/server/service/src/main/java/com/doumee/service/business/CompanyPermissionService.java b/server/service/src/main/java/com/doumee/service/business/CompanyPermissionService.java
index c9fa4ad..d5562e8 100644
--- a/server/service/src/main/java/com/doumee/service/business/CompanyPermissionService.java
+++ b/server/service/src/main/java/com/doumee/service/business/CompanyPermissionService.java
@@ -94,4 +94,11 @@
      * @return long
      */
     long count(CompanyPermission companyPermission);
+
+    /**
+     * 鑾峰彇鐢ㄦ埛缁戝畾鐨勭粍缁囦俊鎭�
+     * @param userId
+     * @return
+     */
+    List<CompanyPermission> getUserCompanyPermission(Integer userId);
 }
diff --git a/server/service/src/main/java/com/doumee/service/business/CompanyService.java b/server/service/src/main/java/com/doumee/service/business/CompanyService.java
index 4fa9346..86bad99 100644
--- a/server/service/src/main/java/com/doumee/service/business/CompanyService.java
+++ b/server/service/src/main/java/com/doumee/service/business/CompanyService.java
@@ -92,6 +92,12 @@
     PageData<Company> findPage(PageWrap<Company> pageWrap);
 
     /**
+     * 鏌ヨ褰撳墠浼佷笟杩涜闆嗗洟鐢宠鍙互鐢宠鐨勪紒涓�
+     * @return
+     */
+    List<Company> findAllCompanyList();
+
+    /**
      * 鏉′欢缁熻
      *
      * @param company 瀹炰綋瀵硅薄
diff --git a/server/service/src/main/java/com/doumee/service/business/CompanySolutionService.java b/server/service/src/main/java/com/doumee/service/business/CompanySolutionService.java
index 81cf063..6658206 100644
--- a/server/service/src/main/java/com/doumee/service/business/CompanySolutionService.java
+++ b/server/service/src/main/java/com/doumee/service/business/CompanySolutionService.java
@@ -95,4 +95,12 @@
      * @return long
      */
     long count(CompanySolution companySolution);
+
+    /**
+     * 浼佷笟绛剧讲鏂规纭涔�
+     * @param id
+     * @return
+     */
+    String getCompanySolutionSignLink(Integer id);
+
 }
diff --git a/server/service/src/main/java/com/doumee/service/business/CompanyUserApplyService.java b/server/service/src/main/java/com/doumee/service/business/CompanyUserApplyService.java
index a52d1d6..dc76498 100644
--- a/server/service/src/main/java/com/doumee/service/business/CompanyUserApplyService.java
+++ b/server/service/src/main/java/com/doumee/service/business/CompanyUserApplyService.java
@@ -94,4 +94,10 @@
      * @return long
      */
     long count(CompanyUserApply companyUserApply);
+
+    /**
+     * 璁板綍瀹℃壒
+     * @param companyUserApply
+     */
+    void audit(CompanyUserApply companyUserApply);
 }
diff --git a/server/service/src/main/java/com/doumee/service/business/ContractService.java b/server/service/src/main/java/com/doumee/service/business/ContractService.java
index 66cac37..5effe85 100644
--- a/server/service/src/main/java/com/doumee/service/business/ContractService.java
+++ b/server/service/src/main/java/com/doumee/service/business/ContractService.java
@@ -94,4 +94,17 @@
      * @return long
      */
     long count(Contract contract);
+
+    /**
+     * 鍙栨秷
+     * @param id
+     */
+    void cancel(Integer id);
+
+    /**
+     * 鍙戣捣绛剧讲
+     * @param id
+     * @return
+     */
+    String getContractSignLink(Integer id);
 }
diff --git a/server/service/src/main/java/com/doumee/service/business/CustomerCompanyService.java b/server/service/src/main/java/com/doumee/service/business/CustomerCompanyService.java
new file mode 100644
index 0000000..ffb0016
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/service/business/CustomerCompanyService.java
@@ -0,0 +1,97 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.CustomerCompany;
+import java.util.List;
+
+/**
+ * 瀹㈡湇鍏宠仈浼佷笟琛⊿ervice瀹氫箟
+ * @author 姹熻箘韫�
+ * @date 2024/11/05 18:41
+ */
+public interface CustomerCompanyService {
+
+    /**
+     * 鍒涘缓
+     * 
+     * @param customerCompany 瀹炰綋瀵硅薄
+     * @return Integer
+     */
+    Integer create(CustomerCompany customerCompany);
+
+    /**
+     * 涓婚敭鍒犻櫎
+     *
+     * @param id 涓婚敭
+     */
+    void deleteById(Integer id);
+
+    /**
+     * 鍒犻櫎
+     *
+     * @param customerCompany 瀹炰綋瀵硅薄
+     */
+    void delete(CustomerCompany customerCompany);
+
+    /**
+     * 鎵归噺涓婚敭鍒犻櫎
+     *
+     * @param ids 涓婚敭闆�
+     */
+    void deleteByIdInBatch(List<Integer> ids);
+
+    /**
+     * 涓婚敭鏇存柊
+     *
+     * @param customerCompany 瀹炰綋瀵硅薄
+     */
+    void updateById(CustomerCompany customerCompany);
+
+    /**
+     * 鎵归噺涓婚敭鏇存柊
+     *
+     * @param customerCompanys 瀹炰綋闆�
+     */
+    void updateByIdInBatch(List<CustomerCompany> customerCompanys);
+
+    /**
+     * 涓婚敭鏌ヨ
+     *
+     * @param id 涓婚敭
+     * @return CustomerCompany
+     */
+    CustomerCompany findById(Integer id);
+
+    /**
+     * 鏉′欢鏌ヨ鍗曟潯璁板綍
+     *
+     * @param customerCompany 瀹炰綋瀵硅薄
+     * @return CustomerCompany
+     */
+    CustomerCompany findOne(CustomerCompany customerCompany);
+
+    /**
+     * 鏉′欢鏌ヨ
+     *
+     * @param customerCompany 瀹炰綋瀵硅薄
+     * @return List<CustomerCompany>
+     */
+    List<CustomerCompany> findList(CustomerCompany customerCompany);
+  
+    /**
+     * 鍒嗛〉鏌ヨ
+     *
+     * @param pageWrap 鍒嗛〉瀵硅薄
+     * @return PageData<CustomerCompany>
+     */
+    PageData<CustomerCompany> findPage(PageWrap<CustomerCompany> pageWrap);
+
+    /**
+     * 鏉′欢缁熻
+     *
+     * @param customerCompany 瀹炰綋瀵硅薄
+     * @return long
+     */
+    long count(CustomerCompany customerCompany);
+}
diff --git a/server/service/src/main/java/com/doumee/service/business/CustomerServiceService.java b/server/service/src/main/java/com/doumee/service/business/CustomerServiceService.java
new file mode 100644
index 0000000..daced50
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/service/business/CustomerServiceService.java
@@ -0,0 +1,113 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.CustomerService;
+import java.util.List;
+
+/**
+ * 瀹㈡湇淇℃伅琛⊿ervice瀹氫箟
+ * @author 姹熻箘韫�
+ * @date 2024/11/05 18:41
+ */
+public interface CustomerServiceService {
+
+    /**
+     * 鍒涘缓
+     *
+     * @param customerService 瀹炰綋瀵硅薄
+     * @return Integer
+     */
+    Integer create(CustomerService customerService);
+
+    /**
+     * 涓婚敭鍒犻櫎
+     *
+     * @param id 涓婚敭
+     */
+    void deleteById(Integer id);
+
+    /**
+     * 鍒犻櫎
+     *
+     * @param customerService 瀹炰綋瀵硅薄
+     */
+    void delete(CustomerService customerService);
+
+    /**
+     * 鎵归噺涓婚敭鍒犻櫎
+     *
+     * @param ids 涓婚敭闆�
+     */
+    void deleteByIdInBatch(List<Integer> ids);
+
+    /**
+     * 涓婚敭鏇存柊
+     *
+     * @param customerService 瀹炰綋瀵硅薄
+     */
+    void updateById(CustomerService customerService);
+
+    /**
+     * 鎵归噺涓婚敭鏇存柊
+     *
+     * @param customerServices 瀹炰綋闆�
+     */
+    void updateByIdInBatch(List<CustomerService> customerServices);
+
+    /**
+     * 涓婚敭鏌ヨ
+     *
+     * @param id 涓婚敭
+     * @return CustomerService
+     */
+    CustomerService findById(Integer id);
+
+    /**
+     * 鏉′欢鏌ヨ鍗曟潯璁板綍
+     *
+     * @param customerService 瀹炰綋瀵硅薄
+     * @return CustomerService
+     */
+    CustomerService findOne(CustomerService customerService);
+
+    /**
+     * 鏉′欢鏌ヨ
+     *
+     * @param customerService 瀹炰綋瀵硅薄
+     * @return List<CustomerService>
+     */
+    List<CustomerService> findList(CustomerService customerService);
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     *
+     * @param pageWrap 鍒嗛〉瀵硅薄
+     * @return PageData<CustomerService>
+     */
+    PageData<CustomerService> findPage(PageWrap<CustomerService> pageWrap);
+
+    /**
+     * 鏉′欢缁熻
+     *
+     * @param customerService 瀹炰綋瀵硅薄
+     * @return long
+     */
+    long count(CustomerService customerService);
+
+
+    /**
+     * 鏍规嵁浼佷笟鏌ヨ瀹㈡湇浜哄憳
+     *
+     * @param companyId
+     * @return
+     */
+    CustomerService findByCompanyId(Integer companyId);
+
+    /**
+     * 鎺堟潈浼佷笟
+     * @param customerService
+     */
+    void authCompany(CustomerService customerService);
+
+}
\ No newline at end of file
diff --git a/server/service/src/main/java/com/doumee/service/business/InsuranceApplyService.java b/server/service/src/main/java/com/doumee/service/business/InsuranceApplyService.java
index 1754387..9740820 100644
--- a/server/service/src/main/java/com/doumee/service/business/InsuranceApplyService.java
+++ b/server/service/src/main/java/com/doumee/service/business/InsuranceApplyService.java
@@ -2,13 +2,12 @@
 
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
-import com.doumee.dao.business.dto.CountCyclePriceDTO;
-import com.doumee.dao.business.dto.InsuranceApplyOptDTO;
-import com.doumee.dao.business.dto.InsuranceApplyQueryDTO;
-import com.doumee.dao.business.dto.SmsCheckDTO;
+import com.doumee.dao.business.dto.*;
 import com.doumee.dao.business.model.InsuranceApply;
 import com.doumee.dao.business.model.Member;
+import com.doumee.dao.business.vo.ApplyPowerVO;
 import com.doumee.dao.business.vo.CountCyclePriceVO;
+import com.doumee.service.business.impl.UnionApplyServiceImpl;
 import com.jzq.common.bean.sign.NotifyDataReq;
 
 import java.util.Date;
@@ -118,7 +117,14 @@
 
     Integer   dealBackApply(InsuranceApply insuranceApply);
 
-    Integer check(InsuranceApply insuranceApply);
+    Integer check(InsuranceApply insuranceApply, UnionApplyServiceImpl unionApplyServiceImpl);
+
+    /**
+     * 澶嶅涓氬姟
+     * @param insuranceApply
+     * @return
+     */
+    Integer reexamineCheck(InsuranceApply insuranceApply);
 
     InsuranceApply  findDetailForExport(InsuranceApply model);
 
@@ -171,5 +177,12 @@
      * @return
      */
     Integer guaranteeNum();
+
+    /**
+     * 鏍规嵁淇濆崟鏌ヨ鏄惁鍙互杩涜鍔犲噺淇濇搷浣�
+     * @param applyPowerDTO
+     * @return
+     */
+    ApplyPowerVO getApplyPower(ApplyPowerDTO applyPowerDTO);
 }
 
diff --git a/server/service/src/main/java/com/doumee/service/business/SolutionsBaseService.java b/server/service/src/main/java/com/doumee/service/business/SolutionsBaseService.java
index b99c247..d4587df 100644
--- a/server/service/src/main/java/com/doumee/service/business/SolutionsBaseService.java
+++ b/server/service/src/main/java/com/doumee/service/business/SolutionsBaseService.java
@@ -55,6 +55,9 @@
      */
     void updateByIdInBatch(List<SolutionsBase> solutionsBases);
 
+
+    void updateStatus(SolutionsBase solutionsBase);
+
     /**
      * 涓婚敭鏌ヨ
      *
@@ -63,6 +66,7 @@
      */
     SolutionsBase findById(Integer id);
 
+
     /**
      * 鏉′欢鏌ヨ鍗曟潯璁板綍
      *
diff --git a/server/service/src/main/java/com/doumee/service/business/SolutionsService.java b/server/service/src/main/java/com/doumee/service/business/SolutionsService.java
index 6c3c81a..3d21352 100644
--- a/server/service/src/main/java/com/doumee/service/business/SolutionsService.java
+++ b/server/service/src/main/java/com/doumee/service/business/SolutionsService.java
@@ -95,6 +95,14 @@
 
     List<Solutions> findListForCompany(Integer dataType);
 
+    /**
+     * 鏌ヨ浼佷笟宸茬缃茬殑鏂规淇℃伅
+     * @param dataType
+     * @param companyId
+     * @return
+     */
+    List<Solutions> findListByCompanyId(Integer dataType,Integer companyId);
+
     Solutions getNewVersion(Integer solutionId);
     /**
      * 鏉′欢缁熻
diff --git a/server/service/src/main/java/com/doumee/service/business/UnionApplyService.java b/server/service/src/main/java/com/doumee/service/business/UnionApplyService.java
index 26809f7..1ce4b45 100644
--- a/server/service/src/main/java/com/doumee/service/business/UnionApplyService.java
+++ b/server/service/src/main/java/com/doumee/service/business/UnionApplyService.java
@@ -110,6 +110,14 @@
     void cancelMerge(CloseDTO closeDTO);
 
     /**
+     * 澶嶅
+     * @param unionApply
+     * @return
+     */
+    Integer reexamineCheck(UnionApply unionApply);
+
+
+    /**
      * 涓婁紶鎶曚繚鍗�
      * @param uploadMultifileDTO
      */
diff --git a/server/service/src/main/java/com/doumee/service/business/WorktypeService.java b/server/service/src/main/java/com/doumee/service/business/WorktypeService.java
index dbfc2a6..8ba3c17 100644
--- a/server/service/src/main/java/com/doumee/service/business/WorktypeService.java
+++ b/server/service/src/main/java/com/doumee/service/business/WorktypeService.java
@@ -7,6 +7,7 @@
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
+import java.util.Set;
 
 /**
  * 宸ョ淇℃伅琛⊿ervice瀹氫箟
@@ -108,4 +109,6 @@
     long count(Worktype worktype);
 
     List<String> importBatch(MultipartFile file);
+
+    Set<Integer> importBatchForSolutions(MultipartFile file , Integer insuranceId);
 }
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/ApplyChagneDetailServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/ApplyChagneDetailServiceImpl.java
index 0aaef6b..605fdf4 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/ApplyChagneDetailServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/ApplyChagneDetailServiceImpl.java
@@ -207,7 +207,9 @@
         queryWrapper.leftJoin(DispatchUnit.class,DispatchUnit::getId,ApplyChagneDetail::getDuId);
         queryWrapper.leftJoin(Worktype.class,Worktype::getId,ApplyChagneDetail::getOldWorktypeId);
         queryWrapper.leftJoin(DispatchUnit.class,DispatchUnit::getId,ApplyChagneDetail::getOldDuId);
-        queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
+        queryWrapper.leftJoin(ApplyChange.class,ApplyChange::getId,ApplyChagneDetail::getApplyChangeId);
+        queryWrapper.leftJoin(InsuranceApply.class,InsuranceApply::getId,ApplyChange::getApplyId);
+        queryWrapper.leftJoin(Company.class,Company::getId,InsuranceApply::getCompanyId);
         ApplyDetailPageDTO applyDetailPageDTO = pageWrap.getModel();
         queryWrapper.exists(!Objects.isNull(applyDetailPageDTO.getApplyId()),
                 " select 1 from apply_change ac where ac.isdeleted = 0 and ac.status in (1,2)  and ac.apply_id = "+applyDetailPageDTO.getApplyId()+" and ac.id = t.apply_change_id  ");
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java
index 90c5ba5..5b4d435 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java
@@ -82,6 +82,9 @@
     private ApplyDetailJoinMapper applyDetailJoinMapper;
 
     @Autowired
+    private SettleClaimsMapper settleClaimsMapper;
+
+    @Autowired
     private MemberInsuranceJoinMapper memberInsuranceJoinMapper;
 
     @Autowired
@@ -90,6 +93,8 @@
     @Autowired
     private MemberMapper memberMapper;
 
+    @Autowired
+    private SolutionWorktypeJoinMapper solutionWorktypeJoinMapper;
     @Autowired
     private MultifileMapper multifileMapper;
     @Autowired
@@ -191,9 +196,11 @@
         if(param.getId() == null
                 || param.getValidCode() == null
                 || param.getApplyStartTime() == null
-                || param.getPidanFile() == null
-                ||StringUtils.isBlank( param.getPidanFile().getFileurl())
-                ||StringUtils.isBlank( param.getPidanFile() .getName())){
+                || CollectionUtils.isEmpty(param.getPidanFileList())
+//                || param.getPidanFile() == null
+//                ||StringUtils.isBlank( param.getPidanFile().getFileurl())
+//                ||StringUtils.isBlank( param.getPidanFile() .getName())
+        ){
             throw  new BusinessException(ResponseStatus.BAD_REQUEST);
         }
 
@@ -243,14 +250,20 @@
         update.setApplyStartTime(param.getApplyStartTime());
         update.setDelValidTime(param.getDelValidTime());
         update.setCode(model.getCode());
-
-        param.getPidanFile().setIsdeleted(Constants.ZERO);
-        param.getPidanFile().setCreator(user.getId());
-        param.getPidanFile().setObjId(update.getId());
-        param.getPidanFile().setCreateDate(update.getEditDate());
-        param.getPidanFile().setObjType(Constants.MultiFile.CA_PD_PDF.getKey());
-        param.getPidanFile().setType(Constants.TWO);
-        multifileMapper.insert(param.getPidanFile());
+        List<Multifile> pidanFileList = param.getPidanFileList();
+        for (Multifile pidanFile:pidanFileList) {
+            if(StringUtils.isBlank( pidanFile.getFileurl())
+                ||StringUtils.isBlank( pidanFile .getName())) {
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鎵瑰崟鏂囦欢鍙傛暟閿欒");
+            }
+            pidanFile.setIsdeleted(Constants.ZERO);
+            pidanFile.setCreator(user.getId());
+            pidanFile.setObjId(update.getId());
+            pidanFile.setCreateDate(update.getEditDate());
+            pidanFile.setObjType(Constants.MultiFile.CA_PD_PDF.getKey());
+            pidanFile.setType(Constants.TWO);
+        }
+        multifileMapper.insertBatchSomeColumn(pidanFileList);
         update.setApplyId(model.getApplyId());
 
 
@@ -293,10 +306,12 @@
     public     Integer editPidan(ApplyChange param) {
         if(param.getId() == null
                 || param.getValidCode() == null
-                || param.getPidanFile() == null
                 || param.getCheckInfo() == null
-                ||StringUtils.isBlank( param.getPidanFile().getFileurl())
-                ||StringUtils.isBlank( param.getPidanFile() .getName())){
+                || CollectionUtils.isEmpty(param.getPidanFileList())
+//                || param.getPidanFile() == null
+//                ||StringUtils.isBlank( param.getPidanFile().getFileurl())
+//                ||StringUtils.isBlank( param.getPidanFile() .getName())
+        ){
             throw  new BusinessException(ResponseStatus.BAD_REQUEST);
         }
 
@@ -334,13 +349,29 @@
                 .eq(Multifile::getObjId,update.getId())
                 .eq(Multifile::getObjType,Constants.MultiFile.CA_PD_PDF.getKey())
         );
-        param.getPidanFile().setIsdeleted(Constants.ZERO);
-        param.getPidanFile().setObjId(update.getId());
-        param.getPidanFile().setCreator(user.getId());
-        param.getPidanFile().setCreateDate(update.getEditDate());
-        param.getPidanFile().setObjType(Constants.MultiFile.CA_PD_PDF.getKey());
-        param.getPidanFile().setType(Constants.TWO);
-        multifileMapper.insert(param.getPidanFile());
+
+        List<Multifile> pidanFileList = param.getPidanFileList();
+        for (Multifile pidanFile:pidanFileList) {
+            if(StringUtils.isBlank( pidanFile.getFileurl())
+                    ||StringUtils.isBlank( pidanFile .getName())) {
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鎵瑰崟鏂囦欢鍙傛暟閿欒");
+            }
+            pidanFile.setIsdeleted(Constants.ZERO);
+            pidanFile.setCreator(user.getId());
+            pidanFile.setObjId(update.getId());
+            pidanFile.setCreateDate(update.getEditDate());
+            pidanFile.setObjType(Constants.MultiFile.CA_PD_PDF.getKey());
+            pidanFile.setType(Constants.TWO);
+        }
+        multifileMapper.insertBatchSomeColumn(param.getPidanFileList());
+
+//        param.getPidanFile().setIsdeleted(Constants.ZERO);
+//        param.getPidanFile().setObjId(update.getId());
+//        param.getPidanFile().setCreator(user.getId());
+//        param.getPidanFile().setCreateDate(update.getEditDate());
+//        param.getPidanFile().setObjType(Constants.MultiFile.CA_PD_PDF.getKey());
+//        param.getPidanFile().setType(Constants.TWO);
+//        multifileMapper.insert(param.getPidanFile());
 
         Constants.ApplyLogType applyLogType = Constants.ApplyLogType.CA_PALTFORM_EDIT_PIDAN;
         String info =  applyLogType.getInfo();
@@ -585,11 +616,14 @@
                     .eq(ApplyDetail::getMemberId, detail.getMemberId())
                     .orderByDesc(ApplyDetail::getCreateDate)
                     .last("limit 1"));
-            if (oldModel == null || oldModel.getStartTime() == null || oldModel.getStartTime().getTime() > update.getApplyStartTime().getTime()) {
+//            if (oldModel == null || oldModel.getStartTime() == null || oldModel.getStartTime().getTime() > update.getApplyStartTime().getTime()) {
+//                throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵逛笉璧凤紝鐢ㄦ埛銆�" + detail.getMemberName() + "銆戝師淇濆崟淇℃伅鏈夎锛屽綋鍓嶇敵璇蜂笉鏀寔鍑忎繚澶勭悊锛�");
+//            }
+//            if(!(oldModel.getStartTime().getTime()<=update.getDelValidTime().getTime()&& oldModel.getEndTime().getTime()>=update.getDelValidTime().getTime())){
+//                throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵逛笉璧凤紝鐢ㄦ埛銆�" + detail.getMemberName() + "銆戝噺淇濇棩鏈熸湭鍦ㄤ繚鍗曡褰曟棩鏈熶腑锛�");
+//            }
+            if (oldModel == null || oldModel.getEndTime() == null || oldModel.getEndTime().getTime() < update.getDelValidTime().getTime()) {
                 throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵逛笉璧凤紝鐢ㄦ埛銆�" + detail.getMemberName() + "銆戝師淇濆崟淇℃伅鏈夎锛屽綋鍓嶇敵璇蜂笉鏀寔鍑忎繚澶勭悊锛�");
-            }
-            if(!(oldModel.getStartTime().getTime()<=update.getDelValidTime().getTime()&& oldModel.getEndTime().getTime()>=update.getDelValidTime().getTime())){
-                throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵逛笉璧凤紝鐢ㄦ埛銆�" + detail.getMemberName() + "銆戝噺淇濇棩鏈熸湭鍦ㄤ繚鍗曡褰曟棩鏈熶腑锛�");
             }
             BigDecimal sumFee = Objects.isNull(insuranceApply.getServerCost())?
                     solutions.getPrice():
@@ -609,6 +643,9 @@
                         sumFee
                         ,insuranceApply.getStartTime(),insuranceApply.getFinalEndTime(),oldModel.getStartTime(),delValidTime
                 ) ;
+            }else{
+                delValidTime  = oldModel.getStartTime();
+                updateFee = BigDecimal.ZERO;
             }
             if (oldModel.getStartTime().getTime() < System.currentTimeMillis()) {
                 //// 2024骞�5鏈�8鏃�17:37:23 淇敼 璁$畻浜х敓璐圭敤
@@ -893,9 +930,9 @@
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
         }
         LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
-        if (!loginUserInfo.getType().equals(Constants.ONE)) {
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鐢ㄦ埛绫诲瀷閿欒锛氶潪浼佷笟鐢ㄦ埛鏃犳硶杩涜璇ユ搷浣�");
-        }
+//        if (!loginUserInfo.getType().equals(Constants.ONE)) {
+//            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鐢ㄦ埛绫诲瀷閿欒锛氶潪浼佷笟鐢ㄦ埛鏃犳硶杩涜璇ユ搷浣�");
+//        }
 
         InsuranceApply insuranceApply = insuranceApplyMapper.selectById(applyChange.getApplyId());
         if (Objects.isNull(insuranceApply)) {
@@ -914,7 +951,7 @@
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌淇濋櫓鏂规");
         }
         CompanySolution companySolution = companySolutionMapper.selectOne(new QueryWrapper<CompanySolution>().lambda()
-                .eq(CompanySolution::getCompanyId,loginUserInfo.getCompanyId())
+                .eq(CompanySolution::getCompanyId,insuranceApply.getCompanyId())
                 .eq(CompanySolution::getSolutionBaseId,solutions.getBaseId())
                 .eq(CompanySolution::getIsdeleted,Constants.ZERO)
                 .last(" limit 1 ")
@@ -926,7 +963,6 @@
         if(applyChangeMapper.selectCount(new QueryWrapper<ApplyChange>().lambda()
                 .eq(ApplyChange::getApplyId,insuranceApply.getId())
                 .notIn(ApplyChange::getStatus,Constants.ApplyChangeStatus.APPROVE.getKey(),Constants.ApplyChangeStatus.CLOSE.getKey())
-
         )>Constants.ZERO){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀛樺湪杩涜涓殑鍔犲噺淇�/鎹㈠巶鐢宠");
         };
@@ -978,9 +1014,9 @@
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
         }
         LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
-        if (!loginUserInfo.getType().equals(Constants.ONE)) {
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鐢ㄦ埛绫诲瀷閿欒锛氶潪浼佷笟鐢ㄦ埛鏃犳硶杩涜璇ユ搷浣�");
-        }
+//        /*if (!loginUserInfo.getType().equals(Constants.ONE)) {
+//            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鐢ㄦ埛绫诲瀷閿欒锛氶潪浼佷笟鐢ㄦ埛鏃犳硶杩涜璇ユ搷浣�");
+//        }*/
         ApplyChange dbApplyChange = applyChangeMapper.selectById(applyChange.getId());
         if(Objects.isNull(dbApplyChange)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
@@ -1012,7 +1048,8 @@
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌淇濋櫓鏂规");
         }
         if(solutions.getDataType().equals(Constants.ONE)){
-            solutions = solutionsMapper.selectOne(new QueryWrapper<Solutions>().lambda().eq(Solutions::getBaseId,solutions.getBaseId()).eq(Solutions::getDataType,Constants.TWO).last("limit 1"));
+            solutions = solutionsMapper.selectOne(new QueryWrapper<Solutions>().lambda()
+                    .eq(Solutions::getBaseId,solutions.getBaseId()).eq(Solutions::getDataType,Constants.TWO).last("limit 1"));
             if(Objects.isNull(solutions)){
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈煡璇㈠埌鏂规鏈�鏂扮増鏈俊鎭�");
             }
@@ -1109,27 +1146,40 @@
                 }
             }
         }
-        //鏌ヨ淇濋櫓鏂规涓嬬殑鎵�鏈夋淳閬e崟浣�
-        List<DuSolution>  duSolutionList = duSolutionJoinMapper.selectJoinList(DuSolution.class,new MPJLambdaWrapper<DuSolution>()
-                .selectAll(DuSolution.class)
-                .innerJoin(DispatchUnit.class,DispatchUnit::getId,DuSolution::getDispatchUnitId)
-                .eq(DispatchUnit::getCompanyId,insuranceApply.getCompanyId())
-                .eq(DispatchUnit::getIsdeleted,Constants.ZERO)
-                .eq(DispatchUnit::getUnitStatus,Constants.ONE)
-                .eq(DuSolution::getIsdeleted,Constants.ZERO)
-                .eq(DuSolution::getStatus,Constants.ONE)
-                .eq(DuSolution::getSolutionId,companySolution.getSolutionId()));
-        if(!CollectionUtils.isNotEmpty(duSolutionList)){
-            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鏁版嵁寮傚父锛氫繚闄╂柟妗堜笅鏈煡璇㈠埌娲鹃仯鍗曚綅");
-        }
-        //鏌ヨ鎵�鏈夋淳閬e崟浣嶄笅鐨勫伐绉�
-        List<Integer> duSolutionIdList = duSolutionList.stream().map(i->i.getId()).collect(Collectors.toList());
-        List<DuWorktype> duWorktypeList = duWorktypeMapper.selectList(new QueryWrapper<DuWorktype>().lambda()
-                .eq(DuWorktype::getIsdeleted,Constants.ZERO)
-                .eq(DuWorktype::getStatus,Constants.ONE)
-                .in(DuWorktype::getDuSolutionId,duSolutionIdList));
-        if (!CollectionUtils.isNotEmpty(duWorktypeList)) {
-            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏁版嵁寮傚父锛氫繚闄╂柟妗堜笅鏈煡璇㈠埌宸ョ淇℃伅");
+        List<DuSolution>  duSolutionList = new ArrayList<>();
+        List<DuWorktype> duWorktypeList = new ArrayList<>();
+        List<Integer> worktypeIdList = new ArrayList<>();
+        if(Constants.equalsInteger(solutions.getHasDispatchUnit(),Constants.ZERO)){
+            //鏌ヨ淇濋櫓鏂规涓嬬殑鎵�鏈夋淳閬e崟浣�
+             duSolutionList = duSolutionJoinMapper.selectJoinList(DuSolution.class,new MPJLambdaWrapper<DuSolution>()
+                    .selectAll(DuSolution.class)
+                    .innerJoin(DispatchUnit.class,DispatchUnit::getId,DuSolution::getDispatchUnitId)
+                    .eq(DispatchUnit::getCompanyId,insuranceApply.getCompanyId())
+                    .eq(DispatchUnit::getIsdeleted,Constants.ZERO)
+                    .eq(DispatchUnit::getUnitStatus,Constants.ONE)
+                    .eq(DuSolution::getIsdeleted,Constants.ZERO)
+                    .eq(DuSolution::getStatus,Constants.ONE)
+                    .eq(DuSolution::getSolutionId,companySolution.getSolutionId()));
+            if(!CollectionUtils.isNotEmpty(duSolutionList)){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鏁版嵁寮傚父锛氫繚闄╂柟妗堜笅鏈煡璇㈠埌娲鹃仯鍗曚綅");
+            }
+            //鏌ヨ鎵�鏈夋淳閬e崟浣嶄笅鐨勫伐绉�
+            List<Integer> duSolutionIdList = duSolutionList.stream().map(i->i.getId()).collect(Collectors.toList());
+             duWorktypeList = duWorktypeMapper.selectList(new QueryWrapper<DuWorktype>().lambda()
+                    .eq(DuWorktype::getIsdeleted,Constants.ZERO)
+                    .eq(DuWorktype::getStatus,Constants.ONE)
+                    .in(DuWorktype::getDuSolutionId,duSolutionIdList));
+            if (!CollectionUtils.isNotEmpty(duWorktypeList)) {
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏁版嵁寮傚父锛氫繚闄╂柟妗堜笅鏈煡璇㈠埌宸ョ淇℃伅");
+            }
+            worktypeIdList = duWorktypeList.stream().map(i->i.getWorkTypeId()).collect(Collectors.toList());
+        }else{
+            //鏌ヨ鏂规涓嬫墍鏈夊伐绉嶆暟鎹�
+            List<SolutionWorktype> solutionWorktypeList = solutionWorktypeJoinMapper.selectList(new QueryWrapper<SolutionWorktype>().lambda().eq(SolutionWorktype::getSolutionId,solutions.getId()));
+            if(CollectionUtils.isEmpty(solutionWorktypeList)){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝淇濋櫓鏂规涓嬫湭鏌ヨ鍒板伐绉嶄俊鎭�");
+            }
+            worktypeIdList = solutionWorktypeList.stream().map(i->i.getWorktypeId()).collect(Collectors.toList());
         }
 
         ApplyChangeCyclePriceDTO applyChangeCyclePriceDTO = new ApplyChangeCyclePriceDTO();
@@ -1158,7 +1208,7 @@
                     ,insuranceApply.getStartTime(),insuranceApply.getFinalEndTime(),
                     applyChange.getApplyStartTime(),insuranceApply.getEndTime());
 
-            this.addChangeDetail(applyChange,addDetailList,duWorktypeList,duSolutionList,insuranceApply,solutions,loginUserInfo,detailFee,delDetailList.size());
+            this.addChangeDetail(applyChange,addDetailList,duSolutionList,insuranceApply,solutions,loginUserInfo,detailFee,delDetailList.size(),worktypeIdList);
             fee = addDetailList.stream().map(ApplyChagneDetail::getFee).reduce(BigDecimal.ZERO,BigDecimal::add);
         }
 
@@ -1192,7 +1242,7 @@
                 throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"瀵逛笉璧凤紝浜哄憳褰曞叆鏁版嵁瀛樺湪鐩稿悓鏁版嵁锛�");
             }
 
-            this.changeDetail(applyChange,changeDetailList,duWorktypeList,duSolutionList,loginUserInfo);
+            this.changeDetail(applyChange,changeDetailList,duSolutionList,loginUserInfo,solutions,worktypeIdList);
         }
         return fee;
     }
@@ -1224,10 +1274,36 @@
      */
     public void delChangeDetail(ApplyChange applyChange ,List<ApplyChagneDetail> delDetailList,InsuranceApply insuranceApply,Solutions solutions,
                                 LoginUserInfo loginUserInfo,BigDecimal detailFee,Date endTime){
+        if(DateUtil.getMontageDate(applyChange.getDelValidTime(),3).getTime()>insuranceApply.getEndTime().getTime()){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鍑忎繚鐢熸晥鏈熶笉鑳芥櫄浜庝繚鍗曠粨鏉熸棩鏈�");
+        }
         for (ApplyChagneDetail applyChagneDetail : delDetailList) {
             if (Objects.isNull(applyChagneDetail.getMemberId())) {
                 throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鍑忎繚浜哄憳銆�" + applyChagneDetail.getMemberName() + "銆戝繀濉」缂哄け");
             }
+            //2024-10-29 15:17:54 鏌ヨ鏄惁宸插嚭闄� 宸插嚭闄╂棤娉曡繘琛屾姇淇�
+            if(settleClaimsMapper.selectCount(new QueryWrapper<SettleClaims>().lambda()
+                    .eq(SettleClaims::getInsuranceApplyId,applyChange.getApplyId())
+                    .eq(SettleClaims::getMemberId,applyChagneDetail.getMemberId())
+                    .in(SettleClaims::getStatus,Constants.SettleClaimsStatus.DEAL_ING.getKey()
+                            ,Constants.SettleClaimsStatus.CONFIRM_INFORMATION.getKey()
+                            ,Constants.SettleClaimsStatus.FINISH_ACCEPTANCE.getKey())
+            )>Constants.ZERO){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鍑忎繚浜哄憳銆�" + applyChagneDetail.getMemberName() + "銆戝凡鍑洪櫓鏃犳硶杩涜鍑忎繚");
+            };
+            //2024-10-29 15:17:54 鏌ヨ浜哄憳鏄惁宸插噺淇� 宸插噺淇濆悗鏃犳硶鍐嶆鍑忎繚
+            if(applyChangeDetailJoinMapper.selectJoinCount(new MPJLambdaWrapper<ApplyChagneDetail>()
+                    .leftJoin(ApplyChange.class,ApplyChange::getId,ApplyChagneDetail::getApplyChangeId)
+                    .eq(ApplyChagneDetail::getType,Constants.ONE)
+                    .eq(ApplyChange::getApplyId,applyChange.getApplyId())
+                            .eq(ApplyChagneDetail::getMemberId,applyChagneDetail.getMemberId())
+                    .notIn(ApplyChange::getStatus,Constants.ApplyChangeStatus.CLOSE.getKey()
+                            ,Constants.ApplyChangeStatus.PALTFORM_CHECK_PASS_NO.getKey() 
+                    )
+            )>Constants.ZERO){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鍑忎繚浜哄憳銆�" + applyChagneDetail.getMemberName() + "銆戝凡鍑忎繚鏃犳硶鍐嶆杩涜鍑忎繚");
+            };
+
             //鏌ヨ鍑忎繚浜哄憳鏄惁瀛樺湪 鍐茬獊鐨� 淇濆崟鏄庣粏鏁版嵁
             if(applyDetailJoinMapper.selectCount(new QueryWrapper<ApplyDetail>()
                     .lambda()
@@ -1316,18 +1392,22 @@
 
     /**
      * 鍔犱繚鏁版嵁澶勭悊
-     * @param applyChange
-     * @param addDetailList
-     * @param duWorktypeList
-     * @param duSolutionList
-     * @param loginUserInfo
+     * @param applyChange 鍔犲噺淇濅繚鍗曟暟鎹�
+     * @param addDetailList  鍔犱繚浜哄憳
+     * @param duSolutionList  娲鹃仯鍗曚綅鏂规鏁版嵁
+     * @param loginUserInfo 鎿嶄綔浜�
      */
     public void addChangeDetail(ApplyChange applyChange ,List<ApplyChagneDetail> addDetailList,
-                                List<DuWorktype> duWorktypeList,List<DuSolution> duSolutionList,
-                                InsuranceApply insuranceApply,Solutions solutions,LoginUserInfo loginUserInfo,BigDecimal detailFee,Integer delSize){
+                                List<DuSolution> duSolutionList,
+                                InsuranceApply insuranceApply,Solutions solutions,LoginUserInfo loginUserInfo,BigDecimal detailFee,Integer delSize,
+                                List<Integer> worktypeIdList){
+        if(applyChange.getApplyStartTime().getTime()>insuranceApply.getEndTime().getTime()){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鍔犱繚鐢熸晥鏈熶笉鑳藉ぇ浜庝繚鍗曠粨鏉熸棩鏈�");
+        }
         for (int i = 0; i < addDetailList.size(); i++) {
             ApplyChagneDetail applyChagneDetail = addDetailList.get(i);
-            if (    Objects.isNull(applyChagneDetail.getDuId())
+            if (
+                    Constants.equalsInteger(solutions.getHasDispatchUnit(),Constants.ZERO) && Objects.isNull(applyChagneDetail.getDuId())
                     || Objects.isNull(applyChagneDetail.getWorktypeId())
                     || StringUtils.isBlank(applyChagneDetail.getIdcardNo())
             ) {
@@ -1343,13 +1423,6 @@
                     .lambda()
                     .eq(ApplyDetail::getApplyId,applyChange.getApplyId())
                     .eq(ApplyDetail::getIdcardNo,applyChagneDetail.getIdcardNo())
-//                    .apply(" ( " +
-//                            " '"+DateUtil.getLongDateTime(DateUtil.getMontageDate(applyChange.getApplyStartTime(),1))+"'  <= t.start_time AND t.start_time < '"+DateUtil.getLongDateTime(DateUtil.getMontageDate(insuranceApply.getEndTime(),2))+"' " +
-//                            " or " +
-//                            "  ( '"+DateUtil.getLongDateTime(DateUtil.getMontageDate(applyChange.getApplyStartTime(),1))+"' < t.end_time AND t.end_time < '"+DateUtil.getLongDateTime(DateUtil.getMontageDate(insuranceApply.getEndTime(),2))+"' )  " +
-//                            " or " +
-//                            " ( '"+DateUtil.getLongDateTime(DateUtil.getMontageDate(applyChange.getApplyStartTime(),1))+"' > t.start_time AND '"+DateUtil.getLongDateTime(DateUtil.getMontageDate(insuranceApply.getEndTime(),2))+"' < t.end_time )" +
-//                            " ) " )
                     .le(ApplyDetail::getStartTime,DateUtil.getMontageDate(applyChange.getApplyStartTime(),1))
                             .ge(ApplyDetail::getEndTime,DateUtil.getMontageDate(insuranceApply.getEndTime(),2))
             )>Constants.ZERO){
@@ -1450,10 +1523,12 @@
                 }
             }
             //楠岃瘉娲鹃仯鍗曚綅淇℃伅 涓庡伐绉嶄俊鎭� 鏄惁瀛樺湪
-            if (duSolutionList.stream().filter(d -> d.getDispatchUnitId().equals(applyChagneDetail.getDuId())).collect(Collectors.toList()).size() <= Constants.ZERO) {
-                throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(), "銆�" + applyChagneDetail.getMemberName() + "銆戝憳宸ユ淳閬e崟浣嶆湭鏌ヨ鍒帮紒");
+            if(Constants.equalsInteger(solutions.getHasDispatchUnit(),Constants.ZERO)){
+                if (duSolutionList.stream().filter(d -> d.getDispatchUnitId().equals(applyChagneDetail.getDuId())).collect(Collectors.toList()).size() <= Constants.ZERO) {
+                    throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(), "銆�" + applyChagneDetail.getMemberName() + "銆戝憳宸ユ淳閬e崟浣嶆湭鏌ヨ鍒帮紒");
+                }
             }
-            if (duWorktypeList.stream().filter(d ->  d.getWorkTypeId().equals(applyChagneDetail.getWorktypeId()))
+            if (worktypeIdList.stream().filter(d ->  Constants.equalsInteger(d,applyChagneDetail.getWorktypeId()))
                     .collect(Collectors.toList()).size() <= Constants.ZERO) {
                 throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(), "銆�" + applyChagneDetail.getMemberName() + "銆戝憳宸ュ伐绉嶄俊鎭湭鏌ヨ鍒帮紒");
             }
@@ -1473,17 +1548,17 @@
     /**
      * 鎹㈠巶涓氬姟
      * @param applyChange
-     * @param duWorktypeList
      * @param duSolutionList
      * @param changeDetailList
      * @param loginUserInfo
      */
-    public void changeDetail(ApplyChange applyChange ,List<ApplyChagneDetail> changeDetailList,List<DuWorktype> duWorktypeList,List<DuSolution> duSolutionList,LoginUserInfo loginUserInfo){
+    public void changeDetail(ApplyChange applyChange ,List<ApplyChagneDetail> changeDetailList
+            ,List<DuSolution> duSolutionList,LoginUserInfo loginUserInfo,Solutions solutions ,List<Integer> worktypeIdList){
         for (ApplyChagneDetail applyChagneDetail : changeDetailList) {
             if (Objects.isNull(applyChagneDetail.getMemberId())
-                    || Objects.isNull(applyChagneDetail.getOldDuId())
+                    || (Constants.equalsInteger(solutions.getHasDispatchUnit(),Constants.ZERO) && Objects.isNull(applyChagneDetail.getOldDuId()))
                     || Objects.isNull(applyChagneDetail.getOldWorktypeId())
-                    || Objects.isNull(applyChagneDetail.getDuId())
+                    || (Constants.equalsInteger(solutions.getHasDispatchUnit(),Constants.ZERO) &&  Objects.isNull(applyChagneDetail.getDuId()))
                     || Objects.isNull(applyChagneDetail.getWorktypeId())
             ) {
                 throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鎹㈠巶浜哄憳銆�" + applyChagneDetail.getMemberName() + "銆戝繀濉」缂哄け");
@@ -1529,15 +1604,18 @@
             if(applyChange.getValidTime().compareTo( applyDetail.getEndTime())>0){
                 throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鎹㈠巶浜哄憳銆�" + applyChagneDetail.getMemberName() + "銆戜繚鍗曚繚闅滄棩鏈熻嚦锛氥��"+DateUtil.getDate(applyDetail.getEndTime(),"yyyy-MM-dd HH:mm:ss")+"銆戞棤娉曢�氳繃鏈鐢宠");
             }
-            //楠岃瘉娲鹃仯鍗曚綅淇℃伅 涓庡伐绉嶄俊鎭� 鏄惁瀛樺湪
-            if (duSolutionList.stream().filter(d -> d.getDispatchUnitId().equals(applyChagneDetail.getDuId())).collect(Collectors.toList()).size() <= Constants.ZERO) {
-                throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(), "鎹㈠巶浜哄憳銆�" + applyChagneDetail.getMemberName() + "銆戝憳宸ユ淳閬e崟浣嶆湭鏌ヨ鍒帮紒");
+            if(Constants.equalsInteger(solutions.getHasDispatchUnit(),Constants.ZERO)){
+                //楠岃瘉娲鹃仯鍗曚綅淇℃伅 涓庡伐绉嶄俊鎭� 鏄惁瀛樺湪
+                if (duSolutionList.stream().filter(d -> d.getDispatchUnitId().equals(applyChagneDetail.getDuId())).collect(Collectors.toList()).size() <= Constants.ZERO) {
+                    throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(), "鎹㈠巶浜哄憳銆�" + applyChagneDetail.getMemberName() + "銆戝憳宸ユ淳閬e崟浣嶆湭鏌ヨ鍒帮紒");
+                }
             }
-            if (duWorktypeList.stream().filter(d ->  d.getWorkTypeId().equals(applyChagneDetail.getWorktypeId()))
+            if (worktypeIdList.stream().filter(d ->  Constants.equalsInteger(d,applyChagneDetail.getWorktypeId()))
                     .collect(Collectors.toList()).size() <= Constants.ZERO) {
                 throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(), "鎹㈠巶浜哄憳銆�" + applyChagneDetail.getMemberName() + "銆戝憳宸ュ伐绉嶄俊鎭湭鏌ヨ鍒帮紒");
             }
-            if(applyChagneDetail.getOldDuId().equals(applyChagneDetail.getDuId())
+
+            if((Constants.equalsInteger(solutions.getHasDispatchUnit(),Constants.ZERO) && applyChagneDetail.getOldDuId().equals(applyChagneDetail.getDuId()))
             && applyChagneDetail.getOldWorktypeId().equals(applyChagneDetail.getWorktypeId())){
                 throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(), "鎹㈠巶浜哄憳銆�" + applyChagneDetail.getMemberName() + "銆戞崲鍘傛暟鎹浉鍚岋紒");
             }
@@ -1612,7 +1690,18 @@
         QueryWrapper<ApplyChange> wrapper = new QueryWrapper<>(applyChange);
         return applyChangeMapper.selectList(wrapper);
     }
-  
+
+    @Override
+    public List<ApplyChange> findListByApplyId(Integer applyId,Integer type) {
+        List<ApplyChange> applyChangeList = applyChangeMapper.selectList(new QueryWrapper<ApplyChange>()
+                .lambda().eq(ApplyChange::getApplyId,applyId)
+                .eq(Objects.nonNull(type),ApplyChange::getType,type)
+                .in(ApplyChange::getStatus,Constants.ApplyChangeStatus.APPROVE.getKey())
+        );
+        return applyChangeList;
+    }
+
+
     @Override
     public PageData<ApplyChange> findPage(PageWrap<ApplyChange> pageWrap) {
 
@@ -1734,6 +1823,12 @@
         queryWrapper.orderByDesc(ApplyDetail::getCreateDate);
 
         PageData<ApplyChange> pageData = PageData.from(applyChangeJoinMapper.selectJoinPage(page,ApplyChange.class, queryWrapper));
+        for (ApplyChange applyChange:pageData.getRecords()) {
+
+            applyChange.setChangeMoney(Constants.getTwoPoint(applyChange.getChangeMoney()));
+            applyChange.setFee(Constants.getTwoPoint(applyChange.getFee()));
+        }
+
         return pageData;
     }
 
@@ -1787,6 +1882,9 @@
                 }*/
 
                 List<ApplyChange> list =applyChangeJoinMapper.selectJoinList(ApplyChange.class,queryWrapper);
+                for (ApplyChange applyChange:list) {
+                    applyChange.setFee(Constants.getTwoPoint(applyChange.getFee()));
+                }
                 List<ApplyChange> result = new ArrayList<>();
                 for (int i = 1; i <= 12; i++) {
                     if(i<10){
@@ -1823,6 +1921,7 @@
                 .selectAs(InsuranceApply::getEndTime,ApplyChange::getEndTime)
                 .selectAs(Solutions::getName,ApplyChange::getSolutionsName)
                 .selectAs(Solutions::getType,ApplyChange::getSolutionType)
+                .selectAs(Solutions::getHasDispatchUnit,ApplyChange::getHasDispatchUnit)
                 .selectAs(Company::getName,ApplyChange::getCompanyName)
                 .select("( select count(1) from apply_chagne_detail ad where t.id = ad.APPLY_CHANGE_ID and ad.TYPE = 0  )",ApplyChange::getAddNum)
                 .select("( select count(1) from apply_chagne_detail ad where t.id = ad.APPLY_CHANGE_ID and ad.TYPE = 1  )",ApplyChange::getDelNum)
@@ -1898,17 +1997,13 @@
             String path = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()
                     +systemDictDataBiz.queryByCode(Constants.OSS,Constants.APPLY_FILE).getCode();
             for(ApplyChange model : list){
-                for(Multifile f : multifiles) {
-                    if (StringUtils.isBlank(f.getFileurl())) {
-                        continue;
+                List<Multifile> multifileList = multifiles.stream().filter(m->Constants.equalsInteger(m.getObjId(), model.getId())&& 
+                        Constants.equalsInteger(m.getObjType(), Constants.MultiFile.CA_PD_PDF.getKey())).collect(Collectors.toList());
+                if(CollectionUtils.isNotEmpty(multifileList)){
+                    for (Multifile multifile:multifileList) {
+                        multifile.setFileurlFull(path + multifile.getFileurl());
                     }
-                    f.setFileurlFull(path+f.getFileurl());
-                    if(Constants.equalsInteger(f.getObjId(), model.getId()) ){
-                        if (Constants.equalsInteger(f.getObjType(), Constants.MultiFile.CA_PD_PDF.getKey())) {
-                            //绛剧讲鍓嶇殑鎶曚繚鍗�
-                            model.setPidanFile(f);
-                        }
-                    }
+                    model.setPidanFileList(multifileList);
                 }
             }
         }
@@ -2072,6 +2167,8 @@
         );
         applyChange.setApplyLogList(applyLogList);
 
+
+        applyChange.setFee(Constants.getTwoPoint(applyChange.getFee()));
         List<Multifile> multifiles = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda()
                 .eq(Multifile::getObjId, applyChange.getId() )
 //                .in(Multifile::getObjType, Arrays.asList(new Integer[]{Constants.MultiFile.CA_APPLY_JIAJIAN_SIGN.getKey()
@@ -2092,10 +2189,19 @@
                 }else    if(Constants.equalsInteger(f.getObjType(),Constants.MultiFile.CA_APPLY_CHANGEUNIT_SIGN.getKey())){
                     //绛剧讲鍚庣敵璇峰崟
                     applyChange.setApplyUnitFile(f);
-                }else if(Constants.equalsInteger(f.getObjType(),Constants.MultiFile.CA_PD_PDF.getKey())){
-                    //绛剧讲鍚庣殑鎶曚繚鍗�
-                    applyChange.setPidanFile(f);
                 }
+//                else if(Constants.equalsInteger(f.getObjType(),Constants.MultiFile.CA_PD_PDF.getKey())){
+//                    //绛剧讲鍚庣殑鎶曚繚鍗�
+//                    applyChange.setPidanFile(f);
+//                }
+            }
+            List<Multifile> multifileList = multifiles.stream().filter(m->Constants.equalsInteger(m.getObjId(), applyChange.getId())&&
+                    Constants.equalsInteger(m.getObjType(), Constants.MultiFile.CA_PD_PDF.getKey())).collect(Collectors.toList());
+            if(CollectionUtils.isNotEmpty(multifileList)){
+                for (Multifile multifile:multifileList) {
+                    multifile.setFileurlFull(path + multifile.getFileurl());
+                }
+                applyChange.setPidanFileList(multifileList);
             }
         }
 
@@ -2148,30 +2254,44 @@
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝璇ョ敵璇风姸鎬佸凡娴佽浆锛屽綋鍓嶄笉鏀寔绛剧珷鎿嶄綔锛�");
         }
         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
-        Company company = user.getCompany();
+
+        InsuranceApply insuranceApply = insuranceApplyMapper.selectById(model.getApplyId());
+        if(Objects.isNull(insuranceApply)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇繚鍗曚俊鎭�");
+        }
+        Company company = companyMapper.selectById(insuranceApply.getCompanyId());
+        if(Objects.isNull(company)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌浼佷笟淇℃伅");
+        }
+        String companyName = company.getName();
+        String creditCode = company.getCode();
+        String email = company.getEmail();
+
+
         /*if(debugModel){
             company = companyMapper.selectById(model.getCompanyId());
         }*/
         if(company== null || StringUtils.isBlank( company.getEmail()) || !Constants.equalsInteger(company.getSignStatus(),Constants.THREE)){
             throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝浼佷笟灏氭湭鍏峰鍦ㄧ嚎绛剧珷鏉′欢锛岃鑱旂郴骞冲彴绠$悊鍛樼‘璁");
         }
-        InsuranceApply insuranceApply = insuranceApplyMapper.selectById(model.getApplyId());
-        if(Objects.isNull(insuranceApply)){
-            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇繚鍗曚俊鎭�");
-        }
+
         Solutions solutions = solutionsMapper.selectById(insuranceApply.getSolutionId());
         if(Objects.isNull(solutions)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈡柟妗堜俊鎭�");
         }
         String fileUrl = null;
-        if(Constants.equalsObject(model.getType(), Constants.ONE)){
-              fileUrl = ExcelExporter.build(ApplyChange.class).exportChangeUnitExcelToPdf(model,"鎹㈠巶鐢宠琛�","鎶曚繚浼佷笟");
-        }else{
-            fileUrl = ExcelExporter.build(ApplyChange.class).exportJiajianBaoExcelToPdf(model,"鍔犲噺淇濈敵璇疯〃","鎶曚繚浼佷笟");
-        }
+//        if(Constants.equalsObject(model.getType(), Constants.ONE)){
+//              fileUrl = ExcelExporter.build(ApplyChange.class).exportChangeUnitExcelToPdf(model,"鎹㈠巶鐢宠琛�","鎶曚繚浼佷笟");
+//        }else{
+//            fileUrl = ExcelExporter.build(ApplyChange.class).exportJiajianBaoExcelToPdf(model,"鍔犲噺淇濈敵璇疯〃","鎶曚繚浼佷笟");
+//        }
         String notifyUrl = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SIGN_DONE_NOTIFY_URL).getCode();
-        notifyUrl = notifyUrl.replace("${type}","0").replace("${id}",model.getId().toString());
-        String applyNo = signService.applySignLocalFile(company.getName(),company.getName(),fileUrl,company.getCode(),company.getEmail(),"鎶曚繚浼佷笟绛剧珷",company.getSignId(),notifyUrl);
+//        notifyUrl = notifyUrl.replace("${type}","0").replace("${id}",model.getId().toString());
+//        String applyNo = signService.applySignLocalFile(company.getName(),company.getName(),fileUrl,company.getCode(),company.getEmail(),"鎶曚繚浼佷笟绛剧珷",company.getSignId(),notifyUrl);
+        //涓存椂浣跨敤
+        fileUrl =  
+                "https://yybred.oss-cn-hangzhou.aliyuncs.com/apply/20241120/1c80f0d7-ab35-4355-b9fe-944464643115.pdf";
+        String applyNo = signService.applySign(companyName,fileUrl,companyName,creditCode,email,"浜哄憳鍚嶅崟绛剧珷",null,notifyUrl);
         if(StringUtils.isBlank(applyNo) ){
             throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝鑾峰彇鍦ㄧ嚎绛剧珷鍦板潃澶辫触锛岃绋嶅悗閲嶈瘯锛�");
         }
@@ -2396,10 +2516,6 @@
         ){
             throw  new BusinessException(ResponseStatus.BAD_REQUEST);
         }
-        //楠岃瘉 楠岃瘉鐮�
-//        if(!debugModel){
-//            smsEmailService.validateCode(smsCheckDTO.getCode());
-//        }
         ApplyChange model = this.queryApplyChangeData(smsCheckDTO.getBusinessId());
         if(Objects.isNull(model)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠姞鍑忎繚/鎹㈠巶淇℃伅");
@@ -2422,14 +2538,19 @@
             if(!Constants.equalsInteger(Constants.ZERO,model.getStatus())){
                 throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝璇ョ敵璇风姸鎬佸凡娴佽浆锛屽綋鍓嶄笉鏀寔绛剧珷鎿嶄綔锛�");
             }
-            if(Constants.equalsObject(model.getType(), Constants.ONE)){
-                fileUrl = ExcelExporter.build(ApplyChange.class).exportChangeUnitExcelToPdf(model,"鎹㈠巶鐢宠琛�","琚繚闄╀汉");
-            }else{
-                fileUrl = ExcelExporter.build(ApplyChange.class).exportJiajianBaoExcelToPdf(model,"鍔犲噺淇濈敵璇疯〃","琚繚闄╀汉");
-            }
+//            if(Constants.equalsObject(model.getType(), Constants.ONE)){
+//                fileUrl = ExcelExporter.build(ApplyChange.class).exportChangeUnitExcelToPdf(model,"鎹㈠巶鐢宠琛�","琚繚闄╀汉");
+//            }else{
+//                fileUrl = ExcelExporter.build(ApplyChange.class).exportJiajianBaoExcelToPdf(model,"鍔犲噺淇濈敵璇疯〃","琚繚闄╀汉");
+//            }
             String notifyUrl = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SIGN_DONE_NOTIFY_URL).getCode();
             notifyUrl = notifyUrl.replace("${type}","0").replace("${id}",model.getId().toString());
-            String applyNo = signService.applySignLocalFile(company.getName(),company.getName(),fileUrl,company.getCode(),company.getEmail(),"浜哄憳鍚嶅崟绛剧珷",company.getSignId(),notifyUrl);
+
+            //涓存椂浣跨敤
+            fileUrl =  "https://yybred.oss-cn-hangzhou.aliyuncs.com/apply/20241120/1c80f0d7-ab35-4355-b9fe-944464643115.pdf";
+            String applyNo = signService.applySign(company.getName(),fileUrl,company.getName(),company.getCode(),company.getEmail(),"浜哄憳鍚嶅崟绛剧珷",company.getSignId(),notifyUrl);
+
+//            String applyNo = signService.applySignLocalFile(company.getName(),company.getName(),fileUrl,company.getCode(),company.getEmail(),"浜哄憳鍚嶅崟绛剧珷",company.getSignId(),notifyUrl);
             if(StringUtils.isBlank(applyNo) ){
                 throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝鑾峰彇鍦ㄧ嚎绛剧珷鍦板潃澶辫触锛岃绋嶅悗閲嶈瘯锛�");
             }
@@ -2460,9 +2581,9 @@
 
     @Override
     @Transactional(rollbackFor = {Exception.class,BusinessException.class})
-    public Integer check(ApplyChange applyChange) {
+    public Integer check(ApplyChange applyChange,UnionChangeServiceImpl unionChangeService) {
         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
-        if(!user.getType().equals(Constants.TWO)){
+        if(!(Constants.equalsInteger(user.getType(),Constants.ZERO) || Constants.equalsInteger(user.getType(),Constants.TWO))){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炲晢鎴风鏃犳硶杩涜璇ユ搷浣�");
         }
         if(applyChange.getId() == null){
@@ -2525,10 +2646,38 @@
         if(Constants.equalsInteger(model.getType(),Constants.ONE)){
             noticeObjectType = Constants.NoticeObjectType.CHANGE_FACTORY;
         }
-        //鍒犻櫎鍏ㄩ儴寰呭姙
+         //鍒犻櫎鍏ㄩ儴寰呭姙
         noticesMapper.delete(new QueryWrapper<Notices>().lambda()
                 .eq(Notices::getObjType, noticeObjectType.getKey())
                 .eq(Notices::getObjId, model.getId()));
+        if(Constants.equalsInteger(applyChange.getDealBackApply(),Constants.ZERO)){
+            InsuranceApply insuranceApply = insuranceApplyMapper.selectById(model.getApplyId());
+            if(Objects.isNull(insuranceApply)||Objects.isNull(insuranceApply.getUnionApplyId())){
+                throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌淇濆崟鏁版嵁");
+            }
+            SaveUnionChangeDTO saveUnionChangeDTO = new SaveUnionChangeDTO();
+            saveUnionChangeDTO.setApplyDate(update.getApplyStartTime());
+            List<Integer> applyIds = new ArrayList<>();
+            applyIds.add(model.getId());
+            saveUnionChangeDTO.setApplyIds(applyIds);
+            saveUnionChangeDTO.setApplyChange(model);
+            saveUnionChangeDTO.setUnionApplyId(insuranceApply.getUnionApplyId());
+            saveUnionChangeDTO.setBusinessType(model.getType());
+            if(Constants.equalsInteger(model.getType(),Constants.ONE)){
+                saveUnionChangeDTO.setApplyDate(model.getApplyStartTime());
+            }
+            if(Constants.equalsInteger(user.getType(),Constants.TWO)){
+                saveUnionChangeDTO.setShopId(user.getCompanyId());
+            }else{
+                CompanySolution companySolution = companySolutionMapper.selectOne(new QueryWrapper<CompanySolution>().lambda().eq(CompanySolution::getSolutionId,solutions.getId()).eq(CompanySolution::getCompanyId,insuranceApply.getCompanyId()).last(" limit 1 "));
+                if(Objects.isNull(companySolution)){
+                    throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌浼佷笟鏂规淇℃伅");
+                }
+                saveUnionChangeDTO.setShopId(companySolution.getShopId());
+
+            }
+            unionChangeService.merge(saveUnionChangeDTO);
+        }
         return  1;
 
     }
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/ApplyDetailServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/ApplyDetailServiceImpl.java
index 15bccce..2303812 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/ApplyDetailServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/ApplyDetailServiceImpl.java
@@ -223,12 +223,20 @@
         //鍦ㄤ繚
         if(!Objects.isNull(applyDetailPageDTO.getApplyStatus())
                 &&applyDetailPageDTO.getApplyStatus().equals(Constants.ONE)){
-            queryWrapper.apply(" now() <= t.END_TIME ");
+            queryWrapper.apply(" now() <= t.END_TIME and now() >= t.START_TIME ");
+            queryWrapper.in(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey(),Constants.InsuranceApplyStatus.WTB_DONE.getKey());
         }
         //涓嶅湪淇�
         if(!Objects.isNull(applyDetailPageDTO.getApplyStatus())
                 &&applyDetailPageDTO.getApplyStatus().equals(Constants.TWO)){
             queryWrapper.apply("now() > t.END_TIME   ");
+            queryWrapper.in(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey(),Constants.InsuranceApplyStatus.WTB_DONE.getKey());
+        }
+        //寰呯敓鏁�
+        if(!Objects.isNull(applyDetailPageDTO.getApplyStatus())
+                &&applyDetailPageDTO.getApplyStatus().equals(Constants.THREE)){
+            queryWrapper.apply("now() < t.START_TIME   ");
+            queryWrapper.in(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey(),Constants.InsuranceApplyStatus.WTB_DONE.getKey());
         }
 
         queryWrapper.eq(!Objects.isNull(applyDetailPageDTO.getDuId()),ApplyDetail::getDuId,applyDetailPageDTO.getDuId());
@@ -259,14 +267,26 @@
             int num = 1;
             for (ApplyDetail d : pageData.getRecords()){
                 d.setSortnum(num++);
-                if(d.getEndTime().compareTo(new Date())<0){
-                    d.setApplyStatus(Constants.ONE);
+                if(Constants.equalsInteger(d.getStatus(),Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())
+                || Constants.equalsInteger(d.getStatus(),Constants.InsuranceApplyStatus.WTB_DONE.getKey())){
+                    if(d.getEndTime().getTime()< System.currentTimeMillis()){
+                        d.setApplyStatus(Constants.ONE);
+                    }else if(d.getStartTime().getTime()> System.currentTimeMillis()){
+                        d.setApplyStatus(Constants.TWO);
+                    }else{
+                        d.setApplyStatus(Constants.ZERO);
+                    }
                 }else{
-                    d.setApplyStatus(Constants.ZERO);
+                    d.setApplyStatus(-Constants.ONE);
                 }
                 if(Objects.nonNull(d.getReduceMoney())){
                     d.setFee(d.getFee().add(d.getReduceMoney()));
                 }
+
+//                d.setPrice(Constants.getTwoPoint(d.getPrice()));
+//                d.setFee(Constants.getTwoPoint(d.getFee()));
+
+
             }
         }
         return pageData;
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/CompanyDepartmentServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/CompanyDepartmentServiceImpl.java
index ecff560..b6741d2 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/CompanyDepartmentServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/CompanyDepartmentServiceImpl.java
@@ -1,6 +1,5 @@
 package com.doumee.service.business.impl;
 
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.LoginUserInfo;
@@ -9,9 +8,9 @@
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.CompanyDepartmentMapper;
+import com.doumee.dao.business.dto.UpdateSortDTO;
 import com.doumee.dao.business.model.Company;
 import com.doumee.dao.business.model.CompanyDepartment;
-import com.doumee.dao.business.model.Member;
 import com.doumee.dao.system.SystemUserMapper;
 import com.doumee.dao.system.model.SystemUser;
 import com.doumee.dao.system.vo.DepartmentTree;
@@ -29,7 +28,7 @@
 
 import java.util.Date;
 import java.util.List;
-import java.util.UUID;
+import java.util.Objects;
 
 /**
  * 浼佷笟淇℃伅琛⊿ervice瀹炵幇
@@ -43,11 +42,13 @@
     private CompanyDepartmentMapper companyDepartmentMapper;
     @Autowired
     private SystemUserMapper systemUserMapper;
+
     @Override
     public  List<CompanyDepartment> departTree(Integer type){
+        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
         MPJLambdaWrapper<CompanyDepartment> queryWrapper = new MPJLambdaWrapper<>();
-        queryWrapper.selectAll(Company.class);
-        queryWrapper.select("t2.realname",CompanyDepartment::getEditorName);
+        queryWrapper.selectAll(CompanyDepartment.class);
+        queryWrapper.select("t3.realname",CompanyDepartment::getEditorName);
         queryWrapper.select("t2.realname",CompanyDepartment::getHeadName);
         queryWrapper.select("t2.mobile",CompanyDepartment::getHeadPhone);
         queryWrapper.select("t1.name",CompanyDepartment::getParentName);
@@ -58,12 +59,76 @@
         queryWrapper.leftJoin(SystemUser.class,SystemUser::getId,CompanyDepartment::getEditor);
         queryWrapper.eq(CompanyDepartment::getIsdeleted,Constants.ZERO);
         queryWrapper.eq(type!=null,CompanyDepartment::getType,type);
-        queryWrapper.orderByAsc(true,"t.sortnum");
+        //濡傛灉鏄紒涓�/鍟嗘埛 鍙煡璇㈣嚜韬粍缁囦笅鐨勬暟鎹�
+        if( !Constants.equalsInteger(type,Constants.ZERO)){
+            queryWrapper.eq(CompanyDepartment::getCompanyId,loginUserInfo.getCompanyId());
+        }else{
+            queryWrapper.eq(CompanyDepartment::getType,type);
+        }
+        queryWrapper.last(" order by  t.sortnum asc  ");
         List<CompanyDepartment> companyList = companyDepartmentMapper.selectJoinList(CompanyDepartment.class,queryWrapper);
         DepartmentTree treeBuild = new DepartmentTree(companyList);
         companyList = treeBuild.buildTree();
         return companyList;
     }
+
+
+    @Override
+    public void updateSort(UpdateSortDTO dto) {
+        CompanyDepartment companyDepartment = companyDepartmentMapper.selectById(dto.getId());
+        if(Objects.isNull(companyDepartment)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+
+        List<CompanyDepartment> companyDepartmentPool;
+        if (companyDepartment.getParentId() == null) {
+            companyDepartmentPool = companyDepartmentMapper.selectList(new QueryWrapper<CompanyDepartment>().lambda()
+                    .eq(CompanyDepartment::getIsdeleted,Constants.ZERO)
+                    .isNull(CompanyDepartment::getParentId)
+                    .orderByAsc(CompanyDepartment::getSortnum)
+            );
+        } else {
+            companyDepartmentPool = companyDepartmentMapper.selectList(new QueryWrapper<CompanyDepartment>().lambda()
+                    .eq(CompanyDepartment::getIsdeleted,Constants.ZERO)
+                    .eq(CompanyDepartment::getParentId,companyDepartment.getParentId())
+                    .orderByAsc(CompanyDepartment::getSortnum)
+            );
+        }
+        int currentMenuIndex = 0;
+        for (int i = 0; i < companyDepartmentPool.size(); i++) {
+            if (companyDepartmentPool.get(i).getId().equals(dto.getId())) {
+                currentMenuIndex = i;
+                break;
+            }
+        }
+        // 涓婄Щ
+        if ("top".equals(dto.getDirection())) {
+            if (currentMenuIndex - 1 < 0) {
+                return;
+            }
+            CompanyDepartment preMenu = companyDepartmentPool.get(currentMenuIndex - 1);
+            companyDepartmentPool.remove(currentMenuIndex - 1);
+            companyDepartmentPool.add(currentMenuIndex, preMenu);
+        }
+        // 涓嬬Щ
+        else {
+            if (currentMenuIndex + 1 > companyDepartmentPool.size() - 1) {
+                return;
+            }
+            CompanyDepartment nextMenu = companyDepartmentPool.remove(currentMenuIndex + 1);
+            companyDepartmentPool.add(currentMenuIndex, nextMenu);
+        }
+        for (int i = 0; i < companyDepartmentPool.size(); i++) {
+            companyDepartmentPool.get(i).setSortnum(i);
+        }
+
+        for (CompanyDepartment updCompanyDepartment:companyDepartmentPool) {
+            companyDepartmentMapper.updateById(updCompanyDepartment);
+        }
+
+    }
+
+
     @Override
     public Integer create(CompanyDepartment company) {
 
@@ -71,7 +136,7 @@
         if(StringUtils.isBlank(company.getName())){
             throw  new BusinessException(ResponseStatus.BAD_REQUEST);
         }
-        if(company.getType()==null || !(company.getType() ==0 || company.getType() ==1)){
+        if(company.getType()==null || !(company.getType() ==0 || company.getType() ==1 || company.getType() ==2)){
             throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "瀵逛笉璧凤紝缁勭粐绫诲瀷涓嶆纭紝璇锋寜瑕佹眰濉啓~");
         }
         int type = Constants.ZERO;//榛樿骞冲彴缁勭粐
@@ -247,9 +312,8 @@
         //鏇存柊鐨刢ompanyPath
         String newName = model.getNamePath().replace(model.getName(),company.getName());
         companyDepartmentMapper.update(null,new UpdateWrapper<CompanyDepartment>().lambda()
-                .setSql("company_name_path=REPLACE(name_path,'"+ model.getNamePath()+"','"+newName+"')")
+                .setSql("name_path = REPLACE(name_path,'"+ model.getNamePath()+"','"+newName+"')")
                 .likeRight(CompanyDepartment::getIdPath,model.getIdPath()));
-
 
     }
 
@@ -362,4 +426,6 @@
         QueryWrapper<CompanyDepartment> wrapper = new QueryWrapper<>(companyDepartment);
         return companyDepartmentMapper.selectCount(wrapper);
     }
+
+
 }
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/CompanyPermissionServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/CompanyPermissionServiceImpl.java
index 4229d86..4fec71a 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/CompanyPermissionServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/CompanyPermissionServiceImpl.java
@@ -8,6 +8,7 @@
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.CompanyMapper;
 import com.doumee.dao.business.CompanyPermissionMapper;
+import com.doumee.dao.business.join.CompanyPermissionJoinMapper;
 import com.doumee.dao.business.model.Company;
 import com.doumee.dao.business.model.CompanyPermission;
 import com.doumee.dao.system.SystemUserMapper;
@@ -17,6 +18,7 @@
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -24,6 +26,7 @@
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 绠$悊鍛樼鐞嗕紒涓氭潈闄怱ervice瀹炵幇
@@ -36,46 +39,55 @@
     @Autowired
     private CompanyPermissionMapper companyPermissionMapper;
     @Autowired
+    private CompanyPermissionJoinMapper companyPermissionJoinMapper;
+    @Autowired
     private SystemUserMapper systemUserMapper;
     @Autowired
     private CompanyMapper companyMapper;
 
     @Override
     public Integer create(CompanyPermission companyPermission) {
-        if(companyPermission.getUserId() == null || companyPermission.getCompanyIdList() == null || companyPermission.getCompanyIdList().size()==0){
+        if(companyPermission.getUserId() == null ){
             throw  new BusinessException(ResponseStatus.BAD_REQUEST);
         }
         SystemUser user =systemUserMapper.selectById(companyPermission.getUserId());
         if(user == null || (user.getDeleted() !=null && user.getDeleted())){
             throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝鐢ㄦ埛淇℃伅涓嶅瓨鍦紝璇峰皾璇曞埛鏂伴〉闈㈤噸璇曪紒");
         }
-        List<Company> companieList = companyMapper.selectList(new QueryWrapper<Company>().lambda()
-                .in(Company::getId,companyPermission.getCompanyIdList())
-                .eq(Company::getIsdeleted, Constants.ZERO));
-
-        if(companieList == null || companieList.size() == 0){
-            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝璇烽�夋嫨鏈夋晥浼佷笟锛岃灏濊瘯鍒锋柊椤甸潰閲嶈瘯锛�");
-        }
-        Date date = new Date();
-        List<CompanyPermission> list = new ArrayList<>();
-        for(Company c : companieList){
-            CompanyPermission model = new CompanyPermission();
-            model.setCompanyId(c.getId());
-            model.setIsdeleted(Constants.ZERO);
-            model.setIsdeleted(Constants.ZERO);
-            model.setCreator(user.getId());
-            model.setUserId(companyPermission.getUserId());
-            model.setCreateDate(date);
-            list.add(model);
-        }
         //鍒櫎鍘熸湁鐨勶紝鍦ㄦ壒閲忔彃鍏ユ柊鐨�
         companyPermissionMapper.delete(new QueryWrapper<CompanyPermission>().lambda().eq(CompanyPermission::getUserId,companyPermission.getUserId()));
-        companyPermissionMapper.insertBatchSomeColumn(list);
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(companyPermission.getCompanyIdList())){
+            List<Company> companieList = companyMapper.selectList(new QueryWrapper<Company>().lambda()
+                    .in(Company::getId,companyPermission.getCompanyIdList())
+                    .eq(Company::getIsdeleted, Constants.ZERO));
+
+            if(companieList == null || companieList.size() == 0){
+                throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝璇烽�夋嫨鏈夋晥浼佷笟锛岃灏濊瘯鍒锋柊椤甸潰閲嶈瘯锛�");
+            }
+            Date date = new Date();
+            List<CompanyPermission> list = new ArrayList<>();
+            for(Company c : companieList){
+                CompanyPermission model = new CompanyPermission();
+                model.setCompanyId(c.getId());
+                model.setIsdeleted(Constants.ZERO);
+                model.setIsdeleted(Constants.ZERO);
+                model.setCreator(user.getId());
+                model.setUserId(companyPermission.getUserId());
+                model.setType(Constants.ZERO);
+                model.setCreateDate(date);
+                list.add(model);
+            }
+            companyPermissionMapper.insertBatchSomeColumn(list);
+        }
         return companyPermission.getId();
     }
 
     @Override
     public void deleteById(Integer id) {
+        CompanyPermission companyPermission =  companyPermissionMapper.selectById(id);
+        if(Objects.nonNull(companyPermission)&&Constants.equalsInteger(companyPermission.getType(),Constants.ZERO)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"姝ょ被鏁版嵁鏃犳硶杩涜鍒犻櫎:鍩虹鏉冮檺");
+        }
         companyPermissionMapper.deleteById(id);
     }
 
@@ -97,6 +109,7 @@
     public void updateById(CompanyPermission companyPermission) {
         companyPermissionMapper.updateById(companyPermission);
     }
+
 
     @Override
     public void updateByIdInBatch(List<CompanyPermission> companyPermissions) {
@@ -121,43 +134,26 @@
 
     @Override
     public List<CompanyPermission> findList(CompanyPermission companyPermission) {
-        QueryWrapper<CompanyPermission> wrapper = new QueryWrapper<>(companyPermission);
+        QueryWrapper<CompanyPermission> wrapper = new QueryWrapper<>();
+        wrapper.lambda().eq(CompanyPermission::getIsdeleted,Constants.ZERO);
+        wrapper.lambda().eq(Objects.nonNull(companyPermission) && Objects.nonNull(companyPermission.getUserId())
+                ,CompanyPermission::getUserId,companyPermission.getUserId());
+        wrapper.lambda().orderByAsc(CompanyPermission::getId);
         return companyPermissionMapper.selectList(wrapper);
     }
   
     @Override
     public PageData<CompanyPermission> findPage(PageWrap<CompanyPermission> pageWrap) {
         IPage<CompanyPermission> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        QueryWrapper<CompanyPermission> queryWrapper = new QueryWrapper<>();
+        MPJLambdaWrapper<CompanyPermission> queryWrapper = new MPJLambdaWrapper<>();
         Utils.MP.blankToNull(pageWrap.getModel());
-        if (pageWrap.getModel().getId() != null) {
-            queryWrapper.lambda().eq(CompanyPermission::getId, pageWrap.getModel().getId());
-        }
-        if (pageWrap.getModel().getCreator() != null) {
-            queryWrapper.lambda().eq(CompanyPermission::getCreator, pageWrap.getModel().getCreator());
-        }
-        if (pageWrap.getModel().getCreateDate() != null) {
-            queryWrapper.lambda().ge(CompanyPermission::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
-            queryWrapper.lambda().le(CompanyPermission::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
-        }
-        if (pageWrap.getModel().getEditor() != null) {
-            queryWrapper.lambda().eq(CompanyPermission::getEditor, pageWrap.getModel().getEditor());
-        }
-        if (pageWrap.getModel().getEditDate() != null) {
-            queryWrapper.lambda().ge(CompanyPermission::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
-            queryWrapper.lambda().le(CompanyPermission::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
-        }
-        if (pageWrap.getModel().getIsdeleted() != null) {
-            queryWrapper.lambda().eq(CompanyPermission::getIsdeleted, pageWrap.getModel().getIsdeleted());
-        }
-        if (pageWrap.getModel().getRemark() != null) {
-            queryWrapper.lambda().eq(CompanyPermission::getRemark, pageWrap.getModel().getRemark());
-        }
-        if (pageWrap.getModel().getCompanyId() != null) {
-            queryWrapper.lambda().eq(CompanyPermission::getCompanyId, pageWrap.getModel().getCompanyId());
-        }
+        queryWrapper.selectAll(CompanyPermission.class);
+        queryWrapper.select(" t1.USERNAME as userName,t1.REALNAME as realName ,t1.mobile,  t2.name as companyName , t3.realName as auditName  ");
+        queryWrapper.leftJoin(" system_user t1 on t1.id = t.user_id  ");
+        queryWrapper.leftJoin(" company t2 on t2.id = t.company_id  ");
+        queryWrapper.leftJoin(" system_user t3 on t3.id = t.creator  ");
         if (pageWrap.getModel().getUserId() != null) {
-            queryWrapper.lambda().eq(CompanyPermission::getUserId, pageWrap.getModel().getUserId());
+            queryWrapper.eq(CompanyPermission::getUserId, pageWrap.getModel().getUserId());
         }
         for(PageWrap.SortData sortData: pageWrap.getSorts()) {
             if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
@@ -166,7 +162,7 @@
                 queryWrapper.orderByAsc(sortData.getProperty());
             }
         }
-        return PageData.from(companyPermissionMapper.selectPage(page, queryWrapper));
+        return PageData.from(companyPermissionJoinMapper.selectPage(page, queryWrapper));
     }
 
     @Override
@@ -174,4 +170,16 @@
         QueryWrapper<CompanyPermission> wrapper = new QueryWrapper<>(companyPermission);
         return companyPermissionMapper.selectCount(wrapper);
     }
+
+    @Override
+    public List<CompanyPermission> getUserCompanyPermission(Integer userId) {
+        return companyPermissionJoinMapper.selectJoinList(CompanyPermission.class,new MPJLambdaWrapper<CompanyPermission>()
+                .selectAll(CompanyPermission.class)
+                .selectAs(Company::getName,CompanyPermission::getCompanyName)
+                .leftJoin(Company.class,Company::getId,CompanyPermission::getCompanyId)
+                .eq(CompanyPermission::getUserId,userId)
+                .eq(CompanyPermission::getIsdeleted,Constants.ZERO)
+        );
+    }
+
 }
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
index 92e1944..c158679 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
@@ -10,6 +10,7 @@
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.*;
+import com.doumee.dao.business.join.CompanyJoinMapper;
 import com.doumee.dao.business.join.CompanySolutionJoinMapper;
 import com.doumee.dao.business.model.*;
 import com.doumee.dao.system.SystemUserMapper;
@@ -41,6 +42,7 @@
 import java.net.URLEncoder;
 import java.nio.charset.Charset;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 浼佷笟淇℃伅琛⊿ervice瀹炵幇
@@ -54,6 +56,8 @@
     private boolean debugModel;
     @Autowired
     private CompanyMapper companyMapper;
+    @Autowired
+    private CompanyJoinMapper companyJoinMapper;
     @Autowired
     private CompanyDepartmentMapper companyDepartmentMapper;
     @Autowired
@@ -72,6 +76,8 @@
     private SmsEmailMapper smsEmailMapper;
     @Autowired
     private SystemDictDataBiz systemDictDataBiz;
+    @Autowired
+    private NoticesMapper noticesMapper;
 
     @Override
     @Transactional
@@ -160,7 +166,7 @@
 
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
     public void  updateSolutions(Company company) {
         if(company.getId()==null
                 ||company.getSolutionList() == null
@@ -171,7 +177,6 @@
         if(model == null  || !Constants.equalsInteger(model.getIsdeleted(),Constants.ZERO) ){
             throw  new BusinessException(ResponseStatus.DATA_EMPTY );
         }
-        companySolutionJoinMapper.delete(new UpdateWrapper<CompanySolution>().lambda().eq(CompanySolution::getCompanyId,company.getId()));
         //澶勭悊鍏宠仈鏂规
         dealSolutionsData(company);
     }
@@ -304,6 +309,104 @@
         List<CompanySolution> list = new ArrayList<>();
         int num =0;
         Date date = new Date();
+        List<CompanySolution> addList = new ArrayList<>();
+        List<CompanySolution> delList = new ArrayList<>();
+        List<CompanySolution> updList = new ArrayList<>();
+        List<CompanySolution> companySolutionList = companySolutionJoinMapper.selectList(new QueryWrapper<CompanySolution>().lambda().eq(CompanySolution::getCompanyId,company.getId()));
+        for(CompanySolution s :company.getSolutionList()){
+            if(companySolutionList.stream().filter(i->Constants.equalsInteger(i.getSolutionBaseId(),s.getSolution().getBaseId())).collect(Collectors.toList()).size()>Constants.ZERO){
+                updList.add(s);
+            }else{
+                addList.add(s);
+            }
+        }
+        for (CompanySolution s:companySolutionList) {
+            if( addList.stream().filter(i->Constants.equalsInteger(i.getSolution().getBaseId(),s.getSolutionBaseId())).collect(Collectors.toList()).size()>Constants.ZERO
+            || updList.stream().filter(i->Constants.equalsInteger(i.getSolution().getBaseId(),s.getSolutionBaseId())).collect(Collectors.toList()).size()>Constants.ZERO
+            ){
+                continue;
+            }
+            delList.add(s);
+        }
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(delList)){
+            companySolutionJoinMapper.delete(new UpdateWrapper<CompanySolution>().lambda().in(CompanySolution::getId,delList.stream().map(i->i.getId()).collect(Collectors.toList())));
+        }
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(addList)){
+            for(CompanySolution s :addList){
+                if(Objects.isNull(s.getSolution())){
+                    continue;
+                }
+                if(s.getSolution().getBaseId() == null){
+                    continue;
+                }
+                Solutions newVersion = solutionsMapper.selectOne(new QueryWrapper<Solutions>().lambda().eq(Solutions::getBaseId,s.getSolution().getBaseId())
+                        .eq(Solutions::getDataType,Constants.TWO).last("limit 1"));
+                if(Objects.isNull(newVersion)){
+                    throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"璇锋坊鍔犳湁鏁堢殑淇濋櫓鏂规淇℃伅锛�");
+                }
+                //鏌ヨ鏂规鐨勬柟妗堢‘璁や功
+                Multifile multifile = multifileMapper.selectOne(new QueryWrapper<Multifile>().lambda()
+                        .eq(Multifile::getObjType,Constants.MultiFile.SOLUTIONS_CONFIRMATION_LATTER.getKey())
+                        .eq(Multifile::getIsdeleted,Constants.ZERO)
+                        .eq(Multifile::getObjId,newVersion.getId())
+                );
+                if(Objects.isNull(multifile) ||  StringUtils.isBlank(multifile.getFileurl())){
+                    throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鏈煡璇㈠埌鏂规纭涔︼紒");
+                }
+                sIds.add(s.getSolution().getBaseId());
+                s.setCompanyId(company.getId());
+                s.setIsdeleted(Constants.ZERO);
+                s.setCanAdd(Constants.formatIntegerNum(s.getCanAdd()));
+                s.setCanReduce(Constants.formatIntegerNum(s.getCanReduce()));
+                s.setCreateDate(date);
+                s.setCreator(company.getCreator());
+                s.setSortnum(num++);
+                s.setSolutionBaseId( s.getSolution().getBaseId() );
+                s.setSolutionId( newVersion.getId() );
+                s.setStatus(Constants.ZERO);
+                s.setFileUrl(multifile.getFileurl());
+                s.setSignStatus(Constants.ZERO);
+                s.setSolutionName(newVersion.getName());
+                list.add(s);
+            }
+            if(list.size() ==0){
+                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"璇锋坊鍔犳湁鏁堢殑淇濋櫓鏂规淇℃伅锛�");
+            }
+            List<Solutions> solutionsList = solutionsMapper.selectList(new QueryWrapper<Solutions>().lambda()
+                    .in(Solutions::getId,sIds)
+                    .eq(Solutions::getIsdeleted,Constants.ZERO));
+            if(solutionsList.size()!= list.size()){
+                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"璇锋坊鍔犳湁鏁堢殑淇濋櫓鏂规淇℃伅鍝�");
+            }
+            for(Solutions s:solutionsList){
+                if(Constants.equalsInteger(s.getStatus(),Constants.ONE)){
+                    throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"淇濋櫓鏂规銆�"+s.getName()+"銆戝凡琚鐢紝涓嶈兘杩涜璇ユ搷浣�");
+                }
+            }
+            companySolutionJoinMapper.insertBatchSomeColumn(list);
+            //瀛樺偍寰呭姙淇℃伅
+            Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.SOLUTIONS;
+            for (CompanySolution s:list) {
+                Solutions newVersion = solutionsMapper.selectById(s.getSolutionId());
+                //骞冲彴寰呭姙
+                Notices notices = new Notices(noticeObjectType,
+                        Constants.ONE
+                        ,s.getId(),
+                        newVersion.getName() ,
+                        company.getId()
+                        ,Constants.NoticeType.ZERO);
+                noticesMapper.insert(notices);
+
+            }
+
+        }
+    }
+
+    /*private void dealSolutionsData(Company company) {
+        List<Integer> sIds = new ArrayList<>();
+        List<CompanySolution> list = new ArrayList<>();
+        int num =0;
+        Date date = new Date();
         for(CompanySolution s :company.getSolutionList()){
             if(Objects.isNull(s.getSolution())){
                 continue;
@@ -316,6 +419,15 @@
             if(Objects.isNull(newVersion)){
                 throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"璇锋坊鍔犳湁鏁堢殑淇濋櫓鏂规淇℃伅锛�");
             }
+            //鏌ヨ鏂规鐨勬柟妗堢‘璁や功
+            Multifile multifile = multifileMapper.selectOne(new QueryWrapper<Multifile>().lambda()
+                    .eq(Multifile::getObjType,Constants.MultiFile.SOLUTIONS_CONFIRMATION_LATTER.getKey())
+                    .eq(Multifile::getIsdeleted,Constants.ZERO)
+                    .eq(Multifile::getObjId,newVersion.getId())
+            );
+            if(Objects.isNull(multifile) ||  StringUtils.isBlank(multifile.getFileurl())){
+                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鏈煡璇㈠埌鏂规纭涔︼紒");
+            }
             sIds.add(s.getSolution().getBaseId());
             s.setCompanyId(company.getId());
             s.setIsdeleted(Constants.ZERO);
@@ -327,6 +439,8 @@
             s.setSolutionBaseId( s.getSolution().getBaseId() );
             s.setSolutionId( newVersion.getId() );
             s.setStatus(Constants.ZERO);
+            s.setFileUrl(multifile.getFileurl());
+            s.setSignStatus(Constants.ZERO);
             list.add(s);
         }
         if(list.size() ==0){
@@ -344,7 +458,12 @@
             }
         }
         companySolutionJoinMapper.insertBatchSomeColumn(list);
-    }
+    }*/
+
+
+
+
+
 
 
 
@@ -833,7 +952,7 @@
         company.setIsdeleted(Constants.ZERO);
         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
         if(Constants.equalsInteger(company.getType(),Constants.ONE)){
-//                return new ArrayList<>();
+
         }else  {
             company.setType(Constants.ZERO);
             if(Constants.equalsInteger(user.getType(),Constants.TWO)){
@@ -856,6 +975,19 @@
         }
         return companyMapper.selectList(wrapper);
     }
+
+    @Override
+    public List<Company> findAllCompanyList() {
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        List<Company> companyList = companyMapper.selectList(
+               new QueryWrapper<Company>().lambda()
+                       .eq(Company::getIsdeleted,Constants.ZERO)
+                       .eq(Company::getType,Constants.ZERO)
+                       .ne(Constants.equalsInteger(user.getType(),Constants.ONE),Company::getId,user.getCompanyId())
+        );
+        return companyList;
+    }
+
 
     @Override
     public PageData<Company> findPage(PageWrap<Company> pageWrap) {
@@ -885,7 +1017,6 @@
                     queryWrapper.select("*,(select count(1) from company_permission b where b.user_id="+user.getId()+" and b.isdeleted=0 and b.company_id=company.id) as hasPerimission");
                 }
             }
-
         }
 
         if (pageWrap.getModel().getId() != null) {
@@ -927,7 +1058,7 @@
             queryWrapper.lambda().eq(Company::getCode, pageWrap.getModel().getCode());
         }
         if (pageWrap.getModel().getUsername() != null) {
-            queryWrapper.lambda().eq(Company::getUsername, pageWrap.getModel().getUsername());
+            queryWrapper.lambda().like(Company::getUsername, pageWrap.getModel().getUsername());
         }
         if (pageWrap.getModel().getTaxCode() != null) {
             queryWrapper.lambda().eq(Company::getTaxCode, pageWrap.getModel().getTaxCode());
@@ -948,7 +1079,7 @@
             queryWrapper.lambda().eq(Company::getInvoiceAddr, pageWrap.getModel().getInvoiceAddr());
         }
         if (pageWrap.getModel().getPhone() != null) {
-            queryWrapper.lambda().eq(Company::getPhone, pageWrap.getModel().getPhone());
+            queryWrapper.lambda().like(Company::getPhone, pageWrap.getModel().getPhone());
         }
         if (pageWrap.getModel().getEmail() != null) {
             queryWrapper.lambda().eq(Company::getEmail, pageWrap.getModel().getEmail());
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/CompanySolutionServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/CompanySolutionServiceImpl.java
index 89015f3..3aee62d 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/CompanySolutionServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/CompanySolutionServiceImpl.java
@@ -1,25 +1,38 @@
 package com.doumee.service.business.impl;
 
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.CompanyMapper;
 import com.doumee.dao.business.CompanySolutionMapper;
+import com.doumee.dao.business.MultifileMapper;
+import com.doumee.dao.business.SolutionsMapper;
 import com.doumee.dao.business.join.CompanySolutionJoinMapper;
-import com.doumee.dao.business.model.Company;
-import com.doumee.dao.business.model.CompanySolution;
-import com.doumee.dao.business.model.Solutions;
+import com.doumee.dao.business.model.*;
+import com.doumee.dao.system.model.SystemUser;
 import com.doumee.service.business.CompanySolutionService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.doumee.service.business.third.SignService;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.SecurityUtils;
+import org.checkerframework.checker.units.qual.A;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
+import oshi.driver.linux.Sysfs;
 
+import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 浼佷笟鍙敤淇濋櫓鏂规鍏宠仈琛⊿ervice瀹炵幇
@@ -33,6 +46,16 @@
     private CompanySolutionJoinMapper companySolutionJoinMapper;
     @Autowired
     private CompanySolutionMapper companySolutionMapper;
+    @Autowired
+    private CompanyMapper companyMapper;
+    @Autowired
+    private MultifileMapper multifileMapper;
+    @Autowired
+    private SolutionsMapper solutionsMapper;
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
+    @Autowired
+    private SignService signService;
 
     @Override
     public Integer create(CompanySolution companySolution) {
@@ -90,14 +113,30 @@
         csWrapper.selectAll(CompanySolution.class);
         csWrapper.selectAs(Solutions::getType,CompanySolution::getSolutionType);
         csWrapper.selectAs(Solutions::getName,CompanySolution::getSolutionName);
-        csWrapper.selectAs(Company::getName,CompanySolution::getShopName);
+        csWrapper.selectAs(Company::getName,CompanySolution::getCompanyName);
+        csWrapper.selectAs(SystemUser::getRealname,CompanySolution::getSignUserName);
+        csWrapper.select(" t4.name as shopName ");
         csWrapper.leftJoin(Solutions.class,Solutions::getId,CompanySolution::getSolutionBaseId);
-        csWrapper.leftJoin(Company.class, Company::getId,CompanySolution::getShopId);
-        csWrapper.eq(CompanySolution::getCompanyId,companySolution.getCompanyId());
+        csWrapper.leftJoin(Company.class, Company::getId,CompanySolution::getCompanyId);
+        csWrapper.leftJoin(SystemUser.class, SystemUser::getId,CompanySolution::getSignUserId);
+        csWrapper.leftJoin(" company t4 on t4.id = t.shop_id ");
+        csWrapper.eq(Objects.nonNull(companySolution.getCompanyId()),CompanySolution::getCompanyId,companySolution.getCompanyId());
+        csWrapper.eq(Objects.nonNull(companySolution.getSolutionId()),CompanySolution::getSolutionBaseId,companySolution.getSolutionId());
         csWrapper.eq(CompanySolution::getIsdeleted, Constants.ZERO);
         csWrapper.eq(Solutions::getIsdeleted, Constants.ZERO);
+        csWrapper.orderByAsc(CompanySolution::getCreateDate);
         csWrapper.orderByAsc(CompanySolution::getSortnum);
-        return companySolutionJoinMapper.selectJoinList(CompanySolution.class,csWrapper);
+        List<CompanySolution> companySolutionList = companySolutionJoinMapper.selectJoinList(CompanySolution.class,csWrapper);
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(companySolutionList)){
+            String url = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
+                    systemDictDataBiz.queryByCode(Constants.OSS,Constants.APPLY_FILE).getCode();
+            for (CompanySolution c:companySolutionList) {
+                if(StringUtils.isNotBlank(c.getFileSignUrl())){
+                    c.setFileSignUrl(url + c.getFileSignUrl());
+                }
+            }
+        }
+        return companySolutionList;
     }
     @Override
     public List<CompanySolution> findList(CompanySolution companySolution) {
@@ -166,4 +205,67 @@
         QueryWrapper<CompanySolution> wrapper = new QueryWrapper<>(companySolution);
         return companySolutionMapper.selectCount(wrapper);
     }
+
+
+
+    @Override
+    public  String getCompanySolutionSignLink(Integer id) {
+        if(id == null ){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        MPJLambdaWrapper<CompanySolution> queryWrapper = new MPJLambdaWrapper<>();
+        queryWrapper.selectAll(CompanySolution.class);
+        queryWrapper.selectAs(Company::getName,CompanySolution::getShopName);
+        queryWrapper.leftJoin(Company.class,Company::getId,CompanySolution::getCompanyId);
+        queryWrapper.eq(CompanySolution::getId,id);
+        queryWrapper.last(" limit 1");
+        CompanySolution companySolution = companySolutionJoinMapper.selectJoinOne(CompanySolution.class,queryWrapper);
+        if(companySolution == null ||!Constants.equalsInteger(companySolution.getIsdeleted(),Constants.ZERO) ){
+            throw  new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        Company company = companyMapper.selectById(companySolution.getCompanyId());
+        if(Objects.isNull(company)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈煡璇㈠埌浼佷笟淇℃伅!");
+        }
+        Solutions solutions = solutionsMapper.selectById(companySolution.getSolutionId());
+        if(Objects.isNull(solutions)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈煡璇㈠埌鍏宠仈鏂规淇℃伅!");
+        }
+        //濡傛灉鏄┏鍥�,鍙兘鍙┏鍥炲凡绛剧珷鐘舵�佷笅鐨勯��鍥炵敵璇风姸鎬佽繘琛屾搷浣�
+        if(!Constants.equalsInteger(companySolution.getStatus(),Constants.ZERO)){
+            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ヤ紒涓氱殑鏂规纭涔︾姸鎬佸凡娴佽浆锛屽綋鍓嶄笉鏀寔璇ユ搷浣渵");
+        }
+        Multifile f = multifileMapper.selectOne(new QueryWrapper<Multifile>().lambda()
+                .eq(Multifile::getObjId,companySolution.getSolutionId())
+                .eq(Multifile::getObjType,Constants.MultiFile.SOLUTIONS_CONFIRMATION_LATTER.getKey())
+                .eq(Multifile::getIsdeleted,Constants.ZERO).last("limit 1"));
+        if(f == null || StringUtils.isBlank(f.getFileurl())){
+            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝鑾峰彇寰呯绔犳枃浠跺け璐ワ紝璇疯仈绯荤‘璁ょ缃叉枃浠舵槸鍚︽纭紒");
+        }
+        String url = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
+                systemDictDataBiz.queryByCode(Constants.OSS,Constants.APPLY_FILE).getCode()+f.getFileurl();
+        String notifyUrl = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SIGN_DONE_NOTIFY_URL).getCode();
+        String applyNo = signService.applySign(solutions.getName(),url,company.getName(),company.getCode(),company.getEmail(),null,company.getSignId(),notifyUrl);
+        if(StringUtils.isBlank(applyNo) ){
+            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝鑾峰彇鍦ㄧ嚎绛剧珷鍦板潃澶辫触锛岃绋嶅悗閲嶈瘯锛�");
+        }
+        String link = signService.signLink(applyNo,company.getName(),company.getCode());
+        if(StringUtils.isBlank(link) ){
+            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝鑾峰彇鍦ㄧ嚎绛剧珷鍦板潃澶辫触锛岃绋嶅悗閲嶈瘯锛�");
+        }
+        CompanySolution update= new CompanySolution();
+        update.setId(companySolution.getId());
+        update.setEditor(user.getId());
+        update.setEditDate(new Date());
+        update.setApplyNo(applyNo);
+        update.setSignStatus(Constants.ZERO);
+//        update.setSignUserId(user.getId());
+//        update.setSignDate(new Date());
+        companySolutionJoinMapper.updateById(update);
+        return  link;
+    }
+
+
+
 }
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/CompanyUserApplyServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/CompanyUserApplyServiceImpl.java
index fcfbb13..b8df447 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/CompanyUserApplyServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/CompanyUserApplyServiceImpl.java
@@ -1,20 +1,35 @@
 package com.doumee.service.business.impl;
 
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
-import com.doumee.dao.business.CompanyUserApplyMapper;
-import com.doumee.dao.business.model.CompanyUserApply;
+import com.doumee.dao.business.*;
+import com.doumee.dao.business.join.CompanyUserApplyJoinMapper;
+import com.doumee.dao.business.model.*;
+import com.doumee.dao.system.SystemUserMapper;
+import com.doumee.dao.system.model.SystemDictData;
+import com.doumee.dao.system.model.SystemUser;
 import com.doumee.service.business.CompanyUserApplyService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.base.MPJBaseMapper;
+import com.github.yulichang.query.MPJQueryWrapper;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.apache.commons.lang.StringUtils;
+import org.apache.shiro.SecurityUtils;
+import org.checkerframework.checker.units.qual.A;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
-import java.util.List;
+import java.util.*;
 
 /**
  * 闆嗗洟鐢宠璁板綍琛⊿ervice瀹炵幇
@@ -26,16 +41,119 @@
 
     @Autowired
     private CompanyUserApplyMapper companyUserApplyMapper;
+    @Autowired
+    private SystemUserMapper systemUserMapper;
+    @Autowired
+    private CompanyMapper companyMapper;
+    @Autowired
+    private MultifileMapper multifileMapper;
+    @Autowired
+    private CompanyUserApplyJoinMapper companyUserApplyJoinMapper;
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
+    @Autowired
+    private CompanyPermissionMapper companyPermissionMapper;
+    @Autowired
+    private NoticesMapper noticesMapper;
+
 
     @Override
     public Integer create(CompanyUserApply companyUserApply) {
+        LoginUserInfo loginUserInfo =(LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        if(Objects.isNull(companyUserApply)
+            || Objects.isNull(companyUserApply.getUserId())
+            || CollectionUtils.isEmpty(companyUserApply.getMultifileList())
+            || StringUtils.isBlank(companyUserApply.getCompanyIds())
+            || StringUtils.isBlank(companyUserApply.getCompanyNames())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        if(!Constants.equalsInteger(loginUserInfo.getType(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐧诲綍鐢ㄦ埛涓嶅厑璁稿綋鍓嶆搷浣�");
+        }
+        //鏌ヨ褰撳墠鐢ㄦ埛鏄惁瀛樺湪鐢宠涓�
+        if(companyUserApplyMapper.selectCount(new QueryWrapper<CompanyUserApply>().lambda()
+                .eq(CompanyUserApply::getUserId,companyUserApply.getUserId())
+                .eq(CompanyUserApply::getIsdeleted, Constants.ZERO)
+                .eq(CompanyUserApply::getStatus,Constants.ZERO))>Constants.ZERO){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠璐︽埛瀛樺湪寰呭鎵规暟鎹紝鏃犳硶杩涜鐢宠");
+        };
+        SystemUser applyUser = systemUserMapper.selectById(companyUserApply.getUserId());
+        if(Objects.isNull(applyUser)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鐢宠鐢ㄦ埛淇℃伅");
+        }
+        Company applyCompany = companyMapper.selectById(applyUser.getCompanyId());
+        if(Objects.isNull(applyCompany)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鐢宠鐢ㄦ埛浼佷笟淇℃伅");
+        }
+
+        List<String> companyIds = Arrays.asList(companyUserApply.getCompanyIds().split(","));
+        for (String companyId:companyIds) {
+            if(Constants.equalsInteger(loginUserInfo.getCompanyId(),Integer.valueOf(companyId))){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏃犳硶鐢宠褰掑睘鍏徃鏉冮檺");
+            }
+            if(companyPermissionMapper.selectCount(new QueryWrapper<CompanyPermission>().lambda()
+                    .eq(CompanyPermission::getCompanyId,companyId)
+                    .eq(CompanyPermission::getIsdeleted,Constants.ZERO)
+                    .eq(CompanyPermission::getUserId,companyUserApply.getUserId()))>Constants.ZERO
+            ){
+                Company company = companyMapper.selectById(companyId);
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"浼佷笟銆�"+company.getName()+"銆戝凡鐢宠,璇峰嬁閲嶅鐢宠!");
+            };
+        }
+        List<Company> companyList = companyMapper.selectList(new QueryWrapper<Company>().lambda()
+                .eq(Company::getIsdeleted, Constants.ZERO)
+                .eq(Company::getType,Constants.ZERO)
+                .in(Company::getId, companyIds)
+        );
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(companyList) || !Constants.equalsInteger(companyList.size(),companyIds.size())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"浼佷笟淇℃伅寮傚父锛岃妫�鏌ラ�夋嫨浼佷笟淇℃伅");
+        }
+        companyUserApply.setStatus(Constants.ZERO);
+        companyUserApply.setIsdeleted(Constants.ZERO);
+        companyUserApply.setCreateDate(new Date());
+        companyUserApply.setCreator(loginUserInfo.getId());
         companyUserApplyMapper.insert(companyUserApply);
+
+        List<Multifile> multifileList = companyUserApply.getMultifileList();
+        for (Multifile multifile:multifileList) {
+            multifile.setIsdeleted(Constants.ZERO);
+            multifile.setCreator(loginUserInfo.getId());
+            multifile.setCreateDate(new Date());
+            multifile.setObjId(companyUserApply.getId());
+            multifile.setObjType(Constants.MultiFile.COMPANY_USER_APPLY.getKey());
+            multifileMapper.insert(multifile);
+        }
+
+        //瀛樺偍寰呭姙淇℃伅
+        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.COMPANY_USER_APPLY;
+        //骞冲彴寰呭姙
+        Notices notices = new Notices(noticeObjectType,
+                Constants.ZERO
+                ,companyUserApply.getId(),
+                applyCompany.getName() + " - " + applyUser.getRealname() +"鎻愪氦闆嗗洟璐﹀彿鐢宠" ,
+                null
+                ,Constants.NoticeType.ZERO);
+        noticesMapper.insert(notices);
+
         return companyUserApply.getId();
     }
 
     @Override
     public void deleteById(Integer id) {
-        companyUserApplyMapper.deleteById(id);
+        LoginUserInfo loginUserInfo =(LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        CompanyUserApply companyUserApply = companyUserApplyMapper.selectById(id);
+        if(Objects.isNull(companyUserApply)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(!Constants.equalsInteger(companyUserApply.getStatus(),Constants.ZERO)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠涓氬姟鐘舵�佸凡娴佽浆锛屼笉鍏佽璇ユ搷浣�");
+        }
+        companyUserApplyMapper.update(null,new UpdateWrapper<CompanyUserApply>().lambda()
+                .set(CompanyUserApply::getIsdeleted,Constants.ONE)
+                .set(CompanyUserApply::getEditDate,new Date())
+                .set(CompanyUserApply::getEditor,loginUserInfo.getId())
+                .eq(CompanyUserApply::getId,id)
+        );
     }
 
     @Override
@@ -69,7 +187,35 @@
 
     @Override
     public CompanyUserApply findById(Integer id) {
-        return companyUserApplyMapper.selectById(id);
+        CompanyUserApply companyUserApply = companyUserApplyJoinMapper.selectJoinOne(CompanyUserApply.class,new MPJLambdaWrapper<CompanyUserApply>()
+                 .selectAll(CompanyUserApply.class)
+                 .select(" t3.name as companyName ")
+                 .select(" t1.REALNAME as realName ")
+                 .select(" t2.USERNAME as userName ")
+                 .leftJoin(" system_user t1 on t1.id = t.creator  ")
+                 .leftJoin(" system_user t2 on t2.id = t.user_id  ")
+                 .leftJoin(" company t3 on t3.id = t2.company_id  ")
+                .eq(CompanyUserApply::getId,id));
+        if(Objects.isNull(companyUserApply)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        List<Multifile> multifileList = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda()
+                .eq(Multifile::getObjId,id)
+                .eq(Multifile::getObjType,Constants.MultiFile.COMPANY_USER_APPLY.getKey())
+                .eq(Multifile::getIsdeleted,Constants.ZERO)
+                .orderByDesc(Multifile::getId)
+        );
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){
+            String url = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
+                    systemDictDataBiz.queryByCode(Constants.OSS,Constants.COMPANY_USER_APPLY).getCode();
+            for (Multifile multifile:multifileList) {
+                if(StringUtils.isNotBlank(multifile.getFileurl())){
+                    multifile.setFileurlFull(url + multifile.getFileurl());
+                }
+            }
+            companyUserApply.setMultifileList(multifileList);
+        }
+        return companyUserApply;
     }
 
     @Override
@@ -87,64 +233,33 @@
     @Override
     public PageData<CompanyUserApply> findPage(PageWrap<CompanyUserApply> pageWrap) {
         IPage<CompanyUserApply> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        QueryWrapper<CompanyUserApply> queryWrapper = new QueryWrapper<>();
+        MPJLambdaWrapper<CompanyUserApply> queryWrapper = new MPJLambdaWrapper<CompanyUserApply>();
         Utils.MP.blankToNull(pageWrap.getModel());
-        if (pageWrap.getModel().getId() != null) {
-            queryWrapper.lambda().eq(CompanyUserApply::getId, pageWrap.getModel().getId());
+        queryWrapper.selectAll(CompanyUserApply.class);
+        queryWrapper.select(" t3.name as companyName ");
+        queryWrapper.select(" t1.REALNAME as realName ");
+        queryWrapper.select(" t2.USERNAME as userName ");
+        queryWrapper.leftJoin(" system_user t1 on t1.id = t.creator  ");
+        queryWrapper.leftJoin(" system_user t2 on t2.id = t.user_id  ");
+        queryWrapper.leftJoin(" company t3 on t3.id = t2.company_id  ");
+        queryWrapper.eq(CompanyUserApply::getIsdeleted,Constants.ZERO);
+
+
+        if (pageWrap.getModel().getCompanyId() != null) {
+            queryWrapper.apply(" t3.id = "+pageWrap.getModel().getCompanyId()+" ");
         }
-        if (pageWrap.getModel().getCreator() != null) {
-            queryWrapper.lambda().eq(CompanyUserApply::getCreator, pageWrap.getModel().getCreator());
-        }
-        if (pageWrap.getModel().getCreateDate() != null) {
-            queryWrapper.lambda().ge(CompanyUserApply::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
-            queryWrapper.lambda().le(CompanyUserApply::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
-        }
-        if (pageWrap.getModel().getEditor() != null) {
-            queryWrapper.lambda().eq(CompanyUserApply::getEditor, pageWrap.getModel().getEditor());
-        }
-        if (pageWrap.getModel().getEditDate() != null) {
-            queryWrapper.lambda().ge(CompanyUserApply::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
-            queryWrapper.lambda().le(CompanyUserApply::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
-        }
-        if (pageWrap.getModel().getIsdeleted() != null) {
-            queryWrapper.lambda().eq(CompanyUserApply::getIsdeleted, pageWrap.getModel().getIsdeleted());
-        }
-        if (pageWrap.getModel().getRemark() != null) {
-            queryWrapper.lambda().eq(CompanyUserApply::getRemark, pageWrap.getModel().getRemark());
-        }
-        if (pageWrap.getModel().getCompanyIds() != null) {
-            queryWrapper.lambda().eq(CompanyUserApply::getCompanyIds, pageWrap.getModel().getCompanyIds());
-        }
-        if (pageWrap.getModel().getUserId() != null) {
-            queryWrapper.lambda().eq(CompanyUserApply::getUserId, pageWrap.getModel().getUserId());
-        }
-        if (pageWrap.getModel().getContent() != null) {
-            queryWrapper.lambda().eq(CompanyUserApply::getContent, pageWrap.getModel().getContent());
-        }
+
         if (pageWrap.getModel().getStatus() != null) {
-            queryWrapper.lambda().eq(CompanyUserApply::getStatus, pageWrap.getModel().getStatus());
+            queryWrapper.eq(CompanyUserApply::getStatus, pageWrap.getModel().getStatus());
         }
-        if (pageWrap.getModel().getCompanyNames() != null) {
-            queryWrapper.lambda().eq(CompanyUserApply::getCompanyNames, pageWrap.getModel().getCompanyNames());
+
+        if (pageWrap.getModel().getUserId() != null) {
+            queryWrapper.eq(CompanyUserApply::getUserId, pageWrap.getModel().getUserId());
         }
-        if (pageWrap.getModel().getCheckorId() != null) {
-            queryWrapper.lambda().eq(CompanyUserApply::getCheckorId, pageWrap.getModel().getCheckorId());
-        }
-        if (pageWrap.getModel().getCheckDate() != null) {
-            queryWrapper.lambda().ge(CompanyUserApply::getCheckDate, Utils.Date.getStart(pageWrap.getModel().getCheckDate()));
-            queryWrapper.lambda().le(CompanyUserApply::getCheckDate, Utils.Date.getEnd(pageWrap.getModel().getCheckDate()));
-        }
-        if (pageWrap.getModel().getCheckInfo() != null) {
-            queryWrapper.lambda().eq(CompanyUserApply::getCheckInfo, pageWrap.getModel().getCheckInfo());
-        }
-        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
-            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
-                queryWrapper.orderByDesc(sortData.getProperty());
-            } else {
-                queryWrapper.orderByAsc(sortData.getProperty());
-            }
-        }
-        return PageData.from(companyUserApplyMapper.selectPage(page, queryWrapper));
+
+        queryWrapper.orderByDesc(CompanyUserApply::getCreateDate);
+        IPage<CompanyUserApply> iPage = companyUserApplyJoinMapper.selectJoinPage(page,CompanyUserApply.class,queryWrapper);
+        return PageData.from(iPage);
     }
 
     @Override
@@ -152,4 +267,57 @@
         QueryWrapper<CompanyUserApply> wrapper = new QueryWrapper<>(companyUserApply);
         return companyUserApplyMapper.selectCount(wrapper);
     }
+
+    @Override
+    public void audit(CompanyUserApply companyUserApply){
+        LoginUserInfo loginUserInfo =(LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        if(Objects.isNull(companyUserApply)
+                ||Objects.isNull(companyUserApply.getId())
+                || Objects.isNull(companyUserApply.getStatus())
+                || !(Constants.equalsInteger(companyUserApply.getStatus(),Constants.ONE) || Constants.equalsInteger(companyUserApply.getStatus(),Constants.TWO))
+                || (StringUtils.isBlank(companyUserApply.getCheckInfo()) && Constants.equalsInteger(companyUserApply.getStatus(),Constants.TWO))
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        CompanyUserApply userApply = companyUserApplyJoinMapper.selectById(companyUserApply.getId());
+        if(Objects.isNull(userApply)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(!Constants.equalsInteger(userApply.getStatus(),Constants.ZERO)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"涓氬姟鐘舵�佸凡娴佽浆");
+        }
+        CompanyUserApply update = new CompanyUserApply();
+        update.setId(companyUserApply.getId());
+        update.setEditDate(new Date());
+        update.setEditor(loginUserInfo.getId());
+        update.setStatus(companyUserApply.getStatus());
+        update.setCheckInfo(companyUserApply.getCheckInfo());
+        update.setCheckDate(new Date());
+        update.setCheckorId(loginUserInfo.getId());
+        companyUserApplyJoinMapper.updateById(update);
+        if(Constants.equalsInteger(companyUserApply.getStatus(),Constants.ONE) && StringUtils.isNotBlank(userApply.getCompanyIds())){
+            List<String> ids = Arrays.asList(userApply.getCompanyIds().split(","));
+            List<CompanyPermission> companyPermissionList = new ArrayList<>();
+            for (String id:ids) {
+                CompanyPermission companyPermission = new CompanyPermission();
+                companyPermission.setCreator(loginUserInfo.getId());
+                companyPermission.setCreateDate(new Date());
+                companyPermission.setIsdeleted(Constants.ZERO);
+                companyPermission.setUserId(userApply.getUserId());
+                companyPermission.setCompanyId(Integer.valueOf(id));
+                companyPermission.setType(Constants.ONE);
+                companyPermissionList.add(companyPermission);
+            }
+            companyPermissionMapper.insertBatchSomeColumn(companyPermissionList);
+        }
+
+
+        //瀛樺偍寰呭姙淇℃伅
+        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.COMPANY_USER_APPLY;
+        //鍒犻櫎鍏朵粬寰呭姙
+        noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey())
+                .ne(Notices::getType,Constants.NoticeType.SIX.getStatus())
+                .eq(Notices::getObjId,update.getId()));
+
+    }
 }
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/ContractServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/ContractServiceImpl.java
index 655bfe3..7f7b204 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/ContractServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/ContractServiceImpl.java
@@ -1,20 +1,36 @@
 package com.doumee.service.business.impl;
 
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.CompanyMapper;
 import com.doumee.dao.business.ContractMapper;
-import com.doumee.dao.business.model.Contract;
+import com.doumee.dao.business.MultifileMapper;
+import com.doumee.dao.business.NoticesMapper;
+import com.doumee.dao.business.join.ContractJoinMapper;
+import com.doumee.dao.business.model.*;
+import com.doumee.dao.system.model.SystemUser;
 import com.doumee.service.business.ContractService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.doumee.service.business.third.SignService;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
+import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 鍚堝悓淇℃伅琛⊿ervice瀹炵幇
@@ -27,15 +43,118 @@
     @Autowired
     private ContractMapper contractMapper;
 
+    @Autowired
+    private ContractJoinMapper contractJoinMapper;
+
+    @Autowired
+    private MultifileMapper multifileMapper;
+
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
+
+    @Autowired
+    private CompanyMapper companyMapper; 
+    
+    @Autowired
+    private SignService signService;
+
+    @Autowired
+    private NoticesMapper noticesMapper;
+
     @Override
     public Integer create(Contract contract) {
+        LoginUserInfo loginUserInfo =   (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        initCreateParam(contract);
+        contract.setIsdeleted(Constants.ZERO);
+        contract.setCreateDate(new Date());
+        contract.setCreator(loginUserInfo.getId());
+        contract.setEditor(loginUserInfo.getId());
+        contract.setEditDate(new Date());
+        contract.setStatus(Constants.ZERO);
+        contract.setFileUrl(contract.getFileUrl());
+        Company company = companyMapper.selectById(contract.getCompanyId());
+        if(Constants.equalsInteger(loginUserInfo.getType(),Constants.ZERO)){
+            if(Constants.equalsInteger(company.getType(),Constants.ONE)){
+                contract.setSignType(Constants.ZERO);
+            }else{
+                contract.setSignType(Constants.ONE);
+            }
+        }else if(Constants.equalsInteger(loginUserInfo.getType(),Constants.TWO)){
+            contract.setPartyCompanyId(loginUserInfo.getCompanyId());
+            contract.setSignType(Constants.TWO);
+        }else{
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"浼佷笟鐢ㄦ埛鏃犳硶杩涜璇ユ搷浣�!");
+        }
         contractMapper.insert(contract);
+
+        Multifile file = contract.getMultifile();
+        file.setIsdeleted(Constants.ZERO);
+        file.setCreateDate(contract.getCreateDate());
+        file.setCreator(contract.getCreator());
+        file.setObjId(contract.getId());
+        file.setObjType(Constants.MultiFile.CONTRACT_PDF.getKey());
+        file.setType(Constants.formatIntegerNum(file.getType()));
+        multifileMapper.insert(file);
+
+
+
+        //瀛樺偍寰呭姙淇℃伅
+        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.CONTRACT;
+        //骞冲彴寰呭姙
+        Notices notices = new Notices(noticeObjectType,
+                Constants.equalsInteger(contract.getSignType(),Constants.TWO)?Constants.TWO:Constants.ZERO
+                ,contract.getId(),
+                this.getNoticeInfo(contract,company),
+                Constants.equalsInteger(contract.getSignType(),Constants.TWO)?
+                contract.getPartyCompanyId():null
+                ,Constants.NoticeType.ZERO);
+        noticesMapper.insert(notices);
+
         return contract.getId();
     }
 
+    public String getNoticeInfo(Contract contract,Company company){
+        String noticeInfo = contract.getName();
+        //鍟嗘埛淇℃伅
+        if(Constants.equalsInteger(contract.getSignType(),Constants.TWO)){
+            Company shop = companyMapper.selectById(contract.getPartyCompanyId());
+            noticeInfo  = noticeInfo + "("+shop.getName()+"/"+company.getName()+")";
+        }else{
+            noticeInfo  = noticeInfo + "(骞冲彴/"+company.getName()+")";
+        }
+        return noticeInfo;
+    }
+
+
+    private void initCreateParam(Contract contract) {
+        if(StringUtils.isBlank(contract.getName())
+                || Objects.isNull(contract.getType())
+                || Objects.isNull(contract.getCompanyId())
+                || Objects.isNull(contract.getStartTime())
+                || Objects.isNull(contract.getEndTime())
+                || Objects.isNull(contract.getMultifile())
+                 || Objects.isNull(contract.getMultifile().getFileurl())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+    }
+
+
     @Override
     public void deleteById(Integer id) {
-        contractMapper.deleteById(id);
+        LoginUserInfo loginUserInfo =   (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        Contract contract = contractJoinMapper.selectById(id);
+        if(Objects.isNull(contract)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鍚堝悓淇℃伅");
+        }
+        if(!Constants.equalsInteger(contract.getStatus(),Constants.CONTRACT_STATUS.CANCEL.getKey())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍚堝悓淇℃伅淇℃伅宸叉祦杞�");
+        }
+        contract.setStatus(Constants.CONTRACT_STATUS.CLOSE.getKey());
+        contract.setIsdeleted(Constants.ONE);
+        contract.setEditor(loginUserInfo.getId());
+        contract.setEditDate(new Date());
+        contractMapper.updateById(contract);
     }
 
     @Override
@@ -69,7 +188,63 @@
 
     @Override
     public Contract findById(Integer id) {
-        return contractMapper.selectById(id);
+        MPJLambdaWrapper<Contract> queryWrapper = new MPJLambdaWrapper<>();
+        queryWrapper.selectAll(Contract.class);
+        queryWrapper.select("  ifnull(t2.name,'瀹夊窘浜戞槗淇濈鎶�鏈夐檺鍏徃') as partyCompanyName , t3.name as companyName ");
+        queryWrapper.select(" t4.REALNAME as firstSignUserName  , t5.REALNAME as doneSignUserName ");
+        queryWrapper.leftJoin(SystemUser.class,SystemUser::getId,Contract::getCreator);
+        queryWrapper.leftJoin(" company t2 on t2.id = t.PARTY_COMPANY_ID ");
+        queryWrapper.leftJoin(" company t3 on t3.id = t.COMPANY_ID ");
+        queryWrapper.leftJoin(" system_user t4 on t4.id = t.SIGN_USER_ID  ");
+        queryWrapper.leftJoin(" system_user t5 on t5.id = t.COM_SIGN_USER_ID  ");
+        queryWrapper.eq(Contract::getId,id);
+        queryWrapper.last(" limit 1");
+        Contract contract = contractJoinMapper.selectJoinOne(Contract.class,queryWrapper);
+
+
+        Multifile multifile = multifileMapper.selectOne(new QueryWrapper<Multifile>().lambda()
+                .eq(Multifile::getObjType,Constants.MultiFile.CONTRACT_PDF.getKey())
+                .eq(Multifile::getObjId,contract.getId())
+                .last(" limit 1 ")
+        );
+
+        if(Objects.nonNull(multifile)&&StringUtils.isNotBlank(multifile.getFileurl())){
+            String url = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
+                    systemDictDataBiz.queryByCode(Constants.OSS,Constants.CONTRACT).getCode();
+            multifile.setFileurlFull(url + multifile.getFileurl());
+            contract.setMultifile(multifile);
+        }
+
+        if(Constants.equalsInteger(contract.getStatus(),Constants.ONE) || Constants.equalsInteger(contract.getStatus(),Constants.THREE) ){
+            Multifile multiFirstFile = multifileMapper.selectOne(new QueryWrapper<Multifile>().lambda()
+                    .eq(Multifile::getObjType,Constants.MultiFile.CONTRACT_FIRST_PDF.getKey())
+                    .eq(Multifile::getObjId,contract.getId())
+                    .last(" limit 1 ")
+            );
+            String path = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
+                    systemDictDataBiz.queryByCode(Constants.OSS,Constants.APPLY_FILE).getCode();
+
+            if(Objects.nonNull(multiFirstFile)&&StringUtils.isNotBlank(multiFirstFile.getFileurl())){
+                multiFirstFile.setFileurlFull(path + multiFirstFile.getFileurl());
+                contract.setMultiFirstFile(multiFirstFile);
+            }
+
+            if(StringUtils.isNotBlank(contract.getDoneFileUrl())){
+                Multifile multiDoneFile = multifileMapper.selectOne(new QueryWrapper<Multifile>().lambda()
+                        .eq(Multifile::getObjType,Constants.MultiFile.CONTRACT_DONE_PDF.getKey())
+                        .eq(Multifile::getObjId,contract.getId())
+                        .last(" limit 1 ")
+                );
+
+                if(Objects.nonNull(multiDoneFile)&&StringUtils.isNotBlank(multiDoneFile.getFileurl())){
+                    multiDoneFile.setFileurlFull(path + multiDoneFile.getFileurl());
+                    contract.setMultiDoneFile(multiDoneFile);
+                }
+            }
+
+        }
+
+        return contract;
     }
 
     @Override
@@ -87,112 +262,257 @@
     @Override
     public PageData<Contract> findPage(PageWrap<Contract> pageWrap) {
         IPage<Contract> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        QueryWrapper<Contract> queryWrapper = new QueryWrapper<>();
+        MPJLambdaWrapper<Contract> queryWrapper = new MPJLambdaWrapper<>();
         Utils.MP.blankToNull(pageWrap.getModel());
-        if (pageWrap.getModel().getId() != null) {
-            queryWrapper.lambda().eq(Contract::getId, pageWrap.getModel().getId());
+        queryWrapper.selectAll(Contract.class);
+        queryWrapper.select("  ifnull(t2.name,'瀹夊窘浜戞槗淇濈鎶�鏈夐檺鍏徃') as partyCompanyName , t3.name as companyName ");
+        queryWrapper.leftJoin(SystemUser.class,SystemUser::getId,Contract::getCreator);
+        queryWrapper.leftJoin(" company t2 on t2.id = t.PARTY_COMPANY_ID ");
+        queryWrapper.leftJoin(" company t3 on t3.id = t.COMPANY_ID ");
+        queryWrapper.eq(Contract::getIsdeleted,Constants.ZERO);
+        queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getCompanyId()),
+                Contract::getCompanyId,pageWrap.getModel().getCompanyId());
+
+        queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getName()),
+                Contract::getName,pageWrap.getModel().getName());
+
+        queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getStatus()),
+                Contract::getStatus,pageWrap.getModel().getStatus());
+
+        queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getSignType()),
+                Contract::getSignType,pageWrap.getModel().getSignType());
+
+        LoginUserInfo loginUserInfo =   (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        if(Constants.equalsInteger(loginUserInfo.getType(),Constants.ONE)){
+            //浼佷笟鍙湅鏁版嵁
+            queryWrapper.eq(Contract::getCompanyId,loginUserInfo.getCompanyId());
+        }else if(Constants.equalsInteger(loginUserInfo.getType(),Constants.TWO)){
+            //鍟嗘埛鍙湅鍒扮殑鏁版嵁
+            queryWrapper.and(i->i.eq(Contract::getPartyCompanyId,loginUserInfo.getCompanyId()).or()
+                    .eq(Contract::getCompanyId,loginUserInfo.getCompanyId()));
         }
-        if (pageWrap.getModel().getCreator() != null) {
-            queryWrapper.lambda().eq(Contract::getCreator, pageWrap.getModel().getCreator());
-        }
-        if (pageWrap.getModel().getCreateDate() != null) {
-            queryWrapper.lambda().ge(Contract::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
-            queryWrapper.lambda().le(Contract::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
-        }
-        if (pageWrap.getModel().getEditor() != null) {
-            queryWrapper.lambda().eq(Contract::getEditor, pageWrap.getModel().getEditor());
-        }
-        if (pageWrap.getModel().getEditDate() != null) {
-            queryWrapper.lambda().ge(Contract::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
-            queryWrapper.lambda().le(Contract::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
-        }
-        if (pageWrap.getModel().getIsdeleted() != null) {
-            queryWrapper.lambda().eq(Contract::getIsdeleted, pageWrap.getModel().getIsdeleted());
-        }
-        if (pageWrap.getModel().getRemark() != null) {
-            queryWrapper.lambda().eq(Contract::getRemark, pageWrap.getModel().getRemark());
-        }
-        if (pageWrap.getModel().getName() != null) {
-            queryWrapper.lambda().eq(Contract::getName, pageWrap.getModel().getName());
-        }
-        if (pageWrap.getModel().getCompanyId() != null) {
-            queryWrapper.lambda().eq(Contract::getCompanyId, pageWrap.getModel().getCompanyId());
-        }
-        if (pageWrap.getModel().getContent() != null) {
-            queryWrapper.lambda().eq(Contract::getContent, pageWrap.getModel().getContent());
-        }
-        if (pageWrap.getModel().getStatus() != null) {
-            queryWrapper.lambda().eq(Contract::getStatus, pageWrap.getModel().getStatus());
-        }
-        if (pageWrap.getModel().getComSignUserId() != null) {
-            queryWrapper.lambda().eq(Contract::getComSignUserId, pageWrap.getModel().getComSignUserId());
-        }
-        if (pageWrap.getModel().getComSignDate() != null) {
-            queryWrapper.lambda().ge(Contract::getComSignDate, Utils.Date.getStart(pageWrap.getModel().getComSignDate()));
-            queryWrapper.lambda().le(Contract::getComSignDate, Utils.Date.getEnd(pageWrap.getModel().getComSignDate()));
-        }
-        if (pageWrap.getModel().getComSignInfo() != null) {
-            queryWrapper.lambda().eq(Contract::getComSignInfo, pageWrap.getModel().getComSignInfo());
-        }
-        if (pageWrap.getModel().getType() != null) {
-            queryWrapper.lambda().eq(Contract::getType, pageWrap.getModel().getType());
-        }
-        if (pageWrap.getModel().getSignUserId() != null) {
-            queryWrapper.lambda().eq(Contract::getSignUserId, pageWrap.getModel().getSignUserId());
-        }
-        if (pageWrap.getModel().getSignDate() != null) {
-            queryWrapper.lambda().ge(Contract::getSignDate, Utils.Date.getStart(pageWrap.getModel().getSignDate()));
-            queryWrapper.lambda().le(Contract::getSignDate, Utils.Date.getEnd(pageWrap.getModel().getSignDate()));
-        }
-        if (pageWrap.getModel().getSignInfo() != null) {
-            queryWrapper.lambda().eq(Contract::getSignInfo, pageWrap.getModel().getSignInfo());
-        }
-        if (pageWrap.getModel().getFileUrl() != null) {
-            queryWrapper.lambda().eq(Contract::getFileUrl, pageWrap.getModel().getFileUrl());
-        }
-        if (pageWrap.getModel().getFileSignUrl() != null) {
-            queryWrapper.lambda().eq(Contract::getFileSignUrl, pageWrap.getModel().getFileSignUrl());
-        }
-        if (pageWrap.getModel().getDoneFileUrl() != null) {
-            queryWrapper.lambda().eq(Contract::getDoneFileUrl, pageWrap.getModel().getDoneFileUrl());
-        }
-        if (pageWrap.getModel().getAppyno() != null) {
-            queryWrapper.lambda().eq(Contract::getAppyno, pageWrap.getModel().getAppyno());
-        }
-        if (pageWrap.getModel().getDoneApplyno() != null) {
-            queryWrapper.lambda().eq(Contract::getDoneApplyno, pageWrap.getModel().getDoneApplyno());
-        }
-        if (pageWrap.getModel().getStartTime() != null) {
-            queryWrapper.lambda().ge(Contract::getStartTime, Utils.Date.getStart(pageWrap.getModel().getStartTime()));
-            queryWrapper.lambda().le(Contract::getStartTime, Utils.Date.getEnd(pageWrap.getModel().getStartTime()));
-        }
-        if (pageWrap.getModel().getEndTime() != null) {
-            queryWrapper.lambda().ge(Contract::getEndTime, Utils.Date.getStart(pageWrap.getModel().getEndTime()));
-            queryWrapper.lambda().le(Contract::getEndTime, Utils.Date.getEnd(pageWrap.getModel().getEndTime()));
-        }
-        if (pageWrap.getModel().getCancelDate() != null) {
-            queryWrapper.lambda().ge(Contract::getCancelDate, Utils.Date.getStart(pageWrap.getModel().getCancelDate()));
-            queryWrapper.lambda().le(Contract::getCancelDate, Utils.Date.getEnd(pageWrap.getModel().getCancelDate()));
-        }
-        if (pageWrap.getModel().getCancelUserId() != null) {
-            queryWrapper.lambda().eq(Contract::getCancelUserId, pageWrap.getModel().getCancelUserId());
-        }
-        if (pageWrap.getModel().getCancelInfo() != null) {
-            queryWrapper.lambda().eq(Contract::getCancelInfo, pageWrap.getModel().getCancelInfo());
-        }
-        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
-            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
-                queryWrapper.orderByDesc(sortData.getProperty());
-            } else {
-                queryWrapper.orderByAsc(sortData.getProperty());
+        if(Objects.nonNull(pageWrap.getModel().getQueryStatus())){
+            if(Constants.equalsInteger(pageWrap.getModel().getQueryStatus(),Constants.ZERO)){
+                queryWrapper.apply(" t.status = 0 and t.sign_type in (0,1) ");
+            }else if(Constants.equalsInteger(pageWrap.getModel().getQueryStatus(),Constants.ONE)){
+                queryWrapper.apply(" ( (t.status = 0 and t.sign_type = 2 ) or ( t.status = 1 and t.sign_type = 0 )  )");
+            }else if(Constants.equalsInteger(pageWrap.getModel().getQueryStatus(),Constants.TWO)){
+                queryWrapper.apply(" ( (t.status = 1 and t.sign_type = 1 ) or ( t.status = 1 and t.sign_type = 2 )  )");
+            }else{
+                queryWrapper.eq(Contract::getStatus,pageWrap.getModel().getQueryStatus());
             }
         }
-        return PageData.from(contractMapper.selectPage(page, queryWrapper));
+        queryWrapper.orderByDesc(Contract::getCreateDate);
+        PageData<Contract> pageData = PageData.from(contractJoinMapper.selectJoinPage(page,Contract.class, queryWrapper));
+        for (Contract contract:pageData.getRecords()) {
+            this.dealQueryStauts(contract);
+        }
+        return pageData;
     }
+
+    public void dealQueryStauts(Contract contract){
+        if(Constants.equalsInteger(contract.getSignType(),Constants.ZERO)){
+            if(Constants.equalsInteger(contract.getStatus(),Constants.ZERO)){
+                contract.setQueryStatus(Constants.ZERO);
+            }else if(Constants.equalsInteger(contract.getStatus(),Constants.ONE)){
+                contract.setQueryStatus(Constants.ONE);
+            }else{
+                contract.setQueryStatus(contract.getStatus());
+            }
+        }else if(Constants.equalsInteger(contract.getSignType(),Constants.ONE)){
+            if(Constants.equalsInteger(contract.getStatus(),Constants.ZERO)){
+                contract.setQueryStatus(Constants.ZERO);
+            }else if(Constants.equalsInteger(contract.getStatus(),Constants.ONE)){
+                contract.setQueryStatus(Constants.TWO);
+            }else{
+                contract.setQueryStatus(contract.getStatus());
+            }
+        }else{
+            if(Constants.equalsInteger(contract.getStatus(),Constants.ZERO)){
+                contract.setQueryStatus(Constants.ONE);
+            }else if(Constants.equalsInteger(contract.getStatus(),Constants.ONE)){
+                contract.setQueryStatus(Constants.TWO);
+            }else{
+                contract.setQueryStatus(contract.getStatus());
+            }
+        }
+    }
+
+    @Override
+    public void cancel(Integer id) {
+        LoginUserInfo loginUserInfo =   (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        Contract contract = contractJoinMapper.selectById(id);
+        if(Objects.isNull(contract)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鍚堝悓淇℃伅");
+        }
+        if(!Constants.equalsInteger(contract.getStatus(),Constants.CONTRACT_STATUS.WAIT.getKey())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍚堝悓淇℃伅淇℃伅宸叉祦杞�");
+        }
+        if(StringUtils.isNotBlank(contract.getApplyNo())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍚堝悓绛剧讲涓紝鏃犳硶杩涜鍙栨秷");
+        }
+
+        contract.setStatus(Constants.CONTRACT_STATUS.CANCEL.getKey());
+        contract.setCancelDate(new Date());
+        contract.setCancelUserId(loginUserInfo.getId());
+        contract.setEditor(loginUserInfo.getId());
+        contract.setEditDate(new Date());
+        contractMapper.updateById(contract);
+
+        //鍒犻櫎寰呭姙
+        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.CONTRACT;
+        noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey()).eq(Notices::getObjId,contract.getId()));
+
+    }
+
 
     @Override
     public long count(Contract contract) {
         QueryWrapper<Contract> wrapper = new QueryWrapper<>(contract);
         return contractMapper.selectCount(wrapper);
     }
+
+
+    @Override
+    public  String getContractSignLink(Integer id) {
+        if(id == null ){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        MPJLambdaWrapper<Contract> queryWrapper = new MPJLambdaWrapper<>();
+        queryWrapper.selectAll(Contract.class);
+        queryWrapper.select("  ifnull(t2.name,'瀹夊窘浜戞槗淇濈鎶�鏈夐檺鍏徃') as partyCompanyName , t3.name as companyName ");
+        queryWrapper.leftJoin(SystemUser.class,SystemUser::getId,Contract::getCreator);
+        queryWrapper.leftJoin(" company t2 on t2.id = t.PARTY_COMPANY_ID ");
+        queryWrapper.leftJoin(" company t3 on t3.id = t.COMPANY_ID ");
+        queryWrapper.eq(Contract::getIsdeleted,Constants.ZERO);
+        queryWrapper.eq(Contract::getId,id);
+        queryWrapper.last(" limit 1");
+        Contract contract = contractJoinMapper.selectJoinOne(Contract.class,queryWrapper);
+        if(contract == null ||!Constants.equalsInteger(contract.getIsdeleted(),Constants.ZERO) ){
+            throw  new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        Company company = companyMapper.selectById(contract.getCompanyId());
+        if(Objects.isNull(company)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈煡璇㈠埌浼佷笟淇℃伅!");
+        }
+        //褰撳墠绛剧讲浜� 0=鎴戞柟锛�2=浼佷笟/鍟嗘埛
+        Integer signatory =  Constants.ZERO;
+        //鍒ゆ柇褰撳墠鏄惁鍙互绛剧讲
+        if(Constants.equalsInteger(user.getType(),Constants.ZERO)){
+            //鍒ゆ柇骞冲彴鏄惁鍙互绛剧讲
+            if(!( !Constants.equalsInteger(contract.getSignType(),Constants.TWO) && Constants.equalsInteger(contract.getStatus(),Constants.ZERO))){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠闈炲钩鍙扮敤鎴峰彲绛剧讲娴佺▼");
+            }
+        }else if(Constants.equalsInteger(user.getType(),Constants.TWO)){
+            //骞冲彴鍒涘缓鐨�
+            if(!Constants.equalsInteger(contract.getSignType(),Constants.TWO) ){
+                signatory = Constants.ONE;
+                //鍒ゆ柇鐘舵�佹槸鍚︾瓑浜庡緟鍟嗘埛绛剧讲 绛剧讲浼佷笟鏄惁绛変簬褰撳墠鐧诲綍浜轰紒涓�
+                if(!(Constants.equalsInteger(contract.getStatus(),Constants.ONE) && Constants.equalsInteger(contract.getCompanyId(),user.getCompanyId()))){
+                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠闈炲晢鎴风敤鎴峰彲绛剧讲娴佺▼");
+                }
+            }else{
+                //鍟嗘埛鍒涘缓
+                //鍒ゆ柇鐘舵�佹槸鍚︾瓑浜庡緟鍟嗘埛绛剧讲
+                if(!Constants.equalsInteger(contract.getStatus(),Constants.ZERO)){
+                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠闈炲晢鎴风敤鎴峰彲绛剧讲娴佺▼");
+                }
+            }
+        }else{
+            signatory = Constants.ONE;
+            //浼佷笟鐢ㄦ埛鍒ゆ柇
+            if(!(Constants.equalsInteger(contract.getCompanyId(),user.getCompanyId()) && Constants.equalsInteger(contract.getStatus(),Constants.ONE) )){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠闈炰紒涓氱敤鎴峰彲绛剧讲娴佺▼");
+            }
+        }
+
+        Constants.ApplyLogType applyLogType = null;
+        String info = "";
+
+        Multifile f = multifileMapper.selectOne(new QueryWrapper<Multifile>().lambda()
+                .eq(Multifile::getObjId,contract.getId())
+                .eq(Multifile::getObjType,Constants.MultiFile.CONTRACT_PDF.getKey())
+                .eq(Multifile::getIsdeleted,Constants.ZERO).last("limit 1"));
+        if(f == null || StringUtils.isBlank(f.getFileurl())){
+            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝鑾峰彇寰呯绔犳枃浠跺け璐ワ紝璇疯仈绯荤‘璁ょ缃叉枃浠舵槸鍚︽纭紒");
+        }
+        String url = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode();
+        if(Constants.equalsInteger(contract.getStatus(),Constants.ZERO)){
+            url = url + systemDictDataBiz.queryByCode(Constants.OSS,Constants.CONTRACT).getCode() + f.getFileurl();
+        }else{
+            url = url + systemDictDataBiz.queryByCode(Constants.OSS,Constants.APPLY_FILE).getCode() + contract.getFileSignUrl();
+        }
+
+        String notifyUrl = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SIGN_DONE_NOTIFY_URL).getCode();
+
+        String companyName = "";
+        String creditCode = "";
+        String email = "";
+        //骞冲彴绛剧讲
+        if(!Constants.equalsInteger(contract.getSignType(),Constants.TWO) && Constants.equalsInteger(contract.getStatus(),Constants.ZERO)){
+            companyName = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PLAT_COMPANY_NAME).getCode();
+            creditCode = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PLAT_CREDIT_CODE).getCode();
+            email = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PLAT_EMAIL).getCode();
+        }else if((Constants.equalsInteger(contract.getSignType(),Constants.ZERO)  && Constants.equalsInteger(contract.getStatus(),Constants.ONE))||
+                Constants.equalsInteger(contract.getSignType(),Constants.TWO)  && Constants.equalsInteger(contract.getStatus(),Constants.ZERO)
+        )  {
+            //鍟嗘埛绛剧讲
+            Company shop = null;
+            if(Constants.equalsInteger(contract.getStatus(),Constants.ONE)){
+                shop = companyMapper.selectById(contract.getCompanyId());
+            }else{
+                shop = companyMapper.selectById(contract.getPartyCompanyId());
+            }
+            if(Objects.isNull(shop)){
+                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鍟嗘埛淇℃伅");
+            }
+            companyName = shop.getName();
+            creditCode = shop.getCode();
+            email = shop.getEmail();
+        } else {
+            companyName = Constants.equalsInteger(contract.getStatus(),Constants.ZERO)?contract.getPartyCompanyName():contract.getCompanyName();
+            creditCode = company.getCode();
+            email = company.getEmail();
+        }
+        String applyNo = signService.applySign(contract.getName(),url,
+                companyName
+                ,creditCode,email,null,company.getSignId(),notifyUrl);
+        if(StringUtils.isBlank(applyNo) ){
+            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝鑾峰彇鍦ㄧ嚎绛剧珷鍦板潃澶辫触锛岃绋嶅悗閲嶈瘯锛�");
+        }
+        String link = signService.signLink(applyNo,companyName,creditCode);
+        if(StringUtils.isBlank(link) ){
+            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝鑾峰彇鍦ㄧ嚎绛剧珷鍦板潃澶辫触锛岃绋嶅悗閲嶈瘯锛�");
+        }
+        Contract update= new Contract();
+        update.setId(contract.getId());
+        update.setEditor(user.getId());
+        update.setEditDate(new Date());
+        if(Constants.equalsInteger(signatory,Constants.ZERO)){
+            update.setApplyNo(applyNo);
+            update.setSignUserId(user.getId());
+            update.setSignDate(new Date());
+
+            //瀛樺偍寰呭姙淇℃伅
+            Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.CONTRACT;
+            noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey()).eq(Notices::getObjId,update.getId()));
+            Notices notices = new Notices(noticeObjectType,
+                    Constants.equalsInteger(contract.getSignType(),Constants.TWO)?Constants.ONE:Constants.TWO
+                    ,contract.getId(),
+                    this.getNoticeInfo(contract,company),
+                    contract.getCompanyId()
+                    ,Constants.NoticeType.ZERO);
+            noticesMapper.insert(notices);
+
+        }else{
+            update.setDoneApplyNo(applyNo);
+            update.setComSignUserId(user.getId());
+            update.setComSignDate(new Date());
+        }
+        contractMapper.updateById(update);
+        return  link;
+    }
+
+
 }
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/CustomerCompanyServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/CustomerCompanyServiceImpl.java
new file mode 100644
index 0000000..f75b896
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/service/business/impl/CustomerCompanyServiceImpl.java
@@ -0,0 +1,145 @@
+package com.doumee.service.business.impl;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.CustomerCompanyMapper;
+import com.doumee.dao.business.model.CustomerCompany;
+import com.doumee.service.business.CustomerCompanyService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+
+/**
+ * 瀹㈡湇鍏宠仈浼佷笟琛⊿ervice瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2024/11/05 18:41
+ */
+@Service
+public class CustomerCompanyServiceImpl implements CustomerCompanyService {
+
+    @Autowired
+    private CustomerCompanyMapper customerCompanyMapper;
+
+    @Override
+    public Integer create(CustomerCompany customerCompany) {
+        customerCompanyMapper.insert(customerCompany);
+        return customerCompany.getId();
+    }
+
+    @Override
+    public void deleteById(Integer id) {
+        customerCompanyMapper.deleteById(id);
+    }
+
+    @Override
+    public void delete(CustomerCompany customerCompany) {
+        UpdateWrapper<CustomerCompany> deleteWrapper = new UpdateWrapper<>(customerCompany);
+        customerCompanyMapper.delete(deleteWrapper);
+    }
+
+    @Override
+    public void deleteByIdInBatch(List<Integer> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            return;
+        }
+        customerCompanyMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void updateById(CustomerCompany customerCompany) {
+        customerCompanyMapper.updateById(customerCompany);
+    }
+
+    @Override
+    public void updateByIdInBatch(List<CustomerCompany> customerCompanys) {
+        if (CollectionUtils.isEmpty(customerCompanys)) {
+            return;
+        }
+        for (CustomerCompany customerCompany: customerCompanys) {
+            this.updateById(customerCompany);
+        }
+    }
+
+    @Override
+    public CustomerCompany findById(Integer id) {
+        return customerCompanyMapper.selectById(id);
+    }
+
+    @Override
+    public CustomerCompany findOne(CustomerCompany customerCompany) {
+        QueryWrapper<CustomerCompany> wrapper = new QueryWrapper<>(customerCompany);
+        return customerCompanyMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<CustomerCompany> findList(CustomerCompany customerCompany) {
+        QueryWrapper<CustomerCompany> wrapper = new QueryWrapper<>(customerCompany);
+        return customerCompanyMapper.selectList(wrapper);
+    }
+  
+    @Override
+    public PageData<CustomerCompany> findPage(PageWrap<CustomerCompany> pageWrap) {
+        IPage<CustomerCompany> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        QueryWrapper<CustomerCompany> queryWrapper = new QueryWrapper<>();
+        Utils.MP.blankToNull(pageWrap.getModel());
+        if (pageWrap.getModel().getId() != null) {
+            queryWrapper.lambda().eq(CustomerCompany::getId, pageWrap.getModel().getId());
+        }
+        if (pageWrap.getModel().getCreator() != null) {
+            queryWrapper.lambda().eq(CustomerCompany::getCreator, pageWrap.getModel().getCreator());
+        }
+        if (pageWrap.getModel().getCreateDate() != null) {
+            queryWrapper.lambda().ge(CustomerCompany::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+            queryWrapper.lambda().le(CustomerCompany::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+        }
+        if (pageWrap.getModel().getEditor() != null) {
+            queryWrapper.lambda().eq(CustomerCompany::getEditor, pageWrap.getModel().getEditor());
+        }
+        if (pageWrap.getModel().getEditDate() != null) {
+            queryWrapper.lambda().ge(CustomerCompany::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+            queryWrapper.lambda().le(CustomerCompany::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+        }
+        if (pageWrap.getModel().getIsdeleted() != null) {
+            queryWrapper.lambda().eq(CustomerCompany::getIsdeleted, pageWrap.getModel().getIsdeleted());
+        }
+        if (pageWrap.getModel().getName() != null) {
+            queryWrapper.lambda().eq(CustomerCompany::getName, pageWrap.getModel().getName());
+        }
+        if (pageWrap.getModel().getRemark() != null) {
+            queryWrapper.lambda().eq(CustomerCompany::getRemark, pageWrap.getModel().getRemark());
+        }
+        if (pageWrap.getModel().getStatus() != null) {
+            queryWrapper.lambda().eq(CustomerCompany::getStatus, pageWrap.getModel().getStatus());
+        }
+        if (pageWrap.getModel().getSortnum() != null) {
+            queryWrapper.lambda().eq(CustomerCompany::getSortnum, pageWrap.getModel().getSortnum());
+        }
+        if (pageWrap.getModel().getCustomerServiceId() != null) {
+            queryWrapper.lambda().eq(CustomerCompany::getCustomerServiceId, pageWrap.getModel().getCustomerServiceId());
+        }
+        if (pageWrap.getModel().getCompanyId() != null) {
+            queryWrapper.lambda().eq(CustomerCompany::getCompanyId, pageWrap.getModel().getCompanyId());
+        }
+        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
+            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+                queryWrapper.orderByDesc(sortData.getProperty());
+            } else {
+                queryWrapper.orderByAsc(sortData.getProperty());
+            }
+        }
+        return PageData.from(customerCompanyMapper.selectPage(page, queryWrapper));
+    }
+
+    @Override
+    public long count(CustomerCompany customerCompany) {
+        QueryWrapper<CustomerCompany> wrapper = new QueryWrapper<>(customerCompany);
+        return customerCompanyMapper.selectCount(wrapper);
+    }
+}
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/CustomerServiceServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/CustomerServiceServiceImpl.java
new file mode 100644
index 0000000..64a784c
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/service/business/impl/CustomerServiceServiceImpl.java
@@ -0,0 +1,270 @@
+package com.doumee.service.business.impl;
+
+import cn.emay.sdk.util.StringUtil;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.model.LoginUserInfo;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.CustomerCompanyMapper;
+import com.doumee.dao.business.CustomerServiceMapper;
+import com.doumee.dao.business.join.CustomerCompanyJoinMapper;
+import com.doumee.dao.business.join.CustomerServiceJoinMapper;
+import com.doumee.dao.business.model.ApplyChagneDetail;
+import com.doumee.dao.business.model.Company;
+import com.doumee.dao.business.model.CustomerCompany;
+import com.doumee.dao.business.model.CustomerService;
+import com.doumee.dao.system.model.SystemUser;
+import com.doumee.service.business.CompanyService;
+import com.doumee.service.business.CustomerCompanyService;
+import com.doumee.service.business.CustomerServiceService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.base.mapper.MPJJoinMapper;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import io.swagger.models.auth.In;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.SecurityUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 瀹㈡湇淇℃伅琛⊿ervice瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2024/11/05 18:41
+ */
+@Service
+public class CustomerServiceServiceImpl implements CustomerServiceService {
+
+    @Autowired
+    private CustomerServiceMapper customerServiceMapper;
+
+    @Autowired
+    private CustomerCompanyMapper customerCompanyMapper;
+
+    @Autowired
+    private CustomerServiceJoinMapper customerServiceJoinMapper;
+
+    @Autowired
+    private CustomerCompanyJoinMapper customerCompanyJoinMapper;
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+    public Integer create(CustomerService customerService) {
+        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        if(Objects.isNull(customerService)
+        || StringUtils.isBlank(customerService.getMobile())
+        || StringUtils.isBlank(customerService.getName())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        if(customerServiceMapper.selectCount(new QueryWrapper<CustomerService>().lambda()
+                .eq(CustomerService::getMobile,customerService.getMobile()))>Constants.ZERO){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎵嬫満鍙穂"+customerService.getMobile()+"]宸插瓨鍦ㄥ鏈嶆暟鎹�");
+        }
+        customerService.setCreator(loginUserInfo.getId());
+        customerService.setCreateDate(new Date());
+        customerService.setIsdeleted(Constants.ZERO);
+        customerServiceMapper.insert(customerService);
+
+        return customerService.getId();
+    }
+
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+    public void authCompany(CustomerService customerService){
+        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        if(Objects.isNull(customerService)
+                || Objects.isNull(customerService.getId())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        customerCompanyMapper.delete(new QueryWrapper<CustomerCompany>().lambda().eq(CustomerCompany::getCustomerServiceId,customerService.getId()));
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(customerService.getCustomerCompanyList())){
+            List<CustomerCompany> customerCompanyList = customerService.getCustomerCompanyList();
+            //鍒ゆ柇鏁版嵁鏄惁瀛樺湪寮傚父
+            for (CustomerCompany customerCompany:customerCompanyList) {
+                if(Objects.isNull(customerCompany.getCompanyId())){
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST);
+                }
+            }
+            List<Integer> companyIdList = customerCompanyList.stream().map(m->m.getCompanyId()).collect(Collectors.toList());
+            //鏌ヨ褰撳墠閫変腑鐨勭粍缁囨槸鍚﹀凡琚坊鍔犲瓨鍦�
+            if(customerCompanyMapper.selectCount(new QueryWrapper<CustomerCompany>().lambda().in(CustomerCompany::getCompanyId,companyIdList))>0){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀛樺湪浼佷笟鏁版嵁宸茶娣诲姞锛岃鍒锋柊閲嶈瘯");
+            };
+            for (CustomerCompany customerCompany:customerCompanyList) {
+                customerCompany.setCustomerServiceId(customerService.getId());
+                customerCompany.setCreator(loginUserInfo.getId());
+                customerCompany.setCreateDate(new Date());
+                customerCompany.setCustomerServiceId(customerService.getId());
+                customerCompany.setIsdeleted(Constants.ZERO);
+                customerCompanyMapper.insert(customerCompany);
+            }
+        }
+    }
+
+
+    @Override
+    public void deleteById(Integer id) {
+        customerServiceMapper.deleteById(id);
+        customerCompanyMapper.delete(new QueryWrapper<CustomerCompany>().lambda().eq(CustomerCompany::getCustomerServiceId,id));
+    }
+
+    @Override
+    public void delete(CustomerService customerService) {
+        UpdateWrapper<CustomerService> deleteWrapper = new UpdateWrapper<>(customerService);
+        customerServiceMapper.delete(deleteWrapper);
+    }
+
+    @Override
+    public void deleteByIdInBatch(List<Integer> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            return;
+        }
+        customerServiceMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+    public void updateById(CustomerService customerService) {
+        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        if(Objects.isNull(customerService)
+                || Objects.isNull(customerService.getId())
+                || StringUtils.isBlank(customerService.getMobile())
+                || StringUtils.isBlank(customerService.getName())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        CustomerService model = customerServiceMapper.selectById(customerService.getId());
+        if(Objects.isNull(model)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+
+        if(customerServiceMapper.selectCount(new QueryWrapper<CustomerService>().lambda()
+                        .ne(CustomerService::getId,customerService.getId())
+                .eq(CustomerService::getMobile,customerService.getMobile()))>Constants.ZERO){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎵嬫満鍙穂"+customerService.getMobile()+"]宸插瓨鍦ㄥ鏈嶆暟鎹�");
+        }
+        customerService.setEditor(loginUserInfo.getId());
+        customerService.setEditDate(new Date());
+        customerServiceMapper.updateById(customerService);
+    }
+
+    @Override
+    public void updateByIdInBatch(List<CustomerService> customerServices) {
+        if (CollectionUtils.isEmpty(customerServices)) {
+            return;
+        }
+        for (CustomerService customerService: customerServices) {
+            this.updateById(customerService);
+        }
+    }
+
+    @Override
+    public CustomerService findById(Integer id) {
+        CustomerService customerService = customerServiceMapper.selectById(id);
+        List<CustomerCompany> customerCompanyList = customerCompanyJoinMapper.
+                selectJoinList(CustomerCompany.class,
+                        new MPJLambdaWrapper<CustomerCompany>()
+                                .selectAll(CustomerCompany.class)
+                                .selectAs(Company::getName,CustomerCompany::getCompanyName)
+                                .leftJoin(Company.class,Company::getId,CustomerCompany::getCompanyId)
+                                .eq(CustomerCompany::getCustomerServiceId,id));
+        customerService.setCustomerCompanyList(customerCompanyList);
+        return customerService;
+    }
+
+    @Override
+    public CustomerService findOne(CustomerService customerService) {
+        QueryWrapper<CustomerService> wrapper = new QueryWrapper<>(customerService);
+        return customerServiceMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<CustomerService> findList(CustomerService customerService) {
+        QueryWrapper<CustomerService> wrapper = new QueryWrapper<>(customerService);
+        return customerServiceMapper.selectList(wrapper);
+    }
+  
+    @Override
+    public PageData<CustomerService> findPage(PageWrap<CustomerService> pageWrap) {
+        IPage<CustomerService> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        MPJLambdaWrapper<CustomerService> queryWrapper = new MPJLambdaWrapper<CustomerService>();
+        Utils.MP.blankToNull(pageWrap.getModel());
+        queryWrapper.selectAll(CustomerService.class);
+        queryWrapper.selectAs(SystemUser::getRealname,CustomerService::getCreateUserName);
+        queryWrapper.select(" ( select count(1) from customer_company cc where cc.CUSTOMER_SERVICE_ID = t.id ) as companyNum ");
+        queryWrapper.leftJoin(SystemUser.class,SystemUser::getId,CustomerService::getCreator);
+        queryWrapper.eq(CustomerService::getIsdeleted,Constants.ZERO);
+
+        if (pageWrap.getModel().getStatus() != null) {
+            queryWrapper.eq(CustomerService::getStatus, pageWrap.getModel().getStatus());
+        }
+        if (pageWrap.getModel().getSortnum() != null) {
+            queryWrapper.eq(CustomerService::getSortnum, pageWrap.getModel().getSortnum());
+        }
+        if (pageWrap.getModel().getName() != null) {
+            queryWrapper.like(CustomerService::getName, pageWrap.getModel().getName());
+        }
+        if (pageWrap.getModel().getMobile() != null) {
+            queryWrapper.like(CustomerService::getMobile, pageWrap.getModel().getMobile());
+        }
+
+        if (pageWrap.getModel().getCompanyName() != null) {
+            queryWrapper.apply(" t.id in ( select cc.COMPANY_ID from customer_company cc inner join company c on cc.COMPANY_ID = c.id where c.name like '%"+pageWrap.getModel().getCompanyName()+"%' )  ");
+        }
+
+        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
+            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+                queryWrapper.orderByDesc(sortData.getProperty());
+            } else {
+                queryWrapper.orderByAsc(sortData.getProperty());
+            }
+        }
+        PageData<CustomerService> pageData = PageData.from(customerServiceJoinMapper.selectJoinPage(page,CustomerService.class, queryWrapper));
+        return pageData;
+    }
+
+    @Override
+    public long count(CustomerService customerService) {
+        QueryWrapper<CustomerService> wrapper = new QueryWrapper<>(customerService);
+        return customerServiceMapper.selectCount(wrapper);
+    }
+
+    /**
+     * 鏍规嵁浼佷笟鏌ヨ瀹㈡湇浜哄憳
+     * @param companyId
+     * @return
+     */
+    @Override
+    public CustomerService findByCompanyId(Integer companyId) {
+        CustomerCompany customerCompany = customerCompanyMapper.selectOne(new QueryWrapper<CustomerCompany>()
+                .lambda().eq(CustomerCompany::getCompanyId,companyId)
+                .last(" limit 1 ")
+        );
+        if(Objects.nonNull(customerCompany)){
+            CustomerService customerService = customerServiceMapper.selectById(customerCompany.getCustomerServiceId());
+            if(Objects.isNull(customerService)){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈厤缃鏈嶄汉鍛橈紝璇疯仈绯荤鐞嗗憳");
+            }
+            return customerService;
+        }else{
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈厤缃鏈嶄汉鍛橈紝璇疯仈绯荤鐞嗗憳");
+        }
+    }
+
+
+}
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java
index 57636f3..1242d29 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/InsuranceApplyServiceImpl.java
@@ -15,13 +15,12 @@
 import com.doumee.core.utils.Utils;
 import com.doumee.core.utils.aliyun.ALiYunUtil;
 import com.doumee.dao.business.*;
-import com.doumee.dao.business.dto.CountCyclePriceDTO;
-import com.doumee.dao.business.dto.InsuranceApplyOptDTO;
-import com.doumee.dao.business.dto.InsuranceApplyQueryDTO;
-import com.doumee.dao.business.dto.SmsCheckDTO;
+import com.doumee.dao.business.dto.*;
 import com.doumee.dao.business.join.*;
 import com.doumee.dao.business.model.*;
+import com.doumee.dao.business.vo.ApplyPowerVO;
 import com.doumee.dao.business.vo.CountCyclePriceVO;
+import com.doumee.dao.system.SystemUserMapper;
 import com.doumee.dao.system.model.SystemUser;
 import com.doumee.service.business.InsuranceApplyService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -104,6 +103,8 @@
     private DuWorktypeMapper duWorktypeMapper;
     @Autowired
     private DuWorkTypeJoinMapper duWorkTypeJoinMapper;
+    @Autowired
+    private SolutionWorktypeJoinMapper solutionWorktypeJoinMapper;
 
     @Autowired
     private NoticesMapper noticesMapper;
@@ -113,6 +114,13 @@
     private UnionChangeJoinMapper unionChangeJoinMapper;
     @Autowired
     private CompanySolutionMapper companySolutionMapper;
+    @Autowired
+    private ContractJoinMapper contractJoinMapper;
+    @Autowired
+    private SystemUserMapper systemUserMapper;
+    @Autowired
+    private CompanyDepartmentMapper companyDepartmentMapper;
+
 
     @Override
     @Transactional(rollbackFor = {Exception.class,BusinessException.class})
@@ -314,7 +322,7 @@
             for (ApplyDetail applyDetail:applyDetailList) {
 
                 //鏌ヨ浜哄憳淇℃伅鏄惁瀛樺湪鐩稿悓鐨勬柟妗堜笅鏄惁瀛樺湪 鍐茬獊鏁版嵁
-                this.checkMemberSolution(solutions.getBaseId(),applyDetail.getIdcardNo(),applyDetail.getMemberName(),update.getStartTime()
+                this.checkMemberSolution(solutions.getParentId(),applyDetail.getIdcardNo(),applyDetail.getMemberName(),update.getStartTime()
                         ,update.getEndTime(),insuranceApply.getId());
 
                 MemberInsurance memberInsurance = new MemberInsurance(applyDetail,user.getId());
@@ -354,8 +362,11 @@
         if(model == null ||!Constants.equalsInteger(model.getIsdeleted(),Constants.ZERO)){
             throw  new BusinessException(ResponseStatus.DATA_EMPTY);
         }
-        if(!Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())){
-            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ョ敵璇峰綋鍓嶄笉鏀寔璇ユ搷浣渵");
+        if(Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey()) ||
+                Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.WTB_DONE.getKey()) ){
+            if(model.getStartTime().getTime()<System.currentTimeMillis()){
+                throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ョ敵璇峰綋鍓嶄笉鏀寔璇ユ搷浣渵");
+            }
         }
 
         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
@@ -564,9 +575,29 @@
 
     public Multifile   uploadSignedFileDo(InsuranceApply model,String fileurl,String fullUrl) {
         InsuranceApply update = new InsuranceApply();
+        Boolean retrial = false;
+        Solutions solutions = solutionsMapper.selectById(model.getSolutionId());
+        if(Constants.equalsInteger(solutions.getRetrial(),Constants.ONE)){
+           ApplyLog applyLog =  applyLogMapper.selectOne(new QueryWrapper<ApplyLog>().lambda()
+                    .eq(ApplyLog::getObjId,model.getId())
+                   .eq(ApplyLog::getObjType,Constants.ApplyLogType.PLATFORM_CHECK_PASS.getKey())
+                   .orderByDesc(ApplyLog::getCreateDate)
+                   .last(" limit 1 ")
+            );
+           if(Objects.nonNull(applyLog)){
+               SystemUser systemUser = systemUserMapper.selectById(applyLog.getCreator());
+               if(Objects.nonNull(systemUser) && Objects.nonNull(systemUser.getDepartmentId())){
+                   CompanyDepartment companyDepartment = companyDepartmentMapper.selectById(systemUser.getDepartmentId());
+                   if(Objects.nonNull(companyDepartment)&&Objects.nonNull(companyDepartment.getHeadId())){
+                       retrial = true;
+                       update.setRetrialId(companyDepartment.getHeadId());
+                   }
+               }
+           }
+        }
         update.setEditDate(new Date());
         update.setEditor(model.getCreator());
-        update.setStatus(Constants.InsuranceApplyStatus.SIGNATURE.getKey());
+        update.setStatus(retrial?Constants.InsuranceApplyStatus.REEXAMINE.getKey():Constants.InsuranceApplyStatus.SIGNATURE.getKey());
         update.setCheckDate(update.getEditDate());
         update.setCheckInfo("浼佷笟瀹屾垚绛剧讲");
         update.setCheckUserId(model.getCreator());
@@ -575,10 +606,13 @@
 
         //瀛樺偍寰呭姙淇℃伅
         Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.INSURANCE_APPLY;
+
         //鍒犻櫎鍏朵粬寰呭姙
-        noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey())
+        noticesMapper.delete(new QueryWrapper<Notices>().lambda()
+                .eq(Notices::getObjType,noticeObjectType.getKey())
                 .ne(Notices::getType,Constants.NoticeType.SIX.getStatus())
                 .eq(Notices::getObjId,model.getId()));
+
         //骞冲彴寰呭姙
         Notices notices = new Notices(noticeObjectType,Constants.ZERO,model.getId(),model.getSolutionsName(),model.getCompanyId(),Constants.NoticeType.TWO);
         noticesMapper.insert(notices);
@@ -859,9 +893,9 @@
         UnionApply update = new UnionApply();
         update.setEditDate(new Date());
         update.setEditor(model.getCreator());
-        update.setStatus(Constants.UnionApplyStatus.UPLOAD_INSURANCE_POLICY.getKey());
+        update.setStatus(Objects.nonNull(model.getRetrialId())?Constants.UnionApplyStatus.RETRIAL.getKey() : Constants.UnionApplyStatus.UPLOAD_INSURANCE_POLICY.getKey());
         update.setCheckDate(update.getEditDate());
-        update.setCheckInfo("鍟嗘埛瀹屾垚绛剧讲");
+        update.setCheckInfo(Objects.nonNull(model.getRetrialId())?"寰呭瀹�":"瀹屾垚绛剧讲");
         update.setCheckUserId(model.getCreator());
         update.setId(model.getId());
         unionApplyJoinMapper.updateById(update);
@@ -879,10 +913,35 @@
         f.setName("鍟嗘埛绛剧讲鎶曚繚鍗�.pdf");
         multifileMapper.insert(f);
 
+
+        List<InsuranceApply> insuranceApplyList = insuranceApplyJoinMapper.selectList(new QueryWrapper<InsuranceApply>().
+                lambda().eq(InsuranceApply::getUnionApplyId,model.getId()));
+        if(CollectionUtils.isNotEmpty(insuranceApplyList)){
+            for (InsuranceApply insuranceApply:insuranceApplyList) {
+
+                f.setId(null);
+                f.setIsdeleted(Constants.ZERO);
+                f.setCreateDate(new Date());
+                f.setObjType(Constants.MultiFile.BD_SIGNED_PDF.getKey());
+                f.setType(Constants.TWO);
+                f.setObjId(insuranceApply.getId());
+                f.setInfo("鎶曚繚鍗�");
+                f.setName("鎶曚繚鍗�.pdf");
+                multifileMapper.insert(f);
+
+                insuranceApplyJoinMapper.update(null,new UpdateWrapper<InsuranceApply>().lambda()
+                        .set(InsuranceApply::getUnionApplyTbdStatus,Constants.TWO)
+                        .set(InsuranceApply::getEditDate,new Date())
+                        .eq(InsuranceApply::getId,insuranceApply.getId())
+                );
+            }
+        }
+
         Constants.ApplyLogType applyLogType = Constants.ApplyLogType.IA_HBD_SIGNATURE_TBD;
         ApplyLog log = new ApplyLog(model,applyLogType.getName(), null
                 ,model.getId(),applyLogType.getKey(),null, JSONObject.toJSONString(model));
         applyLogMapper.insert(log);
+
 
         return  f;
     }
@@ -923,6 +982,128 @@
 
         return  f;
     }
+
+
+    public Multifile   uploadContractFirstSignedFileDo(Contract model,String fileurl,String fullUrl) {
+        Contract update = new Contract();
+        update.setEditDate(new Date());
+        update.setEditor(model.getCreator());
+        update.setFileSignUrl(fileurl);
+        update.setStatus(Constants.equalsInteger(model.getType(),Constants.ZERO)?Constants.ONE:Constants.THREE);
+        update.setId(model.getId());
+        contractJoinMapper.updateById(update);
+
+        Multifile f = new Multifile();
+        f.setIsdeleted(Constants.ZERO);
+        f.setCreator(model.getCreator());
+        f.setObjId(update.getId());
+        f.setCreateDate(update.getEditDate());
+        f.setObjType(Constants.MultiFile.CONTRACT_FIRST_PDF.getKey());
+        f.setType(Constants.TWO);
+        f.setFileurl(fileurl);
+        f.setFileurlFull(fullUrl);
+        f.setInfo("鍚堝悓绛剧讲鏂囦欢");
+        f.setName("鍚堝悓绛剧讲鏂囦欢.pdf");
+        multifileMapper.insert(f);
+
+        //瀛樺偍寰呭姙淇℃伅
+        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.CONTRACT;
+        //鍒犻櫎鍏朵粬寰呭姙
+        noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey())
+                .ne(Notices::getType,Constants.NoticeType.SIX.getStatus())
+                .eq(Notices::getObjId,model.getId()));
+        //鍙屾柟绛剧讲 鎵嶄細鍙戞柊閫氱煡
+        if(Constants.equalsInteger(model.getType(),Constants.ZERO)){
+            Notices notices = new Notices(noticeObjectType,
+                    Constants.equalsInteger(model.getSignType(),Constants.ZERO)?Constants.TWO:Constants.ONE
+                    ,model.getId(),this.getNoticeInfo(model,companyMapper.selectById(model.getCompanyId())),model.getCompanyId(),Constants.NoticeType.ZERO);
+            noticesMapper.insert(notices);
+        }
+        return  f;
+    }
+
+    public String getNoticeInfo(Contract contract,Company company){
+        String noticeInfo = contract.getName();
+        //鍟嗘埛淇℃伅
+        if(Constants.equalsInteger(contract.getSignType(),Constants.TWO)){
+            Company shop = companyMapper.selectById(contract.getPartyCompanyId());
+            noticeInfo  = noticeInfo + "("+shop.getName()+"/"+company.getName()+")";
+        }else{
+            noticeInfo  = noticeInfo + "(骞冲彴/"+company.getName()+")";
+        }
+        return noticeInfo;
+    }
+
+
+
+    public Multifile  uploadContractDoneSignedFileDo(Contract model,String fileurl,String fullUrl) {
+        Contract update = new Contract();
+        update.setEditDate(new Date());
+        update.setEditor(model.getCreator());
+        update.setDoneFileUrl(fileurl);
+        update.setStatus(Constants.THREE);
+        update.setId(model.getId());
+        contractJoinMapper.updateById(update);
+
+        Multifile f = new Multifile();
+        f.setIsdeleted(Constants.ZERO);
+        f.setCreator(model.getCreator());
+        f.setObjId(update.getId());
+        f.setCreateDate(update.getEditDate());
+        f.setObjType(Constants.MultiFile.CONTRACT_DONE_PDF.getKey());
+        f.setType(Constants.TWO);
+        f.setFileurl(fileurl);
+        f.setFileurlFull(fullUrl);
+        f.setInfo("鍚堝悓绛剧讲鏂囦欢");
+        f.setName("鍚堝悓绛剧讲鏂囦欢.pdf");
+        multifileMapper.insert(f);
+
+        //瀛樺偍寰呭姙淇℃伅
+        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.CONTRACT;
+        //鍒犻櫎鍏朵粬寰呭姙
+        noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey())
+                .ne(Notices::getType,Constants.NoticeType.SIX.getStatus())
+                .eq(Notices::getObjId,model.getId()));
+
+        return  f;
+    }
+
+
+    public Multifile  uploadCompanySolutionSignedFileDo(CompanySolution model,String fileurl,String fullUrl) {
+        CompanySolution update = new CompanySolution();
+        update.setEditDate(new Date());
+        update.setEditor(model.getCreator());
+        update.setFileSignUrl(fileurl);
+        update.setSignStatus(Constants.ONE);
+        update.setSignUserId(model.getEditor());
+        update.setSignDate(new Date());
+        update.setId(model.getId());
+        companySolutionMapper.updateById(update);
+
+        Multifile f = new Multifile();
+        f.setIsdeleted(Constants.ZERO);
+        f.setCreator(model.getCreator());
+        f.setObjId(update.getId());
+        f.setCreateDate(update.getEditDate());
+        f.setObjType(Constants.MultiFile.COMPANY_SOLUTION_SIGN_PDF.getKey());
+        f.setType(Constants.TWO);
+        f.setFileurl(fileurl);
+        f.setFileurlFull(fullUrl);
+        f.setInfo("鏂规纭涔�");
+        f.setName("鏂规纭涔�.pdf");
+        multifileMapper.insert(f);
+
+        //瀛樺偍寰呭姙淇℃伅
+        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.SOLUTIONS;
+        //鍒犻櫎鍏朵粬寰呭姙
+        noticesMapper.delete(new QueryWrapper<Notices>().lambda().eq(Notices::getObjType,noticeObjectType.getKey())
+                .ne(Notices::getType,Constants.NoticeType.SIX.getStatus())
+                .eq(Notices::getObjId,model.getId()));
+
+        return  f;
+    }
+
+
 
     private void startSendEmail(Multifile f, String companyName, String solutionsName, String solutionEmail) {
         if(StringUtils.isBlank(solutionEmail) || f==null|| StringUtils.isBlank(f.getFileurl())){
@@ -1180,8 +1361,79 @@
         }
 
 
+        /**
+         * 鎴戞柟绛剧讲 鍚堝悓淇℃伅
+         */
+        List<Contract> contractFirstList = contractJoinMapper.selectJoinList(Contract.class,
+                new MPJLambdaWrapper<Contract>()
+                        .selectAll(Contract.class)
+                        .eq(Contract::getStatus,Constants.ZERO)
+                        .isNotNull(Contract::getApplyNo));
+        if(contractFirstList !=null && contractFirstList.size()>0 ){
+            for(Contract contract : contractFirstList){
+                String status = signService.linkFileStatus(contract.getApplyNo());
+                if(!StringUtils.equals(status,"3")){
+                    continue;
+                }
+                String link = signService.linkFile(contract.getApplyNo());
+                String fileUrl = uploadSignFile(link);
+                if(StringUtils.isBlank(fileUrl)){
+                    //濡傛灉涓嬭浇澶辫触锛屾竻闄ゅ悎鍚岋紝涓嬫绛剧珷閲嶆柊鐢熸垚鏂板悎鍚�
+                    continue;
+                }
+                uploadContractFirstSignedFileDo(contract,fileUrl,path+fileUrl);
+            }
+        }
 
+
+        /**
+         * 浼佷笟/鍟嗘埛绛剧讲 鍚堝悓淇℃伅
+         */
+        List<Contract> contractDoneList = contractJoinMapper.selectJoinList(Contract.class,
+                new MPJLambdaWrapper<Contract>()
+                        .selectAll(Contract.class)
+                        .eq(Contract::getStatus,Constants.ONE)
+                        .isNotNull(Contract::getDoneApplyNo));
+        if(contractDoneList !=null && contractDoneList.size()>0 ){
+            for(Contract contract : contractDoneList){
+                String status = signService.linkFileStatus(contract.getDoneApplyNo());
+                if(!StringUtils.equals(status,"3")){
+                    continue;
+                }
+                String link = signService.linkFile(contract.getDoneApplyNo());
+                String fileUrl = uploadSignFile(link);
+                if(StringUtils.isBlank(fileUrl)){
+                    //濡傛灉涓嬭浇澶辫触锛屾竻闄ゅ悎鍚岋紝涓嬫绛剧珷閲嶆柊鐢熸垚鏂板悎鍚�
+                    continue;
+                }
+                uploadContractDoneSignedFileDo(contract,fileUrl,path+fileUrl);
+            }
+        }
+
+        /**
+         * 浼佷笟 鏂规纭涔︾缃�
+         */
+        List<CompanySolution> companySolutionList = companySolutionMapper.selectList(
+                new QueryWrapper<CompanySolution>().lambda()
+                        .eq(CompanySolution::getSignStatus,Constants.ZERO)
+                        .isNotNull(CompanySolution::getApplyNo));
+        if(companySolutionList !=null && companySolutionList.size()>0 ){
+            for(CompanySolution companySolution : companySolutionList){
+                String status = signService.linkFileStatus(companySolution.getApplyNo());
+                if(!StringUtils.equals(status,"3")){
+                    continue;
+                }
+                String link = signService.linkFile(companySolution.getApplyNo());
+                String fileUrl = uploadSignFile(link);
+                if(StringUtils.isBlank(fileUrl)){
+                    //濡傛灉涓嬭浇澶辫触锛屾竻闄ゅ悎鍚岋紝涓嬫绛剧珷閲嶆柊鐢熸垚鏂板悎鍚�
+                    continue;
+                }
+                uploadCompanySolutionSignedFileDo(companySolution,fileUrl,path+fileUrl);
+            }
+        }
     }
+
     @Override
     public   String dealSignResult(NotifyDataReq data){
         if(data.getApplyNo() == null ){
@@ -1224,6 +1476,19 @@
             if(StringUtils.isNotBlank(r)){
                 return  r;
             }
+            r = dealContractFirstBiz(path,data,"鍚堝悓鎴戞柟绛剧讲");
+            if(StringUtils.isNotBlank(r)){
+                return  r;
+            }
+            r = dealContractDoneBiz(path,data,"鍚堝悓浼佷笟/鍟嗘埛绛剧讲");
+            if(StringUtils.isNotBlank(r)){
+                return  r;
+            }
+            r = dealCompanySolutionBiz(path,data,"浼佷笟绛剧讲鏂规纭涔�");
+            if(StringUtils.isNotBlank(r)){
+                return  r;
+            }
+
         }
         return "鏃犲鐞嗘暟鎹�";
     }
@@ -1253,6 +1518,100 @@
                 unionChangeJoinMapper.update(null,new UpdateWrapper<UnionChange>().lambda()
                         .set(UnionChange::getSignApplyNo,null)
                         .eq(UnionChange::getSignApplyNo,data.getApplyNo()));
+                return title+"鍚堝悓鎷掔澶勭悊鎴愬姛";
+            }
+        }
+        return  title+"鐘舵�佸凡娴佽浆锛屼笉鍋氬鐞�";
+    }
+
+    private String dealContractFirstBiz(String path, NotifyDataReq data, String title) {
+        Contract contract = contractJoinMapper.selectOne(new QueryWrapper<Contract>()
+                .lambda().
+                eq(Contract::getApplyNo,data.getApplyNo())
+                .last(" limit 1")
+        );
+
+        if(contract == null){
+            return null;
+        }
+        if( Constants.equalsInteger(contract.getStatus(),Constants.ONE)){
+            if(Constants.equalsInteger(data.getSignStatus(), Constants.THREE )){
+                //瀹屾垚绛剧讲宸插畬鎴愭搷浣�
+                String link = signService.linkFile(contract.getApplyNo());
+                String fileUrl = uploadSignFile(link);
+                if(StringUtils.isBlank(fileUrl)){
+                    //濡傛灉涓嬭浇澶辫触锛屾竻闄ゅ悎鍚岋紝涓嬫绛剧珷閲嶆柊鐢熸垚鏂板悎鍚�
+                    return title+"鍚堝悓涓嬭浇澶辫触锛岀瓑寰呬笅娆℃帹閫佸鐞�";
+                }
+
+                uploadContractFirstSignedFileDo(contract,fileUrl,path+fileUrl);
+                return title+"鐘舵�佸鐞嗘垚鍔�";
+            }else{
+                //濡傛灉宸叉嫆绛撅紝娓呴櫎鍚堝悓锛屼笅娆$绔犻噸鏂扮敓鎴愭柊鍚堝悓
+                contractJoinMapper.update(null,new UpdateWrapper<Contract>().lambda()
+                        .set(Contract::getApplyNo,null)
+                        .eq(Contract::getApplyNo,data.getApplyNo()));
+                return title+"鍚堝悓鎷掔澶勭悊鎴愬姛";
+            }
+        }
+        return  title+"鐘舵�佸凡娴佽浆锛屼笉鍋氬鐞�";
+    }
+
+    private String dealContractDoneBiz(String path, NotifyDataReq data, String title) {
+        Contract contract = contractJoinMapper.selectOne(new QueryWrapper<Contract>()
+                .lambda().
+                eq(Contract::getDoneApplyNo,data.getApplyNo())
+                .last(" limit 1")
+        );
+        if(contract == null){
+            return null;
+        }
+        if( Constants.equalsInteger(contract.getStatus(),Constants.THREE)){
+            if(Constants.equalsInteger(data.getSignStatus(), Constants.THREE )){
+                //瀹屾垚绛剧讲宸插畬鎴愭搷浣�
+                String link = signService.linkFile(contract.getDoneApplyNo());
+                String fileUrl = uploadSignFile(link);
+                if(StringUtils.isBlank(fileUrl)){
+                    //濡傛灉涓嬭浇澶辫触锛屾竻闄ゅ悎鍚岋紝涓嬫绛剧珷閲嶆柊鐢熸垚鏂板悎鍚�
+                    return title+"鍚堝悓涓嬭浇澶辫触锛岀瓑寰呬笅娆℃帹閫佸鐞�";
+                }
+                uploadContractDoneSignedFileDo(contract,fileUrl,path+fileUrl);
+                return title+"鐘舵�佸鐞嗘垚鍔�";
+            }else{
+                //濡傛灉宸叉嫆绛撅紝娓呴櫎鍚堝悓锛屼笅娆$绔犻噸鏂扮敓鎴愭柊鍚堝悓
+                contractJoinMapper.update(null,new UpdateWrapper<Contract>().lambda()
+                        .set(Contract::getDoneApplyNo,null)
+                        .eq(Contract::getDoneApplyNo,data.getApplyNo()));
+                return title+"鍚堝悓鎷掔澶勭悊鎴愬姛";
+            }
+        }
+        return  title+"鐘舵�佸凡娴佽浆锛屼笉鍋氬鐞�";
+    }
+    private String dealCompanySolutionBiz(String path, NotifyDataReq data, String title) {
+        CompanySolution companySolution = companySolutionMapper.selectOne(new QueryWrapper<CompanySolution>()
+                .lambda().
+                eq(CompanySolution::getApplyNo,data.getApplyNo())
+                .last(" limit 1")
+        );
+        if(companySolution == null){
+            return null;
+        }
+        if( Constants.equalsInteger(companySolution.getSignStatus(),Constants.ZERO)){
+            if(Constants.equalsInteger(data.getSignStatus(), Constants.THREE )){
+                //瀹屾垚绛剧讲宸插畬鎴愭搷浣�
+                String link = signService.linkFile(companySolution.getApplyNo());
+                String fileUrl = uploadSignFile(link);
+                if(StringUtils.isBlank(fileUrl)){
+                    //濡傛灉涓嬭浇澶辫触锛屾竻闄ゅ悎鍚岋紝涓嬫绛剧珷閲嶆柊鐢熸垚鏂板悎鍚�
+                    return title+"鍚堝悓涓嬭浇澶辫触锛岀瓑寰呬笅娆℃帹閫佸鐞�";
+                }
+                uploadCompanySolutionSignedFileDo(companySolution,fileUrl,path+fileUrl);
+                return title+"鐘舵�佸鐞嗘垚鍔�";
+            }else{
+                //濡傛灉宸叉嫆绛撅紝娓呴櫎鍚堝悓锛屼笅娆$绔犻噸鏂扮敓鎴愭柊鍚堝悓
+                companySolutionMapper.update(null,new UpdateWrapper<CompanySolution>().lambda()
+                        .set(CompanySolution::getApplyNo,null)
+                        .eq(CompanySolution::getApplyNo,data.getApplyNo()));
                 return title+"鍚堝悓鎷掔澶勭悊鎴愬姛";
             }
         }
@@ -1607,7 +1966,7 @@
      */
     @Override
     @Transactional(rollbackFor = {Exception.class,BusinessException.class})
-    public Integer check(InsuranceApply insuranceApply) {
+    public Integer check(InsuranceApply insuranceApply,UnionApplyServiceImpl unionApplyServiceImpl) {
         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
         if(insuranceApply.getId() == null){
             throw  new BusinessException(ResponseStatus.BAD_REQUEST);
@@ -1626,9 +1985,6 @@
                 throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ョ敵璇风姸鎬佸凡娴佽浆锛屽綋鍓嶄笉鏀寔璇ユ搷浣渵");
             }
         }else{
-            if(!Constants.equalsObject(user.getType(),Constants.TWO)){
-                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炲晢鎴风鏃犳硶杩涜璇ユ搷浣�");
-            }
             //濮旀墭淇濆緟绛剧讲銆佸緟瀹℃牳鍙繘琛岄��鍥炴搷浣�
             if(!(Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.WTB_UPLOAD.getKey())
                     ||Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.WTB_COMPANY_APPLY_SIGNATURE.getKey())
@@ -1687,8 +2043,122 @@
         }
         ApplyLog log = new ApplyLog(update,applyLogType.getName(),info,update.getId(),applyLogType.getKey(),JSONObject.toJSONString(model), JSONObject.toJSONString(update));
         applyLogMapper.insert(log);
-        return  1;
+        //2024骞�11鏈�8鏃�16:12:43 濡傛灉鏄鎵樻姇淇濆崟鍒欒嚜鍔ㄥ垱寤哄悎骞跺崟鏁版嵁
+        if(Constants.equalsInteger(insuranceApply.getDealBackApply(),Constants.ZERO) && Constants.equalsObject(solutions.getType(),Constants.ONE)){
+            SaveUnionApplyDTO saveUnionApplyDTO = new SaveUnionApplyDTO();
+            List<Integer> applyIds = new ArrayList<Integer>();
+            applyIds.add(update.getId());
+            saveUnionApplyDTO.setApplyIds(applyIds);
+            saveUnionApplyDTO.setBaseSolutionId(solutions.getBaseId());
+            saveUnionApplyDTO.setStartDate(model.getStartTime());
+            saveUnionApplyDTO.setEndDate(model.getEndTime());
+            unionApplyServiceImpl.merge(saveUnionApplyDTO);
+        }
 
+        return  1;
+    }
+
+    /**
+     * 澶嶅 瀹℃牳閫氳繃鎴栬�呬笉閫氳繃
+     * @param insuranceApply
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+    public Integer reexamineCheck(InsuranceApply insuranceApply) {
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        if(insuranceApply.getId() == null){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        InsuranceApply model = insuranceApplyMapper.selectById(insuranceApply.getId());
+
+        if(model == null ||!Constants.equalsInteger(model.getIsdeleted(),Constants.ZERO)){
+            throw  new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        Solutions solutions = solutionsMapper.selectById(model.getSolutionId());
+        if(Objects.isNull(solutions)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈡柟妗堜俊鎭�");
+        }
+        if(Constants.equalsObject(solutions.getType(),Constants.ZERO)){
+            if(!Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.REEXAMINE.getKey())){
+                throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ョ敵璇风姸鎬佸凡娴佽浆锛屽綋鍓嶄笉鏀寔璇ユ搷浣渵");
+            }
+        }else{
+            if(Constants.equalsObject(user.getType(),Constants.ONE)){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"浼佷笟鐢ㄦ埛鏃犳硶杩涜璇ユ搷浣�");
+            }
+            //濡傛灉鏄晢鎴风锛屽垯鍙兘鐢辨寚瀹氫汉杩涜澶勭悊
+            if(Constants.equalsInteger(user.getType(),Constants.TWO)){
+                if(!Constants.equalsInteger(model.getRetrialId(),user.getId())){
+                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炴偍鐨勫瀹℃暟鎹紝鏃犳硶杩涜瀹℃壒");
+                }
+            }else{
+                //濡傛灉鏄钩鍙扮锛屾牴鎹汉鍛樼被鍨嬪鐞� 濡傛灉鏄浐瀹氫汉鍛樺垯涓嶉檺鍒� 鍏朵粬浜哄憳闇�瑕佹瘮瀵�
+                if(!user.getFixed()){
+                    if(!Constants.equalsInteger(model.getRetrialId(),user.getId())){
+                        throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炴偍鐨勫瀹℃暟鎹紝鏃犳硶杩涜瀹℃壒");
+                    }
+                }
+            }
+            //濮旀墭淇濆緟绛剧讲銆佸緟瀹℃牳鍙繘琛岄��鍥炴搷浣�
+            if(!(Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.WTB_UPLOAD.getKey())
+                    ||Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.WTB_COMPANY_APPLY_SIGNATURE.getKey())
+                    ||Constants.equalsInteger(model.getStatus(),Constants.InsuranceApplyStatus.WTB_COMPANY_MEMBER_LIST_SIGNATURE.getKey())
+            )){
+                throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ョ敵璇风姸鎬佸凡娴佽浆锛屽綋鍓嶄笉鏀寔璇ユ搷浣渵");
+            }
+        }
+
+        Constants.ApplyLogType applyLogType = null;
+        InsuranceApply update = new InsuranceApply();
+        update.setEditDate(new Date());
+        update.setEditor(user.getId());
+        update.setCheckDate(update.getEditDate());
+        update.setCheckInfo(insuranceApply.getCheckInfo());
+        update.setCheckUserId(user.getId());
+        update.setId(model.getId());
+        if(insuranceApply.getDealBackApply() ==1){
+            //濡傛灉鏄笉閫氳繃
+            applyLogType = Constants.ApplyLogType.PLATFORM_RETURN ;
+            update.setStatus(Constants.InsuranceApplyStatus.PLATFORM_RETURN.getKey());
+            if(Constants.equalsObject(solutions.getType(),Constants.ONE)){
+                update.setStatus(Constants.InsuranceApplyStatus.WTB_RETURN.getKey());
+            }
+        }else{
+            applyLogType = Constants.ApplyLogType.PLATFORM_CHECK_PASS;
+            if(Constants.equalsObject(solutions.getType(),Constants.ONE)){
+                update.setStatus(Constants.InsuranceApplyStatus.WTB_BUSINESS_CHECK_PASS.getKey());
+            }else{
+                update.setStatus(Constants.InsuranceApplyStatus.SIGNATURE.getKey());
+            }
+        }
+        insuranceApplyMapper.updateById(update);
+
+        //瀛樺偍寰呭姙淇℃伅
+        Constants.NoticeObjectType noticeObjectType = Constants.NoticeObjectType.INSURANCE_APPLY;
+        if(Constants.equalsObject(solutions.getType(),Constants.ZERO)) {
+            //鍒犻櫎鍏朵粬寰呭姙
+            noticesMapper.delete(new QueryWrapper<Notices>().lambda()
+                    .eq(Notices::getObjType, noticeObjectType.getKey())
+                    .ne(Notices::getType, Constants.NoticeType.SIX.getStatus())
+                    .eq(Notices::getObjId, model.getId()));
+        }else{
+            //鍒犻櫎鍏ㄩ儴寰呭姙
+            noticesMapper.delete(new QueryWrapper<Notices>().lambda()
+                    .eq(Notices::getObjType, noticeObjectType.getKey())
+                    .eq(Notices::getObjId, model.getId()));
+        }
+
+
+        String info =applyLogType.getInfo();
+        if(StringUtils.isNotBlank(update.getCheckInfo())){
+            info = info.replace("${param}", update.getCheckInfo());
+        }else{
+            info = null;
+        }
+        ApplyLog log = new ApplyLog(update,applyLogType.getName(),info,update.getId(),applyLogType.getKey(),JSONObject.toJSONString(model), JSONObject.toJSONString(update));
+        applyLogMapper.insert(log);
+        return  1;
     }
 
 
@@ -1699,14 +2169,18 @@
             || Objects.isNull(insuranceApply.getSolutionId())
             || Objects.isNull(insuranceApply.getApplyStartTime())
             || Objects.isNull(insuranceApply.getApplyEndTime())
+            || Objects.isNull(insuranceApply.getCompanyId())
             || !CollectionUtils.isNotEmpty(insuranceApply.getApplyDetailList())
         ) {
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
         }
         LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
-        if(!loginUserInfo.getType().equals(Constants.ONE)){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛绫诲瀷閿欒锛氶潪浼佷笟鐢ㄦ埛鏃犳硶杩涜璇ユ搷浣�");
+
+        Company company = companyMapper.selectById(insuranceApply.getCompanyId());
+        if(Objects.isNull(company) || Constants.equalsInteger(company.getType(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"浼佷笟淇℃伅閿欒锛岃纭!");
         }
+
         Solutions solutions = solutionsMapper.selectById(insuranceApply.getSolutionId());
         if(Objects.isNull(solutions)){
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鏈煡璇㈠埌鏂规淇℃伅");
@@ -1725,7 +2199,6 @@
                 throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"淇濆崟鐢熸晥璧锋湡閿欒");
             }
         }
-
         List<ApplyDetail> applyDetailList = insuranceApply.getApplyDetailList();
         //鍒ゆ柇鏄惁瀛樺湪閲嶅淇℃伅
         List<String> idCardList = applyDetailList.stream().map(i->i.getIdcardNo()).collect(Collectors.toList());
@@ -1735,14 +2208,13 @@
         }
         Constants.InsuranceApplyStatus insuranceApplyStatus = Constants.InsuranceApplyStatus.UPLOAD;
         if(solutions.getType().equals(Constants.ONE)){
-            insuranceApplyStatus = Constants.InsuranceApplyStatus.WTB_UPLOAD;
+            insuranceApplyStatus = Constants.InsuranceApplyStatus.WTB_COMPANY_APPLY_SIGNATURE;
         }
         insuranceApply.setCreateDate(new Date());
         insuranceApply.setCreator(loginUserInfo.getId());
         insuranceApply.setEditor(loginUserInfo.getId());
         insuranceApply.setEditDate(new Date());
         insuranceApply.setIsdeleted(Constants.ZERO);
-        insuranceApply.setCompanyId(loginUserInfo.getCompanyId());
         insuranceApply.setCheckInfo(insuranceApplyStatus.getName());
         insuranceApply.setStartTime(insuranceApply.getApplyStartTime());
         insuranceApply.setCheckDate(new Date());
@@ -1765,14 +2237,9 @@
         updBean.setFee(applyDetailList.stream().map(ApplyDetail::getFee).reduce(BigDecimal.ZERO,BigDecimal::add));
         insuranceApplyMapper.updateById(updBean);
 
-//        if(1==1){
-//            throw new BusinessException(ResponseStatus.NOT_ALLOWED);
-//        }
-
         //瀛樺偍鏃ュ織鏁版嵁
         Constants.ApplyLogType applyLogType = Constants.ApplyLogType.UPLOAD;
         String info =applyLogType.getInfo();
-//        info = info.replace("${param}", update.getCheckInfo());
         ApplyLog log = new ApplyLog(insuranceApply,applyLogType.getName(),info,insuranceApply.getId(),applyLogType.getKey(),null, null);
         applyLogMapper.insert(log);
         
@@ -1893,35 +2360,48 @@
 
     public void dealApplyDetailData(InsuranceApply insuranceApply,Solutions solutions,List<ApplyDetail> applyDetailList,
                                     LoginUserInfo loginUserInfo,CountCyclePriceVO  countCyclePriceVO,Boolean checkNewData){
-        //鏌ヨ淇濋櫓鏂规涓嬬殑鎵�鏈夋淳閬e崟浣�
-        List<DuSolution>  duSolutionList = duSolutionJoinMapper.selectJoinList(DuSolution.class,new MPJLambdaWrapper<DuSolution>()
-                .selectAll(DuSolution.class)
-                .innerJoin(DispatchUnit.class,DispatchUnit::getId,DuSolution::getDispatchUnitId)
-                .eq(DispatchUnit::getCompanyId,insuranceApply.getCompanyId())
-                .eq(DispatchUnit::getIsdeleted,Constants.ZERO)
-                .eq(DispatchUnit::getUnitStatus,Constants.ONE)
-                .eq(DuSolution::getIsdeleted,Constants.ZERO)
-                .eq(checkNewData,DispatchUnit::getDataType,Constants.TWO)
-                .eq(DuSolution::getStatus,Constants.ONE)
-                .eq(DuSolution::getSolutionId,insuranceApply.getSolutionId())
-                .apply(" t1.BASE_ID in ( select du.id from dispatch_unit du where du.STATUS = 0 and du.ISDELETED = 0 ) ")
-        );
-        if(!CollectionUtils.isNotEmpty(duSolutionList)){
-            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝淇濋櫓鏂规涓嬫湭鏌ヨ鍒版淳閬e崟浣嶄俊鎭紝璇风‘淇濇淳閬e崟浣嶅拰宸ヤ綔閰嶇疆骞跺鏍搁�氳繃锛�");
+        //2024骞�11鏈�6鏃�15:01:34  鍔犲叆  鏂规閰嶇疆浜嗘湁娲鹃仯鍗曚綅 鎵嶄細鍘婚獙璇佹淳閬e崟浣嶆暟鎹�
+        List<DuSolution>  duSolutionList = new ArrayList<>();
+        List<DuWorktype> duWorktypeList = new ArrayList<>();
+        List<Integer> worktypeIdList = new ArrayList<>();
+        if(Constants.equalsInteger(solutions.getHasDispatchUnit(),Constants.ZERO)){
+            //鏌ヨ淇濋櫓鏂规涓嬬殑鎵�鏈夋淳閬e崟浣�
+            duSolutionList = duSolutionJoinMapper.selectJoinList(DuSolution.class,new MPJLambdaWrapper<DuSolution>()
+                    .selectAll(DuSolution.class)
+                    .innerJoin(DispatchUnit.class,DispatchUnit::getId,DuSolution::getDispatchUnitId)
+                    .eq(DispatchUnit::getCompanyId,insuranceApply.getCompanyId())
+                    .eq(DispatchUnit::getIsdeleted,Constants.ZERO)
+                    .eq(DispatchUnit::getUnitStatus,Constants.ONE)
+                    .eq(DuSolution::getIsdeleted,Constants.ZERO)
+                    .eq(checkNewData,DispatchUnit::getDataType,Constants.TWO)
+                    .eq(DuSolution::getStatus,Constants.ONE)
+                    .eq(DuSolution::getSolutionId,insuranceApply.getSolutionId())
+                    .apply(" t1.BASE_ID in ( select du.id from dispatch_unit du where du.STATUS = 0 and du.ISDELETED = 0 ) ")
+            );
+            if(!CollectionUtils.isNotEmpty(duSolutionList)){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝淇濋櫓鏂规涓嬫湭鏌ヨ鍒版淳閬e崟浣嶄俊鎭紝璇风‘淇濇淳閬e崟浣嶅拰宸ヤ綔閰嶇疆骞跺鏍搁�氳繃锛�");
+            }
+            //鏌ヨ鎵�鏈夋淳閬e崟浣嶄笅鐨勫伐绉�
+            List<Integer> duSolutionIdList = duSolutionList.stream().map(i->i.getId()).collect(Collectors.toList());
+            duWorktypeList = duWorkTypeJoinMapper.selectJoinList(DuWorktype.class,new MPJLambdaWrapper<DuWorktype>()
+                    .selectAll(DuWorktype.class)
+                    .innerJoin(Worktype.class,Worktype::getId,DuWorktype::getWorkTypeId)
+                    .eq(DuWorktype::getIsdeleted,Constants.ZERO)
+                    .eq(DuWorktype::getStatus,Constants.ONE)
+                    .eq(checkNewData,Worktype::getDataType,Constants.TWO)
+                    .in(DuWorktype::getDuSolutionId,duSolutionIdList));
+            if(!CollectionUtils.isNotEmpty(duWorktypeList)){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝淇濋櫓鏂规涓嬫湭鏌ヨ鍒板伐绉嶄俊鎭紝璇风‘淇濇淳閬e崟浣嶅拰宸ヤ綔閰嶇疆骞跺鏍搁�氳繃锛�");
+            }
+            worktypeIdList = duWorktypeList.stream().map(i->i.getWorkTypeId()).collect(Collectors.toList());
+        }else{
+            //鏌ヨ鏂规涓嬫墍鏈夊伐绉嶆暟鎹�
+            List<SolutionWorktype> solutionWorktypeList = solutionWorktypeJoinMapper.selectList(new QueryWrapper<SolutionWorktype>().lambda().eq(SolutionWorktype::getSolutionId,solutions.getId()));
+            if(CollectionUtils.isEmpty(solutionWorktypeList)){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝淇濋櫓鏂规涓嬫湭鏌ヨ鍒板伐绉嶄俊鎭�");
+            }
+            worktypeIdList = solutionWorktypeList.stream().map(i->i.getWorktypeId()).collect(Collectors.toList());
         }
-        //鏌ヨ鎵�鏈夋淳閬e崟浣嶄笅鐨勫伐绉�
-        List<Integer> duSolutionIdList = duSolutionList.stream().map(i->i.getId()).collect(Collectors.toList());
-        List<DuWorktype> duWorktypeList = duWorkTypeJoinMapper.selectJoinList(DuWorktype.class,new MPJLambdaWrapper<DuWorktype>()
-                .selectAll(DuWorktype.class)
-                .innerJoin(Worktype.class,Worktype::getId,DuWorktype::getWorkTypeId)
-                .eq(DuWorktype::getIsdeleted,Constants.ZERO)
-                .eq(DuWorktype::getStatus,Constants.ONE)
-                .eq(checkNewData,Worktype::getDataType,Constants.TWO)
-                .in(DuWorktype::getDuSolutionId,duSolutionIdList));
-        if(!CollectionUtils.isNotEmpty(duWorktypeList)){
-            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝淇濋櫓鏂规涓嬫湭鏌ヨ鍒板伐绉嶄俊鎭紝璇风‘淇濇淳閬e崟浣嶅拰宸ヤ綔閰嶇疆骞跺鏍搁�氳繃锛�");
-        }
-
         if(CollectionUtils.isNotEmpty(applyDetailList)){
             List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda()
                     .eq(Member::getCompanyId,insuranceApply.getCompanyId())
@@ -1950,14 +2430,12 @@
                     }
                     member.setIdcardNo(applyDetail.getIdcardNo());
                     member.setApplyId(insuranceApply.getId());
-//                    member.setStartTime(applyDetail.getStartTime());
-//                    member.setEndTime(applyDetail.getEndTime());
                     member.setDuId(applyDetail.getDuId());
                     member.setWorktypeId(applyDetail.getWorktypeId());
                     addMemberList.add(member);
                 }
                 //鏌ヨ浜哄憳淇℃伅鏄惁瀛樺湪鐩稿悓鐨勬柟妗堜笅鏄惁瀛樺湪 鍐茬獊鏁版嵁
-                this.checkMemberSolution(solutions.getBaseId(),member.getIdcardNo(),member.getName(),insuranceApply.getStartTime(),insuranceApply.getEndTime(),insuranceApply.getId());
+                this.checkMemberSolution(solutions.getParentId(),member.getIdcardNo(),member.getName(),insuranceApply.getStartTime(),insuranceApply.getEndTime(),insuranceApply.getId());
             }
             if(CollectionUtils.isNotEmpty(addMemberList)){
                 memberJoinMapper.insertBatchSomeColumn(addMemberList);
@@ -1968,7 +2446,7 @@
                 if(Objects.isNull(applyDetail)
                         ||StringUtils.isBlank(applyDetail.getIdcardNo())
                         ||StringUtils.isBlank(applyDetail.getMemberName())
-                        ||Objects.isNull(applyDetail.getDuId())
+                        || (Constants.equalsInteger(solutions.getHasDispatchUnit(),Constants.ZERO)&&Objects.isNull(applyDetail.getDuId()))
                         ||Objects.isNull(applyDetail.getWorktypeId())
                 ){
                     throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝鎶曚繚鍛樺伐淇℃伅鏁版嵁缂哄け锛岃鎸夌収瑕佹眰濉啓鍛樺伐鐨勬湁鏁堜俊鎭紒");
@@ -2003,8 +2481,6 @@
                         member.setApplyId(insuranceApply.getId());
                         member.setDuId(applyDetail.getDuId());
                         member.setWorktypeId(applyDetail.getWorktypeId());
-//                        member.setStartTime(applyDetail.getStartTime());
-//                        member.setEndTime(applyDetail.getEndTime());
                         memberMapper.updateById(member);
                     }
                 }else{
@@ -2015,12 +2491,8 @@
                     member.setApplyId(insuranceApply.getId());
                     member.setDuId(applyDetail.getDuId());
                     member.setWorktypeId(applyDetail.getWorktypeId());
-//                    member.setStartTime(applyDetail.getStartTime());
-//                    member.setEndTime(applyDetail.getEndTime());
                     memberMapper.updateById(member);
                 }
-
-
                 applyDetail.setMemberId(member.getId());
                 applyDetail.setIdcardNo(member.getIdcardNo());
                 applyDetail.setSex(member.getSex());
@@ -2035,13 +2507,19 @@
                         applyDetail.getFee().divide(new BigDecimal(maxDays),7,RoundingMode.HALF_UP)
                 );
                 //楠岃瘉娲鹃仯鍗曚綅淇℃伅鏄惁瀛樺湪
-                if(duSolutionList.stream().filter(d->d.getDispatchUnitId().equals(applyDetail.getDuId())).collect(Collectors.toList()).size()<=Constants.ZERO){
-                    throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"銆�"+applyDetail.getMemberName()+applyDetail.getIdcardNo()+"銆戝憳宸ユ淳閬e崟浣嶆湭鏌ヨ鍒帮紒");
+                if(Constants.equalsInteger(solutions.getHasDispatchUnit(),Constants.ZERO)){
+                    if(duSolutionList.stream().filter(d->d.getDispatchUnitId().equals(applyDetail.getDuId())).collect(Collectors.toList()).size()<=Constants.ZERO){
+                        throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"銆�"+applyDetail.getMemberName()+applyDetail.getIdcardNo()+"銆戝憳宸ユ淳閬e崟浣嶆湭鏌ヨ鍒帮紒");
+                    }
                 }
-                if(duWorktypeList.stream().filter(d->d.getWorkTypeId().equals(applyDetail.getWorktypeId()))
+                if(worktypeIdList.stream().filter(d->Constants.equalsInteger(d,applyDetail.getWorktypeId()))
                         .collect(Collectors.toList()).size()<=Constants.ZERO){
                     throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"銆�"+applyDetail.getMemberName()+applyDetail.getIdcardNo()+"銆戝憳宸ュ伐绉嶄俊鎭湭鏌ヨ鍒帮紒");
                 }
+//                if(duWorktypeList.stream().filter(d->d.getWorkTypeId().equals(applyDetail.getWorktypeId()))
+//                        .collect(Collectors.toList()).size()<=Constants.ZERO){
+//                    throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"銆�"+applyDetail.getMemberName()+applyDetail.getIdcardNo()+"銆戝憳宸ュ伐绉嶄俊鎭湭鏌ヨ鍒帮紒");
+//                }
             }
             applyDetailJoinMapper.insertBatchSomeColumn(applyDetailList);
         }
@@ -2055,21 +2533,26 @@
      * @param endTime
      */
     @Override
-    public void checkMemberSolution(Integer solutionId,String idCode,String memberName,Date startTime,Date endTime,Integer applyId){
+    public void checkMemberSolution(Integer solutionParentId,String idCode,String memberName,Date startTime,Date endTime,Integer applyId){
         List<ApplyDetail> applyDetailList = new ArrayList<ApplyDetail>();
         try {
             applyDetailList = applyDetailJoinMapper.selectJoinList(ApplyDetail.class,
                     new MPJLambdaWrapper<ApplyDetail>()
                             .selectAll(ApplyDetail.class)
                             .selectAs(InsuranceApply::getCode,ApplyDetail::getApplyCode)
+                            .selectAs(Company::getName,ApplyDetail::getCompanyName)
                             .leftJoin(InsuranceApply.class,InsuranceApply::getId,ApplyDetail::getApplyId)
                             .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId)
+                            .leftJoin(Company.class,Company::getId,InsuranceApply::getCompanyId)
                             .eq(ApplyDetail::getIdcardNo,idCode)
                             .eq(ApplyDetail::getIsdeleted,Constants.ZERO)
-                            .eq(Solutions::getBaseId,solutionId)
+                            .eq(Solutions::getParentId,solutionParentId)
                             .ne(Objects.nonNull(applyId),InsuranceApply::getId,applyId)
                             .notIn(InsuranceApply::getStatus
+                                    ,Constants.InsuranceApplyStatus.FAIL_RETURN.getKey()
+                                    ,Constants.InsuranceApplyStatus.COMPANY_BACK_APPLY_PASS.getKey()
                                     ,Constants.InsuranceApplyStatus.CLOSE.getKey()
+                                    ,Constants.InsuranceApplyStatus.WTB_RETURN.getKey()
                                     ,Constants.InsuranceApplyStatus.WTB_CLOSED.getKey() )
                             .apply(" ( " +
                                     " '"+DateUtil.getPlusTime(startTime)+"'  <= t.start_time AND t.start_time < '"+DateUtil.getPlusTime(endTime)+"' " +
@@ -2081,8 +2564,13 @@
         }catch (Exception e){
         }
         if(applyDetailList.size() >Constants.ZERO){
-            ApplyDetail applyDetail = applyDetailList.get(Constants.ZERO);
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璇ュ憳宸ャ��"+memberName+" "+idCode+"銆戝湪璇ヤ繚闄╂柟妗堜笅宸插瓨鍦ㄦ姇淇濊褰曪紝鏃犳硶杩涜璇ユ搷浣�");
+            String companyName = applyDetailList.get(Constants.ZERO).getCompanyName();
+            if(StringUtils.isNotBlank(companyName)){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璇ュ憳宸ャ��"+memberName+" "+idCode+"銆戝凡鍦ㄣ��"+companyName+"銆戝瓨鍦ㄤ繚闄�,璇疯仈绯诲鏈嶇‘璁�");
+            }else{
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璇ュ憳宸ャ��"+memberName+" "+idCode+"銆戝湪璇ヤ繚闄╂柟妗堜笅宸插瓨鍦ㄦ姇淇濊褰曪紝鏃犳硶杩涜璇ユ搷浣�");
+            }
+
         };
     }
 
@@ -2094,8 +2582,10 @@
                     new MPJLambdaWrapper<ApplyDetail>()
                             .selectAll(ApplyDetail.class)
                             .selectAs(InsuranceApply::getCode,ApplyDetail::getApplyCode)
+                            .selectAs(Company::getName,ApplyDetail::getCompanyName)
                             .leftJoin(InsuranceApply.class,InsuranceApply::getId,ApplyDetail::getApplyId)
                             .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId)
+                            .leftJoin(Company.class,Company::getId,InsuranceApply::getCompanyId)
                             .eq(ApplyDetail::getIdcardNo,idCode)
                             .eq(Solutions::getBaseId,solutionId)
                             .eq(ApplyDetail::getIsdeleted,Constants.ZERO)
@@ -2113,9 +2603,14 @@
 
         }
         if(applyDetailList.size() >Constants.ZERO){
-            ApplyDetail applyDetail = applyDetailList.get(Constants.ZERO);
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璇ュ憳宸ャ��"+memberName+" "+idCode+"銆戝湪璇ヤ繚闄╂柟妗堜笅宸插瓨鍦ㄦ姇淇濊褰曪紝鏃犳硶杩涜璇ユ搷浣�");
+            String companyName = applyDetailList.get(Constants.ZERO).getCompanyName();
+            if(StringUtils.isNotBlank(companyName)){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璇ュ憳宸ャ��"+memberName+" "+idCode+"銆戝凡鍦ㄣ��"+companyName+"銆戝瓨鍦ㄤ繚闄�,璇疯仈绯诲鏈嶇‘璁�");
+            }else{
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璇ュ憳宸ャ��"+memberName+" "+idCode+"銆戝湪璇ヤ繚闄╂柟妗堜笅宸插瓨鍦ㄦ姇淇濊褰曪紝鏃犳硶杩涜璇ユ搷浣�");
+            }
         };
+
     }
 
     @Override
@@ -2200,48 +2695,70 @@
         MPJLambdaWrapper<InsuranceApply> queryWrapper = new MPJLambdaWrapper<>();
         Utils.MP.blankToNull(pageWrap.getModel());
 
+/*        //鏁版嵁鏉冮檺寮�濮�--------------------start----------------
+        LoginUserInfo userInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        if(userInfo!=null && userInfo.getDepartIdList()!=null){
+            if(  userInfo.getDepartIdList().size() ==0){
+                //鍙湅鑷繁
+                queryWrapper.and(wrapper ->{
+                    wrapper.eq(InsuranceApply::getCreator,userInfo.getId());
+                });
+            }else{
+                //鏉冮檺鑼冨洿鍐�
+                queryWrapper.and(wrapper ->{
+                    wrapper.in(SystemUser::getDepartmentId ,userInfo.getDepartIdList());
+                });
+            }
+        }*/
+
+
         List<Integer> statusList = this.getCollectStatus(pageWrap.getModel().getStatusCollect());
 
         queryWrapper.selectAll(InsuranceApply.class);
         queryWrapper.selectAs(Company::getName,InsuranceApply::getCompanyName);
         queryWrapper.selectAs(Solutions::getName,InsuranceApply::getSolutionsName);
         queryWrapper.selectAs(Solutions::getType,InsuranceApply::getSolutionType);
+        queryWrapper.selectAs(Solutions::getHasDispatchUnit,InsuranceApply::getHasDispatchUnit);
         queryWrapper.selectAs(Solutions::getMaxAge,InsuranceApply::getMaxAge);
         queryWrapper.selectAs(Solutions::getMinAge,InsuranceApply::getMinAge);
         queryWrapper.selectAs(Solutions::getPrice,InsuranceApply::getPrice);
         queryWrapper.selectAs(Solutions::getTimeUnit,InsuranceApply::getTimeUnit);
+        queryWrapper.select("( select ifnull(sum(ad.FEE),0) from apply_chagne_detail ad left join  apply_change a on a.id = ad.APPLY_CHANGE_ID  where t.id = a.APPLY_ID  and a.status = 2  )",InsuranceApply::getChangeMoney);
         queryWrapper.select(" DATEDIFF( t.END_TIME ,now()  ) AS loseEfficacyDays  ");
         queryWrapper.select(" ( select count(DISTINCT(ad.MEMBER_ID)) from apply_detail ad  where ad.apply_id = t.id   ) as insureNum");
-        queryWrapper.select(" ( select count(DISTINCT(ad.MEMBER_ID)) from apply_detail ad inner join insurance_apply a on ad.apply_id = a.id  and a.status in ( 5 , 27 )  where ad.apply_id = t.id and ad.END_TIME > now() ) as guaranteeNum");
+        queryWrapper.select(" ( select count(DISTINCT(ad.MEMBER_ID)) from apply_detail ad inner join insurance_apply a on ad.apply_id = a.id  and a.status in ( 5 , 27 )  where ad.apply_id = t.id and ad.END_TIME > now() and ad.START_TIME < now() ) as guaranteeNum");
         if(!Objects.isNull(pageWrap.getModel())&&!Objects.isNull(pageWrap.getModel().getType())){
             queryWrapper.select(" ifnull(( select sum(td.fee) from taxes ts inner join tax_detial td on td.TAX_ID = ts.id  where ts.status != 2 and td.INSURANCE_APPLY_ID = t.id ),0) as taxesMoney");
             queryWrapper.select(" ( select td.CREATE_DATE from taxes ts inner join tax_detial td on td.TAX_ID = ts.id  where ts.status = 1 and td.INSURANCE_APPLY_ID = t.id order by td.CREATE_DATE desc limit 1 ) as taxesLast ");
         }
         queryWrapper.leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId);
         queryWrapper.leftJoin(Company.class,Company::getId,InsuranceApply::getCompanyId);
+        queryWrapper.leftJoin(SystemUser.class,SystemUser::getId,InsuranceApply::getCreator);
         queryWrapper.eq(InsuranceApply::getIsdeleted,Constants.ZERO);
         queryWrapper.eq(pageWrap.getModel().getBaseSolutionId()!=null,Solutions::getBaseId,pageWrap.getModel().getBaseSolutionId());
         queryWrapper.in(statusList.size()>0,InsuranceApply::getStatus,statusList);
         queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getSolutionName()),Solutions::getName,pageWrap.getModel().getSolutionName());
-        if(Constants.equalsInteger(pageWrap.getModel().getStatusCollect(),Constants.ApplyCollectStatus.YGQ.getKey()) ){
-            //濡傛灉鏄凡閬庢湡
-//            queryWrapper.eq(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey());
-            queryWrapper.lt(InsuranceApply::getEndTime, Utils.Date.getStart(new Date()));
-        }else if(Constants.equalsInteger(pageWrap.getModel().getStatusCollect(),Constants.ApplyCollectStatus.BZZ.getKey()) ){
-            //濡傛灉鏄繚闅滀腑
-//            queryWrapper.eq(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey());
-            queryWrapper.gt(InsuranceApply::getEndTime, Utils.Date.getStart(new Date()));
-        }
+//        if(Constants.equalsInteger(pageWrap.getModel().getStatusCollect(),Constants.ApplyCollectStatus.YGQ.getKey()) ){
+//            //濡傛灉鏄凡杩囨湡
+//            queryWrapper.lt(InsuranceApply::getEndTime, Utils.Date.getStart(new Date()));
+//        }else if(Constants.equalsInteger(pageWrap.getModel().getStatusCollect(),Constants.ApplyCollectStatus.BZZ.getKey()) ){
+//            //濡傛灉鏄繚闅滀腑
+//            queryWrapper.gt(InsuranceApply::getEndTime, Utils.Date.getStart(new Date()));
+//        }
         LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
 
         //浼佷笟浜哄憳鏌ョ湅鏈紒涓氭暟鎹�
         if(loginUserInfo.getType().equals(Constants.ONE)){
             queryWrapper.eq(InsuranceApply::getCompanyId, loginUserInfo.getCompanyId());
+            //2024骞�10鏈�29鏃�15:14:28 鍔犲叆  浼佷笟鍚堝苟2绫绘姇淇濇暟鎹�
+            if(pageWrap.getModel().getSolutionType()!=null && Constants.equalsInteger(pageWrap.getModel().getSolutionType(),Constants.ZERO)){
+                queryWrapper.eq(Solutions::getType,pageWrap.getModel().getSolutionType());
+            }
         }else if(loginUserInfo.getType().equals(Constants.TWO)){
             //濡傛灉鏄晢鎴锋煡鐪�
-            if(pageWrap.getModel().getSolutionType()!=null && pageWrap.getModel().getSolutionType().equals(0)){
+            if(pageWrap.getModel().getSolutionType()!=null && Constants.equalsInteger(pageWrap.getModel().getSolutionType(),Constants.ZERO)){
                 queryWrapper.exists("select cs.id from company_solution cs left join solutions s on cs.solution_id=s.id where cs.isdeleted=0 and s.base_id=t1.base_id and cs.shop_id="+loginUserInfo.getCompanyId());
-            }else if(pageWrap.getModel().getSolutionType()!=null && pageWrap.getModel().getSolutionType() ==1){
+            }else if(pageWrap.getModel().getSolutionType()!=null && Constants.equalsInteger(pageWrap.getModel().getSolutionType(),Constants.ONE)){
                 queryWrapper.eq(Solutions::getShopId,loginUserInfo.getCompanyId());
             }else{
                 queryWrapper.apply("((t1.type=0 and exists(select cs.id from company_solution cs left join solutions s on cs.solution_id=s.id where cs.isdeleted=0 and s.base_id=t1.base_id and cs.shop_id="+loginUserInfo.getCompanyId()+")) or (" +
@@ -2291,6 +2808,18 @@
         if (pageWrap.getModel().getStatus() != null) {
             queryWrapper.in(InsuranceApply::getStatus, pageWrap.getModel().getStatus().split(","));
         }
+
+        if (pageWrap.getModel().getTimeOut() != null) {
+            if(Constants.equalsInteger(pageWrap.getModel().getTimeOut(),Constants.ZERO)){
+                queryWrapper.apply("  t.START_TIME  > now() ");
+            }else if(Constants.equalsInteger(pageWrap.getModel().getTimeOut(),Constants.ONE)){
+                queryWrapper.apply("  now()  between  t.START_TIME  and t.END_TIME  ");
+            }else if(Constants.equalsInteger(pageWrap.getModel().getTimeOut(),Constants.TWO)){
+                queryWrapper.apply("  t.END_TIME  < now() ");
+            }else if(Constants.equalsInteger(pageWrap.getModel().getTimeOut(),Constants.THREE)){
+                queryWrapper.apply("  t.END_TIME  > now() ");
+            }
+        }
         if (pageWrap.getModel().getLoseEfficacy() != null && pageWrap.getModel().getLoseEfficacy() ==1) {
             queryWrapper.apply("  DATEDIFF(t.END_TIME,CURRENT_DATE() ) <= 5  and t.END_TIME >= now() ");
         }
@@ -2310,6 +2839,8 @@
         if(pageData.getRecords()!=null){
             for (InsuranceApply apply : pageData.getRecords()){
                 initApplyStatus(apply) ;
+                apply.setChangeMoney(Constants.getTwoPoint(apply.getChangeMoney()));
+                apply.setFee(Constants.getTwoPoint(apply.getFee()));
              }
         }
         return pageData;
@@ -2326,6 +2857,16 @@
         }
         setServiceDays(apply);
         apply.setStatusInfo(Constants.ApplyCollectStatus.getName(apply.getStatusCollect()));
+        if(Constants.equalsInteger(apply.getStatus(),Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())
+                || Constants.equalsInteger(apply.getStatus(),Constants.InsuranceApplyStatus.WTB_DONE.getKey()) ){
+            if(apply.getStartTime().getTime()>System.currentTimeMillis()){
+                apply.setStatusInfo("寰呯敓鏁�");
+            }else if(apply.getEndTime().getTime()<System.currentTimeMillis()){
+                apply.setStatusInfo("宸茶繃鏈�");
+            }else{
+                apply.setStatusInfo("淇濋殰涓�");
+            }
+        }
 
     }
 
@@ -2339,7 +2880,7 @@
         queryWrapper.selectAs(Solutions::getName,InsuranceApply::getSolutionsName);
         queryWrapper.selectAs(Solutions::getType,InsuranceApply::getSolutionType);
         queryWrapper.select(" ( select count(DISTINCT(ad.MEMBER_ID)) from apply_detail ad  where ad.apply_id = t.id ) as insureNum");
-        queryWrapper.select(" ( select count(DISTINCT(ad.MEMBER_ID)) from apply_detail ad inner join insurance_apply a on ad.apply_id = a.id  and a.status in ( 5 , 27 )  where ad.apply_id = t.id and ad.END_TIME > now() ) as guaranteeNum");
+        queryWrapper.select(" ( select count(DISTINCT(ad.MEMBER_ID)) from apply_detail ad inner join insurance_apply a on ad.apply_id = a.id  and a.status in ( 5 , 27 )  where ad.apply_id = t.id and ad.END_TIME > now() and ad.START_TIME < now() ) as guaranteeNum");
         queryWrapper.select(" ( select max(ac.APPLY_START_TIME) from apply_change ac  where ac.apply_id = t.id and ac.status = 2 ) as lastChangeDate");
         queryWrapper.select(" ( select sum(td.fee) from taxes ts inner join tax_detial td on td.TAX_ID = ts.id  where ts.status != 2 and td.INSURANCE_APPLY_ID = t.id ) as taxesMoney ");
         queryWrapper.select(" ( select td.CREATE_DATE from taxes ts inner join tax_detial td on td.TAX_ID = ts.id  where ts.status != 2 and td.INSURANCE_APPLY_ID = t.id order by td.CREATE_DATE desc limit 1 ) as taxesLast ");
@@ -2482,10 +3023,13 @@
                 .selectAs(Solutions::getTimeUnit,InsuranceApply::getTimeUnit)
                 .selectAs(Solutions::getType,InsuranceApply::getSolutionType)
                 .selectAs(Solutions::getName,InsuranceApply::getSolutionsName)
+                .selectAs(Solutions::getHasDispatchUnit,InsuranceApply::getHasDispatchUnit)
+                .selectAs(Solutions::getSignType,InsuranceApply::getSignType)
                 .selectAs(Company::getName,InsuranceApply::getCompanyName)
+                .select("( select ifnull(sum(ad.FEE),0) from apply_chagne_detail ad left join  apply_change a on a.id = ad.APPLY_CHANGE_ID  where t.id = a.APPLY_ID  and a.status = 2  )",InsuranceApply::getChangeMoney)
                 .select(" ( select max(ac.APPLY_START_TIME) from apply_change ac  where ac.apply_id = t.id and ac.status = 2 ) as lastChangeDate")
                 .select(" ( select count(DISTINCT(ad.MEMBER_ID)) from apply_detail ad  where ad.apply_id = t.id ) as insureNum")
-                .select(" ( select count(DISTINCT(ad.MEMBER_ID)) from apply_detail ad inner join insurance_apply a on ad.apply_id = a.id  and a.status in ( 5 , 27 )  where ad.apply_id = t.id and ad.END_TIME > now() ) as guaranteeNum")
+                .select(" ( select count(DISTINCT(ad.MEMBER_ID)) from apply_detail ad inner join insurance_apply a on ad.apply_id = a.id  and a.status in ( 5 , 27 )  where ad.apply_id = t.id and ad.END_TIME > now() and ad.START_TIME < now() ) as guaranteeNum")
                 .select(" t3.name as shopName")
                 .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId)
                 .leftJoin(Company.class,Company::getId,InsuranceApply::getCompanyId)
@@ -2517,6 +3061,10 @@
         initApplyStatus(insuranceApply);
         //鏌ヨ闄勪欢鏁版嵁
         initImgData(insuranceApply);
+
+        insuranceApply.setChangeMoney(Constants.getTwoPoint(insuranceApply.getChangeMoney()));
+        insuranceApply.setFee(Constants.getTwoPoint(insuranceApply.getFee()));
+
         //鏌ヨ鎿嶄綔璁板綍
         List<ApplyLog> applyLogList = applyLogJoinMapper.selectJoinList(ApplyLog.class,
                 new MPJLambdaWrapper<ApplyLog>()
@@ -2554,6 +3102,21 @@
     }
 
     private void initImgData(InsuranceApply model) {
+        String path = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()
+                +systemDictDataBiz.queryByCode(Constants.OSS,Constants.APPLY_FILE).getCode();
+
+        //鏌ヨ鏂规纭涔�
+        CompanySolution companySolution =companySolutionMapper.selectOne(new QueryWrapper<CompanySolution>().lambda().eq(CompanySolution::getSolutionId,model.getSolutionId()).eq(CompanySolution::getCompanyId,model.getCompanyId()).last("limit 1"));
+        if(Objects.nonNull(companySolution)){
+            Multifile multifile = multifileMapper.selectOne(new QueryWrapper<Multifile>().lambda()
+                    .eq(Multifile::getObjId,companySolution.getId())
+                    .eq(Multifile::getObjType,Constants.MultiFile.COMPANY_SOLUTION_SIGN_PDF.getKey())
+                    .eq(Multifile::getIsdeleted,Constants.ZERO).last("limit 1"));
+            if(Objects.nonNull(multifile)){
+                multifile.setFileurlFull(path + multifile.getFileurl());
+                model.setFanganFile(multifile);
+            }
+        }
         List<Multifile> multifiles = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda()
                 .eq(Multifile::getObjId, model.getId())
                 .in(Multifile::getObjType,Arrays.asList(new Integer[]{Constants.MultiFile.BD_APPLY_PDF.getKey()
@@ -2564,8 +3127,11 @@
                 .eq(Multifile::getIsdeleted,Constants.ZERO)
                 .orderByAsc(Multifile::getId));
         if(multifiles!=null){
-            String path = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()
-                    +systemDictDataBiz.queryByCode(Constants.OSS,Constants.APPLY_FILE).getCode();
+
+
+
+
+
             for(Multifile f : multifiles){
                 if(StringUtils.isBlank(f.getFileurl())){
                     continue;
@@ -2583,10 +3149,11 @@
                 }else if(Constants.equalsInteger(f.getObjType(),Constants.MultiFile.MEMBER_LIST_LATTER.getKey())){
                     //鐢宠鍗�
                     model.setShenqingdanFile(f);
-                }else if(Constants.equalsInteger(f.getObjType(),Constants.MultiFile.WTB_CONFIRMATION_LATTER.getKey())){
-                    //绛剧讲鍚庣‘璁や功
-                    model.setFanganFile(f);
                 }
+//                else if(Constants.equalsInteger(f.getObjType(),Constants.MultiFile.WTB_CONFIRMATION_LATTER.getKey())){
+//                    //绛剧讲鍚庣‘璁や功
+//                    model.setFanganFile(f);
+//                }
 
 //                if(model.getStatus().equals(Constants.InsuranceApplyStatus.UPLOAD_INSURANCE.getKey())){
 //                    //濡傛灉褰撳墠鏃堕棿澶т簬缁撴潫鏃ユ湡 鍒欎娇鐢ㄧ粨鏉熸棩鏈熷姣斿紑濮嬫棩鏈�
@@ -2610,7 +3177,7 @@
                 .selectAs(Solutions::getType,InsuranceApply::getSolutionType)
                 .selectAs(Company::getName,InsuranceApply::getCompanyName)
                 .select(" ( select count(DISTINCT(ad.MEMBER_ID)) from apply_detail ad  where ad.apply_id = t.id ) as insureNum")
-                .select(" ifnull(( select count(DISTINCT(ad.MEMBER_ID)) from apply_detail ad inner join insurance_apply a on ad.apply_id = a.id  and a.status in ( 5 , 27 )  where ad.apply_id = t.id and ad.END_TIME > now() ),0) as guaranteeNum")
+                .select(" ifnull(( select count(DISTINCT(ad.MEMBER_ID)) from apply_detail ad inner join insurance_apply a on ad.apply_id = a.id  and a.status in ( 5 , 27 )  where ad.apply_id = t.id and ad.END_TIME > now()  and ad.START_TIME < now() ),0) as guaranteeNum")
                 .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId)
                 .leftJoin(Company.class,Company::getId,InsuranceApply::getCompanyId)
                 .eq(InsuranceApply::getId,model.getId())
@@ -2715,11 +3282,6 @@
                         insuranceApply.getId(),solutions.getName(),companySolution.getShopId(),Constants.NoticeType.THREE);
                 noticesMapper.insert(shopNotices);
             }
-
-
-
-
-
 
         }else if(insuranceApplyOptDTO.getOptType().equals(Constants.TWO)){
             insuranceApplyStatus =  Constants.InsuranceApplyStatus.CLOSE;
@@ -3011,10 +3573,11 @@
         if(solutions.getType().equals(Constants.ZERO)){
             throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝闈炲鎵樹繚鏂规淇濆崟锛屾棤娉曡繘琛岃鎿嶄綔!");
         }
-        String fileUrl =  ExcelExporter.build(InsuranceApply.class).exportApplyExcelToPdf(model,"浜哄憳鍚嶅崟");
+        String fileUrl = "https://yybred.oss-cn-hangzhou.aliyuncs.com/apply/20241120/1c80f0d7-ab35-4355-b9fe-944464643115.pdf";//ExcelExporter.build(InsuranceApply.class).exportApplyExcelToPdf(model,"浜哄憳鍚嶅崟");
         String notifyUrl = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SIGN_DONE_NOTIFY_URL).getCode();
         notifyUrl = notifyUrl.replace("${type}","0").replace("${id}",model.getId().toString());
-        String applyNo = signService.applySignLocalFile(company.getName(),company.getName(),fileUrl,company.getCode(),company.getEmail(),"鎶曚繚鍚嶅崟绛剧珷",company.getSignId(),notifyUrl);
+        //String applyNo = signService.applySignLocalFile(company.getName(),company.getName(),fileUrl,company.getCode(),company.getEmail(),"鎶曚繚鍚嶅崟绛剧珷",company.getSignId(),notifyUrl);
+        String applyNo = signService.applySign(company.getName(),fileUrl,company.getName(),company.getCode(),company.getEmail(),model.getSignKeyword(),company.getSignId(),notifyUrl);
         if(StringUtils.isBlank(applyNo) ){
             throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝鑾峰彇鍦ㄧ嚎绛剧珷鍦板潃澶辫触锛岃绋嶅悗閲嶈瘯锛�");
         }
@@ -3111,4 +3674,79 @@
         return  link;
     }
 
+
+
+
+
+    /**
+     * 鏍规嵁淇濆崟鏌ヨ鏄惁鍙互杩涜鍔犲噺淇濇搷浣�
+     * @param applyPowerDTO
+     * @return
+     */
+    @Override
+    public ApplyPowerVO getApplyPower(ApplyPowerDTO applyPowerDTO){
+        if(Objects.isNull(applyPowerDTO)
+        || Objects.isNull(applyPowerDTO.getApplyId())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鍙傛暟閿欒");
+        }
+        if(Objects.isNull(applyPowerDTO.getBeginDate())){
+            applyPowerDTO.setBeginDate(new Date());
+        }
+        InsuranceApply insuranceApply = insuranceApplyMapper.selectById(applyPowerDTO.getApplyId());
+        if(Objects.isNull(insuranceApply)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(insuranceApply.getIsdeleted().equals(Constants.ONE)){
+            throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"鏁版嵁宸插垹闄�,鏃犳硶杩涜璇ユ搷浣�");
+        }
+        Solutions solutions = solutionsMapper.selectById(insuranceApply.getSolutionId());
+        if(Objects.isNull(solutions)){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鏈煡璇㈠埌鏂规淇℃伅");
+        }
+        ApplyPowerVO applyPowerVO = InsuranceApplyServiceImpl.getApplyPowerStatic(applyPowerDTO,insuranceApply,solutions);
+        return applyPowerVO;
+    }
+
+
+
+    public static ApplyPowerVO getApplyPowerStatic(ApplyPowerDTO applyPowerDTO,InsuranceApply insuranceApply,Solutions solutions){
+        if(Objects.isNull(applyPowerDTO)
+                || Objects.isNull(applyPowerDTO.getApplyId())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鍙傛暟閿欒");
+        }
+        if(Objects.isNull(applyPowerDTO.getBeginDate())){
+            applyPowerDTO.setBeginDate(new Date());
+        }
+        ApplyPowerVO applyPowerVO = new ApplyPowerVO();
+        //鑾峰彇鏂规 缁撴潫鏃堕棿
+        Date endTime = insuranceApply.getEndTime();
+        //鏌ヨ褰撳墠鍘诲姞淇濈殑寮�濮嬫棩鏈�  yyyy-MM-dd HH:mm:ss 2024-10-29 00:00:00
+        Date addStartDate = DateUtil.getMontageDate(
+                DateUtil.afterDateByType(applyPowerDTO.getBeginDate(),Constants.ZERO,solutions.getAddValidDays()),
+                1
+        );
+        applyPowerVO.setAddStartDate(addStartDate);
+        //鍔犱繚鐢熸晥鏃ユ湡澶т簬 淇濆崟缁撴潫鏃ユ湡 鍒欎笉鍙互杩涜鍔犱繚
+        if(addStartDate.getTime()>=endTime.getTime()){
+            applyPowerVO.setAddTrue(Constants.ONE);
+        }else{
+            applyPowerVO.setAddTrue(Constants.ZERO);
+        }
+        //鏌ヨ褰撳墠鍘诲噺淇濈殑寮�濮嬫棩鏈�  yyyy-MM-dd HH:mm:ss 2024-10-29 00:00:00
+        Date delStartDate = DateUtil.getMontageDate(
+                DateUtil.afterDateByType(applyPowerDTO.getBeginDate(),Constants.ZERO,solutions.getAddValidDays()),
+                1
+        );
+        applyPowerVO.setDelStartDate(delStartDate);
+        //鍔犱繚鐢熸晥鏃ユ湡澶т簬 淇濆崟缁撴潫鏃ユ湡 鍒欎笉鍙互杩涜鍑忎繚
+        if(delStartDate.getTime()>=endTime.getTime()){
+            applyPowerVO.setDelTrue(Constants.ONE);
+        }else{
+            applyPowerVO.setDelTrue(Constants.ZERO);
+        }
+        return applyPowerVO;
+    }
+
 }
+
+
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/InsuranceServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/InsuranceServiceImpl.java
index 04808f9..4acc4f0 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/InsuranceServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/InsuranceServiceImpl.java
@@ -1,5 +1,6 @@
 package com.doumee.service.business.impl;
 
+import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.LoginUserInfo;
@@ -41,6 +42,8 @@
     private InsuranceMapper insuranceMapper;
     @Autowired
     private WorktypeMapper worktypeMapper;
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
 
     @Override
     @Transactional
@@ -133,6 +136,15 @@
         if(worktypeList.size()==0){
             throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝宸ョ涓嶈兘涓虹┖锛�");
         }
+        if(StringUtils.isNotBlank(insurance.getEnglishName()) && insurance.getEnglishName().length()>100){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝鑻辨枃鍚嶈秴闀匡紒");
+        }
+        if(StringUtils.isNotBlank(insurance.getLinkName()) && insurance.getLinkName().length()>10){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝鑱旂郴浜哄悕绉拌秴闀匡紒");
+        }
+        if(StringUtils.isNotBlank(insurance.getLinkPhone()) && insurance.getLinkPhone().length()!=11){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇疯緭鍏ユ纭殑鎵嬫満鍙凤紒");
+        }
         insurance.setWorktypeList(worktypeList);
     }
 
@@ -208,6 +220,13 @@
         updateModel.setEditDate(new Date());
         updateModel.setRemark(insurance.getRemark());
         updateModel.setSortnum(insurance.getSortnum());
+        updateModel.setLogo(insurance.getLogo());
+        updateModel.setEnglishName(insurance.getEnglishName());
+        updateModel.setLinkName(insurance.getLinkName());
+        updateModel.setLinkPhone(insurance.getLinkPhone());
+        updateModel.setPolicy(insurance.getPolicy());
+        updateModel.setAgreement(insurance.getAgreement());
+        updateModel.setClaimsInformation(insurance.getClaimsInformation());
         insuranceMapper.updateById(updateModel);
 
         //濡傛灉淇敼锛屽垯浜х敓涓�涓柊鐨勫巻鍙茬増鏈� ~
@@ -219,6 +238,13 @@
         newModel.setName(updateModel.getName());
         newModel.setBaseId(insurance.getId());
         newModel.setDataType(Constants.TWO);
+        newModel.setLogo(insurance.getLogo());
+        newModel.setEnglishName(insurance.getEnglishName());
+        newModel.setLinkName(insurance.getLinkName());
+        newModel.setLinkPhone(insurance.getLinkPhone());
+        newModel.setPolicy(insurance.getPolicy());
+        newModel.setAgreement(insurance.getAgreement());
+        newModel.setClaimsInformation(insurance.getClaimsInformation());
         insuranceMapper.insert(newModel);
 
         //鍒犻櫎鎵�鏈夊伐绉嶆暟鎹�
@@ -355,16 +381,19 @@
         if (pageWrap.getModel().getBaseId() != null) {
             queryWrapper.lambda().eq(Insurance::getBaseId, pageWrap.getModel().getBaseId());
         }
- /*       for(PageWrap.SortData sortData: pageWrap.getSorts()) {
-            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
-                queryWrapper.orderByDesc(sortData.getProperty());
-            } else {
-                queryWrapper.orderByAsc(sortData.getProperty());
-            }
-
-        }*/
         queryWrapper.lambda().orderByAsc(Insurance::getSortnum);
-        return PageData.from(insuranceMapper.selectPage(page, queryWrapper));
+        PageData<Insurance> pageData = PageData.from(insuranceMapper.selectPage(page, queryWrapper));
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(pageData.getRecords())){
+            String path = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()
+                    +systemDictDataBiz.queryByCode(Constants.OSS,Constants.INSURANCE).getCode();
+            for (Insurance insurance:pageData.getRecords()) {
+                if (StringUtils.isNotBlank(insurance.getLogo())) {
+                    insurance.setLogoFullUrl(path + insurance.getLogo() );
+                }
+            }
+        }
+
+        return pageData;
     }
 
     @Override
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index 98e1346..034365e 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -21,6 +21,7 @@
 import com.doumee.dao.business.join.ApplyDetailJoinMapper;
 import com.doumee.dao.business.join.DispatchUnitJoinMapper;
 import com.doumee.dao.business.join.MemberJoinMapper;
+import com.doumee.dao.business.join.SolutionWorktypeJoinMapper;
 import com.doumee.dao.business.model.*;
 import com.doumee.service.business.MemberService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -67,6 +68,8 @@
     private SolutionsMapper solutionsMapper;
     @Autowired
     private InsuranceApplyMapper insuranceApplyMapper;
+    @Autowired
+    private SolutionWorktypeJoinMapper solutionWorktypeJoinMapper;
 
     @Override
     public Integer create(Member member) {
@@ -356,8 +359,10 @@
 //                Date  reduceEndTime = DateUtil.getMontageDate(new Date(),3);
                 for (Member member:memberList) {
                     //濡傛灉褰撳墠鏃ユ湡 灏忎簬 浜哄憳淇濆崟鏄庣粏璁板綍鐨勫紑濮嬫椂闂� 鍒欎娇鐢ㄥ紑濮嬫棩鏈�  寮�濮嬫棩鏈� = 缁撴潫鏃ユ湡  涓� 璐圭敤鍏ㄩ儴閫�鍥�
-                    if(System.currentTimeMillis()<=member.getStartTime().getTime()){
-                        member.setFee(solutions.getPrice().multiply(new BigDecimal(-1)));
+//                    if(System.currentTimeMillis()<=member.getStartTime().getTime()){
+//                        member.setFee(solutions.getPrice().multiply(new BigDecimal(-1)));
+                    if(System.currentTimeMillis()<=member.getDetailStartTime().getTime()){
+                            member.setFee(member.getFee().multiply(new BigDecimal(-1)));
                     }else{
                         Date  reduceEndTime = DateUtil.getMontageDate(
                             DateUtil.afterDateByType(new Date(),0,solutions.getDelValidDays()),3);
@@ -501,6 +506,13 @@
         if(!loginUserInfo.getType().equals(Constants.ONE)){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炰紒涓氫汉鍛樻棤娉曡繘琛岃鎿嶄綔");
         }
+        if(Objects.isNull(solutionId)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍙傛暟閿欒 - 鏂规淇℃伅");
+        }
+        Solutions solutions = solutionsMapper.selectById(solutionId);
+        if(Objects.isNull(solutions)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鏂规淇℃伅");
+        }
         ExcelImporter ie = null;
         List<MemberImport> dataList =null;
         try {
@@ -516,13 +528,16 @@
         Map<String,String> idCardMap = new HashMap<>();
         for(MemberImport model : dataList){
             //鏍¢獙鍙傛暟鏄惁鍚堟硶
-            validImportParam(model,idCardMap,dataList,index,solutionId);
+            validImportParam(model,idCardMap,dataList,index,solutions);
             index += 1;
         }
-        List<DispatchUnit> dispatchUnitList    = dispatchUnitJoinMapper.selectJoinList(DispatchUnit.class,
+        List<DispatchUnit> dispatchUnitList = new ArrayList<>();
+        List<SolutionWorktype> solutionWorktypeList = new ArrayList<>();
+        //2024骞�11鏈�6鏃�15:39:10 鍔犲叆 鏍规嵁鏂规鏄惁鏈変繚闄╂柟妗堣繘琛屽垽鏂�
+        if(Constants.equalsInteger(solutions.getHasDispatchUnit(),Constants.ZERO)){
+            dispatchUnitList    = dispatchUnitJoinMapper.selectJoinList(DispatchUnit.class,
                     new MPJLambdaWrapper<DispatchUnit>()
                             .selectAll(DispatchUnit.class)
-//                            .select("(select b.id from du_solution b where b.isdeleted=0 and b.dispatch_unit_id=t.id and b.solution_id="+solutionId+" limit 1) as du_solution_id" )
                             .select("(select b.id from du_solution b where b.isdeleted=0 and b.dispatch_unit_id=t.id and b.solution_id="+solutionId+"  order by b.CHECK_DATE desc  limit 1) as du_solution_id" )
                             .eq(DispatchUnit::getIsdeleted,Constants.ZERO)
                             .eq(DispatchUnit::getStatus,Constants.ZERO)
@@ -530,71 +545,88 @@
                             .eq(loginUserInfo.getType().equals(Constants.ONE),DispatchUnit::getCompanyId,loginUserInfo.getCompanyId())
                             .exists("select b.id from du_solution b where b.isdeleted=0 and b.dispatch_unit_id=t.id and b.status = 1 and  b.solution_id="+solutionId )
             );
-        if(CollectionUtils.isNotEmpty(dispatchUnitList)){
-            for (DispatchUnit dispatchUnit:dispatchUnitList) {
-                List<Worktype> worktypeList = worktypeMapper.selectList(new QueryWrapper<Worktype>().lambda()
-                        .eq(Worktype::getIsdeleted,Constants.ZERO)
-                        .eq(Worktype::getDataType,Constants.TWO)
-                        .eq(Worktype::getStatus,Constants.ZERO)
-                        .apply("id in ( select  dw.work_type_id from du_worktype dw where dw.status = 1" +
-                                " and  dw.du_solution_id = "+dispatchUnit.getDuSolutionId()+" )")
-                );
-                dispatchUnit.setWorktypeList(worktypeList);
+            if(CollectionUtils.isNotEmpty(dispatchUnitList)){
+                for (DispatchUnit dispatchUnit:dispatchUnitList) {
+                    List<Worktype> worktypeList = worktypeMapper.selectList(new QueryWrapper<Worktype>().lambda()
+                            .eq(Worktype::getIsdeleted,Constants.ZERO)
+                            .eq(Worktype::getDataType,Constants.TWO)
+                            .eq(Worktype::getStatus,Constants.ZERO)
+                            .apply("id in ( select  dw.work_type_id from du_worktype dw where dw.status = 1" +
+                                    " and  dw.du_solution_id = "+dispatchUnit.getDuSolutionId()+" )")
+                    );
+                    dispatchUnit.setWorktypeList(worktypeList);
+                }
+            }
+        }else{
+            //鏂规涓嶉�夋嫨娲鹃仯鍗曚綅鎯呭喌涓嬬殑涓氬姟
+            solutionWorktypeList = solutionWorktypeJoinMapper.selectJoinList(SolutionWorktype.class,
+                    new MPJLambdaWrapper<SolutionWorktype>()
+                            .selectAll(SolutionWorktype.class)
+                            .selectAs(Worktype::getName,SolutionWorktype::getWorktypeName)
+                            .leftJoin(Worktype.class,Worktype::getId,SolutionWorktype::getWorktypeId)
+                            .eq(SolutionWorktype::getSolutionId,solutions.getId())
+            );
+            if(CollectionUtils.isEmpty(solutionWorktypeList)){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝淇濋櫓鏂规涓嬫湭鏌ヨ鍒板伐绉嶄俊鎭�");
             }
         }
+
         index = Constants.TWO;
         for(MemberImport model : dataList){
-            //鏍¢獙浜哄憳鏄惁宸茬粡鍦ㄥ弬淇濅腑
-            isMemberValidForSolution(model,index,solutionId);
             //妫�鏌ユ淳閬e崟浣嶅拰宸ョ鏈夋晥鎬�
-            dealDuAndWorktype(model,index,dispatchUnitList);
+            dealDuAndWorktype(model,index,dispatchUnitList,solutions,solutionWorktypeList);
             index += 1;
             model.setSex(Constants.getSexByIdCard(model.getIdCard()));
         }
         return dataList;
     }
 
-    private void isMemberValidForSolution(MemberImport model, int index, Integer solutionId) {
-       /* ApplyDetail detail = applyDetailJoinMapper.selectJoinOne(ApplyDetail.class,new MPJLambdaWrapper<ApplyDetail>()
-                .last("limit 1"));
-        if(detail!=null){
-            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗�"+index+"琛岃韩浠借瘉涓恒��"+model.getIdCard()+"銆戜汉鍛樺凡缁忓湪璇ユ柟妗堜笅瀛樺湪鎶曚繚璁板綍锛�");
-        }*/
-    }
 
-    private void dealDuAndWorktype(MemberImport model, int index, List<DispatchUnit> dispatchUnitList  ) {
-
-        if(CollectionUtils.isNotEmpty(dispatchUnitList)){
-            Optional<DispatchUnit>  dispatchUnitOptional= dispatchUnitList.stream().filter(m->m.getName().equals(model.getDuName())).findFirst();
-            if(dispatchUnitOptional.isPresent()){
-                DispatchUnit dispatchUnit =  dispatchUnitOptional.get();
-                model.setDuId(dispatchUnit.getId());
-                if(StringUtils.isNotBlank(model.getWorkTypeName())&&CollectionUtils.isNotEmpty(dispatchUnit.getWorktypeList())){
-                    Optional<Worktype>  worktypeOptional= dispatchUnit.getWorktypeList().stream().filter(m->m.getName().replaceAll(" ","").equals(model.getWorkTypeName().replaceAll(" ",""))).findFirst();
-                    if(worktypeOptional.isPresent()){
-                        Worktype worktype = worktypeOptional.get();
-                        model.setWorktypeId(worktype.getId());
+    private void dealDuAndWorktype(MemberImport model, int index, List<DispatchUnit> dispatchUnitList , Solutions  solutions,List<SolutionWorktype> solutionWorktypeList) {
+        //2024骞�11鏈�6鏃�15:39:10 鍔犲叆 鏍规嵁鏂规鏄惁鏈変繚闄╂柟妗堣繘琛屽垽鏂�
+        if(Constants.equalsInteger(solutions.getHasDispatchUnit(),Constants.ZERO)){
+            if(CollectionUtils.isNotEmpty(dispatchUnitList)){
+                Optional<DispatchUnit>  dispatchUnitOptional= dispatchUnitList.stream().filter(m->m.getName().equals(model.getDuName())).findFirst();
+                if(dispatchUnitOptional.isPresent()){
+                    DispatchUnit dispatchUnit =  dispatchUnitOptional.get();
+                    model.setDuId(dispatchUnit.getId());
+                    if(StringUtils.isNotBlank(model.getWorkTypeName())&&CollectionUtils.isNotEmpty(dispatchUnit.getWorktypeList())){
+                        Optional<Worktype>  worktypeOptional= dispatchUnit.getWorktypeList().stream().filter(m->m.getName().replaceAll(" ","").equals(model.getWorkTypeName().replaceAll(" ",""))).findFirst();
+                        if(worktypeOptional.isPresent()){
+                            Worktype worktype = worktypeOptional.get();
+                            model.setWorktypeId(worktype.getId());
+                        }
                     }
                 }
             }
-        }
-        if(Objects.isNull(model.getDuId())){
-            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗�"+index+"琛屾暟鎹淳閬e崟浣嶃��"+model.getDuName()+"銆戜笉姝g‘锛�");
+            if(Objects.isNull(model.getDuId())){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗�"+index+"琛屾暟鎹淳閬e崟浣嶃��"+model.getDuName()+"銆戜笉姝g‘锛�");
+            }
+        }else{
+            Optional<SolutionWorktype>  worktypeOptional= solutionWorktypeList.stream().filter(m->m.getWorktypeName().replaceAll(" ","")
+                    .equals(model.getWorkTypeName().replaceAll(" ",""))).findFirst();
+            if(worktypeOptional.isPresent()){
+                SolutionWorktype worktype = worktypeOptional.get();
+                model.setWorktypeId(worktype.getId());
+            }
         }
         if(Objects.isNull(model.getWorktypeId())){
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗�"+index+"琛屾暟鎹伐绉嶃��"+model.getWorkTypeName()+"銆戜笉姝g‘锛�");
         }
     }
 
-    private void validImportParam(MemberImport model, Map<String, String> idCardMap, List<MemberImport> dataList,int index,Integer solutionId) {
+    private void validImportParam(MemberImport model, Map<String, String> idCardMap, List<MemberImport> dataList,int index,Solutions solutions) {
         if(StringUtils.isBlank(model.getName())){
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗�"+index+"琛屾暟鎹鍚嶄笉鑳戒负绌猴紒");
         }
         if(StringUtils.isBlank(model.getIdCard())){
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗�"+index+"琛屾暟鎹韩浠借瘉鍙蜂笉鑳戒负绌猴紒");
         }
-        if(StringUtils.isBlank(model.getDuName())){
-            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗�"+index+"琛屾暟鎹淳閬e崟浣嶄笉鑳戒负绌猴紒");
+        //2024骞�11鏈�6鏃�15:39:10 鍔犲叆 鏍规嵁鏂规鏄惁鏈変繚闄╂柟妗堣繘琛屽垽鏂�
+        if(Constants.equalsInteger(solutions.getHasDispatchUnit(),Constants.ZERO)){
+            if(StringUtils.isBlank(model.getDuName())){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗�"+index+"琛屾暟鎹淳閬e崟浣嶄笉鑳戒负绌猴紒");
+            }
         }
         if(StringUtils.isBlank(model.getWorkTypeName())){
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗�"+index+"琛屾暟鎹伐绉嶄笉鑳戒负绌猴紒");
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/NoticesServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/NoticesServiceImpl.java
index 108a8c3..9cedb60 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/NoticesServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/NoticesServiceImpl.java
@@ -101,10 +101,13 @@
         if(loginUserInfo.getType().equals(Constants.ONE)||loginUserInfo.getType().equals(Constants.TWO)){
             queryWrapper.eq(Notices::getCompanyId, loginUserInfo.getCompanyId());
         }else{
-            if(loginUserInfo.getCompanyIdList()!=null && loginUserInfo.getCompanyIdList().size()>0){
-                queryWrapper.in(Notices::getCompanyId, loginUserInfo.getCompanyIdList());
-            }else{
-                queryWrapper.eq(Notices::getCompanyId, -1);
+            if(!(Constants.equalsInteger(pageWrap.getModel().getQueryType(),Constants.NoticeObjectType.COMPANY_USER_APPLY.getKey())
+                    || Constants.equalsInteger(pageWrap.getModel().getQueryType(),Constants.NoticeObjectType.CONTRACT.getKey()))){
+                if(loginUserInfo.getCompanyIdList()!=null && loginUserInfo.getCompanyIdList().size()>0){
+                    queryWrapper.in(Notices::getCompanyId, loginUserInfo.getCompanyIdList());
+                }else{
+                    queryWrapper.eq(Notices::getCompanyId, -1);
+                }
             }
         }
 
@@ -145,11 +148,15 @@
             } else if(pageWrap.getModel().getQueryType().equals(Constants.TWO)){
                 queryWrapper.in(Notices::getObjType,new Integer[]{Constants.NoticeObjectType.SETTLE_CLAIMS.getKey() });
             }else if(pageWrap.getModel().getQueryType().equals(Constants.THREE)){
-                //濮旀墭淇濅唬鍔�
-                queryWrapper.notIn(Notices::getType,new Integer[]{Constants.NoticeType.SEVEN.getStatus() });
+                queryWrapper.notIn(Notices::getType,new Integer[]{Constants.NoticeObjectType.CONTRACT.getKey(),Constants.NoticeObjectType.SOLUTIONS.getKey(),Constants.NoticeObjectType.COMPANY_USER_APPLY.getKey() });
             }else if(pageWrap.getModel().getQueryType().equals(Constants.FOUR)){
-                //濮旀墭淇濅唬鍔�
                 queryWrapper.in(Notices::getType,new Integer[]{Constants.NoticeType.SEVEN.getStatus() });
+            } else if(pageWrap.getModel().getQueryType().equals(Constants.SIX)){
+                queryWrapper.in(Notices::getObjType,new Integer[]{Constants.NoticeObjectType.CONTRACT.getKey() });
+            }else if(pageWrap.getModel().getQueryType().equals(Constants.SEVEN)){
+                queryWrapper.in(Notices::getObjType,new Integer[]{Constants.NoticeObjectType.SOLUTIONS.getKey() });
+            }else if(pageWrap.getModel().getQueryType().equals(8)){
+                queryWrapper.in(Notices::getObjType,new Integer[]{Constants.NoticeObjectType.COMPANY_USER_APPLY.getKey() });
             }
         }
         if(CollectionUtils.isNotEmpty(pageWrap.getSorts())){
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/SolutionsBaseServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/SolutionsBaseServiceImpl.java
index 8e5ea03..c190001 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/SolutionsBaseServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/SolutionsBaseServiceImpl.java
@@ -1,20 +1,34 @@
 package com.doumee.service.business.impl;
 
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
-import com.doumee.dao.business.SolutionsBaseMapper;
-import com.doumee.dao.business.model.SolutionsBase;
+import com.doumee.dao.business.*;
+import com.doumee.dao.business.join.SolutionWorktypeJoinMapper;
+import com.doumee.dao.business.join.SolutionsBaseJoinMapper;
+import com.doumee.dao.business.model.*;
 import com.doumee.service.business.SolutionsBaseService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import io.swagger.models.auth.In;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.SecurityUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
-import java.util.List;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 淇濋櫓鏂规淇℃伅琛⊿ervice瀹炵幇
@@ -27,14 +41,152 @@
     @Autowired
     private SolutionsBaseMapper solutionsBaseMapper;
 
+    @Autowired
+    private SolutionsBaseJoinMapper solutionsBaseJoinMapper;
+
+    @Autowired
+    private InsuranceMapper insuranceMapper;
+
+    @Autowired
+    private SolutionWorktypeJoinMapper solutionWorktypeJoinMapper;
+
+    @Autowired
+    private WorktypeMapper worktypeMapper;
+
+    @Autowired
+    private CompanySolutionMapper companySolutionMapper;
+
+    @Autowired
+    private DuSolutionMapper duSolutionMapper;
+
+    @Autowired
+    private SolutionsMapper solutionsMapper;
+
+    @Autowired
+    private InsuranceApplyMapper insuranceApplyMapper;
+
     @Override
     public Integer create(SolutionsBase solutionsBase) {
-        solutionsBaseMapper.insert(solutionsBase);
+        LoginUserInfo user= (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        initCreateParam(solutionsBase);
+        if(solutionsBaseMapper.selectCount(new QueryWrapper<SolutionsBase>().lambda()
+                .eq(SolutionsBase::getName,solutionsBase.getName())
+                .eq(SolutionsBase::getIsdeleted,Constants.ZERO)
+                .eq(SolutionsBase::getDataType,Constants.ZERO)
+        )>Constants.ZERO){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"淇濋櫓涓绘柟妗堝悕绉板凡瀛樺湪");
+        }
+
+
+        solutionsBase.setCreateDate(new Date());
+        solutionsBase.setCreator(user.getId());
+        solutionsBase.setEditDate(new Date());
+        solutionsBase.setEditor(user.getId());
+        solutionsBase.setIsdeleted(Constants.ZERO);
+        solutionsBase.setStatus(Constants.ZERO);
+        solutionsBase.setVersion(UUID.randomUUID().toString());//鐗堟湰鍙�
+        solutionsBase.setDataType(Constants.ZERO);
+
+        //2024骞�6鏈�17鏃�15:56:18 浠呮敮鎸佹浛鎹㈡ā寮忎笅锛屾壒澧為厤缃棩鏈� 绛変簬 鎵瑰噺閰嶇疆鏃ユ湡
+        if(Constants.equalsInteger(solutionsBase.getDelOnlyReplace(),Constants.ONE)){
+            solutionsBase.setAddValidDays(solutionsBase.getDelValidDays());
+        }
+        solutionsBaseMapper.insert(solutionsBase); //鍩虹鐗堟湰
+
+        //濡傛灉鏈夊伐绉嶏紝鍒欎骇鐢熶竴涓柊鐨勬湁鏁堝巻鍙茬増鏈� ~
+        SolutionsBase newModel = new SolutionsBase();
+        BeanUtils.copyProperties(solutionsBase,newModel);
+        newModel.setId(null);
+        newModel.setBaseId(solutionsBase.getId());
+        newModel.setDataType(Constants.TWO);
+        solutionsBaseMapper.insert(newModel);
+
+        dealWorkTypeInsurance(solutionsBase,newModel,solutionsBase.getWorktypeIdList());
+
         return solutionsBase.getId();
+    }
+
+
+
+
+
+    private void dealWorkTypeInsurance(SolutionsBase solutionsBase, SolutionsBase newModel, List<Integer> worktypeIdList) {
+        Insurance  model = insuranceMapper.selectById(solutionsBase.getInsuranceId());
+        if(model == null  || !Constants.equalsInteger(model.getIsdeleted(),Constants.ZERO)
+                || !Constants.equalsInteger(model.getDataType(),Constants.TWO)){
+            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝璇ヤ繚闄╁叕鍙镐俊鎭笉瀛樺湪锛岃灏濊瘯鍒锋柊椤甸潰閲嶈瘯~" );
+        }
+        if( !Constants.equalsInteger(model.getStatus(),Constants.ZERO)){
+            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝璇ヤ繚闄╁叕鍙稿凡琚鐢紝璇峰皾璇曞埛鏂伴〉闈㈤噸璇晘" );
+        }
+        List<Worktype> worktypeList = worktypeMapper.selectList(new QueryWrapper<Worktype>().lambda()
+                .eq(Worktype::getInsuranceId,solutionsBase.getInsuranceId())
+                .eq(Worktype::getIsdeleted,Constants.ZERO)
+                .in(Worktype::getId,worktypeIdList));
+        if(worktypeList==null ||worktypeIdList.size()==0){
+            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝宸ョ淇℃伅閫夋嫨鏈夎锛岃灏濊瘯鍒锋柊椤甸潰閲嶈瘯~" );
+        }
+        int num =0;
+        for(Worktype type : worktypeList) {
+            //鍩虹鐗堟湰
+            SolutionWorktype w = new SolutionWorktype();
+            w.setSolutionId(solutionsBase.getId());
+            w.setIsdeleted(Constants.ZERO);
+            w.setCreator(newModel.getCreator());
+            w.setCreateDate(solutionsBase.getCreateDate());
+            w.setWorktypeId(type.getId());
+            w.setStatus(Constants.ZERO);
+            w.setSortnum(num++);
+            w.setType(Constants.ONE);
+            solutionWorktypeJoinMapper.insert(w);
+
+            //鍘嗗彶鐗堟湰鐨勫伐绉嶄俊鎭�
+            SolutionWorktype newType = new SolutionWorktype();
+            BeanUtils.copyProperties(w, newType);
+            newType.setSolutionId(newModel.getId());
+            solutionWorktypeJoinMapper.insert(newType);
+        }
+    }
+
+
+    private void initCreateParam(SolutionsBase solutionsBase) {
+        if(StringUtils.isBlank(solutionsBase.getName())||
+            StringUtils.isBlank(solutionsBase.getCompanyName())
+                || Objects.isNull(solutionsBase.getValidType())
+                || Objects.isNull(solutionsBase.getCanAdd())
+                || Objects.isNull(solutionsBase.getCanReduce())
+                || Objects.isNull(solutionsBase.getCanChangeUnit())
+                || Objects.isNull(solutionsBase.getDelOnlyReplace())
+                || Objects.isNull(solutionsBase.getAddValidDays())
+                || Objects.isNull(solutionsBase.getDelValidDays())
+                || Objects.isNull(solutionsBase.getInsuranceId())
+                ||solutionsBase.getInsuranceId()==null
+                || Constants.formatIntegerNum(solutionsBase.getMaxAge()) < 0
+                ||Constants.formatIntegerNum(solutionsBase.getMinAge()) < 0
+                ||Constants.formatIntegerNum( solutionsBase.getMinAge()) >Constants.formatIntegerNum(solutionsBase.getMaxAge())
+                || com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(solutionsBase.getWorktypeIdList())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        if(Constants.equalsInteger(solutionsBase.getValidType(),Constants.ZERO) && Objects.isNull(solutionsBase.getValidTypeNum())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
     }
 
     @Override
     public void deleteById(Integer id) {
+        SolutionsBase solutionsBase = solutionsBaseMapper.selectById(id);
+        if (!Objects.isNull(solutionsBase)){
+            //鏌ヨ涓绘柟妗堜笅鎵�鏈夊惎鐢ㄧ増鏈暟鎹腑 鏄惁瀛樺湪 瀛愭柟妗�
+            if(solutionsMapper.selectCount(new QueryWrapper<Solutions>()
+                    .lambda()
+                    .eq(Solutions::getDataType,Constants.ZERO)
+                    .eq(Solutions::getIsdeleted,Constants.ZERO)
+                            .eq(Solutions::getParentId,id)
+            )>Constants.ZERO){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"["+solutionsBase.getName()+"]涓嬪瓨鍦ㄥ瓙鏂规,鏃犳硶杩涜鍒犻櫎");
+            };
+        }
         solutionsBaseMapper.deleteById(id);
     }
 
@@ -45,17 +197,124 @@
     }
 
     @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
     public void deleteByIdInBatch(List<Integer> ids) {
         if (CollectionUtils.isEmpty(ids)) {
             return;
+        }
+        for (Integer id:ids) {
+            this.deleteById(id);
         }
         solutionsBaseMapper.deleteBatchIds(ids);
     }
 
     @Override
     public void updateById(SolutionsBase solutionsBase) {
+        LoginUserInfo user= (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
+        SolutionsBase model = findById(solutionsBase.getId());
+        if(model == null  || !Constants.equalsInteger(model.getIsdeleted(),Constants.ZERO)
+                || !Constants.equalsInteger(model.getDataType(),Constants.ZERO)){
+            throw  new BusinessException(ResponseStatus.DATA_EMPTY );
+        }
+        //鏁版嵁鏈夋晥鎬ф牎楠�
+        initCreateParam(solutionsBase);
+        //鏌ヨ鏄惁宸插瓨鍦ㄤ娇鐢ㄤ腑鐨勪繚鍗�
+        if(insuranceApplyMapper.selectCount(new QueryWrapper<InsuranceApply>().lambda()
+                .apply(" solution_id in (  select s.ID from solutions s where s.PARENT_ID in ( select id from solutions_base where BASE_ID =  "+solutionsBase.getId()+"  or id = "+solutionsBase.getId()+" ) )" )
+                .notIn(InsuranceApply::getStatus
+                        ,Constants.InsuranceApplyStatus.PLATFORM_RETURN
+                        ,Constants.InsuranceApplyStatus.CLOSE
+                        ,Constants.InsuranceApplyStatus.WTB_CLOSED
+                )
+        )>Constants.ZERO){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀛樺湪宸叉姇淇濈殑淇濆崟鏁版嵁,鏃犳硶杩涜淇敼");
+        };
+
+        if(solutionsBaseMapper.selectCount(new QueryWrapper<SolutionsBase>().lambda()
+                .eq(SolutionsBase::getName,solutionsBase.getName())
+                .eq(SolutionsBase::getIsdeleted,Constants.ZERO)
+                .eq(SolutionsBase::getDataType,Constants.ZERO)
+                .ne(SolutionsBase::getId,solutionsBase.getId())
+        )>Constants.ZERO){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"淇濋櫓涓绘柟妗堝悕绉板凡瀛樺湪");
+        }
+
+        solutionsBase.setEditor(user.getId());
+        solutionsBase.setVersion(UUID.randomUUID().toString());
+        solutionsBase.setEditDate(new Date());
+
+        //2024骞�6鏈�17鏃�15:56:18 浠呮敮鎸佹浛鎹㈡ā寮忎笅锛屾壒澧炴棩鏈� 绛変簬 鎵瑰噺鏃ユ湡
+        if(Constants.equalsInteger(solutionsBase.getDelOnlyReplace(),Constants.ONE)){
+            solutionsBase.setAddValidDays(solutionsBase.getDelValidDays());
+        }
         solutionsBaseMapper.updateById(solutionsBase);
+        SolutionsBase oldVersion = solutionsBaseMapper.selectOne(new QueryWrapper<SolutionsBase>()
+                .lambda()
+                .eq(SolutionsBase::getBaseId,solutionsBase.getId())
+                .eq(SolutionsBase::getDataType,Constants.TWO)
+                .last("limit 1")
+        );
+
+        if(Objects.isNull(oldVersion)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鍘嗗彶鐗堟湰鏁版嵁");
+        }
+
+        //濡傛灉淇敼锛屽垯浜х敓涓�涓柊鐨勫巻鍙茬増鏈� ~
+        SolutionsBase newModel = new SolutionsBase();
+        BeanUtils.copyProperties( findById(solutionsBase.getId()),newModel);
+        newModel.setId(null);
+        newModel.setVersion(solutionsBase.getVersion());
+        newModel.setCreateDate(new Date());
+        newModel.setBaseId(solutionsBase.getId());
+        newModel.setDataType(Constants.TWO);
+        solutionsBaseMapper.insert(newModel);
+
+        //鍒犻櫎鐖舵柟妗堜笅鎵�鏈夊伐绉嶆暟鎹�
+        solutionWorktypeJoinMapper.delete(new UpdateWrapper<SolutionWorktype>()
+                .lambda()
+                .eq(SolutionWorktype::getSolutionId,solutionsBase.getId())
+                .eq(SolutionWorktype::getType,Constants.ONE)
+        );
+        //鍒犻櫎鐖舵柟妗堜笅鎵�鏈夊瓙鏂规鐨勫伐绉嶆暟鎹�
+
+        solutionWorktypeJoinMapper.delete(new UpdateWrapper<SolutionWorktype>()
+                .lambda()
+                .eq(SolutionWorktype::getType,Constants.ZERO)
+                .apply(" SOLUTION_ID in ( select s.id  from solutions s where s.PARENT_ID = "+solutionsBase.getId()+" ) ")
+        );
+
+        dealWorkTypeInsurance(solutionsBase,newModel,solutionsBase.getWorktypeIdList());
+
+
+        solutionsBaseMapper.update(null,new UpdateWrapper<SolutionsBase>()
+                .lambda()
+                .ne(SolutionsBase::getId,newModel.getId())
+                .eq(SolutionsBase::getBaseId,solutionsBase.getId())
+                .eq(SolutionsBase::getDataType,Constants.TWO)
+                .set(SolutionsBase::getDataType,Constants.ONE)
+        );
+
+        //鏇存柊company_solution 浣跨敤鏂扮増鏈殑鏁版嵁
+        companySolutionMapper.update(null,
+                new UpdateWrapper<CompanySolution>()
+                        .lambda()
+                        .eq(CompanySolution::getStatus,Constants.ZERO)
+                        .set(CompanySolution::getSolutionId,newModel.getId())
+                        .eq(CompanySolution::getSolutionBaseId,solutionsBase.getId())
+        );
+
+        //鏇存柊 du_solution 浣跨敤鏂扮増鏈殑鏁版嵁
+        duSolutionMapper.update(null,
+                new UpdateWrapper<DuSolution>()
+                        .lambda()
+                        .eq(DuSolution::getIsdeleted, Constants.ZERO)
+                        .eq(DuSolution::getStatus, Constants.ONE)
+                        .set(DuSolution::getSolutionId,newModel.getId())
+                        .eq(DuSolution::getSolutionId,oldVersion.getId()));
+
     }
+
+
 
     @Override
     public void updateByIdInBatch(List<SolutionsBase> solutionsBases) {
@@ -67,9 +326,70 @@
         }
     }
 
+
+    @Override
+    public void updateStatus(SolutionsBase solutionsBase){
+        if(solutionsBase.getId() == null || solutionsBase.getStatus()==null || solutionsBase.getStatus()<0||solutionsBase.getStatus()>1){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST );
+        }
+        SolutionsBase model = findById(solutionsBase.getId());
+        if(model == null || !Constants.equalsInteger(model.getIsdeleted(),Constants.ZERO)
+                || !Constants.equalsInteger(model.getDataType(),Constants.ZERO)){
+            throw  new BusinessException(ResponseStatus.DATA_EMPTY );
+        }
+        if(Constants.equalsInteger(model.getStatus(),solutionsBase.getStatus())){
+            //濡傛灉鐘舵�佷笉鍙戠敓鏀瑰彉锛岀洿鎺ヨ繑鍥�
+            return;
+        }
+        LoginUserInfo user= (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        //鍚屾椂鏇存柊鍩鸿〃鍜屽巻鍙茬増鏈墍鏈夋暟鎹姸鎬�
+        solutionsBaseMapper.update(null,new UpdateWrapper<SolutionsBase>()
+                .lambda()
+                .and(m -> m.eq(SolutionsBase::getId,model.getId()).or().eq(SolutionsBase::getBaseId,model.getId()))
+                .eq(SolutionsBase::getIsdeleted,Constants.ZERO)
+                .set(SolutionsBase::getEditDate,new Date())
+                .set(SolutionsBase::getEditor,user.getId())
+                .set(SolutionsBase::getStatus,solutionsBase.getStatus())
+        );
+
+        //濡傛灉鏄鐢紝鍒欎慨鏀规柟妗堝瓙琛ㄧ殑鍏ㄩ儴鏁版嵁涓虹鐢�
+        if(Constants.equalsInteger(solutionsBase.getStatus(),Constants.ONE)){
+            solutionsMapper.update(null,new UpdateWrapper<Solutions>()
+                    .lambda()
+                    .set(Solutions::getStatus,solutionsBase.getStatus())
+                    .set(Solutions::getEditDate,new Date())
+                    .set(Solutions::getEditor,user.getId())
+                    .eq(Solutions::getParentId,solutionsBase.getId())
+            );
+        }
+
+    }
+
+
     @Override
     public SolutionsBase findById(Integer id) {
-        return solutionsBaseMapper.selectById(id);
+        MPJLambdaWrapper<SolutionsBase> queryWrapper = new MPJLambdaWrapper<>();
+        queryWrapper.selectAll(SolutionsBase.class);
+        queryWrapper.selectAs(Insurance::getName,SolutionsBase::getInsuranceName);
+        queryWrapper.selectAs(Company::getName,SolutionsBase::getShopName);
+        queryWrapper.leftJoin(Insurance.class,Insurance::getId,SolutionsBase::getInsuranceId);
+        queryWrapper.leftJoin(Company.class,Company::getId,SolutionsBase::getShopId);
+        queryWrapper.eq(SolutionsBase::getId,id);
+        SolutionsBase model = solutionsBaseJoinMapper.selectJoinOne(SolutionsBase.class,queryWrapper);
+        if(model == null  || !Constants.equalsInteger(model.getIsdeleted(),Constants.ZERO)){
+            throw  new BusinessException(ResponseStatus.DATA_EMPTY );
+        }
+        MPJLambdaWrapper<SolutionWorktype> wrapper = new MPJLambdaWrapper<>();
+        wrapper.selectAll(SolutionWorktype.class);
+        wrapper.selectAs(Worktype::getName,SolutionWorktype::getWorktypeName);
+        wrapper.leftJoin(Worktype.class,Worktype::getId,SolutionWorktype::getWorktypeId);
+        wrapper.eq(SolutionWorktype::getSolutionId,id);
+        wrapper.eq(SolutionWorktype::getType,Constants.ONE);
+        wrapper.eq(SolutionWorktype::getIsdeleted,Constants.ZERO);
+        wrapper.orderByAsc(SolutionWorktype::getSortnum);
+        List<SolutionWorktype> worktypeList = solutionWorktypeJoinMapper.selectJoinList(SolutionWorktype.class,wrapper);
+        model.setWorktypeList(worktypeList);
+        return model;
     }
 
     @Override
@@ -80,110 +400,30 @@
 
     @Override
     public List<SolutionsBase> findList(SolutionsBase solutionsBase) {
-        QueryWrapper<SolutionsBase> wrapper = new QueryWrapper<>(solutionsBase);
+        QueryWrapper<SolutionsBase> wrapper = new QueryWrapper<>();
+        wrapper.lambda().eq(SolutionsBase::getDataType,Constants.ZERO);
+        wrapper.lambda().eq(SolutionsBase::getIsdeleted,Constants.ZERO);
         return solutionsBaseMapper.selectList(wrapper);
     }
-  
+
     @Override
     public PageData<SolutionsBase> findPage(PageWrap<SolutionsBase> pageWrap) {
         IPage<SolutionsBase> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        QueryWrapper<SolutionsBase> queryWrapper = new QueryWrapper<>();
+        MPJLambdaWrapper<SolutionsBase> queryWrapper = new MPJLambdaWrapper<>();
         Utils.MP.blankToNull(pageWrap.getModel());
-        if (pageWrap.getModel().getId() != null) {
-            queryWrapper.lambda().eq(SolutionsBase::getId, pageWrap.getModel().getId());
-        }
-        if (pageWrap.getModel().getCreator() != null) {
-            queryWrapper.lambda().eq(SolutionsBase::getCreator, pageWrap.getModel().getCreator());
-        }
-        if (pageWrap.getModel().getCreateDate() != null) {
-            queryWrapper.lambda().ge(SolutionsBase::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
-            queryWrapper.lambda().le(SolutionsBase::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
-        }
-        if (pageWrap.getModel().getEditor() != null) {
-            queryWrapper.lambda().eq(SolutionsBase::getEditor, pageWrap.getModel().getEditor());
-        }
-        if (pageWrap.getModel().getEditDate() != null) {
-            queryWrapper.lambda().ge(SolutionsBase::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
-            queryWrapper.lambda().le(SolutionsBase::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
-        }
-        if (pageWrap.getModel().getIsdeleted() != null) {
-            queryWrapper.lambda().eq(SolutionsBase::getIsdeleted, pageWrap.getModel().getIsdeleted());
-        }
+        queryWrapper.selectAll(SolutionsBase.class);
+        queryWrapper.selectAs(Insurance::getName,SolutionsBase::getInsuranceName);
+        queryWrapper.selectAs(Company::getName,SolutionsBase::getShopName);
+        queryWrapper.leftJoin(Insurance.class,Insurance::getId,SolutionsBase::getInsuranceId);
+        queryWrapper.leftJoin(Company.class,Company::getId,SolutionsBase::getShopId);
+        //鍙煡璇㈡湭鍒犻櫎鐨勬暟鎹�
+        queryWrapper.eq(SolutionsBase::getIsdeleted,Constants.ZERO);
+        //鍙煡璇㈠熀纭�鐗堟湰鏁版嵁
+        queryWrapper.eq(SolutionsBase::getDataType,Constants.ZERO);
         if (pageWrap.getModel().getName() != null) {
-            queryWrapper.lambda().eq(SolutionsBase::getName, pageWrap.getModel().getName());
+            queryWrapper.like(SolutionsBase::getName, pageWrap.getModel().getName());
         }
-        if (pageWrap.getModel().getRemark() != null) {
-            queryWrapper.lambda().eq(SolutionsBase::getRemark, pageWrap.getModel().getRemark());
-        }
-        if (pageWrap.getModel().getStatus() != null) {
-            queryWrapper.lambda().eq(SolutionsBase::getStatus, pageWrap.getModel().getStatus());
-        }
-        if (pageWrap.getModel().getSortnum() != null) {
-            queryWrapper.lambda().eq(SolutionsBase::getSortnum, pageWrap.getModel().getSortnum());
-        }
-        if (pageWrap.getModel().getInsuranceId() != null) {
-            queryWrapper.lambda().eq(SolutionsBase::getInsuranceId, pageWrap.getModel().getInsuranceId());
-        }
-        if (pageWrap.getModel().getValidType() != null) {
-            queryWrapper.lambda().eq(SolutionsBase::getValidType, pageWrap.getModel().getValidType());
-        }
-        if (pageWrap.getModel().getMinAge() != null) {
-            queryWrapper.lambda().eq(SolutionsBase::getMinAge, pageWrap.getModel().getMinAge());
-        }
-        if (pageWrap.getModel().getMaxAge() != null) {
-            queryWrapper.lambda().eq(SolutionsBase::getMaxAge, pageWrap.getModel().getMaxAge());
-        }
-        if (pageWrap.getModel().getSingleWorktype() != null) {
-            queryWrapper.lambda().eq(SolutionsBase::getSingleWorktype, pageWrap.getModel().getSingleWorktype());
-        }
-        if (pageWrap.getModel().getSpecialAgreement() != null) {
-            queryWrapper.lambda().eq(SolutionsBase::getSpecialAgreement, pageWrap.getModel().getSpecialAgreement());
-        }
-        if (pageWrap.getModel().getSpecialInfo() != null) {
-            queryWrapper.lambda().eq(SolutionsBase::getSpecialInfo, pageWrap.getModel().getSpecialInfo());
-        }
-        if (pageWrap.getModel().getOrtherInfo() != null) {
-            queryWrapper.lambda().eq(SolutionsBase::getOrtherInfo, pageWrap.getModel().getOrtherInfo());
-        }
-        if (pageWrap.getModel().getVersion() != null) {
-            queryWrapper.lambda().eq(SolutionsBase::getVersion, pageWrap.getModel().getVersion());
-        }
-        if (pageWrap.getModel().getDataType() != null) {
-            queryWrapper.lambda().eq(SolutionsBase::getDataType, pageWrap.getModel().getDataType());
-        }
-        if (pageWrap.getModel().getBaseId() != null) {
-            queryWrapper.lambda().eq(SolutionsBase::getBaseId, pageWrap.getModel().getBaseId());
-        }
-        if (pageWrap.getModel().getSignKeyword() != null) {
-            queryWrapper.lambda().eq(SolutionsBase::getSignKeyword, pageWrap.getModel().getSignKeyword());
-        }
-        if (pageWrap.getModel().getValidTypeNum() != null) {
-            queryWrapper.lambda().eq(SolutionsBase::getValidTypeNum, pageWrap.getModel().getValidTypeNum());
-        }
-        if (pageWrap.getModel().getShopId() != null) {
-            queryWrapper.lambda().eq(SolutionsBase::getShopId, pageWrap.getModel().getShopId());
-        }
-        if (pageWrap.getModel().getAddValidDays() != null) {
-            queryWrapper.lambda().eq(SolutionsBase::getAddValidDays, pageWrap.getModel().getAddValidDays());
-        }
-        if (pageWrap.getModel().getDelValidDays() != null) {
-            queryWrapper.lambda().eq(SolutionsBase::getDelValidDays, pageWrap.getModel().getDelValidDays());
-        }
-        if (pageWrap.getModel().getCanAdd() != null) {
-            queryWrapper.lambda().eq(SolutionsBase::getCanAdd, pageWrap.getModel().getCanAdd());
-        }
-        if (pageWrap.getModel().getCanReduce() != null) {
-            queryWrapper.lambda().eq(SolutionsBase::getCanReduce, pageWrap.getModel().getCanReduce());
-        }
-        if (pageWrap.getModel().getCanChangeUnit() != null) {
-            queryWrapper.lambda().eq(SolutionsBase::getCanChangeUnit, pageWrap.getModel().getCanChangeUnit());
-        }
-        if (pageWrap.getModel().getDelOnlyReplace() != null) {
-            queryWrapper.lambda().eq(SolutionsBase::getDelOnlyReplace, pageWrap.getModel().getDelOnlyReplace());
-        }
-        if (pageWrap.getModel().getCompanyName() != null) {
-            queryWrapper.lambda().eq(SolutionsBase::getCompanyName, pageWrap.getModel().getCompanyName());
-        }
+
         for(PageWrap.SortData sortData: pageWrap.getSorts()) {
             if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                 queryWrapper.orderByDesc(sortData.getProperty());
@@ -191,7 +431,8 @@
                 queryWrapper.orderByAsc(sortData.getProperty());
             }
         }
-        return PageData.from(solutionsBaseMapper.selectPage(page, queryWrapper));
+        IPage<SolutionsBase> iPageData = solutionsBaseJoinMapper.selectJoinPage(page,SolutionsBase.class,queryWrapper);
+        return PageData.from(iPageData);
     }
 
     @Override
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/SolutionsServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/SolutionsServiceImpl.java
index 03f2ada..1e2232c 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/SolutionsServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/SolutionsServiceImpl.java
@@ -12,6 +12,7 @@
 import com.doumee.dao.business.join.SolutionWorktypeJoinMapper;
 import com.doumee.dao.business.join.SolutionsJoinMapper;
 import com.doumee.dao.business.model.*;
+import com.doumee.dao.system.model.SystemUser;
 import com.doumee.service.business.CompanyService;
 import com.doumee.service.business.SolutionsService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -56,14 +57,16 @@
     private CompanySolutionMapper companySolutionMapper;
     @Autowired
     private DuSolutionMapper duSolutionMapper;
+    @Autowired
+    private SolutionsBaseMapper solutionsBaseMapper;
+    @Autowired
+    private InsuranceApplyMapper insuranceApplyMapper;
 
     @Override
     @Transactional(rollbackFor = {BusinessException.class,Exception.class})
     public Integer create(Solutions solutions) {
         LoginUserInfo user= (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
         initCreateParam(solutions);//宸ョ鏁版嵁鏈夋晥鎬ф楠岋紝鍘婚櫎绌虹櫧琛屾暟鎹�
-
-
         if(solutionsMapper.selectCount(new QueryWrapper<Solutions>().lambda()
                 .eq(Solutions::getName,solutions.getName())
                 .eq(Solutions::getIsdeleted,Constants.ZERO)
@@ -71,17 +74,30 @@
         )>Constants.ZERO){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"淇濋櫓鏂规鍚嶇О宸插瓨鍦�");
         }
-        solutions.setCanAdd(Constants.formatIntegerNum(solutions.getCanAdd()));
-        solutions.setCanReduce(Constants.formatIntegerNum(solutions.getCanReduce()));
-        solutions.setCanChangeUnit(Constants.formatIntegerNum(solutions.getCanChangeUnit()));
-        solutions.setAddValidDays(Constants.formatIntegerNum(solutions.getAddValidDays()));
-        solutions.setDelValidDays(Constants.formatIntegerNum(solutions.getDelValidDays()));
+        SolutionsBase solutionsBase = solutionsBaseMapper.selectById(solutions.getParentId());
+        if(Objects.isNull(solutionsBase)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌涓绘柟妗堟暟鎹�!");
+        }
+        solutions.setInsuranceId(solutionsBase.getInsuranceId());
+        solutions.setCanAdd(solutionsBase.getCanAdd());
+        solutions.setCanReduce(solutionsBase.getCanReduce());
+        solutions.setCanChangeUnit(solutionsBase.getCanChangeUnit());
+        solutions.setAddValidDays(solutionsBase.getAddValidDays());
+        solutions.setDelValidDays(solutionsBase.getDelValidDays());
+        solutions.setMinAge(solutionsBase.getMinAge());
+        solutions.setMaxAge(solutionsBase.getMaxAge());
+        solutions.setSpecialInfo(solutionsBase.getSpecialInfo());
+        solutions.setSpecialAgreement(solutionsBase.getSpecialAgreement());
+        solutions.setOrtherInfo(solutionsBase.getOrtherInfo());
+        solutions.setValidType(solutionsBase.getValidType());
+        solutions.setValidTypeNum(solutionsBase.getValidTypeNum());
         solutions.setIsdeleted(Constants.ZERO);
         solutions.setCreator(user.getId());
         solutions.setCreateDate(new Date());
         solutions.setVersion(UUID.randomUUID().toString());//鐗堟湰鍙�
         solutions.setDataType(Constants.ZERO);
         solutions.setStatus(Constants.ZERO);
+        solutions.setCorrectWarnTime(solutionsBase.getCorrectWarnTime());
         //2024骞�6鏈�17鏃�15:56:18 浠呮敮鎸佹浛鎹㈡ā寮忎笅锛屾壒澧炴棩鏈� 绛変簬 鎵瑰噺鏃ユ湡
         if(Constants.equalsInteger(solutions.getDelOnlyReplace(),Constants.ONE)){
             solutions.setAddValidDays(solutions.getDelValidDays());
@@ -96,24 +112,53 @@
         newModel.setDataType(Constants.TWO);
         solutionsMapper.insert(newModel);
 
-        dealWorkType(solutions,newModel,solutions.getWorktypeIdList(),true);
-        if(Constants.equalsObject(solutions.getType(),Constants.ONE) ){
-           if  (solutions.getFanganFile()==null || StringUtils.isBlank(solutions.getFanganFile().getFileurl())){
-             throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"璇蜂笂浼犳柟妗堢‘璁や功锛�");
-            }
+        List<SolutionWorktype> worktypes = solutionWorktypeJoinMapper.selectList(
+                new QueryWrapper<SolutionWorktype>().lambda()
+                .eq(SolutionWorktype::getSolutionId,solutionsBase.getId())
+                .eq(SolutionWorktype::getType,Constants.ONE)
+                .eq(SolutionWorktype::getIsdeleted,Constants.ZERO)
+        );
 
-            Multifile file = solutions.getFanganFile();
-            file.setIsdeleted(Constants.ZERO);
-            file.setCreateDate(new Date());
-            file.setCreator(user.getId());
-            file.setObjId(solutions.getId());
-            file.setObjType(Constants.MultiFile.SOLUTIONS_CONFIRMATION_LATTER.getKey());
-            file.setType(Constants.formatIntegerNum(file.getType()));
-            multifileMapper.insert(file);
-           file.setObjId(newModel.getId());
-            multifileMapper.insert(file);
+        dealWorkType(solutions,newModel,worktypes);
+
+        if  (solutions.getFanganFile()==null || StringUtils.isBlank(solutions.getFanganFile().getFileurl())){
+             throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"璇蜂笂浼犳柟妗堢‘璁や功锛�");
         }
+        Multifile file = solutions.getFanganFile();
+        file.setIsdeleted(Constants.ZERO);
+        file.setCreateDate(new Date());
+        file.setCreator(user.getId());
+        file.setObjId(solutions.getId());
+        file.setObjType(Constants.MultiFile.SOLUTIONS_CONFIRMATION_LATTER.getKey());
+        file.setType(Constants.formatIntegerNum(file.getType()));
+        multifileMapper.insert(file);
+        file.setObjId(newModel.getId());
+        multifileMapper.insert(file);
         return solutions.getId();
+    }
+
+    private void dealWorkType(Solutions solutions, Solutions newModel, List<SolutionWorktype> worktypes) {
+
+        int num =0;
+        for(SolutionWorktype type : worktypes) {
+            //鍩虹鐗堟湰
+            SolutionWorktype w = new SolutionWorktype();
+            w.setSolutionId(solutions.getId());
+            w.setIsdeleted(Constants.ZERO);
+            w.setCreator(newModel.getCreator());
+            w.setCreateDate(solutions.getCreateDate());
+            w.setWorktypeId(type.getWorktypeId());
+            w.setStatus(Constants.ZERO);
+            w.setType(Constants.ZERO);
+            w.setSortnum(num++);
+            solutionWorktypeJoinMapper.insert(w);
+
+            //鍘嗗彶鐗堟湰鐨勫伐绉嶄俊鎭�
+            SolutionWorktype newType = new SolutionWorktype();
+            BeanUtils.copyProperties(w, newType);
+            newType.setSolutionId(newModel.getId());
+            solutionWorktypeJoinMapper.insert(newType);
+        }
     }
 
     private void dealWorkType(Solutions solutions, Solutions newModel, List<Integer> worktypeIdList, boolean b) {
@@ -151,28 +196,26 @@
             newType.setSolutionId(newModel.getId());
             solutionWorktypeJoinMapper.insert(newType);
         }
-
     }
 
     private void initCreateParam(Solutions solutions) {
         if(StringUtils.isBlank(solutions.getName())
-                ||solutions.getInsuranceId()==null
-                ||solutions.getWorktypeIdList()==null
-                ||solutions.getWorktypeIdList().size()==0
-                ||Constants.formatIntegerNum(solutions.getMaxAge()) < 0
-                ||Constants.formatIntegerNum(solutions.getMinAge()) < 0
+                ||Objects.isNull(solutions.getParentId())
+                ||Objects.isNull(solutions.getType())
+                ||Objects.isNull(solutions.getRetrial())
+                ||Objects.isNull(solutions.getFanganFile())
 //                ||Constants.formatIntegerNum(solutions.getPriceCycleUnit()) < 0
                 ||Constants.formatIntegerNum(solutions.getInsureCycle()) < 0
                 ||Constants.formatIntegerNum(solutions.getInsureCycleUnit()) < 0
-                ||Constants.formatIntegerNum( solutions.getMinAge()) >Constants.formatIntegerNum(solutions.getMaxAge())
                 || Constants.formatBigdecimal(solutions.getPrice()).compareTo(new BigDecimal(0)) !=1
         ){
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
         }
-        if(!(Constants.equalsInteger(solutions.getInsureCycleUnit(),Constants.ZERO)
-                ||Constants.equalsInteger(solutions.getInsureCycleUnit(),solutions.getInsureCycleUnit()))){
-            solutions.setDelOnlyReplace(Constants.ZERO);
+        //濮旀墭鎶曚繚鍔犵鏂瑰紡
+        if(Constants.equalsInteger(solutions.getType(),Constants.ONE) && (  Objects.isNull(solutions.getSignType()) || Objects.isNull(solutions.getShopId()))){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
         }
+
     }
 
     @Override
@@ -205,6 +248,19 @@
         }
         //鏁版嵁鏈夋晥鎬ф牎楠�
         initCreateParam(solutions);
+
+        //鏌ヨ鏄惁宸插瓨鍦ㄤ娇鐢ㄤ腑鐨勪繚鍗�
+        if(insuranceApplyMapper.selectCount(new QueryWrapper<InsuranceApply>().lambda()
+                .apply(" solution_id in (  select id from solutions where BASE_ID = "+solutions.getId()+" or id = "+solutions.getId()+"  )" )
+                .notIn(InsuranceApply::getStatus
+                        ,Constants.InsuranceApplyStatus.PLATFORM_RETURN.getKey()
+                        ,Constants.InsuranceApplyStatus.CLOSE.getKey()
+                        ,Constants.InsuranceApplyStatus.WTB_CLOSED.getKey()
+                )
+        )>Constants.ZERO){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀛樺湪宸叉姇淇濈殑淇濆崟鏁版嵁,鏃犳硶杩涜淇敼");
+        };
+
         solutions.setType(null);//涓嶆敮鎸佷慨鏀规姇淇濇柟妗�
         if(solutionsMapper.selectCount(new QueryWrapper<Solutions>().lambda()
                 .eq(Solutions::getName,solutions.getName())
@@ -218,10 +274,6 @@
         solutions.setVersion(UUID.randomUUID().toString());
         solutions.setEditDate(new Date());
 
-        //2024骞�6鏈�17鏃�15:56:18 浠呮敮鎸佹浛鎹㈡ā寮忎笅锛屾壒澧炴棩鏈� 绛変簬 鎵瑰噺鏃ユ湡
-        if(Constants.equalsInteger(solutions.getDelOnlyReplace(),Constants.ONE)){
-            solutions.setAddValidDays(solutions.getDelValidDays());
-        }
         solutionsMapper.updateById(solutions);
 
         Solutions oldVersion = solutionsMapper.selectOne(new QueryWrapper<Solutions>()
@@ -245,35 +297,9 @@
         newModel.setDataType(Constants.TWO);
         solutionsMapper.insert(newModel);
 
-        //鍒犻櫎鎵�鏈夊伐绉嶆暟鎹�
-        solutionWorktypeJoinMapper.delete(new UpdateWrapper<SolutionWorktype>()
-                .lambda()
-                .eq(SolutionWorktype::getSolutionId,solutions.getId())
-        );
-        if(Constants.equalsObject(model.getType(),Constants.ONE) ){
-            if  (solutions.getFanganFile()!=null && StringUtils.isNotBlank(solutions.getFanganFile().getFileurl())){
-
-                multifileMapper.update(null,new UpdateWrapper<Multifile>().lambda()
-                                .set(Multifile::getIsdeleted,Constants.ONE)
-                                .set(Multifile::getEditDate,solutions.getEditDate())
-                                .set(Multifile::getEditor,solutions.getEditor())
-                                .eq(Multifile::getObjId,solutions.getId())
-                                .eq(Multifile::getIsdeleted,Constants.ZERO)
-                                .eq(Multifile::getObjType,Constants.MultiFile.SOLUTIONS_CONFIRMATION_LATTER.getKey()));
-
-                Multifile file = solutions.getFanganFile();
-                file.setIsdeleted(Constants.ZERO);
-                file.setCreateDate(solutions.getEditDate());
-                file.setCreator(solutions.getEditor());
-                file.setObjId(solutions.getId());
-                file.setObjType(Constants.MultiFile.SOLUTIONS_CONFIRMATION_LATTER.getKey());
-                file.setType(Constants.formatIntegerNum(file.getType()));
-                multifileMapper.insert(file);
-                file.setObjId(newModel.getId());
-                multifileMapper.insert(file);
-            }
-        }
-
+        /**
+         * 淇敼褰撳墠鐨勫惎鐢ㄦ柟妗堜负鍘嗗彶鏂规
+         */
         solutionsMapper.update(null,new UpdateWrapper<Solutions>()
                 .lambda()
                 .ne(Solutions::getId,newModel.getId())
@@ -282,8 +308,42 @@
                 .set(Solutions::getDataType,Constants.ONE)
                 .set(StringUtils.isNotBlank(solutions.getSignKeyword()),Solutions::getSignKeyword,solutions.getSignKeyword())
         );
-        //澶勭悊宸ョ淇℃伅锛屾柊澧炴渶鏂扮殑锛屽悓鏃朵骇鐢熷巻鍙茬増鏈�
-        dealWorkType(solutions,newModel,solutions.getWorktypeIdList(),false);
+
+        if  (solutions.getFanganFile()==null || StringUtils.isBlank(solutions.getFanganFile().getFileurl())){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"璇蜂笂浼犳柟妗堢‘璁や功锛�");
+        }
+        multifileMapper.update(null,new UpdateWrapper<Multifile>().lambda()
+                        .set(Multifile::getIsdeleted,Constants.ONE)
+                        .set(Multifile::getEditDate,solutions.getEditDate())
+                        .set(Multifile::getEditor,solutions.getEditor())
+                        .eq(Multifile::getObjId,solutions.getId())
+                        .eq(Multifile::getIsdeleted,Constants.ZERO)
+                        .eq(Multifile::getObjType,Constants.MultiFile.SOLUTIONS_CONFIRMATION_LATTER.getKey()));
+        Multifile file = solutions.getFanganFile();
+        file.setIsdeleted(Constants.ZERO);
+        file.setCreateDate(solutions.getEditDate());
+        file.setCreator(solutions.getEditor());
+        file.setObjId(solutions.getId());
+        file.setObjType(Constants.MultiFile.SOLUTIONS_CONFIRMATION_LATTER.getKey());
+        file.setType(Constants.formatIntegerNum(file.getType()));
+        multifileMapper.insert(file);
+        file.setObjId(newModel.getId());
+        multifileMapper.insert(file);
+
+        //鍒犻櫎鎵�鏈夊伐绉嶆暟鎹�
+        solutionWorktypeJoinMapper.delete(new UpdateWrapper<SolutionWorktype>()
+                .lambda()
+                .eq(SolutionWorktype::getSolutionId,solutions.getId())
+        );
+
+        List<SolutionWorktype> worktypes = solutionWorktypeJoinMapper.selectList(
+                new QueryWrapper<SolutionWorktype>().lambda()
+                        .eq(SolutionWorktype::getSolutionId,solutions.getParentId())
+                        .eq(SolutionWorktype::getType,Constants.ONE)
+                        .eq(SolutionWorktype::getIsdeleted,Constants.ZERO)
+        );
+
+        dealWorkType(solutions,newModel,worktypes);
 
         //鏇存柊company_solution 浣跨敤鏂扮増鏈殑鏁版嵁
         companySolutionMapper.update(null,
@@ -343,8 +403,11 @@
         queryWrapper.selectAll(Solutions.class);
         queryWrapper.selectAs(Insurance::getName,Solutions::getInsuranceName);
         queryWrapper.selectAs(Company::getName,Solutions::getShopName);
+        queryWrapper.selectAs(SolutionsBase::getName,Solutions::getSolutionBaseName);
         queryWrapper.leftJoin(Insurance.class,Insurance::getId,Solutions::getInsuranceId);
         queryWrapper.leftJoin(Company.class,Company::getId,Solutions::getShopId);
+        queryWrapper.leftJoin(SolutionsBase.class,SolutionsBase::getId,Solutions::getParentId);
+
         queryWrapper.eq(Solutions::getId,id);
         Solutions model = solutionsJoinMapper.selectJoinOne(Solutions.class,queryWrapper);
         if(model == null  || !Constants.equalsInteger(model.getIsdeleted(),Constants.ZERO)){
@@ -382,7 +445,7 @@
     public List<Solutions> findList(Solutions solutions) {
         LoginUserInfo user = (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
         solutions.setIsdeleted(Constants.ZERO);
-        solutions.setStatus(Constants.ZERO);
+        solutions.setStatus(Objects.nonNull(solutions.getStatus())?solutions.getStatus():null);
         if(solutions.getDataType() == null){
             solutions.setDataType(Constants.TWO);
         }
@@ -390,7 +453,8 @@
         if(Constants.equalsObject(user.getType(),Constants.TWO)){
             //濡傛灉鏄垹闄�
 //                wrapper.lambda().exists("select c.id from company_solution c left join solutions d on c.solution_id=d.id where c.isdeleted=0 and d.base_id=solutions.base_id and c.shop_id="+user.getCompanyId());//璁剧疆鏃犳晥璁块棶
-                wrapper.apply("((solutions.type=0 and exists(select cs.id from company_solution cs left join solutions s on cs.solution_id=s.id where cs.isdeleted=0 and s.base_id=solutions.base_id and cs.shop_id="+user.getCompanyId()+")) or (" +
+                wrapper.apply("((solutions.type=0 and exists(select cs.id from company_solution cs left join solutions s on cs.solution_id=s.id " +
+                        " where cs.isdeleted=0 and cs.SIGN_STATUS = 1  and s.base_id=solutions.base_id and cs.shop_id="+user.getCompanyId()+")) or (" +
                         "solutions.type=1 and solutions.shop_id="+user.getCompanyId()+"))") ;
         }
         return solutionsMapper.selectList(wrapper);
@@ -398,26 +462,50 @@
   
     @Override
     public PageData<Solutions> findPage(PageWrap<Solutions> pageWrap) {
+
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
         IPage<Solutions> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
         Utils.MP.blankToNull(pageWrap.getModel());
         pageWrap.getModel().setDataType(Constants.ZERO);//鍙�夋嫨鍩鸿〃鏁版嵁
         pageWrap.getModel().setIsdeleted(Constants.ZERO);
         MPJLambdaWrapper<Solutions> queryWrapper = new MPJLambdaWrapper<>();
         Utils.MP.blankToNull(pageWrap.getModel());
-        queryWrapper.selectAll(Solutions.class);
-        queryWrapper.selectAs(Insurance::getName,Solutions::getInsuranceName);
-        queryWrapper.selectAs(Company::getName,Solutions::getShopName);
-        queryWrapper.leftJoin(Insurance.class,Insurance::getId,Solutions::getInsuranceId);
-        queryWrapper.leftJoin(Company.class,Company::getId,Solutions::getShopId);
-        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
         if(user.getType().equals(Constants.ONE)){
-            queryWrapper.exists(("select 1 from company_solution b where b.isdeleted=0 and b.company_id="+user.getCompanyId()+" and b.SOLUTION_BASE_ID = t.id"));
+            queryWrapper.selectAll(Solutions.class);
+            queryWrapper.selectAs(Insurance::getName,Solutions::getInsuranceName);
+            queryWrapper.selectAs(Company::getName,Solutions::getShopName);
+            queryWrapper.selectAs(SolutionsBase::getName,Solutions::getSolutionBaseName);
+            queryWrapper.selectAs(CompanySolution::getSignDate,Solutions::getSignDate);
+            queryWrapper.selectAs(CompanySolution::getSignStatus,Solutions::getSignStatus);
+            queryWrapper.selectAs(CompanySolution::getFileSignUrl,Solutions::getFileSignUrl);
+            queryWrapper.selectAs(CompanySolution::getId,Solutions::getCompanySolutionId);
+            queryWrapper.selectAs(SystemUser::getRealname,Solutions::getSignUserName);
+            queryWrapper.leftJoin(Insurance.class,Insurance::getId,Solutions::getInsuranceId);
+            queryWrapper.leftJoin(Company.class,Company::getId,Solutions::getShopId);
+            queryWrapper.leftJoin(SolutionsBase.class,SolutionsBase::getId,Solutions::getParentId);
+            queryWrapper.leftJoin(CompanySolution.class,CompanySolution::getSolutionBaseId,Solutions::getId);
+            queryWrapper.leftJoin(SystemUser.class,SystemUser::getId,CompanySolution::getSignUserId);
+            queryWrapper.eq(CompanySolution::getCompanyId,user.getCompanyId());
+            queryWrapper.eq(CompanySolution::getIsdeleted,Constants.ZERO);
+        }else{
+            queryWrapper.selectAll(Solutions.class);
+            queryWrapper.selectAs(Insurance::getName,Solutions::getInsuranceName);
+            queryWrapper.selectAs(Company::getName,Solutions::getShopName);
+            queryWrapper.selectAs(SolutionsBase::getName,Solutions::getSolutionBaseName);
+            queryWrapper.leftJoin(Insurance.class,Insurance::getId,Solutions::getInsuranceId);
+            queryWrapper.leftJoin(Company.class,Company::getId,Solutions::getShopId);
+            queryWrapper.leftJoin(SolutionsBase.class,SolutionsBase::getId,Solutions::getParentId);
+
         }
+
         if (pageWrap.getModel().getId() != null) {
             queryWrapper.eq(Solutions::getId, pageWrap.getModel().getId());
         }
         if (pageWrap.getModel().getCreator() != null) {
             queryWrapper.eq(Solutions::getCreator, pageWrap.getModel().getCreator());
+        }
+        if (pageWrap.getModel().getSignStatus() != null) {
+            queryWrapper.eq(CompanySolution::getSignStatus, pageWrap.getModel().getSignStatus());
         }
         if (pageWrap.getModel().getCreateDate() != null) {
             queryWrapper.ge(Solutions::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
@@ -490,6 +578,9 @@
         if (pageWrap.getModel().getOrtherInfo() != null) {
             queryWrapper.eq(Solutions::getOrtherInfo, pageWrap.getModel().getOrtherInfo());
         }
+        if (pageWrap.getModel().getParentId() != null) {
+            queryWrapper.eq(Solutions::getParentId, pageWrap.getModel().getParentId());
+        }
 
         if (pageWrap.getModel().getVersion() != null) {
             queryWrapper.eq(Solutions::getVersion, pageWrap.getModel().getVersion());
@@ -508,7 +599,14 @@
 //                queryWrapper.orderByAsc(sortData.getProperty());
 //            }
 //        }
+        String path = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
+                systemDictDataBiz.queryByCode(Constants.OSS,Constants.APPLY_FILE).getCode();
         PageData<Solutions> pageData = PageData.from(solutionsJoinMapper.selectJoinPage(page,Solutions.class, queryWrapper));
+        for (Solutions solutions:pageData.getRecords()) {
+            if(StringUtils.isNotBlank(solutions.getFileSignUrl())){
+                solutions.setFileSignUrl(path +solutions.getFileSignUrl());
+            }
+        }
 
         return pageData;
     }
@@ -550,6 +648,7 @@
                 .leftJoin(CompanySolution.class,CompanySolution::getSolutionId,Solutions::getId)
                 .leftJoin(Company.class,Company::getId,CompanySolution::getCompanyId)
                 .leftJoin(Insurance.class,Insurance::getId,Solutions::getInsuranceId)
+                .leftJoin(SolutionsBase.class,SolutionsBase::getId,Solutions::getParentId)
                 .eq(Solutions::getIsdeleted,Constants.ZERO)
                 .eq(Solutions::getStatus,Constants.ZERO)
                 .eq(Solutions::getDataType,dataType)
@@ -559,12 +658,59 @@
                 .eq(Company::getStatus,Constants.ZERO)
                 .eq(Insurance::getIsdeleted,Constants.ZERO)
                 .eq(Insurance::getStatus,Constants.ZERO)
+                .eq(SolutionsBase::getStatus,Constants.ZERO)
+                .eq(SolutionsBase::getIsdeleted,Constants.ZERO)
                 .orderByDesc(Solutions::getCreateDate)
         );
         return solutionsList;
     }
 
     /**
+     * 鏌ヨ浼佷笟宸茬缃茬殑鏂规淇℃伅
+     * @param dataType
+     * @param companyId
+     * @return
+     */
+    @Override
+    public List<Solutions> findListByCompanyId(Integer dataType,Integer companyId) {
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+//        List<Solutions> solutionsList = solutionsJoinMapper.selectJoinList(Solutions.class,new MPJLambdaWrapper<Solutions>()
+//                .selectAll(Solutions.class)
+//                .leftJoin(CompanySolution.class,CompanySolution::getSolutionId,Solutions::getId)
+//                .leftJoin(Company.class,Company::getId,CompanySolution::getCompanyId)
+//                .leftJoin(Insurance.class,Insurance::getId,Solutions::getInsuranceId)
+//                .leftJoin(SolutionsBase.class,SolutionsBase::getId,Solutions::getParentId)
+//                .eq(Solutions::getIsdeleted,Constants.ZERO)
+//                .eq(Solutions::getStatus,Constants.ZERO)
+//                .eq(Solutions::getDataType,dataType)
+//                .eq(CompanySolution::getIsdeleted,Constants.ZERO)
+//                .eq(Company::getIsdeleted,Constants.ZERO)
+//                .eq(Company::getStatus,Constants.ZERO)
+//                .eq(Insurance::getIsdeleted,Constants.ZERO)
+//                .eq(Insurance::getStatus,Constants.ZERO)
+//                .eq(SolutionsBase::getStatus,Constants.ZERO)
+//                .eq(SolutionsBase::getIsdeleted,Constants.ZERO)
+//                .eq(CompanySolution::getCompanyId,companyId)
+//                .eq(CompanySolution::getSignStatus,Constants.ONE)
+//                .orderByDesc(Solutions::getCreateDate)
+//        );
+
+        List<Solutions> solutionsList = solutionsJoinMapper.selectJoinList(Solutions.class,new MPJLambdaWrapper<Solutions>()
+                .selectAll(Solutions.class)
+                .leftJoin(CompanySolution.class,CompanySolution::getSolutionId,Solutions::getId)
+                .eq(Solutions::getIsdeleted,Constants.ZERO)
+                .eq(Solutions::getStatus,Constants.ZERO)
+                .eq(Solutions::getDataType,dataType)
+                .eq(CompanySolution::getIsdeleted,Constants.ZERO)
+                .eq(CompanySolution::getCompanyId,companyId)
+                .eq(CompanySolution::getSignStatus,Constants.ONE)
+                .orderByDesc(Solutions::getCreateDate)
+        );
+        return solutionsList;
+    }
+
+
+    /**
      * 鏍规嵁鍘嗗彶鐗堟湰鏌ヨ褰撳墠鏈�鏂板惎鐢ㄧ増鏈�
      * @param solutionId
      * @return
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/UnionApplyServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/UnionApplyServiceImpl.java
index 0a9df2c..4ca3e1c 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/UnionApplyServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/UnionApplyServiceImpl.java
@@ -14,6 +14,7 @@
 import com.doumee.dao.business.dto.*;
 import com.doumee.dao.business.join.*;
 import com.doumee.dao.business.model.*;
+import com.doumee.dao.system.SystemUserMapper;
 import com.doumee.dao.system.model.SystemUser;
 import com.doumee.service.business.SmsEmailService;
 import com.doumee.service.business.UnionApplyService;
@@ -82,6 +83,11 @@
     private MemberInsuranceJoinMapper memberInsuranceJoinMapper;
     @Autowired
     private MemberMapper memberMapper;
+    @Autowired
+    private SystemUserMapper systemUserMapper;
+
+    @Autowired
+    private CompanyDepartmentMapper companyDepartmentMapper;
     @Value("${debug_model}")
     private boolean debugModel;
 
@@ -256,6 +262,24 @@
         if (pageWrap.getModel().getStatus() != null) {
             queryWrapper.eq(UnionApply::getStatus, pageWrap.getModel().getStatus());
         }
+        if (pageWrap.getModel().getQueryStatus() != null) {
+            if(Constants.equalsInteger(pageWrap.getModel().getQueryStatus(),Constants.THREE)){
+                queryWrapper.eq(UnionApply::getStatus, Constants.UnionApplyStatus.FINISH.getKey());
+                queryWrapper.apply(" t.START_TIME < now()  and t.END_TIME > now() ");
+            }else if(Constants.equalsInteger(pageWrap.getModel().getQueryStatus(),Constants.SIX)){
+                queryWrapper.eq(UnionApply::getStatus, Constants.UnionApplyStatus.FINISH.getKey());
+                queryWrapper.apply("   t.END_TIME < now() ");
+            }else if(Constants.equalsInteger(pageWrap.getModel().getQueryStatus(),Constants.FIVE)){
+                queryWrapper.eq(UnionApply::getStatus, Constants.UnionApplyStatus.FINISH.getKey());
+                queryWrapper.apply("   t.START_TIME > now() ");
+            }else if(Constants.equalsInteger(pageWrap.getModel().getQueryStatus(),Constants.ZERO)){
+                queryWrapper.in(UnionApply::getStatus, Constants.UnionApplyStatus.MERGE.getKey(),Constants.UnionApplyStatus.RETRIAL.getKey());
+            }else{
+                queryWrapper.eq(UnionApply::getStatus, pageWrap.getModel().getQueryStatus());
+            }
+
+        }
+        
         if (pageWrap.getModel().getCurrentFee() != null) {
             queryWrapper.eq(UnionApply::getCurrentFee, pageWrap.getModel().getCurrentFee());
         }
@@ -288,6 +312,17 @@
 
     private void initStatusInfo(UnionApply model) {
         model.setStatusInfo(Constants.UnionApplyStatus.getName(Constants.formatIntegerNum(model.getStatus())));
+
+        if(Constants.equalsInteger(model.getStatus(),Constants.UnionApplyStatus.FINISH.getKey())){
+            if(model.getStartTime().getTime()>System.currentTimeMillis()){
+                model.setStatusInfo("寰呯敓鏁�");
+            }else if(model.getEndTime().getTime()<System.currentTimeMillis()){
+                model.setStatusInfo("宸茶繃鏈�");
+            }else{
+                model.setStatusInfo("淇濋殰涓�");
+            }
+        }
+
     }
 
     @Override
@@ -334,6 +369,8 @@
                         .selectAll(UnionApply.class)
                         .selectAs(Solutions::getName,UnionApply::getSolutionName)
                         .selectAs(Solutions::getDelOnlyReplace,UnionApply::getDelOnlyReplace)
+                        .selectAs(Solutions::getHasDispatchUnit,UnionApply::getHasDispatchUnit)
+                        .selectAs(Solutions::getSignType,UnionApply::getSignType)
                         .selectAs(Company::getName,UnionApply::getCompanyName)
                         .select(" ( select count(DISTINCT(ad.MEMBER_ID)) from apply_detail ad  where ad.UNION_APPLY_ID = t.id ) as insureNum")
                 .select(" ( select count(DISTINCT(b.MEMBER_ID)) from apply_detail b inner join insurance_apply a on b.apply_id = a.id  and a.status in ( 5 , 27 )  where b.union_apply_id=t.id and b.END_TIME > now() ) as guaranteeNum")
@@ -415,9 +452,6 @@
     @Transactional(rollbackFor ={BusinessException.class,Exception.class} )
     public Integer merge(SaveUnionApplyDTO saveUnionApplyDTO){
         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
-        if(!user.getType().equals(Constants.TWO)){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炲晢鎴风敤鎴凤紝鏃犳硶杩涜璇ユ搷浣�");
-        }
         if(Objects.isNull(saveUnionApplyDTO)
             || Objects.isNull(saveUnionApplyDTO.getApplyIds())
             || saveUnionApplyDTO.getApplyIds().size() == 0
@@ -466,17 +500,39 @@
         unionApply.setCreator(user.getId());
         unionApply.setEditor(user.getId());
         unionApply.setEditDate(new Date());
-        unionApply.setCompanyId(user.getCompanyId());
+        if(Constants.equalsInteger(user.getType(),Constants.ZERO)){
+            unionApply.setCompanyId(solutions.getShopId());
+        }else{
+            unionApply.setCompanyId(user.getCompanyId());
+        }
         unionApply.setStartTime(saveUnionApplyDTO.getStartDate());
         unionApply.setEndTime(saveUnionApplyDTO.getEndDate());
         unionApply.setCheckDate(new Date());
-        unionApply.setStatus(Constants.UnionApplyStatus.MERGE.getKey());
+
+        if(Constants.equalsInteger(solutions.getRetrial(),Constants.ONE)){
+                SystemUser systemUser = systemUserMapper.selectById(user.getId());
+                if(Objects.nonNull(systemUser) && Objects.nonNull(systemUser.getDepartmentId())){
+                    CompanyDepartment companyDepartment = companyDepartmentMapper.selectById(systemUser.getDepartmentId());
+                    if(Objects.nonNull(companyDepartment)&&Objects.nonNull(companyDepartment.getHeadId())){
+                        unionApply.setRetrialId(companyDepartment.getHeadId());
+                    }
+                }
+        }
+        if(Constants.equalsInteger(solutions.getSignType(), Constants.ZERO)){
+            unionApply.setStatus(Constants.UnionApplyStatus.MERGE.getKey());
+        }else if(Constants.equalsInteger(solutions.getSignType(), Constants.ONE)){
+            unionApply.setStatus(Constants.UnionApplyStatus.WAIT_SIGNATURE.getKey());
+        }else{
+            if(Objects.nonNull(unionApply.getRetrialId())){
+                unionApply.setStatus(Constants.UnionApplyStatus.RETRIAL.getKey());
+            }else{
+                unionApply.setStatus(Constants.UnionApplyStatus.UPLOAD_INSURANCE_POLICY.getKey());
+            }
+        }
         unionApply.setCheckUserId(user.getId());
         unionApply.setCurrentFee(BigDecimal.ZERO);
         unionApply.setIsdeleted(Constants.ZERO);
         unionApply.setSolutionId(solutions.getId());
-
-        Integer maxDays = DateUtil.calculateBetween(saveUnionApplyDTO.getStartDate(),saveUnionApplyDTO.getEndDate(),0);
 
         List<ApplyDetail> applyDetailList = applyDetailJoinMapper.selectJoinList(ApplyDetail.class,new MPJLambdaWrapper<ApplyDetail>()
                 .select(ApplyDetail::getId,ApplyDetail::getPrice,ApplyDetail::getStartTime,ApplyDetail::getEndTime,ApplyDetail::getFee)
@@ -494,22 +550,36 @@
             InsuranceApplyServiceImpl.checkStaticMemberSolution(solutions.getBaseId(),
                     applyDetail.getIdcardNo(),applyDetail.getMemberName(),unionApply.getStartTime(),unionApply.getEndTime(),
                     applyDetailJoinMapper);
-
             fee =fee.add(
                     Constants.reduceFee(solutions,solutions.getPrice(),applyDetail.getStartTime(),applyDetail.getEndTime(),saveUnionApplyDTO.getStartDate(),saveUnionApplyDTO.getEndDate())
             );
         }
         unionApply.setFee(fee);
-
         unionApplyMapper.insert(unionApply);
-
+        if(Constants.equalsInteger(unionApply.getStatus(),Constants.UnionApplyStatus.WAIT_SIGNATURE.getKey())){
+            //鏌ヨ浼佷笟绛剧珷鐨勬枃浠�
+            Integer applyId = insuranceApplyList.get(Constants.ZERO).getId();
+            Multifile m = multifileMapper.selectOne(new QueryWrapper<Multifile>().lambda().eq(Multifile::getObjId,applyId)
+                    .eq(Multifile::getObjType,Constants.MultiFile.MEMBER_LIST_LATTER.getKey())
+                    .last(" limit  1 ")
+            );
+            if(Objects.isNull(m)){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈煡璇㈠埌淇濆崟浼佷笟绛剧讲鏂囦欢");
+            }
+            Multifile multifile = new Multifile();
+            multifile.setCreateDate(new Date());
+            multifile.setIsdeleted(Constants.ZERO);
+            multifile.setObjId(unionApply.getId());
+            multifile.setObjType(Constants.MultiFile.HBD_BD_APPLY_PDF.getKey());
+            multifile.setFileurl(m.getFileurl());
+            multifileMapper.insert(multifile);
+        }
         insuranceApplyJoinMapper.update(null,new UpdateWrapper<InsuranceApply>().lambda()
                 .set(InsuranceApply::getUnionApplyId,unionApply.getId())
                 .set(InsuranceApply::getCheckDate,new Date())
                 .set(InsuranceApply::getCheckUserId,user.getId())
                 .set(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.WTB_TOUBAOING.getKey())
                 .in(InsuranceApply::getId,saveUnionApplyDTO.getApplyIds()));
-
         applyDetailJoinMapper.update(null,new UpdateWrapper<ApplyDetail>().lambda()
                 .set(ApplyDetail::getUnionApplyId,unionApply.getId())
                 .in(ApplyDetail::getApplyId,saveUnionApplyDTO.getApplyIds()));
@@ -522,8 +592,49 @@
         applyLogMapper.insert(log);
 
         return unionApply.getId();
+    }
+
+
+
+    @Override
+    @Transactional(rollbackFor ={BusinessException.class,Exception.class} )
+    public Integer reexamineCheck(UnionApply unionApply){
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        UnionApply model = unionApplyMapper.selectById(unionApply.getId());
+        if(Objects.isNull(unionApply)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(!Constants.equalsInteger(model.getStatus(),Constants.UnionApplyStatus.RETRIAL.getKey())){
+            throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"瀵逛笉璧凤紝鍚堝苟鍗曚笟鍔″凡娴佽浆锛屾偍鏃犳硶杩涜璇ユ搷浣滐紒");
+        }
+        unionApply.setEditor(user.getId());
+        unionApply.setEditDate(new Date());
+        //濡傛灉鏄晢鎴风锛屽垯鍙兘鐢辨寚瀹氫汉杩涜澶勭悊
+        if(Constants.equalsInteger(user.getType(),Constants.TWO)){
+            if(!Constants.equalsInteger(model.getRetrialId(),user.getId())){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炴偍鐨勫瀹℃暟鎹紝鏃犳硶杩涜瀹℃壒");
+            }
+        }else{
+            //濡傛灉鏄钩鍙扮锛屾牴鎹汉鍛樼被鍨嬪鐞� 濡傛灉鏄浐瀹氫汉鍛樺垯涓嶉檺鍒� 鍏朵粬浜哄憳闇�瑕佹瘮瀵�
+            if(!user.getFixed()){
+                if(!Constants.equalsInteger(model.getRetrialId(),user.getId())){
+                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炴偍鐨勫瀹℃暟鎹紝鏃犳硶杩涜瀹℃壒");
+                }
+            }
+        }
+        Constants.ApplyLogType applyLogType = Constants.ApplyLogType.IA_HBD_REEXAMINE_PASS;
+        String info = applyLogType.getInfo();
+        unionApply.setStatus(Constants.UnionApplyStatus.UPLOAD_INSURANCE_POLICY.getKey());
+        unionApplyMapper.updateById(unionApply);
+        ApplyLog log = new ApplyLog(unionApply,applyLogType.getName(), info
+                ,unionApply.getId(),applyLogType.getKey(),null, null);
+        applyLogMapper.insert(log);
+        return unionApply.getId();
+
 
     }
+
+
 
 
     /**
@@ -534,8 +645,8 @@
     @Transactional(rollbackFor = {Exception.class,BusinessException.class})
     public void cancelMerge(CloseDTO closeDTO){
         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
-        if(!user.getType().equals(Constants.TWO)){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炲晢鎴风敤鎴凤紝鏃犳硶杩涜璇ユ搷浣滐紒");
+        if(!(Constants.equalsInteger(user.getType(),Constants.ZERO)||Constants.equalsInteger(user.getType(),Constants.TWO))){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"浼佷笟鐢ㄦ埛锛屾棤娉曡繘琛岃鎿嶄綔锛�");
         }
         if(Objects.isNull(closeDTO)
                 ||Objects.isNull(closeDTO.getId())
@@ -546,7 +657,7 @@
         if(Objects.isNull(unionApply)||!Constants.equalsInteger(unionApply.getIsdeleted(),Constants.ZERO)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
         }
-        if(!unionApply.getCompanyId().equals(user.getCompanyId())){
+        if(Constants.equalsInteger(user.getType(),Constants.TWO)&&!unionApply.getCompanyId().equals(user.getCompanyId())){
             throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"瀵逛笉璧烽潪鎮ㄧ殑鍚堝苟鍗曪紝鎮ㄦ棤娉曡繘琛屾搷浣滐紒");
         }
         if(unionApply.getStatus().equals(Constants.UnionApplyStatus.FINISH.getKey())){
@@ -555,6 +666,8 @@
         if(unionApply.getStatus().equals(Constants.UnionApplyStatus.CLOSE.getKey())){
             throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"瀵逛笉璧凤紝鍚堝苟鍗曚笟鍔″凡鍏抽棴");
         }
+
+
         //鍚堝苟鍗曠姸鎬佸浜庡緟鎶曚繚
         if(unionApply.getStatus().equals(Constants.UnionApplyStatus.UPLOAD_INSURANCE_POLICY.getKey())
         || unionApply.getStatus().equals(Constants.UnionApplyStatus.WAIT_SIGNATURE.getKey())){
@@ -573,7 +686,7 @@
                         || unionApply.getStatus().equals(Constants.UnionApplyStatus.WAIT_SIGNATURE.getKey()),
                         InsuranceApply::getApplyTbdNo,null)
                 .set(InsuranceApply::getCheckUserId,user.getId())
-                .set(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.WTB_BUSINESS_CHECK_PASS.getKey())
+                .set(InsuranceApply::getStatus,Constants.InsuranceApplyStatus.WTB_RETURN.getKey())
                 .eq(InsuranceApply::getUnionApplyId,unionApply.getId())
         );
 
@@ -607,62 +720,26 @@
             throw  new BusinessException(ResponseStatus.BAD_REQUEST);
         }
         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
-        if(!user.getType().equals(Constants.TWO)){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炲晢鎴风敤鎴凤紝鏃犳硶杩涜璇ユ搷浣滐紒");
-        }
+//        if(!user.getType().equals(Constants.TWO)){
+//            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炲晢鎴风敤鎴凤紝鏃犳硶杩涜璇ユ搷浣滐紒");
+//        }
         UnionApply unionApply = unionApplyMapper.selectById(uploadMultifileDTO.getBusinessId());
         if(Objects.isNull(unionApply)||!Constants.equalsInteger(unionApply.getIsdeleted(),Constants.ZERO)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
         }
         unionApply.setStatus(Constants.formatIntegerNum(unionApply.getStatus()));
-        if(!unionApply.getCompanyId().equals(user.getCompanyId())){
-            throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"瀵逛笉璧烽潪鎮ㄧ殑鍚堝苟鍗曪紝鎮ㄦ棤娉曡繘琛屾搷浣滐紒");
+        if(Constants.equalsInteger(user.getType(),Constants.TWO)){
+            if(!unionApply.getCompanyId().equals(user.getCompanyId())){
+                throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"瀵逛笉璧烽潪鎮ㄧ殑鍚堝苟鍗曪紝鎮ㄦ棤娉曡繘琛屾搷浣滐紒");
+            }
         }
+
         if(unionApply.getStatus().equals(Constants.UnionApplyStatus.FINISH.getKey())){
             throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"瀵逛笉璧凤紝鍚堝苟鍗曚笟鍔″凡瀹岀粨锛屾偍鏃犳硶杩涜璇ユ搷浣滐紒");
         }
         if(!unionApply.getStatus().equals(Constants.UnionApplyStatus.MERGE.getKey())){
             throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"瀵逛笉璧凤紝鍚堝苟鍗曚笟鍔″凡娴佽浆锛屾偍鏃犳硶杩涜璇ユ搷浣滐紒");
         }
-
-        if(CollectionUtils.isNotEmpty(uploadMultifileDTO.getMultifileList())){
-            List<Multifile> multifileList = uploadMultifileDTO.getMultifileList();
-            for (Multifile multifile:multifileList) {
-                if(StringUtils.isBlank(multifile.getName())
-                || StringUtils.isBlank(multifile.getFileurl()) ){
-                    continue;
-                }
-                if(Objects.isNull(multifile.getObjId())
-                    ||Objects.isNull(multifile.getName())
-                    ||Objects.isNull(multifile.getFileurl())){
-                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"浼佷笟鎶曚繚鍗曢檮浠跺弬鏁伴敊璇�");
-                }
-                InsuranceApply insuranceApply = insuranceApplyJoinMapper.selectOne(new QueryWrapper<InsuranceApply>().lambda()
-                        .eq(InsuranceApply::getId,multifile.getObjId())
-                        .eq(InsuranceApply::getUnionApplyId,uploadMultifileDTO.getBusinessId())
-                );
-                if(Objects.isNull(insuranceApply)){
-                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"浼佷笟鎶曚繚鍗曟湭鏌ヨ鍒�");
-                }
-
-                multifile.setIsdeleted(Constants.ZERO);
-                multifile.setCreator(user.getId());
-                multifile.setCreateDate(new Date());
-                multifile.setCreateDate(new Date());
-                multifile.setObjType(Constants.MultiFile.BD_APPLY_PDF.getKey());
-                multifile.setType(Constants.TWO);
-                multifileMapper.insert(multifile);
-
-                insuranceApplyJoinMapper.update(null,new UpdateWrapper<InsuranceApply>().lambda()
-                        .set(InsuranceApply::getUnionApplyTbdStatus,Constants.ONE)
-                        .set(InsuranceApply::getEditDate,new Date())
-                        .set(InsuranceApply::getEditor,user.getId())
-                        .eq(InsuranceApply::getId,multifile.getObjId())
-                );
-
-            }
-        }
-
 
         unionApply.setCheckDate(new Date());
         unionApply.setCheckUserId(user.getId());
@@ -710,9 +787,6 @@
 //            smsEmailService.validateCode(smsCheckDTO.getCode());
 //        }
         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
-        if(!user.getType().equals(Constants.TWO)){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炲晢鎴风敤鎴凤紝鏃犳硶杩涜璇ユ搷浣滐紒");
-        }
         UnionApply unionApply = unionApplyJoinMapper.selectById(smsCheckDTO.getBusinessId());
         if(unionApply == null ||!Constants.equalsInteger(unionApply.getIsdeleted(),Constants.ZERO)){
             throw  new BusinessException(ResponseStatus.DATA_EMPTY);
@@ -777,9 +851,7 @@
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
         }
         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
-        if(!user.getType().equals(Constants.TWO)){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炲晢鎴风敤鎴凤紝鏃犳硶杩涜璇ユ搷浣滐紒");
-        }
+
         UnionApply unionApply = unionApplyJoinMapper.selectById(unionApplyBXDDTO.getId());
         if(unionApply == null ||!Constants.equalsInteger(unionApply.getIsdeleted(),Constants.ZERO)){
             throw  new BusinessException(ResponseStatus.DATA_EMPTY);
@@ -817,7 +889,7 @@
                 .leftJoin(Member.class,Member::getId,ApplyDetail::getMemberId)
                 .leftJoin(InsuranceApply.class,InsuranceApply::getId,ApplyDetail::getApplyId)
                 .leftJoin(Solutions.class,Solutions::getId,InsuranceApply::getSolutionId)
-                .in(ApplyDetail::getUnionApplyId,unionApply.getId()));
+                .in(ApplyDetail::getUnionApplyId,unionApply.getId()));  
         unionApplyBXDDTO.setEndTime(DateUtil.getMontageDate(unionApplyBXDDTO.getEndTime(),2));
         //鎬诲ぉ鏁�
         Integer maxDays = DateUtil.calculateBetween(unionApplyBXDDTO.getStartTime(),unionApplyBXDDTO.getEndTime(),0);
@@ -848,21 +920,34 @@
                 UnionApplyBXDDetailDTO unionApplyBXDDetailDTO = unionApplyBXDDDetailTO.get();
                 serverCost = unionApplyBXDDetailDTO.getServerMoney();
                 //涓婁紶淇濆崟淇℃伅
-                if(StringUtils.isNotBlank(unionApplyBXDDetailDTO.getFileUrl())){
-                    Multifile multifile = new Multifile();
-                    multifile.setIsdeleted(Constants.ZERO);
-                    multifile.setCreator(user.getId());
-                    multifile.setCreateDate(new Date());
-                    multifile.setObjId(insuranceApply.getId());
-                    multifile.setObjType(Constants.MultiFile.BD_DONE_PDF.getKey());
-                    multifile.setType(Constants.TWO);
-                    multifile.setFileurl(unionApplyBXDDetailDTO.getFileUrl());
-                    multifile.setName(unionApplyBXDDetailDTO.getFileName());
-                    multifileMapper.insert(multifile);
-                    insuranceApply.setUnionApplyTbdStatus(Constants.ONE);
-                }else{
-                    insuranceApply.setUnionApplyTbdStatus(Constants.ZERO);
-                }
+                Multifile multifile = new Multifile();
+                multifile.setIsdeleted(Constants.ZERO);
+                multifile.setCreator(user.getId());
+                multifile.setCreateDate(new Date());
+                multifile.setObjId(insuranceApply.getId());
+                multifile.setObjType(Constants.MultiFile.BD_DONE_PDF.getKey());
+                multifile.setType(Constants.TWO);
+                multifile.setFileurl(unionApplyBXDDTO.getFileUrl());
+                multifile.setName(unionApplyBXDDTO.getFileName());
+                multifileMapper.insert(multifile);
+                insuranceApply.setUnionApplyTbdStatus(Constants.ONE);
+
+
+//                if(StringUtils.isNotBlank(unionApplyBXDDetailDTO.getFileUrl())){
+//                    Multifile multifile = new Multifile();
+//                    multifile.setIsdeleted(Constants.ZERO);
+//                    multifile.setCreator(user.getId());
+//                    multifile.setCreateDate(new Date());
+//                    multifile.setObjId(insuranceApply.getId());
+//                    multifile.setObjType(Constants.MultiFile.BD_DONE_PDF.getKey());
+//                    multifile.setType(Constants.TWO);
+//                    multifile.setFileurl(unionApplyBXDDetailDTO.getFileUrl());
+//                    multifile.setName(unionApplyBXDDetailDTO.getFileName());
+//                    multifileMapper.insert(multifile);
+//                    insuranceApply.setUnionApplyTbdStatus(Constants.ONE);
+//                }else{
+//                    insuranceApply.setUnionApplyTbdStatus(Constants.ZERO);
+//                }
             }
             //瀹為檯宸蹭骇鐢熻垂鐢紙鍗曚汉锛�
             BigDecimal currentFee = BigDecimal.ZERO;
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/UnionChangeServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/UnionChangeServiceImpl.java
index 77ae055..c258d3a 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/UnionChangeServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/UnionChangeServiceImpl.java
@@ -37,10 +37,7 @@
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -177,19 +174,7 @@
                             .ne(ApplyChagneDetail::getType,Constants.TWO)
                             .eq(ApplyChagneDetail::getUnionChangeId,unionChange.getId()));
             BigDecimal fee = applyChangeList.stream().map(m->m.getFee()).reduce(BigDecimal.ZERO,BigDecimal::add);
-//            fee = fee.add(applyChangeList.stream().map(m->Objects.nonNull(m.getReduceMoney())?m.getReduceMoney():BigDecimal.ZERO).reduce(BigDecimal.ZERO,BigDecimal::add));
-//            for (ApplyChagneDetail applyChagneDetail:applyChangeList) {
-//                Integer maxDays = DateUtil.calculateBetween(unionChange.getApplyStartTime(),applyChagneDetail.getEndTime(),0);
-//                if(applyChagneDetail.getType().equals(Constants.ONE)){
-//                    maxDays = DateUtil.daysBetweenDates(applyChagneDetail.getEndTime(),DateUtil.getMontageDate(unionChange.getApplyStartTime(),3));
-//                }
-//                if(applyChagneDetail.getType().equals(Constants.ZERO)){
-//                    fee = fee.add(new BigDecimal(maxDays).multiply(applyChagneDetail.getPrice()));
-//                }else{
-//                    fee = fee.subtract(new BigDecimal(maxDays).multiply(applyChagneDetail.getPrice())).add(applyChagneDetail.getFee());
-//                }
-//            }
-            unionChange.setFee(fee.setScale(2, RoundingMode.HALF_UP));
+            unionChange.setFee(fee.setScale(6, RoundingMode.HALF_UP));
             //鏌ヨ鎿嶄綔璁板綍
             List<ApplyLog> applyLogList = applyLogJoinMapper.selectJoinList(ApplyLog.class,
                     new MPJLambdaWrapper<ApplyLog>()
@@ -204,8 +189,15 @@
                             .orderByAsc(ApplyLog::getCreateDate)
             );
             unionChange.setApplyLogList(applyLogList);
+            if(StringUtils.isBlank(unionChange.getShopName())){
+                unionChange.setShopName(
+                        systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PLAT_COMPANY_NAME).getCode()
+                );
+
+            }
         }
         initFiles(unionChange);
+        unionChange.setFee(Constants.getTwoPoint(unionChange.getFee()));
         return unionChange;
     }
 
@@ -217,6 +209,7 @@
         if(multifiles!=null){
             String path = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()
                     +systemDictDataBiz.queryByCode(Constants.OSS,Constants.APPLY_FILE).getCode();
+            List<Multifile> pidanFileList = new ArrayList<>();
             for(Multifile f : multifiles){
                 if(StringUtils.isBlank(f.getFileurl())){
                     continue;
@@ -227,10 +220,10 @@
                     unionChange.setApplyFile(f);
                 }
                 if(Constants.equalsInteger(f.getObjType(),Constants.MultiFile.WTB_CA_DONE_PDF.getKey())){
-                    //绛剧讲鍚庣敵璇峰崟
-                    unionChange.setPidanFile(f);
+                    pidanFileList.add(f);;
                 }
             }
+            unionChange.setPidanFileList(pidanFileList);
         }
     }
 
@@ -338,6 +331,9 @@
         }
 
         PageData<UnionChange> pageData = PageData.from(unionChangeJoinMapper.selectJoinPage(page,UnionChange.class, queryWrapper));
+        for (UnionChange unionChange:pageData.getRecords()) {
+            unionChange.setFee(Constants.getTwoPoint(unionChange.getFee()));
+        }
         return pageData;
     }
 
@@ -353,10 +349,10 @@
     @Transactional(rollbackFor = {BusinessException.class,Exception.class})
     public Integer merge(SaveUnionChangeDTO saveUnionChangeDTO){
         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
-        if(!user.getType().equals(Constants.TWO)){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炲晢鎴风敤鎴凤紝鏃犳硶杩涜璇ユ搷浣�");
+        if(!(Constants.equalsInteger(user.getType(),Constants.ZERO) || Constants.equalsInteger(user.getType(),Constants.TWO))){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炲晢鎴峰钩鍙扮敤鎴凤紝鏃犳硶杩涜璇ユ搷浣�");
         }
-        if(saveUnionChangeDTO.getBusinessType().equals(Constants.ZERO)){
+        if(saveUnionChangeDTO.getBusinessType().equals(Constants.ZERO)||Objects.isNull(saveUnionChangeDTO.getApplyDate())){
             //2024骞�5鏈�9鏃�14:59:24  淇敼 榛樿鍏ュ綋鍓嶅ぉ
             saveUnionChangeDTO.setApplyDate(DateUtil.getMontageDate(new Date(),1));
         }
@@ -378,21 +374,25 @@
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌淇濋櫓鏂规");
         }
         if(saveUnionChangeDTO.getBusinessType().equals(Constants.ZERO)){
+            saveUnionChangeDTO.setApplyDate(unionApply.getStartTime());
+
+            saveUnionChangeDTO.setAddValidDate(saveUnionChangeDTO.getApplyDate());
+            saveUnionChangeDTO.setDelValidDate(saveUnionChangeDTO.getApplyDate());
             //鏍规嵁鐢宠鏃ユ湡 澶勭悊鍔犲噺淇濈殑 瀹為檯鐢熸晥鏃ユ湡
-            if(Objects.nonNull(solutions.getAddValidDays())){
-                saveUnionChangeDTO.setAddValidDate(
-                        DateUtil.afterDateByType(saveUnionChangeDTO.getApplyDate(),0,solutions.getAddValidDays())
-                );
-            }else{
-                saveUnionChangeDTO.setAddValidDate(saveUnionChangeDTO.getApplyDate());
-            }
-            if(Objects.nonNull(solutions.getDelValidDays())){
-                saveUnionChangeDTO.setDelValidDate(
-                        DateUtil.afterDateByType(saveUnionChangeDTO.getApplyDate(),0,solutions.getDelValidDays())
-                );
-            }else{
-                saveUnionChangeDTO.setDelValidDate(saveUnionChangeDTO.getApplyDate());
-            }
+//            if(Objects.nonNull(solutions.getAddValidDays())){
+//                saveUnionChangeDTO.setAddValidDate(
+//                        DateUtil.afterDateByType(saveUnionChangeDTO.getApplyDate(),0,solutions.getAddValidDays())
+//                );
+//            }else{
+//                saveUnionChangeDTO.setAddValidDate(saveUnionChangeDTO.getApplyDate());
+//            }
+//            if(Objects.nonNull(solutions.getDelValidDays())){
+//                saveUnionChangeDTO.setDelValidDate(
+//                        DateUtil.afterDateByType(saveUnionChangeDTO.getApplyDate(),0,solutions.getDelValidDays())
+//                );
+//            }else{
+//                saveUnionChangeDTO.setDelValidDate(saveUnionChangeDTO.getApplyDate());
+//            }
             //鍒ゆ柇鎵瑰崟鏃ユ湡 鍚堝苟鍗曠殑鎵瑰崟鐢熸晥鏈熷湪涓� 淇濆崟璧锋湡鐨勬鏃� 鍒颁繚鍗曟鏈�
             //鑾峰彇寮�濮嬫棩鏈熸鏃�
             if(saveUnionChangeDTO.getAddValidDate().getTime()<unionApply.getStartTime().getTime()
@@ -404,10 +404,11 @@
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍚堝苟鍗曠殑鎵瑰崟鍑忎繚鐢熸晥鏈熼敊璇�");
             }
         }else{
-            if(saveUnionChangeDTO.getApplyDate().getTime()<DateUtil.afterDateByType(unionApply.getStartTime(),0,1).getTime()
-                    || saveUnionChangeDTO.getApplyDate().getTime()> unionApply.getEndTime().getTime()){
-                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍚堝苟鍗曠殑鎹㈠巶鐢熸晥鏈熼敊璇�");
-            }
+//            if(saveUnionChangeDTO.getApplyDate().getTime()<DateUtil.afterDateByType(unionApply.getStartTime(),0,1).getTime()
+//                    || saveUnionChangeDTO.getApplyDate().getTime()> unionApply.getEndTime().getTime()){
+//                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍚堝苟鍗曠殑鎹㈠巶鐢熸晥鏈熼敊璇�");
+//            }
+            saveUnionChangeDTO.setApplyDate(unionApply.getStartTime());
             saveUnionChangeDTO.setAddValidDate(saveUnionChangeDTO.getApplyDate());
         }
 
@@ -435,12 +436,24 @@
         unionChange.setCreator(user.getId());
         unionChange.setEditDate(new Date());
         unionChange.setEditor(user.getId());
-        unionChange.setShopId(user.getCompanyId());
+        if(Constants.equalsInteger(user.getType(),Constants.TWO)){
+            unionChange.setShopId(user.getCompanyId());
+        }else{
+            unionChange.setShopId(saveUnionChangeDTO.getShopId());
+        }
+
         unionChange.setIsdeleted(Constants.ZERO);
         unionChange.setUnionApplyId(saveUnionChangeDTO.getUnionApplyId());
         unionChange.setApplyStartTime(DateUtil.getMontageDate(saveUnionChangeDTO.getAddValidDate(),1));
         unionChange.setDelValidTime(DateUtil.getMontageDate(saveUnionChangeDTO.getDelValidDate(),1));
         unionChange.setType(saveUnionChangeDTO.getBusinessType());
+//        if(Constants.equalsInteger(solutions.getSignType(),Constants.ZERO)){
+//            
+//        }else if(Constants.equalsInteger(solutions.getSignType(),Constants.ONE)){
+//            unionChange.setStatus(Constants.UnionChangeStatus.MERGE.getKey());
+//        }else{
+//            unionChange.setStatus(Constants.UnionChangeStatus.UPLOAD_INSURANCE_POLICY.getKey());
+//        }
         unionChange.setStatus(Constants.UnionChangeStatus.MERGE.getKey());
         unionChangeMapper.insert(unionChange);
 
@@ -485,8 +498,8 @@
         }
         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
         user.setType(Constants.formatIntegerNum(user.getType()));
-        if(!user.getType().equals(Constants.TWO)){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炲晢鎴风敤鎴凤紝鏃犳硶杩涜璇ユ搷浣滐紒");
+        if(!(Constants.equalsInteger(user.getType(),Constants.ZERO) || Constants.equalsInteger(user.getType(),Constants.TWO))){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炲晢鎴峰钩鍙扮敤鎴凤紝鏃犳硶杩涜璇ユ搷浣滐紒");
         }
         UnionChange unionChange = unionChangeMapper.selectById(closeDTO.getId());
         if(Objects.isNull(unionChange)||!Constants.equalsInteger(unionChange.getIsdeleted(),Constants.ZERO)){
@@ -494,7 +507,7 @@
         }
         unionChange.setStatus(Constants.formatIntegerNum(unionChange.getStatus()));
         unionChange.setShopId(Constants.formatIntegerNum(unionChange.getShopId()));
-        if(!unionChange.getShopId().equals(user.getCompanyId())){
+        if(!(Constants.equalsInteger(user.getType(),Constants.ZERO)||unionChange.getShopId().equals(user.getCompanyId()))){
             throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"瀵逛笉璧烽潪鎮ㄧ殑鍚堝苟鍗曪紝鎮ㄦ棤娉曡繘琛屾搷浣滐紒");
         }
         if(unionChange.getStatus().equals(Constants.UnionChangeStatus.FINISH.getKey())){
@@ -508,7 +521,7 @@
                 .set(ApplyChange::getUnionChangeId,null)
                 .set(ApplyChange::getCheckDate,new Date())
                 .set(ApplyChange::getCheckUserId,user.getId())
-                .set(ApplyChange::getStatus,Constants.ApplyChangeStatus.CHECHED_PASSED.getKey())
+                .set(ApplyChange::getStatus,Constants.ApplyChangeStatus.CLOSE.getKey())
                 .in(ApplyChange::getUnionChangeId,unionChange.getId())
         );
 
@@ -611,9 +624,26 @@
         if(Objects.isNull(unionChange)||!Constants.equalsInteger(unionChange.getIsdeleted(),Constants.ZERO)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
         }
-        if(!unionChange.getShopId().equals(user.getCompanyId())){
-            throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"瀵逛笉璧烽潪鎮ㄧ殑鍚堝苟鍗曪紝鎮ㄦ棤娉曡繘琛屾搷浣滐紒");
+        String companyName = "";
+        String creditCode = "";
+        String email = "";
+        if(Constants.equalsInteger(user.getType(),Constants.TWO)){
+            if(!unionChange.getShopId().equals(user.getCompanyId())){
+                throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"瀵逛笉璧烽潪鎮ㄧ殑鍚堝苟鍗曪紝鎮ㄦ棤娉曡繘琛屾搷浣滐紒");
+            }
+            Company company =  companyMapper.selectById(user.getCompanyId());
+            if(company== null || StringUtils.isBlank( company.getEmail()) || !Constants.equalsInteger(company.getSignStatus(),Constants.THREE)){
+                throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝浼佷笟灏氭湭鍏峰鍦ㄧ嚎绛剧珷鏉′欢锛岃鑱旂郴骞冲彴绠$悊鍛樼‘璁");
+            }
+            companyName = company.getName();
+            creditCode = company.getCode();
+            email = company.getEmail();
+        }else{
+                companyName = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PLAT_COMPANY_NAME).getCode();
+                creditCode = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PLAT_CREDIT_CODE).getCode();
+                email = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PLAT_EMAIL).getCode();
         }
+
         if(unionChange.getStatus().equals(Constants.UnionChangeStatus.FINISH.getKey())){
             throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"瀵逛笉璧凤紝鍚堝苟鍗曚笟鍔″凡瀹岀粨锛屾偍鏃犳硶杩涜璇ユ搷浣滐紒");
         }
@@ -623,24 +653,24 @@
         if(!unionChange.getStatus().equals(Constants.UnionChangeStatus.MERGE.getKey())){
             throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"瀵逛笉璧凤紝鍚堝苟鍗曠姸鎬佸凡娴佽浆");
         }
-        Company company =  companyMapper.selectById(user.getCompanyId());
-        if(company== null || StringUtils.isBlank( company.getEmail()) || !Constants.equalsInteger(company.getSignStatus(),Constants.THREE)){
-            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝浼佷笟灏氭湭鍏峰鍦ㄧ嚎绛剧珷鏉′欢锛岃鑱旂郴骞冲彴绠$悊鍛樼‘璁");
-        }
+
 
         String fileUrl = null;
-        if(Constants.equalsObject(unionChange.getType(), Constants.ONE)){
-            fileUrl = ExcelExporter.build(UnionChange.class).exportUnionChangeOtherUnitExcelToPdf(unionChange,"鎹㈠巶鐢宠琛�");
-        }else{
-            fileUrl = ExcelExporter.build(UnionChange.class).exportUnionChangeExcelToPdf(unionChange,"鍔犲噺淇濈敵璇疯〃");
-        }
+//        if(Constants.equalsObject(unionChange.getType(), Constants.ONE)){
+//            fileUrl = ExcelExporter.build(UnionChange.class).exportUnionChangeOtherUnitExcelToPdf(unionChange,"鎹㈠巶鐢宠琛�");
+//        }else{
+//            fileUrl = ExcelExporter.build(UnionChange.class).exportUnionChangeExcelToPdf(unionChange,"鍔犲噺淇濈敵璇疯〃");
+//        }
         String notifyUrl = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SIGN_DONE_NOTIFY_URL).getCode();
         notifyUrl = notifyUrl.replace("${type}","0").replace("${id}",unionChange.getId().toString());
-        String applyNo = signService.applySignLocalFile(company.getName(),company.getName(),fileUrl,company.getCode(),company.getEmail(),"鍚堝苟鍗曪紙鍔犲噺淇�/鎹㈠巶锛夌敵璇风缃�",company.getSignId(),notifyUrl);
+//        String applyNo = signService.applySignLocalFile(company.getName(),company.getName(),fileUrl,company.getCode(),company.getEmail(),"鍚堝苟鍗曪紙鍔犲噺淇�/鎹㈠巶锛夌敵璇风缃�",company.getSignId(),notifyUrl);
+        //涓存椂浣跨敤
+        fileUrl =    "https://yybred.oss-cn-hangzhou.aliyuncs.com/apply/20241120/1c80f0d7-ab35-4355-b9fe-944464643115.pdf";
+        String applyNo = signService.applySign(companyName,fileUrl,companyName,creditCode,email,"浜哄憳鍚嶅崟绛剧珷",null,notifyUrl);
         if(StringUtils.isBlank(applyNo) ){
             throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝鑾峰彇鍦ㄧ嚎绛剧珷鍦板潃澶辫触锛岃绋嶅悗閲嶈瘯锛�");
         }
-        String link = signService.signLink(applyNo,company.getName(),company.getCode());
+        String link = signService.signLink(applyNo,companyName,creditCode);
         if(StringUtils.isBlank(link) ){
             throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝鑾峰彇鍦ㄧ嚎绛剧珷鍦板潃澶辫触锛岃绋嶅悗閲嶈瘯锛�");
         }
@@ -662,9 +692,10 @@
         if(Objects.isNull(unionChangeBXDDTO)
             || Objects.isNull(unionChangeBXDDTO.getId())
                 || Objects.isNull(unionChangeBXDDTO.getApplyDate())
-                || StringUtils.isBlank(unionChangeBXDDTO.getName())
-                || StringUtils.isBlank(unionChangeBXDDTO.getFileurl())
+//                || StringUtils.isBlank(unionChangeBXDDTO.getName())
+//                || StringUtils.isBlank(unionChangeBXDDTO.getFileurl())
                 || StringUtils.isBlank(unionChangeBXDDTO.getCode())
+                || CollectionUtils.isEmpty(unionChangeBXDDTO.getPidanFileList())
         ){
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
         }
@@ -680,7 +711,7 @@
         unionChangeBXDDTO.setApplyId(unionChange.getUnionApplyId());
         unionChange.setStatus(Constants.formatIntegerNum(unionChange.getStatus()));
         unionChange.setShopId(Constants.formatIntegerNum(unionChange.getShopId()));
-        if(!unionChange.getShopId().equals(user.getCompanyId())){
+        if(Constants.equalsInteger(user.getType(),Constants.TWO) && !unionChange.getShopId().equals(user.getCompanyId())){
             throw new BusinessException(ResponseStatus.DATA_ERRO.getCode(),"瀵逛笉璧烽潪鎮ㄧ殑鍚堝苟鍗曪紝鎮ㄦ棤娉曡繘琛屾搷浣滐紒");
         }
         if(unionChange.getStatus().equals(Constants.UnionChangeStatus.FINISH.getKey())){
@@ -725,8 +756,40 @@
                         .leftJoin(InsuranceApply.class,InsuranceApply::getId,ApplyChange::getApplyId)
                         .eq(ApplyChange::getUnionChangeId,unionChange.getId()));
 
+        List<Multifile> pidanFileList = unionChangeBXDDTO.getPidanFileList();
+        for (Multifile pidanFile:pidanFileList) {
+            if(StringUtils.isBlank( pidanFile.getFileurl())
+                    ||StringUtils.isBlank( pidanFile .getName())) {
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鎵瑰崟鏂囦欢鍙傛暟閿欒");
+            }
+            pidanFile.setIsdeleted(Constants.ZERO);
+            pidanFile.setCreator(user.getId());
+            pidanFile.setObjId(unionChange.getId());
+            pidanFile.setCreateDate(new Date());
+            pidanFile.setObjType(Constants.MultiFile.WTB_CA_DONE_PDF.getKey());
+            pidanFile.setType(Constants.TWO);
+        }
+        multifileMapper.insertBatchSomeColumn(pidanFileList);
+
+        for (ApplyChange applyChange:applyChangeList) {
+            for (Multifile pidanFile:pidanFileList) {
+                Multifile m = new Multifile();
+                m.setId(null);
+                m.setIsdeleted(Constants.ZERO);
+                m.setCreator(user.getId());
+                m.setCreateDate(new Date());
+                m.setObjId(applyChange.getId());
+                m.setFileurl(pidanFile.getFileurl());
+                m.setName(pidanFile.getName());
+                m.setObjType(Constants.MultiFile.CA_PD_PDF.getKey());
+                m.setType(Constants.TWO);
+                multifileMapper.insert(m);
+            }
+            
+        }
+
         //瀛樺偍鍚堝苟鍗曚繚闄╁崟
-        Multifile multifile = new Multifile();
+       /* Multifile multifile = new Multifile();
         multifile.setIsdeleted(Constants.ZERO);
         multifile.setCreator(user.getId());
         multifile.setCreateDate(new Date());
@@ -736,38 +799,38 @@
         multifile.setType(Constants.TWO);
         multifile.setFileurl(unionChangeBXDDTO.getFileurl());
         multifile.setName(unionChangeBXDDTO.getName());
-        multifileMapper.insert(multifile);
-
-        if(CollectionUtils.isNotEmpty(unionChangeBXDDTO.getApplyChangeBXDList())){
-            //鏌ヨ鏄惁涓嶅瓨鍦ㄥ綋鍓嶅悎骞跺崟鐨勬暟鎹�
-            if(applyChangeJoinMapper.selectCount(new QueryWrapper<ApplyChange>()
-                    .lambda().ne(ApplyChange::getUnionChangeId,unionChangeBXDDTO.getId())
-                    .in(ApplyChange::getId,
-                            unionChangeBXDDTO.getApplyChangeBXDList().stream().map(m->m.getObjId()).collect(Collectors.toList())
-                    )
-            )>Constants.ZERO){
-                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎵瑰崟鏄庣粏璁板綍瀛樺湪闈炴湰鍚堝苟鍗曟暟鎹�");
-            };
-            for (Multifile m:unionChangeBXDDTO.getApplyChangeBXDList()) {
-                if(StringUtils.isBlank(m.getName())
-                        || StringUtils.isBlank(m.getFileurl()) ){
-                    continue;
-                }
-                if(Objects.isNull(m.getObjId())
-                        ||StringUtils.isBlank(m.getFileurl())
-                        ||StringUtils.isBlank(m.getName())
-                ){
-                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎵瑰崟鏂囦欢淇℃伅缂哄け");
-                }
-                m.setId(null);
-                m.setIsdeleted(Constants.ZERO);
-                m.setCreator(user.getId());
-                m.setCreateDate(new Date());
-                m.setObjType(Constants.MultiFile.CA_PD_PDF.getKey());
-                m.setType(Constants.TWO);
-                multifileMapper.insert(m);
-            }
-        }
+        multifileMapper.insert(multifile);*/
+ 
+//        if(CollectionUtils.isNotEmpty(unionChangeBXDDTO.getApplyChangeBXDList())){
+//            //鏌ヨ鏄惁涓嶅瓨鍦ㄥ綋鍓嶅悎骞跺崟鐨勬暟鎹�
+//            if(applyChangeJoinMapper.selectCount(new QueryWrapper<ApplyChange>()
+//                    .lambda().ne(ApplyChange::getUnionChangeId,unionChangeBXDDTO.getId())
+//                    .in(ApplyChange::getId,
+//                            unionChangeBXDDTO.getApplyChangeBXDList().stream().map(m->m.getObjId()).collect(Collectors.toList())
+//                    )
+//            )>Constants.ZERO){
+//                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎵瑰崟鏄庣粏璁板綍瀛樺湪闈炴湰鍚堝苟鍗曟暟鎹�");
+//            };
+//            for (Multifile m:unionChangeBXDDTO.getApplyChangeBXDList()) {
+//                if(StringUtils.isBlank(m.getName())
+//                        || StringUtils.isBlank(m.getFileurl()) ){
+//                    continue;
+//                }
+//                if(Objects.isNull(m.getObjId())
+//                        ||StringUtils.isBlank(m.getFileurl())
+//                        ||StringUtils.isBlank(m.getName())
+//                ){
+//                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎵瑰崟鏂囦欢淇℃伅缂哄け");
+//                }
+//                m.setId(null);
+//                m.setIsdeleted(Constants.ZERO);
+//                m.setCreator(user.getId());
+//                m.setCreateDate(new Date());
+//                m.setObjType(Constants.MultiFile.CA_PD_PDF.getKey());
+//                m.setType(Constants.TWO);
+//                multifileMapper.insert(m);
+//            }
+//        }
         if(CollectionUtils.isNotEmpty(applyChangeList)){
             for (ApplyChange applyChange:applyChangeList) {
                 ApplyChange oldModel = applyChange;
@@ -979,31 +1042,41 @@
                 .eq(ApplyDetail::getMemberId, detail.getMemberId())
                 .orderByDesc(ApplyDetail::getCreateDate)
                 .last("limit 1"));
-        if (oldModel == null || oldModel.getStartTime() == null || oldModel.getStartTime().getTime() > applyChange.getDelValidTime().getTime()) {
-            throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵逛笉璧凤紝鐢ㄦ埛銆�" + detail.getMemberName() + "銆戝綋鍓嶆壒鍑忔棩鏈熶笉鏀寔鍑忎繚鎿嶄綔锛�");
-        }
-        if(oldModel.getStartTime().getTime()>applyChange.getDelValidTime().getTime()||oldModel.getEndTime().getTime()<applyChange.getDelValidTime().getTime()){
+
+//        if (oldModel == null || oldModel.getStartTime() == null || oldModel.getStartTime().getTime() > applyChange.getDelValidTime().getTime()) {
+//            throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵逛笉璧凤紝鐢ㄦ埛銆�" + detail.getMemberName() + "銆戝綋鍓嶆壒鍑忔棩鏈熶笉鏀寔鍑忎繚鎿嶄綔锛�");
+//        }
+//        if(oldModel.getStartTime().getTime()>applyChange.getDelValidTime().getTime()||oldModel.getEndTime().getTime()<applyChange.getDelValidTime().getTime()){
+//            throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵逛笉璧凤紝鎵瑰噺鏃ユ湡鏈湪鐢ㄦ埛銆�" + detail.getMemberName() + "銆戠殑淇濆崟鏃ユ湡鍐咃紒");
+//        }
+
+        if(oldModel.getEndTime().getTime()<applyChange.getDelValidTime().getTime()){
             throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵逛笉璧凤紝鎵瑰噺鏃ユ湡鏈湪鐢ㄦ埛銆�" + detail.getMemberName() + "銆戠殑淇濆崟鏃ユ湡鍐咃紒");
         }
 
+
         BigDecimal fee = Objects.isNull(insuranceApply.getServerCost())?
-                solutions.getPrice():
-                solutions.getPrice().add(insuranceApply.getServerCost());
+            solutions.getPrice():
+            solutions.getPrice().add(insuranceApply.getServerCost());
 
         // 鍑忎繚鍚� 鎵瑰崟鏃ユ湡  榛樿涓� 鎵瑰崟鍑忎繚鏃ユ湡  00:00:00
         Date reduceDate = applyChange.getDelValidTime();
-
         // 鍑忎繚鍚� 鎬昏垂鐢� 榛樿涓哄噺淇濆悗涓� 0
         BigDecimal reduceFee = BigDecimal.ZERO;
 
         //濡傛灉鎵瑰崟鏃ユ湡 澶т簬 鍛樺伐淇濆崟鐨勫紑濮嬫棩鏈�
         if(applyChange.getDelValidTime().getTime() > oldModel.getStartTime().getTime()){
-            reduceDate = DateUtil.getMontageDate(applyChange.getDelValidTime(), 3);
+            if(reduceDate.getTime()>oldModel.getStartTime().getTime()){
+                reduceDate = DateUtil.getMontageDate(oldModel.getStartTime(), 3);
+            }else{
+                reduceDate = DateUtil.getMontageDate(applyChange.getDelValidTime(), 3);
+            }
             //鍑忎繚璁板綍鎿嶄綔鍚庣殑鎬昏垂鐢�
             reduceFee = Constants.reduceFee(
                     solutions,fee,insuranceApply.getStartTime(),insuranceApply.getFinalEndTime(),oldModel.getStartTime(),reduceDate) ;
         }
 
+
         BigDecimal pullFee = BigDecimal.ZERO;
         if (oldModel.getStartTime().getTime() < System.currentTimeMillis()) {
             //璁$畻浜х敓璐圭敤
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/WorktypeServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/WorktypeServiceImpl.java
index 7c02437..1db15a7 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/WorktypeServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/WorktypeServiceImpl.java
@@ -24,9 +24,7 @@
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.multipart.MultipartFile;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 
 /**
  * 宸ョ淇℃伅琛⊿ervice瀹炵幇
@@ -115,6 +113,9 @@
         );
         return list;
     }
+
+
+
   
     @Override
     public PageData<Worktype> findPage(PageWrap<Worktype> pageWrap) {
@@ -181,7 +182,7 @@
         return worktypeMapper.selectCount(wrapper);
     }
     @Override
-    public List<String> importBatch(MultipartFile file ){
+    public List<String> importBatch(MultipartFile file){
         /*  List<Worktype> list = new ArrayList<>();
       if(id!=null){
             Worktype param = new Worktype();
@@ -206,11 +207,63 @@
             if(StringUtils.isBlank(model.getName())){
                 throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝褰曞叆鏁版嵁瀛樺湪寮傚父");
             }
+            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(result)){
+                if(!checkHaveName(model.getName(),result)){
+                    result.add(model.getName());
+                }
+            }
 //            if(StringUtils.isNotBlank(model.getName()) && !isNewWorkTypeByName(model.getName(),list)){
                 result.add(model.getName());
 //            }
         }
         return result;
+    }
+
+
+    @Override
+    public Set<Integer> importBatchForSolutions(MultipartFile file , Integer insuranceId){
+        ExcelImporter ie = null;
+        List<WorktypeImport> dataList =null;
+        try {
+            ie = new ExcelImporter(file,1,0);
+            dataList = ie.getDataList(WorktypeImport.class,null);
+        }  catch (Exception e) {
+            e.printStackTrace();
+        }
+        if(dataList == null || dataList.size() ==0){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝褰曞叆鏁版嵁涓虹┖锛�");
+        }
+        List<Integer> result = new ArrayList<>();
+        List<Worktype> inWorkTypeList = null;
+        if(Objects.nonNull(insuranceId)){
+            inWorkTypeList = worktypeMapper.selectList(new QueryWrapper<Worktype>().lambda().eq(Worktype::getIsdeleted,Constants.ZERO)
+                    .eq(Worktype::getInsuranceId,insuranceId).eq(Worktype::getDataType,Constants.TWO)
+            );
+        }
+        for(WorktypeImport model : dataList){
+            if(StringUtils.isBlank(model.getName())){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝褰曞叆鏁版嵁瀛樺湪寮傚父");
+            }
+            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(inWorkTypeList)){
+                Integer workTypeId = getHasWorkTypeByName(model.getName(),inWorkTypeList);
+                if(Objects.nonNull(workTypeId)){
+                    result.add(workTypeId);
+                }
+            }
+        }
+        Set<Integer> resultSet = new HashSet<>(result);
+        return resultSet;
+    }
+
+    private boolean checkHaveName(String name, List<String> list) {
+        if(  list!=null && list.size()>0){
+            for(String m : list){
+                if(StringUtils.equals(name,m)){
+                    return true;
+                }
+            }
+        }
+        return  false;
     }
 
     private boolean isNewWorkTypeByName(String name, List<Worktype> list) {
@@ -223,4 +276,15 @@
         }
         return  false;
     }
+
+    private Integer getHasWorkTypeByName(String name, List<Worktype> list) {
+        if(  list!=null && list.size()>0){
+            for(Worktype m : list){
+                if(StringUtils.equals(name,m.getName())){
+                    return  m.getId();
+                }
+            }
+        }
+        return null;
+    }
 }
diff --git a/server/service/src/main/java/com/doumee/service/system/SystemDataPermissionService.java b/server/service/src/main/java/com/doumee/service/system/SystemDataPermissionService.java
index 821faa7..010beea 100644
--- a/server/service/src/main/java/com/doumee/service/system/SystemDataPermissionService.java
+++ b/server/service/src/main/java/com/doumee/service/system/SystemDataPermissionService.java
@@ -108,5 +108,8 @@
      */
     long count(SystemDataPermission systemDataPermission);
 
+    SystemDataPermission findByRoleId(SystemDataPermission pageWrap);
+
+
     List<Integer> selectHighRole(SystemDataPermission systemDataPermission, SystemRole rt, SystemUser user);
 }
diff --git a/server/service/src/main/java/com/doumee/service/system/SystemLoginService.java b/server/service/src/main/java/com/doumee/service/system/SystemLoginService.java
index 8ce4a7e..0b91c5e 100644
--- a/server/service/src/main/java/com/doumee/service/system/SystemLoginService.java
+++ b/server/service/src/main/java/com/doumee/service/system/SystemLoginService.java
@@ -1,5 +1,6 @@
 package com.doumee.service.system;
 
+import com.doumee.core.model.LoginUserInfo;
 import com.doumee.dao.system.dto.LoginDTO;
 import com.doumee.dao.system.dto.LoginPhoneDTO;
 import com.doumee.dao.system.dto.WxMiniLoginDTO;
@@ -20,6 +21,7 @@
      */
     String loginByPassword (LoginDTO dto,int type,Boolean checkCaptcha, HttpServletRequest request);
     String loginByPhone (LoginPhoneDTO dto, int type,Boolean checkSmsCode, HttpServletRequest request);
+    String switchCompany (LoginUserInfo loginUserInfo, Integer companyId, HttpServletRequest request);
 
     /**
      *
diff --git a/server/service/src/main/java/com/doumee/service/system/SystemUserService.java b/server/service/src/main/java/com/doumee/service/system/SystemUserService.java
index aa608fe..44b0526 100644
--- a/server/service/src/main/java/com/doumee/service/system/SystemUserService.java
+++ b/server/service/src/main/java/com/doumee/service/system/SystemUserService.java
@@ -92,4 +92,6 @@
 
 
     PageData<SystemUserListVO>  findPageCompany(PageWrap<QuerySystemUserDTO> pageWrap);
+
+    void updateHead(SystemUser systemUser);
 }
diff --git a/server/service/src/main/java/com/doumee/service/system/impl/SystemDataPermissionServiceImpl.java b/server/service/src/main/java/com/doumee/service/system/impl/SystemDataPermissionServiceImpl.java
index 82fc7e1..69583a5 100644
--- a/server/service/src/main/java/com/doumee/service/system/impl/SystemDataPermissionServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/system/impl/SystemDataPermissionServiceImpl.java
@@ -283,4 +283,27 @@
         }
         return false;
     }
+
+
+    @Override
+    public SystemDataPermission findByRoleId(SystemDataPermission pageWrap){
+        if ( pageWrap.getRoleId() == null) {
+            return null;
+        }
+
+        // 鏌ヨ鏁版嵁鏉冮檺
+        QueryWrapper<SystemDataPermission> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda()
+                .eq(SystemDataPermission::getBusinessCode, "DEPARTMENT")
+                .eq(SystemDataPermission::getRoleId, pageWrap.getRoleId())
+                .eq(SystemDataPermission::getDeleted, Boolean.FALSE)
+                .eq(SystemDataPermission::getDisabled, Boolean.FALSE);
+        List<SystemDataPermission> result = systemDataPermissionMapper.selectList(queryWrapper);
+        if(result!=null && result.size()>0){
+            return result.get(0);
+        }
+        return  null;
+    }
+
+
 }
diff --git a/server/service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java b/server/service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
index 405d787..a1c4a95 100644
--- a/server/service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
@@ -162,7 +162,7 @@
         }
         // 鏍¢獙鐢ㄦ埛鍚嶅拰瀵嗙爜
         Subject subject = SecurityUtils.getSubject();
-        ShiroToken token = new ShiroToken(dto.getUsername(), dto.getPassword(),true,type);
+        ShiroToken token = new ShiroToken(dto.getUsername(), dto.getPassword(),true,type,null);
         try {
             subject.login(token);
             loginLog.setUserId(((LoginUserInfo)subject.getPrincipal()).getId());
@@ -215,7 +215,7 @@
         }
         // 鏍¢獙鐢ㄦ埛鍚嶅拰瀵嗙爜
         Subject subject = SecurityUtils.getSubject();
-        ShiroToken token = new ShiroToken(dto.getPhone(), null,false,type);
+        ShiroToken token = new ShiroToken(dto.getPhone(), null,false,type,null);
         try {
             subject.login(token);
             loginLog.setUserId(((LoginUserInfo)subject.getPrincipal()).getId());
@@ -231,4 +231,39 @@
         }
     }
 
+
+
+
+    @Override
+    public String switchCompany (LoginUserInfo loginUserInfo,Integer companyId, HttpServletRequest request) {
+        SystemLoginLog loginLog = new SystemLoginLog();
+        loginLog.setLoginUsername(loginUserInfo.getMobile());
+        loginLog.setLoginTime(new Date());
+        loginLog.setSystemVersion(systemVersion);
+        loginLog.setIp(Utils.User_Client.getIP(request));
+        loginLog.setLocation(Utils.Location.getLocationString(loginLog.getIp()));
+        loginLog.setPlatform(Utils.User_Client.getPlatform(request));
+        loginLog.setClientInfo(Utils.User_Client.getBrowser(request));
+        loginLog.setOsInfo(Utils.User_Client.getOS(request));
+        loginLog.setServerIp(Utils.Server.getIP());
+
+        // 鏍¢獙鐢ㄦ埛鍚嶅拰瀵嗙爜
+        Subject subject = SecurityUtils.getSubject();
+        ShiroToken token = new ShiroToken(loginUserInfo.getMobile(), null,false,loginUserInfo.getType(),companyId);
+        try {
+            subject.login(token);
+            loginLog.setUserId(((LoginUserInfo)subject.getPrincipal()).getId());
+            loginLog.setSuccess(Boolean.TRUE);
+            systemLoginLogService.create(loginLog);
+            return (String)subject.getSession().getId();
+        } catch (AuthenticationException e) {
+            log.error(ResponseStatus.ACCOUNT_INCORRECT.getMessage(), e);
+            loginLog.setReason(e.getMessage().length() > 200 ? (e.getMessage().substring(0, 190) + "...") : e.getMessage());
+            loginLog.setSuccess(Boolean.FALSE);
+            systemLoginLogService.create(loginLog);
+            throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT.getCode(), Objects.isNull(e.getCause())?ResponseStatus.ACCOUNT_INCORRECT.getMessage():e.getCause().getMessage());
+        }
+    }
+
+
 }
diff --git a/server/service/src/main/java/com/doumee/service/system/impl/SystemRoleServiceImpl.java b/server/service/src/main/java/com/doumee/service/system/impl/SystemRoleServiceImpl.java
index 7dcaaf7..47d9ef9 100644
--- a/server/service/src/main/java/com/doumee/service/system/impl/SystemRoleServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/system/impl/SystemRoleServiceImpl.java
@@ -7,8 +7,10 @@
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
+import com.doumee.dao.system.SystemDataPermissionMapper;
 import com.doumee.dao.system.SystemRoleMapper;
 import com.doumee.dao.system.dto.QuerySystemRoleDTO;
+import com.doumee.dao.system.model.SystemDataPermission;
 import com.doumee.dao.system.model.SystemRole;
 import com.doumee.dao.system.vo.SystemRoleListVO;
 import com.doumee.service.system.SystemMenuService;
@@ -41,6 +43,9 @@
 
     @Autowired
     private SystemPermissionService systemPermissionService;
+
+    @Autowired
+    private SystemDataPermissionMapper systemDataPermissionMapper;
 
     @Override
     public Integer create(SystemRole systemRole) {
@@ -120,6 +125,9 @@
         for (SystemRoleListVO role : roleList) {
             role.setMenus(systemMenuService.findByRoleId(role.getId()));
             role.setPermissions(systemPermissionService.findByRoleId(role.getId()));
+            role.setSystemDataPermission(systemDataPermissionMapper.selectOne(new QueryWrapper<SystemDataPermission>().lambda()
+                    .eq(SystemDataPermission::getDeleted,Constants.ZERO).eq(SystemDataPermission::getRoleId,role.getId()).last("limit 1")
+            ));
         }
         return PageData.from(new PageInfo<>(roleList));
     }
diff --git a/server/service/src/main/java/com/doumee/service/system/impl/SystemUserServiceImpl.java b/server/service/src/main/java/com/doumee/service/system/impl/SystemUserServiceImpl.java
index f136847..45e92a2 100644
--- a/server/service/src/main/java/com/doumee/service/system/impl/SystemUserServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/system/impl/SystemUserServiceImpl.java
@@ -2,9 +2,12 @@
 
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
@@ -12,6 +15,10 @@
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.model.Company;
 import com.doumee.dao.business.model.CompanyDepartment;
+import com.doumee.dao.business.CompanyDepartmentMapper;
+import com.doumee.dao.business.model.Company;
+import com.doumee.dao.business.model.CompanyDepartment;
+import com.doumee.dao.business.model.Member;
 import com.doumee.dao.system.SystemUserJoinMapper;
 import com.doumee.dao.system.SystemUserMapper;
 import com.doumee.dao.system.dto.QuerySystemUserDTO;
@@ -66,6 +73,9 @@
 
     @Autowired
     private DepartmentDataPermissionAware departmentDataPermissionAware;
+
+    @Autowired
+    private CompanyDepartmentMapper companyDepartmentMapper;
 
     @Override
     public Integer create(SystemUser systemUser) {
@@ -150,7 +160,7 @@
 //            pageWrap.getModel().setDepartmentIds(collect);
         }
         LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
-        pageWrap.getModel().setType(loginUserInfo.getType());
+//        pageWrap.getModel().setType(loginUserInfo.getType());
         if(!Constants.equalsInteger(loginUserInfo.getType(),Constants.ZERO)){
             //濡傛灉鏄紒涓氳处鍙�
             pageWrap.getModel().setCompanyId(loginUserInfo.getCompanyId());
@@ -283,13 +293,36 @@
 
         queryWrapper.selectAll(SystemUser.class);
         queryWrapper.eq(SystemUser::getDeleted, Constants.ZERO)
-                    .eq(SystemUser::getType,pageWrap.getType());
+                    .eq(SystemUser::getType,pageWrap.getType())
+                    .eq(SystemUser::getCompanyId,loginUserInfo.getCompanyId())
+               ;
         queryWrapper.orderByDesc(SystemUser::getCreateTime);
         List<SystemUser> result = systemUserJoinMapper.selectJoinList(SystemUser.class, queryWrapper);
 
         return result;
     }
 
+    @Override
+    public void updateHead(SystemUser systemUser) {
+        SystemUser model  =systemUserJoinMapper.selectById(systemUser.getId());
+        if(model ==null) {
+            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝浜哄憳淇℃伅涓嶅瓨鍦紒");
+        }
+        if(model.getDepartmentId()!=null) {
+            if(Constants.equalsInteger(systemUser.getHeadStatus(),Constants.ONE)){
+                //濡傛灉鏄彇娑堜富绠�
+                companyDepartmentMapper.update(null,new UpdateWrapper<CompanyDepartment>().lambda()
+                        .eq(CompanyDepartment::getId,model.getDepartmentId())
+                        .set(CompanyDepartment::getHeadId,model.getId()));
+            }else{
+                //濡傛灉鏄涓轰富绠�
+                companyDepartmentMapper.update(null,new UpdateWrapper<CompanyDepartment>().lambda()
+                        .eq(CompanyDepartment::getId,model.getDepartmentId())
+                        .set(CompanyDepartment::getHeadId,null)
+                );
+            }
+        }
+    }
 
 
 
diff --git a/server/service/src/main/resources/mappers/SystemUserMapper.xml b/server/service/src/main/resources/mappers/SystemUserMapper.xml
index 19dbaa8..9a631fc 100644
--- a/server/service/src/main/resources/mappers/SystemUserMapper.xml
+++ b/server/service/src/main/resources/mappers/SystemUserMapper.xml
@@ -5,10 +5,6 @@
   <!-- 鏌ヨ鐢ㄦ埛鍒楄〃 -->
   <resultMap id="SystemUserListVO" type="com.doumee.dao.system.vo.SystemUserListVO" autoMapping="true">
     <id column="ID" property="id"/>
-    <association property="department" javaType="com.doumee.dao.system.model.SystemDepartment">
-      <result column="DEPARTMENT_ID" property="id"/>
-      <result column="DEPARTMENT_NAME" property="name"/>
-    </association>
     <association property="createUserInfo" javaType="com.doumee.dao.system.model.SystemUser">
       <result column="CREATE_USER_ID" property="id"/>
       <result column="CREATE_USER_NAME" property="username"/>
@@ -22,23 +18,27 @@
     SELECT
       DISTINCT
       usr.*,
-      sd.ID AS DEPARTMENT_ID, sd.`NAME` AS DEPARTMENT_NAME,
+    case when cd.HEAD_ID = usr.ID then 1 else 0 end headStatus ,
+    cd.ID AS companyDepartmentId, cd.`NAME_PATH` AS companyDepartmentPathName, cd.`ID_PATH` AS companyDepartmentPathId,
       create_user.ID CREATE_USER_ID, create_user.`USERNAME` CREATE_USER_NAME,
-      update_user.ID UPDETE_USER_ID, update_user.`USERNAME` UPDATE_USER_NAME
+      update_user.ID UPDETE_USER_ID, update_user.`USERNAME` UPDATE_USER_NAME,
+    c.NAME as companyName,
+    ( select count(1) from company_permission cp where cp.USER_ID = usr.id and cp.TYPE = 1 and cp.ISDELETED = 0  ) as authNum,
+    case when c.USERNAME = usr.USERNAME then 1  else 0 end isAdmin
     FROM `SYSTEM_USER` usr
     LEFT JOIN `SYSTEM_USER` create_user ON create_user.ID = usr.CREATE_USER
     LEFT JOIN `SYSTEM_USER` update_user ON update_user.ID = usr.UPDATE_USER
     LEFT JOIN `SYSTEM_POSITION_USER` spu ON spu.USER_ID = usr.ID AND spu.DELETED = 0
-    LEFT JOIN `SYSTEM_POSITION` sp ON sp.ID = spu.POSITION_ID AND sp.DELETED = 0
-    LEFT JOIN `SYSTEM_DEPARTMENT_USER` sdu ON sdu.USER_ID = usr.ID AND sdu.DELETED = 0
-    LEFT JOIN `SYSTEM_DEPARTMENT` sd ON sd.ID = sdu.DEPARTMENT_ID AND sd.DELETED = 0
+    LEFT JOIN Company c ON usr.COMPANY_ID = c.id
+    LEFT JOIN company_department cd ON usr.DEPARTMENT_ID = cd.id
     <where>
       usr.DELETED = 0
+      <if test="dto.companyDepartmentId != null">
+        AND   FIND_IN_SET(#{dto.companyDepartmentId},REPLACE(cd.ID_PATH,'/',','))
+      </if>
+
       <if test="dto.positionId != null">
         AND spu.POSITION_ID = #{dto.positionId}
-      </if>
-      <if test="dto.strictDeptId != null">
-        AND sdu.DEPARTMENT_ID = #{dto.strictDeptId}
       </if>
       <if test="dto.type != null">
         AND usr.TYPE = #{dto.type}
@@ -49,14 +49,12 @@
       <if test="dto.keyword != null and dto.keyword != ''">
         AND ( usr.`USERNAME` LIKE CONCAT('%', #{dto.keyword}, '%')  or usr.`REALNAME` LIKE CONCAT('%', #{dto.keyword}, '%') )
       </if>
+
+      <if test="dto.companyDepartmentPathName != null and dto.companyDepartmentPathName != ''">
+        AND ( cd.`NAME_PATH` LIKE CONCAT('%', #{dto.companyDepartmentPathName}, '%') )
+      </if>
       <if test="dto.companyId != null">
         AND usr.COMPANY_ID = #{dto.companyId}
-      </if>
-      <if test="dto.departmentIds != null and dto.departmentIds.size > 0">
-        AND sdu.DEPARTMENT_ID IN
-        <foreach collection="dto.departmentIds" open="(" close=")" separator="," item="id">
-          #{id}
-        </foreach>
       </if>
       <if test="dto.username != null and dto.username != ''">
         AND usr.`USERNAME` LIKE CONCAT('%', #{dto.username}, '%')
@@ -64,6 +62,10 @@
       <if test="dto.realname != null and dto.realname != ''">
         AND usr.`REALNAME` LIKE CONCAT('%', #{dto.realname}, '%')
       </if>
+      <if test="dto.companyName != null and dto.companyName != ''">
+        AND c.`NAME` LIKE CONCAT('%', #{dto.companyName}, '%')
+      </if>
+
       <if test="dto.mobile != null and dto.mobile != ''">
         AND usr.`MOBILE` LIKE CONCAT('%', #{dto.mobile}, '%')
       </if>
diff --git a/server/shop/src/main/java/com/doumee/api/business/ApplyChangeController.java b/server/shop/src/main/java/com/doumee/api/business/ApplyChangeController.java
index 4aa2039..0b84cd2 100644
--- a/server/shop/src/main/java/com/doumee/api/business/ApplyChangeController.java
+++ b/server/shop/src/main/java/com/doumee/api/business/ApplyChangeController.java
@@ -3,23 +3,33 @@
 import com.doumee.api.BaseController;
 import com.doumee.core.annotation.excel.ExcelExporter;
 import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.ApiResponse;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.DateUtil;
+import com.doumee.dao.business.dto.ApplyChangeCyclePriceDTO;
 import com.doumee.dao.business.dto.ApplyChangeOptDTO;
 import com.doumee.dao.business.model.ApplyChange;
 import com.doumee.dao.business.model.InsuranceApply;
+import com.doumee.dao.business.vo.CountCyclePriceVO;
 import com.doumee.service.business.ApplyChangeService;
 import com.doumee.service.business.InsuranceApplyService;
+import com.doumee.service.business.impl.UnionChangeServiceImpl;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * @author 姹熻箘韫�
@@ -34,6 +44,8 @@
     private ApplyChangeService applyChangeService;
     @Autowired
     private InsuranceApplyService insuranceApplyService;
+    @Autowired
+    private UnionChangeServiceImpl unionChangeServiceImpl;
 
     @PreventRepeat
     @ApiOperation("鏂板缓")
@@ -161,7 +173,7 @@
     @PostMapping("/check")
     @RequiresPermissions("business:applychange:check")
     public ApiResponse check(@RequestBody ApplyChange model) {
-        return ApiResponse.success(applyChangeService.check(model));
+        return ApiResponse.success(applyChangeService.check(model,unionChangeServiceImpl));
     }
 
     @ApiOperation("鏌ヨ鏈堝害缁熻鏁版嵁")
@@ -179,4 +191,29 @@
     }
 
 
+    @ApiOperation("鍔犲噺淇濅笟鍔¤ˉ鍏呴噾棰�")
+    @PostMapping("/getChangeCountCyclePriceVO")
+    public ApiResponse<CountCyclePriceVO> getChangeCountCyclePriceVO (@RequestBody ApplyChangeCyclePriceDTO applyChangeCyclePriceDTO) {
+        applyChangeCyclePriceDTO.setValidTime(DateUtil.getMontageDate(new Date(),1));
+        return ApiResponse.success("鎿嶄綔鎴愬姛",applyChangeService.getChangeCountCyclePriceVO(applyChangeCyclePriceDTO));
+    }
+    @ApiOperation("瀵煎嚭淇濆崟涓嬫墍鏈夊姞鍑忎繚璇︽儏鍗�")
+    @PostMapping("/exportApplyJiajianBaoExcel")
+    @RequiresPermissions("business:applychange:exportExcel")
+    public void exportApplyJiajianBaoExcel (@RequestBody InsuranceApply insuranceApply, HttpServletResponse response) {
+        insuranceApply = insuranceApplyService.findDetail(insuranceApply.getId());
+        if(Objects.isNull(insuranceApply)){
+            throw new BusinessException(com.doumee.core.constants.ResponseStatus.DATA_EMPTY);
+        }
+        List<ApplyChange> applyChangeList = applyChangeService.findListByApplyId(insuranceApply.getId(), Constants.ZERO);
+        List<ApplyChange> excelList = new ArrayList<>();
+        if(CollectionUtils.isEmpty(applyChangeList)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏃犲彲瀵煎嚭鐨勫姞鍑忎繚璁板綍");
+        }else{
+            for (ApplyChange applyChange:applyChangeList) {
+                excelList.add(applyChangeService.exportJiajianBaoExcel(applyChange));
+            }
+        }
+        ExcelExporter.build(ApplyChange.class).exportApplyJiajianBaoExcel(insuranceApply,excelList,   response);
+    }
 }
diff --git a/server/shop/src/main/java/com/doumee/api/business/ApplyDetailController.java b/server/shop/src/main/java/com/doumee/api/business/ApplyDetailController.java
index ba65af5..7c9b59e 100644
--- a/server/shop/src/main/java/com/doumee/api/business/ApplyDetailController.java
+++ b/server/shop/src/main/java/com/doumee/api/business/ApplyDetailController.java
@@ -75,6 +75,14 @@
         PageData<ApplyDetail> pageData = applyDetailService.findPageForCompany(pageWrap);
         return ApiResponse.success(pageData);
     }
+
+    @ApiOperation("鍒楄〃鏌ヨ")
+    @PostMapping("/findList")
+    @RequiresPermissions("business:applydetail:query")
+    public ApiResponse<List<ApplyDetail>> findList (@RequestBody ApplyDetailPageDTO applyDetailPageDTO) {
+        return ApiResponse.success(applyDetailService.findListForCompany(applyDetailPageDTO));
+    }
+
     @ApiOperation("鏌ヨ鍏ㄩ儴")
     @PostMapping("/list")
     @RequiresPermissions("business:applydetail:query")
@@ -85,8 +93,8 @@
     @PostMapping("/exportExcel")
     @RequiresPermissions("business:applydetail:exportExcel")
     public void exportExcel (@RequestBody PageWrap<ApplyDetailPageDTO> pageWrap, HttpServletResponse response) {
-        ExcelExporter.build(ApplyDetail.class).exportWithFirstAndEnd(applyDetailService.findPageForCompany(pageWrap).getRecords(),
-                 pageWrap.getModel().getSolutionName(),"鍦ㄤ繚浜哄憳鍚嶅崟",null, response);
+        ExcelExporter.build(ApplyDetail.class).exportWithSheetAndFirstAndEnd(applyDetailService.findPageForCompany(pageWrap).getRecords(),
+                 pageWrap.getModel().getSolutionName(),"銆�"+pageWrap.getModel().getSolutionName()+"銆�"+"淇濆崟浜哄憳淇℃伅",null, "淇濆崟浜哄憳",response);
     }
 
     @ApiOperation("鏍规嵁ID鏌ヨ")
diff --git a/server/shop/src/main/java/com/doumee/api/business/CompanyDepartmentController.java b/server/shop/src/main/java/com/doumee/api/business/CompanyDepartmentController.java
index 35a4621..9b811e9 100644
--- a/server/shop/src/main/java/com/doumee/api/business/CompanyDepartmentController.java
+++ b/server/shop/src/main/java/com/doumee/api/business/CompanyDepartmentController.java
@@ -6,9 +6,13 @@
 import com.doumee.core.model.ApiResponse;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.model.PageData;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.Company;
 import com.doumee.dao.business.model.CompanyDepartment;
 import com.doumee.service.business.CompanyDepartmentService;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.apache.shiro.authz.annotation.RequiresPermissions;    
 import org.springframework.beans.factory.annotation.Autowired;
@@ -38,6 +42,14 @@
         return ApiResponse.success(companyDepartmentService.create(companyDepartment));
     }
 
+    @ApiOperation("缁勭粐鏍戞煡璇�")
+    @GetMapping("/tree")
+    @RequiresPermissions("business:companydepartment:query")
+    public ApiResponse<List<CompanyDepartment>> tree () {
+        return ApiResponse.success(companyDepartmentService.departTree(Constants.TWO));
+    }
+
+
     @ApiOperation("鏍规嵁ID鍒犻櫎")
     @GetMapping("/delete/{id}")
     @RequiresPermissions("business:companydepartment:delete")
diff --git a/server/shop/src/main/java/com/doumee/api/business/ContractController.java b/server/shop/src/main/java/com/doumee/api/business/ContractController.java
index d392fce..b4ebe40 100644
--- a/server/shop/src/main/java/com/doumee/api/business/ContractController.java
+++ b/server/shop/src/main/java/com/doumee/api/business/ContractController.java
@@ -87,4 +87,23 @@
     public ApiResponse findById(@PathVariable Integer id) {
         return ApiResponse.success(contractService.findById(id));
     }
+
+
+    @ApiOperation("鍚堝悓鍙栨秷")
+    @GetMapping("/cancel")
+    @RequiresPermissions("business:contract:update")
+    public ApiResponse cancel (@RequestParam Integer id) {
+        contractService.cancel(id);
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+    @ApiOperation("鍙戣捣绛剧讲")
+    @GetMapping("/getSignLink")
+    @RequiresPermissions("business:contract:update")
+    public ApiResponse<String> getSignLink (@RequestParam Integer id) {
+        return ApiResponse.success(contractService.getContractSignLink(id));
+    }
+
+
+
 }
diff --git a/server/shop/src/main/java/com/doumee/api/business/InsuranceApplyController.java b/server/shop/src/main/java/com/doumee/api/business/InsuranceApplyController.java
index 05f66f7..0a19a5e 100644
--- a/server/shop/src/main/java/com/doumee/api/business/InsuranceApplyController.java
+++ b/server/shop/src/main/java/com/doumee/api/business/InsuranceApplyController.java
@@ -7,9 +7,14 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.dto.ApplyPowerDTO;
+import com.doumee.dao.business.dto.CountCyclePriceDTO;
 import com.doumee.dao.business.dto.InsuranceApplyQueryDTO;
 import com.doumee.dao.business.model.InsuranceApply;
+import com.doumee.dao.business.vo.ApplyPowerVO;
+import com.doumee.dao.business.vo.CountCyclePriceVO;
 import com.doumee.service.business.InsuranceApplyService;
+import com.doumee.service.business.impl.UnionApplyServiceImpl;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
@@ -33,6 +38,9 @@
     @Autowired
     private InsuranceApplyService insuranceApplyService;
 
+    @Autowired
+    private UnionApplyServiceImpl unionApplyServiceImpl;
+
     @PreventRepeat
     @ApiOperation("鏂板缓")
     @PostMapping("/create")
@@ -44,8 +52,16 @@
     @PostMapping("/check")
     @RequiresPermissions("business:insuranceapply:check")
     public ApiResponse check(@RequestBody InsuranceApply insuranceApply) {
-        return ApiResponse.success(insuranceApplyService.check(insuranceApply));
+        return ApiResponse.success(insuranceApplyService.check(insuranceApply,unionApplyServiceImpl));
     }
+
+    @ApiOperation("鎶曚繚澶嶅")
+    @PostMapping("/reexamineCheck")
+    @RequiresPermissions("business:insuranceapply:check")
+    public ApiResponse reexamineCheck(@RequestBody InsuranceApply insuranceApply) {
+        return ApiResponse.success(insuranceApplyService.reexamineCheck(insuranceApply));
+    }
+
     @ApiOperation("鍟嗘埛閫�鍥炵敵璇�")
     @PostMapping("/back")
     @RequiresPermissions("business:insuranceapply:back")
@@ -156,4 +172,18 @@
     public ApiResponse<InsuranceApply> findById(@PathVariable Integer id) {
         return ApiResponse.success(insuranceApplyService.findDetail(id));
     }
+
+    @ApiOperation("鑾峰彇淇濆崟姝㈡湡涓庡垵濮嬮噾棰�")
+    @PostMapping("/getCountCyclePriceVO")
+    public ApiResponse<CountCyclePriceVO> getCountCyclePriceVO (@RequestBody CountCyclePriceDTO countCyclePriceDTO) {
+        return ApiResponse.success("鎿嶄綔鎴愬姛",insuranceApplyService.getCountCyclePriceVO(countCyclePriceDTO));
+    }
+
+
+    @ApiOperation("鏌ヨ淇濆崟鏄惁鍙繘琛屽姞鍑忎繚")
+    @PostMapping("/getApplyPower")
+    @RequiresPermissions("business:insuranceapply:query")
+    public ApiResponse<ApplyPowerVO> getApplyPower(@RequestBody ApplyPowerDTO applyPowerDTO) {
+        return ApiResponse.success(insuranceApplyService.getApplyPower(applyPowerDTO));
+    }
 }
diff --git a/server/shop/src/main/java/com/doumee/api/business/MemberController.java b/server/shop/src/main/java/com/doumee/api/business/MemberController.java
index 9f9f3e4..01c7c8e 100644
--- a/server/shop/src/main/java/com/doumee/api/business/MemberController.java
+++ b/server/shop/src/main/java/com/doumee/api/business/MemberController.java
@@ -4,6 +4,7 @@
 import com.doumee.core.annotation.excel.ExcelExporter;
 import com.doumee.core.annotation.pr.PreventRepeat;
 import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.business.dto.MemberQueryDTO;
@@ -11,6 +12,7 @@
 import com.doumee.service.business.MemberService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -97,4 +99,14 @@
     public ApiResponse findById(@PathVariable Integer id) {
         return ApiResponse.success(memberService.findById(id));
     }
+
+
+    @ApiOperation("鏁版嵁鍒楄〃")
+    @PostMapping("/findListByDTO")
+    @RequiresPermissions("business:member:query")
+    public ApiResponse<List<Member>> findListByDTO (@RequestBody MemberQueryDTO memberQueryDTO) {
+        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        return ApiResponse.success(memberService.findListByDTO(memberQueryDTO));
+    }
+
 }
diff --git a/server/shop/src/main/java/com/doumee/api/business/SolutionsController.java b/server/shop/src/main/java/com/doumee/api/business/SolutionsController.java
index 2549513..6c10bce 100644
--- a/server/shop/src/main/java/com/doumee/api/business/SolutionsController.java
+++ b/server/shop/src/main/java/com/doumee/api/business/SolutionsController.java
@@ -3,9 +3,12 @@
 import com.doumee.api.BaseController;
 import com.doumee.core.annotation.excel.ExcelExporter;
 import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.ApiResponse;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
 import com.doumee.dao.business.model.Solutions;
 import com.doumee.service.business.SolutionsService;
 import io.swagger.annotations.Api;
@@ -17,6 +20,7 @@
 import javax.servlet.http.HttpServletResponse;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * @author 姹熻箘韫�
@@ -102,4 +106,18 @@
     public ApiResponse findById(@PathVariable Integer id) {
         return ApiResponse.success(solutionsService.findById(id));
     }
+
+    @ApiOperation("鏌ヨ浼佷笟鍙娇鐢ㄦ柟妗堬紙宸茬缃诧級")
+    @GetMapping("/getUseList")
+    @RequiresPermissions("business:solutions:query")
+    public ApiResponse<List<Solutions>> getUseList (@RequestParam Integer companyId,Integer dateType) {
+        if(Objects.isNull(companyId)){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        if(Objects.isNull(dateType)){
+            dateType = Constants.TWO;
+        }
+        List<Solutions>  solutionsList = solutionsService.findListByCompanyId(dateType,companyId);
+        return ApiResponse.success(solutionsList);
+    }
 }
diff --git a/server/shop/src/main/java/com/doumee/api/business/UnionApplyController.java b/server/shop/src/main/java/com/doumee/api/business/UnionApplyController.java
index d9f5a0d..654653e 100644
--- a/server/shop/src/main/java/com/doumee/api/business/UnionApplyController.java
+++ b/server/shop/src/main/java/com/doumee/api/business/UnionApplyController.java
@@ -6,6 +6,7 @@
 import com.doumee.core.model.ApiResponse;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
 import com.doumee.dao.business.dto.*;
 import com.doumee.dao.business.model.InsuranceApply;
 import com.doumee.dao.business.model.UnionApply;
@@ -116,6 +117,15 @@
         return ApiResponse.success(null);
     }
 
+    @ApiOperation("鍚堝苟鍗曞瀹�")
+    @PostMapping("/reexamineCheck")
+    @RequiresPermissions("business:unionapply:cancel")
+    public ApiResponse reexamineCheck(@RequestBody UnionApply unionApply) {
+        unionApplyService.reexamineCheck(unionApply);
+        return ApiResponse.success(null);
+    }
+
+
     @PreventRepeat
     @ApiOperation("涓婁紶鎶曚繚鍗�")
     @PostMapping("/uploadToubaodan")
diff --git a/server/shop/src/main/java/com/doumee/api/system/SystemUserController.java b/server/shop/src/main/java/com/doumee/api/system/SystemUserController.java
index a80efe3..9b45516 100644
--- a/server/shop/src/main/java/com/doumee/api/system/SystemUserController.java
+++ b/server/shop/src/main/java/com/doumee/api/system/SystemUserController.java
@@ -143,4 +143,13 @@
         return ApiResponse.success(null);
     }
 
+
+    @ApiOperation("璁剧疆鎴栧彇娑堜富绠�")
+    @PostMapping("/updateHead")
+    @RequiresPermissions("system:user:query")
+    public ApiResponse updateHead(@RequestBody SystemUser systemUser){
+        systemUserService.updateHead(systemUser);
+        return ApiResponse.success(null);
+    }
+
 }

--
Gitblit v1.9.3