From b693c55ed17cc94efb45ea595341d443bfd4259d Mon Sep 17 00:00:00 2001
From: k94314517 <8417338+k94314517@user.noreply.gitee.com>
Date: 星期六, 23 十一月 2024 09:19:04 +0800
Subject: [PATCH] git ch

---
 server/service/src/main/java/com/doumee/service/business/CustomerCompanyService.java             |   97 
 server/service/src/main/java/com/doumee/dao/business/join/CompanyUserApplyJoinMapper.java        |   13 
 server/service/src/main/java/com/doumee/config/shiro/ShiroRealm.java                             |   75 
 server/service/src/main/java/com/doumee/service/business/impl/ApplyChagneDetailServiceImpl.java  |    4 
 server/service/src/main/java/com/doumee/service/business/impl/SolutionsServiceImpl.java          |  298 +
 server/service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java          |   34 
 server/shop/src/main/java/com/doumee/api/system/SystemUserController.java                        |    9 
 server/service/src/main/java/com/doumee/biz/system/SystemRoleBiz.java                            |    4 
 server/service/src/main/java/com/doumee/dao/business/dto/ApplyDetailPageDTO.java                 |    2 
 server/service/src/main/java/com/doumee/dao/business/dto/SaveUnionChangeDTO.java                 |    6 
 server/service/src/main/java/com/doumee/service/business/impl/CompanyPermissionServiceImpl.java  |  110 
 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 
 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 +
 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 
 server/service/src/main/java/com/doumee/service/business/impl/ApplyDetailServiceImpl.java        |   28 
 server/platform/src/main/java/com/doumee/api/business/ApplyDetailController.java                 |   13 
 server/platform/src/main/java/com/doumee/api/business/CompanyController.java                     |    1 
 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 
 server/company/src/main/java/com/doumee/api/business/CompanySolutionController.java              |    9 
 server/company/src/main/java/com/doumee/api/business/InsuranceApplyController.java               |   17 
 server/company/src/main/java/com/doumee/api/system/SystemRoleController.java                     |   13 
 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/service/business/UnionApplyService.java                  |    8 
 server/service/src/main/java/com/doumee/dao/business/model/InsuranceApply.java                   |   16 
 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 ++
 server/company/src/main/java/com/doumee/api/business/MemberController.java                       |    2 
 server/company/src/main/java/com/doumee/api/business/CompanyController.java                      |   10 
 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 
 server/service/src/main/java/com/doumee/service/business/WorktypeService.java                    |    3 
 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 
 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 
 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 
 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 
 server/service/src/main/java/com/doumee/dao/business/join/SolutionsBaseJoinMapper.java           |   13 
 server/service/src/main/java/com/doumee/service/system/SystemUserService.java                    |    2 
 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 
 server/platform/src/main/java/com/doumee/api/business/WorktypeController.java                    |   10 
 server/service/src/main/java/com/doumee/biz/system/impl/SystemRoleBizImpl.java                   |   31 
 server/service/src/main/java/com/doumee/service/system/impl/SystemUserServiceImpl.java           |   37 
 server/service/src/main/java/com/doumee/dao/system/dto/CreateSystemUserDTO.java                  |    5 
 server/company/src/main/java/com/doumee/api/business/CustomerServiceController.java              |  107 
 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 ++
 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/dao/business/dto/UnionChangeBXDDTO.java                  |    6 
 server/service/src/main/java/com/doumee/service/business/impl/WorktypeServiceImpl.java           |   72 
 server/platform/src/main/java/com/doumee/api/system/SystemDataPermissionController.java          |    7 
 server/platform/src/main/java/com/doumee/api/system/SystemRoleController.java                    |   13 
 server/service/src/main/java/com/doumee/service/system/SystemDataPermissionService.java          |    3 
 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 +
 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 
 server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java        |  381 ++
 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 
 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 
 server/company/src/main/java/com/doumee/api/business/CompanyUserApplyController.java             |    6 
 server/company/src/main/java/com/doumee/api/business/ApplyChangeController.java                  |   25 
 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/CustomerServiceService.java             |  113 
 server/service/src/main/java/com/doumee/dao/business/model/ApplyChange.java                      |    9 
 server/service/src/main/java/com/doumee/service/business/CompanySolutionService.java             |    8 
 server/shop/src/main/java/com/doumee/api/business/SolutionsController.java                       |   18 
 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 
 server/platform/src/main/java/com/doumee/api/business/CustomerCompanyController.java             |   90 
 server/service/src/main/java/com/doumee/service/business/ApplyChangeService.java                 |    5 
 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/dao/business/model/UnionApply.java                       |   20 
 server/service/src/main/java/com/doumee/service/business/impl/ContractServiceImpl.java           |  520 +++
 server/service/src/main/java/com/doumee/service/system/impl/SystemRoleServiceImpl.java           |    8 
 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 
 server/service/src/main/java/com/doumee/service/business/impl/NoticesServiceImpl.java            |   21 
 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/system/model/SystemDataPermission.java               |    2 
 server/company/src/main/java/com/doumee/api/business/SolutionsController.java                    |   19 
 server/service/src/main/java/com/doumee/service/business/SolutionsService.java                   |    8 
 server/service/src/main/java/com/doumee/dao/business/model/CompanyUserApply.java                 |   22 
 server/shop/src/main/java/com/doumee/api/business/MemberController.java                          |   12 
 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 
 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 
 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/service/src/main/java/com/doumee/dao/business/model/CustomerCompany.java                  |   79 
 server/shop/src/main/java/com/doumee/api/business/UnionApplyController.java                      |   10 
 server/platform/src/main/java/com/doumee/api/system/SystemUserController.java                    |   15 
 server/service/src/main/java/com/doumee/dao/business/dto/ApplyPowerDTO.java                      |   20 
 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 +
 server/service/src/main/java/com/doumee/dao/business/dto/UpdateSortDTO.java                      |   26 
 server/company/src/main/java/com/doumee/api/business/CompanyPermissionController.java            |    1 
 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 
 server/service/src/main/java/com/doumee/service/business/InsuranceApplyService.java              |   23 
 135 files changed, 6,341 insertions(+), 1,033 deletions(-)

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 ddec2d9..0a131b0 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";
@@ -93,6 +98,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";
@@ -719,6 +728,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;
@@ -835,10 +850,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"));
 
