From c8bc6fdbdc37f551388b71372c35d4f42f58e571 Mon Sep 17 00:00:00 2001
From: k94314517 <8417338+k94314517@user.noreply.gitee.com>
Date: 星期三, 22 五月 2024 18:14:29 +0800
Subject: [PATCH] 代码初始化

---
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CarUseBookCloudController.java         |    7 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveParam.java             |   12 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CarUseBookService.java          |    3 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java             |   13 +
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/ApproveJoinMapper.java         |   18 ++
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Approve.java                  |   36 +++
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java     |   55 ++++++
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CarUseBook.java               |    9 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java              |    6 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java |   59 +++++
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java    |  238 ++++++++++++++++++++++++++
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java             |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java     |    7 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/RegisterDriverDTO.java          |   29 +++
 14 files changed, 472 insertions(+), 22 deletions(-)

diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CarUseBookCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CarUseBookCloudController.java
index 7657b26..0c6e2df 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CarUseBookCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CarUseBookCloudController.java
@@ -100,4 +100,11 @@
         return ApiResponse.success(carUseBookService.checkDateUse(carId,dateDay));
     }
 
+    @ApiOperation("鐢宠鎾ら攢")
+    @GetMapping("/revoke")
+    public ApiResponse  revoke (@RequestParam Integer id, @RequestParam String info, @RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+        carUseBookService.revoke(id,info,getLoginUser(token));
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
 }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java
index 69592d7..31c8ac8 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java
@@ -13,6 +13,7 @@
 import com.doumee.dao.admin.request.LaborMemberDTO;
 import com.doumee.dao.admin.request.MemberImport;
 import com.doumee.dao.admin.request.MemberQuery;
+import com.doumee.dao.business.dto.RegisterDriverDTO;
 import com.doumee.dao.business.dto.ResetPasswordDTO;
 import com.doumee.dao.business.model.Member;
 import com.doumee.dao.business.model.MemberRole;
@@ -327,4 +328,16 @@
         return ApiResponse.success(null);
     }
 
