From d3c4c2c396cd94b04937d0d316d2cb6f11832a5f Mon Sep 17 00:00:00 2001
From: k94314517 <8417338+k94314517@user.noreply.gitee.com>
Date: 星期五, 05 一月 2024 08:59:24 +0800
Subject: [PATCH] ERP接口

---
 server/dmvisit_service/src/main/java/com/doumee/dao/business/ApproveMapper.java                    |    6 
 server/dmvisit_web/src/main/java/com/doumee/api/web/ApiController.java                             |   13 
 server/dmvisit_service/src/main/java/com/doumee/config/Jwt/WebMvcConfig.java                       |   23 
 server/dmvisit_service/src/main/java/com/doumee/dao/web/response/InternalHomeVO.java               |   16 
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java      |   26 +
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java       |  393 +++++++++++++++++++
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java  |    5 
 server/dmvisit_service/src/main/java/com/doumee/dao/web/response/MemberVO.java                     |    5 
 server/dmvisit_admin/src/main/java/com/doumee/api/business/CompanyController.java                  |   10 
 server/dmvisit_service/src/main/java/com/doumee/dao/system/vo/ApproveParamDataVO.java              |   24 +
 server/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java                |   17 
 server/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/VisitMemberDTO.java                |   22 +
 server/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveParam.java               |    2 
 server/dmvisit_service/src/main/java/com/doumee/dao/web/response/VisitRecordVO.java                |   42 ++
 server/dmvisit_service/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java                       |    2 
 server/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/VisitRecordDTO.java                |   37 +
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveParamServiceImpl.java |   61 +++
 server/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java               |   10 
 server/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java                |   15 
 server/dmvisit_service/src/main/java/com/doumee/service/common/tree/CompanyTree.java               |    2 
 server/dmvisit_service/src/main/java/com/doumee/dao/system/vo/ApproveParamVO.java                  |   49 ++
 server/dmvisit_web/src/main/java/com/doumee/api/web/InternalController.java                        |  125 ++++++
 server/dmvisit_service/src/main/java/com/doumee/service/business/ApproveParamService.java          |    9 
 server/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/AccountLoginDTO.java               |   28 +
 server/dmvisit_service/src/main/java/com/doumee/dao/web/response/VisitDetailVO.java                |   25 +
 server/dmvisit_service/src/main/java/com/doumee/dao/web/response/WxAuthorizeVO.java                |    3 
 server/dmvisit_web/src/main/java/com/doumee/api/web/VisitorController.java                         |    2 
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java       |  112 +++++
 server/dmvisit_service/src/main/java/com/doumee/core/utils/Constants.java                          |   14 
 server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Approve.java                    |    9 
 server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java                     |    6 
 server/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/AuditApproveDTO.java               |   27 +
 server/dmvisit_admin/src/main/java/com/doumee/api/business/ApproveParamController.java             |   11 
 33 files changed, 1,113 insertions(+), 38 deletions(-)

diff --git a/server/dmvisit_admin/src/main/java/com/doumee/api/business/ApproveParamController.java b/server/dmvisit_admin/src/main/java/com/doumee/api/business/ApproveParamController.java
index 62a1f74..660df95 100644
--- a/server/dmvisit_admin/src/main/java/com/doumee/api/business/ApproveParamController.java
+++ b/server/dmvisit_admin/src/main/java/com/doumee/api/business/ApproveParamController.java
@@ -7,6 +7,7 @@
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.model.PageData;
 import com.doumee.dao.business.model.ApproveParam;
+import com.doumee.dao.system.vo.ApproveParamDataVO;
 import com.doumee.service.business.ApproveParamService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -87,4 +88,14 @@
     public ApiResponse findById(@PathVariable Integer id) {
         return ApiResponse.success(approveParamService.findById(id));
     }
+
+
+    @ApiOperation("鑾峰彇閰嶇疆淇℃伅")
+    @GetMapping("/getApproveParamData")
+    @RequiresPermissions("business:approveparam:query")
+    public ApiResponse<ApproveParamDataVO> getApproveParamData() {
+        return ApiResponse.success(approveParamService.getApproveParamData());
+    }
+
+
 }
diff --git a/server/dmvisit_admin/src/main/java/com/doumee/api/business/CompanyController.java b/server/dmvisit_admin/src/main/java/com/doumee/api/business/CompanyController.java
index 400adbf..fd9872f 100644
--- a/server/dmvisit_admin/src/main/java/com/doumee/api/business/CompanyController.java
+++ b/server/dmvisit_admin/src/main/java/com/doumee/api/business/CompanyController.java
@@ -12,6 +12,7 @@
 import com.doumee.dao.business.model.Company;
 import com.doumee.dao.system.dto.UpdateSystemMenuSortDTO;
 import com.doumee.service.business.CompanyService;
+import com.doumee.service.business.ERPSyncService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -36,6 +37,9 @@
 
     @Autowired
     private CompanyService companyService;
+
+    @Autowired
+    private ERPSyncService erpSyncService;
 
     @PreventRepeat
     @ApiOperation("鏂板缓")
@@ -150,7 +154,7 @@
      */
     @ApiOperation("鏍规嵁绫诲瀷鏌ヨ缁勭粐淇℃伅")
     @GetMapping("/findCompanyTreePage")
-//    @RequiresPermissions("business:company:query")
+    @RequiresPermissions("business:company:query")
     public ApiResponse<List<CompanyDTO>> findCompanyTreePage(Integer type){
         return ApiResponse.success(companyService.findCompanyTreePage(type));
     }
@@ -159,9 +163,9 @@
 
     @ApiOperation("閮ㄩ棬淇℃伅鍚屾")
     @PostMapping("/sync")
-//    @RequiresPermissions("business:company:sync")
+    @RequiresPermissions("business:company:sync")
     public ApiResponse sync(){
-        //TODO 鎵嬪姩鍚屾 閮ㄩ棬淇℃伅
+        erpSyncService.syncCompany(null);
         return ApiResponse.success("鍚屾鎴愬姛");
     }
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java b/server/dmvisit_service/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java
index 9609518..abf47d7 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java
@@ -43,6 +43,8 @@
     public static final String HEADER_KEY = "token";
     //鍙栧�煎悕绉�
     public static final String UserId_Name = "AppUserId";
+    //鍙栧�煎悕绉�
+    public static final String MEMBER = "MEMBER";
     //鍔犲瘑瀵嗛挜
     private final static String jwtSecret = "MhAjU9poLf8ko54K25XBDtonaL33vtt1";
     //杩囨湡鏃堕棿(s) 86400L=1澶� 604800L=7澶�
diff --git a/server/dmvisit_service/src/main/java/com/doumee/config/Jwt/WebMvcConfig.java b/server/dmvisit_service/src/main/java/com/doumee/config/Jwt/WebMvcConfig.java
index 8081e3e..66eaa30 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/config/Jwt/WebMvcConfig.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/config/Jwt/WebMvcConfig.java
@@ -7,6 +7,7 @@
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.redis.RedisUtil;
+import com.doumee.dao.business.model.Member;
 import io.jsonwebtoken.JwtException;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -14,6 +15,7 @@
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.web.client.RestTemplate;
 import org.springframework.web.method.HandlerMethod;
@@ -24,6 +26,7 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.lang.reflect.Method;
+import java.util.Objects;
 
 @Configuration
 public class WebMvcConfig implements WebMvcConfigurer {
@@ -98,21 +101,19 @@
             }
             //鑾峰彇璐﹀彿ID
             String memberId = JwtTokenUtil.getJwtPayLoad(token).getMemberId();
-            Integer isDeleted = dao.queryForObject(" select COALESCE(DELETED,1)  from `system_user` where id  = ?", Integer.class, memberId);
-            if(isDeleted== Constants.ONE){
+            Member member = dao.queryForObject(" select  *  from `member` where id  = ?  limit 1  ", new BeanPropertyRowMapper<>(Member.class),memberId );
+            if(Objects.isNull(member)){
+                throw new BusinessException(ResponseStatus.DATA_EMPTY);
+            }
+            if(member.getIsdeleted()== Constants.ONE){
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛宸插垹闄�,璇疯仈绯荤鐞嗗憳");
             }
-            Integer isForbidden = dao.queryForObject(" select COALESCE(STATUS,1)  from `system_user` where id  = ?", Integer.class, memberId);
-            if(isForbidden== Constants.ONE){
+            if(member.getStatus() != Constants.ZERO){
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛宸茬鐢�,璇疯仈绯荤鐞嗗憳");
             }
-            Integer count = dao.queryForObject("select count(1) from `system_user` where id  = ?", Integer.class, memberId);
-            if (count != null && count > 0) {
-                request.setAttribute(JwtTokenUtil.UserId_Name, memberId);
-                return true;
-            }else{
-                throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"鐢ㄦ埛淇℃伅鍑洪敊");
-            }
+            request.setAttribute(JwtTokenUtil.UserId_Name, memberId);
+            request.setAttribute(JwtTokenUtil.MEMBER, member);
+            return true;
         } catch (IllegalArgumentException | JwtException e) {
             throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"鏈櫥褰�");
         }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/core/utils/Constants.java b/server/dmvisit_service/src/main/java/com/doumee/core/utils/Constants.java
