From 3fd5e7962120c530d145b2d0571cd208d8720563 Mon Sep 17 00:00:00 2001
From: nidapeng <jp@doumee.com>
Date: 星期四, 07 三月 2024 17:55:59 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 server/dmvisit_web/src/main/java/com/doumee/api/ScheduleTool.java                                        |    1 
 server/dmvisit_admin/src/main/java/com/doumee/api/business/MemberCardController.java                     |   16 +-
 server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Retention.java                        |    2 
 server/dmvisit_service/src/main/java/com/doumee/service/system/impl/SystemDictDataServiceImpl.java       |   11 +
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java             |   15 ++
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java        |  168 ++++++++++++++-------------
 server/dmvisit_web/src/main/java/com/doumee/api/web/PublicController.java                                |    1 
 server/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatNotice.java                         |    2 
 server/dmvisit_service/src/main/java/com/doumee/core/utils/DateUtil.java                                 |   13 ++
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceRoleServiceImpl.java         |   15 +
 server/dmvisit_service/src/main/java/com/doumee/dao/admin/request/VisitConfigDTO.java                    |    5 
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/EmpowerServiceImpl.java            |    4 
 server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Empower.java                          |    4 
 server/dmvisit_admin/src/main/java/com/doumee/api/business/MemberController.java                         |   11 +
 server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java                           |    6 +
 server/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java                      |    2 
 server/dmvisit_service/src/main/java/com/doumee/service/common/tree/CompanyTree.java                     |    4 
 server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/MemberInfoDTO.java                    |    2 
 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                               |    1 
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberCardServiceImpl.java         |    5 
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java             |   40 +++++
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java |    7 +
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/RetentionServiceImpl.java          |    2 
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncParkServiceImpl.java  |    5 
 25 files changed, 235 insertions(+), 110 deletions(-)

diff --git a/server/dmvisit_admin/src/main/java/com/doumee/api/business/MemberCardController.java b/server/dmvisit_admin/src/main/java/com/doumee/api/business/MemberCardController.java
index b075d7d..b4ccc8d 100644
--- a/server/dmvisit_admin/src/main/java/com/doumee/api/business/MemberCardController.java
+++ b/server/dmvisit_admin/src/main/java/com/doumee/api/business/MemberCardController.java
@@ -33,14 +33,14 @@
     @PreventRepeat
     @ApiOperation("鏂板缓")
     @PostMapping("/create")
-    //@RequiresPermissions("business:membercard:create")
+    @RequiresPermissions("business:membercard:create")
     public ApiResponse create(@RequestBody MemberCard memberCard) {
         return ApiResponse.success(memberCardService.create(memberCard));
     }
 
     @ApiOperation("鏍规嵁ID鍒犻櫎")
     @GetMapping("/delete/{id}")