+
+    @LoginNoRequired
+    @ApiOperation("鍙告満娉ㄥ唽")
+    @PostMapping("/registerDriver")
+    public ApiResponse registerDriver(@RequestBody RegisterDriverDTO registerDriverDTO ){
+        memberService.registerDriver(registerDriverDTO);
+        return ApiResponse.success("娉ㄥ唽鎴愬姛");
+    }
+
+
+
+
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/RegisterDriverDTO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/RegisterDriverDTO.java
new file mode 100644
index 0000000..3af8b5c
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/RegisterDriverDTO.java
@@ -0,0 +1,29 @@
+package com.doumee.dao.business.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2024/5/20 14:54
+ */
+@Data
+public class RegisterDriverDTO {
+
+    @ApiModelProperty(value = "濮撳悕")
+    private String name;
+
+    @ApiModelProperty(value = "鎵嬫満鍙�")
+    private String phone;
+
+    @ApiModelProperty(value = "楠岃瘉鐮�")
+    private String validCode;
+
+    @ApiModelProperty(value = "瀵嗙爜")
+    private String password;
+
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/ApproveJoinMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/ApproveJoinMapper.java
new file mode 100644
index 0000000..86d86d7
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/ApproveJoinMapper.java
@@ -0,0 +1,18 @@
+package com.doumee.dao.business.join;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.Approve;
+import com.github.yulichang.base.mapper.MPJJoinMapper;
+
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/12/28 14:09
+ */
+public interface ApproveJoinMapper extends MPJJoinMapper<Approve> {
+
+    void insertBatchSomeColumn(List<Approve> list);
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Approve.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Approve.java
index d3e8ec1..46c455d 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Approve.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Approve.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 com.doumee.core.model.LoginUserModel;
 import io.swagger.annotations.ApiModel;
@@ -96,9 +97,6 @@
     @ExcelColumn(name="鍏宠仈涓氬姟涓婚敭")
     private Integer objId;
 
-    @ApiModelProperty(value = "鍏宠仈涓氬姟绫诲瀷锛�0=璁垮鐢宠锛�1=鐢ㄨ溅鐢宠", example = "1")
-    @ExcelColumn(name="鍏宠仈涓氬姟绫诲瀷锛�0=璁垮鐢宠锛�1=鐢ㄨ溅鐢宠")
-    private Integer objType;
 
     @ApiModelProperty(value = "瀹℃壒绛夌骇", example = "1")
     @ExcelColumn(name="瀹℃壒绛夌骇")
@@ -108,7 +106,39 @@
     @ExcelColumn(name="澶氫汉瀹℃壒鏂瑰紡 0鎴栫 1浼氱")
     private Integer approveType;
 
+
+    @ApiModelProperty(value = "鏄惁鎸囧畾鍙告満椤� 0涓嶆寚瀹� 1鎸囧畾", example = "1")
+    @ExcelColumn(name="鏄惁鎸囧畾鍙告満椤� 0涓嶆寚瀹� 1鎸囧畾")
+    private Integer driverParam;
+
+    @ApiModelProperty(value = "鏄惁淇敼鐩殑鍦� 0鍚� 1鏄�", example = "1")
+    @ExcelColumn(name="鏄惁淇敼鐩殑鍦� 0鍚� 1鏄�")
+    private Integer addrParam;
+
+    @ApiModelProperty(value = "鍏宠仈涓氬姟绫诲瀷锛�0闈炴柦宸ヤ汉鍛樿瀹㈢敵璇� 1闈炴柦宸ヤ汉鍛樿瀹㈢敵璇� 2璁垮鎶ュ 3鍏溅甯傚唴鐢ㄨ溅 4鍏溅瀹ゅ鐢ㄨ溅 5甯傚叕鍙哥墿娴佽溅棰勭害", example = "1")
+    @ExcelColumn(name="鍏宠仈涓氬姟绫诲瀷锛�0闈炴柦宸ヤ汉鍛樿瀹㈢敵璇� 1闈炴柦宸ヤ汉鍛樿瀹㈢敵璇� 2璁垮鎶ュ 3鍏溅甯傚唴鐢ㄨ溅 4鍏溅瀹ゅ鐢ㄨ溅 5甯傚叕鍙哥墿娴佽溅棰勭害")
+    private Integer objType;
+
     @ApiModelProperty(value = "绫诲瀷 0瀹℃壒 1鎶勯��", example = "1")
     @ExcelColumn(name="绫诲瀷 0瀹℃壒 1鎶勯��")
     private Integer type;
+
+
+
+
+    @ApiModelProperty(value = "濮撳悕", example = "1")
+    @ExcelColumn(name="濮撳悕")
+    @TableField(exist = false)
+    private String memberName;
+
+    @ApiModelProperty(value = "鎵嬫満鍙�", example = "1")
+    @ExcelColumn(name="鎵嬫満鍙�")
+    @TableField(exist = false)
+    private String memberPhone;
+
+    @ApiModelProperty(value = "閮ㄩ棬", example = "1")
+    @ExcelColumn(name="閮ㄩ棬")
+    @TableField(exist = false)
+    private String companyName;
+
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveParam.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveParam.java
index 8147a87..001d95d 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveParam.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveParam.java
@@ -93,4 +93,16 @@
     @ExcelColumn(name="鏃犱富绠¢�夐」 0娴佺▼缁撴潫 1鐢变笂绾т富绠′唬鏇垮鏍�")
     private Integer noleaderOpt;
 
+    @ApiModelProperty(value = "妯$増缂栫爜锛堝叧鑱攁pprove_templ)", example = "1")
+    @ExcelColumn(name="妯$増缂栫爜锛堝叧鑱攁pprove_templ)")
+    private Integer templId;
+
+    @ApiModelProperty(value = "鏄惁鎸囧畾鍙告満椤� 0涓嶆寚瀹� 1鎸囧畾", example = "1")
+    @ExcelColumn(name="鏄惁鎸囧畾鍙告満椤� 0涓嶆寚瀹� 1鎸囧畾")
+    private Integer driverParam;
+
+
+    @ApiModelProperty(value = "鏄惁淇敼鐩殑鍦� 0鍚� 1鏄�", example = "1")
+    @ExcelColumn(name="鏄惁淇敼鐩殑鍦� 0鍚� 1鏄�")
+    private Integer addrParam;
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CarUseBook.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CarUseBook.java
index 218f678..b9b1d62 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CarUseBook.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CarUseBook.java
@@ -93,13 +93,11 @@
 
     @ApiModelProperty(value = "鍙栨秷绫诲瀷 0鐢宠浜哄彇娑� 1娲捐溅鍛樻挙閿�")
     @ExcelColumn(name="鍙栨秷绫诲瀷 0鐢宠浜哄彇娑� 1娲捐溅鍛樻挙閿�")
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    private Date cancelType;
+    private Integer cancelType;
 
     @ApiModelProperty(value = "鏄惁宸插彇娑� 0鏈彇娑� 1宸插彇娑�")
     @ExcelColumn(name="鏄惁宸插彇娑� 0鏈彇娑� 1宸插彇娑�")
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    private Date cancelStatus;
+    private Integer cancelStatus;
 
     @ApiModelProperty(value = "鍙栨秷鏃堕棿")
     @ExcelColumn(name="鍙栨秷鏃堕棿")
@@ -172,4 +170,7 @@
     @ApiModelProperty(value = "鐢宠浜虹數璇�")
     @TableField(exist = false)
     private String memberMobile;
+    @ApiModelProperty(value = "瀹℃壒璁板綍")
+    @TableField(exist = false)
+    private List<Approve> approveList;
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java
index d773779..1259862 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java
@@ -104,4 +104,6 @@
      * @return
      */
     InternalHomeVO getHomeData(Integer memberId);
+
+    void createApproveFlow(Integer tempType,Integer businessId,Integer createMemberId);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CarUseBookService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CarUseBookService.java
index 5652f03..9754f62 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CarUseBookService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CarUseBookService.java
@@ -1,5 +1,6 @@
 package com.doumee.service.business;
 
+import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.business.model.CarUseBook;
@@ -101,4 +102,6 @@
     List<CarUseBook> carUseBookList(CarUseBook carUseBook);
 
     List<DateIntervalVO> checkDateUse(Integer cars, String dateDay);
+
+    void revoke(Integer id, String info, LoginUserInfo loginUserInfo);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
index 2fabbd8..883b71d 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
@@ -7,6 +7,7 @@
 import com.doumee.dao.admin.request.LaborMemberDTO;
 import com.doumee.dao.admin.request.MemberQuery;
 import com.doumee.dao.admin.response.StagingDataVO;
+import com.doumee.dao.business.dto.RegisterDriverDTO;
 import com.doumee.dao.business.dto.ResetPasswordDTO;
 import com.doumee.dao.business.model.Member;
 import com.doumee.dao.business.model.MemberRole;
@@ -161,6 +162,11 @@
     void memberFreeze();
     /********************************************鍏紬鍙锋帴鍙�***********************************************************************/
 
+    /**
+     * 鍙告満娉ㄥ唽
+     * @param registerDriverDTO
+     */
+    void registerDriver(RegisterDriverDTO registerDriverDTO);
 
     /**
      * 寰俊鎺堟潈鎺ュ彛
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
index 08320d3..289c28d 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
@@ -1,23 +1,31 @@
 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.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
-import com.doumee.dao.business.ApproveMapper;
-import com.doumee.dao.business.model.Approve;
+import com.doumee.dao.business.*;
+import com.doumee.dao.business.dao.CompanyMapper;
+import com.doumee.dao.business.model.*;
+import com.doumee.dao.system.SystemUserMapper;
+import com.doumee.dao.system.model.SystemUser;
 import com.doumee.dao.web.response.InternalHomeVO;
 import com.doumee.service.business.ApproveService;
 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.apache.commons.lang3.StringUtils;
 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.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 瀹℃壒淇℃伅璁板綍琛⊿ervice瀹炵幇
@@ -32,6 +40,24 @@
 
     @Autowired
     private SystemDictDataBiz systemDictDataBiz;
+
+    @Autowired
+    private ApproveTemplMapper approveTemplMapper;
+
+    @Autowired
+    private ApproveParamMapper approveParamMapper;
+
+    @Autowired
+    private MemberMapper memberMapper;
+
+    @Autowired
+    private CompanyMapper companyMapper;
+
+    @Autowired
+    private CarUseBookMapper carUseBookMapper;
+
+    @Autowired
+    private CarDriverMapper carDriverMapper;
 
     @Override
     public Integer create(Approve approve) {
@@ -189,10 +215,214 @@
     }
 
 
+    /**
+     * 鍒涘缓瀹℃壒娴佺▼
+     * @param tempType 妯℃澘绫诲瀷  0闈炴柦宸ヤ汉鍛樿瀹㈢敵璇� 1闈炴柦宸ヤ汉鍛樿瀹㈢敵璇� 2璁垮鎶ュ 3鍏溅甯傚唴鐢ㄨ溅 4鍏溅瀹ゅ鐢ㄨ溅 5甯傚叕鍙哥墿娴佽溅棰勭害
+     * @param businessId 涓氬姟涓婚敭 鏍规嵁 tempType
+     * @param createMemberId 鎻愪氦娴佺▼浜哄憳
+     */
+    @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+    public void createApproveFlow(Integer tempType,Integer businessId,Integer createMemberId){
+        //鏌ヨ澶勭悊妯℃澘
+        ApproveTempl approveTempl = approveTemplMapper.selectOne(new QueryWrapper<ApproveTempl>().lambda()
+                .eq(ApproveTempl::getType,tempType)
+                .eq(ApproveTempl::getIsdeleted,Constants.ZERO)
+                .last(" limit 1 ")
+        );
+        if(Objects.isNull(approveTempl)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌閰嶇疆妯℃澘");
+        }
+        //鏌ヨ閰嶇疆娴佺▼
+        List<ApproveParam> approveParamAllList = approveParamMapper.selectList(new QueryWrapper<ApproveParam>()
+                .lambda().eq(ApproveParam::getIsdeleted,Constants.ZERO)
+                .eq(ApproveParam::getTemplId,approveTempl.getId())
+                .orderByAsc(ApproveParam::getType)
+                .orderByAsc(ApproveParam::getLevel)
+        );
+        if(Objects.isNull(approveParamAllList)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈厤缃鎵规祦绋�");
+        }
+        //瀹℃壒閰嶇疆
+        List<ApproveParam> approveParamList = approveParamAllList.stream().filter(i->i.getType().equals(Constants.ZERO)).collect(Collectors.toList());
+        if(Objects.isNull(approveParamList)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈厤缃鎵规祦绋�");
+        }
+        List<ApproveParam> approveCopyList = approveParamAllList.stream().filter(i->i.getType().equals(Constants.ONE)).collect(Collectors.toList());
+
+        Member createMember = memberMapper.selectById(createMemberId);
+        if(Objects.isNull(createMember)|| Objects.isNull(createMember.getCompanyId())){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鐢宠浜虹粍缁囦俊鎭紓甯�");
+        }
+        List<Approve> approveList = new ArrayList<>();
+
+        this.organizeApproveData(approveTempl,approveParamList,createMember,businessId,approveList);
+
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(approveList)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀹℃壒娴侀厤缃敊璇�");
+        }
+
+        //澶勭悊鎶勯�佹暟鎹�
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(approveCopyList)){
+            this.organizeApproveCopyData(approveTempl,approveParamList,businessId,approveList);
+        }
+        approveMapper.insertBatchSomeColumn(approveList);
+
+    }
+
+
+    /**
+     * 缁勭粐瀹℃壒娴佹暟鎹�
+     * @param approveTempl
+     * @param approveParamList
+     * @param createMember
+     * @param businessId
+     * @param approveList
+     */
+    public void organizeApproveData(ApproveTempl approveTempl,List<ApproveParam> approveParamList,Member createMember,Integer businessId,List<Approve> approveList){
+        //瀹℃壒涓氬姟鏁版嵁
+        for (int i = 0; i < approveParamList.size(); i++) {
+            ApproveParam approveParam = approveParamList.get(i);
+            List<Integer> ids = this.getApproveUserIds(approveParam,createMember);
+            for (Integer memberId:ids) {
+                Approve approve = new Approve();
+                approve.setCreateDate(new Date());
+                approve.setIsdeleted(Constants.ZERO);
+                approve.setTemplatId(approveTempl.getId());
+                approve.setChekorId(memberId);
+                approve.setStatus(Constants.ZERO);
+                approve.setStatusInfo("寰呭鎵�");
+                approve.setIsEndCheck((i+1) == approveParamList.size()?Constants.ONE:Constants.ZERO);
+                approve.setObjId(businessId);
+                approve.setLevel(i+1);
+                approve.setApproveType(approveParam.getApproveType());
+                approve.setDriverParam(approveParam.getDriverParam());
+                approve.setAddrParam(approveParam.getAddrParam());
+                approve.setType(Constants.ZERO);
+                approveList.add(approve);
+            }
+        }
+    }
+
+
+    public void organizeApproveCopyData(ApproveTempl approveTempl,List<ApproveParam> approveCopyList,Integer businessId,List<Approve> approveList){
+        for (ApproveParam approveParam:approveCopyList) {
+            if(StringUtils.isBlank(approveParam.getObjIds())){
+                return;
+            }
+            List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda()
+                    .eq(Member::getIsdeleted,Constants.ZERO)
+                    .eq(Member::getWorkStatus,Constants.ZERO)
+                    .in(Member::getId,approveParam.getObjIds().split(",")));
+            List<Integer> userIds = new ArrayList<>();
+            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(memberList)){
+                userIds.addAll(memberList.stream().map(m->m.getId()).collect(Collectors.toList()));
+            }
+            //鍏姟鐢ㄨ溅 榛樿鍔犲叆 鍙告満鎶勯��
+            if(approveTempl.getType()==Constants.THREE||approveTempl.getType()==Constants.FOUR){
+                CarUseBook carUseBook = carUseBookMapper.selectById(businessId);
+                if(Objects.isNull(carUseBook)){
+                    throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"涓烘煡璇㈠埌鐢ㄨ溅鐢宠淇℃伅");
+                }
+                CarDriver carDriver = carDriverMapper.selectById(carUseBook.getDriverId());
+                if(Objects.isNull(carDriver)){
+                    throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"涓烘煡璇㈠埌鍙告満淇℃伅");
+                }
+                userIds.add(carDriver.getMemberId());
+            }
+
+            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(userIds)){
+                for (Integer memberId:userIds) {
+                    Approve approve = new Approve();
+                    approve.setCreateDate(new Date());
+                    approve.setIsdeleted(Constants.ZERO);
+                    approve.setTemplatId(approveTempl.getId());
+                    approve.setChekorId(memberId);
+                    approve.setObjId(businessId);
+                    approve.setType(Constants.ONE);
+                    approveList.add(approve);
+                }
+            }
+        }
+    }
+
+
+    public List<Integer> getApproveUserIds(ApproveParam approveParam,Member createMember){
+        List<Integer> userIds = new ArrayList<>();
+        if(approveParam.getMemberType().equals(Constants.ZERO)){
+            //鐢宠浜�
+            userIds.add(createMember.getId());
+        }else if(approveParam.getMemberType().equals(Constants.ONE)){
+            //鎸囧畾浜哄憳
+            if(StringUtils.isBlank(approveParam.getObjIds())){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀹℃壒娴侀厤缃敊璇痆鏈厤缃寚瀹氬鎵逛汉鍛榏");
+            }
+            List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda()
+                    .eq(Member::getIsdeleted,Constants.ZERO)
+                    .in(Member::getId,approveParam.getObjIds().split(",")));
+            if(memberList.size()!=approveParam.getObjIds().split(",").length){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀹℃壒娴侀厤缃敊璇痆鎸囧畾瀹℃壒浜哄憳淇℃伅寮傚父]");
+            }
+            userIds.addAll(memberList.stream().map(m->m.getId()).collect(Collectors.toList()));
+        }else if(approveParam.getMemberType().equals(Constants.TWO)){
+            //閮ㄩ棬涓荤瀹℃壒
+            //瀹℃壒閮ㄩ棬
+            Company memberCompany = companyMapper.selectById(createMember.getCompanyId());
+            if(Objects.isNull(memberCompany)){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀹℃壒娴侀厤缃敊璇痆鎸囧畾瀹℃壒閮ㄩ棬鏈煡璇㈠埌]");
+            }
+            Company auditCompany = this.getAuditCompanyHead(memberCompany.getParentId(),approveParam.getObjLevel());
+            if(Objects.isNull(auditCompany)){
+                //瀹℃壒閮ㄩ棬涓虹┖ 鑷姩娴佽浆涓嬩竴绾у鎵归厤缃�
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀹℃壒娴侀厤缃敊璇痆鎸囧畾瀹℃壒閮ㄩ棬鏈煡璇㈠埌]");
+            }else{
+                //鏌ヨ閮ㄩ棬璐熻矗浜�
+                Member headMember = memberMapper.selectById(auditCompany.getHeadId());
+                if(Objects.isNull(headMember)){
+                    //鏈煡璇㈠埌閮ㄩ棬璐熻矗浜�  鏍规嵁閰嶇疆澶勭悊   鐢变笂绾т富绠′唬鏇垮鏍�/鐩存帴缁撴潫娴佺▼
+                    if(approveParam.getNoleaderOpt().equals(Constants.ONE)&&!Objects.isNull(auditCompany.getParentId())){
+                        auditCompany = companyMapper.selectOne(new QueryWrapper<Company>().lambda().eq(Company::getId,auditCompany.getParentId()));
+                        //鏃犵埗绾� 鐩存帴娴佷紶涓嬩竴绾у鎵�
+                        if(Objects.isNull(auditCompany)){
+                            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀹℃壒娴侀厤缃敊璇痆鎸囧畾瀹℃壒閮ㄩ棬鏈煡璇㈠埌]");
+                        }
+                        headMember = memberMapper.selectById(auditCompany.getHeadId());
+                        if(Objects.isNull(headMember)){
+                            //鏌ヨ閮ㄩ棬璐熻矗浜� 涓虹┖ 鑷姩娴佽浆涓嬩竴绾у鎵归厤缃�
+                            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀹℃壒娴侀厤缃敊璇痆鎸囧畾瀹℃壒閮ㄩ棬鏈缃礋璐d汉]");
+                        }else{
+                            //娣诲姞瀹℃壒浜�
+                            userIds.add(headMember.getId());
+                        }
+                    }else{
+                        //娣诲姞瀹℃壒浜�
+                        userIds.add(headMember.getId());
+                    }
+                }
+            }
+        }
+        return userIds;
+    }
 
 
 