@@ -1079,6 +1092,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),
 
 
 
@@ -1178,6 +1192,7 @@
         UPLOAD_INSURANCE_POLICY(2, "寰呭嚭鍗�","",0),
         FINISH(3, "淇濋殰涓�","",0),
         CLOSE(4, "宸查��鍥�","",0),
+        RETRIAL(5, "寰呭鏍�","",0),
         ;
         // 鎴愬憳鍙橀噺
         private String name;
@@ -1465,7 +1480,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),
@@ -1474,7 +1489,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),
 
         ;
@@ -1571,7 +1586,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;
@@ -1626,18 +1644,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, "","","","","","","",""),
         ;
 
         // 鎴愬憳鍙橀噺
@@ -1648,11 +1667,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;
@@ -1660,6 +1681,8 @@
             this.dispatchUnitDetail = dispatchUnitDetail;
             this.taxesDetail = taxesDetail;
             this.settleClaimsDetail = settleClaimsDetail;
+            this.contract = contract;
+            this.solutions = solutions;
         }
 
         // 鏅�氭柟娉�
@@ -1678,6 +1701,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();
                     }
                 }
             }
@@ -1741,6 +1768,13 @@
             this.settleClaimsDetail = settleClaimsDetail;
         }
 
+        public String getContract() {
+            return contract;
+        }
+
+        public void setContract(String info) {
+            this.contract = contract;
+        }
 
     }
 
@@ -1815,6 +1849,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 {
@@ -2308,18 +2388,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害涓烘壒鏀瑰崟浣�
@@ -2328,7 +2408,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())) {
                 //鍗婂勾涓烘壒鏀瑰崟浣�
                 //鏌ヨ浜х敓璐圭敤鎬绘湀浠�
@@ -2336,7 +2416,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(),"鏂规閰嶇疆閿欒");
             }
@@ -2361,18 +2441,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害涓烘壒鏀瑰崟浣�
@@ -2381,7 +2461,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())) {
                 //鍗婂勾涓烘壒鏀瑰崟浣�
                 //鏌ヨ浜х敓璐圭敤鎬绘湀浠�
@@ -2389,7 +2469,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(),"鏂规閰嶇疆閿欒");
             }
@@ -2417,18 +2497,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害涓烘壒鏀瑰崟浣�
@@ -2437,7 +2517,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())) {
                 //鍗婂勾涓烘壒鏀瑰崟浣�
                 //鏌ヨ浜х敓璐圭敤鎬绘湀浠�
@@ -2445,7 +2525,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(),"鏂规閰嶇疆閿欒");
             }
@@ -2461,27 +2541,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 53b5b32..7896332 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;
@@ -57,11 +60,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 c1528c6..b323e8e 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;
@@ -105,16 +106,32 @@
     @ApiModelProperty(value = "寰俊灏忕▼搴廜PENID")
     private String openid;
 
-    @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..e7fa383 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();
@@ -893,9 +924,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 +945,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 +957,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 +1008,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 +1042,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 +1140,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 +1202,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 +1236,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 +1268,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 +1386,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 +1417,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 +1517,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 +1542,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 +1598,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 +1684,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 +1817,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 +1876,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 +1915,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 +1991,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 +2161,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 +2183,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 +2248,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 +2510,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 +2532,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 +2575,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 +2640,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 5dc73fd..31a8596 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
@@ -277,4 +277,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 822a624..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());
@@ -234,6 +234,36 @@
 
 
 
+    @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 f93f8c0..90b7b16 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,14 +2,21 @@
 
 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;
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
+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;
@@ -64,6 +71,9 @@
 
     @Autowired
     private DepartmentDataPermissionAware departmentDataPermissionAware;
+
+    @Autowired
+    private CompanyDepartmentMapper companyDepartmentMapper;
 
     @Override
     public Integer create(SystemUser systemUser) {
@@ -148,7 +158,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());
@@ -287,13 +297,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