-    //@RequiresPermissions("business:membercard:delete")
+    @RequiresPermissions("business:membercard:delete")
     public ApiResponse deleteById(@PathVariable Integer id) {
         memberCardService.deleteById(id);
         return ApiResponse.success(null);
@@ -48,7 +48,7 @@
 
     @ApiOperation("鎵归噺鍒犻櫎")
     @GetMapping("/delete/batch")
-    //@RequiresPermissions("business:membercard:delete")
+    @RequiresPermissions("business:membercard:delete")
     public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
         String [] idArray = ids.split(",");
         List<Integer> idList = new ArrayList<>();
@@ -61,7 +61,7 @@
 
     @ApiOperation("鏍规嵁ID淇敼")
     @PostMapping("/updateById")
-    //@RequiresPermissions("business:membercard:update")
+    @RequiresPermissions("business:membercard:update")
     public ApiResponse updateById(@RequestBody MemberCard memberCard) {
         memberCardService.updateById(memberCard);
         return ApiResponse.success(null);
@@ -69,7 +69,7 @@
 
     @ApiOperation("鎸傚け鎿嶄綔")
     @PostMapping("/batchLoss")
-    //@RequiresPermissions("business:membercard:update")
+    @RequiresPermissions("business:membercard:update")
     public ApiResponse batchLoss(@RequestBody List<MemberCard> memberCards) {
         memberCardService.updateByIdInBatch(memberCards,0);
         return ApiResponse.success(null);
@@ -77,7 +77,7 @@
 
     @ApiOperation("瑙f寕鎿嶄綔")
     @PostMapping("/batchUnLoss")
-    //@RequiresPermissions("business:membercard:update")
+    @RequiresPermissions("business:membercard:update")
     public ApiResponse batchUnLoss(@RequestBody List<MemberCard> memberCards) {
         memberCardService.updateByIdInBatch(memberCards,1);
         return ApiResponse.success(null);
@@ -85,7 +85,7 @@
 
     @ApiOperation("閫�鍗℃搷浣�")
     @PostMapping("/refundCard")
-    //@RequiresPermissions("business:membercard:update")
+    @RequiresPermissions("business:membercard:update")
     public ApiResponse refundCard(@RequestBody MemberCard memberCard) {
         memberCardService.updateRefundCard(memberCard);
         return ApiResponse.success(null);
@@ -93,7 +93,7 @@
 
     @ApiOperation("鍒嗛〉鏌ヨ")
     @PostMapping("/page")
-    //@RequiresPermissions("business:membercard:query")
+    @RequiresPermissions("business:membercard:query")
     public ApiResponse<PageData<MemberCard>> findPage (@RequestBody PageWrap<MemberCard> pageWrap) {
         return ApiResponse.success(memberCardService.findPage(pageWrap));
     }
diff --git a/server/dmvisit_admin/src/main/java/com/doumee/api/business/MemberController.java b/server/dmvisit_admin/src/main/java/com/doumee/api/business/MemberController.java
index 9311b3f..f514f8d 100644
--- a/server/dmvisit_admin/src/main/java/com/doumee/api/business/MemberController.java
+++ b/server/dmvisit_admin/src/main/java/com/doumee/api/business/MemberController.java
@@ -80,6 +80,15 @@
         return ApiResponse.success(null);
     }
 
+    @ApiOperation("鍛樺伐鏉冮檺涓嬪彂")
+    @GetMapping("/roleAuth/{id}")
+    @RequiresPermissions("business:empower:create")
+    public ApiResponse roleAuthById(@PathVariable Integer id) {
+        memberService.roleAuthById(id);
+        return ApiResponse.success(null);
+    }
+
+
     @ApiOperation("鏍规嵁ID淇敼")
     @PostMapping("/updateById")
     @RequiresPermissions("business:member:update")
@@ -183,6 +192,8 @@
     }
 
 
+
+
     /**
      *
      * 鍒嗛〉鏌ヨ鍐呴儴浜哄憳淇℃伅
diff --git a/server/dmvisit_service/src/main/java/com/doumee/core/utils/DateUtil.java b/server/dmvisit_service/src/main/java/com/doumee/core/utils/DateUtil.java
index 2cf79ff..274ec82 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/core/utils/DateUtil.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/core/utils/DateUtil.java
@@ -439,6 +439,19 @@
         }
         return "";
     }
+
+    public static String getShortTimeToNull(Date date) {
+
+        if (date == null)
+            return null;
+        try {
+            String nowDate = sdfLong.format(date);
+            return nowDate;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return "";
+    }
     /**
      * Descrption:鍙栧緱褰撳墠鏃ユ湡,鏍煎紡涓�:yyyy-MM-dd HH:mm:ss
      *
diff --git a/server/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatNotice.java b/server/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatNotice.java
index 38a982a..57febaf 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatNotice.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatNotice.java
@@ -38,7 +38,7 @@
         WxMpTemplateMessage templateMessage =  WxMpTemplateMessage.builder()
                 .toUser(visits.getOpenid())
                 .templateId(tempId)
-                .url(prefix + "pages/appointmentDetails/appointmentDetails?id="+visits.getId())
+                .url(prefix + visits.getId())
                 .build();
         String thing1 = "寰呭鎵�";
         if(visits.getStatus()==2){
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/admin/request/VisitConfigDTO.java b/server/dmvisit_service/src/main/java/com/doumee/dao/admin/request/VisitConfigDTO.java
index f26310a..15cd76b 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/dao/admin/request/VisitConfigDTO.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/admin/request/VisitConfigDTO.java
@@ -38,4 +38,9 @@
 
     @ApiModelProperty(value = "鍏ュ巶椤荤煡")
     private String visitNotice;
+
+    @ApiModelProperty(value = "鑷�夐棬绂侀厤缃�")
+    private Integer doorsVisitRequired;
+
+
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/MemberInfoDTO.java b/server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/MemberInfoDTO.java
index 284d522..7d74f1b 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/MemberInfoDTO.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/admin/response/MemberInfoDTO.java
@@ -36,7 +36,7 @@
     @ApiModelProperty(value = "鍏徃鍚嶇О")
     private String companyName;
 
-    @ApiModelProperty(value = "娴峰悍鐘舵�� 0寰呬笅鍙� 1鎴愬姛2澶辫触")
+    @ApiModelProperty(value = "娴峰悍鍚屾鐘舵�� 0鏈悓姝� 1宸插悓姝� 2鍚屾澶辫触 3涓嶇鍚堜笅鍙戞潯浠� 4绛夊緟鍒犻櫎鏉冮檺  ", example = "1")
     private Integer hkStatus;
 
     @ApiModelProperty(value = "鍏徃璐熻矗浜�")
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Empower.java b/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Empower.java
index 1c958a1..3f3f823 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Empower.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Empower.java
@@ -71,6 +71,10 @@
     @ApiModelProperty(value = "鍙栨秷澶囨敞")
     private String cancelInfo;
 
+    @ApiModelProperty(value = "璁惧鍚嶇О")
+    @TableField(exist = false)
+    private String deviceName;
+
     @ApiModelProperty(value = "鎵�灞炲叕鍙哥紪鐮�")
     @TableField(exist = false)
     private String companyId;
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java b/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
index 72ce6e7..1ac0a30 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
@@ -99,9 +99,11 @@
     @ApiModelProperty(value = "璇佷欢鏄剧ず淇℃伅")
     @ExcelColumn(name="璇佷欢鏄剧ず淇℃伅")
     private String idcardDecode;
+
     @ApiModelProperty(value = "璇佷欢绫诲瀷 0韬唤璇� 1娓境璇佷欢 2鎶ょ収", example = "1")
     @ExcelColumn(name="璇佷欢绫诲瀷 0韬唤璇� 1娓境璇佷欢 2鎶ょ収")
     private Integer idcardType;
+
     @ApiModelProperty(value = "宸ュ彿")
     @ExcelColumn(name="宸ュ彿")
     private String code;
@@ -215,6 +217,10 @@
     @TableField(exist = false)
     private String roleIdParam;
 
+    @ApiModelProperty(value = "鍓嶇紑鍦板潃")
+    @TableField(exist = false)
+    private String prefixUrl;
+
     @ApiModelProperty(value = "鎺堟潈闂ㄧ缁勭紪鐮侀泦鍚�,銆愯瀹㈢銆戝敮涓�鏍囪瘑",hidden = true )
     @TableField(exist = false)
     private Integer[] roleIds;
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Retention.java b/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Retention.java
index 46533db..56d1cc0 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Retention.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/business/model/Retention.java
@@ -112,6 +112,8 @@
     @TableField(exist = false)
     public String visitCompanyName;
 
+    @ApiModelProperty(value = "鏌ヨ绫诲瀷 0鍔冲姟璁垮 1鏅�氳瀹� 2鍐呴儴鍛樺伐 3杞﹁締淇℃伅 澶氫釜浠�,鍒嗗壊")
+    private String queryType;
 
     @ApiModelProperty(value = "濮撳悕/鎵嬫満鍙�")
     @TableField(exist = false)
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 03ac978..8256ca2 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
@@ -1,5 +1,6 @@
 package com.doumee.dao.web.response;
 
+import com.doumee.dao.business.model.Member;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -18,4 +19,6 @@
     @ApiModelProperty(value = "鐢ㄦ埛token")
     private String token;
 
+    @ApiModelProperty(value = "鐢ㄦ埛淇℃伅")
+    private Member member;
 }
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 a329b1d..ae0dfc7 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
@@ -46,6 +46,8 @@
      */
     void deleteById(Integer id);
 
+    void roleAuthById(Integer id);
+
     /**
      * 鍒犻櫎
      *
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceRoleServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceRoleServiceImpl.java
index 406c8c9..7899ef0 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceRoleServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceRoleServiceImpl.java
@@ -52,14 +52,20 @@
 
     @Override
     public Integer create(DeviceRole deviceRole) {
-
+        if(Objects.isNull(deviceRole)
+            || StringUtils.isBlank(deviceRole.getName())
+            || Objects.isNull(deviceRole.getType())
+            || Objects.isNull(deviceRole.getIsDefault())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
         // 鑾峰彇涔嬪墠鏄惁瀛樺湪榛樿闂ㄧ缁�
         DeviceRole newDeviceRole = null;
         if(null != deviceRole.getType()) {
             newDeviceRole = getDeviceRole(deviceRole.getType());
         }
         LoginUserInfo loginUserInfo = (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
-        if(null != newDeviceRole) {
+        if(null != newDeviceRole && deviceRole.getIsDefault().equals(Constants.ZERO)) {
             DeviceRole updateDeviceRole = new DeviceRole();
             // 鑻ョ幇鍦ㄦ柊澧炴暟鎹缃粯璁ら棬绂佺粍锛涢偅涔堝厛鎶婁箣鍓嶇殑榛樿闂ㄧ缁勭姸鎬佹敼涓轰笉鏄粯璁ょ殑
             updateDeviceRole.setId(newDeviceRole.getId());
@@ -117,7 +123,7 @@
             newDeviceRole = getDeviceRole(deviceRole.getType());
         }
         LoginUserInfo loginUserInfo = (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
-        if(null != newDeviceRole) {
+        if(null != newDeviceRole  && deviceRole.getIsDefault().equals(Constants.ZERO)) {
             DeviceRole update = new DeviceRole();
             update.setEdirot(loginUserInfo.getId().toString());
             update.setEditDate(new Date());
@@ -163,7 +169,8 @@
         LambdaQueryWrapper<DeviceRole> query = new LambdaQueryWrapper<>();
         query.eq(DeviceRole::getIsdeleted,Constants.ZERO)
                 .eq(DeviceRole::getIsDefault,Constants.ZERO)
-                .eq(DeviceRole::getType,type);
+                .eq(DeviceRole::getType,type)
+                .last(" limit 1");
         // 鏌ヨ鏄惁鏈夐粯璁ら棬绂佺粍锛屽彧鑳芥湁涓�缁勯粯璁ら棬绂佺粍
         DeviceRole getDeviceRole = deviceRoleMapper.selectOne(query);
         return getDeviceRole;
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/EmpowerServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/EmpowerServiceImpl.java
index 1fd3fbf..646d48d 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/EmpowerServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/EmpowerServiceImpl.java
@@ -9,6 +9,7 @@
 import com.doumee.dao.business.EmpowerMapper;
 import com.doumee.dao.business.join.EmpowerJoinMapper;
 import com.doumee.dao.business.model.Company;
+import com.doumee.dao.business.model.Device;
 import com.doumee.dao.business.model.Empower;
 import com.doumee.dao.business.model.Member;
 import com.doumee.dao.system.model.SystemUser;
@@ -109,11 +110,13 @@
         queryWrapper.selectAs(Member::getName,Empower::getMemberName);
         queryWrapper.selectAs(Member::getPhone,Empower::getMemberPhone);
         queryWrapper.selectAs(Member::getIdcardDecode,Empower::getMemberidCard);
+        queryWrapper.selectAs(Device::getName,Empower::getDeviceName);
         queryWrapper.selectAs(Company::getName,Empower::getCompanyName);
         queryWrapper.selectAs(SystemUser::getUsername,Empower::getCreaterName);
         queryWrapper.leftJoin(Member.class,Member::getId,Empower::getMemberId);
         queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
         queryWrapper.leftJoin(SystemUser.class,SystemUser::getId,Empower::getCreator);
+        queryWrapper.leftJoin(Device.class,Device::getId,Empower::getDeviceId);
 
         queryWrapper
                /* .eq(Empower::getIsdeleted, Constants.ZERO)*/
@@ -122,6 +125,7 @@
         queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getSendStatus()),Empower::getSendStatus,pageWrap.getModel().getSendStatus());
         queryWrapper.eq(StringUtils.isNotBlank(pageWrap.getModel().getCompanyId()),Company::getId,pageWrap.getModel().getCompanyId());
         queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getCompanyName()),Company::getName,pageWrap.getModel().getCompanyName());