-
+    /**
+     * 鏍规嵁閰嶇疆鏌ヨ涓婄骇鏁版嵁
+     * @param companyId 鐖剁骇閮ㄩ棬涓婚敭
+     * @param objLevel  鏌ヨ绾у埆
+     */
+    public Company getAuditCompanyHead(Integer companyId, Integer objLevel){
+        Integer queryLevel = Constants.ZERO;
+        Company auditCompany =  companyMapper.selectById(companyId);
+        while(queryLevel.equals(objLevel)){
+            auditCompany = companyMapper.selectById(auditCompany.getParentId());
+            if(Objects.isNull(auditCompany)){
+                return null;
+            }
+            queryLevel = queryLevel + 1;
+        }
+        return auditCompany;
+    }
 
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java
index 2479504..2b41210 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java
@@ -10,12 +10,15 @@
 import com.doumee.core.utils.DESUtil;
 import com.doumee.core.utils.DateUtil;
 import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.ApproveMapper;
 import com.doumee.dao.business.CarUseBookMapper;
 import com.doumee.dao.business.CarsMapper;
+import com.doumee.dao.business.join.ApproveJoinMapper;
 import com.doumee.dao.business.join.CarUseBookJoinMapper;
 import com.doumee.dao.business.model.*;
 import com.doumee.dao.business.vo.DateIntervalVO;
 import com.doumee.dao.system.model.SystemDictData;