index bcb0f8a..baae10e 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/core/utils/Constants.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -207,6 +207,7 @@
     public static final String COFFEE_BEAN_TASK ="COFFEE_BEAN_TASK";
 
 
+    public static final String HOME_IMAGE ="HOME_IMAGE";
 
 
 
@@ -226,6 +227,8 @@
     public interface RedisKeys {
         public static final String ERP_TOKEN ="ERP_TOKEN";
         public static final long EXPIRE_TIME = 7200;
+
+        public static final String INTERNAL_TOKEN ="INTERNAL_TOKEN";
 
         public static final String GOODSORDER_KEY = "ordercode_";
         public static final String ACTIVITY_SIGN_KEY = "actcode_";
@@ -288,6 +291,17 @@
     int visitor = 1;//鏅�氳瀹�
     int internal = 2;//鍐呴儴浜哄憳
 }
+
+
+public interface  approveStatus{
+    int wait = 0;//寰呭鎵�
+    int auditIng = 1;//瀹℃壒涓�
+    int pass = 2;//瀹℃壒閫氳繃
+    int unPass = 3;//瀹℃壒鏈�氳繃
+    int otherDeal = 4;//浠栦汉宸插鐞�
+}
+
+
     public static void main(String[] args) {
         String t = URLDecoder.decode("https://lsqw.gtja.com/qwcos/v-index.html#/loginforProperty?corpId=ww4b7aefafeb430e4b&corpId=ww4b7aefafeb430e4b&agentId=1000005&agentId=1000005&fromRoute=&userCode=013561&userCode=&userId=zz&userId=&encryptUserCode=&custQwId=wmIUuSDgAAR8MhtVY8w90EyKltvoK5fA&custCode=&openId=op1wZwD1dKuBQywmWWS5957zUOJI&name=%E8%B9%84%E8%B9%84&headUrl=http%3A%2F%2Fwx.qlogo.cn%2Fmmhead%2FQ3auHgzwzM4QlibSOAvYcvRMdsoyF3Ua7duLOYSJfB3dsGsYxIYonBw%2F0&dbHeadUrl=https%3A%2F%2Ftgf.gtja.com%2Ff%2F%2Fqwoms%2F2022512%2Fqwoms_1652332606613_8.jpg");
         System.out.println(t);
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/business/ApproveMapper.java b/server/dmvisit_service/src/main/java/com/doumee/dao/business/ApproveMapper.java
index cc95147..4a829af 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/dao/business/ApproveMapper.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/business/ApproveMapper.java
@@ -2,6 +2,9 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.doumee.dao.business.model.Approve;
+import com.doumee.dao.business.model.Member;
+
+import java.util.List;
 
 /**
  * @author 姹熻箘韫�
@@ -9,4 +12,7 @@
  */
 public interface ApproveMapper extends BaseMapper<Approve> {
 
+    void insertBatchSomeColumn(List<Approve> list);
+
+
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Approve.java b/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Approve.java
index 80a50f6..22747d4 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Approve.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Approve.java
@@ -61,14 +61,14 @@
 
     @ApiModelProperty(value = "瀹℃壒妯℃澘缂栫爜")
     @ExcelColumn(name="瀹℃壒妯℃澘缂栫爜")
-    private String templatId;
+    private Integer templatId;
 
     @ApiModelProperty(value = "ERP瀹℃壒缂栫爜")
     @ExcelColumn(name="ERP瀹℃壒缂栫爜")
     private String erpId;
 
-    @ApiModelProperty(value = "瀹℃壒鐘舵�� 0寰呭鎵� 1瀹℃壒涓� 2瀹℃壒閫氳繃 3瀹℃壒鏈�氳繃", example = "1")
-    @ExcelColumn(name="瀹℃壒鐘舵�� 0寰呭鎵� 1瀹℃壒涓� 2瀹℃壒閫氳繃 3瀹℃壒鏈�氳繃")
+    @ApiModelProperty(value = "瀹℃壒鐘舵�� 0寰呭鎵� 1瀹℃壒涓� 2瀹℃壒閫氳繃 3瀹℃壒鏈�氳繃 4浠栦汉宸插鐞�", example = "1")
+    @ExcelColumn(name="瀹℃壒鐘舵�� 0寰呭鎵� 1瀹℃壒涓� 2瀹℃壒閫氳繃 3瀹℃壒鏈�氳繃 4浠栦汉宸插鐞�")
     private Integer status;
 
     @ApiModelProperty(value = "鐘舵�佷俊鎭�")
@@ -103,4 +103,7 @@
     @ExcelColumn(name="澶氫汉瀹℃壒鏂瑰紡 0鎴栫 1浼氱")
     private Integer approveType;
 
+    @ApiModelProperty(value = "绫诲瀷 0瀹℃壒 1鎶勯��", example = "1")
+    @ExcelColumn(name="绫诲瀷 0瀹℃壒 1鎶勯��")
+    private Integer type;
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveParam.java b/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveParam.java
index 5eb0f4c..d38c87d 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveParam.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveParam.java
@@ -57,7 +57,7 @@
 
     @ApiModelProperty(value = "瀹℃壒浜虹被鍨� 0琚浜� 1鎸囧畾浜哄憳 2閮ㄩ棬涓荤")
     @ExcelColumn(name="瀹℃壒浜虹被鍨� 0琚浜� 1鎸囧畾浜哄憳 2閮ㄩ棬涓荤")
-    private String memberType;
+    private Integer memberType;
 
     @ApiModelProperty(value = "绛夌骇", example = "1")
     @ExcelColumn(name="绛夌骇")
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java b/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java
index 14d7dea..773d37f 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java
@@ -223,6 +223,12 @@
     @ExcelColumn(name="ERP鐢宠璁板綍缂栫爜")
     private String erpId;
 
+
+    @ApiModelProperty(value = "鍒涘缓浜虹紪鐮侊紙鍏宠仈member琛�)", example = "1")
+    @ExcelColumn(name="鍒涘缓浜虹紪鐮侊紙鍏宠仈member琛�)")
+    private Integer createMemberId;
+
+
     @ApiModelProperty(value = "鏅�氳瀹㈢敵璇烽殢璁夸汉鍛�")
     @TableField(exist = false)
     private List<Visits> withUserList;
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/system/vo/ApproveParamDataVO.java b/server/dmvisit_service/src/main/java/com/doumee/dao/system/vo/ApproveParamDataVO.java
new file mode 100644
index 0000000..34f5b0a
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/system/vo/ApproveParamDataVO.java
@@ -0,0 +1,24 @@
+package com.doumee.dao.system.vo;
+
+import com.doumee.dao.business.model.ApproveParam;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 瀹℃壒妯$増閰嶇疆淇℃伅琛�
+ * @author 姹熻箘韫�
+ * @date 2023/12/28 11:46
+ */
+@Data
+public class ApproveParamDataVO {
+
+    @ApiModelProperty(value = "瀹℃壒浜哄憳閰嶇疆淇℃伅")
+    private List<ApproveParam> auditApproveList;
+
+    @ApiModelProperty(value = "鎶勯�佷汉鍛橀厤缃俊鎭�")
+    private ApproveParam  copyForConfig;
+
+}
+
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/system/vo/ApproveParamVO.java b/server/dmvisit_service/src/main/java/com/doumee/dao/system/vo/ApproveParamVO.java
new file mode 100644
index 0000000..0c2d649
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/system/vo/ApproveParamVO.java
@@ -0,0 +1,49 @@
+package com.doumee.dao.system.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.doumee.core.annotation.excel.ExcelColumn;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 瀹℃壒妯$増閰嶇疆淇℃伅琛�
+ * @author 姹熻箘韫�
+ * @date 2023/12/28 11:46
+ */
+@Data
+public class ApproveParamVO {
+
+    @ApiModelProperty(value = "涓婚敭", example = "1")
+    private Integer id;
+
+    @ApiModelProperty(value = "绫诲瀷", example = "1")
+    private Integer type;
+
+    @ApiModelProperty(value = "瀹℃壒浜虹被鍨� 0琚浜� 1鎸囧畾浜哄憳 2閮ㄩ棬涓荤")
+    private Integer memberType;
+
+    @ApiModelProperty(value = "绛夌骇", example = "1")
+    private Integer level;
+
+    @ApiModelProperty(value = "瀹℃壒浜哄鍚嶏紝澶氫釜鐢ㄨ嫳鏂囬�楀彿闅斿紑")
+    private String objNames;
+
+    @ApiModelProperty(value = "瀹℃壒浜虹紪鐮侊紝澶氫釜鐢ㄨ嫳鏂囬�楀彿闅斿紑")
+    private String objIds;
+
+    @ApiModelProperty(value = "瀹℃壒涓荤绛夌骇 0鐩存帴涓荤 1浜岀骇涓荤 2涓夌骇涓荤 4鍥涚骇涓荤", example = "1")
+    private Integer objLevel;
+
+    @ApiModelProperty(value = "澶氫汉瀹℃壒鏂瑰紡 0鎴栫 1浼氱", example = "1")
+    private Integer approveType;
+
+    @ApiModelProperty(value = "鏃犱富绠¢�夐」 0娴佺▼缁撴潫 1鐢变笂绾т富绠′唬鏇垮鏍�", example = "1")
+    private Integer noleaderOpt;
+
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/AccountLoginDTO.java b/server/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/AccountLoginDTO.java
new file mode 100644
index 0000000..95b38f6
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/AccountLoginDTO.java
@@ -0,0 +1,28 @@
+package com.doumee.dao.web.reqeust;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/12/7 11:19
+ */
+@Data
+public class AccountLoginDTO {
+
+    @NotBlank(message = "韬唤璇佸彿鐮佹湭褰曞叆")
+    @ApiModelProperty(value = "韬唤璇佸彿鐮�")
+    private String account;
+
+    @NotBlank(message = "瀵嗙爜鏈綍鍏�")
+    @ApiModelProperty(value = "瀵嗙爜")
+    private String password;
+
+    @ApiModelProperty(value = "openId")
+    private String openId;
+
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/AuditApproveDTO.java b/server/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/AuditApproveDTO.java
new file mode 100644
index 0000000..6475706
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/AuditApproveDTO.java
@@ -0,0 +1,27 @@
+package com.doumee.dao.web.reqeust;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2024/1/4 16:17
+ */
+@Data
+public class AuditApproveDTO {
+
+    @ApiModelProperty(value = "瀹℃壒璁板綍涓婚敭")
+    private Integer id;
+
+    @ApiModelProperty(value = "瀹℃壒鐘舵�侊細2=閫氳繃锛�3=鏈�氳繃")
+    private Integer status;
+
+    @ApiModelProperty(value = "瀹℃壒澶囨敞")
+    private String checkInfo;
+
+    @ApiModelProperty(value = "瀹℃壒鎿嶄綔浜�", hidden = true )
+    private Integer memberId;
+
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/VisitMemberDTO.java b/server/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/VisitMemberDTO.java
new file mode 100644
index 0000000..33b2e09
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/VisitMemberDTO.java
@@ -0,0 +1,22 @@
+package com.doumee.dao.web.reqeust;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/12/7 11:19
+ */
+@Data
+public class VisitMemberDTO {
+
+    @ApiModelProperty(value = "鍚嶇О")
+    private String name;
+
+    @ApiModelProperty(value = "鎵嬫満鍙�")
+    private String phone;
+
+
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/VisitRecordDTO.java b/server/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/VisitRecordDTO.java
new file mode 100644
index 0000000..5613c7d
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/VisitRecordDTO.java
@@ -0,0 +1,37 @@
+package com.doumee.dao.web.reqeust;
+
+import com.doumee.core.utils.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/12/7 11:19
+ */
+@Data
+public class VisitRecordDTO {
+
+    @ApiModelProperty(value = "鏉ヨ浜哄憳鍚嶇О")
+    private String name;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿寮�濮� yyyy-MM-dd HH:mm:ss")
+    private String createTimeS;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿缁撴潫 yyyy-MM-dd HH:mm:ss")
+    private String createTimeE;
+
+    @ApiModelProperty(value = "璁垮璁板綍绫诲瀷: 0鍔冲姟璁垮 1鏅�氳瀹�")
+    private Integer type;
+
+    @ApiModelProperty(value = "鏌ヨ鐘舵�侊細0=寰呭鎵癸紱1=宸插鎵癸紱2=鎴戝彂璧风殑")
+    private Integer state;
+
+    @ApiModelProperty(value = "鐢ㄦ埛涓婚敭",hidden = true)
+    private Integer memberId;
+
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/web/response/InternalHomeVO.java b/server/dmvisit_service/src/main/java/com/doumee/dao/web/response/InternalHomeVO.java
new file mode 100644
index 0000000..fac3cd2
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/web/response/InternalHomeVO.java
@@ -0,0 +1,16 @@
+package com.doumee.dao.web.response;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class InternalHomeVO {
+
+    @ApiModelProperty(value = "涓婚〉鍥剧墖")
+    private String homeImg;
+
+    @ApiModelProperty(value = "寰呭鐞嗕换鍔℃暟閲�")
+    private Integer taskNum;
+
+
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/web/response/MemberVO.java b/server/dmvisit_service/src/main/java/com/doumee/dao/web/response/MemberVO.java
index 9210a48..c849bf6 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/dao/web/response/MemberVO.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/web/response/MemberVO.java
@@ -32,4 +32,9 @@
     @ApiModelProperty(value = "鎵嬫満鍙�")
     private String phone;
 
+    @ApiModelProperty(value = "浜鸿劯鍥剧墖")
+    private String faceImg;
+
+    @ApiModelProperty(value = "鍥剧墖鍓嶇紑")
+    private String prefixUrl;
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/web/response/VisitDetailVO.java b/server/dmvisit_service/src/main/java/com/doumee/dao/web/response/VisitDetailVO.java
index 8395318..d143a99 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/dao/web/response/VisitDetailVO.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/web/response/VisitDetailVO.java
@@ -36,4 +36,29 @@
     @ApiModelProperty(value = "闅忚浜哄憳淇℃伅")
     private List<Visits> withVisitsList;
 
+
+    @ApiModelProperty(value = "澶村儚鍓嶇紑")
+    private String prefix;
+
+    @ApiModelProperty(value = "鏉ヨ浜哄鍚�")
+    private String name;
+
+    @ApiModelProperty(value = "鍋ュ悍璇�")
+    private String imgUrl;
+
+    @ApiModelProperty(value = "浜鸿劯鐓х墖")
+    private String faceImg;
+
+    @ApiModelProperty(value = "璇佷欢鏄剧ず淇℃伅")
+    private String idCardDecode;
+
+    @ApiModelProperty(value = "鏉ヨ浜哄叕鍙�")
+    private String companyName;
+
+    @ApiModelProperty(value = "琚浜洪儴闂�")
+    private String visitUserCompany;
+
+
+
+
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/web/response/VisitRecordVO.java b/server/dmvisit_service/src/main/java/com/doumee/dao/web/response/VisitRecordVO.java
new file mode 100644
index 0000000..1d04a98
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/web/response/VisitRecordVO.java
@@ -0,0 +1,42 @@
+package com.doumee.dao.web.response;
+
+import com.doumee.core.utils.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2024/1/2 9:51
+ */
+@Data
+public class VisitRecordVO {
+
+    @ApiModelProperty(value = "涓婚敭")
+    private Integer id;
+
+    @ApiModelProperty(value = "璁垮濮撳悕")
+    private String name;
+
+    @ApiModelProperty(value = "杩涘巶鏃ユ湡")
+    private String startTime;
+
+    @ApiModelProperty(value = "鍑哄巶鏃ユ湡")
+    private String endTime;
+
+    @ApiModelProperty(value = "鍏ュ巶浜烘暟")
+    private Integer inNum;
+
+    @ApiModelProperty(value = "鏉ヨ浜嬬敱")
+    private String reason;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    private String createDate;
+
+
+
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/web/response/WxAuthorizeVO.java b/server/dmvisit_service/src/main/java/com/doumee/dao/web/response/WxAuthorizeVO.java
index 8126fb4..03ac978 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/dao/web/response/WxAuthorizeVO.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/web/response/WxAuthorizeVO.java
@@ -15,4 +15,7 @@
     @ApiModelProperty(value = "鎺堟潈OPENID")
     private String openid;
 
+    @ApiModelProperty(value = "鐢ㄦ埛token")
+    private String token;
+
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/ApproveParamService.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/ApproveParamService.java
index f966565..8e941d8 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/ApproveParamService.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/ApproveParamService.java
@@ -3,6 +3,8 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.business.model.ApproveParam;
+import com.doumee.dao.system.vo.ApproveParamDataVO;
+
 import java.util.List;
 
 /**
@@ -94,4 +96,11 @@
      * @return long
      */
     long count(ApproveParam approveParam);
+
+
+    /**
+     * 鑾峰彇閰嶇疆淇℃伅
+     * @return
+     */
+    ApproveParamDataVO getApproveParamData();
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java
index f45349b..d773779 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java
@@ -3,6 +3,8 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.business.model.Approve;
+import com.doumee.dao.web.response.InternalHomeVO;
+
 import java.util.List;
 
 /**
@@ -94,4 +96,12 @@
      * @return long
      */
     long count(Approve approve);
+
+
+    /**
+     * 鑾峰彇鍐呴儴浜哄憳棣栭〉鏁版嵁
+     * @param memberId
+     * @return
+     */
+    InternalHomeVO getHomeData(Integer memberId);
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
index 1db293e..b2fed95 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
@@ -9,7 +9,9 @@
 import com.doumee.dao.admin.request.MemberQuery;
 import com.doumee.dao.admin.response.MemberInfoDTO;
 import com.doumee.dao.business.model.Member;
+import com.doumee.dao.web.reqeust.AccountLoginDTO;
 import com.doumee.dao.web.reqeust.CheckVisitedDTO;
+import com.doumee.dao.web.reqeust.VisitMemberDTO;
 import com.doumee.dao.web.response.MemberVO;
 import com.doumee.dao.web.response.WxAuthorizeVO;
 
@@ -178,5 +180,18 @@
     MemberVO getVisitedMember(CheckVisitedDTO checkVisitedDTO);
 
 
+    /**
+     * 璐﹀彿瀵嗙爜
+     * 鍐呴儴浜哄憳/鍔冲姟璁垮鐧诲綍
+     * @param accountLoginDTO
+     * @return
+     */
+    WxAuthorizeVO accountLogin(AccountLoginDTO accountLoginDTO);
 
+    /**
+     * 鍐呴儴鍙嫓璁夸汉鍛樺垎椤�
+     * @param param
+     * @return
+     */
+    PageData<MemberVO> getVisitedMemberList(PageWrap<VisitMemberDTO> param);
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java
index eb754cc..0094acb 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java
@@ -3,7 +3,10 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.business.model.Visits;
+import com.doumee.dao.web.reqeust.AuditApproveDTO;
+import com.doumee.dao.web.reqeust.VisitRecordDTO;
 import com.doumee.dao.web.response.VisitDetailVO;
+import com.doumee.dao.web.response.VisitRecordVO;
 
 import java.util.List;
 
@@ -107,4 +110,18 @@
      * @return
      */
     VisitDetailVO getVisitDetail(Integer id);
+
+    /**
+     * 鍐呴儴浜哄憳 浠诲姟涓績
+     * @param param
+     * @return
+     */
+    PageData<VisitRecordVO> taskCenter(PageWrap<VisitRecordDTO> param);
+
+
+    /**
+     * 璁垮璁板綍瀹℃壒娴佸鎵�
+     * @param auditApproveDTO
+     */
+    void auditApprove(AuditApproveDTO auditApproveDTO);
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveParamServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveParamServiceImpl.java
index 5243313..b87c975 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveParamServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveParamServiceImpl.java
@@ -1,10 +1,14 @@
 package com.doumee.service.business.impl;
 
+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.ApproveParamMapper;
 import com.doumee.dao.business.model.ApproveParam;
+import com.doumee.dao.system.vo.ApproveParamDataVO;
 import com.doumee.service.business.ApproveParamService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -15,6 +19,9 @@
 import org.springframework.util.CollectionUtils;
 
 import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.stream.Collectors;
 
 /**
  * 瀹℃壒妯$増閰嶇疆淇℃伅琛⊿ervice瀹炵幇
@@ -29,9 +36,62 @@
 
     @Override
     public Integer create(ApproveParam approveParam) {
+        this.checkData(approveParam);
         approveParamMapper.insert(approveParam);
         return approveParam.getId();
     }
+
+
+    /**
+     * 楠岃瘉鏁版嵁蹇呭~
+     * @param approveParam
+     */
+    public void checkData(ApproveParam approveParam){
+        if(Objects.isNull(approveParam)
+                ||Objects.isNull(approveParam.getType())
+                ||Objects.isNull(approveParam.getMemberType())
+                ||Objects.isNull(approveParam.getLevel())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        if(approveParam.getType().equals(Constants.ZERO)){
+            if(approveParam.getMemberType().equals(Constants.ONE)
+                    &&
+                    (Objects.isNull(approveParam.getObjIds())||Objects.isNull(approveParam.getObjNames()))
+            ){
+                //鎸囧畾浜哄憳绫诲瀷 鍒ゆ柇鏁版嵁蹇呭~
+                throw new BusinessException(ResponseStatus.BAD_REQUEST);
+            }else if(approveParam.getMemberType().equals(Constants.TWO)
+                    &&
+                    (Objects.isNull(approveParam.getObjLevel())||Objects.isNull(approveParam.getNoleaderOpt()))
+            ){
+                //鎸囧畾閮ㄩ棬涓荤 鍒ゆ柇鏁版嵁蹇呭~
+                throw new BusinessException(ResponseStatus.BAD_REQUEST);
+            }
+        }else{
+            if(Objects.isNull(approveParam.getObjIds())||Objects.isNull(approveParam.getObjNames())){
+                //鎸囧畾浜哄憳绫诲瀷 鍒ゆ柇鏁版嵁蹇呭~
+                throw new BusinessException(ResponseStatus.BAD_REQUEST);
+            }
+        }
+    }
+
+
+    @Override
+    public ApproveParamDataVO getApproveParamData(){
+        ApproveParamDataVO approveParamDataVO = new ApproveParamDataVO();
+        List<ApproveParam> approveParamList = approveParamMapper.selectList(new QueryWrapper<ApproveParam>()
+                .lambda().eq(ApproveParam::getIsdeleted,Constants.ZERO)
+                .orderByAsc(ApproveParam::getLevel)
+        );
+        approveParamDataVO.setAuditApproveList(approveParamList.stream().filter(m->m.getType().equals(Constants.ZERO)).collect(Collectors.toList()));
+        Optional<ApproveParam> paramOptional = approveParamList.stream().filter(m->m.getType().equals(Constants.ONE)).findFirst();
+        if(paramOptional.isPresent()){
+            approveParamDataVO.setCopyForConfig(paramOptional.get());
+        }
+        return approveParamDataVO;
+    }
+
 
     @Override
     public void deleteById(Integer id) {
@@ -54,6 +114,7 @@
 
     @Override
     public void updateById(ApproveParam approveParam) {
+        this.checkData(approveParam);
         approveParamMapper.updateById(approveParam);
     }
 
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
index dc1fcee..12700f4 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
@@ -1,10 +1,13 @@
 package com.doumee.service.business.impl;
 
+import com.doumee.biz.system.SystemDictDataBiz;
 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.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;
@@ -26,6 +29,9 @@
 
     @Autowired
     private ApproveMapper approveMapper;
+
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
 
     @Override
     public Integer create(Approve approve) {
@@ -166,4 +172,24 @@
         QueryWrapper<Approve> wrapper = new QueryWrapper<>(approve);
         return approveMapper.selectCount(wrapper);
     }
+
+
+
+    /**
+     * 鍐呴儴浜哄憳H5椤甸潰棣栭〉
+     * @param memberId
+     * @return
+     */
+    @Override
+    public InternalHomeVO getHomeData(Integer memberId){
+        InternalHomeVO internalHomeVO = new InternalHomeVO();
+        internalHomeVO.setHomeImg(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.HOME_IMAGE).getCode());
+        internalHomeVO.setTaskNum(approveMapper.selectCount(new QueryWrapper<Approve>().lambda().eq(Approve::getChekorId,memberId).eq(Approve::getStatus,Constants.ZERO)));
+        return internalHomeVO;
+    }
+
+
+
+
+
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index c188086..99374b6 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -19,8 +19,10 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.DESUtil;
 import com.doumee.core.utils.HttpsUtil;
 import com.doumee.core.utils.Utils;
+import com.doumee.core.utils.redis.RedisUtil;
 import com.doumee.core.wx.WXConstant;
 import com.doumee.dao.admin.request.LaborEmpowerDTO;
 import com.doumee.dao.admin.request.LaborMemberDTO;
@@ -32,8 +34,12 @@
 import com.doumee.dao.business.model.*;
 import com.doumee.dao.system.model.SystemDictData;
 import com.doumee.dao.system.model.SystemUser;
+import com.doumee.dao.web.reqeust.AccountLoginDTO;
 import com.doumee.dao.web.reqeust.CheckVisitedDTO;
+import com.doumee.dao.web.reqeust.VisitMemberDTO;
+import com.doumee.dao.web.reqeust.VisitRecordDTO;
 import com.doumee.dao.web.response.MemberVO;
+import com.doumee.dao.web.response.VisitRecordVO;
 import com.doumee.dao.web.response.WxAuthorizeVO;
 import com.doumee.service.business.MemberService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -47,6 +53,7 @@
 import org.apache.shiro.SecurityUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -86,6 +93,10 @@
     private SystemDictDataBiz systemDictDataBiz;
     @Autowired
     private UserActionJoinMapper userActionJoinMapper;
+
+    @Autowired
+    private RedisTemplate<String, Object> redisTemplate;
+
 
     @Override
     public Integer create(Member member) {
@@ -799,17 +810,24 @@
         Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
                 .eq(Member::getOpenid,openId)
                 .eq(Member::getIsdeleted,Constants.ZERO)
+                .ne(Member::getType,Constants.memberType.visitor)
         );
-
-
-
+        //闈炶瀹㈢敤鎴� 杩涜鍒ゆ柇鏄惁瀛樺湪鐢ㄦ埛
+        if(Objects.isNull(member)&&!member.getType().equals(Constants.memberType.visitor)){
+            if(member.getIsdeleted() == Constants.ONE){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛宸插垹闄�,璇疯仈绯荤鐞嗗憳");
+            }
+            if(member.getStatus() != Constants.ZERO){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛宸茬鐢�,璇疯仈绯荤鐞嗗憳");
+            }
+            JwtPayLoad payLoad = new JwtPayLoad(Integer.toString(member.getId()));
+            String token = JwtTokenUtil.generateToken(payLoad);
+            //瀛樺偍token鑷硆edis
+            RedisUtil.addObject(redisTemplate,Constants.RedisKeys.INTERNAL_TOKEN+"_"+member.getId(),token,Constants.RedisKeys.EXPIRE_TIME);
+            wxAuthorizeVO.setToken(token);
+        }
         return wxAuthorizeVO;
     }
-
-
-
-
-
 
 
 
@@ -841,7 +859,85 @@
 
 
 
+    @Override
+    public PageData<MemberVO> getVisitedMemberList(PageWrap<VisitMemberDTO> param) {
+        VisitMemberDTO visitMemberDTO = param.getModel();
+        IPage<Member> page = new Page<>(param.getPage(), param.getCapacity());
+        MPJLambdaWrapper<Member> queryWrapper = new MPJLambdaWrapper<>();
+        Utils.MP.blankToNull(visitMemberDTO);
 
+        queryWrapper.selectAs(Member::getId,MemberVO::getId);
+        queryWrapper.selectAs(Member::getName,MemberVO::getName);
+        queryWrapper.selectAs(Member::getPhone,MemberVO::getPhone);
+        queryWrapper.selectAs(Member::getCompanyId,MemberVO::getCompanyId);
+        queryWrapper.selectAs(Member::getFaceImg,MemberVO::getFaceImg);
+
+        queryWrapper.eq(Member::getIsdeleted,Constants.ZERO);
+        queryWrapper.eq(Member::getStatus,Constants.ZERO);
+        queryWrapper.eq(Member::getCanVisit,Constants.ONE);
+        queryWrapper.eq(Member::getType,Constants.memberType.internal);
+        if(!Objects.isNull(visitMemberDTO)){
+            queryWrapper.and(StringUtils.isNotBlank(visitMemberDTO.getName()), ms->ms.like(Member::getPhone,visitMemberDTO.getName())
+                    .or().like(Member::getPhone,visitMemberDTO.getName()));
+        }
+        queryWrapper.orderByDesc(Visits::getCreateDate);
+        IPage<MemberVO> result = memberJoinMapper.selectJoinPage(page, MemberVO.class,queryWrapper);
+
+        String prefixUrl = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode() +
+                systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
+        result.getRecords().forEach(i->{
+            i.setPrefixUrl(prefixUrl);
+        });
+
+        return PageData.from(result);
+    }
+
+
+
+
+    @Override
+    public WxAuthorizeVO accountLogin(AccountLoginDTO accountLoginDTO){
+        if(accountLoginDTO.getAccount().length()!=18
+            //&&!IdcardUtil.isValidCard(accountLoginDTO.getAccount())
+        ){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝韬唤璇佸彿鐮佹湁璇紝璇锋牳瀹炲悗閲嶈瘯锛�");
+        }
+        Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
+                .eq(Member::getIdcardNo, DESUtil.encrypt(Constants.EDS_PWD, accountLoginDTO.getAccount()))
+                .ne(Member::getType,Constants.memberType.visitor)
+        );
+        if(Objects.isNull(member)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈煡璇㈠埌鐢ㄦ埛,璇疯仈绯荤鐞嗗憳");
+        }
+        if(member.getIsdeleted() == Constants.ONE){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛宸插垹闄�,璇疯仈绯荤鐞嗗憳");
+        }
+        if(member.getStatus() != Constants.ZERO){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛宸茬鐢�,璇疯仈绯荤鐞嗗憳");
+        }
+        String md5Password = DESUtil.encrypt(Constants.EDS_PWD, accountLoginDTO.getPassword());
+        if(!md5Password.equals(member.getPassward())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璐︽埛瀵嗙爜閿欒!");
+        }
+        if(StringUtils.isNotBlank(accountLoginDTO.getOpenId())){
+            //鍏堟竻绌哄師鏈夎瀹㈢殑openid缁戝畾鍏崇郴
+            memberMapper.update(null, new UpdateWrapper<Member>().lambda()
+                    .ne(Member::getType,Constants.memberType.visitor)
+                    .eq(Member::getOpenid,accountLoginDTO.getOpenId())
+                    .set(Member::getOpenid,null)
+            );
+            //鏇存柊褰撳墠鐧诲綍鐢ㄦ埛 openId
+            member.setOpenid(accountLoginDTO.getOpenId());
+            memberMapper.updateById(member);
+        }
+        WxAuthorizeVO wxAuthorizeVO = new WxAuthorizeVO();
+        JwtPayLoad payLoad = new JwtPayLoad(Integer.toString(member.getId()));
+        String token = JwtTokenUtil.generateToken(payLoad);
+        //瀛樺偍token鑷硆edis
+        RedisUtil.addObject(redisTemplate,Constants.RedisKeys.INTERNAL_TOKEN+"_"+member.getId(),token,Constants.RedisKeys.EXPIRE_TIME);
+        wxAuthorizeVO.setToken(token);
+        return wxAuthorizeVO;
+    }
 
 
 
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
index e4c3e02..a5f05fa 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
@@ -1,12 +1,15 @@
 package com.doumee.service.business.impl;
 
 import cn.hutool.core.util.IdcardUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.erp.ErpConstants;
 import com.doumee.core.erp.ErpTool;
+import com.doumee.core.erp.model.openapi.request.VisitListRequest;
 import com.doumee.core.erp.model.openapi.request.erp.ApproveAddRequest;
 import com.doumee.core.erp.model.openapi.request.erp.UserInfoRequest;
+import com.doumee.core.erp.model.openapi.response.VisitEventListResponse;
 import com.doumee.core.erp.model.openapi.response.erp.ApproveInfoResponse;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.haikang.model.HKConstants;
@@ -24,14 +27,17 @@
 import com.doumee.core.utils.Utils;
 import com.doumee.core.wx.wxPlat.WxPlatNotice;
 import com.doumee.dao.admin.response.MemberInfoDTO;
-import com.doumee.dao.business.DeviceRoleMapper;
-import com.doumee.dao.business.MemberMapper;
-import com.doumee.dao.business.ProblemLogMapper;
-import com.doumee.dao.business.VisitsMapper;
+import com.doumee.dao.business.*;
 import com.doumee.dao.business.join.DeviceJoinMapper;
+import com.doumee.dao.business.join.VisitEventJoinMapper;
 import com.doumee.dao.business.join.VisitsJoinMapper;
 import com.doumee.dao.business.model.*;
+import com.doumee.dao.web.reqeust.AuditApproveDTO;
+import com.doumee.dao.web.reqeust.VisitRecordDTO;
+import com.doumee.dao.web.response.InternalHomeVO;
 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.VisitsService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -61,6 +67,10 @@
     @Autowired
     private VisitsMapper visitsMapper;
     @Autowired
+    private ApproveMapper approveMapper;
+    @Autowired
+    private ApproveParamMapper approveParamMapper;
+    @Autowired
     private DeviceRoleMapper deviceRoleMapper;
     @Autowired
     private ProblemLogMapper problemLogMapper ;
@@ -68,7 +78,8 @@
     private MemberMapper memberMapper ;
     @Autowired
     private VisitsJoinMapper visitsJoinMapper;
-
+    @Autowired
+    private CompanyMapper companyMapper;
     @Autowired
     private SystemDictDataBiz systemDictDataBiz;
     @Autowired
@@ -125,12 +136,333 @@
         visitsMapper.insert(visits);
         initWithVisitInfo(visits);
         updateProblemLog(visits,problemLog,member);
+        //鍒涘缓瀹℃壒璁板綍
+        createApprove(visits,visitMember);
         //鍙戦�佸井淇″叕浼楀彿閫氱煡
         wxPlatNotice.sendVisitAuditTemplateNotice(visits,
                 systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_PREFIX).getCode(),
                 systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_AUDIT_VISIT).getCode());
+
         return visits.getId();
     }
+
+
+    /**
+     * 鍒涘缓瀹℃壒璁板綍
+     * @param visits
+     * @param visitMember
+     */
+    public void createApprove(Visits visits,Member visitMember){
+        List<Integer> approveIds = new ArrayList<>();
+        ApproveParam approveParam = null;//this.getApproveIds(1,visitMember,approveIds);
+        //鍒涘缓寰呭鎵硅褰�
+        //鑾峰彇瀹℃壒閰嶇疆涓婚敭
+        Integer firstApproveId = this.checkFirstAudit();
+        //鍐呴儴浜哄憳鍒涘缓 涓斿垱寤轰汉涓庤璁块棶浜虹浉鍚�
+        if(!Objects.isNull(visits.getCreateMemberId())//鍐呴儴浜哄憳鍙戝竷
+                &&visits.getCreateMemberId().equals(visitMember.getId())//鍒涘缓浜哄憳涓庤璁块棶浜哄憳鏄惁鏄悓涓�浜�
+                &&!Objects.isNull(firstApproveId)//瀹℃壒閰嶇疆绗竴绾т负 琚闂汉瀹℃壒
+        ){
+            approveParam = this.getApproveIds(2,visitMember,approveIds);
+            Approve approve = new Approve();
+            approve.setCreateDate(new Date());
+            approve.setIsdeleted(Constants.ZERO);
+            approve.setCheckInfo("鑷姩瀹℃壒");
+            approve.setTemplatId(firstApproveId);
+            approve.setIsEndCheck(Constants.ZERO);
+            approve.setType(Constants.ZERO);
+            approve.setLevel(Constants.ONE);
+            approve.setVisitId(visits.getId());
+            approveMapper.insert(approve);
+            if(!CollectionUtils.isNotEmpty(approveIds)){
+                approve.setIsEndCheck(Constants.ONE);
+                visits.setStatus(Constants.TWO);
+                visitsMapper.updateById(visits);
+                //瀛樺偍鎶勯�佽褰�
+                this.saveCopyFor(visits.getId());
+            }
+        }else{
+            approveParam = this.getApproveIds(null,visitMember,approveIds);
+            if(!CollectionUtils.isNotEmpty(approveIds)){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏃犳湁鏁堢殑瀹℃壒閰嶇疆锛岃鑱旂郴绠$悊鍛�");
+            }
+        }
+        if(!Objects.isNull(approveIds)){
+            //鍒涘缓涓嬩竴绾у鎵硅褰�
+            this.saveAuditRecord(visits.getId(),approveIds,approveParam);
+        }
+    }
+
+
+    /**
+     * 瀹℃壒 瀹℃壒璁板綍 鎴栫 瀹℃壒閫氳繃杩涘叆涓嬩竴姝�  浼氱 妫�娴嬫槸鍚︽槸鏈�鍚庝竴鏉″緟瀹℃壒
+     * @param auditApproveDTO
+     */
+    @Override
+    public void auditApprove(AuditApproveDTO auditApproveDTO){
+        Approve approve = approveMapper.selectById(auditApproveDTO.getId());
+        if(Objects.isNull(approve)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(approve.getStatus().equals(Constants.approveStatus.wait)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀹℃壒璁板綍宸插鐞�!");
+        }
+        Visits visits = visitsMapper.selectById(approve.getVisitId());
+        if(Objects.isNull(visits)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(!auditApproveDTO.getMemberId().equals(approve.getChekorId())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"浜哄憳淇℃伅鍖归厤閿欒!");
+        }
+        //琚浜�
+        Member visitMember = memberMapper.selectById(visits.getReceptMemberId());
+        List<Integer> approveIds = new ArrayList<>();
+        ApproveParam approveParam = this.getApproveIds(approve.getLevel()+1,visitMember,approveIds);
+
+        approve.setStatus(auditApproveDTO.getStatus());
+        approve.setEditDate(new Date());
+        approve.setChekorId(auditApproveDTO.getMemberId());
+        approve.setCheckInfo(auditApproveDTO.getCheckInfo());
+        approveMapper.updateById(approve);
+
+        if(auditApproveDTO.getStatus().equals(Constants.approveStatus.pass)){
+            if(approve.getApproveType().equals(Constants.ONE)){
+                //浼氱 鏌ヨ鏄惁鏄渶鍚庝竴鏉¤褰� 濡傛灉鏄渶鍚庝竴鏉¤褰� 鍒欑敓鎴愪笅绾у鎵硅褰� 濡傛灉鏄渶鍚庝竴绾э紝鍒欒繘琛屽鎵圭‘璁�
+                if(approveMapper.selectCount(new QueryWrapper<Approve>().lambda()
+                        .eq(Approve::getVisitId,visits.getId())
+                        .eq(Approve::getLevel,approve.getLevel())
+                        .ne(Approve::getId,approve.getId())
+                )<=Constants.ZERO){
+                    //褰撳墠瀹℃壒绾у埆 鏈�鍚庝竴鏉″緟瀹℃壒璁板綍
+                    if(!CollectionUtils.isNotEmpty(approveIds)){
+                        //娌℃湁涓嬬骇瀹℃壒娴佸垯 淇敼璁垮璁板綍涓婚敭
+                        visits.setStatus(auditApproveDTO.getStatus());
+                        visits.setCheckDate(new Date());
+                        visits.setCheckorId(auditApproveDTO.getMemberId());
+                        visitsMapper.updateById(visits);
+                    }else{
+                        this.saveAuditRecord(visits.getId(),approveIds,approveParam);
+                    }
+                }
+            }else{
+                //鎴栫
+                approveMapper.update(null,new UpdateWrapper<Approve>().lambda()
+                        .set(Approve::getStatus,Constants.approveStatus.otherDeal)
+                        .set(Approve::getEditDate,new Date())
+                        .set(Approve::getCheorId,auditApproveDTO.getMemberId())
+                        .eq(Approve::getVisitId,visits.getId())
+                        .eq(Approve::getStatus,Constants.approveStatus.wait)
+                        .ne(Approve::getId,approve.getId())
+                        .eq(Approve::getLevel,approve.getLevel())
+                );
+
+                if(!CollectionUtils.isNotEmpty(approveIds)){
+                    //娌℃湁涓嬬骇瀹℃壒娴佸垯 淇敼璁垮璁板綍涓婚敭
+                    visits.setStatus(auditApproveDTO.getStatus());
+                    visits.setCheckDate(new Date());
+                    visits.setCheckorId(auditApproveDTO.getMemberId());
+                    visitsMapper.updateById(visits);
+                }else{
+                    this.saveAuditRecord(visits.getId(),approveIds,approveParam);
+                }
+
+            }
+        }else if(auditApproveDTO.getStatus().equals(Constants.approveStatus.unPass)){
+            visits.setStatus(auditApproveDTO.getStatus());
+            visits.setCheckDate(new Date());
+            visits.setCheckorId(auditApproveDTO.getMemberId());
+            visitsMapper.updateById(visits);
+
+            approveMapper.update(null,new UpdateWrapper<Approve>().lambda()
+                    .set(Approve::getStatus,Constants.approveStatus.otherDeal)
+                    .set(Approve::getEditDate,new Date())
+                    .set(Approve::getCheorId,auditApproveDTO.getMemberId())
+                    .eq(Approve::getVisitId,visits.getId())
+                    .eq(Approve::getStatus,Constants.approveStatus.wait)
+                    .ne(Approve::getId,approve.getId())
+                    .eq(Approve::getLevel,approve.getLevel())
+            );
+
+        }else{
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀹℃壒鐘舵�侀敊璇�!");
+        }
+    }
+
+
+
+
+    /**
+     * 瀛樺偍鎶勯�佽褰�
+     * @param visitId
+     */
+    public void  saveCopyFor(Integer visitId){
+        ApproveParam approveParam = approveParamMapper.selectOne(new QueryWrapper<ApproveParam>().lambda()
+                .eq(ApproveParam::getIsdeleted,Constants.ZERO)
+                .eq(ApproveParam::getType,Constants.ONE)
+                .eq(ApproveParam::getLevel,Constants.ONE)
+                .last("limit 1"));
+        if(Objects.isNull(approveParam)){
+            return;
+        }
+        if(StringUtils.isNotBlank(approveParam.getObjIds())){
+            String [] ids = approveParam.getObjIds().split(",");
+            List<Approve> approveList = new ArrayList<>();
+            for (String id:ids) {
+                Approve approve = new Approve();
+                approve.setCreateDate(new Date());
+                approve.setIsdeleted(Constants.ZERO);
+                approve.setCheckInfo("鎶勯�佽褰�");
+                approve.setTemplatId(approveParam.getId());
+                approve.setChekorId(Integer.valueOf(id));
+                approve.setType(Constants.ONE);
+                approve.setVisitId(visitId);
+                approveList.add(approve);
+            }
+            approveMapper.insertBatchSomeColumn(approveList);
+        }
+    }
+
+    /**
+     * 瀛樺偍涓嬬骇瀹℃壒璁板綍
+     * @param visitId
+     * @param ids
+     * @param approveParam
+     */
+    public void  saveAuditRecord(Integer visitId,List<Integer> ids,ApproveParam approveParam){
+        if(CollectionUtils.isNotEmpty(ids)) {
+            List<Approve> approveList = new ArrayList<>();
+            for (Integer id:ids) {
+                Approve approve = new Approve();
+                approve.setCreateDate(new Date());
+                approve.setIsdeleted(Constants.ZERO);
+                approve.setStatus(Constants.ZERO);
+                approve.setCheckInfo("鎶勯�佽褰�");
+                approve.setTemplatId(approveParam.getId());
+                approve.setLevel(approveParam.getLevel());
+                approve.setApproveType(approveParam.getApproveType());
+                approve.setChekorId(id);
+                approve.setType(Constants.ONE);
+                approve.setVisitId(visitId);
+                approveList.add(approve);
+            }
+            approveMapper.insertBatchSomeColumn(approveList);
+        }
+    }
+
+    /**
+     * 鍒ゆ柇涓�绾у鎵逛汉鏄惁鏄垱寤轰汉
+     * @return
+     */
+    public Integer checkFirstAudit(){
+        ApproveParam approveParam = approveParamMapper.selectOne(new QueryWrapper<ApproveParam>().lambda()
+                .eq(ApproveParam::getIsdeleted,Constants.ZERO)
+                .eq(ApproveParam::getType,Constants.ZERO)
+                .eq(ApproveParam::getLevel,Constants.ONE)
+                .eq(ApproveParam::getMemberType,Constants.ZERO)
+                .last("limit 1"));
+         return  Objects.isNull(approveParam)?null:approveParam.getId();
+
+    }
+
+
+    /**
+     * 鍒涘缓瀹℃壒浜哄憳淇℃伅 鑻ヨ繑鍥炲緟瀹℃壒浜哄憳涓婚敭鍒楄〃涓虹┖锛屽垯鏃犲鎵逛汉鍛� 鎶涘嚭瀵瑰簲寮傚父
+     * @param level   澶勭悊绾у埆
+     * @param visitMember 琚浜�
+     */
+    public ApproveParam getApproveIds(Integer level,Member visitMember,List<Integer> ids){
+        //鏌ヨ瀹℃壒閰嶇疆椤�
+        List<ApproveParam> allParam = approveParamMapper.selectList(new QueryWrapper<ApproveParam>().lambda()
+                .eq(ApproveParam::getIsdeleted,Constants.ZERO)
+                .eq(ApproveParam::getType,Constants.ZERO)
+                .ge(!Objects.isNull(level),ApproveParam::getLevel,level)
+                .orderByAsc(ApproveParam::getLevel));
+        ApproveParam approveParam = new ApproveParam();
+        //鍙戦�佸鎵�/鎶勯�佽褰曠殑鐢ㄦ埛涓婚敭闆嗗悎
+        ids.clear();
+        if(Objects.isNull(allParam)){
+            if(Objects.isNull(level)){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈厤缃瀹㈣褰曞鎵规祦锛岃鑱旂郴绠$悊鍛�");
+            }
+        }else{
+             approveParam = allParam.get(0);
+            if(approveParam.getMemberType().equals(Constants.ZERO)){
+                //琚浜哄鎵�
+                //娣诲姞瀹℃壒浜�
+                ids.add(visitMember.getId());
+            }else if(approveParam.getMemberType().equals(Constants.ONE)){
+                //鎸囧畾浜哄憳瀹℃壒
+                String [] objIds = approveParam.getObjIds().split(",");
+                for (String id:objIds) {
+                    //娣诲姞瀹℃壒浜�
+                    ids.add(Integer.valueOf(id));
+                }
+            }else if(approveParam.getMemberType().equals(Constants.TWO)){
+                //閮ㄩ棬涓荤瀹℃壒
+                //瀹℃壒閮ㄩ棬
+                Company auditCompany = this.getAuditCompanyHead(visitMember.getCompanyId(),approveParam.getObjLevel());
+                if(Objects.isNull(auditCompany)){
+                    //瀹℃壒閮ㄩ棬涓虹┖ 鑷姩娴佽浆涓嬩竴绾у鎵归厤缃�
+                    level = level + 1;
+                    return this.getApproveIds(level,visitMember,ids);
+                }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)){
+                                //瀹℃壒閮ㄩ棬涓虹┖ 鑷姩娴佽浆涓嬩竴绾у鎵归厤缃�
+                                level = level + 1;
+                                this.getApproveIds(level,visitMember,ids);
+                            }else{
+                                headMember = memberMapper.selectById(auditCompany.getHeadId());
+                                if(Objects.isNull(headMember)){
+                                    //鏌ヨ閮ㄩ棬璐熻矗浜� 涓虹┖ 鑷姩娴佽浆涓嬩竴绾у鎵归厤缃�
+                                    level = level + 1;
+                                    return this.getApproveIds(level,visitMember,ids);
+                                }else{
+                                    //娣诲姞瀹℃壒浜�
+                                    ids.add(headMember.getId());
+                                }
+                            }
+                        }else{
+                            level = level + 1;
+                            return this.getApproveIds(level,visitMember,ids);
+                        }
+                    }else{
+                        //娣诲姞瀹℃壒浜�
+                        ids.add(headMember.getId());
+                    }
+
+                }
+            }
+        }
+
+        return approveParam;
+    }
+
+    /**
+     * 鏍规嵁閰嶇疆鏌ヨ涓婄骇鏁版嵁
+     * @param companyId 鐩存帴閮ㄩ棬
+     * @param objLevel  鏌ヨ绾у埆
+     */
+    public Company getAuditCompanyHead(Integer companyId,Integer objLevel){
+        Integer queryLevel = Constants.ONE;
+        Integer nextCompanyId = companyId;
+        Company auditCompany = new Company();
+        while(queryLevel.equals(objLevel)){
+            auditCompany = companyMapper.selectById(nextCompanyId);
+            if(Objects.isNull(auditCompany)){
+                return null;
+            }
+            nextCompanyId = auditCompany.getParentId();
+        }
+        return auditCompany;
+    }
+
 
     /**
      * 鏍¢獙蹇呭~椤规暟鎹槸鍚﹀悎娉�
@@ -692,6 +1024,18 @@
         visitDetailVO.setVisitUserName(member.getName());
         visitDetailVO.setVisitReason(visits.getReason());
         visitDetailVO.setVisitTime(DateUtil.DateToStr(visits.getStarttime(),"yyyy-MM-dd HH:mm") + " 鑷� " + DateUtil.DateToStr(visits.getEndtime(),"yyyy-MM-dd HH:mm") );
+        //琚浜哄憳閮ㄩ棬
+        Company company = companyMapper.selectById(member.getCompanyId());
+        if(!Objects.isNull(company)){
+            visitDetailVO.setVisitUserCompany(company.getName());
+        }
+        visitDetailVO.setName(visits.getName());
+            visitDetailVO.setCompanyName(visits.getCompanyName());
+            visitDetailVO.setFaceImg(visits.getFaceImg());
+            visitDetailVO.setImgUrl(visits.getImgurl());
+            visitDetailVO.setIdCardDecode(visits.getIdcardDecode());
+            visitDetailVO.setPrefix(systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode() +
+                    systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode());
         if(StringUtils.isNotBlank(visits.getDoors())){
             List<DeviceRole> deviceRoleList = deviceRoleMapper.selectList(new QueryWrapper<DeviceRole>().lambda()
                             .select(DeviceRole::getName)
@@ -703,8 +1047,9 @@
                 );
             }
         }
-        visitDetailVO.setWithVisitsList(visitsMapper.selectList(new QueryWrapper<Visits>().lambda()
-                .select(Visits::getName,Visits::getPhone)
+        visitDetailVO.setWithVisitsList(
+                visitsMapper.selectList(new QueryWrapper<Visits>().lambda()
+                .select(Visits::getName,Visits::getPhone,Visits::getFaceImg,Visits::getImgurl,Visits::getIdcardDecode)
                 .eq(Visits::getParentId,id)));
         return visitDetailVO;
     }
@@ -712,5 +1057,39 @@
 
 
 
+    @Override
+    public PageData<VisitRecordVO> taskCenter(PageWrap<VisitRecordDTO> param) {
+        VisitRecordDTO visitRecordDTO = param.getModel();
+        IPage<Visits> page = new Page<>(param.getPage(), param.getCapacity());
+        MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>();
+        Utils.MP.blankToNull(visitRecordDTO);
+
+        queryWrapper.selectAs(Visits::getId,VisitRecordVO::getId);
+        queryWrapper.selectAs(Visits::getName,VisitRecordVO::getName);
+        queryWrapper.selectAs(Visits::getStarttime,VisitRecordVO::getStartTime);
+        queryWrapper.selectAs(Visits::getEndtime,VisitRecordVO::getEndTime);
+        queryWrapper.selectAs(Visits::getReason,VisitRecordVO::getReason);
+        queryWrapper.selectAs(Visits::getMemberNum,VisitRecordVO::getInNum);
+        queryWrapper.selectAs(Visits::getCreateDate,VisitRecordVO::getCreateDate);
+        queryWrapper.leftJoin(Approve.class,Approve::getId,Visits::getId);
+        if(!Objects.isNull(visitRecordDTO)){
+            queryWrapper.like(StringUtils.isNotBlank(visitRecordDTO.getName()),Visits::getName,visitRecordDTO.getName());
+            queryWrapper.le(!Objects.isNull(visitRecordDTO.getCreateTimeS()),Visits::getCreateDate,visitRecordDTO.getCreateTimeS());
+            queryWrapper.ge(!Objects.isNull(visitRecordDTO.getCreateTimeE()),Visits::getCreateDate,visitRecordDTO.getCreateTimeE());
+            queryWrapper.eq(!Objects.isNull(visitRecordDTO.getType()),Visits::getType,visitRecordDTO.getType());
+            if(!Objects.isNull(visitRecordDTO.getState())&&visitRecordDTO.getState()<Constants.TWO){
+                queryWrapper.eq(Approve::getStatus,visitRecordDTO.getState());
+                queryWrapper.eq(Approve::getChekorId,visitRecordDTO.getMemberId());
+            }else if(!Objects.isNull(visitRecordDTO.getState())&&visitRecordDTO.getState()==Constants.TWO){
+                queryWrapper.eq(Visits::getMemberId,visitRecordDTO.getMemberId());
+            }
+        }
+        queryWrapper.orderByDesc(Visits::getCreateDate);
+        IPage<VisitRecordVO> result = visitsJoinMapper.selectJoinPage(page, VisitRecordVO.class,queryWrapper);
+
+        return PageData.from(result);
+    }
+
+
 
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java
index 5a7f8e4..1db1024 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java
@@ -222,13 +222,16 @@
      */
     private Company getAddCompanyModel(ErpOrgListResponse respone, Date date) {
         Company    company = new Company();
+        company.setStatus(respone.getStatus());
         company.setIsdeleted(Constants.ZERO);
         company.setName(respone.getName());
         company.setErpId(respone.getId());
         company.setCreateDate(date);
         company.setType(Constants.ONE);
         company.setCode(respone.getCode());
-        company.setErpParentId(respone.getParentOrgId());
+        if(StringUtils.isNotBlank(respone.getParentOrgId())&&!respone.getParentOrgId().equals("orgRoot")){
+            company.setErpParentId(respone.getParentOrgId());
+        }
         company.setErpDate(date);
         company.setHkStatus(Constants.ZERO);
         return  company;
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/common/tree/CompanyTree.java b/server/dmvisit_service/src/main/java/com/doumee/service/common/tree/CompanyTree.java
index 7319cd1..cd09625 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/common/tree/CompanyTree.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/common/tree/CompanyTree.java
@@ -46,7 +46,7 @@
                     rootNodeList.add(treeNode);
                 }
             }else{
-                if (Objects.isNull(treeNode.getErpId())) {
+                if (Objects.isNull(treeNode.getErpParentId())) {
                     // 鏄紝娣诲姞
                     rootNodeList.add(treeNode);
                 }
diff --git a/server/dmvisit_web/src/main/java/com/doumee/api/web/ApiController.java b/server/dmvisit_web/src/main/java/com/doumee/api/web/ApiController.java
index 6f33b73..7df9d3e 100644
--- a/server/dmvisit_web/src/main/java/com/doumee/api/web/ApiController.java
+++ b/server/dmvisit_web/src/main/java/com/doumee/api/web/ApiController.java
@@ -2,6 +2,7 @@
 
 import com.doumee.config.Jwt.JwtTokenUtil;
 import com.doumee.core.model.PageData;
+import com.doumee.dao.business.model.Member;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
@@ -34,7 +35,15 @@
      */
     protected Integer getMemberId() {
         Object obj = this.getRequest().getAttribute(JwtTokenUtil.UserId_Name);
-        return obj != null ? (Integer) obj : null;
+        return obj != null ? Integer.valueOf( obj.toString() ): null;
     }
-
+    /**
+     * 鑾峰彇鐢ㄦ埛
+     *
+     * @return
+     */
+    protected Member getMember() {
+        Member member = (Member) this.getRequest().getAttribute(JwtTokenUtil.MEMBER);
+        return member != null ? member : null;
+    }
 }
diff --git a/server/dmvisit_web/src/main/java/com/doumee/api/web/InternalController.java b/server/dmvisit_web/src/main/java/com/doumee/api/web/InternalController.java
new file mode 100644
index 0000000..6736f29
--- /dev/null
+++ b/server/dmvisit_web/src/main/java/com/doumee/api/web/InternalController.java
@@ -0,0 +1,125 @@
+package com.doumee.api.web;
+
+import com.alibaba.fastjson.JSONObject;
+import com.doumee.config.annotation.LoginRequired;
+import com.doumee.core.annotation.trace.Trace;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.Visits;
+import com.doumee.dao.web.reqeust.AccountLoginDTO;
+import com.doumee.dao.web.reqeust.AuditApproveDTO;
+import com.doumee.dao.web.reqeust.VisitMemberDTO;
+import com.doumee.dao.web.reqeust.VisitRecordDTO;
+import com.doumee.dao.web.response.*;
+import com.doumee.service.business.ApproveService;
+import com.doumee.service.business.MemberService;
+import com.doumee.service.business.VisitsService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/12/28 14:31
+ */
+
+@Api(tags = "3銆佸唴閮ㄥ姵鍔′汉鍛�")
+@Trace(exclude = true)
+@RestController
+@RequestMapping("/web/internal")
+@Slf4j
+public class InternalController extends ApiController{
+
+    @Autowired
+    private MemberService memberService;
+
+    @Autowired
+    private VisitsService visitsService;
+
+    @Autowired
+    private ApproveService approveService;
+
+    @ApiOperation(value = "浜哄憳鐧诲綍", notes = "H5")
+    @PostMapping("/accountLogin")
+    public ApiResponse<WxAuthorizeVO> accountLogin(@RequestBody AccountLoginDTO accountLoginDTO) {
+        WxAuthorizeVO wxAuthorizeVO = memberService.accountLogin(accountLoginDTO);
+        return ApiResponse.success("鐧诲綍鎴愬姛",wxAuthorizeVO);
+    }
+
+    @LoginRequired
+    @ApiOperation(value = "鍐呴儴浜哄憳棣栭〉", notes = "H5")
+    @GetMapping("/internalHome")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse<InternalHomeVO> internalHome() {
+        return ApiResponse.success("鏌ヨ鎴愬姛",approveService.getHomeData(getMemberId()));
+    }
+
+
+    @LoginRequired
+    @ApiOperation("浠诲姟涓績")
+    @PostMapping("/taskCenter")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse<PageData<VisitRecordVO>> taskCenter (@RequestBody PageWrap<VisitRecordDTO> pageWrap) {
+        pageWrap.getModel().setMemberId(getMemberId());
+        return ApiResponse.success(visitsService.taskCenter(pageWrap));
+    }
+
+    @LoginRequired
+    @ApiOperation("璁垮璁板綍璇︽儏")
+    @GetMapping("/visitDetail")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "id", value = "璁板綍涓婚敭", required = true)
+    })
+    public ApiResponse<VisitDetailVO> visitDetail (@RequestParam Integer id) {
+        return ApiResponse.success(visitsService.getVisitDetail(id));
+    }
+
+
+    @LoginRequired
+    @ApiOperation(value = "浜哄憳鍒嗛〉",notes = "鍙嫓璁垮唴閮ㄤ汉鍛�")
+    @PostMapping("/memberList")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse<PageData<MemberVO>> memberList (@RequestBody PageWrap<VisitMemberDTO> pageWrap) {
+        return ApiResponse.success(memberService.getVisitedMemberList(pageWrap));
+    }
+
+    @LoginRequired
+    @ApiOperation(value = "璁垮璁板綍鎻愪氦", notes = "鍐呴儴浜哄憳鎻愪氦")
+    @PostMapping("/createVisit")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse createVisit(@RequestBody Visits visits) {
+        visits.setCreateMemberId(getMemberId());
+        return ApiResponse.success("鏌ヨ鎴愬姛", visitsService.createFk(visits));
+    }
+
+    @LoginRequired
+    @ApiOperation(value = "瀹℃壒娴佽褰曞鎵�", notes = "鍐呴儴浜哄憳")
+    @PostMapping("/auditApprove")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse auditApprove(@RequestBody AuditApproveDTO auditApproveDTO) {
+        visitsService.auditApprove(auditApproveDTO);
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+}
diff --git a/server/dmvisit_web/src/main/java/com/doumee/api/web/VisitorController.java b/server/dmvisit_web/src/main/java/com/doumee/api/web/VisitorController.java
index 4182942..970d608 100644
--- a/server/dmvisit_web/src/main/java/com/doumee/api/web/VisitorController.java
+++ b/server/dmvisit_web/src/main/java/com/doumee/api/web/VisitorController.java
@@ -60,7 +60,7 @@
     }
 
 
-    @ApiOperation(value = "璁垮璁板綍鎻愪氦", notes = "璁垮璁板綍鎻愪氦")
+    @ApiOperation(value = "璁垮璁板綍鎻愪氦", notes = "璁垮鎻愪氦")
     @PostMapping("/createFk")
     public ApiResponse createFk(@RequestBody Visits visits) {
         return ApiResponse.success("鏌ヨ鎴愬姛", visitsService.createFk(visits));

--
Gitblit v1.9.3