+        queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getDeviceName()),Device::getName,pageWrap.getModel().getDeviceName());
         queryWrapper.ge(Objects.nonNull(pageWrap.getModel().getSendStartDate()),Empower::getSendDate,pageWrap.getModel().getSendStartDate());
         queryWrapper.le(Objects.nonNull(pageWrap.getModel().getSendEndDate()),Empower::getSendDate,pageWrap.getModel().getSendEndDate());
 
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberCardServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberCardServiceImpl.java
index 7e5c9e9..dcbcda9 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberCardServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberCardServiceImpl.java
@@ -72,6 +72,8 @@
         memberCard.setCreator(userInfo.getId());
         memberCard.setCreateDate(new Date());
         memberCard.setStatus(Constants.ONE);
+        memberCard.setIsdeleted(Constants.ZERO);
+        memberCard.setHkStatus(Constants.ZERO);
         memberCardMapper.insert(memberCard);
         dealMemberRoleEmpower(memberMapper.selectById(memberCard.getMemberId()));
         Member member = memberMapper.selectById(memberCard.getMemberId());
@@ -296,7 +298,8 @@
                     .selectAs(Member::getName,MemberCard::getMemberName)
                     .selectAs(Member::getPhone,MemberCard::getMemberPhone)
                     .selectAs(Member::getType,MemberCard::getMemberType)