+import com.doumee.service.business.ApproveService;
 import com.doumee.service.business.CarUseBookService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -56,6 +59,12 @@
 
     @Autowired
     private SystemDictDataBiz systemDictDataBiz;
+
+    @Autowired
+    private ApproveJoinMapper approveJoinMapper;
+
+    @Autowired
+    private ApproveService approveService;
 
 
     @Override
@@ -103,6 +112,8 @@
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀛樺湪杞﹁締棰勭害鏃堕棿涓庡凡棰勭害鏃堕棿鍐茬獊~");
         }
         carUseBookMapper.insert(carUseBook);
+        //鐢ㄨ溅鐢宠 瀹℃壒璁板綍鍒涘缓
+        approveService.createApproveFlow(carUseBook.getType()==0?3:4,carUseBook.getId(),carUseBook.getMemberId());
         return carUseBook.getId();
     }
 
@@ -155,6 +166,21 @@
                 .eq(CarUseBook::getId,id)
                 .last("limit 1"  );
         CarUseBook model = carUseBookMapper.selectJoinOne(CarUseBook.class,queryWrapper);
+        //瀹℃壒璁板綍
+       List<Approve> approveList = approveJoinMapper.selectJoinList(Approve.class,
+                new MPJLambdaWrapper<Approve>()
+                        .selectAll(Approve.class)
+                        .selectAs(Member::getName,Approve::getMemberName)
+                        .selectAs(Member::getPhone,Approve::getMemberPhone)
+                        .selectAs(Company::getName,Approve::getCompanyName)
+                        .leftJoin(Member.class,Member::getId,Approve::getChekorId)
+                        .leftJoin(Company.class,Company::getId,Member::getCompanyId)
+                        .eq(Approve::getIsdeleted,Constants.ZERO)
+                        .eq(Approve::getObjType,Constants.ONE)
+                        .eq(Approve::getObjId,id)
+                        .orderByAsc(Approve::getLevel)
+        );
+       model.setApproveList(approveList);
         return  model;
     }
 
@@ -207,10 +233,8 @@
                 .le(pageWrap.getModel().getCheckDate() != null, CarUseBook::getCheckDate, Utils.Date.getEnd(pageWrap.getModel().getCheckDate()))
                 .eq(pageWrap.getModel().getCheckUserId() != null, CarUseBook::getCheckUserId, pageWrap.getModel().getCheckUserId())
                 .eq(pageWrap.getModel().getCheckInfo() != null, CarUseBook::getCheckInfo, pageWrap.getModel().getCheckInfo())
-                .ge(pageWrap.getModel().getCancelType() != null, CarUseBook::getCancelType, Utils.Date.getStart(pageWrap.getModel().getCancelType()))
-                .le(pageWrap.getModel().getCancelType() != null, CarUseBook::getCancelType, Utils.Date.getEnd(pageWrap.getModel().getCancelType()))
-                .ge(pageWrap.getModel().getCancelStatus() != null, CarUseBook::getCancelStatus, Utils.Date.getStart(pageWrap.getModel().getCancelStatus()))
-                .le(pageWrap.getModel().getCancelStatus() != null, CarUseBook::getCancelStatus, Utils.Date.getEnd(pageWrap.getModel().getCancelStatus()))
+                .eq(pageWrap.getModel().getCancelType() != null, CarUseBook::getCancelType,  pageWrap.getModel().getCancelType())
+                .eq(pageWrap.getModel().getCancelStatus() != null, CarUseBook::getCancelStatus, pageWrap.getModel().getCancelStatus())
                 .ge(pageWrap.getModel().getCancelTime() != null, CarUseBook::getCancelTime, Utils.Date.getStart(pageWrap.getModel().getCancelTime()))
                 .le(pageWrap.getModel().getCancelTime() != null, CarUseBook::getCancelTime, Utils.Date.getEnd(pageWrap.getModel().getCancelTime()))
                 .eq(pageWrap.getModel().getCancelUser() != null, CarUseBook::getCancelUser, pageWrap.getModel().getCancelUser())