-                    .selectAs(Company::getName,MemberCard::getCompanyName);
+                    .selectAs(Company::getName,MemberCard::getCompanyName)
+                    .eq(MemberCard::getIsdeleted,Constants.ZERO);
         queryWrapper.like(Objects.nonNull(pageWrap.getModel().getCode()),MemberCard::getCode,pageWrap.getModel().getCode())
                     .eq(Objects.nonNull(pageWrap.getModel().getStatus()),MemberCard::getStatus,pageWrap.getModel().getStatus())
                     .eq(Objects.nonNull(pageWrap.getModel().getStatus()),MemberCard::getStatus,pageWrap.getModel().getStatus())
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 5f44246..4587aa1 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
@@ -179,6 +179,24 @@
         memberMapper.updateById(member);
     }
 
+
+    @Override
+    public void roleAuthById(Integer id) {
+        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        Member member = memberMapper.selectById(id);
+        if(member.getIsdeleted().equals(Constants.ONE)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍛樺伐淇℃伅宸插垹闄�");
+        }
+        if(!member.getType().equals(Constants.memberType.internal)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炲唴閮ㄤ汉鍛樻棤娉曡繘琛岃鎿嶄綔");
+        }
+        memberRoleMapper.selectList(new QueryWrapper<MemberRole>().lambda().eq(MemberRole::getMemberId,member.getId()));
+
+
+
+    }
+
+
     @Override
     public void delete(Member member) {
         UpdateWrapper<Member> deleteWrapper = new UpdateWrapper<>(member);
@@ -603,6 +621,7 @@
 
         queryWrapper.selectAll(Member.class);
         queryWrapper.selectAs(Company::getName,Member::getCompanyName);
+        queryWrapper.select(" ( select count(1) from member_card mc where mc.isdeleted = 0 and  mc.member_id = t.id ) as  memberCardCount ");
         queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
         queryWrapper.in(Objects.nonNull(pageWrap.getModel().getCompanyIds())&&pageWrap.getModel().getCompanyIds().size()>0,
                         Member::getCompanyId,pageWrap.getModel().getCompanyIds())
@@ -714,8 +733,8 @@
                 .selectAs(Company::getName,MemberInfoDTO::getCompanyName)
                 .select(" (select ua.CREATE_DATE from user_action ua where ua.MEMBER_ID=t.id and ua.ISDELETED=0  order by ua.CREATE_DATE desc  limit 1) as optTime")
                 .select(" (select s.REALNAME from user_action uac left join system_user s on uac.CREATOR = s.ID    where uac.MEMBER_ID=t.id and uac.ISDELETED=0 order by uac.CREATE_DATE desc  limit 1) as creatorName")
-                .select(" (select STARTTIME from visits v where v.MEMBER_ID=t.id and v.ISDELETED=0 order by CREATE_DATE desc  limit 1) as visitsLastDate");
-
+                .select(" (select STARTTIME from visits v where v.MEMBER_ID=t.id and v.ISDELETED=0 order by CREATE_DATE desc  limit 1) as visitsLastDate")
+                .eq(Member::getIsdeleted,Constants.ZERO);
                 queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getCreaterId()),Member::getEditor,pageWrap.getModel().getCreaterId());
                 queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getType()),Member::getType,pageWrap.getModel().getType());
                 queryWrapper
@@ -878,24 +897,35 @@
         WxAuthorizeVO wxAuthorizeVO = new WxAuthorizeVO();
         wxAuthorizeVO.setOpenid(openId);
         //鏍规嵁openId 鏌ヨ鐢ㄦ埛淇℃伅
-        Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
+        Member member = memberJoinMapper.selectJoinOne(Member.class,new MPJLambdaWrapper<Member>()
+                .selectAll(Member.class)
+                .selectAs(Company::getName,Member::getCompanyName)
+                .leftJoin(Company.class,Company::getId,Member::getCompanyId)
                 .eq(Member::getOpenid,openId)
                 .eq(Member::getIsdeleted,Constants.ZERO)
-                .ne(Member::getType,Constants.memberType.visitor)
+                .orderByDesc(Member::getCreateDate)
+                .last(" limit 1 ")
         );
         //闈炶瀹㈢敤鎴� 杩涜鍒ゆ柇鏄惁瀛樺湪鐢ㄦ埛
-        if(!Objects.isNull(member)&&!member.getType().equals(Constants.memberType.visitor)){
+        if(!Objects.isNull(member)){
             if(member.getIsdeleted() == Constants.ONE){
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛宸插垹闄�,璇疯仈绯荤鐞嗗憳");
             }
             if(member.getStatus() != Constants.ZERO){
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛宸茬鐢�,璇疯仈绯荤鐞嗗憳");
             }
+            if(StringUtils.isNotBlank(member.getIdcardNo())){
+               member.setIdcardDecode(DESUtil.decrypt(Constants.EDS_PWD, member.getIdcardNo()));
+            }
+            String prefixUrl = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode() +
+                    systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
+            member.setPrefixUrl(prefixUrl);
             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);
+            wxAuthorizeVO.setMember(member);
         }
         return wxAuthorizeVO;
     }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/RetentionServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/RetentionServiceImpl.java