@@ -377,11 +401,30 @@
     }
 
 
-    public void revoke(Integer id, LoginUserInfo loginUserInfo){
+    @Override
+    public void revoke(Integer id, String info, LoginUserInfo loginUserInfo){
        CarUseBook carUseBook = carUseBookMapper.selectById(id);
-
-
-
+       if(Objects.isNull(carUseBook)){
+           throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鐢ㄨ溅鐢宠淇℃伅");
+       }
+       carUseBook.setCancelInfo(info);
+       carUseBook.setCancelTime(new Date());
+       carUseBook.setCancelStatus(Constants.ONE);
+       carUseBook.setStatus(Constants.FOUR);
+       carUseBook.setCancelUser(loginUserInfo.getId());
+       carUseBook.setCancelType(Constants.ONE);
+       if(loginUserInfo.getId().equals(carUseBook.getCreator())){
+           carUseBook.setCancelType(Constants.ZERO);
+       }
+       carUseBookMapper.updateById(carUseBook);
+       //澶勭悊瀹℃壒璁板綍
+       approveJoinMapper.update(null,new UpdateWrapper<Approve>()
+                .lambda()
+                .set(Approve::getStatus,Constants.FOUR)
+                .set(Approve::getCheckInfo,"鐢ㄨ溅鐢宠鍙栨秷")
+                .in(Approve::getStatus,Constants.ZERO,Constants.ONE)
+                .eq(Approve::getObjId,id)
+        );
     }
 
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index a4ce820..f394837 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -34,6 +34,7 @@
 import com.doumee.dao.admin.response.StagingDataVO;
 import com.doumee.dao.business.*;
 import com.doumee.dao.business.dao.CompanyMapper;
+import com.doumee.dao.business.dto.RegisterDriverDTO;
 import com.doumee.dao.business.dto.ResetPasswordDTO;
 import com.doumee.dao.business.join.MemberJoinMapper;
 import com.doumee.dao.business.join.RetentionJoinMapper;
@@ -48,6 +49,7 @@
 import com.doumee.dao.web.response.MemberVO;
 import com.doumee.dao.web.response.WxAuthorizeVO;
 import com.doumee.service.business.MemberService;
+import com.doumee.service.business.SmsEmailService;
 import com.doumee.service.business.impl.hksync.HkSyncEmpowerServiceImpl;
 import com.doumee.service.business.impl.hksync.ferp.HkSyncOrgUserToHKServiceImpl;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
@@ -119,6 +121,8 @@
     @Autowired
     private SystemUserMapper systemUserMapper;
 
+    @Autowired
+    private SmsEmailService smsEmailService;
 
     @Value("${debug_model}")
     private Boolean isDebug;
@@ -1932,6 +1936,57 @@
     }
 
 