index df96abb..05a95ea 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/RetentionServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/RetentionServiceImpl.java
@@ -270,6 +270,8 @@
                 .eq(Objects.nonNull(pageWrap.getModel().getType()),
                         Retention::getType,
                         pageWrap.getModel().getType())
+                //杩囨护杞﹁締鏁版嵁
+                .ne(Retention::getType,3)
                 .and(StringUtils.isNotBlank(pageWrap.getModel().getCompanyName()),
                         p-> p.like(Company::getName, pageWrap.getModel().getCompanyName())
                                 .or()
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 e387803..e340737 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
@@ -54,6 +54,7 @@
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.DigestUtils;
 
@@ -114,6 +115,7 @@
             if (Objects.isNull(erpVisitDTO)
                     || StringUtils.isBlank(erpVisitDTO.getName())
                     || StringUtils.isBlank(erpVisitDTO.getPhone())
+                    || StringUtils.isBlank(erpVisitDTO.getCompanyName())
                     || Objects.isNull(erpVisitDTO.getIdcardType())
                     || StringUtils.isBlank(erpVisitDTO.getIdcardNo())
                     || Objects.isNull(erpVisitDTO.getStarttime())
@@ -155,6 +157,8 @@
                 for (ErpWithVisitDTO erpWithVisitDTO : erpWithVisitDTOList) {
                     Visits withVisits = new Visits();
                     BeanUtils.copyProperties(erpWithVisitDTO, withVisits);
+                    withVisits.setCompanyName(visits.getCompanyName());
+                    withVisits.setReason(visits.getReason());
                     visitsList.add(withVisits);
                 }
                 visits.setWithUserList(visitsList);
@@ -163,11 +167,12 @@
         }catch (BusinessException e){
             throw e;
         }finally {
-            saveInterfaceLog(erpVisitDTO,"/visitBiz/resource/crateVisit",null,Constants.ZERO);
+            saveInterfaceLog(erpVisitDTO,"/visitBiz/resource/createVisit",null,Constants.ZERO);
         }
     }
 
-    private void saveInterfaceLog(Object param, String path,String result,Integer type) {
+    @Transactional(propagation = Propagation.NOT_SUPPORTED)
+    void saveInterfaceLog(Object param, String path, String result, Integer type) {
         InterfaceLog interfaceLog=new InterfaceLog();
         interfaceLog.setType(type);
         interfaceLog.setCreateDate(new Date());
@@ -568,9 +573,10 @@
     private void isValidBaseParam(Visits visits) {
         if(visits.getEndtime() == null
                 || visits.getStarttime() == null
-//                ||  StringUtils.isBlank(visits.getReason())
+                ||  StringUtils.isBlank(visits.getReason())
                 ||  StringUtils.isBlank( visits.getName())
                 ||  StringUtils.isBlank( visits.getPhone())
+                ||  StringUtils.isBlank( visits.getCompanyName())
                 ||  visits.getIdcardType() == null
 //                ||  StringUtils.isBlank( visits.getFaceImg() )
                 ||  StringUtils.isBlank( visits.getIdcardNo() )
@@ -917,6 +923,9 @@
         if(!Constants.equalsInteger(Constants.ONE, member.getCanVisit())){
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝璇ユ嫓璁夸汉鏆傛椂涓嶈兘鎺ュ彈鎮ㄧ殑鎷滆鐢宠~");
         }
+        if(StringUtils.isBlank(member.getHkId())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝璇ユ嫓璁夸汉鏈笅鍙戞殏鏃朵笉鑳芥帴鍙楁偍鐨勬嫓璁跨敵璇穨");
+        }
         return  member;
     }
 
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 6e63bab..786268c 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
@@ -44,6 +44,7 @@
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.PostConstruct;
@@ -331,7 +332,7 @@
     }
 
    public void dealRoleEmpower(Member member ){
-        List<Integer> doorIds = getRoleIdByParam(member.getRoleIds(),member);
+//        List<Integer> doorIds = getRoleIdByParam(member.getRoleIds(),member);
         //娣诲姞浜哄憳鍗$墖鏁版嵁
         dealMemberCard(member,new UserUpdateRequest());
     }
@@ -524,7 +525,7 @@
                    for (DeviceRole deviceRole:deviceRoleList) {
                        RoleListResponse roleListResponse = new RoleListResponse();
                        BeanUtils.copyProperties(deviceRole,roleListResponse);
-                       if(deviceRole.getType().equals(Constants.TWO)){
+                       if(deviceRole.getType().equals("2")){
                            roleListResponse.setType(Constants.ONE);
                        }else{
                            roleListResponse.setType(Constants.ZERO);
@@ -877,6 +878,7 @@
                     member.setFsStatus(Constants.ZERO);
                     member.setCompanyId(company.getId());
                     member.setType(Constants.memberType.internal);
+                    member.setCanVisit(Constants.ONE);
                     String encryptIdNo = DESUtil.encrypt(Constants.EDS_PWD,param.getIdNo());
                     member.setIdcardNo(encryptIdNo);
                     member.setStartTime(param.getValidStartTime());
@@ -902,8 +904,9 @@
                     member.setEndTime(param.getValidEndTime());
                     memberMapper.updateById(member);
                 }
+                //2024骞�3鏈�7鏃�17:49:33 鍙栨秷姝や笟鍔″鐞嗕汉鍛橀棬绂佹潈闄�
+//                getRoleIdByParam(param.getRoleIds(),member);
                 //娣诲姞浜哄憳鍗$墖鏁版嵁
-                getRoleIdByParam(param.getRoleIds(),member);
                 dealMemberCard(member,param);
             }
         }catch (BusinessException e){
@@ -1008,95 +1011,94 @@
 
     @Override
     public void roleUserAuthor(UserAuthorRequest param){
-        if(Objects.isNull(param)
-                ||StringUtils.isBlank(param.getUserId())){
-            throw new BusinessException(ResponseStatus.BAD_REQUEST);
-        }
-        if(Objects.nonNull(param.getValidStartTime())&&Objects.nonNull(param.getValidEndTime())){
-            if(param.getValidStartTime().getTime()> param.getValidEndTime().getTime()){
-                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝鏈夋晥鏈熸椂闂翠笉鍚堟硶锛�");
+        try{
+            if(Objects.isNull(param)
+                    ||StringUtils.isBlank(param.getUserId())){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST);
             }
+            if(Objects.nonNull(param.getValidStartTime())&&Objects.nonNull(param.getValidEndTime())){
+                if(param.getValidStartTime().getTime()> param.getValidEndTime().getTime()){
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝鏈夋晥鏈熸椂闂翠笉鍚堟硶锛�");
+                }
+            }
+            Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getErpId,param.getUserId()).last("limit 1"));
+            if(Objects.isNull(member)){
+                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝鐢ㄦ埛淇℃伅涓嶅瓨鍦紒");
+            }
+            List<Integer> doorIds = getRoleIdByParam(param.getRoleIds(),member);
+            if(param.getRoleIds()!=null && param.getRoleIds().length>0 && StringUtils.isBlank(member.getRoleId())){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝鏈煡璇㈠埌鏈夋晥闂ㄧ缁勬暟鎹�");
+            }
+            memberMapper.update(null,new UpdateWrapper<Member>().lambda()
+                    .eq(Member::getId,member.getId())
+                    .set(Member::getRoleId,member.getRoleId())
+                    .set(Member::getRemark,"寰呭悓姝ュ畨闃插钩鍙�")
+                    .set(Member::getStartTime,param.getValidStartTime())
+                    .set(Member::getEndTime,param.getValidEndTime())
+                    .set(Member::getEditDate,new Date())
+                    .set(Member::getHkStatus,Constants.ZERO ));
+        }catch (BusinessException e){
+            throw e;
+        }finally {
+            saveInterfaceLog(param,"/event/role/userAuthor",null,Constants.ZERO);
         }
-        Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getErpId,param.getUserId()).last("limit 1"));
-        if(Objects.isNull(member)){
-            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝鐢ㄦ埛淇℃伅涓嶅瓨鍦紒");
-        }
-        List<Integer> doorIds = getRoleIdByParam(param.getRoleIds(),member);
-        if(param.getRoleIds()!=null && param.getRoleIds().length>0 && StringUtils.isBlank(member.getRoleId())){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝鏈煡璇㈠埌鏈夋晥闂ㄧ缁勬暟鎹�");
-        }
-        //鏇存柊鎺堟潈鏈夋晥鏈�
-        Member update = new Member();
-        update.setId(member.getId());
-        update.setEditDate(new Date());
-        update.setStartTime(param.getValidStartTime());
-        update.setEndTime(param.getValidEndTime());
-        update.setRoleId(StringUtils.isNotBlank(member.getRoleId())?member.getRoleId():null);
-        update.setHkStatus(Constants.ZERO);//鍋氫竴閬嶆洿鏂伴�昏緫
-        update.setRemark("寰呭悓姝ュ畨闃插钩鍙�");
-        memberMapper.update(null,new UpdateWrapper<Member>().lambda()
-                .eq(Member::getId,member.getId())
-                .set(Member::getRoleId,member.getRoleId())
-                .set(Member::getRemark,"寰呭悓姝ュ畨闃插钩鍙�")
-                .set(Member::getStartTime,param.getValidStartTime())
-                .set(Member::getEndTime,param.getValidEndTime())
-                .set(Member::getEditDate,new Date())
-                .set(Member::getHkStatus,Constants.ZERO ));
     }
 
 
     @Override
     public void parkCarAuthor(CarAuthorRequest param){
-        if(Objects.isNull(param)
-                ||StringUtils.isBlank(param.getCarCode())){
-            throw new BusinessException(ResponseStatus.BAD_REQUEST);
-        }
-        if(Objects.nonNull(param.getValidStartTime())&&Objects.nonNull(param.getValidEndTime())){
-            if(param.getValidStartTime().getTime()> param.getValidEndTime().getTime()){
-                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝鏈夋晥鏈熸椂闂翠笉鍚堟硶锛�");
+        try{
+            if(Objects.isNull(param)
+                    ||StringUtils.isBlank(param.getCarCode())){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST);
             }
-        }
-        Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getErpId,param.getUserId()).last("limit 1"));
-        if(Objects.isNull(member)){
-            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝鐢ㄦ埛淇℃伅涓嶅瓨鍦紒");
-        }
-        //鍒犻櫎杞﹂噺搴撹褰曟暟鎹�
-        parkBookMapper.update(null,new UpdateWrapper<ParkBook>().lambda()
-                .eq(ParkBook::getCarCode,param.getCarCode())
-                .set(ParkBook::getIsdeleted,Constants.ONE)
-                .set(ParkBook::getHkStatus,Constants.ZERO)
-        );
-        //鏌ヨ杞﹀簱淇℃伅
-        List<Parks> parksList = new ArrayList<>();
-        if(CollectionUtils.isNotEmpty(param.getParkIdList())){
-             parksList  = parksMapper.selectList(new QueryWrapper<Parks>().lambda()
-                    .in(Parks::getId,param.getParkIdList())
+            if(Objects.nonNull(param.getValidStartTime())&&Objects.nonNull(param.getValidEndTime())){
+                if(param.getValidStartTime().getTime()> param.getValidEndTime().getTime()){
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝鏈夋晥鏈熸椂闂翠笉鍚堟硶锛�");
+                }
+            }
+            Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getErpId,param.getUserId()).last("limit 1"));
+            if(Objects.isNull(member)){
+                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝鐢ㄦ埛淇℃伅涓嶅瓨鍦紒");
+            }
+            //鍒犻櫎杞﹂噺搴撹褰曟暟鎹�
+            parkBookMapper.update(null,new UpdateWrapper<ParkBook>().lambda()
+                    .eq(ParkBook::getCarCode,param.getCarCode())
+                    .set(ParkBook::getIsdeleted,Constants.ONE)
+                    .set(ParkBook::getHkStatus,Constants.ZERO)
             );