+    @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+    public void registerDriver(RegisterDriverDTO registerDriverDTO){
+        if(Objects.isNull(registerDriverDTO)
+        || StringUtils.isBlank(registerDriverDTO.getName())
+                || StringUtils.isBlank(registerDriverDTO.getPassword())
+                || StringUtils.isBlank(registerDriverDTO.getValidCode())
+                || StringUtils.isBlank(registerDriverDTO.getPhone())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        if(memberMapper.selectCount(new QueryWrapper<Member>().lambda()
+                .eq(Member::getIsdeleted,Constants.ZERO)
+                .eq(Member::getPhone,registerDriverDTO.getPhone())
+        )>Constants.ZERO){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎵嬫満鍙峰凡娉ㄥ唽!");
+        };
+        if(systemUserMapper.selectCount(new QueryWrapper<SystemUser>().lambda()
+                .eq(SystemUser::getDeleted,Constants.ZERO)
+                        .and(i->i.eq(SystemUser::getMobile,registerDriverDTO.getPhone()).or().eq(SystemUser::getUsername,registerDriverDTO.getPhone()))
+        )>Constants.ZERO){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎵嬫満鍙峰凡娉ㄥ唽!");
+        };
+
+        smsEmailService.validateCode(registerDriverDTO.getValidCode(),registerDriverDTO.getPhone());
+        String salt = RandomStringUtils.randomAlphabetic(6);
+       ;
+        Member member = new Member();
+        member.setCreateDate(new Date());
+        member.setIsdeleted(Constants.ZERO);
+        member.setType(Constants.TWO);
+        member.setName(registerDriverDTO.getName());
+        member.setPhone(registerDriverDTO.getPhone());
+        member.setStatus(Constants.ZERO);
+        member.setPassward(Utils.Secure.encryptPassword(registerDriverDTO.getPassword(), salt));
+        memberMapper.insert(member);
+
+
+        SystemUser systemUser = new SystemUser();
+        systemUser.setCreateTime(new Date());
+        systemUser.setDeleted(Boolean.FALSE);
+        systemUser.setUsername(registerDriverDTO.getPhone());
+        systemUser.setRealname(registerDriverDTO.getName());
+        systemUser.setMemberId(member.getId());
+        systemUser.setSalt(salt);
+        systemUser.setPassword(member.getPassward());
+        systemUser.setStatus(Constants.ZERO);
+        systemUserMapper.insert(systemUser);
+
+    }
+
 
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
index 55ca0be..59ca333 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
@@ -39,6 +39,7 @@
 import com.doumee.dao.web.reqeust.VisitRecordDTO;
 import com.doumee.dao.web.response.VisitDetailVO;
 import com.doumee.dao.web.response.VisitRecordVO;
+import com.doumee.service.business.ApproveService;
 import com.doumee.service.business.InterfaceLogService;
 import com.doumee.service.business.SmsEmailService;
 import com.doumee.service.business.VisitsService;
@@ -104,6 +105,8 @@
     private SmsEmailService smsEmailService;
     @Autowired
     private SystemUserMapper systemUserMapper;
+    @Autowired
+    private ApproveService approveService;
 
 
     @Override
@@ -237,6 +240,7 @@
         }else if(dataSyncConfig.getVisitorDataOrigin().equals(Constants.ZERO)){
             visits.setStatus(Constants.VisitStatus.pass);
             visitsMapper.updateById(visits);
+            approveService.createApproveFlow(visits.getType(),visits.getId(),visits.getReceptMemberId());
         }else{
             throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵逛笉璧凤紝鍙戣捣鎷滆瀹℃壒鐢宠澶辫触锛�");
         }
@@ -490,7 +494,6 @@
                 .eq(ApproveParam::getMemberType,Constants.ZERO)
                 .last("limit 1"));
          return  Objects.isNull(approveParam)?null:approveParam.getId();
-
     }
 
 
@@ -1356,8 +1359,6 @@
         dto.setId(systemUser.getId());
         dto.setOperaUserId(systemUser.getId());
         systemUserBiz.resetPwd(dto);
-
-
     }
 
 }

--
Gitblit v1.9.3