-        }else{
-            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝鍋滆溅搴撲俊鎭笉瀛樺湪锛屾巿鏉冨け璐�");
-        }
-        if(CollectionUtils.isNotEmpty(parksList)){
-            List<ParkBook> parkBookList = new ArrayList<>();
-            for (Parks parks:parksList) {
-                ParkBook parkBook = new ParkBook();
-                parkBook.setIsdeleted(Constants.ZERO);
-                parkBook.setCreateDate(new Date());
-                parkBook.setCarCode(param.getCarCode());
-                parkBook.setParkId(parks.getId());
-                parkBook.setOrigin(Constants.ZERO);
-                parkBook.setStartTime(Objects.isNull(param.getValidStartTime())?new Date():param.getValidStartTime());
-                parkBook.setEndTime(Objects.isNull(param.getValidEndTime())?null:param.getValidEndTime());
-                parkBook.setTimeType(Objects.isNull(param.getValidEndTime())?Constants.ZERO:Constants.ONE);
-                parkBook.setMemberId(member.getId());
-                parkBook.setHkStatus(Constants.ZERO);
-                parkBook.setRemark("寰呭悓姝ュ畨闃插钩鍙�");
-                parkBookList.add(parkBook);
+            //鏌ヨ杞﹀簱淇℃伅
+            if(CollectionUtils.isNotEmpty(param.getParkIdList())){
+                List<Parks>  parksList  = parksMapper.selectList(new QueryWrapper<Parks>().lambda()
+                        .in(Parks::getId,param.getParkIdList())
+                );
+                if(CollectionUtils.isNotEmpty(parksList)){
+                    List<ParkBook> parkBookList = new ArrayList<>();
+                    for (Parks parks:parksList) {
+                        ParkBook parkBook = new ParkBook();
+                        parkBook.setIsdeleted(Constants.ZERO);
+                        parkBook.setCreateDate(new Date());
+                        parkBook.setCarCode(param.getCarCode());
+                        parkBook.setParkId(parks.getId());
+                        parkBook.setOrigin(Constants.ZERO);
+                        parkBook.setStartTime(Objects.isNull(param.getValidStartTime())?null:param.getValidStartTime());
+                        parkBook.setEndTime(Objects.isNull(param.getValidEndTime())?null:param.getValidEndTime());
+                        parkBook.setTimeType(Objects.isNull(param.getValidEndTime())?Constants.ZERO:Constants.ONE);
+                        parkBook.setMemberId(member.getId());
+                        parkBook.setHkStatus(Constants.ZERO);
+                        parkBook.setRemark("寰呭悓姝ュ畨闃插钩鍙�");
+                        parkBookList.add(parkBook);
+                    }
+                    parkBookMapper.insertBatchSomeColumn(parkBookList);
+                }else{
+                    throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝鍋滆溅搴撲俊鎭笉瀛樺湪锛屾巿鏉冨け璐�");
+                }
             }
-            parkBookMapper.insertBatchSomeColumn(parkBookList);
-        }else{
-            throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝鍋滆溅搴撲俊鎭笉瀛樺湪锛屾巿鏉冨け璐�");
+        }catch (BusinessException e){
+            throw e;
+        }finally {
+            saveInterfaceLog(param,"/event/park/carAuthor",null,Constants.ZERO);
         }
-
     }
 
 
@@ -1142,8 +1144,8 @@
     }
 
 
-
-    private void saveInterfaceLog(Object param, String path,String result,Integer type) {
+    @Transactional(propagation = Propagation.NOT_SUPPORTED)
+    public void saveInterfaceLog(Object param, String path, String result, Integer type) {
         InterfaceLog interfaceLog=new InterfaceLog();
         interfaceLog.setType(type);
         interfaceLog.setCreateDate(new Date());
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncParkServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncParkServiceImpl.java
index b902487..a786ef7 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncParkServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncParkServiceImpl.java
@@ -30,6 +30,7 @@
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 娴峰悍鍋滆溅搴撳悓姝ervice瀹炵幇
@@ -138,8 +139,8 @@
         CarChargeAddRequest param = new CarChargeAddRequest();
         param.setPlateNo(c.getCarCode());
         param.setParkSyscode(c.getParkHkId());
-        param.setStartTime(DateUtil.getShortTime(c.getStartTime()));
-        param.setEndTime(DateUtil.getShortTime(c.getEndTime()));
+        param.setStartTime(Objects.isNull(c.getStartTime())?DateUtil.getDate(new Date(),"yyyy-MM-dd"):DateUtil.getShortTimeToNull(c.getStartTime()));
+        param.setEndTime(Objects.isNull(c.getEndTime())?"2999-12-31":DateUtil.getShortTimeToNull(c.getEndTime()));
         BaseResponse response = HKService.carChargeAddtion(param);
         if(response!=null
                 && StringUtils.equals(response.getCode(),HKConstants.RESPONSE_SUCCEE)){
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java
index 4c5b975..95c71f3 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncVisitServiceImpl.java
@@ -379,6 +379,13 @@
         request.setVisitEndTime(DateUtil.getISO8601Timestamp(c.getEndtime()));
         request.setReceptionistId(c.getReceptMemberHkId());//琚浜烘捣搴风紪鐮�
         request.setVisitPurpose(c.getReason());
+        if(StringUtils.isNotBlank(c.getReason())){
+            char[] charArray = c.getReason().toCharArray();
+            int length = charArray.length;
+            if(length>32){
+                request.setVisitPurpose(c.getReason().substring(32));
+            }
+        }
         //鑾峰彇鏉冮檺缁勯泦鍚�
         request.setVisitorPermissionSet(getVisitPermissonRequest(roleList,c));
         List<VisitAppointmentVistorRequest> infolist = new ArrayList<>();
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 365c4bc..4852691 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
@@ -43,12 +43,12 @@
         for (Company treeNode : nodeList){
             // 鍒ゆ柇褰撳墠鑺傜偣鏄惁涓烘牴鑺傜偣锛屾澶勬敞鎰忥細鑻arentId绫诲瀷鏄疭tring锛屽垯瑕侀噰鐢╡quals()鏂规硶鍒ゆ柇銆�
             if(origin== DataSyncConfig.origin.hk){
-                if (Objects.isNull(treeNode.getHkParentId())) {
+                if (StringUtils.isBlank(treeNode.getHkParentId())) {
                     // 鏄紝娣诲姞
                     rootNodeList.add(treeNode);
                 }
             }else if(origin== DataSyncConfig.origin.erp){
-                if (Objects.isNull(treeNode.getErpParentId())) {
+                if (StringUtils.isBlank(treeNode.getErpParentId())) {
                     // 鏄紝娣诲姞
                     rootNodeList.add(treeNode);
                 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/system/impl/SystemDictDataServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/system/impl/SystemDictDataServiceImpl.java
index 65edb21..9445510 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/system/impl/SystemDictDataServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/system/impl/SystemDictDataServiceImpl.java
@@ -179,6 +179,11 @@
             throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"鍏ュ巶椤荤煡 瀛楀吀涓嶅瓨鍦�");
         }
         visitConfigDTO.setVisitNotice(visitNotice.getCode());
+        SystemDictData doorsVisitRequired = systemDictList.stream().filter(m->m.getLabel().equals(Constants.SELECT_DOORS_VISIT_REQUIRED)).findFirst().get();
+        if(Objects.isNull(doorsVisitRequired)){
+            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"鑷�夐棬绂侀厤缃� 瀛楀吀涓嶅瓨鍦�");
+        }
+        visitConfigDTO.setDoorsVisitRequired(Integer.valueOf(doorsVisitRequired.getCode()));
         return visitConfigDTO;
     }
 
@@ -243,6 +248,11 @@
         }
         visitNotice.setCode(visitConfigDTO.getVisitNotice());
 
+        SystemDictData doorsVisitRequired = systemDictList.stream().filter(m->m.getLabel().equals(Constants.SELECT_DOORS_VISIT_REQUIRED)).findFirst().get();
+        if(Objects.isNull(doorsVisitRequired)){
+            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"鑷�夐棬绂侀厤缃� 瀛楀吀涓嶅瓨鍦�");
+        }
+        doorsVisitRequired.setCode(visitConfigDTO.getDoorsVisitRequired().toString());
 
         systemDictDataMapper.updateById(reservationWay);
         systemDictDataMapper.updateById(checkVisit);
@@ -251,6 +261,7 @@
         systemDictDataMapper.updateById(theme);
         systemDictDataMapper.updateById(description);
         systemDictDataMapper.updateById(visitNotice);
+        systemDictDataMapper.updateById(doorsVisitRequired);
 
     }
 
diff --git a/server/dmvisit_web/src/main/java/com/doumee/api/ScheduleTool.java b/server/dmvisit_web/src/main/java/com/doumee/api/ScheduleTool.java
index f9f7345..e1fc4ba 100644
--- a/server/dmvisit_web/src/main/java/com/doumee/api/ScheduleTool.java
+++ b/server/dmvisit_web/src/main/java/com/doumee/api/ScheduleTool.java
@@ -66,6 +66,7 @@
         String url = WXConstant.GET_ACCESS_TOKEN_URL.replace("APPID",appId).replace("APPSECRET",appSecret);
         String response = HttpsUtil.get(url,false);
         JSONObject json = JSONObject.parseObject(response);
+        System.out.println(json);
         SystemDictData systemDictData =  systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_ACCESS_TOKEN);
         if(!Objects.isNull(systemDictData)){
             systemDictData.setCode(json.getString("access_token"));
diff --git a/server/dmvisit_web/src/main/java/com/doumee/api/web/PublicController.java b/server/dmvisit_web/src/main/java/com/doumee/api/web/PublicController.java
index b38b36e..626e9cc 100644
--- a/server/dmvisit_web/src/main/java/com/doumee/api/web/PublicController.java
+++ b/server/dmvisit_web/src/main/java/com/doumee/api/web/PublicController.java
@@ -95,6 +95,7 @@
     @RequestMapping(method= RequestMethod.POST,value="api/uploadFtp.do")
     @ResponseBody
     public void uploadFtp(HttpServletRequest request, HttpServletResponse response, String folderCode) throws Exception {
+        System.out.println("涓婁紶涓�");
         String folder = systemDictDataBiz.queryByCode(Constants.FTP,folderCode).getCode();
         String prefixPath = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode();
         InputStream is = null;
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 2a4a690..92ded6e 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
@@ -1,5 +1,6 @@
 package com.doumee.api.web;
 
+import com.doumee.config.annotation.LoginRequired;
 import com.doumee.core.annotation.trace.Trace;
 import com.doumee.core.model.ApiResponse;
 import com.doumee.core.utils.Constants;

--
Gitblit v1.9.3