From f89719902615823be2a1ddc1b5082f52eed31984 Mon Sep 17 00:00:00 2001
From: nidapeng <jp@doumee.com>
Date: 星期四, 25 四月 2024 09:11:47 +0800
Subject: [PATCH] 最新版本
---
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/MemberRoleMapper.java | 17
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/TimeRangeRequest.java | 11
server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroSessionDAO.java | 113
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/AccountLoginDTO.java | 28
server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerConfig.java | 123
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/InterfaceLogService.java | 99
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/UserTimeRangeInfoResponse.java | 57
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/TaskPersonDetailRequest.java | 21
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/UserActionMapper.java | 12
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/FacePictureCheckResponse.java | 29
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/AppointmentListRequest.java | 36
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/CardInfoResponse.java | 13
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/VisitAppointmentCancelRequest.java | 11
server/visits/dmvisit_service/src/main/resources/application-testYL.yml | 80
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/EmpowerJoinMapper.java | 15
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarsServiceImpl.java | 164
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/InterfaceLogMapper.java | 12
server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroToken.java | 80
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/PrivilegeGroupRequest.java | 11
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKResponseCode.java | 52
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/ProblemLogJoinMapper.java | 10
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/UserAddFaceRequest.java | 12
server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerInterceptor.java | 45
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java | 1169 +++++
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncImgServiceImpl.java | 292 +
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/AcsDeviceStatusListRequest.java | 15
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/VisitsMapper.java | 15
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/acs/EventDeviceDataRequest.java | 65
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/ProblemsVO.java | 43
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java | 107
server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroAuthFilter.java | 30
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/EmpowerServiceImpl.java | 159
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/ParkReservationAddResponse.java | 9
server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/MemberQuery.java | 70
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/parks/EventParkInResultRequest.java | 9
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/VisitAppointmentMDJRequest.java | 16
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/BaseResponse.java | 20
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/TempCarInRecordListRequest.java | 16
server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/LaborMemberDTO.java | 50
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/UserInfoResponse.java | 23
server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/UserAuthorRequest.java | 24
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/VehicleInfoResponse.java | 28
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java | 198
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/TaskDataAdditionFaceRequest.java | 12
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/TaskAdditionRequest.java | 10
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/OrgDelRequest.java | 8
server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/TemplateData.java | 19
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ProblemsService.java | 115
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/ParkReservationDelRequest.java | 11
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/OrgTimeRangeInfoResponse.java | 20
server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroConfig.java | 147
server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/UserUpdateRequest.java | 53
server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/CarAuthorRequest.java | 28
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/EventSubRequest.java | 14
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/VisitMemberDTO.java | 22
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/TrainTimeMapper.java | 12
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/sdk/HIKCSDemo.java | 151
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/TaskProgressResponse.java | 13
server/visits/dmvisit_service/db/business.empower.permissions.sql | 6
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/VisitEventJoinMapper.java | 11
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/UserAddResponse.java | 11
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/TaskDataAdditionRequest.java | 16
server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/WxMiniUtilService.java | 53
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AuthItemListResponse.java | 13
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/VisitEvent.java | 164
server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/erp/UserFailRequest.java | 23
server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerInterceptorConfig.java | 23
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/ApproveVO.java | 12
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/UserAction.java | 90
server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroTokenManager.java | 25
server/visits/dmvisit_service/db/business.problem_log.permissions.sql | 6
server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/VisitConfigParam.java | 24
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/CarEventMapper.java | 15
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/VisitEventVo.java | 47
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberRoleServiceImpl.java | 136
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AppointmentInfoResponse.java | 53
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/EmpowerMapper.java | 15
server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/TokenRequest.java | 19
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/CarEventJoinMapper.java | 12
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/CarChargeDelRequest.java | 10
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/VisitsJoinMapper.java | 12
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/UserAddRequest.java | 24
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceEventServiceImpl.java | 423 ++
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/TaskPersonDetailFaceInfoResponse.java | 14
server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/response/VisitEventDTO.java | 137
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/parks/EventParkRlsRequest.java | 15
server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/WXConstant.java | 19
server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/erp/UserInfoRequest.java | 26
server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroCache.java | 159
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveParam.java | 86
server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/VisitListRequest.java | 37
server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/response/CarEventDTO.java | 192
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/ApproveParamDataVO.java | 24
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ProblemsServiceImpl.java | 251 +
server/visits/dmvisit_service/db/business.approve.permissions.sql | 6
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/CompanyMapper.java | 15
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/DoorsInfoResponse.java | 31
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/CompanyEconomicsVo.java | 84
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java | 210 +
server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/RoleListRequest.java | 21
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/ProblemLogVo.java | 37
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/CardLossRequest.java | 10
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/ParkCrossRecordInfoResponse.java | 37
server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/OptionsObject.java | 18
server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/VisitRecordDTO.java | 37
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/DeviceJoinMapper.java | 8
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/DevicePictureRequest.java | 10
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceRoleServiceImpl.java | 484 ++
server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/response/AccessTokenResponse.java | 21
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ProblemLog.java | 104
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/InterfaceLogServiceImpl.java | 164
server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/ApproveNoticeRequest.java | 31
server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/response/StagingDataVO.java | 47
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/SortRequest.java | 12
server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroSessionManager.java | 85
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AscDeviceStatusInfoResponse.java | 29
server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroSessionSerializer.java | 36
server/visits/dmvisit_service/src/main/resources/application-dev.yml | 83
server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/response/CarEventListResponse.java | 67
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/MemberCardMapper.java | 16
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CarEventService.java | 114
server/visits/dmvisit_service/db/business.device.permissions.sql | 6
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/OrgOrUserAddResponse.java | 11
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/CategoryMapper.java | 12
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/TaskProgressDetailResponse.java | 11
server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroCredentialsMatcher.java | 40
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/InterfaceLog.java | 98
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java | 300 +
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ext/HkSyncService.java | 86
server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/DoorEventListRequest.java | 27
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncOrgUserFromHKServiceImpl.java | 279 +
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AcsDeviceInfoResponse.java | 40
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java | 1029 ++++
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CompanyService.java | 127
server/visits/dmvisit_service/src/main/java/com/doumee/service/systembiz/SystemDictDataBizService.java | 44
server/visits/dmvisit_service/db/business.retention.permissions.sql | 6
server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatNotice.java | 69
server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/response/DeviceListResponse.java | 21
server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/response/erp/ErpUserListResponse.java | 48
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/OrgOrUserAddFailureResponse.java | 10
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/CardDeletionRequest.java | 10
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitParamRequest.java | 17
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/parks/EventParkParamRequest.java | 14
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/MemberRoleJoinMapper.java | 12
server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/ErpConstants.java | 8
server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/response/DevWgResponseParam.java | 16
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncInitConfigServiceImpl.java | 37
server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroRealm.java | 84
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberCardService.java | 103
server/visits/dmvisit_service/src/main/resources/application-proHS.yml.bck | 81
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/TaskPersonDetailResponse.java | 15
server/visits/dmvisit_service/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java | 178
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java | 257 +
server/system_gateway/src/main/java/com/doumee/SystemGatewayApplication.java | 6
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/DeviceService.java | 107
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/VisitAppointmentPermissonRequest.java | 11
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/DoorsListResponse.java | 15
server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/TaskPersonDetailCardFaceResponse.java | 14
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/TrainTimeService.java | 98
server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroCacheManager.java | 44
server/system_gateway/src/main/resources/application.yml | 1
server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/OrgUpdateRequest.java | 34
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java | 583 ++
server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/response/erp/ErpOrgListResponse.java | 35
server/visits/dmvisit_service/db/business.device_event.permissions.sql | 6
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncDeviceServiceImpl.java | 419 ++
166 files changed, 12,533 insertions(+), 0 deletions(-)
diff --git a/server/system_gateway/src/main/java/com/doumee/SystemGatewayApplication.java b/server/system_gateway/src/main/java/com/doumee/SystemGatewayApplication.java
index 361805f..c32da4a 100644
--- a/server/system_gateway/src/main/java/com/doumee/SystemGatewayApplication.java
+++ b/server/system_gateway/src/main/java/com/doumee/SystemGatewayApplication.java
@@ -1,17 +1,23 @@
package com.doumee;
+import lombok.extern.slf4j.Slf4j;
+import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.ApplicationContext;
+import org.springframework.scheduling.annotation.EnableAsync;
/**
* 鍚姩绫�
* @author Eva.Caesar Liu
* @date 2023/03/21 14:49
*/
+@Slf4j
+@EnableAsync
@SpringBootApplication
@EnableDiscoveryClient
+@MapperScan("com.doumee.dao")
public class SystemGatewayApplication {
public static void main(String[] args) {
ApplicationContext context = SpringApplication.run(SystemGatewayApplication.class);
diff --git a/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroAuthFilter.java b/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroAuthFilter.java
new file mode 100644
index 0000000..30d7dc0
--- /dev/null
+++ b/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroAuthFilter.java
@@ -0,0 +1,30 @@
+package com.doumee.config.shiro;
+
+import com.alibaba.fastjson.JSON;
+import com.doumee.core.model.ApiResponse;
+import org.apache.shiro.web.filter.authc.FormAuthenticationFilter;
+import org.springframework.http.HttpStatus;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * Shiro璁よ瘉杩囨护鍣紝澶勭悊鏈璇佹儏鍐电殑鍝嶅簲
+ * @author Eva.Caesar Liu
+ * @date 2023/04/17 12:11
+ */
+public class ShiroAuthFilter extends FormAuthenticationFilter {
+
+ public ShiroAuthFilter() {
+ super();
+ }
+
+ @Override
+ protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {
+ HttpServletResponse servletResponse = (HttpServletResponse) response;
+ servletResponse.setHeader("content-type", "application/json;charset=UTF-8");
+ servletResponse.getWriter().write(JSON.toJSONString(ApiResponse.failed(HttpStatus.UNAUTHORIZED.value(), "鏈櫥褰曟垨鐧诲綍淇℃伅宸茶繃鏈�")));
+ return Boolean.FALSE;
+ }
+}
diff --git a/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroCache.java b/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroCache.java
new file mode 100644
index 0000000..4e61661
--- /dev/null
+++ b/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroCache.java
@@ -0,0 +1,159 @@
+package com.doumee.config.shiro;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shiro.cache.Cache;
+import org.apache.shiro.cache.CacheException;
+import org.apache.shiro.subject.PrincipalCollection;
+import org.apache.shiro.util.CollectionUtils;
+import org.springframework.context.annotation.Scope;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.SerializationException;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.io.Serializable;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Shiro缂撳瓨
+ * @author Eva.Caesar Liu
+ * @date 2023/04/17 12:11
+ */
+@Scope(value = "prototype")
+@Slf4j
+@Component
+public class ShiroCache implements Cache<Object, Serializable> {
+
+ private String keyPrefix = "";
+
+ @Resource(name="sessionRedisTemplate")
+ private RedisTemplate<Object, Serializable> redisTemplate;
+
+ public ShiroCache () {
+ log.debug("ShiroCache: new, keyPrefix = [" + keyPrefix + "]");
+ }
+
+ public ShiroCache(String keyPrefix) {
+ log.debug("ShiroCache: new, keyPrefix = [" + keyPrefix + "]");
+ this.keyPrefix = keyPrefix;
+ }
+
+ @Override
+ public Serializable get(Object key) throws CacheException {
+ if (key == null) {
+ return null;
+ }
+ return redisTemplate.opsForValue().get(getKey(key));
+ }
+
+ @Override
+ public Serializable put(Object key, Serializable value) throws CacheException {
+ if (key == null) {
+ return null;
+ }
+ redisTemplate.opsForValue().set(getKey(key), value);
+ return value;
+ }
+
+ public Serializable put(Object key, Serializable value, int timeout) throws CacheException {
+ if (key == null) {
+ return null;
+ }
+ redisTemplate.opsForValue().set(getKey(key), value, timeout, TimeUnit.SECONDS);
+ return value;
+ }
+
+ @Override
+ public void clear() throws CacheException {
+ Set<Object> keys = this.keys();
+ redisTemplate.delete(keys);
+ }
+
+ @Override
+ public int size() {
+ return this.keys().size();
+ }
+
+ @Override
+ public Set<Object> keys() {
+ Set<Object> keys = redisTemplate.keys(keyPrefix + "*");
+ if (CollectionUtils.isEmpty(keys)) {
+ return Collections.emptySet();
+ }
+ return keys;
+ }
+
+ @Override
+ public Collection<Serializable> values() {
+ Collection<Serializable> values = new ArrayList<>();
+ Set<Object> keys = this.keys();
+ if (CollectionUtils.isEmpty(keys)) {
+ return values;
+ }
+ for (Object k : keys) {
+ values.add(redisTemplate.opsForValue().get(k));
+ }
+ return values;
+ }
+
+ @Override
+ public Serializable remove(Object key) throws CacheException {
+ if (key == null) {
+ return null;
+ }
+ Serializable value = this.get(getKey(key));
+ redisTemplate.delete(getKey(key));
+ return value;
+ }
+
+ private Object getKey (Object key) {
+ if (key instanceof PrincipalCollection) {
+ return this.keyPrefix + getRedisKeyFromPrincipalIdField((PrincipalCollection)key);
+ }
+ return (key instanceof String ? (this.keyPrefix + key) : key);
+ }
+
+ /**
+ * 鑾峰彇redis cache key
+ */
+ private String getRedisKeyFromPrincipalIdField(PrincipalCollection key) {
+ Object principalObject = key.getPrimaryPrincipal();
+ if (principalObject instanceof String) {
+ return principalObject.toString();
+ } else {
+ Method pincipalIdGetter = this.getPrincipalIdGetter(principalObject);
+ return this.getIdObj(principalObject, pincipalIdGetter);
+ }
+ }
+
+ private Method getPrincipalIdGetter(Object principalObject) {
+ Method pincipalIdGetter;
+ String principalIdMethodName = this.getPrincipalIdMethodName();
+
+ try {
+ pincipalIdGetter = principalObject.getClass().getMethod(principalIdMethodName);
+ return pincipalIdGetter;
+ } catch (NoSuchMethodException e) {
+ throw new SerializationException(e.getMessage(), e);
+ }
+ }
+
+ private String getIdObj(Object principalObject, Method pincipalIdGetter) {
+ try {
+ Object idObj = pincipalIdGetter.invoke(principalObject);
+ String redisKey = idObj.toString();
+ return redisKey;
+ } catch (Exception e) {
+ throw new SerializationException(e.getMessage(), e);
+ }
+ }
+
+ private String getPrincipalIdMethodName() {
+ return "getId";
+ }
+}
diff --git a/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroCacheManager.java b/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroCacheManager.java
new file mode 100644
index 0000000..4c11155
--- /dev/null
+++ b/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroCacheManager.java
@@ -0,0 +1,44 @@
+package com.doumee.config.shiro;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shiro.cache.Cache;
+import org.apache.shiro.cache.CacheException;
+import org.apache.shiro.cache.CacheManager;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.stereotype.Component;
+
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * 鑷畾涔塖hiro CacheManager
+ * @author Eva.Caesar Liu
+ * @date 2023/04/17 12:11
+ */
+@Slf4j
+@Component
+public class ShiroCacheManager implements CacheManager {
+
+ private final ConcurrentMap<String, Cache> caches = new ConcurrentHashMap();
+
+ private static ApplicationContext applicationContext;
+
+ @Override
+ public <K, V> Cache<K, V> getCache(String name) throws CacheException {
+ log.debug("get cache, name=" + name);
+ Cache cache = this.caches.get(name);
+ if (cache == null) {
+ cache = applicationContext.getBean(ShiroCache.class, "shiro:cache:");
+ this.caches.put(name, cache);
+ }
+ return cache;
+ }
+
+ @Autowired
+ public void setApplicationContext (ApplicationContext applicationContext) {
+ if (ShiroCacheManager.applicationContext == null) {
+ ShiroCacheManager.applicationContext = applicationContext;
+ }
+ }
+}
diff --git a/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroConfig.java b/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroConfig.java
new file mode 100644
index 0000000..d156a78
--- /dev/null
+++ b/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroConfig.java
@@ -0,0 +1,147 @@
+package com.doumee.config.shiro;
+
+import org.apache.shiro.session.mgt.SessionManager;
+import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
+import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
+import org.apache.shiro.util.ThreadContext;
+import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
+import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+import javax.servlet.Filter;
+import java.io.Serializable;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * Shiro閰嶇疆
+ * @author Eva.Caesar Liu
+ * @date 2023/03/21 14:49
+ */
+@Configuration
+public class ShiroConfig {
+
+ @Value("${cache.session.expire}")
+ private int sessionExpireTime;
+
+ @Autowired
+ private ShiroCredentialsMatcher shiroCredentialsMatcher;
+
+ @Autowired
+ private ShiroSessionDAO shiroSessionDAO;
+
+ @Autowired
+ private ShiroCacheManager shiroCacheManager;
+
+ @Autowired
+ private ShiroRealm shiroRealm;
+
+ @Bean("sessionRedisTemplate")
+ public RedisTemplate<Object, Serializable> sessionRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
+ RedisTemplate<Object, Serializable> redisTemplate = new RedisTemplate<>();
+ redisTemplate.setConnectionFactory(redisConnectionFactory);
+ // 榛樿搴忓垪鍖栨柟寮�
+ redisTemplate.setDefaultSerializer(new StringRedisSerializer());
+ // 鍊煎簭鍒楀寲鏂瑰紡
+ ShiroSessionSerializer serializer = new ShiroSessionSerializer();
+ redisTemplate.setValueSerializer(serializer);
+ redisTemplate.setHashValueSerializer(serializer);
+ redisTemplate.afterPropertiesSet();
+ return redisTemplate;
+ }
+
+ @Bean
+ public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {
+ DefaultAdvisorAutoProxyCreator autoProxyCreator = new DefaultAdvisorAutoProxyCreator();
+ autoProxyCreator.setProxyTargetClass(true);
+ return autoProxyCreator;
+ }
+
+ @Bean
+ public SessionManager sessionManager() {
+ ShiroSessionManager sessionManager = new ShiroSessionManager();
+ sessionManager.setSessionDAO(shiroSessionDAO);
+ sessionManager.setGlobalSessionTimeout(sessionExpireTime*1000);
+ // 鍒犻櫎澶辨晥鐨剆ession
+ sessionManager.setDeleteInvalidSessions(true);
+ return sessionManager;
+ }
+
+ @Bean
+ public SecurityManager securityManager() {
+ DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
+ ThreadContext.bind(securityManager);//鍔犱笂杩欏彞浠g爜鎵嬪姩缁戝畾
+ securityManager.setRealm(shiroRealm);
+ securityManager.setSessionManager(this.sessionManager());
+ securityManager.setCacheManager(shiroCacheManager);
+ return securityManager;
+ }
+
+ @Bean
+ public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
+ ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
+ shiroFilterFactoryBean.setSecurityManager(securityManager);
+ Map<String, String> map = new LinkedHashMap<>();
+ // 璺緞鎷︽埅閰嶇疆
+ map.put("/system/login", "anon");
+ map.put("/system/syncLingCountData", "anon");
+ map.put("/system/wxLogin", "anon");
+ map.put("/system/wxProgramLogin", "anon");
+ map.put("/system/wxAccountLogin", "anon");
+ map.put("/system/initCompany", "anon");
+ map.put("/system/logout", "anon");
+ map.put("/common/captcha", "anon");
+ map.put("/cloud/**", "anon");
+ map.put("/statistics/**", "anon");
+ map.put("/business/hksync/push/**", "anon");
+ map.put("/business/member/empowerByList", "anon");
+ map.put("/dingding/push", "anon");
+// map.put("/ext/workorderExt/freshStatistics", "anon");
+ map.put("/dingding/jsapiTicket", "anon");
+ map.put("/dingding/ddLogin", "anon");
+ map.put("/dingding/getDingdingCorpId", "anon");
+ map.put("/lingyang/login", "anon");
+ map.put("/lingyang/loginDemo", "anon");
+ map.put("/lingyang/importBatch", "anon");
+ map.put("/edgp/**", "anon");
+ // - 鏀捐swagger
+ map.put("/doc.html", "anon");
+ map.put("/webjars/**", "anon");
+ map.put("/template/**", "anon");
+ map.put("/swagger-resources/**", "anon");
+ map.put("/v2/api-docs/**", "anon");
+ // - 鍏朵粬鎺ュ彛缁熶竴鎷︽埅
+ map.put("/**", "authc");
+ shiroFilterFactoryBean.setFilterChainDefinitionMap(map);
+ // 娣诲姞璁よ瘉杩囨护鍣�
+ Map<String, Filter> filters = new LinkedHashMap<>();
+ filters.put("authc", new ShiroAuthFilter());
+ shiroFilterFactoryBean.setFilters(filters);
+ return shiroFilterFactoryBean;
+ }
+
+ @Bean
+ public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
+ AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
+ authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
+ return authorizationAttributeSourceAdvisor;
+ }
+
+ @Bean
+ public ShiroSessionDAO getShiroSessionDAO () {
+ shiroSessionDAO.setExpireTime(sessionExpireTime);
+ return shiroSessionDAO;
+ }
+
+ @Bean
+ public ShiroRealm getShiroRealm () {
+ shiroRealm.setCredentialsMatcher(shiroCredentialsMatcher);
+ return shiroRealm;
+ }
+}
diff --git a/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroCredentialsMatcher.java b/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroCredentialsMatcher.java
new file mode 100644
index 0000000..09156e0
--- /dev/null
+++ b/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroCredentialsMatcher.java
@@ -0,0 +1,40 @@
+package com.doumee.config.shiro;
+
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.system.model.SystemUser;
+import com.doumee.service.system.SystemUserService;
+import org.apache.shiro.authc.AuthenticationInfo;
+import org.apache.shiro.authc.AuthenticationToken;
+import org.apache.shiro.authc.UsernamePasswordToken;
+import org.apache.shiro.authc.credential.HashedCredentialsMatcher;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
+
+/**
+ * Shiro瀵嗙爜姣斿澶勭悊
+ * @author Eva.Caesar Liu
+ * @date 2023/04/17 12:11
+ */
+@Component
+public class ShiroCredentialsMatcher extends HashedCredentialsMatcher {
+ @Lazy
+ @Autowired
+ private SystemUserService systemUserService;
+
+ @Override
+ public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) {
+ UsernamePasswordToken usernamePasswordToken = (UsernamePasswordToken) token;
+ SystemUser queryUserDto = new SystemUser();
+ queryUserDto.setUsername(usernamePasswordToken.getUsername());
+ queryUserDto.setDeleted(Boolean.FALSE);
+ SystemUser systemUser = systemUserService.findOne(queryUserDto);
+ if (systemUser == null) {
+ return Boolean.FALSE;
+ }
+ // 鍔犲瘑瀵嗙爜
+ String pwd = Utils.Secure.encryptPassword(new String(usernamePasswordToken.getPassword()), systemUser.getSalt());
+ // 姣旇緝瀵嗙爜
+ return this.equals(pwd, systemUser.getPassword());
+ }
+}
diff --git a/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroRealm.java b/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroRealm.java
new file mode 100644
index 0000000..690addf
--- /dev/null
+++ b/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroRealm.java
@@ -0,0 +1,84 @@
+package com.doumee.config.shiro;
+
+import com.doumee.core.model.LoginUserInfo;
+import com.doumee.dao.system.model.SystemPermission;
+import com.doumee.dao.system.model.SystemRole;
+import com.doumee.dao.system.model.SystemUser;
+import com.doumee.service.system.SystemPermissionService;
+import com.doumee.service.system.SystemRoleService;
+import com.doumee.service.system.SystemUserService;
+import org.apache.shiro.authc.AuthenticationException;
+import org.apache.shiro.authc.AuthenticationInfo;
+import org.apache.shiro.authc.AuthenticationToken;
+import org.apache.shiro.authc.SimpleAuthenticationInfo;
+import org.apache.shiro.authz.AuthorizationInfo;
+import org.apache.shiro.authz.SimpleAuthorizationInfo;
+import org.apache.shiro.realm.AuthorizingRealm;
+import org.apache.shiro.subject.PrincipalCollection;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * 鑷畾涔塕ealm锛屽鐞嗚璇佸拰鏉冮檺
+ * @author Eva.Caesar Liu
+ * @date 2023/03/21 14:49
+ */
+@Component
+public class ShiroRealm extends AuthorizingRealm {
+
+ @Lazy
+ @Autowired
+ private SystemUserService systemUserService;
+
+ @Lazy
+ @Autowired
+ private SystemRoleService systemRoleService;
+
+ @Lazy
+ @Autowired
+ private SystemPermissionService systemPermissionService;
+
+ /**
+ * 鏉冮檺澶勭悊
+ * @author Eva.Caesar Liu
+ * @date 2023/03/21 14:49
+ */
+ @Override
+ protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
+ LoginUserInfo loginUserInfo = (LoginUserInfo)principalCollection.getPrimaryPrincipal();
+ // 璁剧疆鐢ㄦ埛瑙掕壊鍜屾潈闄�
+ SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
+ authorizationInfo.addRoles(loginUserInfo.getRoles());
+ authorizationInfo.addStringPermissions(loginUserInfo.getPermissions());
+ return authorizationInfo;
+ }
+
+ /**
+ * 璁よ瘉澶勭悊
+ * @author Eva.Caesar Liu
+ * @date 2023/03/21 14:49
+ */
+ @Override
+ protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
+ // 鑾峰彇鐢ㄦ埛鍚�
+ String username = authenticationToken.getPrincipal().toString();
+ // 鏍规嵁鐢ㄦ埛鍚嶆煡璇㈢敤鎴峰璞�
+ SystemUser queryDto = new SystemUser();
+ queryDto.setUsername(username);
+ queryDto.setDeleted(Boolean.FALSE);
+ SystemUser user = systemUserService.findOne(queryDto);
+ if (user == null) {
+ return null;
+ }
+ // 鑾峰彇鐧诲綍鐢ㄦ埛淇℃伅
+ List<SystemRole> roles = systemRoleService.findByUserId(user.getId());
+ List<SystemPermission> permissions = systemPermissionService.findByUserId(user.getId());
+ LoginUserInfo userInfo = LoginUserInfo.from(user, roles, permissions);
+ // 楠岃瘉鐢ㄦ埛
+ return new SimpleAuthenticationInfo(userInfo, user.getPassword(), this.getName());
+ }
+
+}
diff --git a/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroSessionDAO.java b/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroSessionDAO.java
new file mode 100644
index 0000000..1fe90bf
--- /dev/null
+++ b/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroSessionDAO.java
@@ -0,0 +1,113 @@
+package com.doumee.config.shiro;
+
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shiro.session.Session;
+import org.apache.shiro.session.UnknownSessionException;
+import org.apache.shiro.session.mgt.SimpleSession;
+import org.apache.shiro.session.mgt.eis.SessionDAO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+ * 鑷畾涔塖hiro SessionDAO锛屽皢浼氳瘽淇℃伅瀛樺叆缂撳瓨涓�
+ * @author Eva.Caesar Liu
+ * @date 2023/04/17 12:11
+ */
+@Data
+@Slf4j
+@Component
+public class ShiroSessionDAO implements SessionDAO {
+
+ private static final String KEY_PREFIX = "shiro:session:";
+
+ @Autowired
+ private ShiroCache shiroCache;
+
+ private int expireTime = 60 * 60 * 24;
+
+ @Autowired
+ private ShiroTokenManager shiroTokenManager;
+
+ @Override
+ public Serializable create(Session session) {
+ if (session == null) {
+ log.error("session is null");
+ throw new UnknownSessionException("session is null");
+ }
+ Serializable sessionId = shiroTokenManager.build();
+ ((SimpleSession)session).setId(sessionId);
+ this.saveSession(session);
+ return sessionId;
+ }
+
+ @Override
+ public Session readSession(Serializable sessionId) throws UnknownSessionException{
+ if (sessionId == null) {
+ log.warn("session id is null");
+ return null;
+ }
+ if (sessionId instanceof String) {
+ // 瀵筍essionId杩涜楠岃瘉锛堝彲鐢ㄤ簬闃叉Session鎹曡幏銆佹毚鍔涙崟鎹夌瓑涓�绯诲垪瀹夊叏闂锛屾渶缁堝畨鍏ㄦ�у彇鍐充簬check濡備綍瀹炵幇锛�
+ shiroTokenManager.check((String) sessionId);
+ }
+ log.debug("read session from cache");
+ Session session = getSessionFromCache(sessionId);
+ if (session == null) {
+ throw new UnknownSessionException("There is no session with id [" + sessionId + "]");
+ }
+ return session;
+ }
+
+ @Override
+ public void update(Session session) throws UnknownSessionException {
+ this.saveSession(session);
+ }
+
+ @Override
+ public void delete(Session session) {
+ if (session != null && session.getId() != null) {
+ shiroCache.remove(KEY_PREFIX + session.getId());
+ }
+ }
+
+ @Override
+ public Collection<Session> getActiveSessions() {
+ Set<Session> sessions = new HashSet<>();
+ Set<Object> keys = shiroCache.keys();
+ if (keys != null && keys.size() > 0) {
+ Iterator iter = keys.iterator();
+ while(iter.hasNext()) {
+ sessions.add((Session) shiroCache.get(iter.next()));
+ }
+ }
+ return sessions;
+ }
+
+ private void saveSession(Session session) throws UnknownSessionException {
+ if (session == null || session.getId() == null) {
+ log.error("session or session id is null");
+ throw new UnknownSessionException("session or session id is null");
+ }
+ shiroCache.put(KEY_PREFIX + session.getId(), (SimpleSession)session, expireTime);
+ }
+
+ private Session getSessionFromCache (Serializable sessionId) {
+ Serializable object = shiroCache.get(KEY_PREFIX + sessionId);
+ Session session = null;
+ if (object != null) {
+ session = (Session)shiroCache.get(KEY_PREFIX + sessionId);
+ }
+ return session;
+ }
+
+ public void setExpireTime (int expireTime) {
+ this.expireTime = expireTime;
+ }
+}
diff --git a/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroSessionManager.java b/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroSessionManager.java
new file mode 100644
index 0000000..32b0379
--- /dev/null
+++ b/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroSessionManager.java
@@ -0,0 +1,85 @@
+package com.doumee.config.shiro;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shiro.session.Session;
+import org.apache.shiro.session.mgt.DefaultSessionManager;
+import org.apache.shiro.session.mgt.SessionContext;
+import org.apache.shiro.session.mgt.SessionKey;
+import org.apache.shiro.web.servlet.Cookie;
+import org.apache.shiro.web.servlet.ShiroHttpServletRequest;
+import org.apache.shiro.web.servlet.SimpleCookie;
+import org.apache.shiro.web.session.mgt.WebSessionManager;
+import org.apache.shiro.web.util.WebUtils;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.Serializable;
+
+/**
+ * 鑷畾涔変細璇濈鐞嗗櫒
+ * @author Eva.Caesar Liu
+ * @date 2023/04/17 12:11
+ */
+@Slf4j
+public class ShiroSessionManager extends DefaultSessionManager implements WebSessionManager {
+
+ private static final String AUTH_TOKEN = "eva-auth-token";
+
+ @Override
+ protected void onStart(Session session, SessionContext context) {
+ super.onStart(session, context);
+ if (!WebUtils.isHttp(context)) {
+ log.debug("SessionContext argument is not Http compatible or does not have an Http request/response pair. No session ID cookie will be set.");
+ return;
+ }
+ HttpServletRequest request = WebUtils.getHttpRequest(context);
+ HttpServletResponse response = WebUtils.getHttpResponse(context);
+ Serializable sessionId = session.getId();
+ this.storeSessionId(sessionId, request, response);
+ request.removeAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID_SOURCE);
+ request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_IS_NEW, Boolean.TRUE);
+ }
+
+ @Override
+ public Serializable getSessionId(SessionKey key) {
+ Serializable sessionId = super.getSessionId(key);
+ if (sessionId == null && WebUtils.isWeb(key)) {
+ ServletRequest servletRequest = WebUtils.getRequest(key);
+ if (!(servletRequest instanceof HttpServletRequest)) {
+ log.trace("Can not get sessionId from header, the request is not HttpServletRequest");
+ return null;
+ }
+ HttpServletRequest request = (HttpServletRequest) servletRequest;
+ // 浠巆ookie涓幏鍙栬璇�
+ javax.servlet.http.Cookie[] cookies = request.getCookies();
+ if (cookies != null) {
+ for (javax.servlet.http.Cookie cookie : cookies) {
+ if (AUTH_TOKEN.equals(cookie.getName())) {
+ return cookie.getValue();
+ }
+ }
+ }
+ // 浠巋eader涓幏鍙栬璇�
+ return request.getHeader(AUTH_TOKEN);
+ }
+ return sessionId;
+ }
+ @Override
+ public boolean isServletContainerSessions() {
+ return false;
+ }
+
+ private void storeSessionId(Serializable currentId, HttpServletRequest request, HttpServletResponse response) {
+ if (currentId == null) {
+ String msg = "sessionId cannot be null when persisting for subsequent requests.";
+ throw new IllegalArgumentException(msg);
+ }
+ Cookie cookie = new SimpleCookie(AUTH_TOKEN);
+ cookie.setHttpOnly(false);
+ String idString = currentId.toString();
+ cookie.setValue(idString);
+ cookie.saveTo(request, response);
+ log.trace("Set session ID cookie for session with id {}", idString);
+ }
+}
diff --git a/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroSessionSerializer.java b/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroSessionSerializer.java
new file mode 100644
index 0000000..d334adf
--- /dev/null
+++ b/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroSessionSerializer.java
@@ -0,0 +1,36 @@
+package com.doumee.config.shiro;
+
+import org.apache.commons.lang3.SerializationUtils;
+import org.apache.shiro.codec.Base64;
+import org.springframework.data.redis.serializer.RedisSerializer;
+import org.springframework.data.redis.serializer.SerializationException;
+
+import java.io.Serializable;
+import java.nio.charset.StandardCharsets;
+
+/**
+ * Session搴忓垪鍖�
+ * @author Eva.Caesar Liu
+ * @date 2023/04/17 12:11
+ */
+public class ShiroSessionSerializer implements RedisSerializer<Serializable> {
+
+ @Override
+ public byte[] serialize(Serializable obj) throws SerializationException {
+ if (obj == null) {
+ return new byte[0];
+ }
+ String sessionBase64 = Base64.encodeToString(SerializationUtils.serialize(obj));
+ return sessionBase64.getBytes(StandardCharsets.UTF_8);
+ }
+
+ @Override
+ public Serializable deserialize(byte[] bytes) throws SerializationException {
+ if (bytes == null || bytes.length == 0) {
+ return null;
+ }
+ String sessionString = new String(bytes, StandardCharsets.UTF_8);
+ byte[] sessionBytes = Base64.decode(sessionString);
+ return SerializationUtils.deserialize(sessionBytes);
+ }
+}
diff --git a/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroToken.java b/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroToken.java
new file mode 100644
index 0000000..4a27415
--- /dev/null
+++ b/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroToken.java
@@ -0,0 +1,80 @@
+package com.doumee.config.shiro;
+
+import com.doumee.core.model.LoginUserInfo;
+import org.apache.shiro.authc.UsernamePasswordToken;
+import org.springframework.stereotype.Component;
+
+/**
+ * 鑷畾涔塗oken 锛屽鐞嗚璇佸拰鏉冮檺
+ * @author Eva.Caesar Liu
+ * @date 2022/04/18 18:12
+ */
+@Component
+public class ShiroToken extends UsernamePasswordToken {
+
+ /**
+ * 鍏徃ID
+ */
+ Integer companyId;
+ Boolean isDdLogin;
+ Boolean isWxLogin;
+ LoginUserInfo updateUser;
+
+ int updateFlag;
+
+ public ShiroToken() {
+ }
+ public ShiroToken(Integer companyId, String username, String password, boolean isDdLogin, boolean isWxLogin) {
+ super(username, password, false, (String)null);
+ this.companyId = companyId;
+ this.isDdLogin = isDdLogin;
+ this.isWxLogin = isWxLogin;
+ }
+ public ShiroToken(LoginUserInfo user,int updateFlag) {
+ super(user.getUsername(), "", false, (String)null);
+ this.updateUser = user;
+ this.updateFlag = updateFlag;
+ this.isDdLogin = true;
+ }
+
+ public Boolean getDdLogin() {
+ return isDdLogin;
+ }
+
+ public void setDdLogin(Boolean ddLogin) {
+ isDdLogin = ddLogin;
+ }
+
+
+ public Boolean getWxLogin() {
+ return isWxLogin;
+ }
+
+ public void setWxLogin(Boolean wxLogin) {
+ isWxLogin = wxLogin;
+ }
+
+ public Integer getCompanyId() {
+ return companyId;
+ }
+
+ public void setCompanyId(Integer companyId) {
+ this.companyId = companyId;
+ }
+
+ public LoginUserInfo getUpdateUser() {
+ return updateUser;
+ }
+
+ public void setUpdateUser(LoginUserInfo updateUser) {
+ this.updateUser = updateUser;
+ }
+
+ public int getUpdateFlag() {
+ return updateFlag;
+ }
+
+ public void setUpdateFlag(int updateFlag) {
+ this.updateFlag = updateFlag;
+ }
+}
diff --git a/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroTokenManager.java b/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroTokenManager.java
new file mode 100644
index 0000000..ba35da6
--- /dev/null
+++ b/server/system_gateway/src/main/java/com/doumee/config/shiro/ShiroTokenManager.java
@@ -0,0 +1,25 @@
+package com.doumee.config.shiro;
+
+import com.doumee.core.exception.UnSafeSessionException;
+import org.springframework.stereotype.Component;
+
+import java.util.UUID;
+
+/**
+ * 榛樿Token绠$悊鍣�
+ * @author Eva.Caesar Liu
+ * @date 2023/04/17 12:11
+ */
+@Component
+public class ShiroTokenManager {
+
+ String build() {
+ return UUID.randomUUID().toString();
+ }
+
+ void check(String token) throws UnSafeSessionException {
+ if (token == null || token.length() != 36) {
+ throw new UnSafeSessionException();
+ }
+ }
+}
diff --git a/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerConfig.java b/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerConfig.java
new file mode 100644
index 0000000..1a237ee
--- /dev/null
+++ b/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerConfig.java
@@ -0,0 +1,123 @@
+package com.doumee.config.swagger;
+
+import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
+import com.google.common.base.Function;
+import com.google.common.base.Optional;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import springfox.documentation.RequestHandler;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.oas.annotations.EnableOpenApi;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+
+import java.util.function.Predicate;
+
+/**
+ * Swagger閰嶇疆
+ * @author Eva.Caesar Liu
+ * @date 2022/03/11 10:24
+ */
+@Configuration
+@EnableOpenApi
+@EnableKnife4j
+public class SwaggerConfig {
+
+ @Value("${swagger.host:}")
+ private String host;
+
+ @Value("${swagger.title:鎺ュ彛鏂囨。}")
+ private String title;
+
+ @Value("${swagger.description:}")
+ private String description;
+
+ @Value("${project.version:}")
+ private String version;
+
+ @Bean
+ public ApiInfo getApiInfo() {
+ return new ApiInfoBuilder()
+ .title(title)
+ .description(description)
+ .version(version)
+ .build();
+ }
+ @Bean
+ public Docket getDocket() {
+ return new Docket(DocumentationType.SWAGGER_2)
+ .apiInfo(this.getApiInfo()).groupName("銆愮郴缁熺鐞嗘帴鍙PI銆�")
+ .host(host)
+ .select()
+ .apis( basePackage("com.doumee.api.system;"))
+ // 璁剧疆闇�瑕佽鎵弿鐨勭被锛岃繖閲岃缃负娣诲姞浜咢Api娉ㄨВ鐨勭被
+// .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
+ .paths(PathSelectors.any())
+ .build();
+ }
+ @Bean
+ public Docket getDocket2() {
+ return new Docket(DocumentationType.SWAGGER_2)
+ .apiInfo(this.getApiInfo()).groupName("銆愪笟鍔$鐞嗘帴鍙PI銆�")
+ .host(host)
+ .select()
+ .apis( basePackage("com.doumee.api.business;"))
+ // 璁剧疆闇�瑕佽鎵弿鐨勭被锛岃繖閲岃缃负娣诲姞浜咢Api娉ㄨВ鐨勭被
+// .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
+ .paths(PathSelectors.any())
+ .build();
+ }
+ @Bean
+ public Docket getDocket4() {
+ return new Docket(DocumentationType.SWAGGER_2)
+ .apiInfo(this.getApiInfo()).groupName("銆愬畾鏃朵换鍔℃帴鍙PI銆�")
+ .host(host)
+ .select()
+ .apis( basePackage("com.doumee.api.timer;"))
+ // 璁剧疆闇�瑕佽鎵弿鐨勭被锛岃繖閲岃缃负娣诲姞浜咢Api娉ㄨВ鐨勭被
+// .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
+ .paths(PathSelectors.any())
+ .build();
+ }
+ @Bean
+ public Docket getDocket1() {
+ return new Docket(DocumentationType.SWAGGER_2)
+ .apiInfo(this.getApiInfo()).groupName("銆愬叕鍏辨帴鍙PI銆�")
+ .host(host)
+ .select()
+ .apis( basePackage("com.doumee.api.common"))
+ // 璁剧疆闇�瑕佽鎵弿鐨勭被锛岃繖閲岃缃负娣诲姞浜咢Api娉ㄨВ鐨勭被
+// .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
+ .paths(PathSelectors.any())
+ .build();
+ }
+ /**
+ * 閲嶅啓basePackage鏂规硶锛屼娇鑳藉瀹炵幇澶氬寘璁块棶锛屽鍒惰创涓婂幓
+ * @author teavamc
+ * @date 2019/1/26
+ * @return com.google.common.base.Predicate<springfox.documentation.RequestHandler>
+ */
+ public static Predicate<RequestHandler> basePackage(String basePackage) {
+ return input -> declaringClass(input).transform(handlerPackage(basePackage)).or(true);
+ }
+
+ private static Function<Class<?>, Boolean> handlerPackage(String basePackage) {
+ return input -> {
+ // 寰幆鍒ゆ柇鍖归厤
+ for (String strPackage : basePackage.split(";")) {
+ boolean isMatch = input.getPackage().getName().startsWith(strPackage);
+ if (isMatch) {
+ return true;
+ }
+ }
+ return false;
+ };
+ }
+
+ private static Optional<? extends Class<?>> declaringClass(RequestHandler input) {
+ return Optional.fromNullable(input.declaringClass());
+ }
+}
diff --git a/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerInterceptor.java b/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerInterceptor.java
new file mode 100644
index 0000000..8fd55c6
--- /dev/null
+++ b/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerInterceptor.java
@@ -0,0 +1,45 @@
+package com.doumee.config.swagger;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * Swagger鎷︽埅鍣�
+ * @author Eva.Caesar Liu
+ * @date 2022/04/18 18:12
+ */
+@Slf4j
+@Component
+public class SwaggerInterceptor implements HandlerInterceptor {
+
+ @Value("${swagger.enabled:false}")
+ private Boolean enabledSwagger;
+
+ @Value("${swagger.redirect-uri:/}")
+ private String redirectUri;
+
+ @Override
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
+ if (!enabledSwagger) {
+ String uri = request.getContextPath();
+ if (StringUtils.isNotBlank(redirectUri))
+ uri = request.getContextPath() + redirectUri;
+ if (StringUtils.isBlank(uri))
+ uri = "/";
+ try {
+ response.sendRedirect(uri);
+ } catch (IOException e) {
+ log.error(String.format("Redirect to '%s' for swagger throw an exception : %s", uri, e.getMessage()), e);
+ }
+ return Boolean.FALSE;
+ }
+ return Boolean.TRUE;
+ }
+}
diff --git a/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerInterceptorConfig.java b/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerInterceptorConfig.java
new file mode 100644
index 0000000..f67e9a8
--- /dev/null
+++ b/server/system_gateway/src/main/java/com/doumee/config/swagger/SwaggerInterceptorConfig.java
@@ -0,0 +1,23 @@
+package com.doumee.config.swagger;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+/**
+ * Swagger鎷︽埅鍣ㄩ厤缃�
+ * @author Eva.Caesar Liu
+ * @date 2022/04/18 18:12
+ */
+@Configuration
+public class SwaggerInterceptorConfig implements WebMvcConfigurer {
+
+ @Autowired
+ private SwaggerInterceptor swaggerInterceptor;
+
+ @Override
+ public void addInterceptors(InterceptorRegistry registry) {
+ registry.addInterceptor(swaggerInterceptor).addPathPatterns("/swagger-ui.html", "/doc.html");
+ }
+}
diff --git a/server/system_gateway/src/main/resources/application.yml b/server/system_gateway/src/main/resources/application.yml
index 076be11..d1e7a41 100644
--- a/server/system_gateway/src/main/resources/application.yml
+++ b/server/system_gateway/src/main/resources/application.yml
@@ -25,6 +25,7 @@
enabled: true
main:
allow-circular-references: true
+# web-application-type: reactive
# MyBatis閰嶇疆
mybatis-plus:
mapper-locations: classpath*:/mappers/**/*.xml
diff --git a/server/visits/dmvisit_service/db/business.approve.permissions.sql b/server/visits/dmvisit_service/db/business.approve.permissions.sql
new file mode 100644
index 0000000..65eb0f1
--- /dev/null
+++ b/server/visits/dmvisit_service/db/business.approve.permissions.sql
@@ -0,0 +1,6 @@
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:approve:create', '鏂板缓瀹℃壒淇℃伅璁板綍琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:approve:delete', '鍒犻櫎瀹℃壒淇℃伅璁板綍琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:approve:update', '淇敼瀹℃壒淇℃伅璁板綍琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:approve:query', '鏌ヨ瀹℃壒淇℃伅璁板綍琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:approve:exportExcel', '瀵煎嚭瀹℃壒淇℃伅璁板綍琛�(Excel)', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
diff --git a/server/visits/dmvisit_service/db/business.device.permissions.sql b/server/visits/dmvisit_service/db/business.device.permissions.sql
new file mode 100644
index 0000000..1ff2fca
--- /dev/null
+++ b/server/visits/dmvisit_service/db/business.device.permissions.sql
@@ -0,0 +1,6 @@
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:device:create', '鏂板缓璁惧淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:device:delete', '鍒犻櫎璁惧淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:device:update', '淇敼璁惧淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:device:query', '鏌ヨ璁惧淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:device:exportExcel', '瀵煎嚭璁惧淇℃伅琛�(Excel)', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
diff --git a/server/visits/dmvisit_service/db/business.device_event.permissions.sql b/server/visits/dmvisit_service/db/business.device_event.permissions.sql
new file mode 100644
index 0000000..3a0f26d
--- /dev/null
+++ b/server/visits/dmvisit_service/db/business.device_event.permissions.sql
@@ -0,0 +1,6 @@
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:deviceevent:create', '鏂板缓闂ㄧ浜嬩欢鎺ㄩ�佽褰曡〃', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:deviceevent:delete', '鍒犻櫎闂ㄧ浜嬩欢鎺ㄩ�佽褰曡〃', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:deviceevent:update', '淇敼闂ㄧ浜嬩欢鎺ㄩ�佽褰曡〃', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:deviceevent:query', '鏌ヨ闂ㄧ浜嬩欢鎺ㄩ�佽褰曡〃', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:deviceevent:exportExcel', '瀵煎嚭闂ㄧ浜嬩欢鎺ㄩ�佽褰曡〃(Excel)', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
diff --git a/server/visits/dmvisit_service/db/business.empower.permissions.sql b/server/visits/dmvisit_service/db/business.empower.permissions.sql
new file mode 100644
index 0000000..0cfc7b4
--- /dev/null
+++ b/server/visits/dmvisit_service/db/business.empower.permissions.sql
@@ -0,0 +1,6 @@
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:empower:create', '鏂板缓浜哄憳鎺堟潈瀵煎叆璁板綍', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:empower:delete', '鍒犻櫎浜哄憳鎺堟潈瀵煎叆璁板綍', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:empower:update', '淇敼浜哄憳鎺堟潈瀵煎叆璁板綍', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:empower:query', '鏌ヨ浜哄憳鎺堟潈瀵煎叆璁板綍', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:empower:exportExcel', '瀵煎嚭浜哄憳鎺堟潈瀵煎叆璁板綍(Excel)', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
diff --git a/server/visits/dmvisit_service/db/business.problem_log.permissions.sql b/server/visits/dmvisit_service/db/business.problem_log.permissions.sql
new file mode 100644
index 0000000..97893c4
--- /dev/null
+++ b/server/visits/dmvisit_service/db/business.problem_log.permissions.sql
@@ -0,0 +1,6 @@
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:problemlog:create', '鏂板缓璁垮绛旈璁板綍琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:problemlog:delete', '鍒犻櫎璁垮绛旈璁板綍琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:problemlog:update', '淇敼璁垮绛旈璁板綍琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:problemlog:query', '鏌ヨ璁垮绛旈璁板綍琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:problemlog:exportExcel', '瀵煎嚭璁垮绛旈璁板綍琛�(Excel)', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
diff --git a/server/visits/dmvisit_service/db/business.retention.permissions.sql b/server/visits/dmvisit_service/db/business.retention.permissions.sql
new file mode 100644
index 0000000..22de20f
--- /dev/null
+++ b/server/visits/dmvisit_service/db/business.retention.permissions.sql
@@ -0,0 +1,6 @@
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:retention:create', '鏂板缓鍦ㄥ巶浜哄憳淇℃伅 琛紙婊炵暀锛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:retention:delete', '鍒犻櫎鍦ㄥ巶浜哄憳淇℃伅 琛紙婊炵暀锛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:retention:update', '淇敼鍦ㄥ巶浜哄憳淇℃伅 琛紙婊炵暀锛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:retention:query', '鏌ヨ鍦ㄥ巶浜哄憳淇℃伅 琛紙婊炵暀锛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:retention:exportExcel', '瀵煎嚭鍦ㄥ巶浜哄憳淇℃伅 琛紙婊炵暀锛�(Excel)', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java b/server/visits/dmvisit_service/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java
new file mode 100644
index 0000000..abf47d7
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java
@@ -0,0 +1,178 @@
+/**
+ * Copyright 2018-2020 stylefeng & fengshuonan (sn93@qq.com)
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.doumee.config.Jwt;
+
+
+import io.jsonwebtoken.*;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * <p>鍚庡彴绯荤粺jwt token宸ュ叿绫�</p>
+ * <pre>
+ * jwt鐨刢laim閲屼竴鑸寘鍚互涓嬪嚑绉嶆暟鎹�:
+ * 1. iss -- token鐨勫彂琛岃��
+ * 2. sub -- 璇WT鎵�闈㈠悜鐨勭敤鎴�
+ * 3. aud -- 鎺ユ敹璇WT鐨勪竴鏂�
+ * 4. exp -- token鐨勫け鏁堟椂闂�
+ * 5. nbf -- 鍦ㄦ鏃堕棿娈典箣鍓�,涓嶄細琚鐞�
+ * 6. iat -- jwt鍙戝竷鏃堕棿
+ * 7. jti -- jwt鍞竴鏍囪瘑,闃叉閲嶅浣跨敤
+ * </pre>
+ *
+ * @author fengshuonan
+ * @Date 2017/8/25 10:59
+ */
+public class JwtTokenUtil {
+ //Header 鍚嶇О
+ 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澶�
+ private static final long expire = 86400L;
+
+ /**
+ * 鐢熸垚token,鏍规嵁userId鍜岄粯璁よ繃鏈熸椂闂�
+ */
+ public static String generateToken(JwtPayLoad jwtPayLoad) {
+ Long expiredSeconds = getExpireSeconds();
+ final Date expirationDate = new Date(System.currentTimeMillis() + expiredSeconds * 1000);
+ return generateToken(jwtPayLoad.getMemberId(), expirationDate, jwtPayLoad.toMap());
+ }
+
+ /**
+ * 楠岃瘉token鏄惁澶辨晥
+ */
+ public static Boolean isTokenExpired(String token) {
+ try {
+ final Date expiration = getExpirationDateFromToken(token);
+ return expiration.before(new Date());
+ } catch (ExpiredJwtException expiredJwtException) {
+ return true;
+ }
+ }
+
+ /**
+ * 鐢熸垚token,鏍规嵁userId鍜岄粯璁よ繃鏈熸椂闂�
+ */
+ public static String generateTokenOld(JwtPayLoad jwtPayLoad) {
+ Long expiredSeconds = getExpireSeconds();
+ final Date expirationDate = new Date(System.currentTimeMillis() + expiredSeconds * 1000);
+ return generateToken(jwtPayLoad.getMemberId(), expirationDate, jwtPayLoad.toMap());
+ }
+
+ /**
+ * 鑾峰彇jwt鐨刾ayload閮ㄥ垎
+ */
+ public static JwtPayLoad getJwtPayLoad(String token) {
+ Claims claimFromToken = getClaimFromToken(token);
+ return JwtPayLoad.toBean(claimFromToken);
+ }
+
+ /**
+ * 瑙f瀽token鏄惁姝g‘(true-姝g‘, false-閿欒)
+ */
+ public static Boolean checkToken(String token) {
+ try {
+ String jwtSecret = getJwtSecret();
+ Jwts.parser().setSigningKey(jwtSecret).parseClaimsJws(token).getBody();
+ return true;
+ } catch (JwtException e) {
+ return false;
+ }
+ }
+
+ /**
+ * 楠岃瘉token鏄惁澶辨晥
+ */
+ public static Boolean isTokenExpiredOld(String token) {
+ try {
+ final Date expiration = getExpirationDateFromToken(token);
+ return expiration.before(new Date());
+ } catch (ExpiredJwtException expiredJwtException) {
+ return true;
+ }
+ }
+
+ // 浠巘oken涓幏鍙栫敤鎴稩D
+ public static String getUserId(String token){
+ return getClaimFromToken(token).getSubject();
+ }
+
+ /**
+ * 鑾峰彇jwt澶辨晥鏃堕棿
+ */
+ public static Date getExpirationDateFromToken(String token) {
+ return getClaimFromToken(token).getExpiration();
+ }
+
+ /**
+ * 鐢熸垚token,鏍规嵁userId鍜岃繃鏈熸椂闂�
+ */
+ public static String generateToken(String userId, Date exppiredDate, Map<String, Object> claims) {
+
+ final Date createdDate = new Date();
+ String secret = getJwtSecret();
+
+ if (claims == null) {
+ return Jwts.builder()
+ .setSubject(userId.toString())
+ .setIssuedAt(createdDate)
+ .setExpiration(exppiredDate)
+ .signWith(SignatureAlgorithm.HS512, secret)
+ .compact();
+ } else {
+ return Jwts.builder()
+ .setClaims(claims)
+ .setSubject(userId.toString())
+ .setIssuedAt(createdDate)
+ .setExpiration(exppiredDate)
+ .signWith(SignatureAlgorithm.HS512, secret)
+ .compact();
+ }
+ }
+
+ /**
+ * 鑾峰彇jwt鐨刾ayload閮ㄥ垎
+ */
+ public static Claims getClaimFromToken(String token) {
+ if (StringUtils.isBlank(token)) {
+ throw new IllegalArgumentException("token鍙傛暟涓虹┖锛�");
+ }
+ String jwtSecret = getJwtSecret();
+ return Jwts.parser().setSigningKey(jwtSecret).parseClaimsJws(token).getBody();
+ }
+
+ /**
+ * 鑾峰彇绯荤粺鍦板瘑閽�
+ */
+ private static String getJwtSecret() {
+ return jwtSecret;
+ }
+
+ /**
+ * 鑾峰彇绯荤粺鍦板瘑閽ヨ繃鏈熸椂闂达紙鍗曚綅锛氱锛�
+ */
+ private static Long getExpireSeconds() {
+ return expire;
+ }
+}
\ No newline at end of file
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/ErpConstants.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/ErpConstants.java
new file mode 100644
index 0000000..5371bad
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/ErpConstants.java
@@ -0,0 +1,8 @@
+package com.doumee.core.erp;
+
+public class ErpConstants {
+ public static String orgListUrl;
+ public static String userListUrl;
+ public static String approveUrl;
+ public static String userStatusUrl;
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/ApproveNoticeRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/ApproveNoticeRequest.java
new file mode 100644
index 0000000..d40397e
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/ApproveNoticeRequest.java
@@ -0,0 +1,31 @@
+package com.doumee.core.erp.model.openapi.request;
+
+import com.doumee.core.haikang.model.param.BaseRequst;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 鍒嗙被淇℃伅琛�
+ * @author 姹熻箘韫�
+ * @date 2023/11/23 14:03
+ */
+@Data
+@ApiModel("璁垮鐢宠瀹℃壒缁撴灉閫氱煡璇锋眰淇℃伅")
+public class ApproveNoticeRequest extends BaseRequst {
+ @ApiModelProperty(value = "瀹℃壒璁板綍鍞竴鏍囪瘑锛圗RP绔疘D锛�" ,example = "1")
+ private String id;
+ @ApiModelProperty(value = "瀹℃壒缁撴灉 0-涓嶉�氳繃 1-閫氳繃,榛樿 0" ,example = "1")
+ private Integer status;
+ @ApiModelProperty(value = "瀹℃牳鏃堕棿 yyyy-MM-dd HH:mm:ss" )
+ private String approveDate ;
+ @ApiModelProperty(value = "瀹℃牳鍚庡厑璁歌繘鍦烘椂闂� 鏍煎紡锛歽yyy-MM-dd HH:mm:ss,涓虹┖琛ㄧず淇濇寔鐢宠鏁版嵁" )
+ private Date startTime ;
+ @ApiModelProperty(value = "瀹℃壒鍚庡厑璁哥寮�鏃堕棿 鏍煎紡锛歽yyy-MM-dd HH:mm:ss,涓虹┖琛ㄧず淇濇寔鐢宠鏁版嵁" )
+ private Date endTime ;
+ @ApiModelProperty(value = "瀹℃壒鍚庡厑璁歌瀹㈤棬绂佺粍缂栫爜,澶氫釜璇蜂娇鐢ㄨ嫳鏂囬�楀彿,闅斿紑锛屽1,2,涓虹┖琛ㄧず淇濇寔鐢宠鏁版嵁" )
+ private String doors;
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/CarAuthorRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/CarAuthorRequest.java
new file mode 100644
index 0000000..f88a05c
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/CarAuthorRequest.java
@@ -0,0 +1,28 @@
+package com.doumee.core.erp.model.openapi.request;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/23 14:03
+ */
+@Data
+@ApiModel(value = "杞﹁締鎺堟潈鍋滆溅鍦鸿姹備俊鎭�" )
+public class CarAuthorRequest {
+ @ApiModelProperty(value = "浜哄憳鍞竴鏍囪瘑锛圗RP绔疘D锛夛紝濡傛灉涓虹┖锛屽垯娓呯┖杞﹁締褰掑睘浜轰俊鎭�", required = true)
+ private String userId;
+ @ApiModelProperty(value = "杞︾墝鍙�" , required = true)
+ private String carCode;
+ @ApiModelProperty(value = "鎺堟潈鏈夋晥鏈燂紙寮�濮嬫椂闂达級锛屼负绌烘椂榛樿闀挎湡鏈夋晥锛屽2023-11-24 11:39:23" )
+ private Date validStartTime;
+ @ApiModelProperty(value = "鎺堟潈鏈夋晥鏈燂紙鎴鏃堕棿锛夛紝涓虹┖鏃堕粯璁ら暱鏈熸湁鏁堬紝濡�2023-11-24 11:39:23" )
+ private Date validEndTime;
+ @ApiModelProperty(value = "鍋滆溅鍦虹粍鍞竴鏍囪瘑闆嗗悎锛堣瀹㈢ID锛�,濡傛灉涓簄ull锛屽垯娓呯┖杞﹁締鎺堟潈淇℃伅" )
+ private List<Integer> parkIdList;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/DoorEventListRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/DoorEventListRequest.java
new file mode 100644
index 0000000..575b101
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/DoorEventListRequest.java
@@ -0,0 +1,27 @@
+package com.doumee.core.erp.model.openapi.request;
+
+import com.doumee.core.haikang.model.param.BaseRequst;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/23 14:03
+ */
+@Data
+@ApiModel("闂ㄧ鍑哄叆浜嬩欢鍚屾璇锋眰淇℃伅")
+public class DoorEventListRequest extends BaseRequst {
+ @ApiModelProperty(value = "鍞竴鏍囪瘑")
+ private String eventId;
+ @ApiModelProperty(value = "濮撳悕,鏀寔妯$硦鍖归厤" )
+ private String name;
+ @ApiModelProperty(value = "韬唤璇佸彿" )
+ private String idNo;
+ @ApiModelProperty(value = "鏃堕棿鑼冨洿-寮�濮嬶紝鏍煎紡yyyy-MM-dd HH:mm:ss锛屽2023-11-24 09:17:11" )
+ private String startTime ;
+ @ApiModelProperty(value = "鏃堕棿鑼冨洿-鎴锛屾牸寮弝yyy-MM-dd HH:mm:ss锛屽2023-11-24 09:17:11" )
+ private String endTime ;
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/OrgUpdateRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/OrgUpdateRequest.java
new file mode 100644
index 0000000..8f00eb4
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/OrgUpdateRequest.java
@@ -0,0 +1,34 @@
+package com.doumee.core.erp.model.openapi.request;
+
+import com.doumee.core.haikang.model.param.BaseRequst;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/23 14:03
+ */
+@Data
+@ApiModel("缁勭粐淇℃伅鏇存柊璇锋眰淇℃伅")
+public class OrgUpdateRequest extends BaseRequst {
+ @ApiModelProperty(value = "鍞竴鏍囪瘑" ,required = true)
+ private String id;
+ @ApiModelProperty(value = "鍚嶇О" ,required = true)
+ private String name;
+ @ApiModelProperty(value = "涓婄骇缁勭粐缂栫爜")
+ private String parentId;
+ @ApiModelProperty(value = "鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�",example = "0")
+ private int isdeleted ;
+ @ApiModelProperty(value = "鐘舵�� 0鍚敤 1绂佺敤",example = "0")
+ private int status ;
+ @ApiModelProperty(value = "鏇存柊鏃堕棿,濡�2023-11-24 09:47:36")
+ private Date editDate;
+ @ApiModelProperty(value = "鑱旂郴浜哄鍚�" )
+ private String linkName;
+ @ApiModelProperty(value = "鑱旂郴鐢佃瘽" )
+ private String linkPhone;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/RoleListRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/RoleListRequest.java
new file mode 100644
index 0000000..2401cbd
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/RoleListRequest.java
@@ -0,0 +1,21 @@
+package com.doumee.core.erp.model.openapi.request;
+
+import com.doumee.core.haikang.model.param.BaseRequst;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 鍒嗙被淇℃伅琛�
+ * @author 姹熻箘韫�
+ * @date 2023/11/23 14:03
+ */
+@Data
+@ApiModel("闂ㄧ缁勬帴鍙h姹備俊鎭�")
+public class RoleListRequest extends BaseRequst {
+ @ApiModelProperty(value = "闂ㄧ缁勫敮涓�鏍囪瘑" ,example = "1")
+ private Integer id;
+ @ApiModelProperty(value = "鍚嶇О,鏀寔妯$硦鍖归厤" )
+ private String name;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/TokenRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/TokenRequest.java
new file mode 100644
index 0000000..5cc86c3
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/TokenRequest.java
@@ -0,0 +1,19 @@
+package com.doumee.core.erp.model.openapi.request;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 鍒嗙被淇℃伅琛�
+ * @author 姹熻箘韫�
+ * @date 2023/11/23 14:03
+ */
+@Data
+@ApiModel("Token鑾峰彇绫�")
+public class TokenRequest {
+ @ApiModelProperty(value = "璁块棶key" ,example = "1")
+ private String accessKey;
+ @ApiModelProperty(value = "璁块棶绉橀挜" )
+ private String accessSecret;
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/UserAuthorRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/UserAuthorRequest.java
new file mode 100644
index 0000000..058d2c1
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/UserAuthorRequest.java
@@ -0,0 +1,24 @@
+package com.doumee.core.erp.model.openapi.request;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/23 14:03
+ */
+@Data
+@ApiModel("浜哄憳闂ㄧ缁勬巿鏉冩洿鏂拌姹備俊鎭�")
+public class UserAuthorRequest {
+ @ApiModelProperty(value = "浜哄憳鍞竴鏍囪瘑锛圗RP绔疘D锛�" , required = true)
+ private String userId;
+ @ApiModelProperty(value = "鎺堟潈闂ㄧ缁勭紪鐮侀泦鍚堥棬绂佺粍鍞竴鏍囪瘑锛堣瀹㈢ID锛�,濡傛灉涓簄ull锛屽垯娓呯┖浜哄憳鎺堟潈淇℃伅" )
+ private Integer[] roleIds;
+ @ApiModelProperty(value = "鎺堟潈鏈夋晥鏈燂紙寮�濮嬫椂闂达級锛屼负绌烘椂榛樿闀挎湡鏈夋晥锛屽2023-11-24 11:39:23" )
+ private Date validStartTime;
+ @ApiModelProperty(value = "鎺堟潈鏈夋晥鏈燂紙鎴鏃堕棿锛夛紝涓虹┖鏃堕粯璁ら暱鏈熸湁鏁堬紝濡�2023-11-24 11:39:23" )
+ private Date validEndTime;
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/UserUpdateRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/UserUpdateRequest.java
new file mode 100644
index 0000000..050eb23
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/UserUpdateRequest.java
@@ -0,0 +1,53 @@
+package com.doumee.core.erp.model.openapi.request;
+
+import com.doumee.core.haikang.model.param.BaseRequst;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/23 14:03
+ */
+@Data
+@ApiModel("浜哄憳淇℃伅鏇存柊璇锋眰淇℃伅")
+public class UserUpdateRequest extends BaseRequst {
+ @ApiModelProperty(value = "鍞竴鏍囪瘑" ,required = true)
+ private String id;
+ @ApiModelProperty(value = "濮撳悕" ,required = true)
+ private String name;
+ @ApiModelProperty(value = "璇佷欢鍙�" ,required = true)
+ private String idNo;
+// @ApiModelProperty(value = "鍥哄畾杞﹁締,鍙兘缁戝畾涓�杈嗚溅" )
+// private String carNo;
+ @ApiModelProperty(value = "璇佷欢绫诲瀷 0韬唤璇� 1娓境閫氳璇� 2鎶ょ収 ,榛樿涓�0" ,required = true)
+ private int idType;
+ @ApiModelProperty(value = "璁垮鎬у埆 1-鐢� 2-濂�" ,required = true)
+ private Integer sex;
+ @ApiModelProperty(value = "鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�",example = "0")
+ private int isdeleted ;
+ @ApiModelProperty(value = "鐘舵�� 0鍚敤 1绂佺敤",example = "0")
+ private int status ;
+ @ApiModelProperty(value = "鏇存柊鏃堕棿,濡�2023-11-24 09:47:36")
+ private Date editDate;
+ @ApiModelProperty(value = "鎵�灞炵粍缁囩紪鐮�" ,required = true)
+ private String orgId;
+ @ApiModelProperty(value = "浜鸿劯鐓х墖鍦板潃" )
+ private String faceImg;
+ @ApiModelProperty(value = "宸ュ彿" ,required = true)
+ private String code;
+ @ApiModelProperty(value = "鎵嬫満鍙�" , required = true)
+ private String phone;
+ @ApiModelProperty(value = "鍗″彿闆嗗悎" )
+ private List<String> cardList;
+ //2024骞�1鏈�9鏃� 娌熼�氫笉浠庢涓氬姟瑙﹀彂
+// @ApiModelProperty(value = "鎺堟潈闂ㄧ缁勭紪鐮侀泦鍚�,銆愯瀹㈢銆戝敮涓�鏍囪瘑" ,hidden = true )
+// private Integer[] roleIds;
+ @ApiModelProperty(value = "鎺堟潈鏈夋晥鏈燂紙寮�濮嬫椂闂达級锛屼负绌烘椂榛樿闀挎湡鏈夋晥锛屽2023-11-24 11:39:23" )
+ private Date validStartTime;
+ @ApiModelProperty(value = "鎺堟潈鏈夋晥鏈燂紙鎴鏃堕棿锛夛紝涓虹┖鏃堕粯璁ら暱鏈熸湁鏁堬紝濡�2023-11-24 11:39:23" )
+ private Date validEndTime;
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/VisitListRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/VisitListRequest.java
new file mode 100644
index 0000000..96f20ba
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/VisitListRequest.java
@@ -0,0 +1,37 @@
+package com.doumee.core.erp.model.openapi.request;
+
+import com.doumee.core.haikang.model.param.BaseRequst;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/23 14:03
+ */
+@Data
+@ApiModel("璁垮鍑哄叆浜嬩欢鍚屾璇锋眰淇℃伅")
+public class VisitListRequest extends BaseRequst {
+ @ApiModelProperty(value = "鍞竴鏍囪瘑" )
+ private String eventId;
+ @ApiModelProperty(value = "璁垮鍚嶇О,鏀寔妯$硦鍖归厤" )
+ private String visitorName;
+ @ApiModelProperty(value = "璁垮韬唤璇佸彿" )
+ private String idNo;
+ @ApiModelProperty(value = "琚闂汉Id锛坋rp绔敤鎴风紪鐮侊級" )
+ private String beVisitedPersonId ;
+ @ApiModelProperty(value = "琚闂汉鎵�灞炵粍缁嘔d(erp绔粍缁囩紪鐮�)" )
+ private String beVisitedPersonOrgId ;
+ @ApiModelProperty(value = "鏉ヨ鏃堕棿鑼冨洿-寮�濮嬶紝鏍煎紡yyyy-MM-dd HH:mm:ss锛屽2023-11-24 09:17:11" )
+ private String inStartTime ;
+ @ApiModelProperty(value = "鏉ヨ鏃堕棿鑼冨洿-鎴锛屾牸寮弝yyy-MM-dd HH:mm:ss锛屽2023-11-24 09:17:11" )
+ private String inEndTime ;
+ @ApiModelProperty(value = "绂诲紑鏃堕棿鑼冨洿-寮�濮嬶紝鏍煎紡yyyy-MM-dd HH:mm:ss锛屽2023-11-24 09:17:11" )
+ private String outStartTime ;
+ @ApiModelProperty(value = "绂诲紑鏃堕棿鑼冨洿-鎴锛屾牸寮弝yyy-MM-dd HH:mm:ss锛屽2023-11-24 09:17:11" )
+ private String outEndTime ;
+ @ApiModelProperty(value = "鏉ヨ鍗曚綅,鏀寔妯$硦鍖归厤" )
+ private String visitorWorkUint ;
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/erp/UserFailRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/erp/UserFailRequest.java
new file mode 100644
index 0000000..fa678e2
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/erp/UserFailRequest.java
@@ -0,0 +1,23 @@
+package com.doumee.core.erp.model.openapi.request.erp;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/23 14:03
+ */
+@Data
+@ApiModel(value = "鍛樺伐鍚屾澶辫触鎺ㄩ�佽姹傚弬鏁�" )
+public class UserFailRequest {
+
+ @ApiModelProperty(value = "鍛樺伐id" )
+ private String userId;
+ @ApiModelProperty(value = "澶辫触绫诲瀷 0浜哄憳鍚屾澶辫触 1鏉冮檺涓嬪彂澶辫触 " )
+ private Integer type;
+
+ @ApiModelProperty(value = "澶囨敞淇℃伅锛屾弿杩板け璐ュ師鍥�")
+ private String info;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/erp/UserInfoRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/erp/UserInfoRequest.java
new file mode 100644
index 0000000..7feb315
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/request/erp/UserInfoRequest.java
@@ -0,0 +1,26 @@
+package com.doumee.core.erp.model.openapi.request.erp;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/23 14:03
+ */
+@Data
+@ApiModel(value = "鐢ㄦ埛鍩烘湰淇℃伅璇锋眰淇℃伅" )
+public class UserInfoRequest {
+ @ApiModelProperty(value = "濮撳悕" , required = true)
+ private String name;
+ @ApiModelProperty(value = "韬唤璇佸彿" , required = true)
+ private String idNo;
+ @ApiModelProperty(value = "鎵嬫満鍙�" , required = true)
+ private String phone;
+ @ApiModelProperty(value = "璁垮鎬у埆 1-鐢� 2-濂�" ,example = "1")
+ private Integer sex;
+ @ApiModelProperty(value = "浜鸿劯鐓х墖" )
+ private String faceImg;
+ @ApiModelProperty(value = "鍋ュ悍璇�" )
+ private String healthImg;
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/response/AccessTokenResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/response/AccessTokenResponse.java
new file mode 100644
index 0000000..cc086da
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/response/AccessTokenResponse.java
@@ -0,0 +1,21 @@
+package com.doumee.core.erp.model.openapi.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 鍒嗙被淇℃伅琛�
+ * @author 姹熻箘韫�
+ * @date 2023/11/23 14:03
+ */
+@Data
+@ApiModel("鎺ュ彛璋冪敤鍑瘉杩斿洖淇℃伅")
+public class AccessTokenResponse {
+
+ @ApiModelProperty(value = "璋冪敤鍑瘉" )
+ private String token;
+ @ApiModelProperty(value = "鏈夋晥鏃堕棿锛堢锛�", example = "1")
+ private long expireTime;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/response/CarEventListResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/response/CarEventListResponse.java
new file mode 100644
index 0000000..4cf8866
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/response/CarEventListResponse.java
@@ -0,0 +1,67 @@
+package com.doumee.core.erp.model.openapi.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 鍒嗙被淇℃伅琛�
+ * @author 姹熻箘韫�
+ * @date 2023/11/23 14:03
+ */
+@Data
+@ApiModel("杞﹁締鍑哄叆浜嬩欢鍚屾杩斿洖淇℃伅")
+public class CarEventListResponse {
+
+ @ApiModelProperty(value = "鍞竴鏍囪瘑" )
+ private String eventId;
+ @ApiModelProperty(value = "杩涘嚭鍦虹被鍨嬶紝0锛氳繘鍦猴紝1锛氬嚭鍦�" )
+ private Integer inoutType;
+
+ @ApiModelProperty(value = "鏄惁榛戝悕鍗曟爣璇嗭紙1-榛戝悕鍗� 0-闈為粦鍚嶅崟锛�" ,example = "1")
+ private Integer alarmCar;
+ @ApiModelProperty(value = "鏃堕棿绫诲瀷锛氶粦鍚嶅崟\t771756034\n" +
+ "杞︿綅鍗犵敤-771764225\n" +
+ "鍏ュ満鍘嬬嚎浜嬩欢-771760130\n" +
+ "鍏ュ満鏀捐浜嬩欢-771760131\n" +
+ "鍑哄満鍘嬬嚎浜嬩欢-771760133\n" +
+ "鍑哄満鏀捐浜嬩欢-771760134\n" +
+ "杞﹁締鍋滃叆杞︿綅-771764226\n" +
+ "杞﹁締绂诲紑杞︿綅-771764227" ,example = "1")
+ private Integer eventType;
+ @ApiModelProperty(value = "杞﹁締灞炴�у悕绉�" )
+ private String carAttributeName;
+ @ApiModelProperty(value = "鍗″彿" )
+ private String cardNo;
+ @ApiModelProperty(value = "浜嬩欢鍙�" )
+ private String eventCmd;
+ @ApiModelProperty(value = "鍑哄叆鍙g紪鍙�" )
+ private String gateIndex;
+ @ApiModelProperty(value = "鍑哄叆鍙e悕绉�" )
+ private String gateName;
+ @ApiModelProperty(value = "杞﹁締涓诲搧鐗�" )
+ private String mainLogo;
+ @ApiModelProperty(value = "鍋滆溅搴撶紪鐮�" ,example = "1")
+ private Integer parkId;
+ @ApiModelProperty(value = "鍋滆溅搴撳悕绉�" )
+ private String parkName;
+ @ApiModelProperty(value = "杞︾墝鍥剧墖" )
+ private String platePicUrl;
+ @ApiModelProperty(value = "杞﹁締鐓х墖" )
+ private String vehiclePicUrl;
+ @ApiModelProperty(value = "杞︾墝鍙�" )
+ private String plateNo;
+ @ApiModelProperty(value = "杞︾墝棰滆壊" )
+ private String plateColor;
+ @ApiModelProperty(value = "杞﹂亾鍚嶇О" )
+ private String roadwayName;
+ @ApiModelProperty(value = "杞﹂亾绫诲瀷 1锛氬叆鍦鸿溅閬� 2锛氬嚭鍦轰笉鏀惰垂杞﹂亾 3锛氬嚭鍦虹即璐硅溅閬� 4锛氫腑澶即璐硅溅閬�",example = "1")
+ private Integer roadwayType;
+ @ApiModelProperty(value = "杞﹁締瀛愬搧鐗�")
+ private String subLogo;
+ @ApiModelProperty(value = "瀛愬搧鐗屽勾娆�")
+ private Integer subModel;
+ @ApiModelProperty(value = "浜х敓鏃堕棿" )
+ private String createTime ;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/response/DeviceListResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/response/DeviceListResponse.java
new file mode 100644
index 0000000..80a98af
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/response/DeviceListResponse.java
@@ -0,0 +1,21 @@
+package com.doumee.core.erp.model.openapi.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 鍒嗙被淇℃伅琛�
+ * @author 姹熻箘韫�
+ * @date 2023/11/23 14:03
+ */
+@Data
+@ApiModel("闂ㄧ缁勫叧鑱旈棬绂佽繑鍥炰俊鎭�")
+public class DeviceListResponse {
+
+ @ApiModelProperty(value = "闂ㄧ璁惧鍞竴鏍囪瘑" ,example = "1")
+ private Integer id;
+ @ApiModelProperty(value = "鍚嶇О" )
+ private String name;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/response/erp/ErpOrgListResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/response/erp/ErpOrgListResponse.java
new file mode 100644
index 0000000..ca8f270
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/response/erp/ErpOrgListResponse.java
@@ -0,0 +1,35 @@
+package com.doumee.core.erp.model.openapi.response.erp;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/23 14:03
+ */
+@Data
+@ApiModel("缁勭粐淇℃伅鍚屾杩斿洖淇℃伅")
+public class ErpOrgListResponse {
+ @ApiModelProperty(value = "鍞竴鏍囪瘑" ,example = "1")
+ private String id;
+ @ApiModelProperty(value = "鍚嶇О" )
+ private String name;
+ @ApiModelProperty(value = "鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�",example = "0")
+ private int isdeleted ;
+ @ApiModelProperty(value = "鐘舵�� 0鍚敤 1绂佺敤",example = "0")
+ private int status ;
+ @ApiModelProperty(value = "鍒涘缓鏃堕棿,濡�2023-11-24 09:47:36")
+ private Date createDate;
+ @ApiModelProperty(value = "鏇存柊鏃堕棿,濡�2023-11-24 09:47:36")
+ private Date editDate;
+ @ApiModelProperty(value = "鎵�灞炵埗绾х粍缁囩紪鐮�")
+ private String parentOrgId;
+ @ApiModelProperty(value = "璐熻矗浜虹紪鐮�")
+ private String headId;
+ @ApiModelProperty(value = "缁勭粐浠g爜")
+ private String code;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/response/erp/ErpUserListResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/response/erp/ErpUserListResponse.java
new file mode 100644
index 0000000..de3685c
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/erp/model/openapi/response/erp/ErpUserListResponse.java
@@ -0,0 +1,48 @@
+package com.doumee.core.erp.model.openapi.response.erp;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/23 14:03
+ */
+@Data
+@ApiModel("浜哄憳淇℃伅鍚屾杩斿洖淇℃伅")
+public class ErpUserListResponse {
+ @ApiModelProperty(value = "鍞竴鏍囪瘑" ,example = "1")
+ private String id;
+ @ApiModelProperty(value = "濮撳悕" )
+ private String name;
+ @ApiModelProperty(value = "韬唤璇佸彿" )
+ private String idNo;
+ @ApiModelProperty(value = "璇佷欢绫诲瀷 0韬唤璇� 1娓境閫氳璇� 2鎶ょ収 ,榛樿涓�0" ,example = "0")
+ private int idType;
+ @ApiModelProperty(value = "璁垮鎬у埆 1-鐢� 2-濂�" ,example = "1")
+ private Integer sex;
+ @ApiModelProperty(value = "鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�",example = "0")
+ private int isdeleted ;
+ @ApiModelProperty(value = "鐘舵�� 0鍚敤 1绂佺敤",example = "0")
+ private int status ;
+ @ApiModelProperty(value = "鍒涘缓鏃堕棿,濡�2023-11-24 09:47:36")
+ private Date createDate;
+ @ApiModelProperty(value = "鏇存柊鏃堕棿,濡�2023-11-24 09:47:36")
+ private Date editDate;
+ @ApiModelProperty(value = "鎵�灞炵粍缁囩紪鐮�")
+ private String orgId;
+ @ApiModelProperty(value = "浜鸿劯鐓х墖鍦板潃,鍥剧墖鍏綉璁块棶鍦板潃")
+ private String faceImg;
+ @ApiModelProperty(value = "宸ュ彿")
+ private String code;
+ @ApiModelProperty(value = "鎵嬫満鍙�" , required = true)
+ private String phone;
+ @ApiModelProperty(value = "鍗″彿闆嗗悎" )
+ private List<String> cardList;
+ @ApiModelProperty(value = "鎺堟潈闂ㄧ缁勭紪鐮侀泦鍚�,銆愯瀹㈢銆戝敮涓�鏍囪瘑" )
+ private Integer[] roleIds;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKResponseCode.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKResponseCode.java
new file mode 100644
index 0000000..3bf5665
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/HKResponseCode.java
@@ -0,0 +1,52 @@
+package com.doumee.core.haikang.model;
+
+import lombok.Data;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Data
+public class HKResponseCode {
+ private Logger logger = LoggerFactory.getLogger(HKResponseCode.class);
+ //娴峰悍骞冲彴鏍规嵁鐜板満鐜閰嶇疆http杩樻槸https
+
+ /**
+ * 鍗$姸鎬�
+ */
+ public enum ReturnCode {
+
+ RESPONSE_FACE_ERROR("0x1540350c", "鍥炶皟閿欒锛氫汉鑴稿缓妯″け璐�"),
+ RESPONSE_DEVICE_NOFAVOR("0x15403016", "璁惧涓嶆敮鎸佷笅鍙�"),
+ RESPONSE_SUCCEE("0", "鎴愬姛"),
+ RESPONSE_FACE_ERROR2("0x1540350d", "鍥炶皟閿欒锛氫汉鑴哥溂闂磋窛澶皬");
+
+ // 鎴愬憳鍙橀噺
+ private String name;
+ private String key;
+
+ // 鏋勯�犳柟娉�
+ ReturnCode(String key, String name ) {
+ this.name = name;
+ this.key = key;
+ }
+
+ // get set 鏂规硶
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getKey() {
+ return key;
+ }
+
+ public void setKey(String key) {
+ this.key = key;
+ }
+
+ }
+
+}
+
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/BaseResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/BaseResponse.java
new file mode 100644
index 0000000..cb4b066
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/BaseResponse.java
@@ -0,0 +1,20 @@
+package com.doumee.core.haikang.model.param;
+
+import lombok.Data;
+
+@Data
+public class BaseResponse<T> {
+
+ private T data;
+ /**
+ * 杩斿洖鐮�
+ * 0锛氭垚鍔�
+ * 鍏朵粬锛氬け璐�
+ * 鍙傝�冮檮褰旹.other.1 璧勬簮鐩綍閿欒鐮�
+ */
+ private String code;
+ /**
+ * 鎺ュ彛鎵ц鎯呭喌璇存槑淇℃伅
+ */
+ private String msg;
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/AcsDeviceStatusListRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/AcsDeviceStatusListRequest.java
new file mode 100644
index 0000000..cb40e32
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/AcsDeviceStatusListRequest.java
@@ -0,0 +1,15 @@
+package com.doumee.core.haikang.model.param.request;
+
+import lombok.Data;
+
+@Data
+public class AcsDeviceStatusListRequest {
+ private String regionId ;// string False 鍖哄煙id , 鍒嗛〉鑾峰彇鍖哄煙鍒楄〃鎺ュ彛鍙互鑾峰彇
+ private String ip;// string False 璁惧ip锛岀敤鎴峰彲浠ヨ嚜宸辨墜鍔ㄨ緭鍏ワ紝涔熷彲浠ユ牴鎹煡璇㈤棬绂佽澶囧垪琛╲2鎺ュ彛鍙互鑾峰彇
+ private String[] indexCodes;//i string[] False 闂ㄧ璁惧鍒楄〃锛屾渶澶�500锛屾煡璇㈤棬绂佽澶囧垪琛╲2鎺ュ彛鍙互鑾峰彇
+ private String status ;//istring False 鐘舵��1: 鍦ㄧ嚎0: 绂荤嚎-1: 鏈娴�
+ private String includeSubNode;// i string False 鏄惁鍖呭惈涓嬬骇,锛堣嫢regionId涓虹┖锛屽垯璇ュ弬鏁颁笉璧蜂綔鐢級1: 鍖呭惈 0: 涓嶅寘鍚�
+ private Integer pageNo ;//integer True 椤电爜,pageNo鈮�1
+ private Integer pageSize;// integer True 鍒嗛〉澶у皬
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/AppointmentListRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/AppointmentListRequest.java
new file mode 100644
index 0000000..f2f93c2
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/AppointmentListRequest.java
@@ -0,0 +1,36 @@
+package com.doumee.core.haikang.model.param.request;
+
+import lombok.Data;
+
+@Data
+public class AppointmentListRequest {
+ private String receptionistId;// string False 琚浜哄敮涓�鏍囪瘑,鏌ヨ浜哄憳鍒楄〃v2鎺ュ彛鑾峰彇杩斿洖鎶ユ枃涓殑personId瀛楁
+ private String visitorName;// string False 璁垮濮撳悕锛岄暱搴︿笉瓒呰繃32锛屾敮鎸佷腑鑻辨枃瀛楃锛屼笉鑳藉寘鍚� 鈥� / \ : * ? " < >
+ private String phoneNo ;//string False 鑱旂郴鐢佃瘽寤鸿濉啓鎵嬫満鍙风爜
+ private String visitStartTimeBegin;// string False 鏃堕棿鍙傛暟闇�婊¤冻ISO8601鏍煎紡锛� yyyy-MM-ddTHH:mm:ss+褰撳墠鏃跺尯锛� 渚嬪鍖椾含鏃堕棿锛� 2018-07-26T15:00:00+08:00
+ private String visitStartTimeEnd ;//string False 鏃堕棿鍙傛暟闇�婊¤冻ISO8601鏍煎紡锛� yyyy-MM-ddTHH:mm:ss+褰撳墠鏃跺尯锛� 渚嬪鍖椾含鏃堕棿锛� 2018-07-26T15:00:00+08:00
+ private String visitEndTimeBegin;// string False 鏃堕棿鍙傛暟闇�婊¤冻ISO8601鏍煎紡锛� yyyy-MM-ddTHH:mm:ss+褰撳墠鏃跺尯锛� 渚嬪鍖椾含鏃堕棿锛� 2018-07-26T15:00:00+08:00
+ private String visitEndTimeEnd;// string False 鏃堕棿鍙傛暟闇�婊¤冻ISO8601鏍煎紡锛� yyyy-MM-ddTHH:mm:ss+褰撳墠鏃跺尯锛� 渚嬪鍖椾含鏃堕棿锛� 2018-07-26T15:00:00+08:00
+ private int pageNo;// integer True pageNo瑕佹眰澶т簬0涓嶈秴杩�2147483647
+ private int pageSize;// integer True pageSize瑕佹眰澶т簬0涓斾笉瓒呰繃1000
+ private String verificationCode;// string False 璁垮楠岃瘉鐮佷负璁垮绠$悊缁勪欢鎻愪緵锛岀敤浜庤瀹㈠湪璁垮鏈虹櫥璁扮殑鍑瘉
+ /**
+ * 璁垮鐘舵��,
+ * 0锛氬緟瀹℃牳锛堥绾﹀緟瀹℃壒锛夈��
+ * 1锛氭甯革紙棰勭害鎴愬姛鎴栭绾﹀鎵规垚鍔熷悗<鏈櫥璁�>锛氬綋鍓嶆椂闂存湭瓒呰繃棰勮鏉ヨ鏃堕棿锛夈��
+ * 2锛氳繜鍒帮紙棰勭害鎴愬姛鎴栭绾﹀鎵规垚鍔熷悗<鏈櫥璁�>锛氬綋鍓嶆椂闂磋秴杩囬璁℃潵璁挎椂闂达紝浣嗘湭瓒呰繃棰勮绂诲紑鏃堕棿锛夈��
+ * 3锛氬け鏁堬紙棰勭害鎴愬姛鎴栭绾﹀鎵规垚鍔熷悗<鏈櫥璁�>锛氬綋鍓嶆椂闂村凡瓒呰繃棰勮绂诲紑鏃堕棿锛夈��
+ * 4锛氬鏍搁��鍥烇紙棰勭害寰呭鎵癸紝瀹℃壒浜哄憳瀹℃壒閫�鍥烇級銆�
+ * 5锛氳秴鏈熻嚜鍔ㄧ绂伙紙瓒呮湡鏈绂昏褰曡瀹紝鐢卞悗鍙颁换鍔″畾鏃跺鐞嗙绂伙級銆�
+ * 6锛氬凡绛剧锛堣瀹㈢绂伙級銆�
+ * 7锛氳秴鏈熸湭绛剧锛堣瀹㈢櫥璁帮紝褰撳墠鏃堕棿宸茶秴杩囬璁$寮�鏃堕棿锛岃繕鏈繘琛岀绂伙級銆�
+ * 8锛氬凡鍒拌揪锛涳紙璁垮鐧昏锛屽綋鍓嶆椂闂存湭瓒呰繃棰勮绂诲紑鏃堕棿锛夈��
+ * 9锛氬鏍稿け鏁堬紙棰勭害寰呭鎵癸紝涓�鐩村埌褰撳墠鏃堕棿瓒呰繃棰勮绂诲紑鏃堕棿锛岃繕鏈鎵归�氳繃锛夈��
+ * 10锛氶個绾︿腑锛堝憳宸ュ彂璧烽個绾︼紝璁垮杩樻湭搴旈個锛夈��
+ * 11锛氶個绾﹀け鏁堬紙鍛樺伐鍙戣捣閭�绾︼紝涓�鐩村埌褰撳墠鏃堕棿瓒呰繃棰勮绂诲紑鏃堕棿锛岃瀹㈣繕鏈簲閭�锛�
+ */
+ private String visitorStatus;// integer False
+ private String QRCode ;//string False 璁垮浜岀淮鐮佸唴瀹�,鏀寔鍔ㄦ�佷簩缁寸爜鎴栬�呴潤鎬佷簩缁寸爜
+ private String orderId;// string False 棰勭害璁板綍ID锛岃瀹㈤绾2鎺ュ彛鑾峰彇杩斿洖鎶ユ枃涓殑orderId瀛楁
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/CarChargeDelRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/CarChargeDelRequest.java
new file mode 100644
index 0000000..af0e117
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/CarChargeDelRequest.java
@@ -0,0 +1,10 @@
+package com.doumee.core.haikang.model.param.request;
+
+import lombok.Data;
+
+@Data
+public class CarChargeDelRequest {
+
+ private String parkSyscode;// string False 鍋滆溅搴撳敮涓�鏍囪瘑,涓虹┖鏃跺垯鍙栨秷褰撳墠杞﹁締鎵�鏈夊仠杞﹀簱鐨勫寘鏈燂紝鍙�氳繃鑾峰彇鍋滆溅搴撳垪琛ㄦ帴鍙h幏鍙�
+ private String plateNo;// string True 杞︾墝鍙风爜
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/CardDeletionRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/CardDeletionRequest.java
new file mode 100644
index 0000000..4ca9add
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/CardDeletionRequest.java
@@ -0,0 +1,10 @@
+package com.doumee.core.haikang.model.param.request;
+
+import lombok.Data;
+
+@Data
+public class CardDeletionRequest {
+
+ private String cardNumber;// string True 鍗″彿锛屾牴鎹幏鍙栧崱鐗囧垪琛ㄦ帴鍙h幏鍙栬繑鍥炲弬鏁癱ardNo
+ private String personId ;//string True 浜哄憳Id锛岃幏鍙栦汉鍛樺垪琛╲2 鎺ュ彛鑾峰彇杩斿洖鍙傛暟personId
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/CardLossRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/CardLossRequest.java
new file mode 100644
index 0000000..35d149a
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/CardLossRequest.java
@@ -0,0 +1,10 @@
+package com.doumee.core.haikang.model.param.request;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class CardLossRequest {
+ private List<CardDeletionRequest> cardList;// object[] True 浜哄崱鍏宠仈缁撳悎鏁扮粍(鎵归噺鎸傚け鏁伴噺涓嶈兘瓒呰繃200涓�)
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/DevicePictureRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/DevicePictureRequest.java
new file mode 100644
index 0000000..0c2112d
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/DevicePictureRequest.java
@@ -0,0 +1,10 @@
+package com.doumee.core.haikang.model.param.request;
+
+import lombok.Data;
+
+@Data
+public class DevicePictureRequest {
+
+ private String svrIndexCode ;// string True 鎻愪緵picUri澶勪細鎻愪緵姝ゅ瓧娈�
+ private String picUri ;// string True 鍥剧墖鐩稿鍦板潃
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/EventSubRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/EventSubRequest.java
new file mode 100644
index 0000000..152ed4e
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/EventSubRequest.java
@@ -0,0 +1,14 @@
+package com.doumee.core.haikang.model.param.request;
+
+import lombok.Data;
+
+@Data
+public class EventSubRequest {
+
+ private String name ;//string False 鍚嶇О锛屾ā绯婃悳绱紝鏈�澶ч暱搴�32锛岃嫢鍖呭惈涓枃锛屾渶澶ч暱搴︽寚涓嶈秴杩囨寜鐓ф寚瀹氱紪鐮佺殑瀛楄妭闀垮害锛屽嵆getBytes(鈥渦tf-8鈥�).length
+ private Integer[] eventTypes;// number[] True 浜嬩欢绫诲瀷,璇﹁闄勫綍D
+ private String eventDest;// string True 鎸囧畾浜嬩欢鎺ユ敹鐨勫湴鍧�锛岄噰鐢╮estful鍥炶皟妯″紡锛屾敮鎸乭ttp鍜宧ttps锛屾牱寮忓涓嬶細http://ip:port/eventRcv鎴栬�卙ttps://ip:port/eventRcv涓嶈秴杩�1024涓瓧绗︿簨浠舵帴鏀跺湴鍧�鐢卞簲鐢ㄦ柟璐熻矗鎸夋寚瀹氱殑瑙勮寖鎻愪緵锛屼簨浠舵帴鏀舵帴鍙d笉闇�瑕佽璇佷笁鏂瑰鎴锋敹鍒版秷鎭紝璇锋敞鎰忕珛鍗宠繑鍥濰TTP/1.1 200 OK锛� 鍚﹀垯鍥犱负鎺ユ敹澶參锛屽鑷翠簨浠剁Н鍘�
+ private Integer[] subType;// number False 璁㈤槄绫诲瀷锛�0-璁㈤槄鍘熷浜嬩欢锛�1-鑱斿姩浜嬩欢锛�2-鍘熷浜嬩欢鍜岃仈鍔ㄤ簨浠讹紝涓嶅~浣跨敤榛樿鍊�0
+ private Integer[] eventLvl;// number[] False 浜嬩欢绛夌骇锛�0-鏈厤缃紝1-浣庯紝2-涓紝3-楂� 姝ゅ浜嬩欢绛夌骇鏄寚鍦ㄤ簨浠惰仈鍔ㄤ腑閰嶇疆鐨勭瓑绾ц闃呯被鍨嬩负0鏃讹紝姝ゅ弬鏁版棤鏁堬紝浣跨敤榛樿鍊�0鍦ㄨ闃呯被鍨嬩负1鏃讹紝涓嶅~浣跨敤榛樿鍊糩1,2,3] 鍦ㄨ闃呯被鍨嬩负2鏃讹紝涓嶅~浣跨敤榛樿鍊糩0,1,2,3]鏁扮粍澶у皬涓嶈秴杩�32锛屼簨浠剁瓑绾уぇ灏忎笉瓒呰繃31
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/OrgDelRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/OrgDelRequest.java
new file mode 100644
index 0000000..bb5f4d7
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/OrgDelRequest.java
@@ -0,0 +1,8 @@
+package com.doumee.core.haikang.model.param.request;
+
+import lombok.Data;
+
+@Data
+public class OrgDelRequest {
+ private String[] indexCodes;// string[] True 寰呭垹闄ょ殑缁勭粐indexCode鍒楄〃锛屽崟娆℃彁浜や笂闄愪负1000鏉� 浠庤幏鍙栫粍缁囧垪琛� 鎺ュ彛鑾峰彇杩斿洖鍙傛暟orgIndexCode
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/ParkReservationDelRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/ParkReservationDelRequest.java
new file mode 100644
index 0000000..a9c1a39
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/ParkReservationDelRequest.java
@@ -0,0 +1,11 @@
+package com.doumee.core.haikang.model.param.request;
+
+import lombok.Data;
+
+@Data
+public class ParkReservationDelRequest {
+
+ private String reserveOrderNo ;//string True 棰勭害鍗曞彿
+ private String way ;//number False 鍙栨秷鏂瑰紡1:鐢ㄦ埛鍙栨秷锛堥粯璁わ級 5:璁垮骞冲彴鍙栨秷
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/PrivilegeGroupRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/PrivilegeGroupRequest.java
new file mode 100644
index 0000000..4090c3d
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/PrivilegeGroupRequest.java
@@ -0,0 +1,11 @@
+package com.doumee.core.haikang.model.param.request;
+
+import lombok.Data;
+
+@Data
+public class PrivilegeGroupRequest {
+
+ private String name;// string False 璁垮鏉冮檺缁勫悕绉�
+ private int pageNo ;//number True 褰撳墠椤电爜锛岃姹傚ぇ浜�0
+ private int pageSize ;//number True 姣忛〉璁板綍鎬绘暟锛岃姹傚ぇ浜�0涓斾笉瓒呰繃1000
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/SortRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/SortRequest.java
new file mode 100644
index 0000000..da9eeec
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/SortRequest.java
@@ -0,0 +1,12 @@
+package com.doumee.core.haikang.model.param.request;
+
+import lombok.Data;
+
+@Data
+public class SortRequest {
+
+
+ private String field ;// string False 鎺掑簭瀛楁锛屽搴旀煡璇㈢敤鐨勫弬鏁板悕绉�
+ private String sort ;// string False 鎺掑簭瑙勫垯锛宎sc锛氭搴忥紝 desc锛氬�掑簭
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/TaskAdditionRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/TaskAdditionRequest.java
new file mode 100644
index 0000000..69779e9
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/TaskAdditionRequest.java
@@ -0,0 +1,10 @@
+package com.doumee.core.haikang.model.param.request;
+
+import lombok.Data;
+
+@Data
+public class TaskAdditionRequest {
+
+ private Integer taskType;//s number True 涓嬭浇浠诲姟绫诲瀷1锛氬崱鐗�4锛氫汉鑴� 鍏朵粬鍙傝�冮檮褰旳.53 浠诲姟涓嬭浇绫诲瀷璇存槑
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/TaskDataAdditionFaceRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/TaskDataAdditionFaceRequest.java
new file mode 100644
index 0000000..1cdddc2
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/TaskDataAdditionFaceRequest.java
@@ -0,0 +1,12 @@
+package com.doumee.core.haikang.model.param.request;
+
+import lombok.Data;
+
+import java.util.Map;
+
+@Data
+public class TaskDataAdditionFaceRequest {
+
+ private String card ;//string False 鏀寔8-20浣嶆暟瀛�+澶у啓瀛楁瘝鐨勫崱鍙凤紱浠ュ崱涓轰腑蹇冭澶囧繀濉紝璇锋牴鎹澶囧疄闄呰兘鍔涘~鍐�
+ private Map<String,String> data ;//object True 浜鸿劯鏁版嵁锛孠ey锛氫负浜鸿劯缂栧彿 Value锛氫负浜鸿劯鍥剧墖https涓嬭浇鐨刄RL锛屽浘鐗囪姹傛祻瑙堝櫒鍙互鐩存帴鎵撳紑锛屼笉鏀寔閲嶅畾鍚�
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/TaskDataAdditionRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/TaskDataAdditionRequest.java
new file mode 100644
index 0000000..2f117e6
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/TaskDataAdditionRequest.java
@@ -0,0 +1,16 @@
+package com.doumee.core.haikang.model.param.request;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class TaskDataAdditionRequest {
+
+ private String taskId;//string True 涓嬭浇浠诲姟鍞竴鏍囪瘑
+ private List<TaskDataAdditionResourceRequest> resourceInfos;// object[] True 璧勬簮瀵硅薄
+ private List<TaskDataAdditionPersonRequest> personInfos;// object[] True 浜哄憳淇℃伅
+ private List<TaskDataAdditionCardRequest> cards;// object[] True 浜哄憳淇℃伅
+ private TaskDataAdditionFaceRequest face;// object False 浜鸿劯淇℃伅锛屼笅杞界郴缁熷浜哄憳浜鸿劯鏉冮檺鏃跺繀濉�
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/TaskPersonDetailRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/TaskPersonDetailRequest.java
new file mode 100644
index 0000000..694389d
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/TaskPersonDetailRequest.java
@@ -0,0 +1,21 @@
+package com.doumee.core.haikang.model.param.request;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class TaskPersonDetailRequest {
+
+ private String downloadResultId;// string False 涓嬭浇璁板綍鍞竴ID,浣跨敤downloadResultId鏌ヨ璁惧閫氶亾涓嬭浇璁板綍璇︽儏鏃讹紝蹇界暐taskId涓巖esourceInfo瀛楁锛堚�滀笅杞借褰曞敮涓�ID鈥濆拰鈥滀笅杞戒换鍔℃爣璇�+璁惧閫氶亾瀵硅薄鈥濅袱鑰呭繀椤绘湁涓�涓笉涓虹┖锛夛紝浠庢煡璇㈣澶囬�氶亾鏉冮檺涓嬭浇璁板綍鍒楄〃鎺ュ彛鑾峰彇杩斿洖鍙傛暟downloadResultId
+ private String taskId;// string False 涓嬭浇浠诲姟鍞竴鏍囪瘑锛屼粠鏌ヨ璁惧閫氶亾鏉冮檺涓嬭浇璁板綍鍒楄〃鎺ュ彛鑾峰彇杩斿洖鍙傛暟taskId
+ private TaskDataAdditionResourceRequest resourceInfo ;// object False 璁惧閫氶亾瀵硅薄
+ private String[] personIds;// string[] False 浜哄憳缂栧彿鍒楄〃锛屾煡璇汉鍛樺垪琛╲2鎺ュ彛鑾峰彇杩斿洖鎶ユ枃涓殑personId瀛楁锛屾渶澶ч暱搴�1000
+ private String[] orgIds;// string[] False 缁勭粐缂栧彿锛屾煡璇㈢粍缁囧垪琛╲2鎺ュ彛鑾峰彇杩斿洖鎶ユ枃涓殑orgIndexCode瀛楁锛屾渶澶ч暱搴�1000
+ private Integer downloadResult;// integer False 涓嬭浇缁撴灉锛� 0 鎴愬姛锛� 1 澶辫触锛� 2 閮ㄥ垎鎴愬姛
+ private TimeRangeRequest downloadTime;// object False 涓嬭浇鏃堕棿鏌ヨ瀵硅薄
+ private List<SortRequest> sortObjects ;//object[] False 鐩墠鍙敮鎸侀厤缃椂闂�
+ private Integer pageNo ;//number True 椤电爜,pageNo>0
+ private Integer pageSize ;//number True 椤靛ぇ灏�,0<pageSize<=1000
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/TempCarInRecordListRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/TempCarInRecordListRequest.java
new file mode 100644
index 0000000..28f4689
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/TempCarInRecordListRequest.java
@@ -0,0 +1,16 @@
+package com.doumee.core.haikang.model.param.request;
+
+import lombok.Data;
+
+@Data
+public class TempCarInRecordListRequest {
+ private String parkSyscode;// string False 鍋滆溅搴撳敮涓�鏍囪瘑锛屽彲浠庤幏鍙栧仠杞﹀簱鍒楄〃鎺ュ彛鑾峰彇杩斿洖鍙傛暟parkIndexCode锛� 涓嶅~鍒欓拡瀵规墍鏈夊仠杞﹀簱杩涜鏌ヨ
+ private String plateNo;// string False 杞︾墝鍙风爜锛岃嚦灏戝寘鍚�3涓瓧绗�
+ private String cardNo ;//string False 鍗″彿
+ private String parkTime ;//string False 鍋滆溅鏃堕暱锛屽崟浣嶏細灏忔椂锛屼笌鈥滄煡璇㈠紑濮嬫椂闂淬�佹煡璇㈢粨鏉熸椂闂粹�濅簰鏂ヤ娇鐢�
+ private String startTime;// string False 涓庘�滃仠杞︽椂闀库�濇煡璇簰鏂ヤ娇鐢� ISO8601鏍煎紡锛� yyyy-MM-ddTHH:mm:ss+褰撳墠鏃跺尯锛屼緥濡傚寳浜椂闂达細 2018-07-26T15:00:00+08:00
+ private String endTime ;//string False 涓庘�滃仠杞︽椂闀库�濇煡璇簰鏂ヤ娇鐢� ISO8601鏍煎紡锛� yyyy-MM-ddTHH:mm:ss+褰撳墠鏃跺尯锛屼緥濡傚寳浜椂闂达細 2018-07-26T15:00:00+08:00
+ private Integer pageNo ;//integer True 椤电爜,pageNo鈮�1
+ private Integer pageSize;// integer True 鍒嗛〉澶у皬
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/TimeRangeRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/TimeRangeRequest.java
new file mode 100644
index 0000000..d11b047
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/TimeRangeRequest.java
@@ -0,0 +1,11 @@
+package com.doumee.core.haikang.model.param.request;
+
+import lombok.Data;
+
+@Data
+public class TimeRangeRequest {
+
+ private String startTime;// string False 寮�濮嬫棩鏈�,閲囩敤ISO8601鏃堕棿鏍煎紡锛屾渶澶ч暱搴�32涓瓧绗︼紝濡�2018-09-03T17:30:08.000+08:00
+ private String endTime ;//string False 缁撴潫鏃ユ湡,閲囩敤ISO8601鏃堕棿鏍煎紡锛屾渶澶ч暱搴�32涓瓧绗︼紝濡�2018-09-03T17:30:08.000+08:00
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/UserAddFaceRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/UserAddFaceRequest.java
new file mode 100644
index 0000000..c61f23f
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/UserAddFaceRequest.java
@@ -0,0 +1,12 @@
+package com.doumee.core.haikang.model.param.request;
+
+import lombok.Data;
+
+/**
+ * 浜鸿劯base64璇锋眰鍙傛暟
+ */
+@Data
+public class UserAddFaceRequest {
+
+ private String faceData;// string True 浜鸿劯鍥剧墖base64缂栫爜鍚庣殑瀛楃
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/UserAddRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/UserAddRequest.java
new file mode 100644
index 0000000..0904bc4
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/UserAddRequest.java
@@ -0,0 +1,24 @@
+package com.doumee.core.haikang.model.param.request;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 鐢ㄦ埛鏂板璇锋眰鍙傛暟
+ */
+@Data
+public class UserAddRequest {
+ private Integer clientId;//number False 浜哄憳涓存椂鏍囧織锛屽綋璋冪敤鏂规湭鎸囧畾personId鏃讹紝clientId浣滀负浜哄憳鏍囧織锛屽湪杩斿洖鍊间腑鏍囧織姣忎釜浜哄憳鐨勬坊鍔犵粨鏋溿�傛墍浠ユ瘡娆℃帴鍙h皟鐢紝姣忎釜浜哄憳鐨刢lientid闇�淇濇寔鍞竴锛�1~10涓瓧绗︼紝鍙敮鎸佹暟瀛椼�傛敞锛歝lientid鍙鏈璋冪敤鏈夋晥
+ private String personId ;//string False 浜哄憳ID锛屽彲浠ユ寚瀹氫汉鍛榩ersonId锛屼笉鍏佽涓庡叾浠栦汉鍛榩ersonId閲嶅锛屽寘鎷凡鍒犻櫎鐨勪汉鍛樸�� 涓虹┖鏃跺钩鍙拌嚜鍔ㄧ敓鎴愪汉鍛業D
+ private String personName;// string True 浜哄憳鍚嶇О锛�1~32涓瓧绗︼紱涓嶈兘鍖呭惈 鈥� / \ : * ? " < >
+ private String gender;// string True 鎬у埆锛�1锛氱敺锛�2锛氬コ锛�0锛氭湭鐭�
+ private String orgIndexCode;// string True 鎵�灞炵粍缁囨爣璇嗭紝蹇呴』鏄凡瀛樺湪缁勭粐锛屼粠鑾峰彇缁勭粐鍒楄〃鎺ュ彛鑾峰彇杩斿洖鍙傛暟orgIndexCode
+ private String birthday ;//string False 鍑虹敓鏃ユ湡锛屼妇渚嬶細1992-09-12
+ private String phoneNo ;//string False 鎵嬫満鍙凤紝1-20浣嶆暟瀛�,骞冲彴涓婁汉鍛樹俊鎭疄鍚嶆爣璇嗛�夋嫨涓烘墜鏈哄彿鐮佹椂蹇呭~
+ private String email;// string False 閭锛屼妇渚嬶細hic@163.com
+ private String certificateType;// string False 璇佷欢绫诲瀷锛屽弬鑰冮檮褰旳 鏁版嵁瀛楀吀锛屽钩鍙颁笂浜哄憳淇℃伅瀹炲悕鏍囪瘑閫夋嫨涓鸿韩浠借瘉浠舵椂蹇呭~
+ private String certificateNo;// string False 璇佷欢鍙风爜锛�1-20浣嶆暟瀛楀瓧姣嶏紝骞冲彴涓婁汉鍛樹俊鎭疄鍚嶆爣璇嗛�夋嫨涓鸿韩浠借瘉浠舵椂蹇呭~
+ private String jobNo;// string False 宸ュ彿锛�1-32涓瓧绗︼紝骞冲彴涓婁汉鍛樹俊鎭疄鍚嶆爣璇嗛�夋嫨涓哄伐鍙锋椂蹇呭~
+ private List<UserAddFaceRequest> faces;// object[] False 浜鸿劯淇℃伅
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/VisitAppointmentCancelRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/VisitAppointmentCancelRequest.java
new file mode 100644
index 0000000..684e68d
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/VisitAppointmentCancelRequest.java
@@ -0,0 +1,11 @@
+package com.doumee.core.haikang.model.param.request;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class VisitAppointmentCancelRequest {
+
+ private String[] appointRecordIds;// string[] True 棰勭害璁板綍ID鐨勬暟缁勶紝涓庢煡璇㈣瀹㈤绾﹁褰晇2鎺ュ彛涓殑appointRecordId瀵瑰簲
+}
\ No newline at end of file
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/VisitAppointmentMDJRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/VisitAppointmentMDJRequest.java
new file mode 100644
index 0000000..2bb87fd
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/VisitAppointmentMDJRequest.java
@@ -0,0 +1,16 @@
+package com.doumee.core.haikang.model.param.request;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class VisitAppointmentMDJRequest {
+
+ private String receptionistId;// string True 琚浜哄敮涓�鏍囪瘑锛屾煡璇汉鍛樺垪琛╲2鎺ュ彛鑾峰彇杩斿洖鎶ユ枃涓殑personId瀛楁
+ private VisitAppointmentPermissonRequest visitorPermissionSet ;//object False 鏉冮檺闆嗗悎灏佽瀵硅薄
+ private String visitStartTime;// string True 棰勮鏉ヨ鏃堕棿锛屾椂闂村弬鏁伴渶婊¤冻ISO8601鏍煎紡锛歽yyy-MM-ddTHH:mm:ss+褰撳墠鏃跺尯锛屼緥濡傚寳浜椂闂达細2018-07-26T15:00:00+08:00
+ private String visitEndTime ;// string True 棰勮绂诲紑鏃堕棿锛屾椂闂村弬鏁伴渶婊¤冻ISO8601鏍煎紡锛歽yyy-MM-ddTHH:mm:ss+褰撳墠鏃跺尯锛屼緥濡傚寳浜椂闂达細2018-07-26T15:00:00+08:00棰勮绂诲紑鏃堕棿蹇呴』鏅氫簬褰撳墠鏃堕棿鍜岄璁℃潵璁挎椂闂�
+ private String visitPurpose;// string False 鏉ヨ浜嬬敱锛岄暱搴︿负0锝�32涓瓧绗�
+ private VisitAppointmentVistorRequest visitorInfo ;//object True 璁垮淇℃伅
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/VisitAppointmentPermissonRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/VisitAppointmentPermissonRequest.java
new file mode 100644
index 0000000..728f6b4
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/VisitAppointmentPermissonRequest.java
@@ -0,0 +1,11 @@
+package com.doumee.core.haikang.model.param.request;
+
+import lombok.Data;
+
+@Data
+public class VisitAppointmentPermissonRequest {
+
+ private String defaultPrivilegeGroupFlag ;// string False 鏄惁浣跨敤榛樿鏉冮檺缁�(1锛氫娇鐢紱闈�1锛氫笉浣跨敤)
+ private String[] privilegeGroupIds ;//string[] False 鏉冮檺缁刬ds锛屾煡璇㈣瀹㈡潈闄愮粍鎺ュ彛鑾峰彇杩斿洖鎶ユ枃涓殑privilegeGroupId瀛楁
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/acs/EventDeviceDataRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/acs/EventDeviceDataRequest.java
new file mode 100644
index 0000000..95ab60b
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/acs/EventDeviceDataRequest.java
@@ -0,0 +1,65 @@
+package com.doumee.core.haikang.model.param.request.event.acs;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+@Data
+public class EventDeviceDataRequest {
+
+ @JsonProperty(value = "ExtEventIdentityCardInfo")
+ private ExtEventIdentityCardInfo extEventIdentityCardInfo;// 浜哄憳韬唤璇佷俊鎭� 鍚� 涓嶉檺
+ @JsonProperty(value = "ExtEventCustomerNumInfo")
+ private ExtEventCustomerNumInfo extEventCustomerNumInfo;// 閫氶亾浜嬩欢淇℃伅 鍚� 涓嶉檺
+ @JsonProperty(value = "ExtAccessChannel")
+ private Integer extAccessChannel ;//Number 浜哄憳閫氶亾鍙� 鍚� 32
+ @JsonProperty(value = "ExtEventAlarmInID")
+ private Integer extEventAlarmInID;// Number 鎶ヨ杈撳叆/闃插尯閫氶亾 鍚� 32
+ @JsonProperty(value = "ExtEventAlarmOutID")
+ private Integer extEventAlarmOutID ;//Number 鎶ヨ杈撳嚭閫氶亾 鍚� 32
+ @JsonProperty(value = "ExtEventCardNo")
+ private String extEventCardNo;//String 鍗″彿 鍚� 32
+ @JsonProperty(value = "ExtEventCaseID")
+ private Integer extEventCaseID ;//Number 浜嬩欢杈撳叆閫氶亾 鍚� 32
+ @JsonProperty(value = "ExtEventCode")
+ private Integer extEventCode;// Number 浜嬩欢绫诲瀷浠g爜 鍚� 32 鍙傝闄勫綍D.2.1.1 闂ㄧ浜嬩欢绫诲瀷
+ @JsonProperty(value = "ExtEventDoorID")
+ private Integer extEventDoorID;// Number 闂ㄧ紪鍙� 鍚� 32
+ @JsonProperty(value = "ExtEventIDCardPictureURL")
+ private String extEventIDCardPictureURL;// String 韬唤璇佸浘鐗嘦RL 鍚� 200
+ @JsonProperty(value = "ExtEventInOut")
+ private Integer extEventInOut;// Number 杩涘嚭鏂瑰悜 鍚� 32 杩涘嚭绫诲瀷1锛氳繘0锛氬嚭-1:鏈煡 瑕佹眰锛氳繘闂ㄨ鍗″櫒鎷ㄧ爜璁剧疆涓�1锛屽嚭闂ㄨ鍗″櫒鎷ㄧ爜璁剧疆涓�2
+ @JsonProperty(value = "ExtEventLocalControllerID")
+ private Integer extEventLocalControllerID;// Number 灏卞湴鎺у埗鍣╥d 鍚� 32 灏卞湴鎺у埗鍣ㄧ紪鍙�,0-闂ㄧ涓绘満,1-255浠h〃灏卞湴鎺у埗鍣�
+ @JsonProperty(value = "ExtEventMainDevID")
+ private Integer extEventMainDevID;// Number 涓昏澶囨嫧鐮� 鍚� 32
+ @JsonProperty(value = "ExtEventPersonNo")
+ private String extEventPersonNo;// String 浜哄憳缂栧彿 鍚� 32 浠ヤ汉涓轰腑蹇冭澶囦細涓婃姤
+ @JsonProperty(value = "ExtEventPictureURL")
+ private String extEventPictureURL;// String 鍥剧墖鐨剈rl 鍚� 32
+ @JsonProperty(value = "ExtEventReaderID")
+ private Integer extEventReaderID;// Number 璇诲崱鍣╥d 鍚� 32
+ @JsonProperty(value = "ExtEventReaderKind")
+ private Integer extEventReaderKind;// Number 璇诲崱鍣ㄧ被鍒� 鍚� 32 0-鏃犳晥1-IC璇诲崱鍣�2-韬唤璇佽鍗″櫒3-浜岀淮鐮佽鍗″櫒4-鎸囩汗澶�
+ @JsonProperty(value = "ExtEventReportChannel")
+ private Integer extEventReportChannel;// Number 鎶ュ憡涓婁紶閫氶亾 鍚� 32 1-甯冮槻涓婁紶2-涓績缁�1涓婁紶3-涓績缁�2涓婁紶0-鏃犳晥
+ @JsonProperty(value = "ExtEventRoleID")
+ private Integer extEventRoleID;// Number 缇ょ粍缂栧彿 鍚� 32
+ @JsonProperty(value = "ExtEventSubDevID")
+ private Integer extEventSubDevID;// Number 鍒嗘帶鍒跺櫒纭欢ID 鍚� 32
+ @JsonProperty(value = "ExtEventSwipNum")
+ private Integer extEventSwipNum;// Number 鍒峰崱娆℃暟 鍚� 32
+ @JsonProperty(value = "ExtEventType")
+ private Integer extEventType;// Number 浜嬩欢绫诲瀷 鍚� 32 浜嬩欢绫诲瀷锛屽鏅�氶棬绂佷簨浠朵负0,韬唤璇佷俊鎭簨浠朵负1锛屽娴侀噺缁熻涓�2
+ @JsonProperty(value = "ExtEventVerifyID")
+ private Long extEventVerifyID;// Number 澶氶噸璁よ瘉搴忓彿 鍚� 32
+ @JsonProperty(value = "ExtEventWhiteListNo")
+ private Integer extEventWhiteListNo;// Number 鐧藉悕鍗曞崟鍙� 鍚� 32 1-8锛屼负0鏃犳晥
+ @JsonProperty(value = "ExtReceiveTime")
+ private String extReceiveTime;// String 浜嬩欢涓婃姤椹卞姩鐨勬椂闂� 鏄� 32 鐢ㄤ簬缁熻浜嬩欢涓婃姤寤舵椂锛孶nix鏃堕棿鎴筹紝绮剧‘鍒板井绉掞紝渚嬶細 "1558576265810000"浠h〃 2019/5/23 9:51:5.000
+ @JsonProperty(value = "Seq")
+ private Integer seq;// Number 浜嬩欢娴佹按鍙� 鏄� 32 浜嬩欢娴佹按鍙凤紝涓�0鏃犳晥
+ @JsonProperty(value = "UserType")
+ private Integer userType;// Number 鐢ㄦ埛绫诲瀷 鍚� 32 浜哄憳绫诲瀷锛�0 鏈煡锛�1 鏅�氾紝2 鏉ュ锛�3 榛戝悕鍗曪紝4 绠$悊鍛�
+ private String svrIndexCode ;//String 鍥剧墖鏈嶅姟鍣ㄥ敮涓�缂栫爜 鍚� 32
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/parks/EventParkInResultRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/parks/EventParkInResultRequest.java
new file mode 100644
index 0000000..723c017
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/parks/EventParkInResultRequest.java
@@ -0,0 +1,9 @@
+package com.doumee.core.haikang.model.param.request.event.parks;
+
+import lombok.Data;
+
+@Data
+public class EventParkInResultRequest {
+
+ private EventParkRlsRequest rlsResult ;// 鏀捐缁撴灉鏁版嵁 鏄�
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/parks/EventParkParamRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/parks/EventParkParamRequest.java
new file mode 100644
index 0000000..5bf59bc
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/parks/EventParkParamRequest.java
@@ -0,0 +1,14 @@
+package com.doumee.core.haikang.model.param.request.event.parks;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class EventParkParamRequest {
+
+
+ private String sendTime;// P String 浜嬩欢浠庢帴鏀惰�咃紙绋嬪簭澶勭悊鍚庯級鍙戝嚭鐨勬椂闂� 鏄� 32 浜嬩欢鍙戦�佹椂闂�
+ private String ability;// P String 浜嬩欢绫诲埆 鏄� 64 鏍囪瘑鍋滆溅鍦轰簨浠�
+ private List<EventParkInfoRequest> events;// P Events[] 浜嬩欢淇℃伅 鏄� 涓嶉檺
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/parks/EventParkRlsRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/parks/EventParkRlsRequest.java
new file mode 100644
index 0000000..3ba0ca1
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/parks/EventParkRlsRequest.java
@@ -0,0 +1,15 @@
+package com.doumee.core.haikang.model.param.request.event.parks;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class EventParkRlsRequest {
+ private Integer releaseAuth ;// Number 鏀捐鏉冮檺 鏄� 64 鍙傝闄勫綍A.65 鏀捐鏉冮檺
+ private Integer releaseReason ;// Number 鏀捐鍘熷洜 鏄� 64 鍙傝鍙傝闄勫綍A.67 鏀捐鍘熷洜
+ private Integer releaseResult ;// Number 鏀捐缁撴灉 鏄� 64 鍙傝闄勫綍A.66 鏀捐缁撴灉
+ private Integer releaseResultEx ;//Number 鏂颁綋绯绘斁琛岀粨鏋� 鏄� 64 鍙傝闄勫綍A.68 鏂颁綋绯绘斁琛岀粨鏋�
+ private Integer releaseWay ;// Number 鏀捐鏂瑰紡 鏄� 64 鍙傝闄勫綍A.69 鏀捐鏂瑰紡
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitParamRequest.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitParamRequest.java
new file mode 100644
index 0000000..4cdca15
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/request/event/visit/EventVisitParamRequest.java
@@ -0,0 +1,17 @@
+package com.doumee.core.haikang.model.param.request.event.visit;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class EventVisitParamRequest {
+
+
+ private String sendTime;// P String 浜嬩欢浠庢帴鏀惰�咃紙绋嬪簭澶勭悊鍚庯級鍙戝嚭鐨勬椂闂� 鏄� 32 浜嬩欢鍙戦�佹椂闂�
+ private String ability;// P String 浜嬩欢绫诲埆 鏄� 64 鏍囪瘑鍋滆溅鍦轰簨浠�
+ private String[] uids;// String[] 鐢ㄦ埛id 鍚� 涓嶉檺
+ private String[] clients ;//String[] 缁勪欢鏍囪瘑 鍚� 涓嶉檺
+ private List<EventVisitInfoRequest> events;// P Events[] 浜嬩欢淇℃伅 鏄� 涓嶉檺
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AcsDeviceInfoResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AcsDeviceInfoResponse.java
new file mode 100644
index 0000000..976a301
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AcsDeviceInfoResponse.java
@@ -0,0 +1,40 @@
+package com.doumee.core.haikang.model.param.respose;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+public class AcsDeviceInfoResponse {
+
+private String indexCode ;//string False 璧勬簮鍞竴缂栫爜
+private String resourceType;// string False 璧勬簮绫诲瀷锛岃瑙侀檮褰旳.2 璧勬簮绫诲瀷
+private String name;// string False 璧勬簮鍚嶇О
+private String parentIndexCode;// string False 鐖剁骇璧勬簮缂栧彿
+private String devTypeCode;// string False 闂ㄧ璁惧绫诲瀷缂栫爜锛岃瑙侀檮褰旳.7 闂ㄧ璁惧绫诲瀷涓棬绂佽澶囩被鍨嬬紪鍙�
+private String devTypeDesc;// string False 闂ㄧ璁惧绫诲瀷鍨嬪彿锛岃瑙侀檮褰旳.7 闂ㄧ璁惧绫诲瀷涓棬绂佽澶囩被鍨�
+private String deviceCode ;//string False 涓诲姩璁惧缂栧彿
+private String manufacturer;// string False 鍘傚晢
+private String regionIndexCode;// string False 鎵�灞炲尯鍩�
+private String regionPath ;//string False 鎵�灞炲尯鍩熻矾寰�,浠绗﹀彿鍒嗗壊锛屽寘鍚湰鑺傜偣
+private String treatyType;// string False 鎺ュ叆鍗忚锛岃瑙侀檮褰旳.6 缂栫爜璁惧鎺ュ叆鍗忚
+private Integer cardCapacity;// number False 璁惧鍗″閲�
+private Integer fingerCapacity;// number False 鎸囩汗瀹归噺
+private Integer veinCapacity;// number False 鎸囬潤鑴夊閲�
+private Integer faceCapacity ;//number False 浜鸿劯瀹归噺
+private Integer doorCapacity;// number False 闂ㄥ閲�
+private String deployId ;//string False 鎷ㄧ爜
+private String createTime ;//string False 鍒涘缓鏃堕棿
+private String updateTime ;//string False 鏇存柊鏃堕棿
+private String description;// string False 鎻忚堪
+private String netZoneId ;//string False 鎵�灞炵綉鍩�
+private String acsReaderVerifyModeAbility ;//string False 鏀寔璁よ瘉鏂瑰紡锛屾暟鎹负鍗佽繘鍒�
+private String regionName ;//string False 鍖哄煙鍚嶇О
+private String regionPathName;// string False 鎵�灞炲尯鍩熻矾寰勫悕锛屼互"/"鍒嗛殧
+private String ip ;//string False 闂ㄧ璁惧IP
+private String port;// string False 闂ㄧ璁惧绔彛
+private String capability;// string False 璁惧鑳藉姏闆�(鍚澶囦笂鐨勬櫤鑳借兘鍔�)锛岃瑙侀檮褰旳.44 璁惧鑳藉姏闆�
+private String devSerialNum;// string False 璁惧搴忓垪鍙�
+private String dataVersion;// string False 鐗堟湰鍙�
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AppointmentInfoResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AppointmentInfoResponse.java
new file mode 100644
index 0000000..91dd02f
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AppointmentInfoResponse.java
@@ -0,0 +1,53 @@
+package com.doumee.core.haikang.model.param.respose;
+
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+@Data
+public class AppointmentInfoResponse {
+
+
+ private String appointRecordId ;//string False 棰勭害璁板綍ID锛屽彲浣滀负淇敼棰勭害鐨勪緷鎹�
+ private String receptionistId ;//string False 琚浜哄敮涓�鏍囪瘑
+ private String receptionistName ;//string False 琚浜哄鍚嶏紝鏀寔涓嫳鏂囧瓧绗︼紝涓嶈兘鍖呭惈 鈥� / \ : * ? " < >
+ private String receptionistCode ;//string False 琚浜烘墍灞炵粍缁囩紪鐮�
+ private String visitStartTime ;//string False 鏃堕棿鍙傛暟闇�婊¤冻ISO8601鏍煎紡锛� yyyy-MM-ddTHH:mm:ss+褰撳墠鏃跺尯锛�
+ private String visitEndTime ;//string False 鏃堕棿鍙傛暟闇�婊¤冻ISO8601鏍煎紡锛� yyyy-MM-ddTHH:mm:ss+褰撳墠鏃跺尯锛� 棰勮绂诲紑鏃堕棿蹇呴』鏅氫簬褰撳墠鏃堕棿鍜岄璁℃潵璁挎椂闂�
+ private String visitPurpose ;//string False 鏉ヨ浜嬬敱
+ private String visitorName ;//string False 璁垮濮撳悕
+ private String visitorWorkUnit ;//string False 鏉ヨ鍗曚綅
+ private String visitorAddress ;//string False 璁垮浣忓潃
+ private String visitorId ;//string False 璁垮Id
+ private String verificationCode ;//string False 璁垮楠岃瘉鐮侊紝鐢ㄤ簬璁垮鍦ㄨ瀹㈡満鐧昏鐨勫嚟璇�
+ private String QRCode ;//string False 鍔ㄦ�佷簩缁寸爜锛屽闇�瑕佷娇鐢紝鍙皢璁垮浜岀淮鐮佸唴瀹硅浆鎴愪簩缁寸爜鍥剧墖鍗冲彲
+ private Integer gender;// integer False 1-鐢�, 2-濂�
+ private String phoneNo ;//string False 鑱旂郴鐢佃瘽寤鸿濉啓鎵嬫満鍙风爜锛屼粎鏀寔绾暟瀛椼��
+ private String plateNo ;//string False 璁垮杞︾墝鍙�
+ private Integer certificateType ;// integer False 璇佷欢绫诲瀷锛岃瑙侀檮褰旳.11 璇佷欢绫诲瀷
+ private String certificateNo ;//string False 璇佷欢鍙凤紝鏍煎紡涓猴細1~20涓暟瀛椼�佸瓧姣嶇粍鎴�
+ private String picUri ;//string False 杩斿洖鍥剧墖鐨勭浉瀵筓ri锛涢渶瑕佽皟鐢ㄨ幏鍙栬瀹㈣褰曚腑鐨勫浘鐗囨帴鍙o紝鏉ヨ幏鍙栧浘鐗囩殑鏁版嵁
+ private String svrIndexCode ;//string False 涓巔icUri閰嶅杈撳嚭鐨勫瓧娈典俊鎭紝鐢ㄤ簬鈥滆幏鍙栬瀹㈣褰曠殑鍥剧墖鈥濇帴鍙g殑杈撳叆鍙傛暟
+ /**
+ * 璁垮鍗曠姸鎬�,
+ * 0:寰呭鏍搞��
+ * 1锛氭甯搞��
+ * 2锛氳繜鍒般��
+ * 3锛氬け鏁堛��
+ * 4锛氬鏍搁��鍥炪��
+ * 9锛氬鏍稿け鏁堛��
+ * 10锛氶個绾︿腑銆�
+ * 11:閭�绾﹀け鏁�
+ */
+ private Integer visitorStatus ;//integer False
+ private String certAddr ;//string False 璇佷欢鍦板潃
+ private String certIssuer ;//string False 鍙戣瘉鏈哄叧
+ private Integer nation ;//integer False
+ private String birthplace ;//string False 绫嶈疮
+ private String orderId ;//string False 璁垮璁板綍鍞竴鏍囪瘑锛岀敤浜庡凡棰勭害鐧昏銆佽瀹㈢绂荤瓑鎿嶄綔
+ private List<AppointmentResInfoResponse> designatedResources;// object False 鏉冮檺涓嬪彂鎸囧畾鐨勮祫婧愮偣闆嗗悎
+ private String[] privilegeGroupNames;// string[] False 鏉冮檺缁勫悕绉伴泦鍚�
+ private String identityUri ;//string False 璇佷欢鐓�,鍥剧墖鐨勭浉瀵筓RL
+ private String identitySvrCode ;//string False 璇佷欢鐓у搴斿浘鐗囨湇鍔″櫒serviceNodes
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AscDeviceStatusInfoResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AscDeviceStatusInfoResponse.java
new file mode 100644
index 0000000..dd0676e
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AscDeviceStatusInfoResponse.java
@@ -0,0 +1,29 @@
+package com.doumee.core.haikang.model.param.respose;
+
+import lombok.Data;
+
+@Data
+public class AscDeviceStatusInfoResponse {
+ private String vehicleId;//string False dataId
+ private String deviceType;//string False 璁惧鍨嬪彿
+ private String deviceIndexCode;// string False 璁惧鍞竴缂栫爜
+ private String regionIndexCode;// string False 鍖哄煙缂栫爜
+ private String collectTime;//string False 閲囬泦鏃堕棿
+ private String regionName;// string False 鍖哄煙鍚嶅瓧
+ private String indexCode;//string False 璧勬簮鍞竴缂栫爜
+ private String cn;//string False 璁惧鍚嶇О
+ /**
+ * 鍗忚绫诲瀷锛� hiksdk_net: 娴峰悍绉佹湁鍗忚
+ * gb_reg: GB/T28181
+ * ehome_reg: eHome鍗忚
+ * dhsdk_net: 澶у崕绉佹湁鍗忚
+ * onvif_net: ONVIF鍗忚
+ * ezviz_net: 钀ょ煶鍗忚
+ * cascade: 绾ц仈
+ */
+ private String treatyType;//string False
+ private String manufacturer;// string False 鍘傚晢锛宧ikvision-娴峰悍锛宒ahua-澶у崕
+ private String ip;//string False ip鍦板潃
+ private String port;// number False 绔彛
+ private Integer online;// number False 鍦ㄧ嚎鐘舵�侊紝0绂荤嚎锛�1鍦ㄧ嚎
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AuthItemListResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AuthItemListResponse.java
new file mode 100644
index 0000000..5783820
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/AuthItemListResponse.java
@@ -0,0 +1,13 @@
+package com.doumee.core.haikang.model.param.respose;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AuthItemListResponse {
+
+ private Integer total;// number False 鎬绘潯鏁�
+ private List<AuthItemListDetailResponse> list;//object[] False 璁惧閫氶亾鐨勪笅杞借褰�
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/CardInfoResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/CardInfoResponse.java
new file mode 100644
index 0000000..f1ac5aa
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/CardInfoResponse.java
@@ -0,0 +1,13 @@
+package com.doumee.core.haikang.model.param.respose;
+
+import lombok.Data;
+
+@Data
+public class CardInfoResponse {
+
+
+ private String cardNo ;//string True 鍗″彿,8~20涓瓧绗︼紝鏀寔鏁板瓧鍜屽ぇ鍐欏瓧姣嶃�� 寤鸿鏄敱璇诲崱鍣ㄧ洿鎺ヨ鍑烘潵鐨勩�� 濡傛灉鏄笁鏂圭郴缁熷悓姝ヨ繃鏉ワ紝闇�瑕佹彁鍓嶈皟鐮斿崱鍙风殑瑙勫垯鎵�璐拱鐨勮澶囦笂鏄惁鍏煎
+ private String personId ;// string True 浜哄憳ID锛屾牴鎹� 鑾峰彇浜哄憳鍒楄〃v2 鎺ュ彛鑾峰彇杩斿洖鍙傛暟personId
+ private String orgIndexCode ;// string False 浜哄憳鎵�灞炵粍缁嘔ndexCode锛屼笉浼犻粯璁や娇鐢ㄦ牴缁勭粐锛� 浠庤幏鍙栫粍缁囧垪琛� 鎺ュ彛鑾峰彇杩斿洖鍙傛暟orgIndexCode
+ private Integer cardType ;//number False 鍗$墖绫诲瀷锛岄粯璁ゆ槸1锛欼C鍗�1锛欼C鍗�2锛欳PU鍗�3锛氳繙璺濈鍗�4锛歁鍗�
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/DoorsInfoResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/DoorsInfoResponse.java
new file mode 100644
index 0000000..bb1a753
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/DoorsInfoResponse.java
@@ -0,0 +1,31 @@
+package com.doumee.core.haikang.model.param.respose;
+
+import lombok.Data;
+
+@Data
+public class DoorsInfoResponse {
+
+ private String indexCode ;//string False 璧勬簮鍞竴缂栫爜
+private String resourceType ;//string False 璧勬簮绫诲瀷锛岃瑙侀檮褰旳.2 璧勬簮绫诲瀷
+private String name;// string False 璧勬簮鍚嶇О
+private String doorNo;// string False 闂ㄧ鐐圭紪鍙�
+private String channelNo ;//string False 閫氶亾鍙�
+private String parentIndexCode ;//string False 鐖剁骇璧勬簮缂栧彿
+private String controlOneId ;//string False 涓�绾ф帶鍒跺櫒id
+private String controlTwoId;// string False 浜岀骇鎺у埗鍣╥d
+private String readerInId ;//string False 璇诲崱鍣�1
+private String readerOutId ;//string False 璇诲崱鍣�2
+private String treatyType ;//string False 鎺ュ叆鍗忚锛岃瑙侀檮褰旳.6 缂栫爜璁惧鎺ュ叆鍗忚
+private String doorSerial ;//number False 闂ㄥ簭鍙�
+private String regionIndexCode;// string False 鎵�灞炲尯鍩�
+private String regionPath ;//string False 鎵�灞炲尯鍩熻矾寰�,浠绗﹀彿鍒嗗壊锛屽寘鍚湰鑺傜偣
+private String createTime ;//string False 鍒涘缓鏃堕棿
+private String updateTime;// string False 鏇存柊鏃堕棿
+private String description;// string False 鎻忚堪
+private String channelType;// string False 閫氶亾绫诲瀷锛宒oor锛氶棬绂佺偣
+private String regionName ;//string False 鍖哄煙鍚嶇О
+private String regionPathName ;//string False 鎵�灞炲尯鍩熻矾寰勫悕锛岀鍙�"/"杩涜鍒嗛殧
+private String installLocation;// string False 瀹夎浣嶇疆锛岃瑙侀檮褰曢檮褰旳.81 瀹夎浣嶇疆
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/DoorsListResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/DoorsListResponse.java
new file mode 100644
index 0000000..39f0304
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/DoorsListResponse.java
@@ -0,0 +1,15 @@
+package com.doumee.core.haikang.model.param.respose;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class DoorsListResponse {
+
+ private int total;// number False 鏌ヨ鏁版嵁璁板綍鎬绘暟
+ private int pageSize;// number False 姣忛〉璁板綍鎬绘暟
+ private int pageNo ;// number False 褰撳墠椤电爜
+ private List<DoorsInfoResponse> list ;// object[] False
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/FacePictureCheckResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/FacePictureCheckResponse.java
new file mode 100644
index 0000000..99c4d52
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/FacePictureCheckResponse.java
@@ -0,0 +1,29 @@
+package com.doumee.core.haikang.model.param.respose;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class FacePictureCheckResponse {
+
+ private Integer total;// number False 鎬绘潯鏁�
+
+ private Boolean checkResult;// boolean False 浜鸿劯鍥剧墖妫�娴嬬粨鏋滐紝true-璇勫垎鍚堟牸false-璇勫垎涓� 鍚堟牸
+ /**
+ * 0x1f902300-浜鸿劯妫�娴嬮敊璇紙鍥剧墖鏍煎紡涓嶇鍚堣姹傘�佹娴嬩笉鍒颁汉鑴哥瓑鎯呭喌鏃讹級
+ * 0x1f902301-浜鸿劯妫�娴嬭秴鏃�
+ * 0x1f902303-鍥剧墖涓ょ溂闂磋窛杩囧皬
+ * 0x1f902304-鍥剧墖褰╄壊缃俊搴﹁繃浣�
+ * 0x1f902305-鍥剧墖浜鸿劯瑙掑害杩囧ぇ
+ * 0x1f902306-鍥剧墖娓呮櫚搴﹁繃浣�
+ * 0x1f902307-鍥剧墖杩囨洕鎴栬繃鏆楋紙鐏伴樁鍊间笉绗﹀悎瑕佹眰锛�
+ * 0x1f902308-鍥剧墖閬尅涓ラ噸
+ * 0x1f902309-鍥剧墖鍒嗘暟杩囦綆
+ */
+ private String statusCode ;//string False 璇勫垎澶辫触璇︾粏閿欒鐮侊紝
+ private String statusMessage;// string False 璇勫垎澶辫触璇︽儏鎻忚堪
+ private String faceScore ;//number False 浜鸿劯璇勫垎锛岃寖鍥达細 1-100
+ private String facePicAnalysisResult ;//object False 璇勫垎鎴愬姛鍚庣殑浜鸿劯 淇℃伅锛岀敤浜庝汉鑴歌鍓�
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/OrgOrUserAddFailureResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/OrgOrUserAddFailureResponse.java
new file mode 100644
index 0000000..8144308
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/OrgOrUserAddFailureResponse.java
@@ -0,0 +1,10 @@
+package com.doumee.core.haikang.model.param.respose;
+
+import lombok.Data;
+
+@Data
+public class OrgOrUserAddFailureResponse {
+ private String clientId ;//number False 璋冪敤鏂规寚瀹欼d
+ private String code ;//string False 閿欒鐮�
+ private String msg ;//string False 閿欒淇℃伅
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/OrgOrUserAddResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/OrgOrUserAddResponse.java
new file mode 100644
index 0000000..3ed9d8d
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/OrgOrUserAddResponse.java
@@ -0,0 +1,11 @@
+package com.doumee.core.haikang.model.param.respose;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class OrgOrUserAddResponse {
+ private List<OrgOrUserAddSuccessResponse> successes ;//object[] False 鎵归噺娣诲姞鎴愬姛鐨勮褰�
+ private List<OrgOrUserAddFailureResponse> failures;// object[] False 鎵归噺娣诲姞澶辫触鐨勮褰�
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/OrgTimeRangeInfoResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/OrgTimeRangeInfoResponse.java
new file mode 100644
index 0000000..59df4d7
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/OrgTimeRangeInfoResponse.java
@@ -0,0 +1,20 @@
+package com.doumee.core.haikang.model.param.respose;
+
+import lombok.Data;
+
+@Data
+public class OrgTimeRangeInfoResponse {
+
+ private String orgIndexCode;// 缁勭粐鍞竴鏍囪瘑鐮侊紙鏈�澶ч暱搴�64锛�
+ private String organizationCode;// string False 缁勭粐缂栫爜
+ private String orgName;// string False 缁勭粐鍚嶇О锛堟渶澶ч暱搴�64锛� 褰撳墠缁勭粐鐨勫悕绉帮紝濡傞粯璁ら儴闂�
+ private String orgPath ;//string False 缁勭粐鐩綍锛堟渶澶ч暱搴�64锛� 渚嬪锛氶粯璁ら儴闂�/缁煎悎瀹夐槻/寮�鍙戝皬缁�
+ private String parentOrgIndexCode;// -1鈥濅唬琛ㄦ棤鐖剁粍缁囷紝鍏跺畠浠h〃璇ヨ祫婧愮埗缁勭粐鍞竴鏍囪瘑鐮侊紝渚嬧�渞oot000000鈥�
+
+ private Integer sort ;// number False 鏄剧ず椤哄簭
+ private Boolean available ;//boolean False 鐢ㄤ簬鏍囪瘑缁勭粐鑺傜偣鏄惁鏈夋潈闄愭搷浣滐紝true锛氭湁鏉冮檺锛宖alse锛氭棤鏉冮檺
+ private Boolean leaf ;// boolean False 鏍囪瘑缁勭粐鑺傜偣鏄惁鍙跺瓙鑺傜偣锛宼rue锛氫负鍙跺瓙缁撶偣锛宖alse锛氶潪鍙跺瓙缁撶偣
+ private String createTime ;//string False 鍒涘缓鏃堕棿锛孖OS8601鏍煎紡锛屽弬鑰冮檮褰旴 ISO8601鏃堕棿鏍煎紡璇存槑
+ private String updateTime ;// string False 淇敼鏃堕棿锛孖OS8601鏍煎紡锛屽弬鑰冮檮褰旴 ISO8601鏃堕棿鏍煎紡璇存槑
+ private Integer status ;//number False 璧勬簮鐘舵�侊紝灏忎簬0鍒欎唬琛ㄨ祫婧愬凡琚垹闄わ紝0浠h〃鏈夋晥璧勬簮
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/ParkCrossRecordInfoResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/ParkCrossRecordInfoResponse.java
new file mode 100644
index 0000000..30d1ab6
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/ParkCrossRecordInfoResponse.java
@@ -0,0 +1,37 @@
+package com.doumee.core.haikang.model.param.respose;
+
+import lombok.Data;
+
+@Data
+public class ParkCrossRecordInfoResponse {
+
+
+
+ private String vehicleId ;// string False 杞﹁締ID锛堟渶澶ч暱搴�64锛�
+ private String crossRecordSyscode;// string False 杩囪溅璁板綍鍞竴鏍囪瘑锛堟渶澶ч暱搴�64锛�
+ private String parkSyscode;// string False 鍋滆溅搴撳敮涓�鏍囪瘑锛堟渶澶ч暱搴�64锛�
+ private String parkName ;//string False 鍋滆溅搴撳悕绉帮紙鏈�澶ч暱搴�64锛�
+ private String entranceSyscode ;//string False 鍑哄叆鍙e敮涓�鏍囪瘑锛堟渶澶ч暱搴�64锛�
+ private String entranceName;// string False 鍑哄叆鍙e悕绉帮紙鏈�澶ч暱搴�64锛�
+ private String roadwaySyscode ;//string False 杞﹂亾鍞竴鏍囪瘑
+ private String roadwayName;// string False 杞﹂亾鍚嶇О
+ private Integer vehicleOut ;//number False 鏄惁鍑哄満0-杩涘満锛�1-鍑哄満
+ private Integer releaseMode ;//number False 鏀捐妯″紡0-绂佹鏀捐锛�1-鍥哄畾杞﹀寘鏈燂紝2-涓存椂杞﹀叆鍦猴紝3-棰勭害杞﹀叆鍦猴紝10-绂荤嚎鍑哄満锛�11-缂磋垂鍑哄満锛�12-棰勪粯璐瑰嚭鍦猴紝13-鍏嶈垂鍑哄満锛�30- 闈炴硶鍗′笉鏀捐锛�31-鎵嬪姩鏀捐锛�32-鐗规畩杞﹁締鏀捐锛�33-鑺傚亣鏃ユ斁琛岋紝35-缇ょ粍鏀捐锛�36-閬ユ帶鍣ㄥ紑闂�
+ private Integer releaseResult ;//number False 鏀捐缁撴灉0-鏈斁琛�1-姝e父鏀捐2-绂荤嚎鏀捐
+ private Integer releaseWay;// number False 鏀捐鏂瑰紡10-鏈紑闂�11-鑷姩寮�闂�12-浜哄伐/浜哄伐寮�闂�13-閬ユ帶鍣ㄥ紑闂�
+ private Integer releaseReason;// number False 鏀捐鍘熷洜锛�100-鍥哄畾杞﹁嚜鍔ㄦ斁琛�101-涓存椂杞﹁嚜鍔ㄦ斁琛�102-棰勭害杞﹁嚜鍔ㄦ斁琛�103-涓�鎴峰杞﹁嚜鍔ㄦ斁琛�
+ private String plateNo ;//string False 杞︾墝鍙风爜锛堟渶澶ч暱搴�16锛�
+ private String cardNo ;//string False 鍗$墖鍙风爜锛堟渶澶ч暱搴�32锛�
+ private Integer vehicleColor;// number False 杞﹁締棰滆壊0锛氬叾浠栭鑹诧紱1锛氱櫧鑹诧紱2锛氶摱鑹诧紱3锛氱伆鑹诧紱4锛氶粦鑹诧紱 5锛氱孩鑹诧紱 6锛氭繁钃濊壊锛� 7锛氳摑鑹诧紱8锛氶粍鑹诧紱9锛氱豢鑹诧紱10锛氭鑹诧紱 11锛氱矇鑹诧紱 12锛氱传鑹测��
+ private Integer vehicleType ;//number False 杞﹁締绫诲瀷0锛氬叾浠栬溅锛�1锛氬皬鍨嬭溅锛�2锛氬ぇ鍨嬭溅锛� 3锛氭懇鎵樿溅
+ private Integer plateColor ;// number False 杞︾墝棰滆壊0:钃濊壊,1:榛勮壊,2:鐧借壊,3:榛戣壊,4:缁胯壊,5:姘戣埅榛戣壊, 255:鍏朵粬棰滆壊
+ private Integer plateType ;// number False 杞︾墝绫诲瀷0:鏍囧噯姘戠敤杞�,1:02寮忔皯鐢ㄨ溅,3:璀﹁溅,4:姘戠敤杞﹀弻琛屽熬鐗岃溅,5:浣块杞�,6:鍐滅敤杞�,7:鎽╂墭杞�,8:鏂拌兘婧愯溅
+ private String carCategory;// string False 杞﹁締鍒嗙被
+ private String carCategoryName;// string False 杞﹁締鍒嗙被鍚嶇О
+ private String vehiclePicUri;// string False 杞﹁締鍥剧墖uri锛堟渶澶ч暱搴�256锛�
+ private String plateNoPicUri;// string False 杞︾墝鍥剧墖uri锛堟渶澶ч暱搴�256锛�
+ private String facePicUri;// string False 浜鸿劯鍥剧墖uri锛堟渶澶ч暱搴�256锛�
+ private String aswSyscode ;//string False 鍥剧墖鏈嶅姟鍞竴鏍囪瘑锛堟渶澶ч暱搴�64锛�
+ private String crossTime ;//string False 閫氳繃鏃堕棿ISO8601鏍煎紡锛� yyyy-MM-ddTHH:mm:ss+褰撳墠鏃跺尯锛屼緥濡傚寳浜椂闂达細 2018-07-26T15:00:00+08:00 璇﹁ISO8601鍗忚瑙i噴
+ private String createTime;// string False 鍒涘缓鏃堕棿 ISO8601鏍煎紡锛� yyyy-MM-ddTHH:mm:ss+褰撳墠鏃跺尯锛屼緥濡傚寳浜椂闂达細 2018-07-26T15:00:00+08:00璇﹁ISO8601鍗忚瑙i噴
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/ParkReservationAddResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/ParkReservationAddResponse.java
new file mode 100644
index 0000000..64fb11a
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/ParkReservationAddResponse.java
@@ -0,0 +1,9 @@
+package com.doumee.core.haikang.model.param.respose;
+
+import lombok.Data;
+
+@Data
+public class ParkReservationAddResponse {
+ private String reserveOrderNo ;//string False 棰勭害鍗曞彿
+ private String reserveTime ;//number False 棰勭害鏈夋晥鏃堕棿锛屽崟浣嶏細鍒嗛挓
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/TaskPersonDetailCardFaceResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/TaskPersonDetailCardFaceResponse.java
new file mode 100644
index 0000000..3cc227f
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/TaskPersonDetailCardFaceResponse.java
@@ -0,0 +1,14 @@
+package com.doumee.core.haikang.model.param.respose;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class TaskPersonDetailCardFaceResponse {
+
+
+ private List<TaskPersonDetailCardInfoResponse> cards;// object[] False 鍗$墖涓嬭浇璁板綍
+ private List<TaskPersonDetailFaceInfoResponse> faces;// object[] False 浜鸿劯涓嬭浇璁板綍
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/TaskPersonDetailFaceInfoResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/TaskPersonDetailFaceInfoResponse.java
new file mode 100644
index 0000000..183dee5
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/TaskPersonDetailFaceInfoResponse.java
@@ -0,0 +1,14 @@
+package com.doumee.core.haikang.model.param.respose;
+
+import lombok.Data;
+
+@Data
+public class TaskPersonDetailFaceInfoResponse {
+
+
+ private String id;// string False 鍗″彿
+ private String operatorType;// number False 鎿嶄綔绫诲瀷锛�1. 涓嬭浇鏉冮檺 2. 鍒犻櫎鏉冮檺
+ private String errorCode;// string False 閿欒鐮侊紝0 鈥� 鎴愬姛锛屽叾浠�- 澶辫触锛屽弬鑰冮檮褰旹.2.3 鍑哄叆鎺у埗鏉冮檺閿欒鐮�
+ private String errorMsg;// string False 閿欒鎻忚堪锛屾瘮濡傦細褰撳嚭鐜颁汉鑴搁噸澶嶏紝鎸囩汗閲嶅鏃讹紝璇ュ瓧娈佃繑鍥為噸澶嶇殑鍗″彿銆�
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/TaskPersonDetailResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/TaskPersonDetailResponse.java
new file mode 100644
index 0000000..662cb59
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/TaskPersonDetailResponse.java
@@ -0,0 +1,15 @@
+package com.doumee.core.haikang.model.param.respose;
+
+import lombok.Data;
+
+@Data
+public class TaskPersonDetailResponse {
+
+
+ private String downloadResultId;// string False 涓嬭浇璁板綍鍞竴ID
+ private String personId;// string False 浜哄憳缂栫爜
+ private String persondownloadResult;// string False 涓嬭浇璁板綍鐘舵�侊紙鍙湁鎴愬姛/澶辫触鐘舵�侊紝0:鎴愬姛,1:澶辫触锛�
+ private String downloadTime;// string False 涓嬭浇鏃堕棿锛岄噰鐢↖SO8601鏃堕棿鏍煎紡锛屾渶澶ч暱搴�32涓瓧绗︼紝濡�2018-09-03T17:30:08.000+08:00
+ private TaskPersonDetailCardFaceResponse personDownloadDetail;// object False 涓嬭浇鐨勮缁嗘弿杩�
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/TaskProgressDetailResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/TaskProgressDetailResponse.java
new file mode 100644
index 0000000..035a441
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/TaskProgressDetailResponse.java
@@ -0,0 +1,11 @@
+package com.doumee.core.haikang.model.param.respose;
+
+import lombok.Data;
+
+@Data
+public class TaskProgressDetailResponse {
+ private String downloadResultId;// string False 涓嬭浇璁板綍鍞竴ID
+ private String personId;// string False 浜哄憳缂栫爜
+ private String persondownloadResult;// string False 涓嬭浇璁板綍鐘舵�侊紙鍙湁鎴愬姛/澶辫触鐘舵�侊紝0:鎴愬姛,1:澶辫触锛�
+ private String downloadTime ;//string False 涓嬭浇鏃堕棿锛岄噰鐢↖SO8601鏃堕棿鏍煎紡锛屾渶澶ч暱搴�32涓瓧绗︼紝濡�2018-09-
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/TaskProgressResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/TaskProgressResponse.java
new file mode 100644
index 0000000..9c919da
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/TaskProgressResponse.java
@@ -0,0 +1,13 @@
+package com.doumee.core.haikang.model.param.respose;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class TaskProgressResponse {
+
+ private Integer total;// number False 鎬绘潯鏁�
+ private List<TaskProgressDetailResponse> list;//object[] False 璁惧閫氶亾鐨勪笅杞借褰�
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/UserAddResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/UserAddResponse.java
new file mode 100644
index 0000000..d5ed5d4
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/UserAddResponse.java
@@ -0,0 +1,11 @@
+package com.doumee.core.haikang.model.param.respose;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class UserAddResponse {
+ private String personId ;//string False 鎴愬姛娣诲姞鐨勪汉鍛業d
+ private String faceId;// string False 鎴愬姛娣诲姞鐨勪汉鑴窱d
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/UserInfoResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/UserInfoResponse.java
new file mode 100644
index 0000000..dacd650
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/UserInfoResponse.java
@@ -0,0 +1,23 @@
+package com.doumee.core.haikang.model.param.respose;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class UserInfoResponse {
+
+private String personId ;//string False 浜哄憳ID
+private String personName ;//string False 濮撳悕
+private Integer gender ;//number False
+private String orgIndexCode;// string False 鎵�灞炵粍缁囧敮涓�鏍囪瘑鐮�
+private String phoneNo;// string False 鑱旂郴鐢佃瘽
+private String jobNo;// string False 宸ュ彿
+private Integer certificateType;// number False 璇佷欢绫诲瀷111:韬唤璇�414:鎶ょ収113:鎴峰彛绨�335:椹鹃┒璇�131:宸ヤ綔璇�133:瀛︾敓璇�990:鍏朵粬 ;
+private String certificateNo ;//string False 璇佷欢鍙风爜 涓�涓叉暟瀛楀瓧绗︿覆
+private String createTime ;//string False 鍒涘缓鏃堕棿 瑕佹眰閬靛畧ISO8601鏍囧噯锛屽2018-07-26T21:30:08.000+08:00 琛ㄧず鍖椾含鏃堕棿2017骞�7鏈�26鏃�21鏃�30鍒�08绉�
+private String updateTime;// string False 鏇存柊鏃堕棿 瑕佹眰閬靛畧ISO8601鏍囧噯锛屽2018-07-26T21:30:08.000+08:00 琛ㄧず鍖椾含鏃堕棿2017骞�7鏈�26鏃�21鏃�30鍒�08绉�
+private String orgPath;// string False 鎵�灞炵粍缁囩洰褰曪紝@杩涜鍒嗗壊锛屼緥濡� @root000000@
+private String orgPathName;// string False 鎵�灞炵粍缁囧悕绉帮紝@杩涜鍒嗗壊锛屽@榛樿閮ㄩ棬@
+private List<UserPhotoResponse> personPhoto;// object False 浜哄憳鍥剧墖淇℃伅
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/UserTimeRangeInfoResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/UserTimeRangeInfoResponse.java
new file mode 100644
index 0000000..a22d2de
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/UserTimeRangeInfoResponse.java
@@ -0,0 +1,57 @@
+package com.doumee.core.haikang.model.param.respose;
+
+import lombok.Data;
+
+@Data
+public class UserTimeRangeInfoResponse {
+
+ private String personId ;//string False 浜哄憳ID
+ private String personName;// string False 濮撳悕
+ private Integer gender;// number False
+ private String orgPath ;//string False 鎵�灞炵粍缁囩洰褰曪紝浠绗﹀彿鍒嗗壊锛屽寘鍚湰缁勭粐锛屼緥濡侤root000000@
+ private String orgPathName;// string False 鎵�灞炵粍缁囩洰褰曞悕绉帮紝浠�/鍒嗛殧
+ private String orgIndexCode;// string False 鎵�灞炵粍缁囧敮涓�鏍囪瘑鐮�
+ private Integer certificateType;// number False 璇佷欢绫诲瀷锛屽弬鑰冮檮褰旳 鏁版嵁瀛楀吀
+ private String certificateNo;// string False 璇佷欢鍙风爜
+ private String jobNo;// string False 宸ュ彿
+ private String birthday;// string False 鍑虹敓鏃ユ湡锛屼緥"1990-01-01"
+ private String phoneNo;// string False 鑱旂郴鐢佃瘽
+ private String address;// string False 鑱旂郴鍦板潃
+ private String email;// string False 閭
+ private Integer education ;//number False 瀛﹀巻锛岃瑙侀檮褰旳.12 瀛﹀巻绫诲瀷
+ private String lastName;// string False 浜哄憳濮撴皬
+ private String givenName;// string False 浜哄憳鍚嶇О
+ private String job;//string False 鑱屼笟
+ private String staffProperty;// string False 鑱屽伐鎬ц川
+ private String company;// string False 宸ヤ綔鍗曚綅
+ private String employeePost;// string False 鑱屼綅
+ private String employeeNumber;// string False 鍛樺伐缂栧彿
+ private String postType;// string False 宀椾綅绫诲埆
+ private String identityType;// string False 韬唤绫诲瀷
+ private String nationality;// string False 鍥界睄
+ private Integer nation;// number False
+ private String birthplace ;//string False 绫嶈疮
+ private String censusRegister;// string False 鎴风睄
+ private Integer marriaged;// number False 濠氬Щ鐘跺喌锛岃瑙侀檮褰旳.58 濠氬Щ鐘跺喌
+ private String politicalStatus;// string False 鏀挎不闈㈣矊
+ private String roomNum;// string False 鎴块棿鍙�
+ private String houseHolderRel;// string False 涓庢埛涓诲叧绯�
+ private String studentId;// string False 瀛﹀彿
+ private String stuStartTime;// string False 瀛︾敓鍏ュ鏃堕棿锛屼緥"1990-01-01"
+ private String stuEndTime;// string False 瀛︾敓姣曚笟鏃堕棿锛屼緥"1990-01-01"
+ private String stuGrade;// string False 骞寸骇
+ private String stuClass;// string False 鐝骇
+ private String academy ;//string False 瀛﹂櫌
+ private String profession;// string False 瀛︾敓涓撲笟
+ private String dormitory;// string False 瀹胯垗妤�
+ private Integer lodge;// number False 鏄惁浣忔牎锛�1:鏄紱2:鍚�
+ private String personDesc ;//string False 浜哄憳鎻忚堪
+ private Integer syncFlag ;//number False 鍚屾鏍囧織绫诲瀷锛岃瑙侀檮褰旳.77 鍚屾鏍囧織绫诲瀷
+ private String pinyin ;//string False 鎷奸煶
+ private String certIssuer ;//string False 鍙戣瘉鏈烘瀯
+ private String certAddr ;//string False 鍙戣瘉鍦板潃
+ private String certExpireTime;// string False 璇佷欢鏈夋晥鏈�
+ private Integer status ;//integer False 鐘舵�佸皬浜�0鍒欎唬琛ㄨ祫婧愬凡琚垹闄�
+ private String createTime;// string False 鍒涘缓鏃堕棿锛孖OS8601鏍煎紡锛屽弬鑰冮檮褰旴 ISO8601鏃堕棿鏍煎紡璇存槑
+ private String updateTime;// string False 鏇存柊鏃堕棿锛孖OS8601鏍煎紡锛屽弬鑰冮檮褰旴 ISO8601鏃堕棿鏍煎紡璇存槑
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/VehicleInfoResponse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/VehicleInfoResponse.java
new file mode 100644
index 0000000..b6c5588
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/model/param/respose/VehicleInfoResponse.java
@@ -0,0 +1,28 @@
+package com.doumee.core.haikang.model.param.respose;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class VehicleInfoResponse {
+
+ private String vehicleId ;// string False 杞﹁締ID锛堟渶澶ч暱搴�64锛�
+ private String plateNo ;// string False 杞︾墝鍙风爜锛堟渶澶ч暱搴�64锛�
+ private Integer isBandPerson ;// number False 鏄惁鍏宠仈浜哄憳
+ private String personId ;//string False 浜哄憳ID锛堟渶澶ч暱搴�64锛�
+ private String personName ;// string False 浜哄憳濮撳悕
+ private Integer plateType ;// number False 杞︾墝绫诲瀷锛岃瑙侀檮褰旳.14 杞︾墝绫诲瀷
+ private Integer plateColor ;//number False 杞︾墝棰滆壊锛岃瑙侀檮褰旳.15 杞︾墝棰滆壊
+ private Integer vehicleType ;//number False 杞﹁締绫诲瀷锛岃瑙侀檮褰旳.16 杞﹁締绫诲瀷
+ private Integer vehicleColor ;//number False 杞﹁締棰滆壊锛岃瑙侀檮褰旳.17 杞﹁締棰滆壊
+ private String description ;// string False 杞﹁締鎻忚堪
+ private String regionIndexCode ;// string False 鎵�灞炲尯鍩�
+ private String regionName ;//string False 鎵�灞炲尯鍩熷悕
+ private String regionPath ;//string False 鎵�灞炲尯鍩熻矾寰勶紝@鍒嗛殧
+ private String regionPathName ;//string False 鎵�灞炲尯鍩熻矾寰勫悕锛�/鍒嗛殧
+ private String orgPath ;// string False 鎵�灞炵粍缁囩洰褰曪紝@鍒嗛殧
+ private String orgPathName ;// string False 鎵�灞炲尯鍩熻矾寰勫悕锛�/鍒嗛殧
+ private String createTime ;// string False 鍒涘缓鏃堕棿 2019-12-11T11:30:51.502+08:00
+ private String updateTime ;// string False 淇敼鏃堕棿 2019-12-11T11:30:51.502+08:00
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/sdk/HIKCSDemo.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/sdk/HIKCSDemo.java
new file mode 100644
index 0000000..f270213
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/sdk/HIKCSDemo.java
@@ -0,0 +1,151 @@
+package com.doumee.core.haikang.sdk;
+
+import com.sun.jna.Pointer;
+
+public class HIKCSDemo {
+
+ static HCUsbSDK hCUsbSDK = HCUsbSDK.INSTANCE;
+ static int iHandle = -1;
+
+
+
+ public static void main(String[] args) throws InterruptedException{
+ HIKCSDemo csdemo = new HIKCSDemo();
+ hCUsbSDK.USB_Init();
+ hCUsbSDK.USB_SetLogToFile(3, ".\\", false);
+ System.out.println(System.getProperty("user.dir"));
+ csdemo.getVersion(); //鑾峰彇鐗堟湰
+
+ csdemo.EnumDevices(); //鏋氫妇璁惧
+ csdemo.Login();
+ csdemo.ActivateCard();
+
+ while(true);
+ }
+
+
+ public void getVersion(){
+ int iVersion = hCUsbSDK.USB_GetSDKVersion();
+
+ String v1 = Integer.toString((iVersion>>24) & 0xff);
+ String v2 = Integer.toString((iVersion>>16) & 0xff);
+ String v3 = Integer.toString((iVersion>>8) & 0xff);
+ String v4 = Integer.toString((iVersion) & 0xff);
+ System.out.println("USB_GetSDKVersion succeed, version:" + v1 + "." + v2 + "." + v3 + "." + v4);
+ }
+
+ public void EnumDevices(){
+ int iNum = hCUsbSDK.USB_GetDeviceCount();
+ System.out.println("iNum:" + iNum);
+ if(iNum < 1){
+ System.out.println("鏃犺澶囨帴鍏�");
+ return ;
+ }
+
+ //鏍规嵁鑾峰彇鍒扮殑璁惧鏁伴噺锛岀敵璇峰搴斿ぇ灏忕殑璁惧淇℃伅缁撴瀯浣撴暟缁�
+ //瀵圭粨鏋勪綋鏁扮粍涓殑姣忎釜鎴愬憳杩涜鍒濆鍖�
+ HCUsbSDK.OUT_USB_DEVICE_INFO struOutDevice = new HCUsbSDK.OUT_USB_DEVICE_INFO();
+ struOutDevice.init(iNum);
+ struOutDevice.write();
+
+ Pointer pStruDeviceInfo = struOutDevice.getPointer();
+ if(hCUsbSDK.USB_EnumDevices(iNum, pStruDeviceInfo))
+ {
+ struOutDevice.read();
+ while((--iNum) >= 0)
+ {
+ String s1, s2, s3, s4, s5, s6;
+ s1 = String.valueOf(struOutDevice.struDeviceArr[iNum].dwIndex);
+ s2 = String.valueOf(struOutDevice.struDeviceArr[iNum].dwVID);
+ s3 = String.valueOf(struOutDevice.struDeviceArr[iNum].dwPID);
+ s4 = new String(struOutDevice.struDeviceArr[iNum].szManufacturer).trim();
+ s5 = new String(struOutDevice.struDeviceArr[iNum].szDeviceName).trim();
+ s6 = new String(struOutDevice.struDeviceArr[iNum].szSerialNumber).trim();
+ System.out.println("device:" + s1 + ",dwVID:" +s2 + ",dwPID:" + s3 + ",szManufacturer:" + s4 + ",szDeviceName:" +s5 + ",szSerialNumber:" + s6);
+ }
+ System.out.println("USB_EnumDevices succeed");
+ }
+ else
+ {
+ System.out.println("USB_EnumDevices failed, error:" + hCUsbSDK.USB_GetLastError());
+ }
+ }
+
+ public void Login(){
+ HCUsbSDK.USB_DEVICE_REG_RES struDeviceReg = new HCUsbSDK.USB_DEVICE_REG_RES();
+ struDeviceReg.dwSize = struDeviceReg.size();
+ struDeviceReg.write();
+
+ HCUsbSDK.USB_USER_LOGIN_INFO struUserLoginInfo = new HCUsbSDK.USB_USER_LOGIN_INFO();
+ struUserLoginInfo.dwSize = struUserLoginInfo.size();
+ struUserLoginInfo.dwTimeout = 5000;
+ struUserLoginInfo.dwDevIndex = 1;
+ struUserLoginInfo.dwVID = 1155;
+ struUserLoginInfo.dwPID = 22352;
+ System.arraycopy("813717552".getBytes(), 0, struUserLoginInfo.szSerialNumber, 0, "813717552".length());
+ System.arraycopy("admin".getBytes(), 0, struUserLoginInfo.szUserName, 0, "admin".length());
+ System.arraycopy("12345".getBytes(), 0, struUserLoginInfo.szPassword, 0, "12345".length());
+
+ struUserLoginInfo.write();
+
+ iHandle = hCUsbSDK.USB_Login(struUserLoginInfo, struDeviceReg);
+ System.out.println("iHandle:" + iHandle);
+ if(iHandle < 0){
+ System.out.println("USB_Login failed, error:" + hCUsbSDK.USB_GetLastError());
+ }
+ else{
+ System.out.println("USB_Login succeed, lHandle:" + iHandle);
+ }
+ }
+
+
+ public void ActivateCard(){
+ HCUsbSDK.USB_WAIT_SECOND StruWaitSecond = new HCUsbSDK.USB_WAIT_SECOND();
+ StruWaitSecond.dwSize = StruWaitSecond.size();
+ StruWaitSecond.byWait = 5;
+
+ HCUsbSDK.USB_ACTIVATE_CARD_RES StruActivateRes = new HCUsbSDK.USB_ACTIVATE_CARD_RES();
+ StruActivateRes.dwSize = StruActivateRes.size();
+
+ HCUsbSDK.USB_CONFIG_INPUT_INFO StruInput = new HCUsbSDK.USB_CONFIG_INPUT_INFO();
+ StruInput.dwInBufferSize = StruWaitSecond.size();
+ Pointer ptrwaitSecond = StruWaitSecond.getPointer();
+ StruWaitSecond.write();
+ StruInput.lpInBuffer = ptrwaitSecond;
+
+ HCUsbSDK.USB_CONFIG_OUTPUT_INFO StruOutput = new HCUsbSDK.USB_CONFIG_OUTPUT_INFO();
+ StruOutput.dwOutBufferSize = StruActivateRes.size();
+ Pointer ptrActivateRes = StruActivateRes.getPointer();
+ StruActivateRes.write();
+ StruOutput.lpOutBuffer = ptrActivateRes;
+
+ if(!hCUsbSDK.USB_GetDeviceConfig(iHandle, HCUsbSDK.USB_GET_ACTIVATE_CARD, StruInput, StruOutput))
+ {
+ System.out.println("USB_GET_ACTIVATE_CARD failed, error:" + hCUsbSDK.USB_GetLastError());
+ }
+ else{
+ StruActivateRes.read();
+ System.out.println("byCardType:" + StruActivateRes.byCardType + ",bySerialLen:" + StruActivateRes.bySerialLen);
+
+ System.out.println("USB_GET_ACTIVATE_CARD succeed");
+
+ String SerialNumber = "";
+ //杩斿洖鐨刡ySerial鏁扮粍闇�瑕佸弽搴忎箣鍚庯紝灏嗗崄鍏繘鍒惰浆鎹㈡垚鍗佽繘鍒跺氨鏄崱鍙�
+ for(int i = 0; i < StruActivateRes.bySerialLen; i++)
+ {
+ String hex = Integer.toHexString(StruActivateRes.bySerial[StruActivateRes.bySerialLen-i-1] & 0xff);
+ if(hex.length() == 1)
+ {
+ hex += '0';
+ }
+ SerialNumber += hex.toUpperCase();
+ }
+ System.out.println("SerialNumber:0x" + SerialNumber);
+ System.out.println("cardNo:" + Long.parseLong(SerialNumber, 16));
+
+ }
+
+ }
+
+//class 缁撴潫
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java
new file mode 100644
index 0000000..b61accf
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/haikang/service/HKService.java
@@ -0,0 +1,1029 @@
+package com.doumee.core.haikang.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
+import com.doumee.core.haikang.model.HKConstants;
+import com.doumee.core.haikang.model.HKTools;
+import com.doumee.core.haikang.model.param.BaseListPageResponse;
+import com.doumee.core.haikang.model.param.BaseRequst;
+import com.doumee.core.haikang.model.param.BaseResponse;
+import com.doumee.core.haikang.model.param.request.*;
+import com.doumee.core.haikang.model.param.respose.*;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.InputStream;
+import java.util.List;
+
+@Slf4j
+public class HKService {
+ private Logger logger = LoggerFactory.getLogger(HKService.class);
+ /**
+ * 鑾峰彇鏍圭粍缁囨暟鎹�
+ * @return
+ */
+ public static BaseResponse<OrgInfoResponse> getRootOrg(BaseRequst param){
+ log.info("銆愭捣搴疯幏鍙栨牴缁勭粐銆�================寮�濮�====");
+ try {
+ String res = HKTools.getRootOrg ();
+ TypeReference typeReference =
+ new TypeReference< BaseResponse<OrgInfoResponse>>(){};
+ BaseResponse<OrgInfoResponse> result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍鑾峰彇鏍圭粍缁�");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴疯幏鍙栨牴缁勭粐銆�================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ * 淇敼缁勭粐鏁版嵁
+ * @return
+ */
+ public static BaseResponse editOrg(OrgEditRequest param){
+ log.info("銆愭捣搴蜂慨鏀圭粍缁囥��================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+
+ String res = HKTools.editOrg(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse>(){};
+ BaseResponse result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍淇敼缁勭粐");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴蜂慨鏀圭粍缁囥��================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ *鎵归噺鏂板缁勭粐鏁版嵁
+ * @return
+ */
+ public static BaseResponse<OrgOrUserAddResponse> addBatchOrg(List<OrgAddRequest> param){
+ log.info("銆愭捣搴锋柊澧炵粍缁囥��================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ String res = HKTools.addBatchOrg(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse<OrgOrUserAddResponse>>(){};
+ BaseResponse<OrgOrUserAddResponse> result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍鏂板缁勭粐");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴锋柊澧炵粍缁囥��================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ *鎵归噺鍒犻櫎缁勭粐鏁版嵁
+ * @return
+ */
+ public static BaseResponse<List<OrgUpdateFailureResponse>> delBatchOrg(OrgDelRequest param){
+ log.info("銆愭捣搴峰垹闄ょ粍缁囥��================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+
+ String res = HKTools.delOrg(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse >(){};
+ BaseResponse<List<OrgUpdateFailureResponse>> result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍鍒犻櫎缁勭粐");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴峰垹闄ょ粍缁囥��================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ *鏂板浜哄憳淇℃伅锛堟敮鎸佷汉鑴告暟鎹級
+ * @return
+ */
+ public static BaseResponse<UserAddResponse> addUser(UserAddRequest param){
+ log.info("銆愭捣搴锋柊澧炰汉鍛樸��================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ String res = HKTools.addUser(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse<UserAddResponse>>(){};
+ BaseResponse<UserAddResponse> result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍鏂板浜哄憳");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴锋柊澧炰汉鍛樸��================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ *淇敼浜哄憳淇℃伅锛堜笉鏀寔浜鸿劯鏁版嵁锛�
+ * @return
+ */
+ public static BaseResponse editUser(UserAddRequest param){
+ log.info("銆愭捣搴蜂慨鏀逛汉鍛樸��================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ String res = HKTools.editUser(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse<UserAddResponse>>(){};
+ BaseResponse<UserAddResponse> result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍淇敼浜哄憳");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴蜂慨鏀逛汉鍛樸��================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ *鎵归噺鏂板浜哄憳淇℃伅(鏃犱汉鑴革級
+ * @return
+ */
+ public static BaseResponse<OrgOrUserAddResponse> addBatchUser(List<UserAddRequest> param){
+ log.info("銆愭捣搴锋壒閲忔柊澧炰汉鍛樸��================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ String res = HKTools.addBatchUser(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse<OrgOrUserAddResponse>>(){};
+ BaseResponse<OrgOrUserAddResponse> result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍鎵归噺鏂板浜哄憳");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴锋壒閲忔柊澧炰汉鍛樸��================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ *鎵归噺鍒犻櫎浜哄憳淇℃伅
+ * @return
+ */
+ public static BaseResponse<List<UserDelResponse>> delBatchUser(UserDelRequest param){
+ log.info("銆愭捣搴锋壒閲忓垹闄や汉鍛樸��================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ String res = HKTools.delBatchUser(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse<List<UserDelResponse>>>(){};
+ BaseResponse<List<UserDelResponse >> result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍鎵归噺鍒犻櫎浜哄憳");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴锋壒閲忓垹闄や汉鍛樸��================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ *娣诲姞浜鸿劯淇℃伅
+ * @return
+ */
+ public static BaseResponse<FaceAddOrEditesponse> addFace( FaceAddRequest param){
+ log.info("銆愭捣搴锋坊鍔犱汉鑴镐俊鎭��================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ String res = HKTools.addFace(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse<FaceAddOrEditesponse>>(){};
+ BaseResponse<FaceAddOrEditesponse> result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍娣诲姞浜鸿劯淇℃伅");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴锋坊鍔犱汉鑴镐俊鎭��================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ *缂栬緫浜鸿劯淇℃伅
+ * @return
+ */
+ public static BaseResponse<FaceAddOrEditesponse> editFace( FaceEditRequest param){
+ log.info("銆愭捣搴风紪杈戜汉鑴镐俊鎭��================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ String res = HKTools.editFace(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse<FaceAddOrEditesponse>>(){};
+ BaseResponse<FaceAddOrEditesponse> result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍缂栬緫浜鸿劯淇℃伅");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴风紪杈戜汉鑴镐俊鎭��================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ *鍒犻櫎浜鸿劯淇℃伅
+ * @return
+ */
+ public static BaseResponse delFace(List<FaceEditRequest> param){
+ log.info("銆愭捣搴峰垹闄や汉鑴镐俊鎭��================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ String res = HKTools.delFace(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse>(){};
+ BaseResponse result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍鍒犻櫎浜鸿劯淇℃伅");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴峰垹闄や汉鑴镐俊鎭��================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ * 鑾峰彇娴峰悍浜鸿劯璁块棶鍦板潃
+ * @return
+ */
+ public static InputStream getFaceInputStream(FacePictureRequest param) {
+ log.info("銆愭捣搴蜂汉鑴歌闂浘鐗囨祦銆�================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ InputStream res = HKTools.getFaceInputStream(JSONObject.toJSONString(param));
+ log.error("銆愭捣搴蜂汉鑴歌闂浘鐗囨祦銆�================鎴愬姛====\n");
+ return res;
+ }catch (Exception e){
+ log.error("銆愭捣搴蜂汉鑴歌闂浘鐗囨祦銆�================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ * 鑾峰彇璁垮璁板綍涓殑鍥剧墖
+ * @return
+ */
+ public static InputStream getVisitPicture(VisitPictureRequest param) {
+ log.info("銆愭捣搴疯瀹㈠浘鐗囨祦銆�================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ InputStream res = HKTools.getVisitPicture(JSONObject.toJSONString(param));
+ log.error("銆愭捣搴疯瀹㈠浘鐗囨祦銆�================鎴愬姛====\n");
+ return res;
+ }catch (Exception e){
+ log.error("銆愭捣搴疯瀹㈠浘鐗囨祦銆�================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ * 鑾峰彇闂ㄧ浜嬩欢鐨勫浘鐗�
+ * @return
+ */
+ public static InputStream getDevicePicture(DevicePictureRequest param) {
+ log.info("銆愭捣搴烽棬绂佷簨浠跺浘鐗囨祦銆�================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ InputStream res = HKTools.getDevicePicture(JSONObject.toJSONString(param));
+ log.error("銆愭捣搴烽棬绂佷簨浠跺浘鐗囨祦銆�================鎴愬姛====\n");
+ return res;
+ }catch (Exception e){
+ log.error("銆愭捣搴烽棬绂佷簨浠跺浘鐗囨祦銆�================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ * 鏌ヨ杞﹁締鎶撴媿鍥剧墖
+ * @return
+ */
+ public static InputStream getCarPicture(CarPictureRequest param) {
+ log.info("銆愭捣搴疯溅杈嗘姄鎷嶅浘鐗囧浘鐗囨祦銆�================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ InputStream res = HKTools.getCarPicture(JSONObject.toJSONString(param));
+ log.error("銆愭捣搴疯溅杈嗘姄鎷嶅浘鐗囧浘鐗囨祦銆�================鎴愬姛====\n");
+ return res;
+ }catch (Exception e){
+ log.error("銆愭捣搴疯溅杈嗘姄鎷嶅浘鐗囧浘鐗囨祦銆�================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+
+ /**
+ *鑾峰彇杞﹀簱鍒楄〃鏁版嵁锛堝叏閲忥級
+ * @return
+ */
+ public static BaseResponse<List<ParkListResponse>> parkList(ParkListRequest param){
+ log.info("銆愭捣搴疯幏鍙栬溅搴撳垪琛ㄦ暟鎹��================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ String res = HKTools.parkList(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse<List<ParkListResponse>>>(){};
+ BaseResponse result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍鑾峰彇杞﹀簱鍒楄〃鏁版嵁");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴疯幏鍙栬溅搴撳垪琛ㄦ暟鎹��================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ *鑾峰彇杞﹀簱鍒楄〃鏁版嵁锛堝叏閲忥級
+ * @return
+ */
+ public static BaseResponse<List<EntranceListResponse>> entranceList(EntranceListRequest param){
+ log.info("銆愭捣鑾峰彇杞﹀簱鍒楄〃鏁版嵁銆�================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ String res = HKTools.entranceList(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse<List<EntranceListResponse>>>(){};
+ BaseResponse result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍鑾峰彇杞﹀簱鍒楄〃鏁版嵁");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴疯幏鍙栬溅搴撳垪琛ㄦ暟鎹��================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ *鍥哄畾杞﹁締鍏呭�硷紙鍖呮湡锛�
+ * @return
+ */
+ public static BaseResponse carChargeAddtion(CarChargeAddRequest param){
+ log.info("銆愭捣搴峰浐瀹氳溅杈嗗厖鍊笺��================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ String res = HKTools.carChargeAddtion(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse>(){};
+ BaseResponse result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍鍥哄畾杞﹁締鍏呭��");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴峰浐瀹氳溅杈嗗厖鍊笺��================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ *鍥哄畾杞﹁締鍙栨秷鍖呮湡
+ * @return
+ */
+ public static BaseResponse carChargeDeletion(CarChargeDelRequest param){
+ log.info("銆愭捣搴峰浐瀹氳溅杈嗗彇娑堝寘鏈熴��================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ String res = HKTools.carChargeDeletion(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse>(){};
+ BaseResponse result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍鍥哄畾杞﹁締鍙栨秷鍖呮湡");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴峰浐瀹氳溅杈嗗彇娑堝寘鏈熴��================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ *杞︿綅棰勭害
+ * @return
+ */
+ public static BaseResponse<ParkReservationAddResponse> parkReservationAddition(ParkReservationAddRequest param){
+ log.info("銆愭捣搴疯溅浣嶉绾︺��================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ String res = HKTools.parkAddition(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse<ParkReservationAddResponse>>(){};
+ BaseResponse<ParkReservationAddResponse> result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍杞︿綅棰勭害");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴疯溅浣嶉绾︺��================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ *杞︿綅鍙栨秷棰勭害
+ * @return
+ */
+ public static BaseResponse parkReservationDeletion(ParkReservationDelRequest param){
+ log.info("銆愭捣搴疯溅浣嶅彇娑堥绾︺��================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ String res = HKTools.carChargeDeletion(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse>(){};
+ BaseResponse result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍杞︿綅鍙栨秷棰勭害");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴疯溅浣嶅彇娑堥绾︺��================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ *璁垮棰勭害
+ * @return
+ */
+ public static BaseResponse<VisitAppointmentResponse> visitAppiontment(VisitAppointmentRequest param){
+ log.info("銆愭捣搴疯瀹㈤绾︺��================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ String res = HKTools.visitAppiontment(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse<VisitAppointmentResponse>>(){};
+ BaseResponse<VisitAppointmentResponse> result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍璁垮棰勭害");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴疯瀹㈤绾︺��================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ *璁垮棰勭害鍙栨秷
+ * @return
+ */
+ public static BaseResponse cancelVisitAppiontment(VisitAppointmentCancelRequest param){
+ log.info("銆愭捣搴疯瀹㈤绾﹀彇娑堛��================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ String res = HKTools.visitCancel(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse>(){};
+ BaseResponse result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍璁垮棰勭害鍙栨秷");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴疯瀹㈤绾﹀彇娑堛��================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ *璁垮棰勭害绛剧
+ * @return
+ */
+ public static BaseResponse outVisitAppiontment(VisitAppointmentOutRequest param){
+ log.info("銆愭捣搴疯瀹㈤绾︾绂汇��================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ String res = HKTools.visitOut(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse>(){};
+ BaseResponse result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍璁垮棰勭害绛剧");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴疯瀹㈤绾︾绂汇��================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ *璁垮鍏嶇櫥璁伴绾�
+ * @return
+ */
+ public static BaseResponse<VisitAppointmentMDJResponse> visitAppiontmentMDJ(VisitAppointmentMDJRequest param){
+ log.info("銆愭捣搴疯瀹㈠厤鐧昏棰勭害銆�================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ String res = HKTools.visitAppiontmentMDJ(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse<VisitAppointmentMDJResponse> >(){};
+ BaseResponse<VisitAppointmentMDJResponse> result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍璁垮鍏嶇櫥璁伴绾�");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴疯瀹㈠厤鐧昏棰勭害銆�================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ *璁垮鏉冮檺缁勫垪琛ㄦ煡璇紙鍒嗛〉锛�
+ * @return
+ */
+ public static BaseResponse<PrivilegeGroupListResponse> privilegeGroup(PrivilegeGroupRequest param){
+ log.info("銆愭捣搴疯瀹㈡潈闄愮粍鍒楄〃鏌ヨ銆�================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ String res = HKTools.privilegeGroup(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse<PrivilegeGroupListResponse> >(){};
+ BaseResponse<PrivilegeGroupListResponse> result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍璁垮鏉冮檺缁勫垪琛ㄦ煡璇�");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴疯瀹㈡潈闄愮粍鍒楄〃鏌ヨ銆�================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ *娴峰悍闂ㄧ鐐规煡璇紙鍒嗛〉锛�
+ * @return
+ */
+ public static BaseResponse<DoorsListResponse> doorSearch(DoorsListRequest param){
+ log.info("銆愭捣搴烽棬绂佺偣鏌ヨ銆�================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ String res = HKTools.doorSearch(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse<DoorsListResponse> >(){};
+ BaseResponse<DoorsListResponse> result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍闂ㄧ鐐规煡璇�");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴烽棬绂佺偣鏌ヨ銆�================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ *闂ㄧ璁惧鏌ヨ锛堝垎椤碉級
+ * @return
+ */
+ public static BaseResponse<AcsDeviceListResponse> acsDeviceList(AcsDeviceListRequest param){
+ log.info("銆愭捣搴烽棬绂佽澶囨煡璇€��================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ String res = HKTools.acsDeviceList(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse<AcsDeviceListResponse> >(){};
+ BaseResponse<AcsDeviceListResponse> result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍闂ㄧ璁惧鏌ヨ");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴烽棬绂佽澶囨煡璇€��================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ *浜嬩欢璁㈤槄
+ * @return
+ */
+ public static BaseResponse eventSub(EventSubRequest param){
+ log.info("銆愭捣搴蜂簨浠惰闃呫��================寮�濮�===="+JSONObject.toJSONString(param));
+ String res = null;
+ try {
+ res = HKTools.eventSub(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse >(){};
+ BaseResponse result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍浜嬩欢璁㈤槄");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴蜂簨浠惰闃呫��================澶辫触====锛歕n"+ e.getMessage());
+ }finally {
+ // saveInterfaceLog(param,res);
+ }
+ return null;
+ }
+ /**
+ *浜嬩欢璁㈤槄
+ * @return
+ */
+ public static BaseResponse cancelEventSub(EventSubRequest param){
+ log.info("銆愭捣搴峰彇娑堜簨浠惰闃呫��================寮�濮�===="+JSONObject.toJSONString(param));
+ String res = null;
+ try {
+ res = HKTools.cancelEventSub(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse >(){};
+ BaseResponse result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍鍙栨秷浜嬩欢璁㈤槄");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴峰彇娑堜簨浠惰闃呫��================澶辫触====锛歕n"+ e.getMessage());
+ }finally {
+ // saveInterfaceLog(param,res);
+ }
+ return null;
+ }
+ /**
+ *娴峰悍鍒涘缓涓�鍗¢�氫笅杞戒换鍔�
+ * @return
+ */
+ public static BaseResponse<TaskAdditionResponse> taskAddition(TaskAdditionRequest param){
+ log.info("銆愭捣搴峰垱寤轰竴鍗¢�氫笅杞戒换鍔°��================寮�濮�===="+JSONObject.toJSONString(param));
+ String res = null;
+ try {
+ res = HKTools.taskAddition(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse<TaskAdditionResponse>>(){};
+ BaseResponse<TaskAdditionResponse> result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍鍒涘缓涓�鍗¢�氫笅杞戒换鍔�");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴峰垱寤轰竴鍗¢�氫笅杞戒换鍔°��================澶辫触====锛歕n"+ e.getMessage());
+ }finally {
+ // saveInterfaceLog(param,res);
+ }
+ return null;
+ }
+ /**
+ *娴峰悍涓�鍗¢�氫换鍔℃坊鍔犳暟鎹�
+ * @return
+ */
+ public static BaseResponse taskDataAddition(TaskDataAdditionRequest param){
+ log.info("銆愭捣搴蜂竴鍗¢�氫换鍔℃坊鍔犳暟鎹��================寮�濮�===="+JSONObject.toJSONString(param));
+ String res = null;
+ try {
+ res = HKTools.taskDataAddition(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse >(){};
+ BaseResponse result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍涓�鍗¢�氫换鍔℃坊鍔犳暟鎹�");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴蜂竴鍗¢�氫换鍔℃坊鍔犳暟鎹��================澶辫触====锛歕n"+ e.getMessage());
+ }finally {
+ // saveInterfaceLog(param,res);
+ }
+ return null;
+ }
+ /**
+ *娴峰悍涓�鍗¢�氫换鍔¤繘搴︽煡璇�
+ * @return
+ */
+ public static BaseResponse<TaskProgressNumResponse> taskProgressNum(TaskProgressRequest param){
+ log.info("銆愭捣搴蜂竴鍗¢�氫换鍔¤繘搴︽煡璇€��================寮�濮�===="+JSONObject.toJSONString(param));
+ String res = null;
+ try {
+ res = HKTools.taskProgressNum(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse<TaskProgressNumResponse> >(){};
+ BaseResponse<TaskProgressNumResponse> result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍涓�鍗¢�氫换鍔¤繘搴︽煡璇�");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴蜂竴鍗¢�氫换鍔¤繘搴︽煡璇€��================澶辫触====锛歕n"+ e.getMessage());
+ }finally {
+ // saveInterfaceLog(param,res);
+ }
+ return null;
+ }
+ /**
+ *娴峰悍涓�鍗¢�氳澶囬�氶亾鐨勪汉鍛樻潈闄愪笅杞借鎯呮�绘暟v2
+ * @return
+ */
+ public static BaseResponse<TaskProgressResponse> taskProgress(TaskProgressRequest param){
+ log.info("銆愭捣搴蜂竴鍗¢�氳澶囬�氶亾鐨勪汉鍛樻潈闄愪笅杞借鎯呮�绘暟銆�================寮�濮�===="+JSONObject.toJSONString(param));
+ String res = null;
+ try {
+ res = HKTools.taskProgress(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse<TaskProgressResponse> >(){};
+ BaseResponse<TaskProgressResponse> result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍涓�鍗¢�氳澶囬�氶亾鐨勪汉鍛樻潈闄愪笅杞借鎯呮�绘暟");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴蜂竴鍗¢�氳澶囬�氶亾鐨勪汉鍛樻潈闄愪笅杞借鎯呮�绘暟銆�================澶辫触====锛歕n"+ e.getMessage());
+ }finally {
+ // saveInterfaceLog(param,res);
+ }
+ return null;
+ }
+ /**
+ *娴峰悍鏌ヨ鏉冮檺鏉$洰鍒楄〃
+ * @return
+ */
+ public static BaseResponse<AuthItemListResponse> authItemList(AuthItemListRequest param){
+ log.info("銆愭捣搴锋煡璇㈡潈闄愭潯鐩垪琛ㄣ��================寮�濮�===="+JSONObject.toJSONString(param));
+ String res = null;
+ try {
+ res = HKTools.authItemList(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse<AuthItemListResponse> >(){};
+ BaseResponse<AuthItemListResponse> result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍鏌ヨ鏉冮檺鏉$洰鍒楄〃");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴锋煡璇㈡潈闄愭潯鐩垪琛ㄣ��================澶辫触====锛歕n"+ e.getMessage());
+ }finally {
+ // saveInterfaceLog(param,res);
+ }
+ return null;
+ }
+ /**
+ *娴峰悍涓�鍗¢�氫换鍔″紑濮嬫墽琛�
+ * @return
+ */
+ public static BaseResponse taskStart(TaskProgressRequest param){
+ log.info("銆愭捣搴蜂竴鍗¢�氫换鍔″紑濮嬫墽琛屻��================寮�濮�===="+JSONObject.toJSONString(param));
+ String res = null;
+ try {
+ res = HKTools.taskStart(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse >(){};
+ BaseResponse result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍涓�鍗¢�氫换鍔″紑濮嬫墽琛�");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴蜂竴鍗¢�氫换鍔″紑濮嬫墽琛屻��================澶辫触====锛歕n"+ e.getMessage());
+ }finally {
+ // saveInterfaceLog(param,res);
+ }
+ return null;
+ }
+ /**
+ *娴峰悍鎵归噺寮�鍗�
+ * @return
+ */
+ public static BaseResponse<List<CardInfoResponse>> cardBingding(CardBingdingRequest param){
+ log.info("銆愭捣搴锋壒閲忓紑鍗°��================寮�濮�===="+JSONObject.toJSONString(param));
+ String res = null;
+ try {
+ res = HKTools.cardBingding(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse <List<CardInfoResponse>> >(){};
+ BaseResponse<List<CardInfoResponse>> result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍鎵归噺寮�鍗�");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴锋壒閲忓紑鍗°��================澶辫触====锛歕n"+ e.getMessage());
+ }finally {
+ }
+ return null;
+ }
+ /**
+ *娴峰悍閫�鍗�
+ * @return
+ */
+ public static BaseResponse cardDeletion(CardDeletionRequest param){
+ log.info("銆愭捣搴烽��鍗°��================寮�濮�===="+JSONObject.toJSONString(param));
+ String res = null;
+ try {
+ res = HKTools.cardDeletion(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse >(){};
+ BaseResponse result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍閫�鍗�");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴烽��鍗°��================澶辫触====锛歕n"+ e.getMessage());
+ }finally {
+ }
+ return null;
+ }
+ /**
+ *娴峰悍鎵归噺鎸傚け
+ * @return
+ */
+ public static BaseResponse cardLoss(CardLossRequest param){
+ log.info("銆愭捣搴锋壒閲忔寕澶便��================寮�濮�===="+JSONObject.toJSONString(param));
+ String res = null;
+ try {
+ res = HKTools.cardLoss(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse >(){};
+ BaseResponse result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍鎵归噺鎸傚け");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴锋壒閲忔寕澶便��================澶辫触====锛歕n"+ e.getMessage());
+ }finally {
+ }
+ return null;
+ }
+ /**
+ *娴峰悍鎵归噺瑙f寕
+ * @return
+ */
+ public static BaseResponse cardUnLoss(CardLossRequest param){
+ log.info("銆愭捣搴锋壒閲忚В鎸傘��================寮�濮�===="+JSONObject.toJSONString(param));
+ String res = null;
+ try {
+ res = HKTools.cardUnloss(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse >(){};
+ BaseResponse result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍鎵归噺瑙f寕");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴锋壒閲忚В鎸傘��================澶辫触====锛歕n"+ e.getMessage());
+ }finally {
+ }
+ return null;
+ }
+ /**
+ *娴峰悍鏌ヨ璁惧閫氶亾鐨勪汉鍛樻潈闄愪笅杞借鎯�
+ * @return
+ */
+ public static BaseResponse<TaskPersonDetailListResponse> taskPersoDetail(TaskPersonDetailRequest param){
+ log.info("銆愭捣搴锋煡璇㈣澶囬�氶亾鐨勪汉鍛樻潈闄愪笅杞借鎯呫��================寮�濮�===="+JSONObject.toJSONString(param));
+ String res = null;
+ try {
+ res = HKTools.taskPersoDetail(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse <TaskPersonDetailListResponse>>(){};
+ BaseResponse<TaskPersonDetailListResponse> result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍鏌ヨ璁惧閫氶亾鐨勪汉鍛樻潈闄愪笅杞借鎯�");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴锋煡璇㈣澶囬�氶亾鐨勪汉鍛樻潈闄愪笅杞借鎯呫��================澶辫触====锛歕n"+ e.getMessage());
+ }finally {
+ }
+ return null;
+ }
+ /**
+ *鏌ヨ璁垮棰勭害璁板綍锛堝垎椤碉級
+ * @return
+ */
+ public static BaseResponse<BaseListPageResponse<AppointmentInfoResponse>> appointmentRecords(AppointmentListRequest param){
+ log.info("銆愭捣搴疯瀹㈤绾﹁褰曟煡璇€��================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ String res = HKTools.appointmentRecords(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference<BaseResponse<BaseListPageResponse<AppointmentInfoResponse>>>(){};
+ BaseResponse<BaseListPageResponse<AppointmentInfoResponse>> result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍璁垮棰勭害璁板綍鏌ヨ");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴疯瀹㈤绾﹁褰曟煡璇€��================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ *鏌ヨ璁垮鏉ヨ璁板綍锛堝凡鐧昏锛夛紙鍒嗛〉锛�
+ * @return
+ */
+ public static BaseResponse<BaseListPageResponse<VisitingInfoResponse>> visitingRecords(VisitingInfoRequest param){
+ log.info("銆愭捣搴疯瀹㈡潵璁胯褰曟煡璇€��================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ String res = HKTools.visitingRecords(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference<BaseResponse<BaseListPageResponse<VisitingInfoResponse>>>(){};
+ BaseResponse<BaseListPageResponse<VisitingInfoResponse>> result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍璁垮鏉ヨ璁板綍鏌ヨ");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴疯瀹㈡潵璁胯褰曟煡璇€��================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ *鍏ㄩ噺缁勭粐鏌ヨ锛堝垎椤碉級
+ * @return
+ */
+ public static BaseResponse<BaseListPageResponse<OrgInfoResponse>> orgAllList(TimeRangeListRequest param){
+ log.info("銆愭捣搴峰叏閲忕粍缁囨煡璇€��================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ String res = HKTools.orgAllList(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse<BaseListPageResponse<OrgInfoResponse>>> (){};
+ BaseResponse<BaseListPageResponse<OrgInfoResponse>> result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍鍏ㄩ噺缁勭粐鏌ヨ");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴峰叏閲忕粍缁囨煡璇€��================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ *澧為噺缁勭粐鏌ヨ锛堝垎椤碉級
+ * @return
+ */
+ public static BaseResponse<BaseListPageResponse<OrgTimeRangeInfoResponse>> orgTimeRangeList(TimeRangeListRequest param){
+ log.info("銆愭捣搴峰閲忕粍缁囨煡璇€��================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ String res = HKTools.orgTimeRangeList(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse<BaseListPageResponse<OrgTimeRangeInfoResponse>> >(){};
+ BaseResponse<BaseListPageResponse<OrgTimeRangeInfoResponse>> result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍澧為噺缁勭粐鏌ヨ");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴峰閲忕粍缁囨煡璇€��================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ *鍏ㄩ噺浜哄憳鏌ヨ锛堝垎椤碉級
+ * @return
+ */
+ public static BaseResponse<BaseListPageResponse<UserInfoResponse>> userAllList(TimeRangeListRequest param){
+ log.info("銆愭捣搴峰叏閲忎汉鍛樻煡璇€��================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ String res = HKTools.userAllList(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse<BaseListPageResponse<UserInfoResponse>> >(){};
+ BaseResponse<BaseListPageResponse<UserInfoResponse>> result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍鍏ㄩ噺浜哄憳鏌ヨ");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴峰叏閲忎汉鍛樻煡璇€��================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ *鍏ㄩ噺浜哄憳鏌ヨ2锛堟牴鎹潯浠舵煡璇㈠垎椤碉級
+ * @return
+ */
+ public static BaseResponse<BaseListPageResponse<UserInfoResponse>> personList(UserByParamListRequest param){
+ log.info("銆愭捣搴锋牴鎹潯浠舵煡璇汉鍛樺垪琛ㄣ��================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ String res = HKTools.personList(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse<BaseListPageResponse<UserInfoResponse>> >(){};
+ BaseResponse<BaseListPageResponse<UserInfoResponse>> result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍鏍规嵁鏉′欢鏌ヨ浜哄憳鍒楄〃");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴锋牴鎹潯浠舵煡璇汉鍛樺垪琛ㄣ��================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ *澧為噺浜哄憳鏌ヨ锛堝垎椤碉級
+ * @return
+ */
+ public static BaseResponse<BaseListPageResponse<UserTimeRangeInfoResponse>> userTimeRangeList(TimeRangeListRequest param){
+ log.info("銆愭捣搴峰閲忎汉鍛樻煡璇€��================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ String res = HKTools.userTimeRangeList(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse<BaseListPageResponse<UserTimeRangeInfoResponse>> >(){};
+ BaseResponse<BaseListPageResponse<UserTimeRangeInfoResponse>> result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍澧為噺浜哄憳鏌ヨ");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴峰閲忎汉鍛樻煡璇€��================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ *鍏ㄩ噺杞﹁締鏌ヨ锛堝垎椤碉級
+ * @return
+ */
+ public static BaseResponse<BaseListPageResponse<VehicleInfoResponse>> vehicleList(TimeRangeListRequest param){
+ log.info("銆愭捣搴峰叏閲忎汉鍛樻煡璇€��================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ String res = HKTools.vehicleList(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse<BaseListPageResponse<VehicleInfoResponse>> >(){};
+ BaseResponse<BaseListPageResponse<VehicleInfoResponse>> result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍鍏ㄩ噺浜哄憳鏌ヨ");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴峰叏閲忎汉鍛樻煡璇€��================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ *杩囪溅璁板綍鏌ヨ锛堝垎椤碉級
+ * @return
+ */
+ public static BaseResponse<BaseListPageResponse<ParkCrossRecordInfoResponse>> parkCrossRecords(ParkCrossRecordListRequest param){
+ log.info("銆愭捣搴疯繃杞﹁褰曟煡璇㈡煡璇€��================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ String res = HKTools.parkCrossRecords(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse<BaseListPageResponse<ParkCrossRecordInfoResponse>> >(){};
+ BaseResponse<BaseListPageResponse<ParkCrossRecordInfoResponse>> result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍杩囪溅璁板綍鏌ヨ鏌ヨ");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴疯繃杞﹁褰曟煡璇㈡煡璇€��================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ *澧為噺杞﹁締鏌ヨ锛堝垎椤碉級
+ * @return
+ */
+ public static BaseResponse<BaseListPageResponse<VehicleTimeRangeInfoResponse>> vehicleTimeRangeList(TimeRangeListRequest param){
+ log.info("銆愭捣搴峰閲忎汉鍛樻煡璇€��================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ String res = HKTools.vehicleTimeRangeList(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse<BaseListPageResponse<VehicleTimeRangeInfoResponse>> >(){};
+ BaseResponse<BaseListPageResponse<VehicleTimeRangeInfoResponse>> result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍澧為噺浜哄憳鏌ヨ");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴峰閲忎汉鍛樻煡璇€��================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ *澧為噺杞﹁締鏌ヨ锛堝垎椤碉級
+ * @return
+ */
+ public static BaseResponse<BaseListPageResponse<VehicleTimeRangeInfoResponse>> facePictureCheck(TimeRangeListRequest param){
+ log.info("銆愭捣搴峰閲忎汉鍛樻煡璇€��================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ String res = HKTools.facePictureCheck(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse<BaseListPageResponse<VehicleTimeRangeInfoResponse>> >(){};
+ BaseResponse<BaseListPageResponse<VehicleTimeRangeInfoResponse>> result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍澧為噺浜哄憳鏌ヨ");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴峰閲忎汉鍛樻煡璇€��================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ *鑾峰彇闂ㄧ璁惧鍦ㄧ嚎鐘舵�侊紙鍒嗛〉锛�
+ * @return
+ */
+ public static BaseResponse<BaseListPageResponse<AscDeviceStatusInfoResponse>> acsDeviceStatus(AcsDeviceStatusListRequest param){
+ log.info("銆愭捣搴疯幏鍙栭棬绂佽澶囧湪绾跨姸鎬併��================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ String res = HKTools.acsDeviceStatus(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse<BaseListPageResponse<AscDeviceStatusInfoResponse>> >(){};
+ BaseResponse<BaseListPageResponse<AscDeviceStatusInfoResponse>> result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍鑾峰彇闂ㄧ璁惧鍦ㄧ嚎鐘舵��");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴疯幏鍙栭棬绂佽澶囧湪绾跨姸鎬併��================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ /**
+ *鏌ヨ鍦哄唴杞﹀仠杞︿俊鎭紙鍒嗛〉锛�
+ * @return
+ */
+ public static BaseResponse<BaseListPageResponse<TempCarInRecordInfoResponse>> tempCarInRecords(TempCarInRecordListRequest param){
+ log.info("銆愭捣搴锋煡璇㈠満鍐呰溅鍋滆溅淇℃伅銆�================寮�濮�===="+JSONObject.toJSONString(param));
+ try {
+ String res = HKTools.tempCarInRecords(JSONObject.toJSONString(param));
+ TypeReference typeReference =
+ new TypeReference< BaseResponse<BaseListPageResponse<TempCarInRecordInfoResponse>> >(){};
+ BaseResponse<BaseListPageResponse<TempCarInRecordInfoResponse>> result = JSONObject.parseObject(res, typeReference.getType());
+ logResult(result,"娴峰悍鏌ヨ鍦哄唴杞﹀仠杞︿俊鎭�");
+ return result;
+ }catch (Exception e){
+ log.error("銆愭捣搴锋煡璇㈠満鍐呰溅鍋滆溅淇℃伅銆�================澶辫触====锛歕n"+ e.getMessage());
+ }
+ return null;
+ }
+ private static void logResult(BaseResponse res,String name) {
+ if(StringUtils.equals(res.getCode(),HKConstants.RESPONSE_SUCCEE)){
+ log.info("銆�"+name+"銆�================鎴愬姛====\n"+res);
+ }else{
+ log.error("銆�"+name+"銆�================澶辫触====锛歕n"+ res);
+ }
+ }
+
+}
+
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/TemplateData.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/TemplateData.java
new file mode 100644
index 0000000..aad9cf6
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/TemplateData.java
@@ -0,0 +1,19 @@
+package com.doumee.core.wx;
+
+import lombok.Data;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2022/12/7 17:28
+ */
+@Data
+public class TemplateData {
+ private String value;
+
+ public TemplateData(String value) {
+ this.value = value;
+ }
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/WXConstant.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/WXConstant.java
new file mode 100644
index 0000000..d2e0d23
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/WXConstant.java
@@ -0,0 +1,19 @@
+package com.doumee.core.wx;
+
+/**
+ * 鍏紬鍙锋帴鍙e湴鍧�绫�
+ *
+ * @Author : Rk
+ * @create 2023/12/7 10:42
+ */
+public class WXConstant {
+
+ //鑾峰彇鍏紬鍙� access_token
+ public static final String GET_ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
+
+ //鑾峰彇鐢ㄦ埛淇℃伅
+ public static final String GET_USER_INFO_URL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
+
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/WxMiniUtilService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/WxMiniUtilService.java
new file mode 100644
index 0000000..8dca404
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/WxMiniUtilService.java
@@ -0,0 +1,53 @@
+package com.doumee.core.wx;
+
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.utils.ID;
+//import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest;
+//import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest;
+//import com.github.binarywang.wxpay.bean.result.WxPayRefundResult;
+//import com.github.binarywang.wxpay.exception.WxPayException;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+
+/**
+ * 寰俊灏忕▼搴�-鍏叡鏂规硶
+ */
+@Service
+@Slf4j
+public class WxMiniUtilService {
+
+//
+// /**
+// * 璁㈠崟寰俊閫�娆�
+// * orderNo:鍟嗘埛璁㈠崟鍙�
+// * totalPrice锛氳鍗曟�婚噾棰�
+// * refundPrice锛涢��娆鹃噾棰�
+// */
+// @Transactional(rollbackFor = Exception.class)
+// public static String wxRefund(String orderNo, BigDecimal totalPrice, BigDecimal refundPrice) {
+// try {
+// // 鍙戦�侀��娆捐姹�
+// String refNum = ID.nextGUID();
+// WxPayRefundRequest request = new WxPayRefundRequest();
+// request.setOutTradeNo(orderNo);
+// request.setOutRefundNo(refNum);
+// // request.setTotalFee(2);
+// // request.setRefundFee(1);
+// request.setTotalFee(BaseWxPayRequest.yuanToFen(totalPrice.toString()));
+// request.setRefundFee(BaseWxPayRequest.yuanToFen(refundPrice.toString()));
+// WxPayRefundResult response = WxMiniConfig.wxPayService.refund(request);
+// if ("SUCCESS".equals(response.getReturnCode()) && "SUCCESS".equals(response.getResultCode())) {
+// return refNum;
+// } else {
+// throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),response.getErrCode() + response.getErrCodeDes());
+// }
+// } catch (WxPayException e) {
+// e.printStackTrace();
+// }
+// throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"閫�娆惧彂鐢熷紓甯歌鑱旂郴绠$悊鍛�");
+// }
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatNotice.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatNotice.java
new file mode 100644
index 0000000..57febaf
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatNotice.java
@@ -0,0 +1,69 @@
+package com.doumee.core.wx.wxPlat;
+
+import com.doumee.dao.business.model.Visits;
+import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.mp.api.WxMpService;
+import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
+import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+/**
+ * 寰俊鍏紬鍙烽�氱煡
+ *
+ * @Author : Rk
+ * @create 2023/12/27 9:19
+ */
+@Slf4j
+@Component
+public class WxPlatNotice {
+
+ /**
+ * 寰俊鍏紬鍙稟PI鐨凷ervice
+ */
+ private final WxMpService wxMpService;
+
+ public WxPlatNotice(WxMpService wxMpService) {
+ this.wxMpService = wxMpService;
+ }
+
+ /**
+ * 璁垮璁板綍瀹℃壒涓氬姟閫氱煡
+ */
+ public Boolean sendVisitAuditTemplateNotice(Visits visits,String prefix,String tempId){
+ if(StringUtils.isBlank(visits.getOpenid())){
+ return false;
+ }
+ WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
+ .toUser(visits.getOpenid())
+ .templateId(tempId)
+ .url(prefix + visits.getId())
+ .build();
+ String thing1 = "寰呭鎵�";
+ if(visits.getStatus()==2){
+ thing1 = "瀹℃牳閫氳繃";
+ }else if(visits.getStatus()==3){
+ thing1 = "瀹℃牳涓嶉�氳繃";
+ }else if(visits.getStatus()==5){
+ thing1 = "璁惧鎺堟潈鎴愬姛";
+ }else if(visits.getStatus()==6){
+ thing1 = "璁惧鎺堟潈鏈垚鍔�";
+ }
+ // 娣诲姞妯℃澘鏁版嵁
+ templateMessage.addData(new WxMpTemplateData("thing1", thing1))
+ .addData(new WxMpTemplateData("thing2", visits.getName()))
+ .addData(new WxMpTemplateData("phone_number6", visits.getPhone()));
+ String msgId = null;
+ try {
+ // 鍙戦�佹ā鏉挎秷鎭�
+ msgId = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
+ } catch (WxErrorException e) {
+ e.printStackTrace();
+ }
+ log.warn("路==++--路鎺ㄩ�佸井淇℃ā鏉夸俊鎭細{}路--++==路", msgId != null ? "鎴愬姛" : "澶辫触");
+ return msgId != null;
+ }
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/LaborMemberDTO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/LaborMemberDTO.java
new file mode 100644
index 0000000..bd60ab8
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/LaborMemberDTO.java
@@ -0,0 +1,50 @@
+package com.doumee.dao.admin.request;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author T14
+ */
+@Data
+public class LaborMemberDTO {
+
+ @ApiModelProperty(value = "鎵�灞炵粍缁囩紪鐮�(鍏宠仈company琛�)")
+ private Integer companyId;
+
+ @ApiModelProperty(value = "浜鸿劯鐓х墖")
+ private String faceImg;
+
+ @ApiModelProperty(value = "鍋ュ悍鐮�")
+ private String imgurl;
+
+ @ApiModelProperty(value = "绫诲瀷 0鍔冲姟璁垮 1鏅�氳瀹� 2鍐呴儴浜哄憳")
+ private Integer type;
+
+ @ApiModelProperty(value = "璁垮鍚嶇О")
+ private String name;
+
+ @ApiModelProperty(value = "鎵嬫満鍙�")
+ private String phone;
+
+ @ApiModelProperty(value = "韬唤璇佸彿")
+ private String idcardNo;
+
+ @ApiModelProperty(value = "璇佷欢鏄剧ず淇℃伅")
+ private String idcardDecode;
+
+ @ApiModelProperty(value = "鍩硅鏈夋晥鏈熻捣濮�")
+ private Date startTime;
+
+ @ApiModelProperty(value = "鍩硅鏈夋晥鏈熺粨鏉�")
+ private Date endTime;
+
+ @ApiModelProperty(value = "鎬у埆 1 : 鐢� 锛� 0 : 濂�")
+ private Integer sex;
+
+ @ApiModelProperty(value = "娣诲姞浜虹紪鐮侊紙鑷叧鑱旓級", example = "1")
+ private Integer parentId;
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/MemberQuery.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/MemberQuery.java
new file mode 100644
index 0000000..d285e67
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/MemberQuery.java
@@ -0,0 +1,70 @@
+package com.doumee.dao.admin.request;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.models.auth.In;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author T14
+ */
+@Data
+@ApiModel("浜哄憳鏌ヨ 鍙傛暟")
+public class MemberQuery implements Serializable {
+
+ @ApiModelProperty(value = "濮撳悕/鎵嬫満鍙�/宸ュ彿")
+ private String keyword;
+
+ @ApiModelProperty(value = "鏄惁鏈変汉鑴� 0 鍚� 1 鏄�")
+ private Integer hasFace;
+
+ @ApiModelProperty(value = "鍙嫓璁�")
+ private Integer canVisit;
+
+ @ApiModelProperty(value = "鐘舵��")
+ private Integer status;
+
+ @ApiModelProperty(value = "鍏徃IDs")
+ private List<Integer> companyIds;
+
+ @ApiModelProperty(value = "濮撳悕")
+ private String name;
+
+
+ @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
+ private Integer isdeleted;
+
+ @ApiModelProperty(value = "鎵嬫満鍙�")
+ private String phone;
+
+ @ApiModelProperty(value = "鍏徃鍚嶇О")
+ private String companyName;
+
+ @ApiModelProperty(value = "韬唤璇佸彿")
+ private String idcardNo;
+
+ @ApiModelProperty(value = " 0鍔冲姟璁垮 1鏅�氳瀹� 2鍐呴儴浜哄憳")
+ private Integer type;
+
+
+ @ApiModelProperty(value = " 宸ュ彿鍛�")
+ private Integer code;
+
+ @ApiModelProperty(value = "娴峰悍鐘舵�� 0寰呬笅鍙� 1鎴愬姛2澶辫触")
+ private Integer hkStatus;
+
+ @ApiModelProperty(value = "鎿嶄綔浜哄憳 ")
+ private Integer createrId;
+
+
+
+ @ApiModelProperty(value = "erp鏈烘瀯涓婚敭 ")
+ private String erpOrgId;
+ @ApiModelProperty(value = "鏈烘瀯涓婚敭 ")
+ private String companyId;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/OptionsObject.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/OptionsObject.java
new file mode 100644
index 0000000..4a04385
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/OptionsObject.java
@@ -0,0 +1,18 @@
+package com.doumee.dao.admin.request;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author LS
+ */
+@Data
+@ApiModel("閫夐」瀵硅薄闆�")
+public class OptionsObject {
+
+ @ApiModelProperty("閫夐」缂栧彿")
+ private String code;
+ @ApiModelProperty("閫夐」鍐呭")
+ private String value;
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/VisitConfigParam.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/VisitConfigParam.java
new file mode 100644
index 0000000..2b56626
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/VisitConfigParam.java
@@ -0,0 +1,24 @@
+package com.doumee.dao.admin.request;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 鎸囧畾鍙傛暟
+ */
+@Data
+public class VisitConfigParam {
+
+ @ApiModelProperty(value = "鏉ヨ棰勭害鏂瑰紡")
+ private Integer reservationWay;
+
+ @ApiModelProperty(value = "琚浜烘牎楠屾柟寮�")
+ private Integer checkVisit;
+
+ @ApiModelProperty(value = "鍋ュ悍璇佹槸鍚﹀繀濉�")
+ private Integer healthCard;
+
+ @ApiModelProperty(value = "鍔冲姟鏄惁绛旈")
+ private Integer isAnswer;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/response/CarEventDTO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/response/CarEventDTO.java
new file mode 100644
index 0000000..525e3ca
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/response/CarEventDTO.java
@@ -0,0 +1,192 @@
+package com.doumee.dao.admin.response;
+
+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.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author T14
+ */
+@Data
+@ApiModel("鍋滆溅鍦轰簨浠舵帹閫佽褰曡〃")
+public class CarEventDTO {
+
+ @ApiModelProperty(value = "涓婚敭")
+ private Integer id;
+
+ @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�")
+ private Integer creator;
+
+ @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+ private Date createDate;
+
+ @ApiModelProperty(value = "鏇存柊浜虹紪鐮�")
+ private Integer editor;
+
+ @ApiModelProperty(value = "鏇存柊鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date editDate;
+
+ @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�")
+ private Integer isdeleted;
+
+ @ApiModelProperty(value = "澶囨敞")
+ private String remark;
+
+ @ApiModelProperty(value = "浜嬩欢鍞竴鏍囪瘑锛屽悓涓�浜嬩欢鑻ヤ笂鎶ュ娆★紝鍒欎笂鎶ヤ簨浠剁殑eventId鐩稿悓")
+ private String eventId;
+
+ @ApiModelProperty(value = "浜嬩欢婧愮紪鍙凤紝鐗╃悊璁惧鏄祫婧愮紪鍙�")
+ private String srcIndex;
+
+ @ApiModelProperty(value = "浜嬩欢婧愮被鍨�")
+ private String srcType;
+
+ @ApiModelProperty(value = "浜嬩欢婧愬悕绉�")
+ private String srcName;
+
+ @ApiModelProperty(value = "浜嬩欢绫诲瀷")
+ private Integer eventType;
+
+ @ApiModelProperty(value = "浜嬩欢绫诲瀷鍚嶇О")
+ @ExcelColumn(name="浜嬩欢绫诲瀷",index = 4,width = 18)
+ private String eventTypeName;
+
+ @ApiModelProperty(value = "浜嬩欢鐘舵��,0-鐬椂 1-寮�濮�2-鍋滄4-浜嬩欢鑱斿姩缁撴灉鏇存柊5-浜嬩欢鍥剧墖寮傛涓婁紶")
+ private Integer status;
+
+ @ApiModelProperty(value = "鑴夊啿瓒呮椂鏃堕棿")
+ private String timeout;
+
+ @ApiModelProperty(value = "浜嬩欢鍙戠敓鏃堕棿锛堣澶囨椂闂�")
+ @ExcelColumn(name="浜嬩欢鏃堕棿",index = 10,width = 16)
+ private String happenTime;
+
+ @ApiModelProperty(value = "浜嬩欢鍙戠敓鐨勪簨浠舵簮鐖惰澶�")
+ private String srcParentIndex;
+
+ @ApiModelProperty(value = "鏄惁榛戝悕鍗曟爣璇嗭紙1-榛戝悕鍗� 0-闈為粦鍚嶅崟锛�")
+ private String alarmCar;
+
+ @ApiModelProperty(value = "杞﹁締灞炴�у悕绉�")
+ private String carAttributeName;
+
+ @ApiModelProperty(value = "鍗″彿")
+ private String cardNo;
+ /**鍏宠仈浜哄憳淇℃伅**/
+ @ApiModelProperty(value = "鎵嬫満鍙�")
+ @ExcelColumn(name="鎵嬫満鍙�",index = 8,width = 16)
+ private String personPhone;
+
+ @ApiModelProperty(value = "浜哄憳绫诲瀷")
+ @ExcelColumn(name="浜哄憳绫诲瀷",index = 6,width = 10,valueMapping = "0=鍔冲姟璁垮;1=鏅�氳瀹�;2=鍐呴儴浜哄憳;")
+ private Integer personType;
+
+ @ApiModelProperty(value = "浜哄憳韬唤璇佸彿")
+ private String personIdcardDecode;
+
+ @ApiModelProperty(value = "浜哄憳缁勭粐鍏徃")
+ @ExcelColumn(name="鍏徃/閮ㄩ棬",index = 9,width = 16)
+ private String personCompanyName;
+ @ApiModelProperty(value = "璁垮鍏徃1")
+ private String visitCompanyName;
+
+ @ApiModelProperty(value = "濮撳悕")
+ @ExcelColumn(name="濮撳悕",index = 7,width = 16)
+ private String personName;
+
+ @ApiModelProperty(value = "浜嬩欢鍙�,1:鍘嬬嚎浜嬩欢2:涓婁紶鍥剧墖3:鍏ュ満4:鍑哄満5:杞︾墝鐭6:鍥剧墖閲嶄紶")
+ private Integer eventCmd;
+
+ @ApiModelProperty(value = "浜嬩欢缂栧彿")
+ private String eventIndex;
+
+ @ApiModelProperty(value = "鍑哄叆鍙g紪鍙�")
+ private String gateIndex;
+
+ @ApiModelProperty(value = "鍑哄叆鍙e悕绉�")
+ @ExcelColumn(name="鍑哄叆鍙e悕绉�",index = 3,width = 18)
+ private String gateName;
+
+ @ApiModelProperty(value = "鏀捐鏉冮檺")
+ private Integer releaseAuth;
+
+ @ApiModelProperty(value = "鏀捐鍘熷洜")
+ private Integer releaseReason;
+
+ @ApiModelProperty(value = "鏀捐缁撴灉")
+ private Integer releaseResult;
+
+ @ApiModelProperty(value = "鏂颁綋绯绘斁琛岀粨鏋�")
+ private Integer releaseResultEx;
+
+ @ApiModelProperty(value = "鏀捐鏂瑰紡")
+ private Integer releaseWay;
+
+ @ApiModelProperty(value = "杩涘嚭鍦虹被鍨嬶紝0锛氳繘鍦猴紝1锛氬嚭鍦�")
+ @ExcelColumn(name="鍑哄叆绫诲瀷",index = 5,width = 10,valueMapping = "0=杩涘満;1=鍑哄満;")
+ private Integer inoutType;
+
+ @ApiModelProperty(value = "杞︾墝鍙�")
+ @ExcelColumn(name="杞︾墝鍙�",index = 1,width = 12)
+ private String plateNos;
+
+ @ApiModelProperty(value = "杞﹁締涓诲搧鐗�")
+ private Integer mainLogo;
+
+ @ApiModelProperty(value = "鍋滆溅搴撶紪鍙�")
+ private String parkIndex;
+
+ @ApiModelProperty(value = "鍋滆溅搴撳悕绉�")
+ @ExcelColumn(name="鍋滆溅搴撳悕绉�",index = 2,width = 18)
+ private String parkName;
+
+ @ApiModelProperty(value = "杞︾墝棰滆壊")
+ private String plateColor;
+
+ @ApiModelProperty(value = "杞︾墝缃俊搴�")
+ private BigDecimal plateBelieve;
+
+ @ApiModelProperty(value = "杞︾墝绫诲瀷")
+ private Integer plateType;
+
+ @ApiModelProperty(value = "杞﹂亾缂栧彿")
+ private String roadwayIndex;
+
+ @ApiModelProperty(value = "杞﹂亾鍚嶇О")
+ private String roadwayName;
+
+ @ApiModelProperty(value = "杞﹂亾绫诲瀷 1锛氬叆鍦鸿溅閬� 2锛氬嚭鍦轰笉鏀惰垂杞﹂亾 3锛氬嚭鍦虹即璐硅溅閬� 4锛氫腑澶即璐硅溅閬�")
+ private Integer roadwayType;
+
+ @ApiModelProperty(value = "杞﹁締瀛愬搧鐗�")
+ private Integer subLogo;
+
+ @ApiModelProperty(value = "瀛愬搧鐗屽勾娆�")
+ private Integer subModel;
+
+ @ApiModelProperty(value = "鏃堕棿 ISO鏍煎紡")
+ private String timestr;
+
+ @ApiModelProperty(value = "杞﹁締灞炴��")
+ private Integer vehicleClass;
+
+ @ApiModelProperty(value = "杞﹁締棰滆壊")
+ private Integer vehicleColor;
+
+ @ApiModelProperty(value = "杞﹁締绫诲瀷")
+ private Integer vehicleType;
+
+ @ApiModelProperty(value = "杞﹁締鍥剧墖")
+ private String vehiclePicUrl;
+
+ @ApiModelProperty(value = "杞︾墝鍥剧墖")
+ private String platePicUrl;
+
+ @ApiModelProperty(value = "鍥剧墖鏈嶅姟鍣ㄧ紪鍙�")
+ private String svrIndex;
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/response/DevWgResponseParam.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/response/DevWgResponseParam.java
new file mode 100644
index 0000000..1d0e406
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/response/DevWgResponseParam.java
@@ -0,0 +1,16 @@
+package com.doumee.dao.admin.response;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 鎵弿杩斿洖寰厜璁惧淇℃伅
+ */
+@Data
+public class DevWgResponseParam {
+
+ @ApiModelProperty(value = "浜岀淮鐮佷俊鎭�")
+ private String vgdecoderesult;
+ @ApiModelProperty(value = "璁惧鍨嬪彿")
+ private String devicenumber;
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/response/StagingDataVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/response/StagingDataVO.java
new file mode 100644
index 0000000..6ece8b1
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/response/StagingDataVO.java
@@ -0,0 +1,47 @@
+package com.doumee.dao.admin.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2024/2/26 11:02
+ */
+@Data
+@ApiModel("宸ヤ綔鍙版暟鎹�")
+public class StagingDataVO {
+
+ @ApiModelProperty(value = "鍐呴儴鍛樺伐")
+ private Long workerCount;
+
+ @ApiModelProperty(value = "璁垮浜哄憳")
+ private Long visitorCount;
+
+ @ApiModelProperty(value = "鍔冲姟浜哄憳")
+ private Long lwCount;
+
+ @ApiModelProperty(value = "鍦ㄥ満杞﹁締")
+ private Integer presenceCarCount;
+
+ @ApiModelProperty(value = "棰勭害杞﹁締")
+ private Integer visitorCarCount;
+
+ @ApiModelProperty(value = "闀挎湡杞﹁締")
+ private Integer longCarCount;
+
+ @ApiModelProperty(value = "渚涘簲鍟嗘暟閲�")
+ private Integer supplierCount;
+
+ @ApiModelProperty(value = "鍔冲姟鍏徃浜哄憳鏁�")
+ private List<Map<String,Object>> companyUsers;
+
+ @ApiModelProperty(value = "婊炵暀浜哄憳鏁版嵁")
+ private List<Map<String,Object>> retentionUsers;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/response/VisitEventDTO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/response/VisitEventDTO.java
new file mode 100644
index 0000000..09f4d91
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/response/VisitEventDTO.java
@@ -0,0 +1,137 @@
+package com.doumee.dao.admin.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+/**
+ * @author T14
+ */
+@Data
+@ApiModel("璁垮浜嬩欢鎺ㄩ�佽褰曡〃")
+public class VisitEventDTO {
+
+ @ApiModelProperty(value = "涓婚敭")
+ private Integer id;
+
+ @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�")
+ private Integer creator;
+
+ @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+ private Date createDate;
+
+ @ApiModelProperty(value = "鏇存柊浜虹紪鐮�")
+ private Integer editor;
+
+ @ApiModelProperty(value = "鏇存柊鏃堕棿")
+ private Date editDate;
+
+ @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�")
+ private Integer isdeleted;
+
+ @ApiModelProperty(value = "澶囨敞")
+ private String remark;
+
+ @ApiModelProperty(value = "浜嬩欢鍞竴鏍囪瘑锛屽悓涓�浜嬩欢鑻ヤ笂鎶ュ娆★紝鍒欎笂鎶ヤ簨浠剁殑eventId鐩稿悓")
+ private String eventId;
+
+ @ApiModelProperty(value = "浜嬩欢婧愮紪鍙凤紝鐗╃悊璁惧鏄祫婧愮紪鍙�")
+ private String srcIndex;
+
+ @ApiModelProperty(value = "浜嬩欢婧愮被鍨�")
+ private String srcType;
+
+ @ApiModelProperty(value = "浜嬩欢婧愬悕绉�")
+ private String srcName;
+
+ @ApiModelProperty(value = "浜嬩欢绫诲瀷")
+ private Integer eventType;
+
+ @ApiModelProperty(value = "浜嬩欢绫诲瀷鍚嶇О")
+ private String eventTypeName;
+
+ @ApiModelProperty(value = "浜嬩欢鐘舵��,0-鐬椂1-寮�濮�2-鍋滄4-浜嬩欢鑱斿姩缁撴灉鏇存柊5-浜嬩欢鍥剧墖寮傛涓婁紶")
+ private Integer status;
+
+ @ApiModelProperty(value = "鑴夊啿瓒呮椂鏃堕棿")
+ private String timeout;
+
+ @ApiModelProperty(value = "浜嬩欢鍙戠敓鏃堕棿锛堣澶囨椂闂�")
+ private String happenTime;
+
+ @ApiModelProperty(value = "浜嬩欢鍙戠敓鐨勪簨浠舵簮鐖惰澶�")
+ private String srcParentIndex;
+
+ @ApiModelProperty(value = "璁垮Is锛�,瀵瑰簲璁垮鏉ヨ璁板綍涓殑orderId瀛楁")
+ private String visitorId;
+
+
+ @ApiModelProperty(value = "鎵嬫満鍙�")
+ private String phone;
+
+ @ApiModelProperty(value = "浜哄憳绫诲瀷")
+ private String personType;
+
+ @ApiModelProperty(value = "浜哄憳韬唤璇佸彿")
+ private String personIdcardDecode;
+
+ @ApiModelProperty(value = "浜哄憳缁勭粐鍏徃")
+ private String personCompanyName;
+
+
+ @ApiModelProperty(value = "濮撳悕")
+ private String personName;
+
+ @ApiModelProperty(value = "鎬у埆 1-鐢�2-濂�")
+ private Integer sex;
+
+ @ApiModelProperty(value = "璇佷欢绫诲瀷 111韬唤璇�")
+ private String idType;
+
+ @ApiModelProperty(value = "璇佷欢鍙� ")
+ private String idNo;
+
+ @ApiModelProperty(value = "琚闂汉濮撳悕")
+ private String beVisitedPersonName;
+
+ @ApiModelProperty(value = "琚闂汉鎵�灞炵粍缁�")
+ private String beVisitedPersonOrg;
+
+ @ApiModelProperty(value = "鏉ヨ鍗曚綅")
+ private String visitorWorkUint;
+
+ @ApiModelProperty(value = "璁垮楠岃瘉鐮�")
+ private String visitorCode;
+
+ @ApiModelProperty(value = "鏉ヨ浜嬬敱")
+ private String purpose;
+
+ @ApiModelProperty(value = "璇佷欢绛惧彂鏈哄叧")
+ private String signOrg;
+
+ @ApiModelProperty(value = "寮�濮嬫椂闂�")
+ private String startTime;
+
+ @ApiModelProperty(value = "绂诲紑鏃堕棿")
+ private String endTime;
+
+ @ApiModelProperty(value = "杞︾墝鍙�")
+ private String carNo;
+
+ @ApiModelProperty(value = "鐓х墖uri")
+ private String photoUrl;
+
+ @ApiModelProperty(value = "鎶撴媿鍥緐ri")
+ private String captureUrl;
+
+ @ApiModelProperty(value = "鍥剧墖瀛樺偍鏈嶅姟鍣ㄥ敮涓�鏍囪瘑")
+ private String svrIndexCode;
+
+ @ApiModelProperty(value = "琚闂汉id")
+ private String beVisitedPersonId;
+
+ @ApiModelProperty(value = "琚闂汉鎵�灞炵粍缁噄d")
+ private String beVisitedPersonOrgId;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/CarEventMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/CarEventMapper.java
new file mode 100644
index 0000000..f502dbe
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/CarEventMapper.java
@@ -0,0 +1,15 @@
+package com.doumee.dao.business;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.CarEvent;
+
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+public interface CarEventMapper extends BaseMapper<CarEvent> {
+
+ void insertBatchSomeColumn(List<CarEvent> list);
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/CategoryMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/CategoryMapper.java
new file mode 100644
index 0000000..420b930
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/CategoryMapper.java
@@ -0,0 +1,12 @@
+package com.doumee.dao.business;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.Category;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+public interface CategoryMapper extends BaseMapper<Category> {
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/CompanyMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/CompanyMapper.java
new file mode 100644
index 0000000..6ed1e68
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/CompanyMapper.java
@@ -0,0 +1,15 @@
+package com.doumee.dao.business;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.Company;
+
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+public interface CompanyMapper extends BaseMapper<Company> {
+
+ void insertBatchSomeColumn(List<Company> addList);
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/EmpowerMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/EmpowerMapper.java
new file mode 100644
index 0000000..bea29ec
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/EmpowerMapper.java
@@ -0,0 +1,15 @@
+package com.doumee.dao.business;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.Empower;
+
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+public interface EmpowerMapper extends BaseMapper<Empower> {
+
+ void insertBatchSomeColumn(List<Empower> list);
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/InterfaceLogMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/InterfaceLogMapper.java
new file mode 100644
index 0000000..5626f4b
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/InterfaceLogMapper.java
@@ -0,0 +1,12 @@
+package com.doumee.dao.business;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.InterfaceLog;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+public interface InterfaceLogMapper extends BaseMapper<InterfaceLog> {
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/MemberCardMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/MemberCardMapper.java
new file mode 100644
index 0000000..0032769
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/MemberCardMapper.java
@@ -0,0 +1,16 @@
+package com.doumee.dao.business;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.MemberCard;
+import com.doumee.dao.business.model.MemberRole;
+
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+public interface MemberCardMapper extends BaseMapper<MemberCard> {
+
+ void insertBatchSomeColumn(List<MemberCard> list);
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/MemberRoleMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/MemberRoleMapper.java
new file mode 100644
index 0000000..cff3a2e
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/MemberRoleMapper.java
@@ -0,0 +1,17 @@
+package com.doumee.dao.business;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.MemberRole;
+import com.doumee.dao.business.model.VisitEvent;
+
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+public interface MemberRoleMapper extends BaseMapper<MemberRole> {
+
+ void insertBatchSomeColumn(List<MemberRole> list);
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/TrainTimeMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/TrainTimeMapper.java
new file mode 100644
index 0000000..e40946b
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/TrainTimeMapper.java
@@ -0,0 +1,12 @@
+package com.doumee.dao.business;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.TrainTime;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+public interface TrainTimeMapper extends BaseMapper<TrainTime> {
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/UserActionMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/UserActionMapper.java
new file mode 100644
index 0000000..f5d61e0
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/UserActionMapper.java
@@ -0,0 +1,12 @@
+package com.doumee.dao.business;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.UserAction;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/12/14 13:57
+ */
+public interface UserActionMapper extends BaseMapper<UserAction> {
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/VisitsMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/VisitsMapper.java
new file mode 100644
index 0000000..977569f
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/VisitsMapper.java
@@ -0,0 +1,15 @@
+package com.doumee.dao.business;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.Visits;
+
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+public interface VisitsMapper extends BaseMapper<Visits> {
+
+ void insertBatchSomeColumn(List<Visits> withUserList);
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/CarEventJoinMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/CarEventJoinMapper.java
new file mode 100644
index 0000000..371b2f6
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/CarEventJoinMapper.java
@@ -0,0 +1,12 @@
+package com.doumee.dao.business.join;
+
+import com.doumee.dao.business.model.CarEvent;
+import com.github.yulichang.base.mapper.MPJJoinMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author T14
+ */
+//@Repository
+public interface CarEventJoinMapper extends MPJJoinMapper<CarEvent> {
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/DeviceJoinMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/DeviceJoinMapper.java
new file mode 100644
index 0000000..73bbfd7
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/DeviceJoinMapper.java
@@ -0,0 +1,8 @@
+package com.doumee.dao.business.join;
+
+import com.doumee.dao.business.model.Device;
+import com.doumee.dao.business.model.UserAction;
+import com.github.yulichang.base.mapper.MPJJoinMapper;
+
+public interface DeviceJoinMapper extends MPJJoinMapper<Device> {
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/EmpowerJoinMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/EmpowerJoinMapper.java
new file mode 100644
index 0000000..f920075
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/EmpowerJoinMapper.java
@@ -0,0 +1,15 @@
+package com.doumee.dao.business.join;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.Empower;
+import com.github.yulichang.base.mapper.MPJJoinMapper;
+
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+public interface EmpowerJoinMapper extends MPJJoinMapper<Empower> {
+ void insertBatchSomeColumn(List<Empower> list);
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/MemberRoleJoinMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/MemberRoleJoinMapper.java
new file mode 100644
index 0000000..8eb63a7
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/MemberRoleJoinMapper.java
@@ -0,0 +1,12 @@
+package com.doumee.dao.business.join;
+
+import com.doumee.dao.business.model.Member;
+import com.doumee.dao.business.model.MemberRole;
+import com.github.yulichang.base.mapper.MPJJoinMapper;
+
+/**
+ * @author T14
+ */
+//@Repository
+public interface MemberRoleJoinMapper extends MPJJoinMapper<MemberRole> {
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/ProblemLogJoinMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/ProblemLogJoinMapper.java
new file mode 100644
index 0000000..b8a2b8c
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/ProblemLogJoinMapper.java
@@ -0,0 +1,10 @@
+package com.doumee.dao.business.join;
+
+import com.doumee.dao.business.model.ProblemLog;
+import com.github.yulichang.base.mapper.MPJJoinMapper;
+/**
+ * @author T14
+ */
+public interface ProblemLogJoinMapper extends MPJJoinMapper<ProblemLog> {
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/VisitEventJoinMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/VisitEventJoinMapper.java
new file mode 100644
index 0000000..ae61a90
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/VisitEventJoinMapper.java
@@ -0,0 +1,11 @@
+package com.doumee.dao.business.join;
+
+import com.doumee.dao.business.model.VisitEvent;
+import com.github.yulichang.base.mapper.MPJJoinMapper;
+
+/**
+ * @author T14
+ */
+//@Repository
+public interface VisitEventJoinMapper extends MPJJoinMapper<VisitEvent> {
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/VisitsJoinMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/VisitsJoinMapper.java
new file mode 100644
index 0000000..21acf16
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/VisitsJoinMapper.java
@@ -0,0 +1,12 @@
+package com.doumee.dao.business.join;
+
+import com.doumee.dao.business.model.MemberCard;
+import com.doumee.dao.business.model.Visits;
+import com.github.yulichang.base.mapper.MPJJoinMapper;
+
+/**
+ * @author T14
+ */
+//@Repository
+public interface VisitsJoinMapper extends MPJJoinMapper<Visits> {
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveParam.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveParam.java
new file mode 100644
index 0000000..d38c87d
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveParam.java
@@ -0,0 +1,86 @@
+package com.doumee.dao.business.model;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+
+/**
+ * 瀹℃壒妯$増閰嶇疆淇℃伅琛�
+ * @author 姹熻箘韫�
+ * @date 2023/12/28 11:46
+ */
+@Data
+@ApiModel("瀹℃壒妯$増閰嶇疆淇℃伅琛�")
+@TableName("`approve_param`")
+public class ApproveParam {
+
+ @TableId(type = IdType.AUTO)
+ @ApiModelProperty(value = "涓婚敭", example = "1")
+ @ExcelColumn(name="涓婚敭")
+ private Integer id;
+
+ @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+ @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+ private Integer creator;
+
+ @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+ @ExcelColumn(name="鍒涘缓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date createDate;
+
+ @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
+ @ExcelColumn(name="鏇存柊浜虹紪鐮�")
+ private Integer editor;
+
+ @ApiModelProperty(value = "鏇存柊鏃堕棿")
+ @ExcelColumn(name="鏇存柊鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date editDate;
+
+ @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
+ @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
+ private Integer isdeleted;
+
+ @ApiModelProperty(value = "澶囨敞")
+ @ExcelColumn(name="澶囨敞")
+ private String remark;
+
+ @ApiModelProperty(value = "绫诲瀷 0瀹℃壒 1鎶勯��", example = "1")
+ @ExcelColumn(name="绫诲瀷 0瀹℃壒 1鎶勯��")
+ private Integer type;
+
+ @ApiModelProperty(value = "瀹℃壒浜虹被鍨� 0琚浜� 1鎸囧畾浜哄憳 2閮ㄩ棬涓荤")
+ @ExcelColumn(name="瀹℃壒浜虹被鍨� 0琚浜� 1鎸囧畾浜哄憳 2閮ㄩ棬涓荤")
+ private Integer memberType;
+
+ @ApiModelProperty(value = "绛夌骇", example = "1")
+ @ExcelColumn(name="绛夌骇")
+ private Integer level;
+
+ @ApiModelProperty(value = "瀹℃壒浜哄鍚嶏紝澶氫釜鐢ㄨ嫳鏂囬�楀彿闅斿紑")
+ @ExcelColumn(name="瀹℃壒浜哄鍚嶏紝澶氫釜鐢ㄨ嫳鏂囬�楀彿闅斿紑")
+ private String objNames;
+
+ @ApiModelProperty(value = "瀹℃壒浜虹紪鐮侊紝澶氫釜鐢ㄨ嫳鏂囬�楀彿闅斿紑")
+ @ExcelColumn(name="瀹℃壒浜虹紪鐮侊紝澶氫釜鐢ㄨ嫳鏂囬�楀彿闅斿紑")
+ private String objIds;
+
+ @ApiModelProperty(value = "瀹℃壒涓荤绛夌骇 0鐩存帴涓荤 1浜岀骇涓荤 2涓夌骇涓荤 4鍥涚骇涓荤", example = "1")
+ @ExcelColumn(name="瀹℃壒涓荤绛夌骇 0鐩存帴涓荤 1浜岀骇涓荤 2涓夌骇涓荤 4鍥涚骇涓荤")
+ private Integer objLevel;
+
+ @ApiModelProperty(value = "澶氫汉瀹℃壒鏂瑰紡 0鎴栫 1浼氱", example = "1")
+ @ExcelColumn(name="澶氫汉瀹℃壒鏂瑰紡 0鎴栫 1浼氱")
+ private Integer approveType;
+
+ @ApiModelProperty(value = "鏃犱富绠¢�夐」 0娴佺▼缁撴潫 1鐢变笂绾т富绠′唬鏇垮鏍�", example = "1")
+ @ExcelColumn(name="鏃犱富绠¢�夐」 0娴佺▼缁撴潫 1鐢变笂绾т富绠′唬鏇垮鏍�")
+ private Integer noleaderOpt;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/InterfaceLog.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/InterfaceLog.java
new file mode 100644
index 0000000..e6ef8f7
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/InterfaceLog.java
@@ -0,0 +1,98 @@
+package com.doumee.dao.business.model;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+
+/**
+ * 涓夋柟骞冲彴鎺ュ彛浜や簰璁板綍
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Data
+@ApiModel("涓夋柟骞冲彴鎺ュ彛浜や簰璁板綍")
+@TableName("`interface_log`")
+public class InterfaceLog {
+
+ @TableId(type = IdType.AUTO)
+ @ApiModelProperty(value = "涓婚敭", example = "1")
+ @ExcelColumn(name="涓婚敭")
+ private Integer id;
+
+ @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+ @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+ private Integer creator;
+
+ @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+ @ExcelColumn(name="鍒涘缓鏃堕棿")
+ private Date createDate;
+
+ @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
+ @ExcelColumn(name="鏇存柊浜虹紪鐮�")
+ private Integer editor;
+
+ @ApiModelProperty(value = "鏇存柊鏃堕棿")
+ @ExcelColumn(name="鏇存柊鏃堕棿")
+ private Date editDate;
+
+ @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
+ @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
+ private Integer isdeleted;
+
+ @ApiModelProperty(value = "澶囨敞")
+ @ExcelColumn(name="澶囨敞")
+ private String remark;
+
+ @ApiModelProperty(value = "绫诲瀷 0璋冪敤 1鎺ㄩ�佹帴鍙�", example = "1")
+ @ExcelColumn(name="绫诲瀷 0璋冪敤 1鎺ㄩ�佹帴鍙�")
+ private Integer type;
+
+ @ApiModelProperty(value = "鎺ュ彛鍚嶇О")
+ @ExcelColumn(name="鎺ュ彛鍚嶇О")
+ private String name;
+
+ @ApiModelProperty(value = "鍦板潃淇℃伅")
+ @ExcelColumn(name="鍦板潃淇℃伅")
+ private String url;
+
+ @ApiModelProperty(value = "璇锋眰鍙傛暟")
+ @ExcelColumn(name="璇锋眰鍙傛暟")
+ private String request;
+
+ @ApiModelProperty(value = "鍝嶅簲鍙傛暟")
+ @ExcelColumn(name="鍝嶅簲鍙傛暟")
+ private String repose;
+
+ @ApiModelProperty(value = "璋冪敤缁撴灉 0鎴愬姛 1澶辫触", example = "1")
+ @ExcelColumn(name="璋冪敤缁撴灉 0鎴愬姛 1澶辫触")
+ private Integer success;
+
+ @ApiModelProperty(value = "骞冲彴 0娴峰悍瀹夐槻骞冲彴 1ERP绯荤粺", example = "1")
+ @ExcelColumn(name="骞冲彴 0娴峰悍瀹夐槻骞冲彴 1ERP绯荤粺")
+ private Integer plat;
+
+ @ApiModelProperty(value = "鍏宠仈瀵硅薄绫诲瀷 0缁勭粐 1浜哄憳 2闂ㄧ浜嬩欢 3璁惧", example = "1")
+ @ExcelColumn(name="鍏宠仈瀵硅薄绫诲瀷 0缁勭粐 1浜哄憳 2闂ㄧ浜嬩欢 3璁惧")
+ private Integer objType;
+
+ @ApiModelProperty(value = "鍏宠仈瀵硅薄缂栫爜锛堝涓敤鑻辨枃閫楀彿闅斿紑锛�")
+ @ExcelColumn(name="鍏宠仈瀵硅薄缂栫爜锛堝涓敤鑻辨枃閫楀彿闅斿紑锛�")
+ private String objId;
+
+
+ @ApiModelProperty(value = "寮�濮嬫椂闂�")
+ @TableField(exist = false)
+ private Date startDate;
+
+ @ApiModelProperty(value = "缁撴潫鏃堕棿")
+ @TableField(exist = false)
+ private Date endDate;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
new file mode 100644
index 0000000..7de820b
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
@@ -0,0 +1,257 @@
+package com.doumee.dao.business.model;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 浜哄憳淇℃伅琛�
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Data
+@ApiModel("浜哄憳淇℃伅琛�")
+@TableName("`member`")
+public class Member {
+
+ @TableId(type = IdType.AUTO)
+ @ApiModelProperty(value = "涓婚敭", example = "1")
+ @ExcelColumn(name="涓婚敭")
+ private Integer id;
+
+ @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+ @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+ private Integer creator;
+
+ @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+ @ExcelColumn(name="鍒涘缓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date createDate;
+
+ @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
+ @ExcelColumn(name="鏇存柊浜虹紪鐮�")
+ private Integer editor;
+
+ @ApiModelProperty(value = "鏇存柊鏃堕棿")
+ @ExcelColumn(name="鏇存柊鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date editDate;
+
+ @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
+ @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
+ private Integer isdeleted;
+
+ @ApiModelProperty(value = "澶囨敞")
+ @ExcelColumn(name="澶囨敞")
+ private String remark;
+
+ @ApiModelProperty(value = "鎵�灞炵粍缁囩紪鐮�(鍏宠仈company琛�)", example = "1")
+ @ExcelColumn(name="鎵�灞炵粍缁囩紪鐮�(鍏宠仈company琛�)")
+ private Integer companyId;
+
+ @ApiModelProperty(value = "浜鸿劯鐓х墖")
+ @ExcelColumn(name="浜鸿劯鐓х墖")
+ private String faceImg;
+ @ApiModelProperty(value = "浜鸿劯瀛樺偍鏈嶅姟鍣ㄦ爣璇嗭紙娴峰悍锛�")
+ @ExcelColumn(name="浜鸿劯瀛樺偍鏈嶅姟鍣ㄦ爣璇嗭紙娴峰悍锛�")
+ private String faceServerIndexCode;
+ @ApiModelProperty(value = "浜鸿劯缂栫爜锛堟捣搴凤級")
+ @ExcelColumn(name="浜鸿劯缂栫爜锛堟捣搴凤級")
+ private String faceId;
+ @ApiModelProperty(value = "浜鸿劯鍚屾鐘舵�侊紙娴峰悍锛� 0鏈悓姝� 1宸插悓姝� 2鍚屾澶辫触 3涓嶅悎鏍�")
+ @ExcelColumn(name="浜鸿劯鍚屾鐘舵�侊紙娴峰悍锛� 0鏈悓姝� 1宸插悓姝� 2鍚屾澶辫触 3涓嶅悎鏍�")
+ private Integer faceStatus;
+ @ApiModelProperty(value = "浜鸿劯鍚屾淇℃伅锛堟捣搴凤級")
+ @ExcelColumn(name="浜鸿劯鍚屾淇℃伅锛堟捣搴凤級")
+ private String faceInfo;
+ @ApiModelProperty(value = "鍋ュ悍鐮�")
+ @ExcelColumn(name="鍋ュ悍鐮�")
+ private String imgurl;
+
+ @ApiModelProperty(value = "绫诲瀷 0鍔冲姟璁垮 1鏅�氳瀹� 2鍐呴儴浜哄憳", example = "1")
+ @ExcelColumn(name="绫诲瀷 0鍔冲姟璁垮 1鏅�氳瀹� 2鍐呴儴浜哄憳")
+ private Integer type;
+
+ @ApiModelProperty(value = "璁垮鍚嶇О/鍐呴儴浜哄憳")
+ @ExcelColumn(name="璁垮鍚嶇О")
+ private String name;
+
+ @ApiModelProperty(value = "璁垮骞撮緞")
+ @ExcelColumn(name="璁垮骞撮緞")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date birthday;
+
+ @ApiModelProperty(value = "鎵嬫満鍙�")
+ @ExcelColumn(name="鎵嬫満鍙�")
+ private String phone;
+
+ @ApiModelProperty(value = "韬唤璇佸彿锛圡D4鍔犲瘑锛�")
+ @ExcelColumn(name="韬唤璇佸彿锛圡D4鍔犲瘑锛�")
+ private String idcardNo;
+
+ @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;
+
+ @ApiModelProperty(value = "鐝 0鐧界彮 1澶滅彮")
+ @ExcelColumn(name="鐝 0鐧界彮 1澶滅彮")
+ private Integer classes;
+
+ @ApiModelProperty(value = "鐘舵�� 0姝e父 1绂佺敤 2鎷夐粦/鍐荤粨", example = "1")
+ @ExcelColumn(name="鐘舵�� 0姝e父 1绂佺敤 2鎷夐粦/鍐荤粨")
+ private Integer status;
+ @ApiModelProperty(value = "鎬у埆 1鐢� 2濂� ", example = "1")
+ @ExcelColumn(name="鎬у埆 1鐢� 2濂�")
+ private Integer sex;
+ @ApiModelProperty(value = "娣诲姞浜虹紪鐮侊紙鑷叧鑱旓級", example = "1")
+ @ExcelColumn(name="娣诲姞浜虹紪鐮侊紙鑷叧鑱旓級")
+ private Integer parentId;
+
+ @ApiModelProperty(value = "寰俊openid")
+ @ExcelColumn(name="寰俊openid")
+ private String openid;
+
+ @ApiModelProperty(value = "椋炰功鏍囪瘑")
+ @ExcelColumn(name="椋炰功鏍囪瘑")
+ private String fsId;
+
+ @ApiModelProperty(value = "椋炰功鍚屾鐘舵�� 0鏈悓姝� 1宸插悓姝�", example = "1")
+ @ExcelColumn(name="椋炰功鍚屾鐘舵�� 0鏈悓姝� 1宸插悓姝�")
+ private Integer fsStatus;
+
+ @ApiModelProperty(value = "椋炰功鏈�杩戝悓姝ユ椂闂�")
+ @ExcelColumn(name="椋炰功鏈�杩戝悓姝ユ椂闂�")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date fsDate;
+
+ @ApiModelProperty(value = "娴峰悍鏍囪瘑", example = "1")
+ @ExcelColumn(name="娴峰悍鏍囪瘑")
+ private String hkId;
+
+ @ApiModelProperty(value = "娴峰悍鍚屾鐘舵�� 0鏈悓姝� 1宸插悓姝� 2鍚屾澶辫触 3涓嶇鍚堜笅鍙戞潯浠� 4绛夊緟鍒犻櫎鏉冮檺 ", example = "1")
+ @ExcelColumn(name="娴峰悍鍚屾鐘舵�� 0鏈悓姝� 1宸插悓姝� 2鍚屾澶辫触 3涓嶇鍚堜笅鍙戞潯浠� 4绛夊緟鍒犻櫎鏉冮檺")
+ private Integer hkStatus;
+
+ @ApiModelProperty(value = "娴峰悍鏈�杩戝悓姝ユ椂闂�")
+ @ExcelColumn(name="娴峰悍鏈�杩戝悓姝ユ椂闂�")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date hkDate;
+
+ @ApiModelProperty(value = "ERP鏍囪瘑", example = "1")
+ @ExcelColumn(name="ERP鏍囪瘑")
+ private String erpId;
+
+ @ApiModelProperty(value = "ERP鍚屾鏃堕棿")
+ @ExcelColumn(name="ERP鍚屾鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date erpDate;
+
+ @ApiModelProperty(value = "ERP鍚屾鐘舵�� 0鏈悓姝� 1宸插悓姝�", example = "1")
+ @ExcelColumn(name="ERP鍚屾鐘舵�� 0鏈悓姝� 1宸插悓姝�")
+ private Integer erpStatus;
+
+ @ApiModelProperty(value = "閽夐拤鏍囪瘑", example = "1")
+ @ExcelColumn(name="閽夐拤鏍囪瘑")
+ private Integer ddId;
+
+ @ApiModelProperty(value = "閽夐拤鍚屾鏃堕棿")
+ @ExcelColumn(name="閽夐拤鍚屾鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date ddDate;
+
+ @ApiModelProperty(value = "閽夐拤P鍚屾鐘舵�� 0鏈悓姝� 1宸插悓姝�", example = "1")
+ @ExcelColumn(name="閽夐拤P鍚屾鐘舵�� 0鏈悓姝� 1宸插悓姝�")
+ private Integer ddStatus;
+
+ @ApiModelProperty(value = "鐧婚檰瀵嗙爜")
+ @ExcelColumn(name="鐧婚檰瀵嗙爜")
+ private String passward;
+
+ @ApiModelProperty(value = "鏄惁鍙嫓璁夸汉 0鍚� 1鏄�", example = "1")
+ @ExcelColumn(name="鏄惁鍙嫓璁夸汉 0鍚� 1鏄�")
+ private Integer canVisit;
+
+ @ApiModelProperty(value = "鏄惁楂樼骇瀹℃壒浜� 0鍚� 1鏄�", example = "1")
+ @ExcelColumn(name="鏄惁楂樼骇瀹℃壒浜� 0鍚� 1鏄�")
+ private Integer highCheckor;
+
+ @ApiModelProperty(value = "闂ㄧ瑙掕壊缂栫爜锛堝叧鑱攄evice_role),澶氫釜鑻辨枃閫楀彿闅斿紑", example = "1")
+ @ExcelColumn(name="闂ㄧ瑙掕壊缂栫爜 ")
+ private String roleId;
+
+ @ApiModelProperty(value = "闂ㄧ瑙掕壊鎺堟潈鏃堕棿")
+ @ExcelColumn(name="闂ㄧ瑙掕壊鎺堟潈鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date roleDate;
+
+ @ApiModelProperty(value = "ERP缁勭粐缂栫爜")
+ @ExcelColumn(name="ERP缁勭粐缂栫爜")
+ private String erpOrgId;
+
+ @ApiModelProperty(value = "璁垮鍏徃鍚嶇О")
+ @ExcelColumn(name="璁垮鍏徃鍚嶇О")
+ private String visitCompanyName;
+
+ @ApiModelProperty(value = "缁勭粐鍚嶇О")
+ @TableField(exist = false)
+ private String companyName;
+ @ApiModelProperty(value = "缁勭粐娴峰悍缂栫爜")
+ @TableField(exist = false)
+ private String hkOrgId;
+ @ApiModelProperty(value = "瑙掕壊缂栫爜鏌ヨ")
+ @TableField(exist = false)
+ private String roleIdParam;
+
+ @ApiModelProperty(value = "鍓嶇紑鍦板潃")
+ @TableField(exist = false)
+ private String prefixUrl;
+
+ @ApiModelProperty(value = "鎺堟潈闂ㄧ缁勭紪鐮侀泦鍚�,銆愯瀹㈢銆戝敮涓�鏍囪瘑",hidden = true )
+ @TableField(exist = false)
+ private Integer[] roleIds;
+
+ //鏆傛棤浣跨敤
+ @ApiModelProperty(value = "濮撳悕/鎵嬫満鍙�/宸ュ彿")
+ @TableField(exist = false)
+ private String keyword;
+
+ @ApiModelProperty(value = "鏄惁鏈変汉鑴革細0=鏃狅紱1=鏈夛紱")
+ @TableField(exist = false)
+ private Integer isFace;
+
+ @ApiModelProperty(value = "璁块棶娆℃暟")
+ @TableField(exist = false)
+ private Integer visitTimes;
+
+ @ApiModelProperty(value = "鏈�鍚庤闂椂闂�")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date lastVisitDate;
+
+ @ApiModelProperty(value = "闂ㄧ鏈夋晥鏈熷紑濮�")
+ @ExcelColumn(name="闂ㄧ鏈夋晥鏈熷紑濮�",index= 5,dateFormat = "yyyy-MM-dd")
+ private Date startTime;
+ @ApiModelProperty(value = "缂栫爜闆嗗悎")
+ @TableField(exist = false)
+ private List<Integer> idList;
+
+ @ApiModelProperty(value = "闂ㄧ鏈夋晥鏈熺粨鏉�", example = "1")
+ @ExcelColumn(name="闂ㄧ鏈夋晥鏈熺粨鏉�",index= 6,dateFormat = "yyyy-MM-dd")
+ private Date endTime;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ProblemLog.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ProblemLog.java
new file mode 100644
index 0000000..d8b3069
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ProblemLog.java
@@ -0,0 +1,104 @@
+package com.doumee.dao.business.model;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.doumee.config.mybatis.JSONObjectHandler;
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+import java.math.BigDecimal;
+
+/**
+ * 璁垮绛旈璁板綍琛�
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Data
+@ApiModel("璁垮绛旈璁板綍琛�")
+@TableName(value = "`problem_log`",autoResultMap = true)
+public class ProblemLog {
+
+ @TableId(type = IdType.AUTO)
+ @ApiModelProperty(value = "涓婚敭", example = "1")
+ @ExcelColumn(name="涓婚敭")
+ private Integer id;
+
+ @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+ @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+ private Integer creator;
+
+ @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+ @ExcelColumn(name="鍒涘缓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date createDate;
+
+ @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
+ @ExcelColumn(name="鏇存柊浜虹紪鐮�")
+ private Integer editor;
+
+ @ApiModelProperty(value = "鏇存柊鏃堕棿")
+ @ExcelColumn(name="鏇存柊鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date editDate;
+
+ @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
+ @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
+ private Integer isdeleted;
+
+ @ApiModelProperty(value = "澶囨敞")
+ @ExcelColumn(name="澶囨敞")
+ private String remark;
+
+ @ApiModelProperty(value = "璁垮缂栫爜", example = "1")
+ @ExcelColumn(name="璁垮缂栫爜")
+ private Integer userId;
+
+ @ApiModelProperty(value = "鏄惁宸插畬鎴愮敵璇� 0鍚� 1鏄�", example = "1")
+ @ExcelColumn(name="鏄惁宸插畬鎴愮敵璇� 0鍚� 1鏄�")
+ private Integer status;
+
+ @ApiModelProperty(value = "缁戝畾鐢宠缂栫爜")
+ @ExcelColumn(name="缁戝畾鐢宠缂栫爜")
+ private Integer logId;
+
+ @ApiModelProperty(value = "寰楀垎", example = "1")
+ @ExcelColumn(name="寰楀垎")
+ private BigDecimal score;
+
+ @ApiModelProperty(value = "绛旈鏄庣粏锛宩son瀛樺偍")
+ @ExcelColumn(name="绛旈鏄庣粏锛宩son瀛樺偍")
+ @TableField(value = "content", typeHandler = JSONObjectHandler.class)
+ private JSONObject content;
+
+ @ApiModelProperty(value = "绛旈浜哄鍚�")
+ @ExcelColumn(name="绛旈浜哄鍚�")
+ private String name;
+
+ @ApiModelProperty(value = "绫诲瀷 0鍔冲姟璁垮 1鏅�氳瀹� 2鍐呴儴浜哄憳")
+ @ExcelColumn(name="绫诲瀷 0鍔冲姟璁垮 1鏅�氳瀹� 2鍐呴儴浜哄憳")
+ @TableField(exist = false)
+ private Integer type;
+
+ @ApiModelProperty(value = "绛旈浜烘墜鏈哄悗")
+ @ExcelColumn(name="绛旈浜烘墜鏈哄悗")
+ private String phone;
+
+ @ApiModelProperty(value = "绛旈浜烘墍灞炵粍缁囩紪鐮�", example = "1")
+ @ExcelColumn(name="绛旈浜烘墍灞炵粍缁囩紪鐮�")
+ private Integer companyId;
+
+ @ApiModelProperty(value = "缁勭粐鍚嶇О")
+ @ExcelColumn(name="缁勭粐鍚嶇О")
+ private String companyName;
+
+ @ApiModelProperty(value = "openid")
+ @ExcelColumn(name="openid")
+ private String openid;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/UserAction.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/UserAction.java
new file mode 100644
index 0000000..62e3bf7
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/UserAction.java
@@ -0,0 +1,90 @@
+package com.doumee.dao.business.model;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+
+/**
+ * 浜哄憳鎿嶄綔璁板綍鏃ュ織
+ * @author 姹熻箘韫�
+ * @date 2023/12/14 13:57
+ */
+@Data
+@ApiModel("浜哄憳鎿嶄綔璁板綍鏃ュ織")
+@TableName("`user_action`")
+public class UserAction {
+
+ @TableId(type = IdType.AUTO)
+ @ApiModelProperty(value = "涓婚敭", example = "1")
+ @ExcelColumn(name="涓婚敭")
+ private Integer id;
+
+ @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+ @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+ private Integer creator;
+
+ @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+ @ExcelColumn(name="鍒涘缓鏃堕棿")
+ private Date createDate;
+
+ @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
+ @ExcelColumn(name="鏇存柊浜虹紪鐮�")
+ private Integer editor;
+
+ @ApiModelProperty(value = "鏇存柊鏃堕棿")
+ @ExcelColumn(name="鏇存柊鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date editDate;
+
+ @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
+ @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
+ private Integer isdeleted;
+
+ @ApiModelProperty(value = "澶囨敞")
+ @ExcelColumn(name="澶囨敞")
+ private String remark;
+
+ @ApiModelProperty(value = "绫诲瀷 0瑙e喕 1鍐荤粨 2鎷夐粦 3鎭㈠ 4璁句负鎷滆浜� 5鍙栨秷鎷滆浜� 6璁句负楂樼骇瀹℃壒浜� 7鍙栨秷楂樼骇瀹℃壒浜� 8鎵嬪姩绂诲満 9鍒犻櫎", example = "1")
+ @ExcelColumn(name="绫诲瀷 0瑙e喕 1鍐荤粨 2鎷夐粦 3鎭㈠ 4璁句负鎷滆浜� 5鍙栨秷鎷滆浜� 6璁句负楂樼骇瀹℃壒浜� 7鍙栨秷楂樼骇瀹℃壒浜� 8鎵嬪姩绂诲満 9鍒犻櫎")
+ private Integer type;
+
+ @ApiModelProperty(value = "浜哄憳鎿嶄綔璁板綍鏃ュ織")
+ @ExcelColumn(name="浜哄憳鎿嶄綔璁板綍鏃ュ織")
+ private String memberId;
+
+ @ApiModelProperty(value = "鎿嶄綔鍓嶇姸鎬� 0瑙e喕 1鍐荤粨 2鎷夐粦 3鎭㈠ 4璁句负鎷滆浜� 5鍙栨秷鎷滆浜� 6璁句负楂樼骇瀹℃壒浜� 7鍙栨秷楂樼骇瀹℃壒浜� 8鎵嬪姩绂诲満 9鍒犻櫎", example = "1")
+ @ExcelColumn(name="鎿嶄綔鍓嶇姸鎬� 0瑙e喕 1鍐荤粨 2鎷夐粦 3鎭㈠ 4璁句负鎷滆浜� 5鍙栨秷鎷滆浜� 6璁句负楂樼骇瀹℃壒浜� 7鍙栨秷楂樼骇瀹℃壒浜� 8鎵嬪姩绂诲満 9鍒犻櫎")
+ private Integer beforeStatus;
+
+ @ApiModelProperty(value = "鎿嶄綔浜哄悕绉�", example = "1")
+ @TableField(exist = false)
+ private String createName;
+
+ @ApiModelProperty(value = "浜哄憳绫诲瀷锛�0鍔冲姟璁垮 1鏅�氳瀹� 2鍐呴儴浜哄憳", example = "1")
+ @TableField(exist = false)
+ private String memberType;
+
+ @ApiModelProperty(value = "鎿嶄綔瀵硅薄", example = "1")
+ @TableField(exist = false)
+ private String memberName;
+
+ @ApiModelProperty(value = "鍏徃鍚嶇О", example = "1")
+ @TableField(exist = false)
+ private String companyName;
+
+ @ApiModelProperty(value = "璁垮鍏徃鍚嶇О", example = "1")
+ @TableField(exist = false)
+ private String visitCompanyName;
+
+ @ApiModelProperty(value = "鎵嬫満鍙�", example = "1")
+ @TableField(exist = false)
+ private String mobile;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/VisitEvent.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/VisitEvent.java
new file mode 100644
index 0000000..cae7ab9
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/VisitEvent.java
@@ -0,0 +1,164 @@
+package com.doumee.dao.business.model;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+
+/**
+ * 璁垮浜嬩欢鎺ㄩ�佽褰曡〃
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Data
+@ApiModel("璁垮浜嬩欢鎺ㄩ�佽褰曡〃")
+@TableName("`visit_event`")
+public class VisitEvent {
+
+ @TableId(type = IdType.AUTO)
+ @ApiModelProperty(value = "涓婚敭", example = "1")
+ private Integer id;
+
+ @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+ private Integer creator;
+
+ @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+ private Date createDate;
+
+ @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
+ private Integer editor;
+
+ @ApiModelProperty(value = "鏇存柊鏃堕棿")
+ private Date editDate;
+
+ @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
+ private Integer isdeleted;
+
+ @ApiModelProperty(value = "澶囨敞")
+ private String remark;
+
+ @ApiModelProperty(value = "浜嬩欢鍞竴鏍囪瘑锛屽悓涓�浜嬩欢鑻ヤ笂鎶ュ娆★紝鍒欎笂鎶ヤ簨浠剁殑eventId鐩稿悓")
+ private String eventId;
+
+ @ApiModelProperty(value = "浜嬩欢婧愮紪鍙凤紝鐗╃悊璁惧鏄祫婧愮紪鍙�")
+ private String srcIndex;
+
+ @ApiModelProperty(value = "浜嬩欢婧愮被鍨�")
+ private String srcType;
+
+ @ApiModelProperty(value = "浜嬩欢婧愬悕绉�")
+ private String srcName;
+
+ @ApiModelProperty(value = "浜嬩欢绫诲瀷锛堢櫥璁� 绛剧锛�")
+ private Integer eventType;
+
+ @ApiModelProperty(value = "浜嬩欢鐘舵��,0-鐬椂1-寮�濮�2-鍋滄4-浜嬩欢鑱斿姩缁撴灉鏇存柊5-浜嬩欢鍥剧墖寮傛涓婁紶", example = "1")
+ private Integer status;
+
+ @ApiModelProperty(value = "鑴夊啿瓒呮椂鏃堕棿")
+ private Integer timeout;
+
+ @ApiModelProperty(value = "浜嬩欢鍙戠敓鏃堕棿锛堣澶囨椂闂�")
+ @ExcelColumn(name="浜嬩欢鏃堕棿",index = 9,width = 16)
+ private String happenTime;
+
+ @ApiModelProperty(value = "浜嬩欢鍙戠敓鐨勪簨浠舵簮鐖惰澶�")
+ private String srcParentIndex;
+
+ @ApiModelProperty(value = "璁垮Is锛�,瀵瑰簲璁垮鏉ヨ璁板綍涓殑orderId瀛楁")
+ private String visitorId;
+
+ @ApiModelProperty(value = "濮撳悕")
+ @ExcelColumn(name="濮撳悕" ,index = 1,width = 10)
+ private String personName;
+
+ @ApiModelProperty(value = "鎬у埆 1-鐢�2-濂�", example = "1")
+ private Integer sex;
+
+ @ApiModelProperty(value = "璇佷欢绫诲瀷 111韬唤璇�")
+ private Integer idType;
+
+ @ApiModelProperty(value = "璇佷欢鍙� ")
+ private String idNo;
+
+ @ApiModelProperty(value = "琚闂汉濮撳悕")
+ @ExcelColumn(name="琚闂汉濮撳悕",index = 6,width = 16)
+ private String beVisitedPersonName;
+
+ @ApiModelProperty(value = "琚闂汉鎵�灞炵粍缁�")
+ @ExcelColumn(name="琚闂汉缁勭粐",index = 7,width = 30)
+ private String beVisitedPersonOrg;
+
+ @ApiModelProperty(value = "鏉ヨ鍗曚綅")
+ @ExcelColumn(name="鍏徃",index = 4,width = 20)
+ private String visitorWorkUint;
+
+ @ApiModelProperty(value = "璁垮楠岃瘉鐮�")
+ private String visitorCode;
+
+ @ApiModelProperty(value = "鏉ヨ浜嬬敱")
+ private String purpose;
+
+ @ApiModelProperty(value = "璇佷欢绛惧彂鏈哄叧")
+ private String signOrg;
+
+ @ApiModelProperty(value = "鏉ヨ鏃堕棿")
+ private String startTime;
+
+ @ApiModelProperty(value = "绂诲紑鏃堕棿")
+ private String endTime;
+ @ApiModelProperty(value = "鎵嬫満鍙风爜")
+ @ExcelColumn(name="鎵嬫満鍙风爜",index = 2,width = 10)
+ private String phone;
+
+ @ApiModelProperty(value = "杞︾墝鍙�")
+ @ExcelColumn(name="杞︾墝鍙�",index = 5,width = 16)
+ private String carNo;
+
+ @ApiModelProperty(value = "鐓х墖uri")
+ private String photoUrl;
+
+ @ApiModelProperty(value = "鎶撴媿鍥緐ri")
+ private String captureUrl;
+
+ @ApiModelProperty(value = "鍥剧墖瀛樺偍鏈嶅姟鍣ㄥ敮涓�鏍囪瘑")
+ private String svrIndexCode;
+
+ @ApiModelProperty(value = "琚闂汉id")
+ private String beVisitedPersonId;
+
+ @ApiModelProperty(value = "琚闂汉鎵�灞炵粍缁噄d")
+ private String beVisitedPersonOrgId;
+
+ @ApiModelProperty(value = "璇佷欢鍙�")
+ @ExcelColumn(name="璇佷欢鍙�" ,index = 3,width = 16)
+ private String idcardDecode;
+
+ // 鏉′欢鏌ヨ鍙傛暟
+ @ApiModelProperty(value = "濮撳悕/鎵嬫満鍙�")
+ @TableField(exist = false)
+ private String keyWords;
+
+ @ApiModelProperty(value = "鍏徃/閮ㄩ棬鍚嶇О")
+ @TableField(exist = false)
+ private String companyName;
+
+ @ApiModelProperty(value = "缁熻鏁伴噺 ")
+ @TableField(exist = false)
+ private int num ;
+
+ @ApiModelProperty(value = "浜嬩欢绫诲瀷鍚嶇О")
+ @TableField(exist = false)
+ @ExcelColumn(name="浜嬩欢绫诲瀷",index = 8,width = 16)
+ private String eventTypeName;
+
+ @ApiModelProperty(value = "鎶撴媿鍥緐ri瀹屾暣")
+ @TableField(exist = false)
+ private String captureUrlFull;
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java
new file mode 100644
index 0000000..9068475
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java
@@ -0,0 +1,300 @@
+package com.doumee.dao.business.model;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 璁垮鐢宠淇℃伅琛�
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Data
+@ApiModel("璁垮鐢宠淇℃伅琛�")
+@TableName("`visits`")
+public class Visits {
+
+ @TableId(type = IdType.AUTO)
+ @ApiModelProperty(value = "涓婚敭", example = "1")
+ @ExcelColumn(name="涓婚敭")
+ private Integer id;
+
+ @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+ @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+ private Integer creator;
+
+ @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+ @ExcelColumn(name="鍒涘缓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date createDate;
+
+ @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
+ @ExcelColumn(name="鏇存柊浜虹紪鐮�")
+ private Integer editor;
+
+ @ApiModelProperty(value = "鏇存柊鏃堕棿")
+ @ExcelColumn(name="鏇存柊鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date editDate;
+
+ @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
+ @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
+ private Integer isdeleted;
+
+ @ApiModelProperty(value = "澶囨敞")
+ @ExcelColumn(name="澶囨敞")
+ private String remark;
+
+ @ApiModelProperty(value = "鐢宠浜虹紪鐮侊紙鍏宠仈member琛�)", example = "1")
+ @ExcelColumn(name="鐢宠浜虹紪鐮侊紙鍏宠仈member琛�)")
+ private Integer memberId;
+
+ @ApiModelProperty(value = "鎵�灞炵粍缁囩紪鐮�(鍏宠仈company琛�)", example = "1")
+ @ExcelColumn(name="鎵�灞炵粍缁囩紪鐮�(鍏宠仈company琛�)")
+ private Integer companyId;
+
+ @ApiModelProperty(value = "浜鸿劯鐓х墖")
+ @ExcelColumn(name="浜鸿劯鐓х墖")
+ private String faceImg;
+
+ @ApiModelProperty(value = "鍋ュ悍鐮�")
+ @ExcelColumn(name="鍋ュ悍鐮�")
+ private String imgurl;
+
+ @ApiModelProperty(value = "绫诲瀷 0鍔冲姟璁垮 1鏅�氳瀹� ", example = "1")
+ @ExcelColumn(name="绫诲瀷 0鍔冲姟璁垮 1鏅�氳瀹� ")
+ private Integer type;
+
+ @ApiModelProperty(value = "璁垮鍚嶇О")
+ @ExcelColumn(name="璁垮鍚嶇О")
+ private String name;
+
+ @ApiModelProperty(value = "璁垮骞撮緞")
+ @ExcelColumn(name="璁垮骞撮緞")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date birthday;
+
+ @ApiModelProperty(value = "鎵嬫満鍙�")
+ @ExcelColumn(name="鎵嬫満鍙�")
+ private String phone;
+
+ @ApiModelProperty(value = "浼佷笟鍚嶇О")
+ @ExcelColumn(name="浼佷笟鍚嶇О")
+ private String companyName;
+
+ @ApiModelProperty(value = "韬唤璇佸彿")
+ @ExcelColumn(name="韬唤璇佸彿")
+ private String idcardNo;
+
+ @ApiModelProperty(value = "宸ュ彿")
+ @ExcelColumn(name="宸ュ彿")
+ private String code;
+
+ @ApiModelProperty(value = "鐝 0鐧界彮 1澶滅彮", example = "1")
+ @ExcelColumn(name="鐝 0鐧界彮 1澶滅彮")
+ private Integer classes;
+
+ @ApiModelProperty(value = "闅忕▼浜哄憳鏁�", example = "1")
+ @ExcelColumn(name="闅忕▼浜哄憳鏁�")
+ private Integer memberNum;
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @ApiModelProperty(value = "闂ㄧ鏈夋晥鏈熷紑濮�")
+ @ExcelColumn(name="闂ㄧ鏈夋晥鏈熷紑濮�")
+ private Date starttime;
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @ApiModelProperty(value = "闂ㄧ鏈夋晥鏈熸埅姝�")
+ @ExcelColumn(name="闂ㄧ鏈夋晥鏈熸埅姝�")
+ private Date endtime;
+ @ApiModelProperty(value = "杩涘巶鏃堕棿")
+ @ExcelColumn(name="杩涘巶鏃堕棿")
+ private Date inDate;
+ @ApiModelProperty(value = "绂诲満鏃堕棿")
+ @ExcelColumn(name="绂诲満鏃堕棿")
+ private Date outDate;
+ @ApiModelProperty(value = "绂诲満鏂瑰紡 0姝e父绛剧 1绠$悊鍛樻墜鍔ㄧ绂�")
+ @ExcelColumn(name="绂诲満鏂瑰紡 0姝e父绛剧 1绠$悊鍛樻墜鍔ㄧ绂�")
+ private Integer outType;
+ @ApiModelProperty(value = "寮哄埗绛剧绠$悊鍛樼紪鐮�")
+ @ExcelColumn(name="寮哄埗绛剧绠$悊鍛樼紪鐮�")
+ private Integer outUserId;
+ @ApiModelProperty(value = "绛剧澶囨敞")
+ @ExcelColumn(name="绛剧澶囨敞")
+ private String outInfo;
+
+ @ApiModelProperty(value = "鏉ヨ浜嬬敱")
+ @ExcelColumn(name="鏉ヨ浜嬬敱")
+ private String reason;
+
+ @ApiModelProperty(value = "鏄惁闇�瑕侀�夋嫨闂ㄧ 0涓嶉渶瑕� 1闇�瑕�", example = "1")
+ @ExcelColumn(name="鏄惁闇�瑕侀�夋嫨闂ㄧ 0涓嶉渶瑕� 1闇�瑕�")
+ private Integer doorSelect;
+
+ @ApiModelProperty(value = "闂ㄧ缂栫爜锛屽涓敤鑻辨枃閫楀彿闅斿紑")
+ @ExcelColumn(name="闂ㄧ缂栫爜锛屽涓敤鑻辨枃閫楀彿闅斿紑")
+ private String doors;
+
+ @ApiModelProperty(value = "鎺ュ緟浜哄憳", example = "1")
+ @ExcelColumn(name="鎺ュ緟浜哄憳")
+ private Integer receptMemberId;
+
+ @ApiModelProperty(value = "瀹℃牳鐘舵�� 0寰呭鏍� 1宸叉彁浜RP瀹℃壒 2瀹℃牳閫氳繃 3瀹℃牳涓嶉�氳繃 4鍙栨秷 5涓嬪彂鎴愬姛 6涓嬪彂澶辫触 7鎷滆涓� 8宸茬绂�", example = "1")
+ @ExcelColumn(name="瀹℃牳鐘舵�� 0寰呭鏍� 1宸叉彁浜RP瀹℃壒 2瀹℃牳閫氳繃 3瀹℃牳涓嶉�氳繃 4鍙栨秷 5涓嬪彂鎴愬姛 6涓嬪彂澶辫触 7鎷滆涓� 8宸茬绂�")
+ private Integer status;
+
+ @ApiModelProperty(value = "鍒濆浜虹紪鐮�", example = "1")
+ @ExcelColumn(name="鍒濆浜虹紪鐮�")
+ private Integer checkorId;
+
+ @ApiModelProperty(value = "鍒濆鏃堕棿")
+ @ExcelColumn(name="鍒濆鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date checkDate;
+
+ @ApiModelProperty(value = "鍒濆澶囨敞")
+ @ExcelColumn(name="鍒濆澶囨敞")
+ private String checkInfo;
+
+ @ApiModelProperty(value = "缁堝浜虹紪鐮�", example = "1")
+ @ExcelColumn(name="缁堝浜虹紪鐮�")
+ private Integer endCheckorId;
+
+ @ApiModelProperty(value = "缁堝鏃堕棿")
+ @ExcelColumn(name="缁堝鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date endCheckDate;
+
+ @ApiModelProperty(value = "缁堝澶囨敞")
+ @ExcelColumn(name="缁堝澶囨敞")
+ private String endCheckInfo;
+ @ApiModelProperty(value = "璇佷欢鏄剧ず淇℃伅")
+ @ExcelColumn(name="璇佷欢鏄剧ず淇℃伅")
+ private String idcardDecode;
+ @ApiModelProperty(value = "璇佷欢绫诲瀷 0韬唤璇� 1娓境璇佷欢 2鎶ょ収", example = "1")
+ @ExcelColumn(name="璇佷欢绫诲瀷 0韬唤璇� 1娓境璇佷欢 2鎶ょ収")
+ private Integer idcardType;
+ @ApiModelProperty(value = "鎬у埆 1鐢� 2濂� ", example = "1")
+ @ExcelColumn(name="鎬у埆 1鐢� 2濂�")
+ private Integer sex;
+ @ApiModelProperty(value = "杞︾墝鍙凤紝澶氫釜鐢ㄨ嫳鏂囬�楀彿闅斿紑")
+ @ExcelColumn(name="杞︾墝鍙凤紝澶氫釜鐢ㄨ嫳鏂囬�楀彿闅斿紑")
+ private String carNos;
+
+ @ApiModelProperty(value = "鐖剁骇鐢宠缂栫爜锛堣嚜鍏宠仈锛�", example = "1")
+ @ExcelColumn(name="鐖剁骇鐢宠缂栫爜锛堣嚜鍏宠仈锛�")
+ private Integer parentId;
+
+ @ApiModelProperty(value = "绛旈璁板綍缂栫爜锛堝叧鑱攗ser_answer)", example = "1")
+ @ExcelColumn(name="绛旈璁板綍缂栫爜锛堝叧鑱攗ser_answer)")
+ private Integer userAnswerId;
+
+ @ApiModelProperty(value = "娴峰悍鏍囪瘑")
+ @ExcelColumn(name="娴峰悍鏍囪瘑")
+ private String hkId;
+ @ApiModelProperty(value = "openid")
+ @ExcelColumn(name="openid")
+ private String openid;
+ @ApiModelProperty(value = "璁垮浜岀淮鐮�")
+ @ExcelColumn(name="璁垮浜岀淮鐮�")
+ private String qrcode;
+
+
+ @ApiModelProperty(value = "璁垮棰勭害鏂瑰紡锛�0鐧昏棰勭害 1鍏嶇櫥璁伴绾�", example = "1")
+ @ExcelColumn(name="璁垮棰勭害鏂瑰紡锛�0鐧昏棰勭害 1鍏嶇櫥璁伴绾�")
+ private Integer visitType;
+
+ @ApiModelProperty(value = "娴峰悍鍚屾鐘舵�� 0鏈悓姝� 1宸插悓姝� ", example = "1")
+ @ExcelColumn(name="娴峰悍鍚屾鐘舵�� 0鏈悓姝� 1宸插悓姝�")
+ private Integer hkStatus;
+
+ @ApiModelProperty(value = "娴峰悍鏈�杩戝悓姝ユ椂闂�")
+ @ExcelColumn(name="娴峰悍鏈�杩戝悓姝ユ椂闂�")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date hkDate;
+
+ @ApiModelProperty(value = "ERP鐢宠璁板綍缂栫爜")
+ @ExcelColumn(name="ERP鐢宠璁板綍缂栫爜")
+ private String erpId;
+
+
+ @ApiModelProperty(value = "缁熻鏁伴噺 ")
+ @TableField(exist = false)
+ private int num ;
+
+ @ApiModelProperty(value = "鍒涘缓浜虹紪鐮侊紙鍏宠仈member琛�)", example = "1")
+ @ExcelColumn(name="鍒涘缓浜虹紪鐮侊紙鍏宠仈member琛�)")
+ private Integer createMemberId;
+
+ @ApiModelProperty(value = "鏉ユ簮绫诲瀷锛�0=鏈郴缁燂紱1=ERP", example = "1")
+ private Integer sourceType;
+
+ @ApiModelProperty(value = "鏅�氳瀹㈢敵璇烽殢璁夸汉鍛�")
+ @TableField(exist = false)
+ private List<Visits> withUserList;
+// @ApiModelProperty(value = "鐝")
+// private String memberClasses;
+
+ @ApiModelProperty(value = "绫诲瀷 0鍔冲姟璁垮 1鏅�氳瀹� 2鍐呴儴浜哄憳", example = "1")
+ @TableField(exist = false)
+ private Integer memberType;
+ @ApiModelProperty(value = "鍔冲姟璁垮鐢宠闅忚浜哄憳")
+ @TableField(exist = false)
+ private List<Integer> lwWithUserList;
+
+
+
+ @ApiModelProperty(value = "鍥剧墖鍓嶇紑")
+ @TableField(exist = false)
+ private String prefixUrl;
+
+ @ApiModelProperty(value = "琚浜哄憳濮撳悕", example = "1")
+ @ExcelColumn(name="琚浜哄憳濮撳悕")
+ @TableField(exist = false)
+ private String receptMemberName;
+ @ApiModelProperty(value = "琚浜哄憳娴峰悍缂栫爜", example = "1")
+ @ExcelColumn(name="琚浜哄憳濮撳悕")
+ @TableField(exist = false)
+ private String receptMemberHkId;
+
+ @ApiModelProperty(value = "琚浜哄憳閮ㄩ棬", example = "1")
+ @ExcelColumn(name="琚浜哄憳閮ㄩ棬")
+ @TableField(exist = false)
+ private String receptMemberDepartment;
+
+ @ApiModelProperty(value = "闂ㄧ缁勯泦鍚�", example = "1")
+ @ExcelColumn(name="闂ㄧ缁勯泦鍚�")
+ @TableField(exist = false)
+ private List<DeviceRole> deviceRoleList;
+
+ @ApiModelProperty(value = "闅忚浜哄憳鍒楄〃", example = "1")
+ @ExcelColumn(name="闅忚浜哄憳鍒楄〃")
+ @TableField(exist = false)
+ private List<Visits> visitsList;
+
+ @ApiModelProperty(value = "瓒呮椂鏃堕暱", example = "1")
+ @TableField(exist = false)
+ private Integer timeOut;
+
+ @ApiModelProperty(value = "闅忚杞﹁締鏁伴噺", example = "1")
+ @TableField(exist = false)
+ private Integer carNum;
+
+ @ApiModelProperty(value = "瓒呮椂鐘舵��0鏈秴鏃讹紝1宸茶秴鏃讹紝2鍗冲皢瓒呮椂", example = "1")
+ @TableField(exist = false)
+ private Integer outStatus;
+
+ @ApiModelProperty(value = "绂诲満鐘舵�侊紱0=鏈鍦�", example = "1",hidden = true)
+ @TableField(exist = false)
+ private Integer levelStatus;
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/ApproveParamDataVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/ApproveParamDataVO.java
new file mode 100644
index 0000000..b9a5778
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/ApproveParamDataVO.java
@@ -0,0 +1,24 @@
+package com.doumee.dao.business.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/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/CompanyEconomicsVo.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/CompanyEconomicsVo.java
new file mode 100644
index 0000000..08abf2a
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/CompanyEconomicsVo.java
@@ -0,0 +1,84 @@
+package com.doumee.dao.business.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@ApiModel("鏁版嵁鏉冮檺鍒楄〃瑙嗗浘瀵硅薄")
+public class CompanyEconomicsVo {
+
+ @ApiModelProperty(value = "涓婚敭", example = "1")
+ @ExcelColumn(name="涓婚敭")
+ @TableId(value = "id",type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+ @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+ private Integer creator;
+
+ @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+ @ExcelColumn(name="鍒涘缓鏃堕棿")
+ private Date createDate;
+
+ @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
+ @ExcelColumn(name="鏇存柊浜虹紪鐮�")
+ private Integer editor;
+
+ @ApiModelProperty(value = "鏇存柊鏃堕棿")
+ @ExcelColumn(name="鏇存柊鏃堕棿")
+ private Date editDate;
+
+ @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
+ @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
+ private Integer isdeleted;
+
+ @ApiModelProperty(value = "澶囨敞")
+ @ExcelColumn(name="澶囨敞")
+ private String remark;
+
+ @ApiModelProperty(value = "浼佷笟缂栫爜锛堝叧鑱攃ompany琛級", example = "1")
+ @ExcelColumn(name="浼佷笟缂栫爜锛堝叧鑱攃ompany琛級")
+ private Integer companyId;
+
+ @ApiModelProperty(value = "浼佷笟缂栫爜锛堝叧鑱攃ompany琛級", example = "1")
+ @ExcelColumn(name="浼佷笟鍚嶇О锛堝叧鑱攃ompany琛級")
+ private String companyName;
+ @ApiModelProperty(value = "骞翠唤", example = "1")
+ @ExcelColumn(name="骞翠唤")
+ private Integer years;
+
+ @ApiModelProperty(value = "鎬昏祫浜э紙涓囧厓锛�", example = "1")
+ @ExcelColumn(name="鎬昏祫浜э紙涓囧厓锛�")
+ private BigDecimal assets;
+
+ @ApiModelProperty(value = "閿�鍞敹鍏ワ紙涓囧厓锛�", example = "1")
+ @ExcelColumn(name="閿�鍞敹鍏ワ紙涓囧厓锛�")
+ private BigDecimal income;
+
+ @ApiModelProperty(value = "璧勪骇璐熷�虹巼")
+ @ExcelColumn(name="璧勪骇璐熷�虹巼")
+ private String ratio;
+
+ @ApiModelProperty(value = "鐮斿彂璐圭敤锛堜竾鍏冿級", example = "1")
+ @ExcelColumn(name="鐮斿彂璐圭敤锛堜竾鍏冿級")
+ private BigDecimal develop;
+
+ @ApiModelProperty(value = "鍒╂鼎鎬婚锛堜竾鍏冿級", example = "1")
+ @ExcelColumn(name="鍒╂鼎鎬婚锛堜竾鍏冿級")
+ private BigDecimal profit;
+
+ @ApiModelProperty(value = "涓婄即绋庨噾锛堜竾鍏冿級", example = "1")
+ @ExcelColumn(name="涓婄即绋庨噾锛堜竾鍏冿級")
+ private BigDecimal taxes;
+
+ @ApiModelProperty(value = "浼佷笟浜烘暟", example = "1")
+ @ExcelColumn(name="浼佷笟浜烘暟")
+ private Integer employee;
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/ProblemLogVo.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/ProblemLogVo.java
new file mode 100644
index 0000000..3376a7e
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/ProblemLogVo.java
@@ -0,0 +1,37 @@
+package com.doumee.dao.business.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+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;
+
+@Data
+@ApiModel("绛旈璁板綍瀵煎嚭瑙嗗浘")
+public class ProblemLogVo {
+
+ @ApiModelProperty(value = "绛旈浜哄鍚�")
+ @ExcelColumn(name="绛旈浜哄鍚�")
+ private String name;
+
+ @ApiModelProperty(value = "绛旈浜烘墜鏈哄悗")
+ @ExcelColumn(name="绛旈浜烘墜鏈哄悗")
+ private String phone;
+
+ @ApiModelProperty(value = "缁勭粐鍚嶇О")
+ @ExcelColumn(name="缁勭粐鍚嶇О")
+ private String companyName;
+
+ @ApiModelProperty(value = "绫诲瀷 0鍔冲姟璁垮 1鏅�氳瀹� 2鍐呴儴浜哄憳")
+ @ExcelColumn(name="绫诲瀷")
+ @TableField(exist = false)
+ private String typeName;
+
+ @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+ @ExcelColumn(name="鍒涘缓鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date createDate;
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/VisitEventVo.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/VisitEventVo.java
new file mode 100644
index 0000000..01db374
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/VisitEventVo.java
@@ -0,0 +1,47 @@
+package com.doumee.dao.business.vo;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel("璁垮鍑哄叆浜嬩欢瑙嗗浘")
+public class VisitEventVo {
+
+ @ApiModelProperty(value = "濮撳悕")
+ @ExcelColumn(name="濮撳悕")
+ private String personName;
+
+ @ApiModelProperty(value = "鎵嬫満鍙�")
+ @ExcelColumn(name = "鎵嬫満鍙�")
+ private String personPhone;
+
+ @ApiModelProperty(value = "璇佷欢鍙� ")
+ @ExcelColumn(name = "韬唤璇佸彿鐮�")
+ private String idNo;
+
+ @ApiModelProperty(value = "浜哄憳缁勭粐鍏徃")
+ @ExcelColumn(name = "鍏徃")
+ private String personCompanyName;
+
+ @ApiModelProperty(value = "杞︾墝鍙�")
+ @ExcelColumn(name = "杞︾墝鍙�")
+ private String carNo;
+
+ @ApiModelProperty(value = "琚闂汉鎵�灞炵粍缁�")
+ private String beVisitedPersonOrg;
+
+ @ApiModelProperty(value = "琚闂汉濮撳悕")
+ @ExcelColumn(name = "琚浜�")
+ private String beVisitedPersonName;
+
+ @ApiModelProperty(value = "浜嬩欢绫诲瀷鍚嶇О")
+ @ExcelColumn(name = "浜嬩欢绫诲瀷")
+ private String eventTypeName;
+
+ @ApiModelProperty(value = "浜嬩欢鍙戠敓鏃堕棿锛堣澶囨椂闂�")
+ @ExcelColumn(name = "浜嬩欢鏃堕棿")
+ private String happenTime;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/AccountLoginDTO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/AccountLoginDTO.java
new file mode 100644
index 0000000..95b38f6
--- /dev/null
+++ b/server/visits/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/visits/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/VisitMemberDTO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/VisitMemberDTO.java
new file mode 100644
index 0000000..33b2e09
--- /dev/null
+++ b/server/visits/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/visits/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/VisitRecordDTO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/VisitRecordDTO.java
new file mode 100644
index 0000000..5613c7d
--- /dev/null
+++ b/server/visits/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/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/ApproveVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/ApproveVO.java
new file mode 100644
index 0000000..b3ba322
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/ApproveVO.java
@@ -0,0 +1,12 @@
+package com.doumee.dao.web.response;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class ApproveVO {
+
+ @ApiModelProperty(value = "涓婚敭")
+ private Integer id;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/ProblemsVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/ProblemsVO.java
new file mode 100644
index 0000000..28424f1
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/ProblemsVO.java
@@ -0,0 +1,43 @@
+package com.doumee.dao.web.response;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.doumee.core.annotation.excel.ExcelColumn;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/12/7 11:19
+ */
+@Data
+public class ProblemsVO {
+
+ @ApiModelProperty(value = "涓婚敭", example = "1")
+ private Integer id;
+
+ @ApiModelProperty(value = "澶囨敞")
+ private String remark;
+
+ @ApiModelProperty(value = "棰樼洰")
+ private String title;
+
+ @ApiModelProperty(value = "閫夐」闆嗗悎")
+ private String options;
+
+ @ApiModelProperty(value = "姝g‘绛旀")
+ private String answer;
+
+ @ApiModelProperty(value = "绫诲瀷 0鍗曢�� 1澶氶�� ", example = "1")
+ private Integer type;
+
+ @ApiModelProperty(value = "鍒嗗��", example = "1")
+ private BigDecimal score;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java
new file mode 100644
index 0000000..d773779
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java
@@ -0,0 +1,107 @@
+package com.doumee.service.business;
+
+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;
+
+/**
+ * 瀹℃壒淇℃伅璁板綍琛⊿ervice瀹氫箟
+ * @author 姹熻箘韫�
+ * @date 2023/12/28 14:09
+ */
+public interface ApproveService {
+
+ /**
+ * 鍒涘缓
+ *
+ * @param approve 瀹炰綋瀵硅薄
+ * @return Integer
+ */
+ Integer create(Approve approve);
+
+ /**
+ * 涓婚敭鍒犻櫎
+ *
+ * @param id 涓婚敭
+ */
+ void deleteById(Integer id);
+
+ /**
+ * 鍒犻櫎
+ *
+ * @param approve 瀹炰綋瀵硅薄
+ */
+ void delete(Approve approve);
+
+ /**
+ * 鎵归噺涓婚敭鍒犻櫎
+ *
+ * @param ids 涓婚敭闆�
+ */
+ void deleteByIdInBatch(List<Integer> ids);
+
+ /**
+ * 涓婚敭鏇存柊
+ *
+ * @param approve 瀹炰綋瀵硅薄
+ */
+ void updateById(Approve approve);
+
+ /**
+ * 鎵归噺涓婚敭鏇存柊
+ *
+ * @param approves 瀹炰綋闆�
+ */
+ void updateByIdInBatch(List<Approve> approves);
+
+ /**
+ * 涓婚敭鏌ヨ
+ *
+ * @param id 涓婚敭
+ * @return Approve
+ */
+ Approve findById(Integer id);
+
+ /**
+ * 鏉′欢鏌ヨ鍗曟潯璁板綍
+ *
+ * @param approve 瀹炰綋瀵硅薄
+ * @return Approve
+ */
+ Approve findOne(Approve approve);
+
+ /**
+ * 鏉′欢鏌ヨ
+ *
+ * @param approve 瀹炰綋瀵硅薄
+ * @return List<Approve>
+ */
+ List<Approve> findList(Approve approve);
+
+ /**
+ * 鍒嗛〉鏌ヨ
+ *
+ * @param pageWrap 鍒嗛〉瀵硅薄
+ * @return PageData<Approve>
+ */
+ PageData<Approve> findPage(PageWrap<Approve> pageWrap);
+
+ /**
+ * 鏉′欢缁熻
+ *
+ * @param approve 瀹炰綋瀵硅薄
+ * @return long
+ */
+ long count(Approve approve);
+
+
+ /**
+ * 鑾峰彇鍐呴儴浜哄憳棣栭〉鏁版嵁
+ * @param memberId
+ * @return
+ */
+ InternalHomeVO getHomeData(Integer memberId);
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CarEventService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CarEventService.java
new file mode 100644
index 0000000..0d49e34
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CarEventService.java
@@ -0,0 +1,114 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.admin.response.CarEventDTO;
+import com.doumee.dao.business.model.CarEvent;
+import com.doumee.dao.business.vo.CarEventVo;
+
+import java.util.List;
+
+/**
+ * 鍋滆溅鍦轰簨浠舵帹閫佽褰曡〃Service瀹氫箟
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+public interface CarEventService {
+
+ /**
+ * 鍒涘缓
+ *
+ * @param carEvent 瀹炰綋瀵硅薄
+ * @return Integer
+ */
+ Integer create(CarEvent carEvent);
+
+ /**
+ * 涓婚敭鍒犻櫎
+ *
+ * @param id 涓婚敭
+ */
+ void deleteById(Integer id);
+ /**
+ * 鍒犻櫎
+ *
+ * @param carEvent 瀹炰綋瀵硅薄
+ */
+ void delete(CarEvent carEvent);
+
+ /**
+ * 鎵归噺涓婚敭鍒犻櫎
+ *
+ * @param ids 涓婚敭闆�
+ */
+ void deleteByIdInBatch(List<Integer> ids);
+
+ /**
+ * 涓婚敭鏇存柊
+ *
+ * @param carEvent 瀹炰綋瀵硅薄
+ */
+ void updateById(CarEvent carEvent);
+
+ /**
+ * 鎵归噺涓婚敭鏇存柊
+ *
+ * @param carEvents 瀹炰綋闆�
+ */
+ void updateByIdInBatch(List<CarEvent> carEvents);
+
+ /**
+ * 涓婚敭鏌ヨ
+ *
+ * @param id 涓婚敭
+ * @return CarEvent
+ */
+ CarEvent findById(Integer id);
+
+ /**
+ * 鏉′欢鏌ヨ鍗曟潯璁板綍
+ *
+ * @param carEvent 瀹炰綋瀵硅薄
+ * @return CarEvent
+ */
+ CarEvent findOne(CarEvent carEvent);
+
+ /**
+ * 鏉′欢鏌ヨ
+ *
+ * @param carEvent 瀹炰綋瀵硅薄
+ * @return List<CarEvent>
+ */
+ List<CarEvent> findList(CarEvent carEvent);
+
+ /**
+ * 鍒嗛〉鏌ヨ
+ *
+ * @param pageWrap 鍒嗛〉瀵硅薄
+ * @return PageData<CarEvent>
+ */
+ PageData<CarEvent> findPage(PageWrap<CarEvent> pageWrap);
+
+ /**
+ * 鏉′欢缁熻
+ *
+ * @param carEvent 瀹炰綋瀵硅薄
+ * @return long
+ */
+ long count(CarEvent carEvent);
+
+ /**
+ * 鍒嗛〉鏌ヨ
+ *
+ * @param pageWrap 鍒嗛〉瀵硅薄
+ * @return PageData<CarEvent>
+ */
+ PageData<CarEventDTO> findVisitCarPage(PageWrap<CarEvent> pageWrap);
+
+ /**
+ * 瀵煎嚭
+ * @param pageWrap 鍒嗛〉瀵硅薄
+ * @return PageData<CarEventVo>
+ */
+ List<CarEventVo> findPageExcel(PageWrap<CarEvent> pageWrap);
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CompanyService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CompanyService.java
new file mode 100644
index 0000000..a2baf7c
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CompanyService.java
@@ -0,0 +1,127 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.admin.request.UpdateCompanySortDTO;
+import com.doumee.dao.admin.response.CompanyDTO;
+import com.doumee.dao.business.model.Company;
+import java.util.List;
+
+/**
+ * 浼佷笟淇℃伅琛⊿ervice瀹氫箟
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+public interface CompanyService {
+
+ /**
+ * 鍒涘缓
+ *
+ * @param company 瀹炰綋瀵硅薄
+ * @return Integer
+ */
+ Integer create(Company company);
+
+ /**
+ * 鍒涘缓鍔冲姟鍏徃
+ * @param company
+ * @return
+ */
+ Integer createLaborServices(Company company);
+
+ /**
+ * 涓婚敭鍒犻櫎
+ *
+ * @param id 涓婚敭
+ */
+ void deleteById(Integer id);
+
+ /**
+ * 鍒犻櫎
+ *
+ * @param company 瀹炰綋瀵硅薄
+ */
+ void delete(Company company);
+
+ /**
+ * 鎵归噺涓婚敭鍒犻櫎
+ *
+ * @param ids 涓婚敭闆�
+ */
+ void deleteByIdInBatch(List<Integer> ids);
+
+ /**
+ * 涓婚敭鏇存柊
+ *
+ * @param company 瀹炰綋瀵硅薄
+ */
+ void updateById(Company company);
+
+
+ /**
+ * 淇敼鍔冲姟鍏徃
+ * @param company
+ * @return
+ */
+ Integer updateLaborServicesById(Company company);
+
+
+ /**
+ * 鎵归噺涓婚敭鏇存柊
+ *
+ * @param companys 瀹炰綋闆�
+ */
+ void updateByIdInBatch(List<Company> companys);
+
+ /**
+ * 涓婚敭鏌ヨ
+ *
+ * @param id 涓婚敭
+ * @return Company
+ */
+ Company findById(Integer id);
+
+ /**
+ * 鏉′欢鏌ヨ鍗曟潯璁板綍
+ *
+ * @param company 瀹炰綋瀵硅薄
+ * @return Company
+ */
+ Company findOne(Company company);
+
+ /**
+ * 鏉′欢鏌ヨ
+ *
+ * @param company 瀹炰綋瀵硅薄
+ * @return List<Company>
+ */
+ List<Company> findList(Company company);
+
+ /**
+ * 鍒嗛〉鏌ヨ
+ *
+ * @param pageWrap 鍒嗛〉瀵硅薄
+ * @return PageData<Company>
+ */
+ PageData<Company> findPage(PageWrap<Company> pageWrap);
+
+ void updateStatusById(Company company);
+ /**
+ * 鏉′欢缁熻
+ *
+ * @param company 瀹炰綋瀵硅薄
+ * @return long
+ */
+ long count(Company company);
+
+ /**
+ * 鏌ヨ閮ㄩ棬鍙婂叾瀛愰儴闂ㄤ俊鎭�
+ * @param type 0 鏌ヨ鎵�鏈変俊鎭� 1 鏌ヨ鍐呴儴淇℃伅
+ * @return
+ */
+ List<CompanyDTO> findCompanyTreePage(Integer type);
+
+ List<Company> companyTree(Integer type);
+
+ void updateSort(UpdateCompanySortDTO dto);
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/DeviceService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/DeviceService.java
new file mode 100644
index 0000000..272e3e1
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/DeviceService.java
@@ -0,0 +1,107 @@
+package com.doumee.service.business;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.doumee.core.haikang.model.param.request.AcsDeviceListRequest;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.Device;
+import java.util.List;
+
+/**
+ * 璁惧淇℃伅琛⊿ervice瀹氫箟
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+public interface DeviceService {
+
+ /**
+ * 鍒涘缓
+ *
+ * @param device 瀹炰綋瀵硅薄
+ * @return Integer
+ */
+ Integer create(Device device);
+
+ /**
+ * 涓婚敭鍒犻櫎
+ *
+ * @param id 涓婚敭
+ */
+ void deleteById(Integer id);
+
+ /**
+ * 鍒犻櫎
+ *
+ * @param device 瀹炰綋瀵硅薄
+ */
+ void delete(Device device);
+
+ /**
+ * 鎵归噺涓婚敭鍒犻櫎
+ *
+ * @param ids 涓婚敭闆�
+ */
+ void deleteByIdInBatch(List<Integer> ids);
+
+ /**
+ * 涓婚敭鏇存柊
+ *
+ * @param device 瀹炰綋瀵硅薄
+ */
+ void updateById(Device device);
+
+ /**
+ * 鎵归噺涓婚敭鏇存柊
+ *
+ * @param devices 瀹炰綋闆�
+ */
+ void updateByIdInBatch(List<Device> devices);
+
+ /**
+ * 涓婚敭鏌ヨ
+ *
+ * @param id 涓婚敭
+ * @return Device
+ */
+ Device findById(Integer id);
+
+ /**
+ * 鏉′欢鏌ヨ鍗曟潯璁板綍
+ *
+ * @param device 瀹炰綋瀵硅薄
+ * @return Device
+ */
+ Device findOne(Device device);
+
+ /**
+ * 鏉′欢鏌ヨ
+ *
+ * @param device 瀹炰綋瀵硅薄
+ * @return List<Device>
+ */
+ List<Device> findList(Device device);
+
+ /**
+ * 鏍规嵁鏉′欢鏌ヨ,鎵�鏈夐棬绂佺殑ID鍜屽悕绉�
+ * @param device
+ * @return
+ */
+ List<Device> findIdAndNameList(Device device);
+
+ /**
+ * 鍒嗛〉鏌ヨ
+ *
+ * @param pageWrap 鍒嗛〉瀵硅薄
+ * @return PageData<Device>
+ */
+ PageData<Device> findPage(PageWrap<Device> pageWrap);
+
+ /**
+ * 鏉′欢缁熻
+ *
+ * @param device 瀹炰綋瀵硅薄
+ * @return long
+ */
+ long count(Device device);
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/InterfaceLogService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/InterfaceLogService.java
new file mode 100644
index 0000000..01d40d7
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/InterfaceLogService.java
@@ -0,0 +1,99 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.InterfaceLog;
+import java.util.List;
+
+/**
+ * 涓夋柟骞冲彴鎺ュ彛浜や簰璁板綍Service瀹氫箟
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+public interface InterfaceLogService {
+
+ /**
+ * 鍒涘缓
+ *
+ * @param interfaceLog 瀹炰綋瀵硅薄
+ * @return Integer
+ */
+ Integer create(InterfaceLog interfaceLog);
+
+ /**
+ * 涓婚敭鍒犻櫎
+ *
+ * @param id 涓婚敭
+ */
+ void deleteById(Integer id);
+
+ /**
+ * 鍒犻櫎
+ *
+ * @param interfaceLog 瀹炰綋瀵硅薄
+ */
+ void delete(InterfaceLog interfaceLog);
+
+ /**
+ * 鎵归噺涓婚敭鍒犻櫎
+ *
+ * @param ids 涓婚敭闆�
+ */
+ void deleteByIdInBatch(List<Integer> ids);
+
+ /**
+ * 涓婚敭鏇存柊
+ *
+ * @param interfaceLog 瀹炰綋瀵硅薄
+ */
+ void updateById(InterfaceLog interfaceLog);
+
+ /**
+ * 鎵归噺涓婚敭鏇存柊
+ *
+ * @param interfaceLogs 瀹炰綋闆�
+ */
+ void updateByIdInBatch(List<InterfaceLog> interfaceLogs);
+
+ /**
+ * 涓婚敭鏌ヨ
+ *
+ * @param id 涓婚敭
+ * @return InterfaceLog
+ */
+ InterfaceLog findById(Integer id);
+
+ /**
+ * 鏉′欢鏌ヨ鍗曟潯璁板綍
+ *
+ * @param interfaceLog 瀹炰綋瀵硅薄
+ * @return InterfaceLog
+ */
+ InterfaceLog findOne(InterfaceLog interfaceLog);
+
+ /**
+ * 鏉′欢鏌ヨ
+ *
+ * @param interfaceLog 瀹炰綋瀵硅薄
+ * @return List<InterfaceLog>
+ */
+ List<InterfaceLog> findList(InterfaceLog interfaceLog);
+
+ /**
+ * 鍒嗛〉鏌ヨ
+ *
+ * @param pageWrap 鍒嗛〉瀵硅薄
+ * @return PageData<InterfaceLog>
+ */
+ PageData<InterfaceLog> findPage(PageWrap<InterfaceLog> pageWrap);
+
+ /**
+ * 鏉′欢缁熻
+ *
+ * @param interfaceLog 瀹炰綋瀵硅薄
+ * @return long
+ */
+ long count(InterfaceLog interfaceLog);
+
+ void clearThreeMonthLog();
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberCardService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberCardService.java
new file mode 100644
index 0000000..1f256fa
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberCardService.java
@@ -0,0 +1,103 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.MemberCard;
+
+import java.util.List;
+
+/**
+ * 鐢ㄦ埛鍗$墖缁戝畾淇℃伅琛⊿ervice瀹氫箟
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+public interface MemberCardService {
+
+ /**
+ * 鍒涘缓
+ *
+ * @param memberCard 瀹炰綋瀵硅薄
+ * @return Integer
+ */
+ Integer create(MemberCard memberCard);
+
+ /**
+ * 涓婚敭鍒犻櫎
+ *
+ * @param id 涓婚敭
+ */
+ void deleteById(Integer id);
+
+ /**
+ * 鍒犻櫎
+ *
+ * @param memberCard 瀹炰綋瀵硅薄
+ */
+ void delete(MemberCard memberCard);
+
+ /**
+ * 鎵归噺涓婚敭鍒犻櫎
+ *
+ * @param ids 涓婚敭闆�
+ */
+ void deleteByIdInBatch(List<Integer> ids);
+
+ /**
+ * 涓婚敭鏇存柊
+ *
+ * @param memberCard 瀹炰綋瀵硅薄
+ */
+ void updateById(MemberCard memberCard);
+
+ /**
+ * 鎵归噺涓婚敭鏇存柊
+ *
+ * @param memberCards 瀹炰綋闆�
+ */
+ void updateByIdInBatch(List<MemberCard> memberCards,Integer type);
+
+
+
+ /**
+ * 涓婚敭鏌ヨ
+ *
+ * @param id 涓婚敭
+ * @return MemberCard
+ */
+ MemberCard findById(Integer id);
+
+ void updateRefundCard(MemberCard memberCard);
+
+ /**
+ * 鏉′欢鏌ヨ鍗曟潯璁板綍
+ *
+ * @param memberCard 瀹炰綋瀵硅薄
+ * @return MemberCard
+ */
+ MemberCard findOne(MemberCard memberCard);
+
+ /**
+ * 鏉′欢鏌ヨ
+ *
+ * @param memberCard 瀹炰綋瀵硅薄
+ * @return List<MemberCard>
+ */
+ List<MemberCard> findList(MemberCard memberCard);
+
+ /**
+ * 鍒嗛〉鏌ヨ
+ *
+ * @param pageWrap 鍒嗛〉瀵硅薄
+ * @return PageData<MemberCard>
+ */
+ PageData<MemberCard> findPage(PageWrap<MemberCard> pageWrap);
+ void dealMemberRoleEmpowerById(Integer memberId );
+ /**
+ * 鏉′欢缁熻
+ *
+ * @param memberCard 瀹炰綋瀵硅薄
+ * @return long
+ */
+ long count(MemberCard memberCard);
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
new file mode 100644
index 0000000..4236800
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
@@ -0,0 +1,210 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.admin.request.LaborEmpowerDTO;
+import com.doumee.dao.admin.request.LaborMemberDTO;
+import com.doumee.dao.admin.request.MemberQuery;
+import com.doumee.dao.admin.response.MemberInfoDTO;
+import com.doumee.dao.admin.response.StagingDataVO;
+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;
+
+import java.util.List;
+
+/**
+ * 浜哄憳淇℃伅琛⊿ervice瀹氫箟
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+public interface MemberService {
+
+ /**
+ * 鍒涘缓
+ *
+ * @param member 瀹炰綋瀵硅薄
+ * @return Integer
+ */
+ Integer create(Member member);
+
+ /**
+ *
+ * 鍒涘缓鍔冲姟浜哄憳淇℃伅
+ * @param member
+ * @return
+ */
+ Integer laborMemberCreate(LaborMemberDTO member);
+
+ /**
+ * 涓婚敭鍒犻櫎
+ *
+ * @param id 涓婚敭
+ */
+ void deleteById(Integer id);
+
+ void roleAuthById(Integer id);
+
+ /**
+ * 鍒犻櫎
+ *
+ * @param member 瀹炰綋瀵硅薄
+ */
+ void delete(Member member);
+
+ /**
+ * 鎵归噺涓婚敭鍒犻櫎
+ *
+ * @param ids 涓婚敭闆�
+ */
+ void deleteByIdInBatch(List<Integer> ids);
+
+ void batchBlock(List<Integer> ids,Integer type);
+
+ /**
+ * 涓婚敭鏇存柊
+ *
+ * @param member 瀹炰綋瀵硅薄
+ */
+ void updateById(Member member);
+ void updateFace(Member member);
+
+
+ /**
+ * 涓婚敭鏇存柊鍔冲姟浜哄憳鐘舵��
+ *
+ * @param member 瀹炰綋瀵硅薄
+ */
+ void updateStatusById(Member member);
+
+ void updateVisitsStatusById(Member member);
+
+ void updateRemoveStatusById(List<Member> members);
+
+ void updateCanVisitById(Member member);
+ /**
+ * 鎵归噺涓婚敭鏇存柊
+ *
+ * @param members 瀹炰綋闆�
+ */
+ void updateByIdInBatch(List<Member> members);
+
+ /**
+ * 涓婚敭鏌ヨ
+ *
+ * @param id 涓婚敭
+ * @return Member
+ */
+ Member findById(Integer id);
+
+ /**
+ * 鏉′欢鏌ヨ鍗曟潯璁板綍
+ *
+ * @param member 瀹炰綋瀵硅薄
+ * @return Member
+ */
+ Member findOne(Member member);
+
+ /**
+ * 鏉′欢鏌ヨ
+ *
+ * @param member 瀹炰綋瀵硅薄
+ * @return List<Member>
+ */
+ List<Member> findList(Member member);
+
+ /**
+ * 鍒嗛〉鏌ヨ
+ *
+ * @param pageWrap 鍒嗛〉瀵硅薄
+ * @return PageData<Member>
+ */
+ PageData<Member> findPage(PageWrap<Member> pageWrap);
+
+
+
+ /**
+ * 鍒嗛〉鍔冲姟鐢ㄦ埛淇℃伅鏌ヨ
+ *
+ * @param pageWrap 鍒嗛〉瀵硅薄
+ * @return PageData<Member>
+ */
+ PageData<MemberInfoDTO> findLaborMemberInfoPage(PageWrap<MemberInfoDTO> pageWrap);
+
+ /**
+ * 鏉′欢缁熻
+ *
+ * @param member 瀹炰綋瀵硅薄
+ * @return long
+ */
+ long count(Member member);
+
+
+ /**
+ * 瀵煎叆鍔冲姟浜哄憳闂ㄧ淇℃伅
+ * @param laborEmpowerDTO
+ * @return
+ */
+ void importMemberBatch(LaborEmpowerDTO laborEmpowerDTO);
+
+
+ /**
+ *
+ * 鍒嗛〉鏌ヨ鍐呴儴浜哄憳淇℃伅
+ * @param pageWrap
+ * @return
+ */
+ PageData<MemberInfoDTO> findMemberInfoPage(PageWrap<MemberQuery> pageWrap);
+
+ PageData<MemberInfoDTO> findVisitPage(PageWrap<MemberQuery> pageWrap);
+
+ PageData<MemberInfoDTO> findUnusualPage(PageWrap<MemberQuery> pageWrap);
+
+ /**
+ * 瀹氭椂鍐荤粨鍐呴儴浜哄憳
+ */
+ void memberFreeze();
+ /********************************************鍏紬鍙锋帴鍙�***********************************************************************/
+
+
+ /**
+ * 寰俊鎺堟潈鎺ュ彛
+ * @param code
+ * @return
+ */
+ WxAuthorizeVO wxAuthorize(String code);
+
+
+
+ MemberVO getVisitedMember(CheckVisitedDTO checkVisitedDTO);
+
+
+ /**
+ * 璐﹀彿瀵嗙爜
+ * 鍐呴儴浜哄憳/鍔冲姟璁垮鐧诲綍
+ * @param accountLoginDTO
+ * @return
+ */
+ WxAuthorizeVO accountLogin(AccountLoginDTO accountLoginDTO);
+
+ /**
+ * 鍐呴儴鍙嫓璁夸汉鍛樺垎椤�
+ * @param param
+ * @return
+ */
+ PageData<MemberVO> getVisitedMemberList(PageWrap<VisitMemberDTO> param);
+
+ /**
+ * 琛ュ厖鏁版嵁
+ */
+ StagingDataVO stagingHead(StagingDataVO stagingHeadVO);
+
+ StagingDataVO stagingBody(StagingDataVO stagingHeadVO);
+
+ void empowerByList(Member member);
+
+ void delHkForce(Member member);
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ProblemsService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ProblemsService.java
new file mode 100644
index 0000000..64367d5
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ProblemsService.java
@@ -0,0 +1,115 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.admin.response.ProblemDTO;
+import com.doumee.dao.business.model.Problems;
+import com.doumee.dao.web.response.ProblemsVO;
+
+import java.util.List;
+
+/**
+ * 璇曢淇℃伅琛⊿ervice瀹氫箟
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+public interface ProblemsService {
+
+ /**
+ * 鍒涘缓
+ *
+ * @param problems 瀹炰綋瀵硅薄
+ * @return Integer
+ */
+ Integer create(Problems problems);
+
+ /**
+ * 涓婚敭鍒犻櫎
+ *
+ * @param id 涓婚敭
+ */
+ void deleteById(Integer id);
+
+ /**
+ * 鍒犻櫎
+ *
+ * @param problems 瀹炰綋瀵硅薄
+ */
+ void delete(Problems problems);
+
+ /**
+ * 鎵归噺涓婚敭鍒犻櫎
+ *
+ * @param ids 涓婚敭闆�
+ */
+ void deleteByIdInBatch(List<Integer> ids);
+
+ /**
+ * 涓婚敭鏇存柊
+ *
+ * @param problems 瀹炰綋瀵硅薄
+ */
+ void updateById(Problems problems);
+
+ /**
+ * 鎵归噺涓婚敭鏇存柊
+ *
+ * @param problemss 瀹炰綋闆�
+ */
+ void updateByIdInBatch(List<Problems> problemss);
+
+ /**
+ * 涓婚敭鏌ヨ
+ *
+ * @param id 涓婚敭
+ * @return Problems
+ */
+ Problems findById(Integer id);
+
+ /**
+ * 鏉′欢鏌ヨ鍗曟潯璁板綍
+ *
+ * @param problems 瀹炰綋瀵硅薄
+ * @return Problems
+ */
+ Problems findOne(Problems problems);
+
+ /**
+ * 鏉′欢鏌ヨ
+ *
+ * @param problems 瀹炰綋瀵硅薄
+ * @return List<Problems>
+ */
+ List<Problems> findList(Problems problems);
+
+ /**
+ * 鍒嗛〉鏌ヨ
+ *
+ * @param pageWrap 鍒嗛〉瀵硅薄
+ * @return PageData<Problems>
+ */
+ PageData<Problems> findPage(PageWrap<Problems> pageWrap);
+
+ /**
+ * 鏉′欢缁熻
+ *
+ * @param problems 瀹炰綋瀵硅薄
+ * @return long
+ */
+ long count(Problems problems);
+
+
+ /**
+ * 鑾峰彇棰樼洰淇℃伅
+ * @param useType
+ * @return
+ */
+ List<ProblemsVO> getProblemsVO(Integer useType);
+
+ /**
+ * 鑾峰彇涓嶅悓鐢ㄦ埛绫诲瀷鐨勯鐩�
+ * @param useType
+ * @return
+ */
+ List<ProblemDTO> findListByUseType(Integer useType);
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/TrainTimeService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/TrainTimeService.java
new file mode 100644
index 0000000..d2b202f
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/TrainTimeService.java
@@ -0,0 +1,98 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.admin.request.RetentionQuery;
+import com.doumee.dao.business.model.TrainTime;
+import java.util.List;
+
+/**
+ * 浜哄憳鍩硅鏈夋晥鏈熻褰昐ervice瀹氫箟
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+public interface TrainTimeService {
+
+ /**
+ * 鍒涘缓
+ *
+ * @param trainTime 瀹炰綋瀵硅薄
+ * @return Integer
+ */
+ Integer create(TrainTime trainTime);
+
+ /**
+ * 涓婚敭鍒犻櫎
+ *
+ * @param id 涓婚敭
+ */
+ void deleteById(Integer id);
+
+ /**
+ * 鍒犻櫎
+ *
+ * @param trainTime 瀹炰綋瀵硅薄
+ */
+ void delete(TrainTime trainTime);
+
+ /**
+ * 鎵归噺涓婚敭鍒犻櫎
+ *
+ * @param ids 涓婚敭闆�
+ */
+ void deleteByIdInBatch(List<Integer> ids);
+
+ /**
+ * 涓婚敭鏇存柊
+ *
+ * @param trainTime 瀹炰綋瀵硅薄
+ */
+ void updateById(TrainTime trainTime);
+
+ /**
+ * 鎵归噺涓婚敭鏇存柊
+ *
+ * @param trainTimes 瀹炰綋闆�
+ */
+ void updateByIdInBatch(List<TrainTime> trainTimes);
+
+ /**
+ * 涓婚敭鏌ヨ
+ *
+ * @param id 涓婚敭
+ * @return TrainTime
+ */
+ TrainTime findById(Integer id);
+
+ /**
+ * 鏉′欢鏌ヨ鍗曟潯璁板綍
+ *
+ * @param trainTime 瀹炰綋瀵硅薄
+ * @return TrainTime
+ */
+ TrainTime findOne(TrainTime trainTime);
+
+ /**
+ * 鏉′欢鏌ヨ
+ *
+ * @param trainTime 瀹炰綋瀵硅薄
+ * @return List<TrainTime>
+ */
+ List<TrainTime> findList(TrainTime trainTime);
+
+ /**
+ * 鍒嗛〉鏌ヨ
+ *
+ * @param pageWrap 鍒嗛〉瀵硅薄
+ * @return PageData<TrainTime>
+ */
+ PageData<TrainTime> findPage(PageWrap<TrainTime> pageWrap);
+
+ /**
+ * 鏉′欢缁熻
+ *
+ * @param trainTime 瀹炰綋瀵硅薄
+ * @return long
+ */
+ long count(TrainTime trainTime);
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ext/HkSyncService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ext/HkSyncService.java
new file mode 100644
index 0000000..7af1926
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ext/HkSyncService.java
@@ -0,0 +1,86 @@
+package com.doumee.service.business.ext;
+
+import com.doumee.core.haikang.model.param.request.AcsDeviceListRequest;
+import com.doumee.core.haikang.model.param.request.DoorsListRequest;
+import com.doumee.core.haikang.model.param.request.ParkListRequest;
+import com.doumee.core.haikang.model.param.request.PrivilegeGroupRequest;
+import com.doumee.core.haikang.model.param.request.event.acs.EventAcsRequest;
+import com.doumee.core.haikang.model.param.request.event.parks.EventParkRequest;
+import com.doumee.core.haikang.model.param.request.event.visit.EventVisitRequest;
+import com.doumee.core.haikang.model.param.respose.AppointmentInfoResponse;
+import com.doumee.dao.business.model.ParkBook;
+import io.swagger.models.auth.In;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.Date;
+
+/**
+ * 鍋滆溅鍦轰簨浠舵帹閫佽褰曡〃Service瀹氫箟
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+public interface HkSyncService {
+ /**
+ * 鍚屾娴峰悍闂ㄧ璁惧
+ * @param param
+ * @return
+ */
+ String syncHkDevices(AcsDeviceListRequest param);
+
+ /**
+ * 鍚屾娴峰悍鍋滆溅搴�
+ * @param param
+ * @return
+ */
+
+ String syncHkParks(ParkListRequest param);
+
+ /**
+ * 鍚屾娴峰悍闂ㄧ鐐瑰垪琛ㄤ俊鎭紙鏆傛棤鐢級
+ * @param param
+ * @return
+ */
+ String syncDoors(DoorsListRequest param);
+
+ /**
+ * 鍚屾娴峰悍璁垮鏉冮檺缁�
+ * @param param
+ * @return
+ */
+ String syncPrivilege(PrivilegeGroupRequest param);
+
+
+ String dealAcsEvent(EventAcsRequest param, HttpServletResponse response);
+
+ String dealVisitEvent(EventVisitRequest param, HttpServletResponse response);
+
+ String dealParkEvent(EventParkRequest param, HttpServletResponse response);
+ String downHKImgs(int type);
+ void cancelEventSub();
+
+ void syncOrgData();
+
+ void syncUserData();
+ void syncVistAppointData(Date date);
+ void syncVehicleData();
+ void syncVehicleUpdateData(Date date);
+ void syncUserUpdateData(Date start, Date end);
+
+ void syncOrgUpdateData(Date start, Date end);
+
+ void syncVisitData();
+ void getOutTimeVisitRecord( );
+ Integer syncEmpowerData(Integer startPage);
+ Integer syncEmpowerFailData(Integer startPage);
+ void syncEmpowerDataNew(int start,int end);
+ void syncParkBookData();
+ void syncParkBookBySingleModel(ParkBook c);
+ Integer syncEmpowerResultData(Integer endId);
+ Integer syncEmpowerDetailData(Integer endId);
+ void syncParkRecords(Date date);
+ void getAscDeviceStatus();
+
+ void syncMemberFailData();
+
+ void syncMemberDelData();
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
new file mode 100644
index 0000000..e4859e6
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
@@ -0,0 +1,198 @@
+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;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+
+/**
+ * 瀹℃壒淇℃伅璁板綍琛⊿ervice瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2023/12/28 14:09
+ */
+@Service
+public class ApproveServiceImpl implements ApproveService {
+
+ @Autowired
+ private ApproveMapper approveMapper;
+
+ @Autowired
+ private SystemDictDataBiz systemDictDataBiz;
+
+ @Override
+ public Integer create(Approve approve) {
+ approveMapper.insert(approve);
+ return approve.getId();
+ }
+
+ @Override
+ public void deleteById(Integer id) {
+ approveMapper.deleteById(id);
+ }
+
+ @Override
+ public void delete(Approve approve) {
+ UpdateWrapper<Approve> deleteWrapper = new UpdateWrapper<>(approve);
+ approveMapper.delete(deleteWrapper);
+ }
+
+ @Override
+ public void deleteByIdInBatch(List<Integer> ids) {
+ if (CollectionUtils.isEmpty(ids)) {
+ return;
+ }
+ approveMapper.deleteBatchIds(ids);
+ }
+
+ @Override
+ public void updateById(Approve approve) {
+ approveMapper.updateById(approve);
+ }
+
+ @Override
+ public void updateByIdInBatch(List<Approve> approves) {
+ if (CollectionUtils.isEmpty(approves)) {
+ return;
+ }
+ for (Approve approve: approves) {
+ this.updateById(approve);
+ }
+ }
+
+ @Override
+ public Approve findById(Integer id) {
+ return approveMapper.selectById(id);
+ }
+
+ @Override
+ public Approve findOne(Approve approve) {
+ QueryWrapper<Approve> wrapper = new QueryWrapper<>(approve);
+ return approveMapper.selectOne(wrapper);
+ }
+
+ @Override
+ public List<Approve> findList(Approve approve) {
+ QueryWrapper<Approve> wrapper = new QueryWrapper<>(approve);
+ return approveMapper.selectList(wrapper);
+ }
+
+ @Override
+ public PageData<Approve> findPage(PageWrap<Approve> pageWrap) {
+ IPage<Approve> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ QueryWrapper<Approve> queryWrapper = new QueryWrapper<>();
+ Utils.MP.blankToNull(pageWrap.getModel());
+ if (pageWrap.getModel().getId() != null) {
+ queryWrapper.lambda().eq(Approve::getId, pageWrap.getModel().getId());
+ }
+ if (pageWrap.getModel().getCreator() != null) {
+ queryWrapper.lambda().eq(Approve::getCreator, pageWrap.getModel().getCreator());
+ }
+ if (pageWrap.getModel().getCreateDate() != null) {
+ queryWrapper.lambda().ge(Approve::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+ queryWrapper.lambda().le(Approve::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+ }
+ if (pageWrap.getModel().getEdirot() != null) {
+ queryWrapper.lambda().eq(Approve::getEdirot, pageWrap.getModel().getEdirot());
+ }
+ if (pageWrap.getModel().getEditDate() != null) {
+ queryWrapper.lambda().ge(Approve::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+ queryWrapper.lambda().le(Approve::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+ }
+ if (pageWrap.getModel().getIsdeleted() != null) {
+ queryWrapper.lambda().eq(Approve::getIsdeleted, pageWrap.getModel().getIsdeleted());
+ }
+ if (pageWrap.getModel().getRemark() != null) {
+ queryWrapper.lambda().eq(Approve::getRemark, pageWrap.getModel().getRemark());
+ }
+ if (pageWrap.getModel().getChekorId() != null) {
+ queryWrapper.lambda().eq(Approve::getChekorId, pageWrap.getModel().getChekorId());
+ }
+ if (pageWrap.getModel().getTitle() != null) {
+ queryWrapper.lambda().eq(Approve::getTitle, pageWrap.getModel().getTitle());
+ }
+ if (pageWrap.getModel().getTemplatId() != null) {
+ queryWrapper.lambda().eq(Approve::getTemplatId, pageWrap.getModel().getTemplatId());
+ }
+ if (pageWrap.getModel().getErpId() != null) {
+ queryWrapper.lambda().eq(Approve::getErpId, pageWrap.getModel().getErpId());
+ }
+ if (pageWrap.getModel().getStatus() != null) {
+ queryWrapper.lambda().eq(Approve::getStatus, pageWrap.getModel().getStatus());
+ }
+ if (pageWrap.getModel().getStatusInfo() != null) {
+ queryWrapper.lambda().eq(Approve::getStatusInfo, pageWrap.getModel().getStatusInfo());
+ }
+ if (pageWrap.getModel().getCheckInfo() != null) {
+ queryWrapper.lambda().eq(Approve::getCheckInfo, pageWrap.getModel().getCheckInfo());
+ }
+ if (pageWrap.getModel().getCheorId() != null) {
+ queryWrapper.lambda().eq(Approve::getCheorId, pageWrap.getModel().getCheorId());
+ }
+ if (pageWrap.getModel().getCheckorName() != null) {
+ queryWrapper.lambda().eq(Approve::getCheckorName, pageWrap.getModel().getCheckorName());
+ }
+ if (pageWrap.getModel().getIsEndCheck() != null) {
+ queryWrapper.lambda().eq(Approve::getIsEndCheck, pageWrap.getModel().getIsEndCheck());
+ }
+ if (pageWrap.getModel().getVisitId() != null) {
+ queryWrapper.lambda().eq(Approve::getVisitId, pageWrap.getModel().getVisitId());
+ }
+ if (pageWrap.getModel().getLevel() != null) {
+ queryWrapper.lambda().eq(Approve::getLevel, pageWrap.getModel().getLevel());
+ }
+ if (pageWrap.getModel().getApproveType() != null) {
+ queryWrapper.lambda().eq(Approve::getApproveType, pageWrap.getModel().getApproveType());
+ }
+ for(PageWrap.SortData sortData: pageWrap.getSorts()) {
+ if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+ queryWrapper.orderByDesc(sortData.getProperty());
+ } else {
+ queryWrapper.orderByAsc(sortData.getProperty());
+ }
+ }
+ return PageData.from(approveMapper.selectPage(page, queryWrapper));
+ }
+
+ @Override
+ public long count(Approve approve) {
+ 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/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarsServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarsServiceImpl.java
new file mode 100644
index 0000000..4a8efab
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarsServiceImpl.java
@@ -0,0 +1,164 @@
+package com.doumee.service.business.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.doumee.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.admin.request.CarsQuery;
+import com.doumee.dao.admin.response.CarsDTO;
+import com.doumee.dao.admin.response.MemberInfoDTO;
+import com.doumee.dao.business.CarsMapper;
+import com.doumee.dao.business.join.CarJoinMapper;
+import com.doumee.dao.business.join.ParkBookJoinMapper;
+import com.doumee.dao.business.model.*;
+import com.doumee.service.business.CarsService;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 杞﹁締淇℃伅琛⊿ervice瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Service
+public class CarsServiceImpl implements CarsService {
+
+ @Autowired
+ private CarsMapper carsMapper;
+
+ @Autowired
+ private CarJoinMapper carJoinMapper;
+
+ @Autowired
+ private ParkBookJoinMapper parkBookJoinMapper;
+
+ @Override
+ public Integer create(Cars cars) {
+ carsMapper.insert(cars);
+ return cars.getId();
+ }
+
+ @Override
+ public void deleteById(Integer id) {
+ carsMapper.deleteById(id);
+ }
+
+ @Override
+ public void delete(Cars cars) {
+ UpdateWrapper<Cars> deleteWrapper = new UpdateWrapper<>(cars);
+ carsMapper.delete(deleteWrapper);
+ }
+
+ @Override
+ public void deleteByIdInBatch(List<Integer> ids) {
+ if (CollectionUtils.isEmpty(ids)) {
+ return;
+ }
+ carsMapper.deleteBatchIds(ids);
+ }
+
+ @Override
+ public void updateById(Cars cars) {
+ carsMapper.updateById(cars);
+ }
+
+ @Override
+ public void updateByIdInBatch(List<Cars> carss) {
+ if (CollectionUtils.isEmpty(carss)) {
+ return;
+ }
+ for (Cars cars: carss) {
+ this.updateById(cars);
+ }
+ }
+
+ @Override
+ public Cars findById(Integer id) {
+ return carsMapper.selectById(id);
+ }
+
+ @Override
+ public Cars findOne(Cars cars) {
+ QueryWrapper<Cars> wrapper = new QueryWrapper<>(cars);
+ return carsMapper.selectOne(wrapper);
+ }
+
+ @Override
+ public List<Cars> findList(Cars cars) {
+ QueryWrapper<Cars> wrapper = new QueryWrapper<>(cars);
+ return carsMapper.selectList(wrapper);
+ }
+
+ @Override
+ public PageData<Cars> findPage(PageWrap<Cars> pageWrap) {
+
+
+ IPage<Cars> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ MPJLambdaWrapper<Cars> queryWrapper = new MPJLambdaWrapper<>();
+
+ queryWrapper.selectAll(Cars.class);
+ queryWrapper.selectAs(Parks::getName,Cars::getParksName);
+ queryWrapper.selectAs(Member::getType,Cars::getMemberType);
+ queryWrapper.selectAs(Member::getName,Cars::getMemberName);
+ queryWrapper.selectAs(Member::getPhone,Cars::getMemberPhone);
+ queryWrapper.selectAs(Company::getName,Cars::getCompanyName);
+
+ queryWrapper.leftJoin(Parks.class,Parks::getId,Cars::getParkId);
+ queryWrapper.leftJoin(Member.class,Member::getId,Cars::getMemberId);
+ queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
+
+
+ queryWrapper.and(StringUtils.isNotBlank(pageWrap.getModel().getMemberName()), ms->ms.like(Member::getName,pageWrap.getModel().getMemberName())
+ .or().like(Member::getPhone,pageWrap.getModel().getMemberName()));
+ queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getCompanyName()),Company::getName,pageWrap.getModel().getCompanyName());
+ queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getMemberType()),Member::getType,pageWrap.getModel().getMemberType());
+ queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getCode()),Cars::getCode,pageWrap.getModel().getCode());
+ queryWrapper.eq(Cars::getIsdeleted,Constants.ZERO);
+
+ queryWrapper.orderByDesc(Cars::getCreateDate);
+ IPage<Cars> result = carJoinMapper.selectJoinPage(page, Cars.class,queryWrapper);
+ return PageData.from(result);
+ }
+
+ @Override
+ public long count(Cars cars) {
+ QueryWrapper<Cars> wrapper = new QueryWrapper<>(cars);
+ return carsMapper.selectCount(wrapper);
+ }
+
+ @Override
+ public PageData<CarsDTO> findCarPage(PageWrap<CarsQuery> pageWrap) {
+ MPJLambdaWrapper<ParkBook> wrapper = new MPJLambdaWrapper<>();
+ IPage<Cars> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ Utils.MP.blankToNull(pageWrap.getModel());
+ wrapper.leftJoin(Member.class,Member::getId,ParkBook::getMemberId)
+ .leftJoin(Company.class,Company::getId,Member::getCompanyId)
+ .leftJoin(Parks.class,Parks::getId,ParkBook::getParkId);
+ wrapper.selectAs(ParkBook::getCarCode,CarsDTO::getCode)
+ .selectAs(ParkBook::getParkId,CarsDTO::getParkId)
+ .selectAs(ParkBook::getRemark,CarsDTO::getRemark)
+ .selectAs(Parks::getName,CarsDTO::getParkName)
+ .selectAs(ParkBook::getMemberId,CarsDTO::getMemberId)
+ .selectAs(Member::getName,CarsDTO::getMemberName)
+ .selectAs(Member::getType,CarsDTO::getMemberType)
+ .selectAs(Company::getName,CarsDTO::getCompanyName)
+ .selectAs(ParkBook::getTimeType,CarsDTO::getTimeType)
+ .selectAs(ParkBook::getStartTime,CarsDTO::getStartTime)
+ .selectAs(ParkBook::getEndTime,CarsDTO::getEndTime)
+ .selectAs(ParkBook::getCreateDate,CarsDTO::getCreateDate);
+ wrapper.orderByDesc(ParkBook::getCreateDate);
+ IPage<CarsDTO> carsDTOIPage = parkBookJoinMapper.selectJoinPage(page, CarsDTO.class, wrapper);
+
+ return PageData.from(carsDTOIPage);
+ }
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
new file mode 100644
index 0000000..8e15e01
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
@@ -0,0 +1,583 @@
+package com.doumee.service.business.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.config.DataSyncConfig;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.haikang.model.HKConstants;
+import com.doumee.core.haikang.model.param.BaseResponse;
+import com.doumee.core.haikang.model.param.request.OrgAddRequest;
+import com.doumee.core.haikang.model.param.request.OrgDelRequest;
+import com.doumee.core.haikang.model.param.request.OrgEditRequest;
+import com.doumee.core.haikang.model.param.respose.OrgOrUserAddResponse;
+import com.doumee.core.haikang.model.param.respose.OrgUpdateFailureResponse;
+import com.doumee.core.haikang.service.HKService;
+import com.doumee.core.model.LoginUserInfo;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.admin.request.UpdateCompanySortDTO;
+import com.doumee.dao.admin.response.CompanyDTO;
+import com.doumee.dao.business.CompanyMapper;
+import com.doumee.dao.business.join.CompanyJoinMapper;
+import com.doumee.dao.business.model.Category;
+import com.doumee.dao.business.model.Company;
+import com.doumee.dao.business.model.Member;
+import com.doumee.service.business.CompanyService;
+import com.doumee.dao.business.vo.CompanyTree;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.SecurityUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 浼佷笟淇℃伅琛⊿ervice瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Service
+public class CompanyServiceImpl implements CompanyService {
+
+ @Autowired
+ private CompanyMapper companyMapper;
+ @Autowired
+ private DataSyncConfig dataSyncConfig;
+ @Autowired
+ private SystemDictDataBiz systemDictDataBiz;
+
+ @Autowired
+ private CompanyJoinMapper companyJoinMapper;
+
+ @Override
+ @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+ public Integer create(Company company) {
+ if(StringUtils.isBlank(company.getName())){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+ //鏌ヨ鍚嶇О涓嶈兘閲嶅
+ if(companyMapper.selectCount(new QueryWrapper<Company>().lambda()
+// .eq(Company::getType,Constants.ONE)
+ .eq(Company::getName,company.getName())
+ .eq(Company::getIsdeleted,Constants.ZERO)) >0){
+ throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "瀵逛笉璧凤紝缁勭粐鍚嶇О涓嶈兘閲嶅~");
+ }
+ LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+ String rootOrgId = systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.HK_ROOTORG_CODE).getCode();
+ company.setHkParentId(rootOrgId);
+ if(company.getParentId() !=null){
+ Company parent = findById(company.getParentId());
+ if(parent == null || Constants.equalsInteger(parent.getIsdeleted(),Constants.ONE)){
+ throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "瀵逛笉璧凤紝鐖剁骇缁勭粐淇℃伅涓嶅瓨鍦▇");
+ }
+ if(StringUtils.isBlank(parent.getHkId())){
+ throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "瀵逛笉璧凤紝鐖剁骇缁勭粐淇℃伅灏氭湭鍚屾涓嬪彂鎴愬姛~");
+ }
+ company.setHkParentId(parent.getHkId());
+ }
+ company.setCreateDate(new Date());
+ company.setCreator(user.getId());
+ company.setIsdeleted(Constants.ZERO);
+ company.setHkStatus(Constants.ONE);
+ company.setStatus(Constants.ZERO);
+ company.setHkDate(company.getHkDate());
+ company.setHkId(UUID.randomUUID().toString().replace("-",""));
+
+ companyMapper.insert(company);
+ //涓嬪彂娴峰悍瀹夐槻骞冲彴
+ if(!addHkOrg(company)){
+ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝缁勭粐鍚屾涓嬪彂澶辫触锛岃绋嶅悗閲嶈瘯");
+ }
+ return company.getId();
+ }
+
+ private boolean addHkOrg(Company company) {
+ List<OrgAddRequest> addList = new ArrayList<>();
+ addList.add(getOrgAddModel(company));
+
+ BaseResponse<OrgOrUserAddResponse> result = HKService.addBatchOrg(addList);
+ if(result !=null && StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE)){
+ OrgOrUserAddResponse data = result.getData();
+ if(data.getSuccesses()!=null && data.getSuccesses().size()>0){
+ //澶勭悊鏂板鎴愬姛鐨勬暟鎹紝淇敼娴峰悍鍚屾鐘舵��
+ return true;
+ }
+ }
+ return false;
+ }
+
+
+ private boolean editHkOrg(Company company) {
+ OrgEditRequest request = (getOrgHkEditModel(company));
+ BaseResponse result = HKService.editOrg(request);
+ if(result !=null && StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE)){
+ //澶勭悊鏂板鎴愬姛鐨勬暟鎹紝淇敼娴峰悍鍚屾鐘舵��
+ return true;
+ }
+ return false;
+ }
+ private boolean delHkOrg(Company company) {
+ OrgDelRequest request =new OrgDelRequest();
+ request.setIndexCodes(new String[]{company.getHkId()});
+ BaseResponse<List<OrgUpdateFailureResponse>> result = HKService.delBatchOrg(request);
+ if(result !=null && StringUtils.equals(result.getCode(),HKConstants.RESPONSE_SUCCEE)){
+ //澶勭悊鏂板鎴愬姛鐨勬暟鎹紝淇敼娴峰悍鍚屾鐘舵��
+ if(result.getData()!=null && result.getData().size()==0){
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+
+ private OrgAddRequest getOrgAddModel(Company c ) {
+ OrgAddRequest model = new OrgAddRequest();
+ model.setOrgIndexCode(c.getHkId());
+ model.setOrgName(c.getName());
+// model.setOrgCode(c.getCode());
+ model.setParentIndexCode(c.getHkParentId());
+ return model;
+ }
+ private OrgEditRequest getOrgHkEditModel(Company c ) {
+ OrgEditRequest model = new OrgEditRequest();
+ model.setOrgIndexCode(c.getHkId());
+ model.setOrgName(c.getName());
+ return model;
+ }
+ @Override
+ public Integer createLaborServices(Company company) {
+ LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+
+ checkUnique(company);
+ Company insert = new Company();
+ insert.setCreator(loginUserInfo.getId());
+ insert.setCreateDate(new Date());
+ insert.setEditor(loginUserInfo.getId());
+ insert.setEditDate(new Date());
+ insert.setIsdeleted(Constants.ZERO);
+ insert.setName(company.getName());
+ insert.setRemark(company.getRemark());
+ insert.setStatus(Constants.ZERO);
+ insert.setSortnum(company.getSortnum());
+ insert.setImgurl(company.getImgurl());
+ insert.setType(Constants.ZERO);
+ insert.setCategoryId(company.getCategoryId());
+ insert.setCode(company.getCode());
+ insert.setParentId(company.getParentId());
+ insert.setLinkName(company.getLinkName());
+ insert.setLinkPhone(company.getLinkPhone());
+ companyMapper.insert(insert);
+ return insert.getId();
+ }
+
+ @Override
+ public void deleteById(Integer id) {
+ LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+ if(id== null ){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+
+ LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+ Company model = findById(id);
+ if(model == null || Constants.equalsInteger(model.getIsdeleted(),Constants.ONE)){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "瀵逛笉璧凤紝缁勭粐淇℃伅涓嶅瓨鍦▇");
+ }
+ if(StringUtils.isBlank(model.getHkId())){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "瀵逛笉璧凤紝缁勭粐淇℃伅灏氭湭鍚屾涓嬪彂鎴愬姛,鏆備笉鏀寔淇敼锛岃灏濊瘯鍒犻櫎鍚庨噸鏂版坊鍔爚");
+ }
+
+ Company company = new Company();
+ company.setId(id);
+ company.setEditDate(new Date());
+ company.setEditor(user.getId());
+ company.setIsdeleted(Constants.ONE);
+ company.setHkStatus(Constants.ONE);
+ company.setHkDate(company.getHkDate());
+ companyMapper.updateById(company);
+ //涓嬪彂娴峰悍瀹夐槻骞冲彴
+ if(!delHkOrg(model)){
+ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝缁勭粐鍒犻櫎涓嬪彂澶辫触锛岃纭璇ョ粍缁囨棤涓嬬骇缁勭粐鎴栫粍缁囦汉鍛樹俊鎭瘇");
+ }
+ }
+
+ @Override
+ public void delete(Company company) {
+ UpdateWrapper<Company> deleteWrapper = new UpdateWrapper<>(company);
+ companyMapper.delete(deleteWrapper);
+ }
+
+ @Override
+ public void deleteByIdInBatch(List<Integer> ids) {
+ if (CollectionUtils.isEmpty(ids)) {
+ return;
+ }
+ ids.stream().forEach(s->{
+ Company company = new Company();
+ deleteById(s);
+ });
+ }
+
+ @Override
+ @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+ public void updateById(Company company) {
+ if(company.getId() == null|| StringUtils.isBlank(company.getName())){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+ //鏌ヨ鍚嶇О涓嶈兘閲嶅
+ if(companyMapper.selectCount(new QueryWrapper<Company>().lambda()
+// .eq(Company::getType,Constants.ONE)
+ .eq(Company::getName,company.getName())
+ .ne(Company::getId,company.getId())
+ .eq(Company::getIsdeleted,Constants.ZERO)) >0){
+ throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "瀵逛笉璧凤紝缁勭粐鍚嶇О涓嶈兘閲嶅~");
+ }
+ LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+ Company model = findById(company.getId());
+ if(model == null || Constants.equalsInteger(model.getIsdeleted(),Constants.ONE)){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "瀵逛笉璧凤紝缁勭粐淇℃伅涓嶅瓨鍦▇");
+ }
+ if(StringUtils.isBlank(model.getHkId())){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "瀵逛笉璧凤紝缁勭粐淇℃伅灏氭湭鍚屾涓嬪彂鎴愬姛,鏆備笉鏀寔淇敼锛岃灏濊瘯鍒犻櫎鍚庨噸鏂版坊鍔爚");
+ }
+ company.setEditDate(new Date());
+ company.setEditor(user.getId());
+ company.setHkStatus(Constants.ONE);
+ company.setHkDate(company.getHkDate());
+ company.setHkId(model.getHkId());
+ companyMapper.updateById(company);
+ //涓嬪彂娴峰悍瀹夐槻骞冲彴
+ if(StringUtils.isNotBlank(company.getHkId())
+ && Constants.equalsObject(Constants.ONE,model.getHkId())
+ && !editHkOrg(company)){
+ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝缁勭粐鍚屾涓嬪彂澶辫触锛岃绋嶅悗閲嶈瘯");
+ }
+
+ }
+
+ @Override
+ public Integer updateLaborServicesById(Company company) {
+ checkUnique(company);
+ companyMapper.updateById(company);
+ return null;
+ }
+
+ @Override
+ public void updateByIdInBatch(List<Company> companys) {
+ if (CollectionUtils.isEmpty(companys)) {
+ return;
+ }
+ for (Company company: companys) {
+ this.updateById(company);
+ }
+ }
+
+ @Override
+ public Company findById(Integer id) {
+ return companyMapper.selectById(id);
+ }
+
+ @Override
+ public Company findOne(Company company) {
+ QueryWrapper<Company> wrapper = new QueryWrapper<>(company);
+ return companyMapper.selectOne(wrapper);
+ }
+
+ @Override
+ public List<Company> findList(Company company) {
+ QueryWrapper<Company> wrapper = new QueryWrapper<>(company);
+ return companyMapper.selectList(wrapper);
+ }
+
+ @Override
+ public PageData<Company> findPage(PageWrap<Company> pageWrap) {
+ IPage<Company> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ MPJLambdaWrapper<Company> queryWrapper = new MPJLambdaWrapper<>();
+ Utils.MP.blankToNull(pageWrap.getModel());
+ pageWrap.getModel().setIsdeleted(Constants.ZERO);
+ if (pageWrap.getModel().getId() != null) {
+ queryWrapper.eq(Company::getId, pageWrap.getModel().getId());
+ }
+ if (pageWrap.getModel().getCreator() != null) {
+ queryWrapper.eq(Company::getCreator, pageWrap.getModel().getCreator());
+ }
+ if (pageWrap.getModel().getCreateDate() != null) {
+ queryWrapper.ge(Company::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+ queryWrapper.le(Company::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+ }
+ if (pageWrap.getModel().getEditor() != null) {
+ queryWrapper.eq(Company::getEditor, pageWrap.getModel().getEditor());
+ }
+ if (pageWrap.getModel().getEditDate() != null) {
+ queryWrapper.ge(Company::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+ queryWrapper.le(Company::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+ }
+ if (pageWrap.getModel().getIsdeleted() != null) {
+ queryWrapper.eq(Company::getIsdeleted, pageWrap.getModel().getIsdeleted());
+ }
+ if (pageWrap.getModel().getName() != null) {
+ queryWrapper.like(Company::getName, pageWrap.getModel().getName());
+ }
+ if (pageWrap.getModel().getRemark() != null) {
+ queryWrapper.eq(Company::getRemark, pageWrap.getModel().getRemark());
+ }
+ if (pageWrap.getModel().getStatus() != null) {
+ queryWrapper.eq(Company::getStatus, pageWrap.getModel().getStatus());
+ }
+ if (pageWrap.getModel().getSortnum() != null) {
+ queryWrapper.eq(Company::getSortnum, pageWrap.getModel().getSortnum());
+ }
+ if (pageWrap.getModel().getImgurl() != null) {
+ queryWrapper.eq(Company::getImgurl, pageWrap.getModel().getImgurl());
+ }
+ if (pageWrap.getModel().getType() != null) {
+ queryWrapper.eq(Company::getType, pageWrap.getModel().getType());
+ }
+ if (pageWrap.getModel().getCategoryId() != null) {
+ queryWrapper.eq(Company::getCategoryId, pageWrap.getModel().getCategoryId());
+ }
+ if (pageWrap.getModel().getCode() != null) {
+ queryWrapper.eq(Company::getCode, pageWrap.getModel().getCode());
+ }
+ if (pageWrap.getModel().getParentId() != null) {
+ queryWrapper.eq(Company::getParentId, pageWrap.getModel().getParentId());
+ }
+ if (pageWrap.getModel().getLinkName() != null) {
+ queryWrapper.eq(Company::getLinkName, pageWrap.getModel().getLinkName());
+ }
+ if (pageWrap.getModel().getLinkPhone() != null) {
+ queryWrapper.eq(Company::getLinkPhone, pageWrap.getModel().getLinkPhone());
+ }
+ if (pageWrap.getModel().getHkId() != null) {
+ queryWrapper.eq(Company::getHkId, pageWrap.getModel().getHkId());
+ }
+ if (pageWrap.getModel().getHkStatus() != null) {
+ queryWrapper.eq(Company::getHkStatus, pageWrap.getModel().getHkStatus());
+ }
+ if (pageWrap.getModel().getHkDate() != null) {
+ queryWrapper.ge(Company::getHkDate, Utils.Date.getStart(pageWrap.getModel().getHkDate()));
+ queryWrapper.le(Company::getHkDate, Utils.Date.getEnd(pageWrap.getModel().getHkDate()));
+ }
+ if (pageWrap.getModel().getErpId() != null) {
+ queryWrapper.eq(Company::getErpId, pageWrap.getModel().getErpId());
+ }
+ if (pageWrap.getModel().getErpDate() != null) {
+ queryWrapper.ge(Company::getErpDate, Utils.Date.getStart(pageWrap.getModel().getErpDate()));
+ queryWrapper.le(Company::getErpDate, Utils.Date.getEnd(pageWrap.getModel().getErpDate()));
+ }
+ if (pageWrap.getModel().getErpStatus() != null) {
+ queryWrapper.eq(Company::getErpStatus, pageWrap.getModel().getErpStatus());
+ }
+ if (pageWrap.getModel().getDdId() != null) {
+ queryWrapper.eq(Company::getDdId, pageWrap.getModel().getDdId());
+ }
+ if (pageWrap.getModel().getDdDate() != null) {
+ queryWrapper.ge(Company::getDdDate, Utils.Date.getStart(pageWrap.getModel().getDdDate()));
+ queryWrapper.le(Company::getDdDate, Utils.Date.getEnd(pageWrap.getModel().getDdDate()));
+ }
+ if (pageWrap.getModel().getDdStatus() != null) {
+ queryWrapper.eq(Company::getDdStatus, pageWrap.getModel().getDdStatus());
+ }
+ if (pageWrap.getModel().getFsId() != null) {
+ queryWrapper.eq(Company::getFsId, pageWrap.getModel().getFsId());
+ }
+ if (pageWrap.getModel().getFsStatus() != null) {
+ queryWrapper.eq(Company::getFsStatus, pageWrap.getModel().getFsStatus());
+ }
+ if (pageWrap.getModel().getFsDate() != null) {
+ queryWrapper.ge(Company::getFsDate, Utils.Date.getStart(pageWrap.getModel().getFsDate()));
+ queryWrapper.le(Company::getFsDate, Utils.Date.getEnd(pageWrap.getModel().getFsDate()));
+ }
+ queryWrapper.orderByDesc(Company::getCreateDate);
+ queryWrapper.leftJoin(Category.class,Category::getId,Company::getCategoryId);
+ /* .leftJoin(Member.class, Member::getId,Company::getHeadId)*/
+ /* queryWrapper.leftJoin(" company c on c.id=t.parent_id");*/
+ queryWrapper.selectAll(Company.class)
+ .select("(select count(m.id) from member m where m.COMPANY_ID=t.id and m.ISDELETED=0) as countNum")
+ /*.select("c.name as parentName");*/
+ .selectAs(Category::getName,Company::getCategoryName);
+ /* .selectAs(Member::getName,Company::getHeadName)
+ .selectAs(Member::getPhone,Company::getHeadPhone)
+ .select("count(t1.id) as countNum");*/
+// queryWrapper.eq(Company::getType,Constants.ZERO);
+ queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getStatus()),Company::getStatus,Constants.ZERO);
+ queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getName()),Company::getName,pageWrap.getModel().getName());
+ queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getParentName()),"c.name",pageWrap.getModel().getParentName());
+ IPage<Company> companyIPage = companyJoinMapper.selectJoinPage(page, Company.class, queryWrapper);
+ return PageData.from(companyIPage);
+ }
+
+ @Override
+ public void updateStatusById(Company company) {
+ LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+
+ company.setEditDate(new Date());
+ company.setEditor(loginUserInfo.getId());
+ company.setStatus(company.getStatus());
+ companyMapper.updateById(company);
+ }
+
+
+ @Override
+ public long count(Company company) {
+ QueryWrapper<Company> wrapper = new QueryWrapper<>(company);
+ return companyMapper.selectCount(wrapper);
+ }
+
+
+ @Override
+ public List<CompanyDTO> findCompanyTreePage(Integer type) {
+ //閰嶇疆缁勫憳浜哄憳绫诲瀷鏉ユ簮鏂瑰紡 0鑷缓 1ERP
+ LambdaQueryWrapper<Company> wrapper = new LambdaQueryWrapper<>();
+
+ wrapper.eq(Company::getIsdeleted,Constants.ZERO)
+ .eq(Constants.equalsInteger(type,Constants.ONE),Company::getType,type);
+ List<Company> companies = companyMapper.selectList(wrapper);
+ return getCompanyTree( companies, null);
+ }
+
+
+ private List<CompanyDTO> getCompanyTree(List<Company> companies, String parentId){
+ if (CollectionUtils.isEmpty(companies)){
+ return null;
+ }
+ int origin =Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin());
+ List<Company> collect = null;
+ if(origin == DataSyncConfig.origin.erp){
+ collect= companies.stream().filter(s -> ( StringUtils.defaultString(s.getErpParentId(),"").equals(StringUtils.defaultString(parentId)))).collect(Collectors.toList());
+ }else if(origin == DataSyncConfig.origin.hk){
+ collect= companies.stream().filter(s -> ( StringUtils.defaultString(s.getHkParentId(),"").equals(StringUtils.defaultString(parentId)))).collect(Collectors.toList());
+ }else{
+ collect= companies.stream().filter(s -> (StringUtils.defaultString(s.getParentId()+"","").equals(StringUtils.defaultString(parentId)))).collect(Collectors.toList());
+ }
+ if (CollectionUtils.isEmpty(collect)){
+ return null;
+ }
+ List<CompanyDTO> companyDTOList = new ArrayList<>();
+ for (int i = 0; i < collect.size(); i++) {
+ Company company = collect.get(i);
+ CompanyDTO companyDTO = new CompanyDTO();
+ BeanUtils.copyProperties(company,companyDTO);
+ String pId = company.getId()+"";
+ if(origin == 1){
+ pId = company.getErpId();
+ }else if(origin == 2){
+ pId = company.getHkParentId();
+ }
+ companyDTO.setCompanyDTOList(getCompanyTree(companies,pId));
+ companyDTOList.add(companyDTO);
+ }
+ return companyDTOList;
+ }
+
+
+ /**
+ * 鍔冲姟鍏徃鍞竴鎬ф牎楠�
+ * @param company
+ */
+ private void checkUnique(Company company){
+ QueryWrapper<Company> wrapper = new QueryWrapper<>();
+ wrapper.lambda()
+ .eq(Company::getIsdeleted,Constants.ZERO)
+ .eq(Company::getType,Constants.ZERO)
+ .eq(Company::getName,company.getName());
+ List<Company> companies = companyMapper.selectList(wrapper);
+ if (CollectionUtils.isEmpty(companies)){
+ return;
+ }
+ //鏂板鐨勬儏鍐靛瓨鍦ㄨ褰�
+ if (Objects.isNull(company.getId())){
+ throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"鍏徃鍚嶇О宸插瓨鍦�");
+ }
+ //淇敼鐨勬儏鍐靛瓨鍦ㄨ褰� 鍖归厤涓嶅埌 own
+ if (!companies.stream().map(s -> s.getId()).anyMatch(s -> s.equals(company.getId()))){
+ throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"鍏徃鍚嶇О宸插瓨鍦�");
+ }
+ }
+
+
+
+ @Override
+ public List<Company> companyTree(Integer type) {
+ MPJLambdaWrapper<Company> queryWrapper = new MPJLambdaWrapper<>();
+ queryWrapper.selectAll(Company.class);
+ queryWrapper.selectAs(Member::getName,Company::getHeadName);
+ queryWrapper.selectAs(Member::getPhone,Company::getHeadPhone);
+ queryWrapper.leftJoin(Member.class,Member::getId,Company::getHeadId);
+ queryWrapper.eq(Company::getIsdeleted,Constants.ZERO);
+ queryWrapper.eq(Company::getType,type);
+ List<Company> companyList = companyJoinMapper.selectJoinList(Company.class,queryWrapper);
+ //閰嶇疆缁勫憳浜哄憳绫诲瀷鏉ユ簮鏂瑰紡 0鑷缓 1ERP
+ CompanyTree treeBuild = new CompanyTree(companyList, dataSyncConfig.getOrgUserDataOrigin());
+ companyList = treeBuild.buildTree();
+ return companyList;
+ }
+
+
+ @Override
+ public void updateSort(UpdateCompanySortDTO dto) {
+ Company company = companyMapper.selectById(dto.getId());
+ if(Objects.isNull(company)){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+
+ List<Company> companyPool;
+ if (company.getParentId() == null) {
+ companyPool = companyMapper.selectList(new QueryWrapper<Company>().lambda()
+ .eq(Company::getIsdeleted,Constants.ZERO)
+ .isNull(Company::getParentId)
+ .orderByAsc(Company::getSortnum)
+ );
+ } else {
+ companyPool = companyMapper.selectList(new QueryWrapper<Company>().lambda()
+ .eq(Company::getIsdeleted,Constants.ZERO)
+ .eq(Company::getParentId,company.getParentId())
+ .orderByAsc(Company::getSortnum)
+ );
+ }
+ int currentMenuIndex = 0;
+ for (int i = 0; i < companyPool.size(); i++) {
+ if (companyPool.get(i).getId().equals(dto.getId())) {
+ currentMenuIndex = i;
+ break;
+ }
+ }
+ // 涓婄Щ
+ if ("top".equals(dto.getDirection())) {
+ if (currentMenuIndex - 1 < 0) {
+ return;
+ }
+ Company preMenu = companyPool.remove(currentMenuIndex - 1);
+ companyPool.add(currentMenuIndex, preMenu);
+ }
+ // 涓嬬Щ
+ else {
+ if (currentMenuIndex + 1 > companyPool.size() - 1) {
+ return;
+ }
+ Company nextMenu = companyPool.remove(currentMenuIndex + 1);
+ companyPool.add(currentMenuIndex, nextMenu);
+ }
+ for (int i = 0; i < companyPool.size(); i++) {
+ companyPool.get(i).setSortnum(i);
+ }
+
+ for (Company updCompany:companyPool) {
+ companyMapper.updateById(updCompany);
+ }
+
+ }
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceEventServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceEventServiceImpl.java
new file mode 100644
index 0000000..24e14f4
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceEventServiceImpl.java
@@ -0,0 +1,423 @@
+package com.doumee.service.business.impl;
+
+import cn.hutool.core.lang.PatternPool;
+import cn.hutool.core.lang.Validator;
+import cn.hutool.core.util.ReUtil;
+import com.doumee.core.haikang.model.HKConstants;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.DateUtil;
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.admin.response.DeviceEventDTO;
+import com.doumee.dao.business.DeviceEventMapper;
+import com.doumee.dao.business.join.DeviceEventJoinMapper;
+import com.doumee.dao.business.model.*;
+import com.doumee.dao.business.vo.DeviceEventVo;
+import com.doumee.dao.system.SystemDictDataMapper;
+import com.doumee.dao.system.model.SystemDictData;
+import com.doumee.service.business.DeviceEventService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.text.ParseException;
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+ * 闂ㄧ浜嬩欢鎺ㄩ�佽褰曡〃Service瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Service
+public class DeviceEventServiceImpl implements DeviceEventService {
+
+ @Autowired
+ private DeviceEventMapper deviceEventMapper;
+
+
+ @Autowired
+ private DeviceEventJoinMapper deviceEventJoinMapper;
+
+ @Autowired
+ private SystemDictDataMapper systemDictDataMapper;
+
+ @Override
+ public Integer create(DeviceEvent deviceEvent) {
+ deviceEventMapper.insert(deviceEvent);
+ return deviceEvent.getId();
+ }
+
+ @Override
+ public void deleteById(Integer id) {
+ deviceEventMapper.deleteById(id);
+ }
+
+ @Override
+ public void delete(DeviceEvent deviceEvent) {
+ UpdateWrapper<DeviceEvent> deleteWrapper = new UpdateWrapper<>(deviceEvent);
+ deviceEventMapper.delete(deleteWrapper);
+ }
+
+ @Override
+ public void deleteByIdInBatch(List<Integer> ids) {
+ if (CollectionUtils.isEmpty(ids)) {
+ return;
+ }
+ deviceEventMapper.deleteBatchIds(ids);
+ }
+
+ @Override
+ public void updateById(DeviceEvent deviceEvent) {
+ deviceEventMapper.updateById(deviceEvent);
+ }
+
+ @Override
+ public void updateByIdInBatch(List<DeviceEvent> deviceEvents) {
+ if (CollectionUtils.isEmpty(deviceEvents)) {
+ return;
+ }
+ for (DeviceEvent deviceEvent: deviceEvents) {
+ this.updateById(deviceEvent);
+ }
+ }
+
+ @Override
+ public DeviceEvent findById(Integer id) {
+ return deviceEventMapper.selectById(id);
+ }
+
+ @Override
+ public DeviceEvent findOne(DeviceEvent deviceEvent) {
+ QueryWrapper<DeviceEvent> wrapper = new QueryWrapper<>(deviceEvent);
+ return deviceEventMapper.selectOne(wrapper);
+ }
+
+ @Override
+ public List<DeviceEvent> findList(DeviceEvent deviceEvent) {
+ QueryWrapper<DeviceEvent> wrapper = new QueryWrapper<>(deviceEvent);
+ return deviceEventMapper.selectList(wrapper);
+ }
+
+ @Override
+ public PageData<DeviceEvent> findPage(PageWrap<DeviceEvent> pageWrap) {
+ IPage<DeviceEvent> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ QueryWrapper<DeviceEvent> queryWrapper = new QueryWrapper<>();
+ Utils.MP.blankToNull(pageWrap.getModel());
+ if (pageWrap.getModel().getId() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getId, pageWrap.getModel().getId());
+ }
+ if (pageWrap.getModel().getCreator() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getCreator, pageWrap.getModel().getCreator());
+ }
+ if (pageWrap.getModel().getCreateDate() != null) {
+ queryWrapper.lambda().ge(DeviceEvent::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+ queryWrapper.lambda().le(DeviceEvent::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+ }
+ if (pageWrap.getModel().getEditor() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getEditor, pageWrap.getModel().getEditor());
+ }
+ if (pageWrap.getModel().getEditDate() != null) {
+ queryWrapper.lambda().ge(DeviceEvent::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+ queryWrapper.lambda().le(DeviceEvent::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+ }
+ if (pageWrap.getModel().getIsdeleted() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getIsdeleted, pageWrap.getModel().getIsdeleted());
+ }
+ if (pageWrap.getModel().getRemark() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getRemark, pageWrap.getModel().getRemark());
+ }
+ if (pageWrap.getModel().getEventId() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getEventId, pageWrap.getModel().getEventId());
+ }
+ if (pageWrap.getModel().getEventType() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getEventType, pageWrap.getModel().getEventType());
+ }
+ if (pageWrap.getModel().getSrcType() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getSrcType, pageWrap.getModel().getSrcType());
+ }
+ if (pageWrap.getModel().getHappenTime() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getHappenTime, pageWrap.getModel().getHappenTime());
+ }
+ if (pageWrap.getModel().getSrcIndex() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getSrcIndex, pageWrap.getModel().getSrcIndex());
+ }
+ if (pageWrap.getModel().getSrcName() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getSrcName, pageWrap.getModel().getSrcName());
+ }
+ if (pageWrap.getModel().getStatus() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getStatus, pageWrap.getModel().getStatus());
+ }
+ if (pageWrap.getModel().getTimeout() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getTimeout, pageWrap.getModel().getTimeout());
+ }
+ if (pageWrap.getModel().getExtAccessChannel() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getExtAccessChannel, pageWrap.getModel().getExtAccessChannel());
+ }
+ if (pageWrap.getModel().getExtEventAlarmInID() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getExtEventAlarmInID, pageWrap.getModel().getExtEventAlarmInID());
+ }
+ if (pageWrap.getModel().getExtEventAlarmOutID() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getExtEventAlarmOutID, pageWrap.getModel().getExtEventAlarmOutID());
+ }
+ if (pageWrap.getModel().getExtEventCardNo() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getExtEventCardNo, pageWrap.getModel().getExtEventCardNo());
+ }
+ if (pageWrap.getModel().getExtEventCaseID() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getExtEventCaseID, pageWrap.getModel().getExtEventCaseID());
+ }
+ if (pageWrap.getModel().getExtEventCode() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getExtEventCode, pageWrap.getModel().getExtEventCode());
+ }
+ if (pageWrap.getModel().getExtEventDoorID() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getExtEventDoorID, pageWrap.getModel().getExtEventDoorID());
+ }
+ if (pageWrap.getModel().getExtEventIDCardPictureURL() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getExtEventIDCardPictureURL, pageWrap.getModel().getExtEventIDCardPictureURL());
+ }
+ if (pageWrap.getModel().getExtEventInOut() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getExtEventInOut, pageWrap.getModel().getExtEventInOut());
+ }
+ if (pageWrap.getModel().getExtEventLocalControllerID() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getExtEventLocalControllerID, pageWrap.getModel().getExtEventLocalControllerID());
+ }
+ if (pageWrap.getModel().getExtEventMainDevID() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getExtEventMainDevID, pageWrap.getModel().getExtEventMainDevID());
+ }
+ if (pageWrap.getModel().getExtEventPersonNo() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getExtEventPersonNo, pageWrap.getModel().getExtEventPersonNo());
+ }
+ if (pageWrap.getModel().getExtEventReaderKind() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getExtEventReaderKind, pageWrap.getModel().getExtEventReaderKind());
+ }
+ if (pageWrap.getModel().getExtEventReaderID() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getExtEventReaderID, pageWrap.getModel().getExtEventReaderID());
+ }
+ if (pageWrap.getModel().getExtEventPictureURL() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getExtEventPictureURL, pageWrap.getModel().getExtEventPictureURL());
+ }
+ if (pageWrap.getModel().getSvrIndexCode() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getSvrIndexCode, pageWrap.getModel().getSvrIndexCode());
+ }
+ if (pageWrap.getModel().getExtEventReportChannel() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getExtEventReportChannel, pageWrap.getModel().getExtEventReportChannel());
+ }
+ if (pageWrap.getModel().getExtEventRoleID() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getExtEventRoleID, pageWrap.getModel().getExtEventRoleID());
+ }
+ if (pageWrap.getModel().getExtEventEubDevID() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getExtEventEubDevID, pageWrap.getModel().getExtEventEubDevID());
+ }
+ if (pageWrap.getModel().getExtEventEwipNum() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getExtEventEwipNum, pageWrap.getModel().getExtEventEwipNum());
+ }
+ if (pageWrap.getModel().getExtEventType() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getExtEventType, pageWrap.getModel().getExtEventType());
+ }
+ if (pageWrap.getModel().getExtEventVerifyID() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getExtEventVerifyID, pageWrap.getModel().getExtEventVerifyID());
+ }
+ if (pageWrap.getModel().getExtEventWhiteListNo() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getExtEventWhiteListNo, pageWrap.getModel().getExtEventWhiteListNo());
+ }
+ if (pageWrap.getModel().getExtReceiveTime() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getExtReceiveTime, pageWrap.getModel().getExtReceiveTime());
+ }
+ if (pageWrap.getModel().getSeq() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getSeq, pageWrap.getModel().getSeq());
+ }
+ if (pageWrap.getModel().getUserType() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getUserType, pageWrap.getModel().getUserType());
+ }
+ if (pageWrap.getModel().getAddress() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getAddress, pageWrap.getModel().getAddress());
+ }
+ if (pageWrap.getModel().getBirth() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getBirth, pageWrap.getModel().getBirth());
+ }
+ if (pageWrap.getModel().getEndDate() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getEndDate, pageWrap.getModel().getEndDate());
+ }
+ if (pageWrap.getModel().getIdNum() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getIdNum, pageWrap.getModel().getIdNum());
+ }
+ if (pageWrap.getModel().getIssuingAuthority() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getIssuingAuthority, pageWrap.getModel().getIssuingAuthority());
+ }
+ if (pageWrap.getModel().getName() != null) {
+ queryWrapper.lambda().like(DeviceEvent::getName, pageWrap.getModel().getName());
+ }
+ if (pageWrap.getModel().getSex() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getSex, pageWrap.getModel().getSex());
+ }
+ if (pageWrap.getModel().getStartDate() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getStartDate, pageWrap.getModel().getStartDate());
+ }
+ if (pageWrap.getModel().getTermOfValidity() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getTermOfValidity, pageWrap.getModel().getTermOfValidity());
+ }
+ if (pageWrap.getModel().getAccessChannel() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getAccessChannel, pageWrap.getModel().getAccessChannel());
+ }
+ if (pageWrap.getModel().getEntryTimes() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getEntryTimes, pageWrap.getModel().getEntryTimes());
+ }
+ if (pageWrap.getModel().getExitTimes() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getExitTimes, pageWrap.getModel().getExitTimes());
+ }
+ if (pageWrap.getModel().getTotalTimes() != null) {
+ queryWrapper.lambda().eq(DeviceEvent::getTotalTimes, pageWrap.getModel().getTotalTimes());
+ }
+ for(PageWrap.SortData sortData: pageWrap.getSorts()) {
+ if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+ queryWrapper.orderByDesc(sortData.getProperty());
+ } else {
+ queryWrapper.orderByAsc(sortData.getProperty());
+ }
+ }
+ return PageData.from(deviceEventMapper.selectPage(page, queryWrapper));
+ }
+
+ @Override
+ public long count(DeviceEvent deviceEvent) {
+ QueryWrapper<DeviceEvent> wrapper = new QueryWrapper<>(deviceEvent);
+ return deviceEventMapper.selectCount(wrapper);
+ }
+
+ @Override
+ public PageData<DeviceEventDTO> findDeviceEventDTOPage(PageWrap<DeviceEvent> pageWrap) {
+
+ IPage<DeviceEventDTO> deviceEventDTOIPage = getDataInfo(pageWrap);
+ if(null != deviceEventDTOIPage && deviceEventDTOIPage.getRecords().size() > 0) {
+ deviceEventDTOIPage.setRecords(newDeviceEvent(deviceEventDTOIPage.getRecords()));
+ }
+ return PageData.from(deviceEventDTOIPage);
+ }
+
+ @Override
+ public List<DeviceEventVo> findDeviceEventExcel(PageWrap<DeviceEvent> pageWrap) {
+ IPage<DeviceEventDTO> deviceEventExcel = getDataInfo(pageWrap);
+ List<DeviceEventVo> voList = new ArrayList<>();
+ if(null != deviceEventExcel && deviceEventExcel.getRecords().size() > 0) {
+ deviceEventExcel.getRecords().stream().forEach(obj-> {
+ DeviceEventVo eventVo = new DeviceEventVo();
+ if(null != obj.getPersonType()) {
+ if(Constants.ZERO == obj.getPersonType()){
+ eventVo.setPersonTypeName(Constants.Status.LW_FK.getDes());
+ }else if(Constants.ONE == obj.getPersonType()) {
+ eventVo.setPersonTypeName(Constants.Status.PT_FK.getDes());
+ }else {
+ eventVo.setPersonTypeName(Constants.Status.NB_FK.getDes());
+ }
+ }else {
+ eventVo.setPersonTypeName("");
+ }
+ eventVo.setPersonName(obj.getPersonName());
+ eventVo.setPersonPhone(obj.getPersonName());
+ eventVo.setPersonIdcardDecode(obj.getPersonIdcardDecode());
+ eventVo.setPersonCompanyName(obj.getPersonCompanyName());
+ eventVo.setDevName(obj.getDevName());
+ eventVo.setSrcName(obj.getSrcName());
+ if(null != obj.getExtEventInOut()) {
+ if(Constants.ZERO == obj.getExtEventInOut()){
+ eventVo.setExtEventInOutName(Constants.Status.OUT.getDes());
+ }else if(Constants.ONE == obj.getPersonType()) {
+ eventVo.setExtEventInOutName(Constants.Status.PT_FK.getDes());
+ }
+ }else {
+ eventVo.setExtEventInOutName("");
+ }
+ eventVo.setEventTypeName(HKConstants.EventTypes.getName(obj.getEventType())) ;
+ try {
+ eventVo.setHappenTime(DateUtil.timeEscape(obj.getHappenTime()));
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+ voList.add(eventVo);
+ });
+ }
+ return voList;
+ }
+
+ private IPage<DeviceEventDTO> getDataInfo(PageWrap<DeviceEvent> pageWrap) {
+ IPage<DeviceEvent> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ MPJLambdaWrapper<DeviceEvent> queryWrapper = new MPJLambdaWrapper<>();
+ Utils.MP.blankToNull(pageWrap.getModel());
+
+ //鏄惁鏄暟瀛�
+ boolean number = Validator.isNumber(pageWrap.getModel().getKeyWords());
+ //鏄惁鍖呭惈涓枃
+ boolean b = Validator.hasChinese(pageWrap.getModel().getKeyWords());
+ //鏄惁鍖呭惈鑻辨枃
+ boolean hasWord = ReUtil.contains(PatternPool.WORD, pageWrap.getModel().getKeyWords());
+ queryWrapper.leftJoin(Member.class,Member::getHkId,DeviceEvent::getExtEventPersonNo)
+ .leftJoin(Company.class,Company::getId,Member::getCompanyId)
+ .leftJoin(Device.class,Device::getHkId,DeviceEvent::getSrcParentIndex)
+ .selectAll(DeviceEvent.class)
+ .selectAs(Member::getName,DeviceEventDTO::getPersonName)
+ .selectAs(Member::getId,DeviceEventDTO::getMemberId)
+ .selectAs(Member::getType,DeviceEventDTO::getPersonType)
+ .selectAs(Member::getPhone,DeviceEventDTO::getPersonPhone)
+ .selectAs(Member::getIdcardDecode,DeviceEventDTO::getPersonIdcardDecode)
+ .selectAs(Device::getName,DeviceEventDTO::getDevName)
+ .selectAs(Company::getName,DeviceEventDTO::getPersonCompanyName);
+ queryWrapper.and(StringUtils.isNotBlank(pageWrap.getModel().getKeyWords()),w->
+ w.like(Member::getName,pageWrap.getModel().getKeyWords()).or().like(Member::getPhone,pageWrap.getModel().getKeyWords()))
+ .eq(StringUtils.equals(pageWrap.getModel().getPersonType(),Constants.TWO+""),
+ Member::getType,
+ pageWrap.getModel().getPersonType())
+ .eq(Objects.nonNull(pageWrap.getModel().getEventType()),
+ DeviceEvent::getEventType,
+ pageWrap.getModel().getEventType())
+ .like(Objects.nonNull(pageWrap.getModel().getCompanyName()),Company::getName,
+ pageWrap.getModel().getCompanyName())
+ .ge(Objects.nonNull(pageWrap.getModel().getStartTime()),
+ DeviceEvent::getCreateDate,
+ pageWrap.getModel().getStartTime())
+ .le(Objects.nonNull(pageWrap.getModel().getEndTime()),
+ DeviceEvent::getCreateDate,
+ pageWrap.getModel().getEndTime())
+ .isNull(StringUtils.isNotBlank(pageWrap.getModel().getPersonType()) && !StringUtils.equals(pageWrap.getModel().getPersonType(),Constants.TWO+""),Member::getId)//闄や簡鍐呴儴浜哄憳閮芥槸澶栨潵璁垮
+ .orderByDesc(DeviceEvent::getCreateDate);
+ queryWrapper.orderByDesc(DeviceEvent::getHappenTime);
+ IPage<DeviceEventDTO> deviceEventDTOIPage = deviceEventJoinMapper.selectJoinPage(page, DeviceEventDTO.class, queryWrapper);
+ return deviceEventDTOIPage;
+ }
+
+ // 瀵瑰浘鐗囪繘琛屽垽鏂鐞�
+ private List<DeviceEventDTO> newDeviceEvent(List<DeviceEventDTO> DeviceEventDTOList) {
+ List<DeviceEventDTO> newDeviceEventDTOS = new ArrayList<>();
+ List<String> codes = Arrays.asList(Constants.FTP_RESOURCE_PATH,Constants.DEVICE_EVENT_IMG);
+ List<SystemDictData> list = systemDictDataMapper.list(codes);
+ Map<String,SystemDictData> dataMap = list.stream().collect(Collectors.toMap(SystemDictData::getLabel, Function.identity()));
+ for (DeviceEventDTO dto:DeviceEventDTOList) {
+ if(StringUtils.isNotBlank(dto.getExtEventPictureURL())
+ && !dto.getExtEventPictureURL().startsWith(HKConstants.IMG_INDEX)
+ && !dto.getExtEventPictureURL().startsWith(HKConstants.IMG_INDEX_ERROR)) {
+ if(null != list && list.size() > 0) {
+ dto.setExtEventPictureURL(dataMap.get(Constants.FTP_RESOURCE_PATH).getCode()
+ +dataMap.get(Constants.DEVICE_EVENT_IMG).getCode()
+ +dto.getExtEventPictureURL());
+ }
+ }else{
+ dto.setExtEventPictureURL(null);
+ }
+ dto.setEventTypeName(HKConstants.EventTypes.getName(dto.getEventType())) ;
+ try {
+ dto.setHappenTime(DateUtil.timeEscape(dto.getHappenTime()));
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+ newDeviceEventDTOS.add(dto);
+ }
+ return newDeviceEventDTOS;
+ }
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceRoleServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceRoleServiceImpl.java
new file mode 100644
index 0000000..1ff3b10
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/DeviceRoleServiceImpl.java
@@ -0,0 +1,484 @@
+package com.doumee.service.business.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.api.R;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.model.LoginUserInfo;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.erp.model.openapi.request.RoleListRequest;
+import com.doumee.core.erp.model.openapi.response.DeviceListResponse;
+import com.doumee.core.erp.model.openapi.response.RoleListResponse;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.admin.response.MemberInfoDTO;
+import com.doumee.dao.business.*;
+import com.doumee.dao.business.join.MemberRoleJoinMapper;
+import com.doumee.dao.business.model.*;
+import com.doumee.dao.web.response.DeviceRoleVO;
+import com.doumee.service.business.DeviceRoleService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.doumee.service.business.MemberService;
+import com.doumee.service.business.impl.hksync.ferp.HkSyncOrgUserToHKServiceImpl;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import io.swagger.models.auth.In;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.SecurityUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Service;
+
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 闂ㄧ瑙掕壊淇℃伅琛⊿ervice瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Service
+@Slf4j
+public class DeviceRoleServiceImpl implements DeviceRoleService {
+
+ @Autowired
+ private DeviceRoleMapper deviceRoleMapper;
+ @Autowired
+ private MemberCardMapper memberCardMapper;
+ @Autowired
+ private EmpowerMapper empowerMapper;
+
+ @Autowired
+ private DeviceMapper deviceMapper;
+ @Autowired
+ private MemberRoleJoinMapper memberRoleMapper;
+ @Autowired
+ private MemberMapper memberMapper;
+
+
+ @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 && deviceRole.getIsDefault().equals(Constants.ZERO)) {
+ DeviceRole updateDeviceRole = new DeviceRole();
+ // 鑻ョ幇鍦ㄦ柊澧炴暟鎹缃粯璁ら棬绂佺粍锛涢偅涔堝厛鎶婁箣鍓嶇殑榛樿闂ㄧ缁勭姸鎬佹敼涓轰笉鏄粯璁ょ殑
+ updateDeviceRole.setId(newDeviceRole.getId());
+ updateDeviceRole.setEdirot(loginUserInfo.getId().toString());
+ updateDeviceRole.setEditDate(new Date());
+ updateDeviceRole.setIsDefault(Constants.ONE);
+ deviceRoleMapper.updateById(updateDeviceRole);
+ }
+ DeviceRole insert = new DeviceRole();
+ insert.setCreator(loginUserInfo.getId().toString());
+ insert.setCreateDate(new Date());
+ insert.setEdirot(loginUserInfo.getId().toString());
+ insert.setEditDate(new Date());
+ insert.setIsdeleted(Constants.ZERO);
+ insert.setRemark(deviceRole.getRemark());
+ insert.setName(deviceRole.getName());
+ insert.setIsDefault(deviceRole.getIsDefault());
+ insert.setType(deviceRole.getType());
+ insert.setDoorIds(deviceRole.getDoorIds());
+ insert.setDoorNames(deviceRole.getDoorNames());
+ insert.setParkIds(deviceRole.getParkIds());
+ insert.setParkNames(deviceRole.getParkNames());
+ insert.setStatus(deviceRole.getStatus());
+ insert.setHkId(deviceRole.getHkId());
+ insert.setHkStatus(deviceRole.getHkStatus());
+ insert.setHkDate(deviceRole.getHkDate());
+
+ deviceRoleMapper.insert(insert);
+ return insert.getId();
+ }
+
+ @Override
+ public void deleteById(Integer id) {
+ deviceRoleMapper.deleteById(id);
+ }
+
+ @Override
+ public void delete(DeviceRole deviceRole) {
+ UpdateWrapper<DeviceRole> deleteWrapper = new UpdateWrapper<>(deviceRole);
+ deviceRoleMapper.delete(deleteWrapper);
+ }
+
+ @Override
+ public void deleteByIdInBatch(List<Integer> ids) {
+ if (CollectionUtils.isEmpty(ids)) {
+ return;
+ }
+ deviceRoleMapper.deleteBatchIds(ids);
+ }
+
+ @Override
+ public void updateById(DeviceRole deviceRole) {
+ DeviceRole model = deviceRoleMapper.selectById(deviceRole.getId());
+ if(model == null){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+ DeviceRole newDeviceRole = null;
+ if(null != deviceRole.getType()) {
+ newDeviceRole = getDeviceRole(deviceRole.getType());
+ }
+ LoginUserInfo loginUserInfo = (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
+ if(null != newDeviceRole && deviceRole.getIsDefault().equals(Constants.ZERO)) {
+ DeviceRole update = new DeviceRole();
+ update.setEdirot(loginUserInfo.getId().toString());
+ update.setEditDate(new Date());
+ update.setId(newDeviceRole.getId());
+ update.setIsDefault(Constants.ONE);
+ deviceRoleMapper.updateById(update);
+ }
+ int t = deviceRoleMapper.updateById(deviceRole);
+ if(t>0){
+ Thread tt = new Thread(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ startUpdateMemberEmpower(model,deviceRole);
+ }catch (Exception e){
+ log.error("======闂ㄧ鍒嗙粍淇敼锛屾洿鏂颁汉鍛樻潈闄愬け璐�==="+e.getMessage());
+ }
+ }
+ });
+ tt.start();
+ }
+ }
+ @Override
+ public void updateMemberRole(DeviceRole deviceRole) {
+ deviceRole.setType("2");
+ deviceRole.setIsdeleted(Constants.ZERO);
+ List<DeviceRole> list =findList(deviceRole);
+ if(list == null || list.size()==0){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+ for(DeviceRole model :list){
+ updateMemberRoleDO(model);
+ }
+ }
+ public void updateMemberRoleDO(DeviceRole model) {
+ if(model.getDoorIds() == null){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+ String[] newIds =StringUtils.defaultString(model.getDoorIds()).split(",");
+ List<Integer> allids = getChangeIdsByArray(new String[]{},newIds);//鏈�鏂拌澶�
+ List<MemberRole> memberRoleList = memberRoleMapper.selectList(new QueryWrapper<MemberRole>().lambda()
+ .eq(MemberRole::getRoleId,model.getId())
+ .eq(MemberRole::getIsdeleted,Constants.ZERO)
+ );
+ if(memberRoleList!=null && memberRoleList.size()>0) {
+ int num =1;
+ for (MemberRole memberRole : memberRoleList) {
+ Member member = memberMapper.selectById(memberRole.getMemberId());
+ if(member==null || member.getIsdeleted().equals(Constants.ONE)){
+ continue;
+ }
+ List<Integer> addIds = new ArrayList<>();
+ for(Integer did : allids){
+ Empower empower = empowerMapper.selectOne(new QueryWrapper<Empower>().lambda()
+ .eq(Empower::getMemberId,member.getId())
+ .eq(Empower::getDeviceId,did )
+ .orderByDesc(Empower::getId)
+ .last("limit 1"));
+ if(empower ==null || Constants.equalsInteger(empower.getIsdeleted(),Constants.ONE)){
+ addIds.add(did);
+ }
+ }
+ try {
+ HkSyncOrgUserToHKServiceImpl.dealChangeDeviceRoleEmpower(member,addIds,null,deviceRoleMapper,empowerMapper,deviceMapper);
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ System.out.println("姝e湪澶勭悊銆�"+model.getName()+"銆�======闂ㄧ鏁版嵁銆�"+addIds.size()+"銆�====杩涘害锛氥��"+num+"|"+memberRoleList.size()+"銆�");
+ num ++;
+ }
+ }
+ }
+
+ /**
+ * 鏇存柊璇ユ潈闄愪笅鐩稿叧鐨勪汉鍛樻渶鏂板叏鏂颁笅鍙�
+ * @param model
+ * @param deviceRole
+ */
+ private void startUpdateMemberEmpower(DeviceRole model, DeviceRole deviceRole) {
+ String[] ids = StringUtils.defaultString(model.getDoorIds()).split(",");
+ String[] newIds =StringUtils.defaultString(deviceRole.getDoorIds()).split(",");
+ List<Integer> delIds = getChangeIdsByArray(newIds,ids);//鍒犻櫎鐨勮澶�
+ List<Integer> addIds = getChangeIdsByArray(ids,newIds);//鏈�鏂拌澶�
+ if((addIds==null ||addIds.size()==0)&&( delIds ==null || delIds.size() == 0 )){
+ //濡傛灉娌℃湁鍙樺寲锛屼笉鍋氬鐞�
+ return;
+ }
+ List<Integer> allids = getChangeIdsByArray(new String[]{},newIds);//鏈�鏂拌澶�
+ List<MemberRole> memberRoleList = memberRoleMapper.selectList(new QueryWrapper<MemberRole>().lambda()
+ .eq(MemberRole::getRoleId,model.getId())
+ .eq(MemberRole::getIsdeleted,Constants.ZERO)
+ );
+ if(memberRoleList!=null && memberRoleList.size()>0){
+ for(MemberRole memberRole : memberRoleList){
+ //濡傛灉鏈変汉鍛樻巿鏉冧簡璇ユ潈闄�
+ Member member = memberMapper.selectById(memberRole.getMemberId());
+ if(member==null || member.getIsdeleted().equals(Constants.ONE)){
+ continue;
+ }
+ MPJLambdaWrapper<MemberRole> queryWrapper = new MPJLambdaWrapper<>();
+ queryWrapper.leftJoin(DeviceRole.class,DeviceRole::getId,MemberRole::getRoleId );
+ queryWrapper.selectAll(MemberRole.class)
+ .selectAs(DeviceRole::getDoorIds, MemberRole::getDoorIds)
+ .eq(MemberRole::getMemberId,memberRole.getMemberId())
+ .eq(MemberRole::getIsdeleted,Constants.ZERO)
+ .ne(MemberRole::getRoleId,deviceRole.getId());
+ List<MemberRole> tLis = memberRoleMapper.selectJoinList(MemberRole.class,queryWrapper);
+ List<Integer> actDelIds = getActChangeDoorIds(tLis,delIds);
+ List<Integer> actAddIds = getActChangeDoorIds(tLis,allids);
+ HkSyncOrgUserToHKServiceImpl.dealChangeDeviceRoleEmpower(member,actAddIds,actDelIds,deviceRoleMapper,empowerMapper,deviceMapper);
+ }
+ }
+ }
+
+ /**
+ * 鏍规嵁鐢ㄦ埛褰撳墠鏈�鏂扮殑闂ㄧ瑙掕壊锛屾煡璇㈠疄闄呭簲璇ュ垹闄ゆ垨鑰呭鍔犵殑闂ㄧ鐐规潈闄�
+ * @param tLis
+ * @param changeIds
+ * @return
+ */
+ private List<Integer> getActChangeDoorIds(List<MemberRole> tLis, List<Integer> changeIds) {
+ List<Integer> list = new ArrayList<>();
+ for(MemberRole memberRole : tLis){
+ String[] ids = StringUtils.defaultString(memberRole.getDoorIds()).split(",");
+ if(ids!=null && ids.length>0){
+ for (String s:ids){
+ list.add(Integer.parseInt(s));
+ }
+ }
+ }
+ List<Integer> actList = new ArrayList<>();
+ if(list.size()>0){
+ Flag:
+ for (Integer t : changeIds){
+ for (Integer tt : list){
+ if(Constants.equalsInteger(t,tt)){
+ continue Flag;
+ }
+ }
+ actList.add(t);
+ }
+ }
+ return actList;
+ }
+
+ private List<Integer> getChangeIdsByArray(String[] ids, String[] newIds) {
+ List<Integer> list = new ArrayList<>();
+ if(newIds!=null){
+ FLAG :
+ for(String s :newIds){
+ for(String s1 :ids){
+ if(StringUtils.equals(s,s1)){
+ continue FLAG;
+ }
+ }
+ list.add(Integer.parseInt(s));
+ }
+ }
+ return list;
+ }
+ @Override
+ public void updateStatusById(DeviceRole deviceRole) {
+ // 鑾峰彇涔嬪墠鏄惁瀛樺湪榛樿闂ㄧ缁�
+ DeviceRole newDeviceRole = null;
+ if(null != deviceRole.getType()) {
+ newDeviceRole = getDeviceRole(deviceRole.getType());
+ }
+ LoginUserInfo loginUserInfo = (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
+ List<DeviceRole> deviceRoleList = new ArrayList<>();
+ if(null != newDeviceRole) {
+ DeviceRole update = new DeviceRole();
+ update.setEdirot(loginUserInfo.getId().toString());
+ update.setEditDate(new Date());
+ update.setId(newDeviceRole.getId());
+ update.setStatus(newDeviceRole.getStatus());
+ update.setIsDefault(Constants.ONE);
+ deviceRoleList.add(update);
+ }
+ DeviceRole updateTwo = new DeviceRole();
+ updateTwo.setEdirot(loginUserInfo.getId().toString());
+ updateTwo.setEditDate(new Date());
+ updateTwo.setId(deviceRole.getId());
+ updateTwo.setStatus(deviceRole.getStatus());
+ updateTwo.setIsDefault(deviceRole.getIsDefault());
+ deviceRoleList.add(updateTwo);
+ // 鏈�澶�2鏉★紝鎵�鏈夊氨娌℃湁鍐欐壒閲忎慨鏀逛簡
+ for (DeviceRole data:deviceRoleList) {
+ deviceRoleMapper.updateById(data);
+ }
+ }
+
+ private DeviceRole getDeviceRole(String type) {
+ LambdaQueryWrapper<DeviceRole> query = new LambdaQueryWrapper<>();
+ query.eq(DeviceRole::getIsdeleted,Constants.ZERO)
+ .eq(DeviceRole::getIsDefault,Constants.ZERO)
+ .eq(DeviceRole::getType,type)
+ .last(" limit 1");
+ // 鏌ヨ鏄惁鏈夐粯璁ら棬绂佺粍锛屽彧鑳芥湁涓�缁勯粯璁ら棬绂佺粍
+ DeviceRole getDeviceRole = deviceRoleMapper.selectOne(query);
+ return getDeviceRole;
+ }
+
+ @Override
+ public void updateByIdInBatch(List<DeviceRole> deviceRoles) {
+ if (CollectionUtils.isEmpty(deviceRoles)) {
+ return;
+ }
+ for (DeviceRole deviceRole: deviceRoles) {
+ this.updateById(deviceRole);
+ }
+ }
+
+ @Override
+ public DeviceRole findById(Integer id) {
+ return deviceRoleMapper.selectById(id);
+ }
+
+ @Override
+ public DeviceRole findOne(DeviceRole deviceRole) {
+ QueryWrapper<DeviceRole> wrapper = new QueryWrapper<>(deviceRole);
+ return deviceRoleMapper.selectOne(wrapper);
+ }
+
+ @Override
+ public List<DeviceRole> findList(DeviceRole deviceRole) {
+ QueryWrapper<DeviceRole> wrapper = new QueryWrapper<>(deviceRole);
+ return deviceRoleMapper.selectList(wrapper);
+ }
+
+ @Override
+ public PageData<DeviceRole> findPage(PageWrap<DeviceRole> pageWrap) {
+ IPage<DeviceRole> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ QueryWrapper<DeviceRole> queryWrapper = new QueryWrapper<>();
+ Utils.MP.blankToNull(pageWrap.getModel());
+ pageWrap.getModel().setIsdeleted(Constants.ZERO);
+ queryWrapper.select("*,(select count(1) from member_role b where b.isdeleted=0 and b.role_id=device_role.id) as memberNum");
+ if (pageWrap.getModel().getId() != null) {
+ queryWrapper.lambda().eq(DeviceRole::getId, pageWrap.getModel().getId());
+ }
+ if (pageWrap.getModel().getCreator() != null) {
+ queryWrapper.lambda().eq(DeviceRole::getCreator, pageWrap.getModel().getCreator());
+ }
+ if (pageWrap.getModel().getCreateDate() != null) {
+ queryWrapper.lambda().ge(DeviceRole::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+ queryWrapper.lambda().le(DeviceRole::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+ }
+ if (pageWrap.getModel().getEdirot() != null) {
+ queryWrapper.lambda().eq(DeviceRole::getEdirot, pageWrap.getModel().getEdirot());
+ }
+ if (pageWrap.getModel().getEditDate() != null) {
+ queryWrapper.lambda().ge(DeviceRole::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+ queryWrapper.lambda().le(DeviceRole::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+ }
+ if (pageWrap.getModel().getIsdeleted() != null) {
+ queryWrapper.lambda().eq(DeviceRole::getIsdeleted, pageWrap.getModel().getIsdeleted());
+ }
+ if (pageWrap.getModel().getRemark() != null) {
+ queryWrapper.lambda().eq(DeviceRole::getRemark, pageWrap.getModel().getRemark());
+ }
+ if (pageWrap.getModel().getName() != null) {
+ queryWrapper.lambda().like(DeviceRole::getName, pageWrap.getModel().getName());
+ }
+ if (pageWrap.getModel().getIsDefault() != null) {
+ queryWrapper.lambda().eq(DeviceRole::getIsDefault, pageWrap.getModel().getIsDefault());
+ }
+ if (StringUtils.isNotBlank(pageWrap.getModel().getType())) {
+ if(pageWrap.getModel().getType().length() > 1) {
+ String[] types = pageWrap.getModel().getType().split(",");
+ queryWrapper.lambda().and(p-> p.eq(DeviceRole::getType, types[0])
+ .or()
+ .eq(DeviceRole::getType, types[1]));
+ }else {
+ queryWrapper.lambda().eq(DeviceRole::getType, pageWrap.getModel().getType());
+ }
+ }
+ if (pageWrap.getModel().getDoorIds() != null) {
+ queryWrapper.lambda().eq(DeviceRole::getDoorIds, pageWrap.getModel().getDoorIds());
+ }
+ if (pageWrap.getModel().getDoorNames() != null) {
+ queryWrapper.lambda().eq(DeviceRole::getDoorNames, pageWrap.getModel().getDoorNames());
+ }
+ if (pageWrap.getModel().getParkIds() != null) {
+ queryWrapper.lambda().eq(DeviceRole::getParkIds, pageWrap.getModel().getParkIds());
+ }
+ if (pageWrap.getModel().getParkNames() != null) {
+ queryWrapper.lambda().eq(DeviceRole::getParkNames, pageWrap.getModel().getParkNames());
+ }
+ if (pageWrap.getModel().getStatus() != null) {
+ queryWrapper.lambda().eq(DeviceRole::getStatus, pageWrap.getModel().getStatus());
+ }
+ for(PageWrap.SortData sortData: pageWrap.getSorts()) {
+ if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+ queryWrapper.orderByDesc(sortData.getProperty());
+ } else {
+ queryWrapper.orderByAsc(sortData.getProperty());
+ }
+ }
+ queryWrapper.lambda().orderByAsc( DeviceRole::getName);
+ IPage<DeviceRole> newPage = deviceRoleMapper.selectPage(page, queryWrapper);
+ if(null != newPage && newPage.getRecords().size() > 0) {
+ List<DeviceRole> deviceRoleList = newPage.getRecords();
+ /* for (DeviceRole dto:deviceRoleList) {
+ Member member = new Member();
+ member.setIsdeleted(Constants.ZERO);
+ member.setRoleIdParam("["+dto.getId()+"]");
+ dto.setMemberNum( memberMapper.selectCount(new QueryWrapper<>(member)));
+ }*/
+ newPage.setRecords(deviceRoleList);
+ }
+ return PageData.from(newPage);
+ }
+
+ @Override
+ public long count(DeviceRole deviceRole) {
+ QueryWrapper<DeviceRole> wrapper = new QueryWrapper<>(deviceRole);
+ return deviceRoleMapper.selectCount(wrapper);
+ }
+
+ @Override
+ public List<DeviceRoleVO> findListByType(Integer type) {
+ List<DeviceRole> deviceRoleList = deviceRoleMapper.selectList(new QueryWrapper<DeviceRole>().lambda()
+ .eq(DeviceRole::getType,type)
+ .eq(DeviceRole::getIsdeleted, Constants.ZERO)
+ .eq(DeviceRole::getStatus, Constants.ONE)
+ );
+ List<DeviceRoleVO> deviceRoleVOList = new ArrayList<>();
+ for (DeviceRole deviceRole:deviceRoleList) {
+ DeviceRoleVO deviceRoleVO = new DeviceRoleVO();
+ BeanUtils.copyProperties(deviceRole,deviceRoleVO);
+ deviceRoleVOList.add(deviceRoleVO);
+ }
+ return deviceRoleVOList;
+ }
+
+
+
+
+
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/EmpowerServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/EmpowerServiceImpl.java
new file mode 100644
index 0000000..63d795a
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/EmpowerServiceImpl.java
@@ -0,0 +1,159 @@
+package com.doumee.service.business.impl;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.Date;
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.admin.response.MemberInfoDTO;
+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;
+import com.doumee.service.business.EmpowerService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 浜哄憳鎺堟潈瀵煎叆璁板綍Service瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Service
+public class EmpowerServiceImpl implements EmpowerService {
+
+ @Autowired
+ private EmpowerMapper empowerMapper;
+
+ @Autowired
+ private EmpowerJoinMapper empowerJoinMapper;
+
+
+ @Override
+ public Integer create(Empower empower) {
+ empowerMapper.insert(empower);
+ return empower.getId();
+ }
+
+ @Override
+ public void deleteById(Integer id) {
+ empowerMapper.deleteById(id);
+ }
+
+ @Override
+ public void delete(Empower empower) {
+ UpdateWrapper<Empower> deleteWrapper = new UpdateWrapper<>(empower);
+ empowerMapper.delete(deleteWrapper);
+ }
+
+ @Override
+ public void deleteByIdInBatch(List<Integer> ids) {
+ if (CollectionUtils.isEmpty(ids)) {
+ return;
+ }
+ empowerMapper.deleteBatchIds(ids);
+ }
+
+ @Override
+ public void updateById(Empower empower) {
+ empowerMapper.updateById(empower);
+ }
+
+ @Override
+ public void updateByIdInBatch(List<Empower> empowers) {
+ if (CollectionUtils.isEmpty(empowers)) {
+ return;
+ }
+ for (Empower empower: empowers) {
+ this.updateById(empower);
+ }
+ }
+
+ @Override
+ public Empower findById(Integer id) {
+ return empowerMapper.selectById(id);
+ }
+
+ @Override
+ public Empower findOne(Empower empower) {
+ QueryWrapper<Empower> wrapper = new QueryWrapper<>(empower);
+ return empowerMapper.selectOne(wrapper);
+ }
+
+ @Override
+ public List<Empower> findList(Empower empower) {
+ QueryWrapper<Empower> wrapper = new QueryWrapper<>(empower);
+ return empowerMapper.selectList(wrapper);
+ }
+
+ @Override
+ public PageData<Empower> findPage(PageWrap<Empower> pageWrap) {
+ IPage<Empower> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ MPJLambdaWrapper<Empower> queryWrapper = new MPJLambdaWrapper<>();
+
+ queryWrapper.selectAll(Empower.class);
+ 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)*/
+ .and(StringUtils.isNotBlank(pageWrap.getModel().getMemberName()), ms->ms.like(Member::getName,pageWrap.getModel().getMemberName())
+ .or().like(Member::getPhone,pageWrap.getModel().getMemberName()));
+ 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::getCreateDate,pageWrap.getModel().getSendStartDate());
+ queryWrapper.le(Objects.nonNull(pageWrap.getModel().getSendEndDate()),Empower::getCreateDate,pageWrap.getModel().getSendEndDate());
+
+ SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
+ Calendar cal=Calendar.getInstance();
+ if(Objects.nonNull(pageWrap.getModel().getTimeDn())){
+ if(Constants.equalsInteger(pageWrap.getModel().getTimeDn(),0)){
+ String now=format.format(cal.getTime())+" :00:00:00";
+ queryWrapper.ge(Empower::getSendDate,now);
+ }
+ if(Constants.equalsInteger(pageWrap.getModel().getTimeDn(),7)){
+
+ cal.add(Calendar.DAY_OF_MONTH,-7);
+ queryWrapper.ge(Empower::getSendDate,cal.getTime());
+ }
+ if(Constants.equalsInteger(pageWrap.getModel().getTimeDn(),30)){
+ cal.add(Calendar.DAY_OF_MONTH,-30);
+ queryWrapper.ge(Empower::getSendDate,cal.getTime());
+ }
+ }
+ queryWrapper.orderByDesc(Empower::getId);
+ IPage<Empower> result = empowerJoinMapper.selectJoinPage(page, Empower.class,queryWrapper);
+ return PageData.from(result);
+ }
+
+ @Override
+ public long count(Empower empower) {
+ QueryWrapper<Empower> wrapper = new QueryWrapper<>(empower);
+ return empowerMapper.selectCount(wrapper);
+ }
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/InterfaceLogServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/InterfaceLogServiceImpl.java
new file mode 100644
index 0000000..9f11835
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/InterfaceLogServiceImpl.java
@@ -0,0 +1,164 @@
+package com.doumee.service.business.impl;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.InterfaceLogMapper;
+import com.doumee.dao.business.model.InterfaceLog;
+import com.doumee.service.business.InterfaceLogService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+
+/**
+ * 涓夋柟骞冲彴鎺ュ彛浜や簰璁板綍Service瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Service
+public class InterfaceLogServiceImpl implements InterfaceLogService {
+
+ @Autowired
+ private InterfaceLogMapper interfaceLogMapper;
+
+ @Override
+ public Integer create(InterfaceLog interfaceLog) {
+ interfaceLogMapper.insert(interfaceLog);
+ return interfaceLog.getId();
+ }
+
+ @Override
+ public void deleteById(Integer id) {
+ interfaceLogMapper.deleteById(id);
+ }
+
+ @Override
+ public void delete(InterfaceLog interfaceLog) {
+ UpdateWrapper<InterfaceLog> deleteWrapper = new UpdateWrapper<>(interfaceLog);
+ interfaceLogMapper.delete(deleteWrapper);
+ }
+
+ @Override
+ public void deleteByIdInBatch(List<Integer> ids) {
+ if (CollectionUtils.isEmpty(ids)) {
+ return;
+ }
+ interfaceLogMapper.deleteBatchIds(ids);
+ }
+
+ @Override
+ public void updateById(InterfaceLog interfaceLog) {
+ interfaceLogMapper.updateById(interfaceLog);
+ }
+
+ @Override
+ public void updateByIdInBatch(List<InterfaceLog> interfaceLogs) {
+ if (CollectionUtils.isEmpty(interfaceLogs)) {
+ return;
+ }
+ for (InterfaceLog interfaceLog: interfaceLogs) {
+ this.updateById(interfaceLog);
+ }
+ }
+
+ @Override
+ public InterfaceLog findById(Integer id) {
+ return interfaceLogMapper.selectById(id);
+ }
+
+ @Override
+ public InterfaceLog findOne(InterfaceLog interfaceLog) {
+ QueryWrapper<InterfaceLog> wrapper = new QueryWrapper<>(interfaceLog);
+ return interfaceLogMapper.selectOne(wrapper);
+ }
+
+ @Override
+ public List<InterfaceLog> findList(InterfaceLog interfaceLog) {
+ QueryWrapper<InterfaceLog> wrapper = new QueryWrapper<>(interfaceLog);
+ return interfaceLogMapper.selectList(wrapper);
+ }
+
+ @Override
+ public PageData<InterfaceLog> findPage(PageWrap<InterfaceLog> pageWrap) {
+ IPage<InterfaceLog> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ QueryWrapper<InterfaceLog> queryWrapper = new QueryWrapper<>();
+ Utils.MP.blankToNull(pageWrap.getModel());
+ if (pageWrap.getModel().getId() != null) {
+ queryWrapper.lambda().eq(InterfaceLog::getId, pageWrap.getModel().getId());
+ }
+ if (pageWrap.getModel().getCreator() != null) {
+ queryWrapper.lambda().eq(InterfaceLog::getCreator, pageWrap.getModel().getCreator());
+ }
+ if (pageWrap.getModel().getCreateDate() != null) {
+ queryWrapper.lambda().ge(InterfaceLog::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+ queryWrapper.lambda().le(InterfaceLog::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+ }
+ if (pageWrap.getModel().getEditor() != null) {
+ queryWrapper.lambda().eq(InterfaceLog::getEditor, pageWrap.getModel().getEditor());
+ }
+ if (pageWrap.getModel().getEditDate() != null) {
+ queryWrapper.lambda().ge(InterfaceLog::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+ queryWrapper.lambda().le(InterfaceLog::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+ }
+
+ if (pageWrap.getModel().getStartDate() != null) {
+ queryWrapper.lambda().ge(InterfaceLog::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getStartDate()));
+ }
+ if (pageWrap.getModel().getEndDate() != null) {
+ queryWrapper.lambda().le(InterfaceLog::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getEndDate()));
+ }
+ if (pageWrap.getModel().getIsdeleted() != null) {
+ queryWrapper.lambda().eq(InterfaceLog::getIsdeleted, pageWrap.getModel().getIsdeleted());
+ }
+ if (pageWrap.getModel().getRemark() != null) {
+ queryWrapper.lambda().eq(InterfaceLog::getRemark, pageWrap.getModel().getRemark());
+ }
+ if (pageWrap.getModel().getType() != null) {
+ queryWrapper.lambda().eq(InterfaceLog::getType, pageWrap.getModel().getType());
+ }
+ if (pageWrap.getModel().getName() != null) {
+ queryWrapper.lambda().like(InterfaceLog::getName, pageWrap.getModel().getName());
+ }
+ if (pageWrap.getModel().getUrl() != null) {
+ queryWrapper.lambda().like(InterfaceLog::getUrl, pageWrap.getModel().getUrl());
+ }
+ if (pageWrap.getModel().getRequest() != null) {
+ queryWrapper.lambda().like(InterfaceLog::getRequest, pageWrap.getModel().getRequest());
+ }
+ if (pageWrap.getModel().getRepose() != null) {
+ queryWrapper.lambda().like(InterfaceLog::getRepose, pageWrap.getModel().getRepose());
+ }
+ if (pageWrap.getModel().getSuccess() != null) {
+ queryWrapper.lambda().eq(InterfaceLog::getSuccess, pageWrap.getModel().getSuccess());
+ }
+ if (pageWrap.getModel().getPlat() != null) {
+ queryWrapper.lambda().eq(InterfaceLog::getPlat, pageWrap.getModel().getPlat());
+ }
+ if (pageWrap.getModel().getObjType() != null) {
+ queryWrapper.lambda().eq(InterfaceLog::getObjType, pageWrap.getModel().getObjType());
+ }
+ if (pageWrap.getModel().getObjId() != null) {
+ queryWrapper.lambda().eq(InterfaceLog::getObjId, pageWrap.getModel().getObjId());
+ }
+ queryWrapper.lambda().orderByDesc(InterfaceLog::getCreateDate);
+ return PageData.from(interfaceLogMapper.selectPage(page, queryWrapper));
+ }
+
+ @Override
+ public long count(InterfaceLog interfaceLog) {
+ QueryWrapper<InterfaceLog> wrapper = new QueryWrapper<>(interfaceLog);
+ return interfaceLogMapper.selectCount(wrapper);
+ }
+ @Override
+ public void clearThreeMonthLog() {
+ interfaceLogMapper.delete(new UpdateWrapper<InterfaceLog>().lambda()
+ .apply("to_days(create_date)+15 < to_days(now())")
+ .like(InterfaceLog::getUrl,"/artemis/api/"));
+ }
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberRoleServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberRoleServiceImpl.java
new file mode 100644
index 0000000..6e6fd07
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberRoleServiceImpl.java
@@ -0,0 +1,136 @@
+package com.doumee.service.business.impl;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.MemberRoleMapper;
+import com.doumee.dao.business.model.MemberRole;
+import com.doumee.service.business.MemberRoleService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+
+/**
+ * 浜哄憳瑙掕壊鍏宠仈淇℃伅Service瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Service
+public class MemberRoleServiceImpl implements MemberRoleService {
+
+ @Autowired
+ private MemberRoleMapper memberRoleMapper;
+
+ @Override
+ public Integer create(MemberRole memberRole) {
+ memberRoleMapper.insert(memberRole);
+ return memberRole.getId();
+ }
+
+ @Override
+ public void deleteById(Integer id) {
+ memberRoleMapper.deleteById(id);
+ }
+
+ @Override
+ public void delete(MemberRole memberRole) {
+ UpdateWrapper<MemberRole> deleteWrapper = new UpdateWrapper<>(memberRole);
+ memberRoleMapper.delete(deleteWrapper);
+ }
+
+ @Override
+ public void deleteByIdInBatch(List<Integer> ids) {
+ if (CollectionUtils.isEmpty(ids)) {
+ return;
+ }
+ memberRoleMapper.deleteBatchIds(ids);
+ }
+
+ @Override
+ public void updateById(MemberRole memberRole) {
+ memberRoleMapper.updateById(memberRole);
+ }
+
+ @Override
+ public void updateByIdInBatch(List<MemberRole> memberRoles) {
+ if (CollectionUtils.isEmpty(memberRoles)) {
+ return;
+ }
+ for (MemberRole memberRole: memberRoles) {
+ this.updateById(memberRole);
+ }
+ }
+
+ @Override
+ public MemberRole findById(Integer id) {
+ return memberRoleMapper.selectById(id);
+ }
+
+ @Override
+ public MemberRole findOne(MemberRole memberRole) {
+ QueryWrapper<MemberRole> wrapper = new QueryWrapper<>(memberRole);
+ return memberRoleMapper.selectOne(wrapper);
+ }
+
+ @Override
+ public List<MemberRole> findList(MemberRole memberRole) {
+ QueryWrapper<MemberRole> wrapper = new QueryWrapper<>(memberRole);
+ return memberRoleMapper.selectList(wrapper);
+ }
+
+ @Override
+ public PageData<MemberRole> findPage(PageWrap<MemberRole> pageWrap) {
+ IPage<MemberRole> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ QueryWrapper<MemberRole> queryWrapper = new QueryWrapper<>();
+ Utils.MP.blankToNull(pageWrap.getModel());
+ if (pageWrap.getModel().getId() != null) {
+ queryWrapper.lambda().eq(MemberRole::getId, pageWrap.getModel().getId());
+ }
+ if (pageWrap.getModel().getCreator() != null) {
+ queryWrapper.lambda().eq(MemberRole::getCreator, pageWrap.getModel().getCreator());
+ }
+ if (pageWrap.getModel().getCreateDate() != null) {
+ queryWrapper.lambda().ge(MemberRole::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+ queryWrapper.lambda().le(MemberRole::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+ }
+ if (pageWrap.getModel().getEdirot() != null) {
+ queryWrapper.lambda().eq(MemberRole::getEdirot, pageWrap.getModel().getEdirot());
+ }
+ if (pageWrap.getModel().getEditDate() != null) {
+ queryWrapper.lambda().ge(MemberRole::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+ queryWrapper.lambda().le(MemberRole::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+ }
+ if (pageWrap.getModel().getIsdeleted() != null) {
+ queryWrapper.lambda().eq(MemberRole::getIsdeleted, pageWrap.getModel().getIsdeleted());
+ }
+ if (pageWrap.getModel().getRemark() != null) {
+ queryWrapper.lambda().eq(MemberRole::getRemark, pageWrap.getModel().getRemark());
+ }
+ if (pageWrap.getModel().getMemberId() != null) {
+ queryWrapper.lambda().eq(MemberRole::getMemberId, pageWrap.getModel().getMemberId());
+ }
+ if (pageWrap.getModel().getRoleId() != null) {
+ queryWrapper.lambda().eq(MemberRole::getRoleId, pageWrap.getModel().getRoleId());
+ }
+ for(PageWrap.SortData sortData: pageWrap.getSorts()) {
+ if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+ queryWrapper.orderByDesc(sortData.getProperty());
+ } else {
+ queryWrapper.orderByAsc(sortData.getProperty());
+ }
+ }
+ return PageData.from(memberRoleMapper.selectPage(page, queryWrapper));
+ }
+
+ @Override
+ public long count(MemberRole memberRole) {
+ QueryWrapper<MemberRole> wrapper = new QueryWrapper<>(memberRole);
+ return memberRoleMapper.selectCount(wrapper);
+ }
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
new file mode 100644
index 0000000..72e455e
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -0,0 +1,1169 @@
+package com.doumee.service.business.impl;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.IdcardUtil;
+import cn.hutool.core.util.PhoneUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.config.DataSyncConfig;
+import com.doumee.config.Jwt.JwtPayLoad;
+import com.doumee.config.Jwt.JwtTokenUtil;
+import com.doumee.core.annotation.excel.ExcelImporter;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.haikang.model.HKConstants;
+import com.doumee.core.haikang.model.param.BaseResponse;
+import com.doumee.core.haikang.model.param.request.UserDelRequest;
+import com.doumee.core.haikang.model.param.respose.UserDelResponse;
+import com.doumee.core.haikang.service.HKService;
+import com.doumee.core.model.LoginUserInfo;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.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;
+import com.doumee.dao.admin.request.MemberQuery;
+import com.doumee.dao.admin.response.MemberInfoDTO;
+import com.doumee.dao.admin.response.StagingDataVO;
+import com.doumee.dao.business.*;
+import com.doumee.dao.business.join.MemberJoinMapper;
+import com.doumee.dao.business.join.RetentionJoinMapper;
+import com.doumee.dao.business.join.UserActionJoinMapper;
+import com.doumee.dao.business.model.*;
+import com.doumee.dao.system.model.SystemDictData;
+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;
+import com.doumee.service.business.MemberService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.doumee.service.business.impl.hksync.HkSyncEmpowerServiceImpl;
+import com.doumee.service.business.impl.hksync.ferp.HkSyncOrgUserToHKServiceImpl;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.SecurityUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 浜哄憳淇℃伅琛⊿ervice瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Service
+public class MemberServiceImpl implements MemberService {
+
+ @Autowired
+ private MemberMapper memberMapper;
+
+ @Autowired
+ private MemberJoinMapper memberJoinMapper;
+
+ @Autowired
+ private TrainTimeMapper trainTimeMapper;
+
+ @Autowired
+ private MemberRoleMapper memberRoleMapper;
+
+ @Autowired
+ private DeviceRoleMapper deviceRoleMapper;
+
+ @Autowired
+ private EmpowerMapper empowerMapper;
+
+ @Autowired
+ private DeviceMapper deviceMapper;
+
+ @Autowired
+ private SystemDictDataBiz systemDictDataBiz;
+ @Autowired
+ private UserActionJoinMapper userActionJoinMapper;
+
+ @Autowired
+ private MemberCardMapper memberCardMapper;
+ @Autowired
+ private CompanyMapper companyMapper;
+
+ @Autowired
+ private RedisTemplate<String, Object> redisTemplate;
+ @Autowired
+ private DataSyncConfig dataSyncConfig;
+
+ @Autowired
+ private RetentionJoinMapper retentionJoinMapper;
+
+ @Autowired
+ private VisitsMapper visitsMapper;
+
+
+ @Override
+ public Integer create(Member member) {
+ memberMapper.insert(member);
+ return member.getId();
+ }
+
+ @Transactional
+ @Override
+ public Integer laborMemberCreate(LaborMemberDTO member) {
+
+ LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+
+ if (PhoneUtil.isPhone(member.getPhone())){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鐢佃瘽鍙风爜鏍煎紡鏈夎");
+ }
+ if (IdcardUtil.isValidCard(member.getIdcardNo())){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"韬唤璇佸彿鏍煎紡鏈夎");
+ }
+ if (IdcardUtil.getGenderByIdCard(member.getIdcardNo()) == member.getSex()){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鎬у埆鏈夎");
+ }
+ //鑾峰彇鍑虹敓鏃ユ湡
+ String birthByIdCard = IdcardUtil.getBirthByIdCard(member.getIdcardNo());
+ //鑴辨晱鎿嶄綔
+ String hide = IdcardUtil.hide(member.getIdcardNo(), 5, 14);
+ //杞崲鏃ユ湡
+ DateTime yyyyMMdd = DateUtil.parse(birthByIdCard, "yyyyMMdd");
+
+ Member insert = new Member();
+ insert.setCreator(loginUserInfo.getId());
+ insert.setCreateDate(new Date());
+ insert.setEditor(loginUserInfo.getId());
+ insert.setEditDate(new Date());
+ insert.setIsdeleted(Constants.ZERO);
+ insert.setCompanyId(member.getCompanyId());
+ insert.setFaceImg(member.getFaceImg());
+ insert.setImgurl(member.getImgurl());
+ insert.setType(Constants.ZERO);
+ insert.setName(member.getName());
+ insert.setBirthday(yyyyMMdd);
+ insert.setPhone(member.getPhone());
+ insert.setIdcardNo(Utils.Secure.encryptString(member.getIdcardNo()));
+ IdcardUtil.isValidCard(member.getIdcardNo());
+ insert.setIdcardDecode(hide);
+ insert.setStatus(Constants.ZERO);
+ insert.setParentId(member.getParentId());
+ memberMapper.insert(insert);
+
+ /* TrainTime trainTime = new TrainTime();
+ trainTime.setCreator(loginUserInfo.getId().toString());
+ trainTime.setCreateDate(new Date());
+ trainTime.setEdirot(loginUserInfo.getId().toString());
+ trainTime.setEditDate(new Date());
+ trainTime.setIsdeleted(Constants.ZERO);
+ trainTime.setMemberId(insert.getId());
+ trainTime.setStartTime(Utils.Date.getStart(member.getStartTime()));
+ trainTime.setEndTime(Utils.Date.getDayEnd(member.getEndTime()));
+// trainTime.setImportStatus();
+// trainTime.setImportInfo();
+ trainTimeMapper.insert(trainTime);*/
+ return insert.getId();
+ }
+
+ @Override
+ public void deleteById(Integer id) {
+ LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+
+ Member member=new Member();
+ member.setId(id);
+ member.setIsdeleted(Constants.ZERO);
+ member.setEditor(loginUserInfo.getId());
+ member.setEditDate(new Date());
+ memberMapper.updateById(member);
+ }
+
+
+ @Override
+ public void roleAuthById(Integer id) {
+ Member member = memberMapper.selectById(id);
+ if(member==null || member.getIsdeleted().equals(Constants.ONE)){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鍛樺伐淇℃伅宸插垹闄�");
+ }
+// List<MemberCard> cards = HkSyncOrgUserToHKServiceImpl.getNormalCardList(member,memberCardMapper);
+ HkSyncOrgUserToHKServiceImpl.dealMemberRoleEmpowerDo(null,member,deviceRoleMapper,empowerMapper,deviceMapper);
+ }
+ @Override
+ public void empowerByList(Member member) {
+ if(member.getIdList()!=null && member.getIdList().size() >0){
+ List<Member> members = memberMapper.selectList(new QueryWrapper<Member>().lambda()
+ .in(Member::getId,member.getIdList())
+ .eq(Member::getIsdeleted,Constants.ZERO));
+ if(members!=null){
+ for(Member m : members){
+ HkSyncOrgUserToHKServiceImpl.dealMemberRoleEmpowerDo(null,m,deviceRoleMapper,empowerMapper,deviceMapper);
+ }
+ }
+ }
+ }
+
+
+ @Override
+ public void delete(Member member) {
+ UpdateWrapper<Member> deleteWrapper = new UpdateWrapper<>(member);
+ memberMapper.delete(deleteWrapper);
+ }
+
+ @Override
+ public void deleteByIdInBatch(List<Integer> ids) {
+ if (CollectionUtils.isEmpty(ids)) {
+ return;
+ }
+ LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+ Member member=new Member();
+ ids.stream().forEach(s ->{
+ member.setId(s);
+ member.setIsdeleted(Constants.ONE);
+ member.setEditor(loginUserInfo.getId());
+ member.setEditDate(new Date());
+ memberMapper.updateById(member);
+
+ UserAction userAction=new UserAction();
+ userAction.setIsdeleted(Constants.ZERO);
+ userAction.setCreateDate(new Date());
+ userAction.setCreator(loginUserInfo.getId());
+ userAction.setType(9);
+ userAction.setRemark("鐢便��"+loginUserInfo.getUsername()+"銆戜簬銆愭搷浣滄椂闂�"+DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss")+"銆戯紝杩涜銆愬垹闄ゃ��");
+ userAction.setMemberId(s+"");
+ userActionJoinMapper.insert(userAction);
+
+ });
+
+
+
+
+
+ /* memberMapper.deleteBatchIds(ids);*/
+ }
+
+ @Override
+ public void batchBlock(List<Integer> ids,Integer type) {
+ if (CollectionUtils.isEmpty(ids)) {
+ return;
+ }
+ LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+ Member member=new Member();
+ for (Integer id:ids) {
+ member = memberMapper.selectById(id);
+ if(!Objects.isNull(member)&&member.getStatus()==Constants.ZERO){
+ UserAction userAction=new UserAction();
+// userAction.setBeforeStatus(member.getStatus());
+ member.setStatus(Constants.TWO);
+ member.setEditor(loginUserInfo.getId());
+ member.setEditDate(new Date());
+ memberMapper.updateById(member);
+
+ userAction.setIsdeleted(Constants.ZERO);
+ userAction.setCreateDate(new Date());
+ userAction.setCreator(loginUserInfo.getId());
+ if(Constants.equalsInteger(type,Constants.ONE)){
+ userAction.setType(Constants.ONE);
+ userAction.setRemark("鐢便��"+loginUserInfo.getUsername()+"銆戜簬銆愭搷浣滄椂闂�"+DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss")+"銆戯紝杩涜銆愬喕缁撱��");
+ }
+ if(Constants.equalsInteger(type,Constants.TWO)){
+ userAction.setType(Constants.TWO);
+ userAction.setRemark("鐢便��"+loginUserInfo.getUsername()+"銆戜簬銆愭搷浣滄椂闂�"+DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss")+"銆戯紝杩涜銆愭媺榛戙��");
+
+ }
+ userAction.setMemberId(id+"");
+
+ userActionJoinMapper.insert(userAction);
+ }
+ }
+ /* memberMapper.deleteBatchIds(ids);*/
+ }
+
+
+
+
+ @Override
+ public void updateById(Member member) {
+ memberMapper.updateById(member);
+ }
+ @Override
+ public void updateFace(Member member) {
+ QueryWrapper<Member> wrapper = new QueryWrapper<>(member);
+ wrapper.lambda().ne(Member::getRemark,"浜鸿劯宸插悓姝ユ渶鏂�");
+ List<Member> list =memberMapper.selectList(wrapper);
+ if(list!=null){
+ String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
+ +systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
+ for(Member m : list){
+ String faceId= HkSyncOrgUserToHKServiceImpl.dealMemberFace(m,path);
+ if(StringUtils.isNotBlank(faceId)){
+ Member update = new Member();
+ update.setId(m.getId());
+ update.setFaceId(faceId);
+ update.setRemark("浜鸿劯宸插悓姝ユ渶鏂�");
+ update.setFaceStatus(Constants.ONE);
+ memberMapper.updateById(update);
+ }
+ }
+ }
+ }
+ @Override
+ public void delHkForce(Member member) {
+ Member model =memberMapper.selectById(member.getId());
+ if(model ==null) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝浜哄憳淇℃伅涓嶅瓨鍦紒");
+ }
+ if(!Constants.equalsObject(model.getIsdeleted(),Constants.ONE)){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝鍙湁閽堝绂昏亴浜哄憳鍙繘琛岃鎿嶄綔锛�");
+ }
+ if(Constants.equalsObject(model.getHkStatus(),Constants.ONE)){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ヤ汉鍛樺凡琚垹闄わ紒");
+ }
+ if(StringUtils.isBlank(model.getHkId())){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝璇ヤ汉鍛橀潪瀹夐槻骞冲彴鍒涘缓浜哄憳锛屼笉鑳借繘琛岃鎿嶄綔锛�");
+ }
+ HkSyncEmpowerServiceImpl.doHkDeleteUser(model.getId(),model.getHkId(),new Date(),memberMapper,memberCardMapper);
+ }
+
+ @Override
+ public void updateStatusById(Member member) {
+ LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+ Member update = new Member();
+ update.setEditDate(new Date());
+ update.setEditor(loginUserInfo.getId());
+ update.setStatus(member.getStatus());
+ memberMapper.updateById(update);
+ }
+
+
+ @Override
+ public void updateVisitsStatusById(Member member) {
+ LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+ Member result=memberMapper.selectById(member.getId());
+ Integer status=result.getStatus();
+ Member update = new Member();
+ update.setEditDate(new Date());
+ update.setEditor(loginUserInfo.getId());
+ update.setStatus(Constants.Status.FREEZE.getValue());
+ update.setId(member.getId());
+ memberMapper.updateById(update);
+
+ UserAction userAction=new UserAction();
+ userAction.setIsdeleted(Constants.ZERO);
+ userAction.setCreateDate(new Date());
+ userAction.setCreator(loginUserInfo.getId());
+ if(Constants.equalsInteger(result.getType(),Constants.TWO)){
+ userAction.setType(Constants.ONE);
+ userAction.setRemark("鐢便��"+loginUserInfo.getUsername()+"銆戜簬銆愭搷浣滄椂闂�"+DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss")+"銆戯紝杩涜銆愬喕缁撱��");
+ }
+ if(Constants.equalsInteger(result.getType(),Constants.ZERO)){
+ userAction.setType(Constants.TWO);
+ userAction.setRemark("鐢便��"+loginUserInfo.getUsername()+"銆戜簬銆愭搷浣滄椂闂�"+DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss")+"銆戯紝杩涜銆愭媺榛戙��");
+
+ }
+ userAction.setMemberId(result.getId()+"");
+ userAction.setBeforeStatus(status);
+ userActionJoinMapper.insert(userAction);
+ }
+
+
+ @Override
+ public void updateRemoveStatusById(List<Member> members) {
+ LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+
+ Date date=new Date();
+ members.stream().forEach(s ->{
+ Member result=memberMapper.selectById(s.getId());
+ Integer status=result.getStatus();
+ Member update = new Member();
+ update.setEditDate(date);
+ update.setEditor(loginUserInfo.getId());
+ update.setStatus(Constants.Status.ENABLE.getValue());
+ update.setId(s.getId());
+ memberMapper.updateById(update);
+
+ //瑙e喕涓氬姟 澶勭悊鐢ㄦ埛鎺堟潈瀵煎叆璁板綍
+ this.thawMember(result);
+
+ UserAction userAction=new UserAction();
+ userAction.setIsdeleted(Constants.ZERO);
+ userAction.setCreateDate(new Date());
+ userAction.setCreator(loginUserInfo.getId());
+ if(Constants.equalsInteger(result.getType(),Constants.TWO)){
+ userAction.setType(Constants.ZERO);
+ userAction.setBeforeStatus(Constants.ONE);
+ }
+ if(Constants.equalsInteger(result.getType(),Constants.ONE)){
+ userAction.setBeforeStatus(status);
+ userAction.setType(Constants.TWO);
+ }
+ userAction.setMemberId(result.getId()+"");
+ userActionJoinMapper.insert(userAction);
+ });
+ }
+
+
+
+
+ @Override
+ public void updateCanVisitById(Member member) {
+ LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+ Member update = new Member();
+ update.setEditDate(new Date());
+ update.setEditor(loginUserInfo.getId());
+ update.setCanVisit(member.getCanVisit());
+ memberMapper.updateById(update);
+ }
+
+ @Override
+ public void updateByIdInBatch(List<Member> members) {
+ if (CollectionUtils.isEmpty(members)) {
+ return;
+ }
+ for (Member member: members) {
+ this.updateById(member);
+ }
+ }
+
+ @Override
+ public Member findById(Integer id) {
+ return memberMapper.selectById(id);
+ }
+
+ @Override
+ public Member findOne(Member member) {
+ QueryWrapper<Member> wrapper = new QueryWrapper<>(member);
+ return memberMapper.selectOne(wrapper);
+ }
+
+ @Override
+ public List<Member> findList(Member member) {
+ MPJLambdaWrapper<Member> queryWrapper = new MPJLambdaWrapper<>();
+ queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
+ queryWrapper.selectAll(Member.class)
+ .selectAs(Company::getName,MemberInfoDTO::getCompanyName)
+ .selectAs(Company::getLinkName,MemberInfoDTO::getLinkName);
+
+ if(null != member.getType()) {
+ queryWrapper.eq(Member::getType,member.getType());
+ }
+ if(null != member.getCompanyId()) {
+ queryWrapper.eq(Member::getCompanyId,member.getCompanyId());
+ }
+ queryWrapper.eq(Member::getIsdeleted,Constants.ZERO);
+
+ List<Member> list = memberJoinMapper.selectJoinList(Member.class,queryWrapper);
+ if(list!=null){
+ for(Member m : list){
+ m.setName(StringUtils.defaultString(m.getName(),"")+"-"+StringUtils.defaultString(m.getCompanyName(),""));
+ }
+ }
+ return list;
+ }
+
+ @Override
+ public PageData<Member> findPage(PageWrap<Member> pageWrap) {
+
+ IPage<Member> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ QueryWrapper<Member> queryWrapper = new QueryWrapper<>();
+ Utils.MP.blankToNull(pageWrap.getModel());
+ if (pageWrap.getModel().getKeyword() != null) {
+ queryWrapper.lambda().and( ms->ms.like(Member::getName,pageWrap.getModel().getKeyword())
+ .or().like(Member::getPhone,pageWrap.getModel().getKeyword())
+ .or().like(Member::getCode,pageWrap.getModel().getKeyword()));
+ }
+ if(pageWrap.getModel().getType() != null){
+ if(pageWrap.getModel().getType().equals(Constants.memberType.visitor)){
+ queryWrapper.select(" * , (select v.COMPANY_NAME from visits v where v.MEMBER_ID = member.id and v.STATUS = 2 order by v.CREATE_DATE desc limit 1 ) as companyName , " +
+ " (select v.STARTTIME from visits v where v.MEMBER_ID = member.id and v.STATUS = 2 order by v.CREATE_DATE desc limit 1 ) as lastVisitDate , " +
+ " (select count(1) from visits v where v.MEMBER_ID = member.id and v.STATUS = 2 ) as visitTimes ");
+ }
+ }
+
+ if (pageWrap.getModel().getIsFace() != null) {
+ queryWrapper.lambda().isNull(pageWrap.getModel().getIsFace()==Constants.ZERO,Member::getFaceImg);
+ queryWrapper.lambda().isNotNull(pageWrap.getModel().getIsFace()==Constants.ONE,Member::getFaceImg);
+ }
+
+ if (pageWrap.getModel().getId() != null) {
+ queryWrapper.lambda().eq(Member::getId, pageWrap.getModel().getId());
+ }
+ if (pageWrap.getModel().getCreator() != null) {
+ queryWrapper.lambda().eq(Member::getCreator, pageWrap.getModel().getCreator());
+ }
+ if (pageWrap.getModel().getCreateDate() != null) {
+ queryWrapper.lambda().ge(Member::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+ queryWrapper.lambda().le(Member::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+ }
+ if (pageWrap.getModel().getEditor() != null) {
+ queryWrapper.lambda().eq(Member::getEditor, pageWrap.getModel().getEditor());
+ }
+ if (pageWrap.getModel().getEditDate() != null) {
+ queryWrapper.lambda().ge(Member::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+ queryWrapper.lambda().le(Member::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+ }
+ if (pageWrap.getModel().getIsdeleted() != null) {
+ queryWrapper.lambda().eq(Member::getIsdeleted, pageWrap.getModel().getIsdeleted());
+ }
+ if (pageWrap.getModel().getRemark() != null) {
+ queryWrapper.lambda().eq(Member::getRemark, pageWrap.getModel().getRemark());
+ }
+ if (pageWrap.getModel().getCompanyId() != null) {
+ queryWrapper.lambda().eq(Member::getCompanyId, pageWrap.getModel().getCompanyId());
+ }
+ if (pageWrap.getModel().getFaceImg() != null) {
+ queryWrapper.lambda().eq(Member::getFaceImg, pageWrap.getModel().getFaceImg());
+ }
+ if (pageWrap.getModel().getImgurl() != null) {
+ queryWrapper.lambda().eq(Member::getImgurl, pageWrap.getModel().getImgurl());
+ }
+ if (pageWrap.getModel().getType() != null) {
+ queryWrapper.lambda().eq(Member::getType, pageWrap.getModel().getType());
+ }
+ if (pageWrap.getModel().getName() != null) {
+ queryWrapper.lambda().eq(Member::getName, pageWrap.getModel().getName());
+ }
+ if (pageWrap.getModel().getBirthday() != null) {
+ queryWrapper.lambda().ge(Member::getBirthday, Utils.Date.getStart(pageWrap.getModel().getBirthday()));
+ queryWrapper.lambda().le(Member::getBirthday, Utils.Date.getEnd(pageWrap.getModel().getBirthday()));
+ }
+ if (pageWrap.getModel().getPhone() != null) {
+ queryWrapper.lambda().eq(Member::getPhone, pageWrap.getModel().getPhone());
+ }
+ if (pageWrap.getModel().getIdcardNo() != null) {
+ queryWrapper.lambda().eq(Member::getIdcardNo, pageWrap.getModel().getIdcardNo());
+ }
+ if (pageWrap.getModel().getIdcardDecode() != null) {
+ queryWrapper.lambda().eq(Member::getIdcardDecode, pageWrap.getModel().getIdcardDecode());
+ }
+ if (pageWrap.getModel().getCode() != null) {
+ queryWrapper.lambda().eq(Member::getCode, pageWrap.getModel().getCode());
+ }
+ if (pageWrap.getModel().getClasses() != null) {
+ queryWrapper.lambda().eq(Member::getClasses, pageWrap.getModel().getClasses());
+ }
+ if (pageWrap.getModel().getStatus() != null) {
+ queryWrapper.lambda().eq(Member::getStatus, pageWrap.getModel().getStatus());
+ }
+ if (pageWrap.getModel().getParentId() != null) {
+ queryWrapper.lambda().eq(Member::getParentId, pageWrap.getModel().getParentId());
+ }
+ if (pageWrap.getModel().getOpenid() != null) {
+ queryWrapper.lambda().eq(Member::getOpenid, pageWrap.getModel().getOpenid());
+ }
+ if (pageWrap.getModel().getFsId() != null) {
+ queryWrapper.lambda().eq(Member::getFsId, pageWrap.getModel().getFsId());
+ }
+ if (pageWrap.getModel().getFsStatus() != null) {
+ queryWrapper.lambda().eq(Member::getFsStatus, pageWrap.getModel().getFsStatus());
+ }
+ if (pageWrap.getModel().getFsDate() != null) {
+ queryWrapper.lambda().ge(Member::getFsDate, Utils.Date.getStart(pageWrap.getModel().getFsDate()));
+ queryWrapper.lambda().le(Member::getFsDate, Utils.Date.getEnd(pageWrap.getModel().getFsDate()));
+ }
+ if (pageWrap.getModel().getHkId() != null) {
+ queryWrapper.lambda().eq(Member::getHkId, pageWrap.getModel().getHkId());
+ }
+ if (pageWrap.getModel().getHkStatus() != null) {
+ queryWrapper.lambda().eq(Member::getHkStatus, pageWrap.getModel().getHkStatus());
+ }
+ if (pageWrap.getModel().getHkDate() != null) {
+ queryWrapper.lambda().ge(Member::getHkDate, Utils.Date.getStart(pageWrap.getModel().getHkDate()));
+ queryWrapper.lambda().le(Member::getHkDate, Utils.Date.getEnd(pageWrap.getModel().getHkDate()));
+ }
+ if (pageWrap.getModel().getErpId() != null) {
+ queryWrapper.lambda().eq(Member::getErpId, pageWrap.getModel().getErpId());
+ }
+ if (pageWrap.getModel().getErpDate() != null) {
+ queryWrapper.lambda().ge(Member::getErpDate, Utils.Date.getStart(pageWrap.getModel().getErpDate()));
+ queryWrapper.lambda().le(Member::getErpDate, Utils.Date.getEnd(pageWrap.getModel().getErpDate()));
+ }
+ if (pageWrap.getModel().getErpStatus() != null) {
+ queryWrapper.lambda().eq(Member::getErpStatus, pageWrap.getModel().getErpStatus());
+ }
+ if (pageWrap.getModel().getDdId() != null) {
+ queryWrapper.lambda().eq(Member::getDdId, pageWrap.getModel().getDdId());
+ }
+ if (pageWrap.getModel().getDdDate() != null) {
+ queryWrapper.lambda().ge(Member::getDdDate, Utils.Date.getStart(pageWrap.getModel().getDdDate()));
+ queryWrapper.lambda().le(Member::getDdDate, Utils.Date.getEnd(pageWrap.getModel().getDdDate()));
+ }
+ if (pageWrap.getModel().getDdStatus() != null) {
+ queryWrapper.lambda().eq(Member::getDdStatus, pageWrap.getModel().getDdStatus());
+ }
+ if (pageWrap.getModel().getPassward() != null) {
+ queryWrapper.lambda().eq(Member::getPassward, pageWrap.getModel().getPassward());
+ }
+ if (pageWrap.getModel().getCanVisit() != null) {
+ queryWrapper.lambda().eq(Member::getCanVisit, pageWrap.getModel().getCanVisit());
+ }
+ if (pageWrap.getModel().getHighCheckor() != null) {
+ queryWrapper.lambda().eq(Member::getHighCheckor, pageWrap.getModel().getHighCheckor());
+ }
+ if (pageWrap.getModel().getRoleId() != null) {
+ queryWrapper.lambda().eq(Member::getRoleId, pageWrap.getModel().getRoleId());
+ }
+ if (pageWrap.getModel().getRoleDate() != null) {
+ queryWrapper.lambda().ge(Member::getRoleDate, Utils.Date.getStart(pageWrap.getModel().getRoleDate()));
+ queryWrapper.lambda().le(Member::getRoleDate, Utils.Date.getEnd(pageWrap.getModel().getRoleDate()));
+ }
+ if (pageWrap.getModel().getErpOrgId() != null) {
+ queryWrapper.lambda().eq(Member::getErpOrgId, pageWrap.getModel().getErpOrgId());
+ }
+ for(PageWrap.SortData sortData: pageWrap.getSorts()) {
+ if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+ queryWrapper.orderByDesc(sortData.getProperty());
+ } else {
+ queryWrapper.orderByAsc(sortData.getProperty());
+ }
+ }
+ return PageData.from(memberMapper.selectPage(page, queryWrapper));
+ }
+
+ @Override
+ public PageData<MemberInfoDTO> findLaborMemberInfoPage(PageWrap<MemberInfoDTO> pageWrap) {
+ IPage<Member> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ MPJLambdaWrapper<Member> queryWrapper = new MPJLambdaWrapper<>();
+ MemberInfoDTO model = pageWrap.getModel();
+ Utils.MP.blankToNull(model);
+ Date end =pageWrap.getModel().getTrainTimeEndTime() !=null? Utils.Date.getEnd(pageWrap.getModel().getTrainTimeEndTime()):new Date();
+ queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
+ /* .leftJoin(TrainTime.class,TrainTime::getMemberId,Member::getId)
+ .leftJoin(Empower.class,Empower::getMemberId,Member::getId);*/
+
+ queryWrapper.selectAll(Member.class)
+ .selectAs(Company::getName,MemberInfoDTO::getCompanyName)
+ .selectAs(Company::getLinkName,MemberInfoDTO::getLinkName)
+ /*.select(" (select Max(tt.END_TIME) from train_time tt where tt.ISDELETED=0 and tt.MEMBER_ID=t.id) as trainTimeEndTime")*/
+ .select(" (select Max(e.END_TIME) from empower e where e.ISDELETED=0 and e.MEMBER_ID=t.id) as empowerEndTime");
+
+ queryWrapper.eq(Member::getType,Constants.ZERO);
+ queryWrapper.eq(Objects.nonNull(model.getCompanyId()),Member::getCompanyId,model.getCompanyId())
+ .like(StringUtils.isNotBlank(model.getName()),Member::getName,model.getName())
+ .like(StringUtils.isNotBlank(model.getPhone()),Member::getPhone,model.getPhone())
+ .like(StringUtils.isNotBlank(model.getIdcardDecode()),Member::getIdcardDecode,model.getIdcardDecode())
+ .having(pageWrap.getModel().getTrainTimeEndTime()!=null,"trainTimeEndTime < "+ DateUtil.format(end,"yyyy-MM-dd HH:mm:ss"));
+ IPage<MemberInfoDTO> memberIPage = memberJoinMapper.selectJoinPage(page, MemberInfoDTO.class,queryWrapper);
+ if (!CollectionUtils.isEmpty(memberIPage.getRecords())){
+ memberIPage.getRecords().forEach(s->s.setSex(IdcardUtil.getGenderByIdCard(s.getIdcardDecode())));
+ }
+ return PageData.from(memberIPage);
+ }
+
+ @Override
+ public long count(Member member) {
+ QueryWrapper<Member> wrapper = new QueryWrapper<Member>(member);
+ wrapper.lambda().like(StringUtils.isNotBlank(member.getRoleIdParam()), Member::getRoleId, member.getRoleIdParam());
+ return memberMapper.selectCount(wrapper);
+ }
+
+ @Override
+ public void importMemberBatch(LaborEmpowerDTO laborEmpowerDTO) {
+ try {
+ ExcelImporter ie = new ExcelImporter(laborEmpowerDTO.getFile(),0,0);
+
+ List<LaborEmpowerDTO.LaborMemberEmpower> dataList = ie.getDataList(LaborEmpowerDTO.LaborMemberEmpower.class,null);
+
+ if (CollectionUtils.isEmpty(dataList)){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏂囦欢鏃犳暟鎹褰�");
+ }
+
+ } catch (Exception e) {
+
+ }
+
+ }
+
+ @Override
+ public PageData<MemberInfoDTO> findMemberInfoPage(PageWrap<MemberQuery> pageWrap) {
+ IPage<Member> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ MPJLambdaWrapper<Member> queryWrapper = new MPJLambdaWrapper<>();
+
+ 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())
+ .and(StringUtils.isNotBlank(pageWrap.getModel().getKeyword()),ms->ms
+ .like(Member::getPhone,pageWrap.getModel().getKeyword())
+ .or().like(Member::getName,pageWrap.getModel().getKeyword())
+ .or().like(Member::getCode,pageWrap.getModel().getKeyword()))
+ .isNull(pageWrap.getModel().getHasFace()!=null&& Constants.equalsInteger(pageWrap.getModel().getHasFace(),Constants.ZERO),Member::getFaceId)
+ .isNotNull(pageWrap.getModel().getHasFace()!=null&& Constants.equalsInteger(pageWrap.getModel().getHasFace(),Constants.ONE),Member::getFaceId)
+ .eq(Objects.nonNull(pageWrap.getModel().getCanVisit()),Member::getCanVisit,pageWrap.getModel().getCanVisit())
+ .eq(Objects.nonNull(pageWrap.getModel().getStatus()),Member::getStatus,pageWrap.getModel().getStatus())
+ .eq(Objects.nonNull(pageWrap.getModel().getHkStatus()),Member::getHkStatus,pageWrap.getModel().getHkStatus())
+ .eq(Objects.isNull(pageWrap.getModel().getIsdeleted()),Member::getIsdeleted,Constants.ZERO)
+ .eq(Objects.nonNull(pageWrap.getModel().getIsdeleted()),Member::getIsdeleted,pageWrap.getModel().getIsdeleted())
+ .like(StringUtils.isNotBlank(pageWrap.getModel().getCompanyName()),Company::getName,pageWrap.getModel().getCompanyName())
+// .eq(Member::getStatus,Constants.Status.ENABLE.getValue())
+ .eq(Member::getType,Constants.memberType.internal)
+ .eq(pageWrap.getModel().getHkStatus()!=null,Member::getHkStatus,pageWrap.getModel().getHkStatus())
+ .orderByDesc(!Constants.equalsObject(pageWrap.getModel().getIsdeleted(),Constants.ONE),Member::getCreateDate)
+ .orderByDesc(Constants.equalsInteger(pageWrap.getModel().getIsdeleted(),Constants.ONE),Member::getEditDate);
+ if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin())==DataSyncConfig.origin.erp){
+ queryWrapper.eq( StringUtils.isNotBlank(pageWrap.getModel().getErpOrgId()),Member::getErpOrgId,pageWrap.getModel().getErpOrgId());
+ }else{
+ queryWrapper.eq(StringUtils.isNotBlank(pageWrap.getModel().getCompanyId()),Member::getCompanyId,pageWrap.getModel().getCompanyId());
+ }
+ IPage<MemberInfoDTO> memberIPage = memberJoinMapper.selectJoinPage(page, MemberInfoDTO.class,queryWrapper);
+
+ if(CollectionUtils.isNotEmpty(memberIPage.getRecords())){
+ //FTP鏂囦欢璁块棶鍓嶇紑
+ String prefixUrl = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode() +
+ systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
+ //闂ㄧ缁勪俊鎭�
+ List<DeviceRole> deviceRoleList = deviceRoleMapper.selectList(new QueryWrapper<DeviceRole>().lambda()
+ .select(DeviceRole::getId,DeviceRole::getName)
+ .eq(DeviceRole::getIsdeleted,Constants.ZERO));
+ for (MemberInfoDTO memberInfoDTO:memberIPage.getRecords()) {
+ //鑾峰緱闂ㄧ缁勫悕绉版暟缁�
+ memberInfoDTO.setRoleNames(this.dealRoleDatas(memberInfoDTO.getRoleId(),deviceRoleList));
+ //鎷兼帴鍓嶇紑
+ if(StringUtils.isNotBlank(memberInfoDTO.getFaceImg())){
+ memberInfoDTO.setFaceImg(prefixUrl + memberInfoDTO.getFaceImg());
+ }
+ if(StringUtils.isNotBlank(memberInfoDTO.getImgurl())){
+ memberInfoDTO.setImgurl(prefixUrl + memberInfoDTO.getImgurl());
+ }
+ }
+ }
+ return PageData.from(memberIPage);
+ }
+
+
+ public List<String> dealRoleDatas(String roleIds,List<DeviceRole> deviceRoleList){
+ List<String> stringList = new ArrayList<>();
+ if(StringUtils.isNotBlank(roleIds)){
+ roleIds = roleIds.replace("[","").replace("]","");
+ List<String> ids = Arrays.asList(roleIds.split(","));
+ ids.forEach(i->{
+// DeviceRole deviceRole = deviceRoleList.stream().filter(m->m.getId().toString().equals(i)).findFirst().get();
+ DeviceRole deviceRole = findRoleById(deviceRoleList,i);
+ if(!Objects.isNull(deviceRole)){
+ stringList.add(deviceRole.getName());
+ }
+ });
+ }
+ return stringList;
+ }
+
+ private DeviceRole findRoleById(List<DeviceRole> deviceRoleList, String id) {
+ for(DeviceRole role : deviceRoleList){
+ if(StringUtils.equals(role.getId().toString(),id)){
+ return role;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public PageData<MemberInfoDTO> findVisitPage(PageWrap<MemberQuery> pageWrap) {
+ IPage<Member> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ MPJLambdaWrapper<Member> queryWrapper = new MPJLambdaWrapper<>();
+ queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
+ queryWrapper.selectAll(Member.class)
+ .selectAs(Company::getName,MemberInfoDTO::getCompanyName)
+ .selectAs(Member::getLastVisitDate,MemberInfoDTO::getVisitsLastDate)
+ .select(" (select count(v.id) from visits v where v.MEMBER_ID=t.id and v.ISDELETED=0 and v.status in (7,8) ) as visitsCount");
+ queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getName()),Member::getName,pageWrap.getModel().getName())
+ .like(StringUtils.isNotBlank(pageWrap.getModel().getPhone()),Member::getPhone,pageWrap.getModel().getPhone())
+ .and(StringUtils.isNotBlank(pageWrap.getModel().getCompanyName()), ms->ms.like(Member::getVisitCompanyName,pageWrap.getModel().getCompanyName())
+ .or().like(Company::getName,pageWrap.getModel().getCompanyName()))
+ .eq(StringUtils.isNotBlank(pageWrap.getModel().getIdcardNo()),Member::getIdcardNo,
+ DESUtil.encrypt(Constants.EDS_PWD, pageWrap.getModel().getIdcardNo())
+ )
+ .eq(Objects.nonNull(pageWrap.getModel().getHkStatus()),Member::getHkStatus,pageWrap.getModel().getHkStatus())
+ .eq(Objects.nonNull(pageWrap.getModel().getStatus()),Member::getStatus,pageWrap.getModel().getStatus())
+ .eq(Member::getType,Constants.memberType.visitor)
+ .eq(Member::getIsdeleted,Constants.ZERO)
+ .orderByDesc(Member::getCreateDate);
+ if(Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin())==DataSyncConfig.origin.erp){
+ queryWrapper.eq( StringUtils.isNotBlank(pageWrap.getModel().getErpOrgId()),Member::getErpOrgId,pageWrap.getModel().getErpOrgId());
+ }else{
+ queryWrapper.eq(StringUtils.isNotBlank(pageWrap.getModel().getCompanyId()),Member::getCompanyId,pageWrap.getModel().getCompanyId());
+ }
+ IPage<MemberInfoDTO> memberIPage = memberJoinMapper.selectJoinPage(page, MemberInfoDTO.class,queryWrapper);
+ return PageData.from(memberIPage);
+
+ }
+
+
+ @Override
+ public PageData<MemberInfoDTO> findUnusualPage(PageWrap<MemberQuery> pageWrap) {
+ IPage<Member> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ MPJLambdaWrapper<Member> queryWrapper = new MPJLambdaWrapper<>();
+ queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
+ queryWrapper.selectAll(Member.class)
+ .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")
+ .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
+ .and(StringUtils.isNotBlank(pageWrap.getModel().getName()),ms->ms.like(Member::getPhone,pageWrap.getModel().getName())
+ .or().like(Member::getName,pageWrap.getModel().getName()))
+ .and(StringUtils.isNotBlank(pageWrap.getModel().getCompanyName()),
+ ms->ms.like(Company::getName,pageWrap.getModel().getCompanyName())
+ .or().like(Member::getVisitCompanyName,pageWrap.getModel().getCompanyName()))
+ .like(StringUtils.isNotBlank(pageWrap.getModel().getIdcardNo()),Member::getIdcardNo,pageWrap.getModel().getIdcardNo())
+ .eq(Member::getStatus,Constants.Status.FREEZE.getValue())
+ .eq(StringUtils.isNotBlank(pageWrap.getModel().getCompanyId()),Company::getId,pageWrap.getModel().getCompanyId())
+ .eq(Objects.nonNull(pageWrap.getModel().getCode()),Member::getCode,pageWrap.getModel().getCode())
+ .orderByDesc(Member::getCreateDate);
+
+
+ IPage<MemberInfoDTO> memberIPage = memberJoinMapper.selectJoinPage(page, MemberInfoDTO.class,queryWrapper);
+ return PageData.from(memberIPage);
+
+ }
+
+
+ /**
+ * 鐢ㄦ埛瑙e喕 娣诲姞鎺堟潈瀵煎叆璁板綍
+ * @param member
+ */
+ public void thawMember(Member member){
+ //鐢ㄦ埛瑙掕壊缁�
+ List<MemberRole> memberRoleList = memberRoleMapper.selectList(new QueryWrapper<MemberRole>().lambda().eq(MemberRole::getMemberId,member.getId()));
+ if(CollectionUtils.isNotEmpty(memberRoleList)){
+ List<Integer> roleIds = memberRoleList.stream().map(m->m.getId()).collect(Collectors.toList());
+ //瑙掕壊缁勮澶囨潈闄�
+ List<DeviceRole> deviceRoleList= deviceRoleMapper.selectList(new QueryWrapper<DeviceRole>().lambda()
+ .eq(DeviceRole::getType,Constants.TWO)
+ .in(DeviceRole::getId,roleIds));
+
+ if(CollectionUtils.isNotEmpty(deviceRoleList)){
+ String ids = "";
+ List<Integer> r = new ArrayList<>();
+ for (int i = 0; i < deviceRoleList.size(); i++) {
+ DeviceRole deviceRole =deviceRoleList.get(i);
+ if(i>0){
+ ids += ",";
+ }
+ Integer id =deviceRole.getId();
+ ids += "["+id+"]";
+ String doorids =deviceRole.getDoorIds();
+ if(StringUtils.isNotBlank(doorids)){
+ String[] ss = doorids.split(",");
+ try {
+ for(String s :ss){
+ r.add(Integer.parseInt(s));
+ }
+ }catch (Exception e){
+ //鑴忔暟鎹笉澶勭悊
+ }
+ }
+ }
+
+ if(CollectionUtils.isNotEmpty(r)){
+ List<Empower> list = new ArrayList<>();
+ List<Device> deviceList = deviceMapper.selectList(new QueryWrapper<Device>().lambda().in(Device::getId,r));
+ if(deviceList == null || deviceList.size() == 0){
+ return;
+ }
+ for (Device deviceRole:deviceList) {
+ Empower model = new Empower();
+ model.setCreateDate(new Date());
+ model.setMemberId(member.getId());
+ model.setIsdeleted(Constants.ZERO);
+ model.setDeviceId(deviceRole.getId());
+ model.setSendStatus(Constants.ZERO);
+ model.setSendType(Constants.ZERO);
+ model.setFailFlag(Constants.ZERO);
+ list.add(model);
+ }
+ //瀵煎叆鏂板鐨勬巿鏉冧俊鎭�
+ empowerMapper.insertBatchSomeColumn(list);
+ }
+ }
+ }
+ }
+
+
+
+ /**
+ * 瀹氭椂鍐荤粨鍐呴儴浜哄憳
+ */
+ @Override
+ public void memberFreeze(){
+ SystemDictData systemDictData = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.TIMEOUT_FREEZE);
+ if(Objects.isNull(systemDictData)||
+ StringUtils.isBlank(systemDictData.getCode())
+ ){
+ return;
+ }
+ List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>()
+ .lambda().eq(Member::getIsdeleted,Constants.ZERO)
+ .eq(Member::getType,Constants.memberType.internal)
+ .eq(Member::getStatus,Constants.ZERO)
+ .isNotNull(Member::getHkId)
+ .exists(" SELECT 1 FROM device_event b WHERE b.ext_event_person_no = HK_ID AND TO_DAYS( NOW()) - TO_DAYS( b.CREATE_DATE ) > "+systemDictData.getCode()+" ")
+ );
+ if(CollectionUtils.isEmpty(memberList)){
+ return;
+ }
+ List<Integer> memberIds = memberList.stream().map(m->m.getId()).collect(Collectors.toList());
+
+ for (Integer id:memberIds) {
+ UserAction userAction=new UserAction();
+ userAction.setIsdeleted(Constants.ZERO);
+ userAction.setCreateDate(new Date());
+ userAction.setType(1);
+ userAction.setRemark("鐢卞畾鏃朵换鍔′簬銆愭搷浣滄椂闂�"+DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss")+"銆戯紝杩涜銆愬喕缁撱��");
+ userAction.setMemberId(id+"");
+ userActionJoinMapper.insert(userAction);
+ }
+
+
+ //鍐荤粨鐘舵��
+ memberMapper.update(null,new UpdateWrapper<Member>()
+ .lambda().set(Member::getStatus,Constants.TWO)
+ .set(Member::getEditDate,new Date())
+ .in(Member::getId,memberIds)
+ );
+ //澶勭悊涓嬪彂鏁版嵁
+ empowerMapper.update(null,new UpdateWrapper<Empower>()
+ .lambda()
+ .set(Empower::getIsdeleted,Constants.ONE)
+ .set(Empower::getSendStatus,Constants.ZERO)
+ .set(Empower::getEditDate,new Date())
+ .in(Empower::getMemberId,memberIds)
+ );
+ }
+
+
+
+
+
+
+
+
+ /********************************************鍏紬鍙锋帴鍙�***********************************************************************/
+
+
+ /**
+ * 寰俊鎺堟潈鎺ュ彛
+ * @param code
+ * @return
+ */
+ @Override
+ public WxAuthorizeVO wxAuthorize(String code){
+ String appId = systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_APPID).getCode();
+ String appSecret = systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_SECRET).getCode();
+ String getTokenUrl = WXConstant.GET_USER_INFO_URL.replace("CODE", code)
+ .replace("APPID", appId).replace("SECRET", appSecret);
+ JSONObject tokenJson = JSONObject.parseObject(HttpsUtil.get(getTokenUrl,true));
+ String openId = null;
+ if(!Objects.isNull(tokenJson.get("access_token"))){
+ openId = tokenJson.getString("openid");
+ }
+ WxAuthorizeVO wxAuthorizeVO = new WxAuthorizeVO();
+ wxAuthorizeVO.setOpenid(openId);
+ //鏍规嵁openId 鏌ヨ鐢ㄦ埛淇℃伅
+ 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)
+ .orderByDesc(Member::getCreateDate)
+ .last(" limit 1 ")
+ );
+ //闈炶瀹㈢敤鎴� 杩涜鍒ゆ柇鏄惁瀛樺湪鐢ㄦ埛
+ 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;
+ }
+
+
+
+
+ @Override
+ public MemberVO getVisitedMember(CheckVisitedDTO checkVisitedDTO){
+ Integer validType = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.BEVISITED_USER_VALID).getCode());
+ if(Objects.isNull(checkVisitedDTO)||StringUtils.isBlank(checkVisitedDTO.getMobile())||(validType.equals(Constants.ONE)&&StringUtils.isBlank(checkVisitedDTO.getName()))){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+ Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
+ .eq(Member::getPhone,checkVisitedDTO.getMobile())
+ .eq(validType.equals(Constants.ONE),Member::getName,checkVisitedDTO.getName())
+ .eq(Member::getIsdeleted,Constants.ZERO)
+// .eq(Member::getStatus,Constants.ZERO)
+ .eq(Member::getCanVisit,Constants.ONE)
+ .eq(Member::getType,Constants.memberType.internal)
+ .last(" limit 1 ")
+ );
+ MemberVO memberVO = new MemberVO();
+ if(!Objects.isNull(member)){
+ if(!member.getStatus().equals(Constants.ZERO)){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"琚浜鸿处鍙峰紓甯革紝璇风‘璁ゅ悗鍐嶈瘯");
+ }
+ BeanUtils.copyProperties(member,memberVO);
+ }else{
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"璇锋牳瀹炶璁夸汉淇℃伅!");
+ }
+ return memberVO;
+ }
+
+
+
+
+ @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;
+ }
+
+
+
+ @Override
+ public StagingDataVO stagingHead(StagingDataVO stagingHeadVO){
+ //浜哄憳淇℃伅
+ List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda().eq(Member::getIsdeleted,Constants.ZERO));
+ if(CollectionUtils.isNotEmpty(memberList)){
+ stagingHeadVO.setWorkerCount(memberList.stream().filter(m->m.getType().equals(Constants.memberType.internal)).count());
+ stagingHeadVO.setLwCount(memberList.stream().filter(m->m.getType().equals(Constants.memberType.lw_visitor)).count());
+ stagingHeadVO.setVisitorCount(memberList.stream().filter(m->m.getType().equals(Constants.memberType.visitor)).count());
+ }
+ //鍦ㄥ満杞﹁締
+ stagingHeadVO.setPresenceCarCount(retentionJoinMapper.selectCount(new QueryWrapper<Retention>().lambda().eq(Retention::getType,3)));
+ //闀挎湡杞﹁締
+ stagingHeadVO.setLongCarCount(retentionJoinMapper.selectCount(new QueryWrapper<Retention>().lambda().eq(Retention::getType,3)
+ .exists(" select 1 from park_book p where p.origin = 0 and p.car_code = retention.car_no and p.ISDELETED = 0 ")
+ ));
+ stagingHeadVO.setVisitorCarCount(stagingHeadVO.getPresenceCarCount() - stagingHeadVO.getLongCarCount());
+ stagingHeadVO.setSupplierCount(companyMapper.selectCount(new QueryWrapper<Company>().lambda()
+ .eq(Company::getIsdeleted,Constants.ZERO)
+ .eq(Company::getType,Constants.ZERO)
+ ));
+ return stagingHeadVO;
+ }
+
+
+ @Override
+ public StagingDataVO stagingBody(StagingDataVO stagingHeadVO){
+ List<Map<String,Object>> companyMaps = memberJoinMapper.selectJoinMaps(
+ new MPJLambdaWrapper<Member>()
+ .select("count(1) as memberCount, t1.name as companyName")
+ .leftJoin(Company.class,Company::getId,Member::getCompanyId)
+ .eq(Member::getType,Constants.memberType.lw_visitor)
+ .groupBy(Company::getId,Company::getName)
+ );
+ List<Map<String,Object>> retentionMaps = retentionJoinMapper.selectMaps(new MPJLambdaWrapper<Retention>()
+ .select(" count(1) as memberCount, type as memberType ")
+ .ne(Retention::getType,3)
+ .groupBy(Retention::getType)
+ );
+ stagingHeadVO.setCompanyUsers(companyMaps);
+ stagingHeadVO.setRetentionUsers(retentionMaps);
+ return stagingHeadVO;
+ }
+
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ProblemsServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ProblemsServiceImpl.java
new file mode 100644
index 0000000..9dcf9b4
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ProblemsServiceImpl.java
@@ -0,0 +1,251 @@
+package com.doumee.service.business.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.doumee.core.model.LoginUserInfo;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.admin.request.OptionsObject;
+import com.doumee.dao.admin.response.ProblemDTO;
+import com.doumee.dao.business.ProblemsMapper;
+import com.doumee.dao.business.model.Member;
+import com.doumee.dao.business.model.Problems;
+import com.doumee.dao.web.response.ProblemsVO;
+import com.doumee.service.business.ProblemsService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.apache.shiro.SecurityUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 璇曢淇℃伅琛⊿ervice瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Service
+public class ProblemsServiceImpl implements ProblemsService {
+
+ @Autowired
+ private ProblemsMapper problemsMapper;
+
+ @Override
+ public Integer create(Problems problems) {
+ LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+ Problems newProblems = new Problems();
+
+ newProblems.setCreator(loginUserInfo.getId());
+ newProblems.setCreateDate(new Date());
+ newProblems.setEditor(loginUserInfo.getId());
+ newProblems.setEditDate(new Date());
+ newProblems.setIsdeleted(Constants.ZERO);
+ newProblems.setRemark(problems.getRemark());
+ newProblems.setTitle(problems.getTitle());
+ if(null != problems.getObjectList() && problems.getObjectList().size() > 0) {
+ newProblems.setOptions(JSON.toJSONString(problems.getObjectList()));
+ }
+ newProblems.setAnswer(problems.getAnswer());
+ newProblems.setSortnu(problems.getSortnu());
+ newProblems.setType(problems.getType());
+ newProblems.setScore(problems.getScore());
+ newProblems.setUseType(problems.getUseType());
+ problemsMapper.insert(newProblems);
+ return newProblems.getId();
+ }
+
+ @Override
+ public void deleteById(Integer id) {
+ problemsMapper.deleteById(id);
+ }
+
+ @Override
+ public void delete(Problems problems) {
+ UpdateWrapper<Problems> deleteWrapper = new UpdateWrapper<>(problems);
+ problemsMapper.delete(deleteWrapper);
+ }
+
+ @Override
+ public void deleteByIdInBatch(List<Integer> ids) {
+ if (CollectionUtils.isEmpty(ids)) {
+ return;
+ }
+ problemsMapper.deleteBatchIds(ids);
+ }
+
+ @Override
+ public void updateById(Problems problems) {
+ LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+ Problems update = new Problems();
+ update.setId(problems.getId());
+ update.setEditor(loginUserInfo.getId());
+ update.setEditDate(new Date());
+ update.setTitle(problems.getTitle());
+ if(null != problems.getObjectList() && problems.getObjectList().size() > 0) {
+ update.setOptions(JSON.toJSONString(problems.getObjectList()));
+ }
+ update.setAnswer(problems.getAnswer());
+ update.setSortnu(problems.getSortnu());
+ update.setType(problems.getType());
+ update.setScore(problems.getScore());
+ update.setUseType(problems.getUseType());
+ problemsMapper.updateById(update);
+ }
+
+ @Override
+ public void updateByIdInBatch(List<Problems> problemss) {
+ if (CollectionUtils.isEmpty(problemss)) {
+ return;
+ }
+ for (Problems problems: problemss) {
+ this.updateById(problems);
+ }
+ }
+
+ @Override
+ public Problems findById(Integer id) {
+ Problems problems = problemsMapper.selectById(id);
+ if(null != problems && StringUtils.isNotBlank(problems.getOptions())) {
+ problems.setObjectList(JSON.parseArray(problems.getOptions(), OptionsObject.class));
+ }
+ return problems;
+ }
+
+ @Override
+ public Problems findOne(Problems problems) {
+ QueryWrapper<Problems> wrapper = new QueryWrapper<>(problems);
+ return problemsMapper.selectOne(wrapper);
+ }
+
+ @Override
+ public List<Problems> findList(Problems problems) {
+ QueryWrapper<Problems> wrapper = new QueryWrapper<>(problems);
+ return problemsMapper.selectList(wrapper);
+ }
+
+ @Override
+ public PageData<Problems> findPage(PageWrap<Problems> pageWrap) {
+ IPage<Problems> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+ QueryWrapper<Problems> queryWrapper = new QueryWrapper<>();
+ Utils.MP.blankToNull(pageWrap.getModel());
+ if (pageWrap.getModel().getId() != null) {
+ queryWrapper.lambda().eq(Problems::getId, pageWrap.getModel().getId());
+ }
+ if (pageWrap.getModel().getCreator() != null) {
+ queryWrapper.lambda().eq(Problems::getCreator, pageWrap.getModel().getCreator());
+ }
+ if (pageWrap.getModel().getCreateDate() != null) {
+ queryWrapper.lambda().ge(Problems::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+ queryWrapper.lambda().le(Problems::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+ }
+ if (pageWrap.getModel().getEditor() != null) {
+ queryWrapper.lambda().eq(Problems::getEditor, pageWrap.getModel().getEditor());
+ }
+ if (pageWrap.getModel().getEditDate() != null) {
+ queryWrapper.lambda().ge(Problems::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+ queryWrapper.lambda().le(Problems::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+ }
+ if (pageWrap.getModel().getIsdeleted() != null) {
+ queryWrapper.lambda().eq(Problems::getIsdeleted, pageWrap.getModel().getIsdeleted());
+ }
+ if (pageWrap.getModel().getRemark() != null) {
+ queryWrapper.lambda().eq(Problems::getRemark, pageWrap.getModel().getRemark());
+ }
+ if (pageWrap.getModel().getTitle() != null) {
+ queryWrapper.lambda().like(Problems::getTitle, pageWrap.getModel().getTitle());
+ }
+ if (pageWrap.getModel().getOptions() != null) {
+ queryWrapper.lambda().eq(Problems::getOptions, pageWrap.getModel().getOptions());
+ }
+ if (pageWrap.getModel().getAnswer() != null) {
+ queryWrapper.lambda().eq(Problems::getAnswer, pageWrap.getModel().getAnswer());
+ }
+ if (pageWrap.getModel().getSortnu() != null) {
+ queryWrapper.lambda().eq(Problems::getSortnu, pageWrap.getModel().getSortnu());
+ }
+ if (pageWrap.getModel().getType() != null) {
+ queryWrapper.lambda().in(Problems::getType, pageWrap.getModel().getType());
+ }
+ if (pageWrap.getModel().getScore() != null) {
+ queryWrapper.lambda().eq(Problems::getScore, pageWrap.getModel().getScore());
+ }
+ if (pageWrap.getModel().getUseType() != null) {
+ queryWrapper.lambda().eq(Problems::getUseType, pageWrap.getModel().getUseType());
+ }
+ queryWrapper.lambda().orderByAsc(Problems::getSortnu);
+ queryWrapper.select("problems.*, (select REALNAME from system_user where system_user.id = problems.CREATOR) as creatorName");
+ IPage<Problems> problemsIPage = problemsMapper.selectPage(page, queryWrapper);
+ if(null != problemsIPage && problemsIPage.getRecords().size() > 0) {
+ List<Problems> newProblems = new ArrayList<>();
+ List<Problems> newDatas = problemsIPage.getRecords();
+ for (Problems dto:newDatas) {
+ dto.setObjectList(JSON.parseArray(dto.getOptions(), OptionsObject.class));
+ newProblems.add(dto);
+ }
+ problemsIPage.setRecords(newProblems);
+ }
+ return PageData.from(problemsIPage);
+ }
+
+ @Override
+ public long count(Problems problems) {
+ QueryWrapper<Problems> wrapper = new QueryWrapper<>(problems);
+ return problemsMapper.selectCount(wrapper);
+ }
+
+ @Override
+ public List<ProblemDTO> findListByUseType(Integer useType) {
+ LambdaQueryWrapper<Problems> wrapper = new LambdaQueryWrapper<>();
+
+ wrapper.eq(Problems::getIsdeleted, Constants.ZERO)
+ .eq(Problems::getUseType, useType)
+ .orderByAsc(Problems::getSortnu);
+ List<Problems> problems = problemsMapper.selectList(wrapper);
+
+ List<ProblemDTO> collect = problems.stream().map(s -> {
+ ProblemDTO dto = new ProblemDTO();
+ BeanUtils.copyProperties(dto, s);
+ return dto;
+ }).collect(Collectors.toList());
+
+ return collect;
+
+ }
+
+
+ /**
+ * 鑾峰彇棰樼洰淇℃伅
+ * @param useType
+ * @return
+ */
+ @Override
+ public List<ProblemsVO> getProblemsVO(Integer useType){
+ List<Problems> problemsList = problemsMapper.selectList(new QueryWrapper<Problems>().lambda()
+ .and(ms->ms.eq(Problems::getUseType,useType).or().eq(Problems::getUseType,Constants.ZERO))
+ .eq(Problems::getIsdeleted, Constants.ZERO).orderByAsc(Problems::getSortnu));
+ List<ProblemsVO> problemsVOList = new ArrayList<>();
+ for (Problems problems:problemsList) {
+ ProblemsVO problemsVO = new ProblemsVO();
+ BeanUtils.copyProperties(problems,problemsVO);
+ problemsVOList.add(problemsVO);
+ }
+ return problemsVOList;
+ }
+
+
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncDeviceServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncDeviceServiceImpl.java
new file mode 100644
index 0000000..0268516
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncDeviceServiceImpl.java
@@ -0,0 +1,419 @@
+package com.doumee.service.business.impl.hksync;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.haikang.model.HKConstants;
+import com.doumee.core.haikang.model.param.BaseListPageResponse;
+import com.doumee.core.haikang.model.param.BaseResponse;
+import com.doumee.core.haikang.model.param.request.AcsDeviceListRequest;
+import com.doumee.core.haikang.model.param.request.AcsDeviceStatusListRequest;
+import com.doumee.core.haikang.model.param.request.DoorsListRequest;
+import com.doumee.core.haikang.model.param.request.ParkListRequest;
+import com.doumee.core.haikang.model.param.respose.*;
+import com.doumee.core.haikang.service.HKService;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.DateUtil;
+import com.doumee.dao.business.DeviceMapper;
+import com.doumee.dao.business.ParksMapper;
+import com.doumee.dao.business.model.Device;
+import com.doumee.dao.business.model.Parks;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 璁惧淇℃伅琛⊿ervice瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Service
+public class HkSyncDeviceServiceImpl extends HkSyncBaseServiceImpl {
+
+ @Autowired
+ private DeviceMapper deviceMapper;
+
+ /**
+ * 鍚屾娴峰悍闂ㄧ璁惧鏁版嵁
+ * @param param
+ * @return
+ */
+ @Override
+// @Async
+ public String syncHkDevices(AcsDeviceListRequest param){
+ if(Constants.DEALING_HK_SYNCDEVICE){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鍚屾浠诲姟姝e湪鎵ц鍝︼紝璇风◢鍚庢煡鐪嬬粨鏋滐紒") ;
+ }
+ Constants.DEALING_HK_SYNCDEVICE =true;
+ try {
+ List<Device> deleteList = new ArrayList<>();
+ List<Device> addList = new ArrayList<>();
+ List<Device> editList = new ArrayList<>();
+ Date date = new Date();
+ //鏌ヨ鍏ㄩ儴闂ㄧ璁惧鏁版嵁
+ List<Device> allList = deviceMapper.selectList(null);
+ List<DoorsInfoResponse> allDoors = getAllDoorList();
+ List<AcsDeviceInfoResponse> allHkList = getAllDeViceList();
+ /**
+ * 鑾峰彇澧炲垹鏀规暟鎹泦鍚�
+ */
+ getDataChangeList(allList,allDoors,allHkList,addList,editList,deleteList,date);
+ if(deleteList.size()>0){
+ //閫昏緫鍒犻櫎
+ for(Device d : deleteList){
+ deviceMapper.updateById(d);
+ }
+ }
+ if(addList.size()>0){
+ deviceMapper.insertBatchSomeColumn(addList);
+ }
+ if(editList.size()>0){
+ for(Device d : editList){
+ deviceMapper.updateById(d);
+ }
+ }
+ return "鍚屾鏁版嵁锛氭柊澧炪��"+addList.size()+"銆戞潯锛屾洿鏂般��"+editList.size()+"銆戞潯锛屽垹闄ゃ��"+deleteList.size()+"銆戞潯";
+ }catch (Exception e){
+ e.printStackTrace();
+ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "鍚屾澶辫触锛�");
+ }finally {
+ Constants.DEALING_HK_SYNCDEVICE =false;
+ }
+ }
+ @Override
+// @Async
+ public void getAscDeviceStatus(){
+ if(Constants.DEALING_HK_SYNCDEVICE_STATUS){
+ return;
+ }
+ Constants.DEALING_HK_SYNCDEVICE_STATUS =true;
+ try {
+ List<Device> editList = new ArrayList<>();
+ Date date = new Date();
+ //鏌ヨ鍏ㄩ儴闂ㄧ璁惧鏁版嵁
+ List<AscDeviceStatusInfoResponse> allHkList = getAllDeviceStatusList();
+
+ if(allHkList.size()>0){
+ //閫昏緫鍒犻櫎
+ for(AscDeviceStatusInfoResponse d : allHkList){
+ deviceMapper.update(null,new UpdateWrapper<Device>().lambda()
+ .set(Device::getOnline,d.getOnline())
+ .set(Device::getIp,d.getIp())
+ .set(Device::getPort,d.getPort())
+ .set(Device::getManufature,d.getManufacturer())
+ .set(Device::getEditDate,date)
+ .eq(Device::getHkId,d.getIndexCode()));
+ }
+ }
+ }catch (Exception e){
+ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "鍚屾璁惧鐘舵�佸け璐ワ紒");
+ }finally {
+ Constants.DEALING_HK_SYNCDEVICE_STATUS =false;
+ }
+ }
+
+ private List<AcsDeviceInfoResponse> getAllDeViceList() {
+ AcsDeviceListRequest param = new AcsDeviceListRequest();
+ List<AcsDeviceInfoResponse> allHkList = new ArrayList<>();
+ boolean hasNext = true;
+ int curTotal = 0;
+ int curPage = 1;
+ while (hasNext){
+ //鍒嗛〉閬嶅巻寰幆鏌ヨ鎵�鏈夐棬绂佽澶囨暟鎹�
+ param = new AcsDeviceListRequest();
+ param.setPageNo(curPage);
+ param.setPageSize(100);
+ BaseResponse<AcsDeviceListResponse> response = HKService.acsDeviceList(param);
+ if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){
+ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵逛笉璧凤紝娴峰悍鍚屾鏁版嵁澶辫触~");
+ }
+ AcsDeviceListResponse r = response.getData();
+ curTotal += 100;
+ if(curTotal >= r.getTotal()){
+ hasNext = false;
+ }
+ if(r.getList() == null || r.getList().size()==0){
+ hasNext =false;
+ }else{
+ allHkList.addAll(r.getList());
+ }
+ curPage++;
+ }
+ return allHkList;
+ }
+
+ public List<DoorsInfoResponse> getAllDoorList(){
+ List<DoorsInfoResponse> allDoorList = new ArrayList<>();
+ Date date = new Date();
+ boolean hasNext = true;
+ int curTotal = 0;
+ int curPage = 1;
+ while (hasNext){
+ //鍒嗛〉閬嶅巻寰幆鏌ヨ鎵�鏈夐棬绂佽澶囨暟鎹�
+ DoorsListRequest param = new DoorsListRequest();
+ param.setPageNo(curPage);
+ param.setPageSize(100);
+ BaseResponse<DoorsListResponse> response = HKService.doorSearch(param);
+ if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){
+ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵逛笉璧凤紝娴峰悍鍚屾鏁版嵁澶辫触~");
+ }
+ DoorsListResponse r = response.getData();
+ curTotal += 100;
+ if(curTotal >= r.getTotal()){
+ hasNext = false;
+ }
+ if(r.getList() == null || r.getList().size()==0){
+ hasNext =false;
+ }else{
+ allDoorList.addAll(r.getList());
+ }
+ curPage++;
+ }
+ return allDoorList;
+ }
+ public List<AscDeviceStatusInfoResponse> getAllDeviceStatusList(){
+ List<AscDeviceStatusInfoResponse> allDoorList = new ArrayList<>();
+ Date date = new Date();
+ boolean hasNext = true;
+ int curTotal = 0;
+ int curPage = 1;
+ while (hasNext){
+ //鍒嗛〉閬嶅巻寰幆鏌ヨ鎵�鏈夐棬绂佽澶囨暟鎹�
+ AcsDeviceStatusListRequest param = new AcsDeviceStatusListRequest();
+ param.setPageNo(curPage);
+ param.setPageSize(100);
+ BaseResponse<BaseListPageResponse<AscDeviceStatusInfoResponse>> response = HKService.acsDeviceStatus(param);
+ if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){
+ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵逛笉璧凤紝娴峰悍鍚屾鏁版嵁澶辫触~");
+ }
+ BaseListPageResponse r = response.getData();
+ curTotal += 100;
+ if(curTotal >= r.getTotal()){
+ hasNext = false;
+ }
+ if(r.getList() == null || r.getList().size()==0){
+ hasNext =false;
+ }else{
+ allDoorList.addAll(r.getList());
+ }
+ curPage++;
+ }
+ return allDoorList;
+ }
+
+ private void getDataChangeList(List<Device> allList, List<DoorsInfoResponse> hkDoorList , List<AcsDeviceInfoResponse> allHkList, List<Device> addList, List<Device> editList,List<Device> deleteList, Date date) {
+ if(hkDoorList!=null && hkDoorList.size()>0){
+ //鑾峰彇娴峰悍鍏ㄩ儴闂ㄧ缁勬暟鎹�
+ for(DoorsInfoResponse device : hkDoorList){
+ Device model = getExistedDoor(device,allList);
+ if(model !=null){
+ //濡傛灉宸插瓨鍦紝鍒欐洿鏂版暟鎹�
+ model = initDoorDataByHkData(model,device,date,allHkList);
+ editList.add(model);
+ }else{
+ //濡傛灉涓嶅瓨鍦紝鍒欐柊澧炴暟鎹�
+ model = new Device();
+ model = initDoorDataByHkData(model,device,date,allHkList);
+ model.setIsEntrance(Constants.ZERO);
+ addList.add(model);
+ }
+ }
+ }
+ //鍒ゆ柇鑾峰彇鍒犻櫎鐨勯棬绂佽澶囷紝閫昏緫鍒犻櫎
+ getDeleteDoorList(allList,hkDoorList,deleteList,date);
+ }
+
+ private Device initDoorDataByHkData(Device model, DoorsInfoResponse door, Date date, List<AcsDeviceInfoResponse> allHkList) {
+ AcsDeviceInfoResponse device = getDeviceByDoorid(door.getParentIndexCode(),allHkList);
+ model.setIsdeleted(Constants.ZERO);
+ model.setIp(device.getIp());
+ model.setHkDate(date);
+ model.setCreateDate(DateUtil.getISO8601DateByStr(device.getCreateTime()));
+ model.setEditDate(DateUtil.getISO8601DateByStr(device.getUpdateTime()));
+ model.setNo(device.getDevSerialNum());
+ model.setHkId(device.getIndexCode());
+ model.setName(device.getName());
+ model.setHkStatus(Constants.ONE);
+ model.setManufature(device.getManufacturer());
+ model.setType(Constants.ZERO);
+// model.setNo(device.getDevSerialNum());
+// model.setChannelNo(getChannelNo(device.getIndexCode(),hkDoorList,model));
+ model.setChannelNo(door.getChannelNo());
+ model.setChannelInfo(door.getName());
+ model.setResourceType(device.getResourceType());
+ model.setDevTypeCode(device.getDevTypeCode());
+ model.setDevTypeDesc(device.getDevTypeDesc());
+ model.setManufature(device.getManufacturer());
+ model.setPort(device.getPort());
+ model.setRemark(JSONObject.toJSONString(device));
+ model.setDoorId(door.getIndexCode());
+ model.setDoorName(door.getName());
+ model.setRegionName(door.getRegionName());
+ model.setRegionPathName(door.getRegionPathName());
+ model.setDoorNo(door.getDoorNo());
+ return model;
+ }
+ private AcsDeviceInfoResponse getDeviceByDoorid(String indexCode, List<AcsDeviceInfoResponse> allHkList ) {
+ if(allHkList!=null && allHkList.size()>0){
+ for(AcsDeviceInfoResponse info : allHkList){
+ if(StringUtils.equals(indexCode,info.getIndexCode())){
+ return info;
+ }
+ }
+ }
+
+ return new AcsDeviceInfoResponse();
+ }
+ private void getDataChangeList(List<Device> allList, List<AcsDeviceInfoResponse> allHkList, List<Device> addList, List<Device> editList,List<Device> deleteList, Date date) {
+ if(allHkList!=null && allHkList.size()>0){
+ //鑾峰彇娴峰悍鍏ㄩ儴闂ㄧ缁勬暟鎹�
+ List<DoorsInfoResponse> hkDoorList = getAllDoorList();
+ for(AcsDeviceInfoResponse device : allHkList){
+ Device model = getExistedDevice(device,allList);
+ if(model !=null){
+ //濡傛灉宸插瓨鍦紝鍒欐洿鏂版暟鎹�
+ model = initDataByHkData(model,device,date,hkDoorList);
+ editList.add(model);
+ }else{
+ //濡傛灉涓嶅瓨鍦紝鍒欐柊澧炴暟鎹�
+ model = new Device();
+ model = initDataByHkData(model,device,date,hkDoorList);
+ addList.add(model);
+ }
+ }
+ }
+ //鍒ゆ柇鑾峰彇鍒犻櫎鐨勯棬绂佽澶囷紝閫昏緫鍒犻櫎
+ getDeleteList(allList,allHkList,deleteList,date);
+ }
+
+ /**
+ * 鍒濆鍖栨捣搴峰叆搴撴暟鎹�
+ * @param model
+ * @param device
+ * @param date
+ * @return
+ */
+ private Device initDataByHkData(Device model, AcsDeviceInfoResponse device,Date date, List<DoorsInfoResponse> hkDoorList) {
+ model.setIsdeleted(Constants.ZERO);
+ model.setIp(device.getIp());
+ model.setHkDate(date);
+ model.setCreateDate(DateUtil.getISO8601DateByStr(device.getCreateTime()));
+ model.setEditDate(DateUtil.getISO8601DateByStr(device.getUpdateTime()));
+ model.setNo(device.getDevSerialNum());
+ model.setHkId(device.getIndexCode());
+ model.setName(device.getName());
+ model.setHkStatus(Constants.ONE);
+ model.setManufature(device.getManufacturer());
+ model.setType(Constants.ZERO);
+// model.setNo(device.getDevSerialNum());
+ model.setChannelNo(getChannelNo(device.getIndexCode(),hkDoorList,model));
+ model.setResourceType(device.getResourceType());
+ model.setDevTypeCode(device.getDevTypeCode());
+ model.setDevTypeDesc(device.getDevTypeDesc());
+ model.setManufature(device.getManufacturer());
+ model.setPort(device.getPort());
+ model.setRemark(JSONObject.toJSONString(device));
+ return model;
+ }
+
+ private String getChannelNo(String indexCode, List<DoorsInfoResponse> hkDoorList,Device model ) {
+ String str = "";
+ String names = "";
+ if(hkDoorList!=null && hkDoorList.size()>0){
+ for(DoorsInfoResponse info : hkDoorList){
+ if(StringUtils.equals(indexCode,info.getParentIndexCode())){
+ if(StringUtils.isBlank(info.getChannelNo())){
+ continue;
+ }
+ if(StringUtils.isNotBlank(str)){
+ str += ",";
+ names += ",";
+ }
+ str+=info.getChannelNo();
+ names+=info.getName();
+ }
+ }
+ }
+ model.setChannelNo(str);
+ model.setChannelInfo(names);
+ return str;
+ }
+
+ private Device getExistedDoor(DoorsInfoResponse device, List<Device> allList) {
+ if(allList.size()>0){
+ for(Device r : allList){
+ if(StringUtils.equals(r.getDoorId(), device.getIndexCode())){
+ //琛ㄧず鏈垹闄�
+ return r;
+ }
+ }
+ }
+ return null;
+ }
+ private Device getExistedDevice(AcsDeviceInfoResponse device, List<Device> allList) {
+ if(allList.size()>0){
+ for(Device r : allList){
+ if(StringUtils.equals(r.getHkId(), device.getIndexCode())){
+ //琛ㄧず鏈垹闄�
+ return r;
+ }
+ }
+ }
+ return null;
+ }
+
+ private void getDeleteList(List<Device> allList, List<AcsDeviceInfoResponse> allHkList,List<Device> deleteList ,Date date) {
+ if(allList!=null && allList.size()>0){
+ for(Device device : allList){
+ if(isDeletedDevice(device,allHkList)){
+ device.setIsdeleted(Constants.ONE);
+ device.setEditDate(date);
+ deleteList.add(device);
+ }
+ }
+ }
+ }
+ private void getDeleteDoorList(List<Device> allList, List<DoorsInfoResponse> allHkList,List<Device> deleteList ,Date date) {
+ if(allList!=null && allList.size()>0){
+ for(Device device : allList){
+ if(isDeletedDoorDevice(device,allHkList)){
+ device.setIsdeleted(Constants.ONE);
+ device.setEditDate(date);
+ deleteList.add(device);
+ }
+ }
+ }
+ }
+
+ private boolean isDeletedDoorDevice(Device device, List<DoorsInfoResponse> allHkList) {
+ if(allHkList.size()>0){
+ for(DoorsInfoResponse r : allHkList){
+ if(StringUtils.equals(device.getDoorId(), r.getIndexCode())){
+ //琛ㄧず鏈垹闄�
+ return false;
+ }
+ }
+ }
+ return true;
+
+ }
+ private boolean isDeletedDevice(Device device, List<AcsDeviceInfoResponse> allHkList) {
+ if(allHkList.size()>0){
+ for(AcsDeviceInfoResponse r : allHkList){
+ if(StringUtils.equals(device.getHkId(), r.getIndexCode())){
+ //琛ㄧず鏈垹闄�
+ return false;
+ }
+ }
+ }
+ return true;
+
+ }
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncImgServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncImgServiceImpl.java
new file mode 100644
index 0000000..00fbb5a
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncImgServiceImpl.java
@@ -0,0 +1,292 @@
+package com.doumee.service.business.impl.hksync;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.config.DataSyncConfig;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.haikang.model.HKConstants;
+import com.doumee.core.haikang.model.param.BaseResponse;
+import com.doumee.core.haikang.model.param.request.*;
+import com.doumee.core.haikang.model.param.respose.AcsDeviceInfoResponse;
+import com.doumee.core.haikang.model.param.respose.AcsDeviceListResponse;
+import com.doumee.core.haikang.service.HKService;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.DateUtil;
+import com.doumee.core.utils.FtpUtil;
+import com.doumee.dao.business.*;
+import com.doumee.dao.business.model.*;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.io.*;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * 璁惧淇℃伅琛⊿ervice瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Service
+@Slf4j
+public class HkSyncImgServiceImpl extends HkSyncBaseServiceImpl {
+
+ @Autowired
+ private CarEventMapper carEventMapper;
+ @Autowired
+ private MemberMapper memberMapper;
+ @Autowired
+ private DeviceEventMapper deviceEventMapper;
+ @Autowired
+ private VisitEventMapper visitEventMapper;
+ @Autowired
+ private SystemDictDataBiz systemDictDataBiz;
+ @Override
+ public String downHKImgs(int type){
+ if(Constants.DEALING_HK_IMG){
+ return null ;
+ }
+ Constants.DEALING_HK_IMG =true;
+ try {
+ //鏌ヨ鎵�鏈夎瀹簨浠惰褰曚腑鎵�鏈変笅杞界殑娴峰悍绔� 鎶撴媿鐓х墖 鍜� 鐓х墖
+ startDealVisitImg();
+ //鏌ヨ鎵�鏈夊仠杞﹀満浜嬩欢璁板綍涓墍鏈変笅杞界殑娴峰悍绔� 杞︾墝鍥剧墖 鍜� 杞﹁締鍥剧墖
+ startDealCarImg();
+ //鏌ヨ鎵�鏈夐棬绂佷簨浠惰褰曚腑鎵�鏈変笅杞界殑娴峰悍绔� 鎶撴媿鐓х墖 鍜� 韬唤璇佸浘鐗嘦RL
+ startDealDeviceImg();
+ //鏌ヨ鎵�鏈変汉鍛樹汉鑴哥収鐗�
+ startDealMemberImg();
+ }catch (Exception e){
+ e.printStackTrace();
+ }finally {
+ Constants.DEALING_HK_IMG =false;
+ }
+ return null;
+ }
+
+ private void startDealMemberImg() {
+ List<Member> list = memberMapper.selectList(new QueryWrapper<Member>().lambda()
+ .eq(Member::getIsdeleted,Constants.ZERO)
+ .likeRight(Member::getFaceImg,HKConstants.IMG_INDEX));
+ Date date= new Date();
+ if(list !=null && list.size()>0){
+ for(Member model:list){
+ String serverIndex = model.getFaceServerIndexCode();//鏈嶅姟鍣ㄧ紪鐮�
+ if(StringUtils.isBlank(serverIndex)){
+ continue;
+ }
+ String rs1 = null;
+ Member event = new Member();
+ event.setId(model.getId());
+ event.setEditDate(date);
+ if(StringUtils.isNotBlank(model.getFaceImg())){
+ String img1 = model.getFaceImg().replace(HKConstants.IMG_INDEX_ERROR, "").replace(HKConstants.IMG_INDEX, "");
+ rs1 = downHkImgToFtp(img1,serverIndex,Constants.MEMBER_IMG);
+ if(StringUtils.isNotBlank(rs1)){
+ event.setFaceImg(rs1);
+ }else{
+ event.setFaceImg(model.getFaceImg().replace(HKConstants.IMG_INDEX, HKConstants.IMG_INDEX_ERROR));
+ }
+ }
+ memberMapper.updateById(event);
+ }
+ }
+
+ }
+ private void startDealDeviceImg() {
+ List<DeviceEvent> deviceEventList = deviceEventMapper.selectList(new QueryWrapper<DeviceEvent>().lambda()
+ .eq(DeviceEvent::getIsdeleted,Constants.ZERO)
+ .and(wrapper ->{wrapper.likeRight(DeviceEvent::getExtEventPictureURL,HKConstants.IMG_INDEX)
+ .or()
+ .likeRight(DeviceEvent::getExtEventIDCardPictureURL,HKConstants.IMG_INDEX) ;}));
+ Date date= new Date();
+ if(deviceEventList !=null && deviceEventList.size()>0){
+ for(DeviceEvent model:deviceEventList){
+ String serverIndex = model.getSvrIndexCode();//鏈嶅姟鍣ㄧ紪鐮�
+ if(StringUtils.isBlank(serverIndex)){
+ continue;
+ }
+ String rs1 = null;
+ String rs2 = null;
+ DeviceEvent event = new DeviceEvent();
+ event.setId(model.getId());
+ event.setEditDate(date);
+
+ if(StringUtils.isNotBlank(model.getExtEventPictureURL())){
+ String img1 = model.getExtEventPictureURL().replace(HKConstants.IMG_INDEX_ERROR, "").replace(HKConstants.IMG_INDEX, "");
+ rs1 = downHkImgToFtp(img1,serverIndex,Constants.DEVICE_EVENT_IMG);
+ if(StringUtils.isNotBlank(rs1)){
+ event.setExtEventPictureURL(rs1);
+ }else{
+ event.setExtEventPictureURL(model.getExtEventPictureURL().replace(HKConstants.IMG_INDEX, HKConstants.IMG_INDEX_ERROR));
+ }
+ }
+ if(StringUtils.isNotBlank(model.getExtEventIDCardPictureURL())){
+ String img2 = model.getExtEventIDCardPictureURL().replace(HKConstants.IMG_INDEX_ERROR, "").replace(HKConstants.IMG_INDEX, "");
+ rs2 = downHkImgToFtp(img2,serverIndex,Constants.DEVICE_EVENT_IMG);
+
+ if(StringUtils.isNotBlank(rs2)){
+ event.setExtEventIDCardPictureURL(rs2);
+ }else{
+ event.setExtEventIDCardPictureURL(model.getExtEventIDCardPictureURL().replace(HKConstants.IMG_INDEX, HKConstants.IMG_INDEX_ERROR));
+ }
+ }
+ deviceEventMapper.updateById(event);
+ }
+ }
+
+ }
+
+ private void startDealCarImg() {
+ List<CarEvent> carEventList = carEventMapper.selectList(new QueryWrapper<CarEvent>().lambda()
+ .eq(CarEvent::getIsdeleted,Constants.ZERO)
+ .and(wrapper ->{wrapper.likeRight(CarEvent::getPlatePicUrl,HKConstants.IMG_INDEX)
+ .or()
+ .likeRight(CarEvent::getVehiclePicUrl,HKConstants.IMG_INDEX) ;}));
+ Date date= new Date();
+ if(carEventList !=null && carEventList.size()>0){
+ for(CarEvent model:carEventList){
+ String serverIndex = model.getSvrIndex();//鏈嶅姟鍣ㄧ紪鐮�
+ if(StringUtils.isBlank(serverIndex)){
+ continue;
+ }
+ CarEvent event = new CarEvent();
+ event.setId(model.getId());
+ event.setEditDate(date);
+ String rs1 = null;
+ String rs2 = null;
+
+ if(StringUtils.isNotBlank(model.getPlatePicUrl())){
+ String img1 = model.getPlatePicUrl().replace(HKConstants.IMG_INDEX_ERROR, "").replace(HKConstants.IMG_INDEX, "");
+ rs1 = downHkImgToFtp(img1,serverIndex,Constants.CAR_EVENT_IMG);
+ if(StringUtils.isNotBlank(rs1)){
+ event.setPlatePicUrl(rs1);
+ }else{
+ event.setPlatePicUrl(model.getPlatePicUrl().replace(HKConstants.IMG_INDEX, HKConstants.IMG_INDEX_ERROR));
+ }
+ }
+ if(StringUtils.isNotBlank(model.getVehiclePicUrl())){
+ String img2 = model.getVehiclePicUrl().replace(HKConstants.IMG_INDEX_ERROR, "").replace(HKConstants.IMG_INDEX, "");
+ rs2 = downHkImgToFtp(img2,serverIndex,Constants.CAR_EVENT_IMG);
+ if(StringUtils.isNotBlank(rs2)){
+ event.setVehiclePicUrl(rs2);
+ }else{
+ event.setVehiclePicUrl(model.getVehiclePicUrl().replace(HKConstants.IMG_INDEX, HKConstants.IMG_INDEX_ERROR));
+ }
+ }
+
+ carEventMapper.updateById(event);
+ }
+ }
+
+ }
+
+ private void startDealVisitImg() {
+ List<VisitEvent> visitEventList = visitEventMapper.selectList(new QueryWrapper<VisitEvent>().lambda()
+ .eq(VisitEvent::getIsdeleted,Constants.ZERO)
+ .and(wrapper ->{wrapper.likeRight(VisitEvent::getCaptureUrl,HKConstants.IMG_INDEX)
+ .or()
+ .likeRight(VisitEvent::getPhotoUrl,HKConstants.IMG_INDEX) ;}));
+
+ Date date= new Date();
+ if(visitEventList !=null && visitEventList.size()>0){
+ for(VisitEvent model:visitEventList){
+ String serverIndex = model.getSvrIndexCode();//鏈嶅姟鍣ㄧ紪鐮�
+ if(StringUtils.isBlank(serverIndex)){
+ continue;
+ }
+ VisitEvent event = new VisitEvent();
+ event.setId(model.getId());
+ event.setEditDate(date);
+ String rs1 = null;
+ String rs2 = null;
+ if(StringUtils.isNotBlank(model.getCaptureUrl())){
+ String img1 = model.getCaptureUrl().replace(HKConstants.IMG_INDEX_ERROR, "").replace(HKConstants.IMG_INDEX, "");
+ rs1 = downHkImgToFtp(img1,serverIndex,Constants.VISIT_EVENT_IMG);
+ if(StringUtils.isNotBlank(rs1)){
+ event.setCaptureUrl(rs1);
+ }else{
+ event.setCaptureUrl(model.getCaptureUrl().replace(HKConstants.IMG_INDEX, HKConstants.IMG_INDEX_ERROR));
+ }
+ }
+ if(StringUtils.isNotBlank(model.getPhotoUrl())){
+ String img2 = model.getPhotoUrl().replace(HKConstants.IMG_INDEX_ERROR, "").replace(HKConstants.IMG_INDEX, "");
+ rs2 = downHkImgToFtp(img2,serverIndex,Constants.VISIT_EVENT_IMG);
+ if(StringUtils.isNotBlank(rs2)){
+ event.setPhotoUrl(rs2);
+ }else{
+ event.setPhotoUrl(model.getPhotoUrl().replace(HKConstants.IMG_INDEX, HKConstants.IMG_INDEX_ERROR));
+ }
+ }
+
+ visitEventMapper.updateById(event);
+ }
+ }
+
+ }
+
+ public static FtpUtil ftp = null;
+ private String downHkImgToFtp(String img1, String serverIndex, String folder_code) {
+ String folder = systemDictDataBiz.queryByCode(Constants.FTP,folder_code).getCode();
+ InputStream is = null;
+ if(StringUtils.equals(folder_code,Constants.CAR_EVENT_IMG)){
+ //鍋滆溅鍦烘姄鎷嶅浘
+ CarPictureRequest param = new CarPictureRequest();
+ param.setPicUri(img1.replace(HKConstants.IMG_INDEX_ERROR,"").replace(HKConstants.IMG_INDEX,""));
+ param.setAswSyscode(serverIndex);
+ is = HKService.getCarPicture(param);
+ }else if(StringUtils.equals(folder_code,Constants.DEVICE_EVENT_IMG)){
+ //闂ㄧ浜嬩欢鍥剧墖
+ DevicePictureRequest param = new DevicePictureRequest();
+ param.setPicUri(img1.replace(HKConstants.IMG_INDEX_ERROR,"").replace(HKConstants.IMG_INDEX,""));
+ param.setSvrIndexCode(serverIndex);
+ is = HKService.getDevicePicture(param);
+ }else if(StringUtils.equals(folder_code,Constants.VISIT_EVENT_IMG)){
+ //璁垮浜嬩欢鍥剧墖
+ VisitPictureRequest param = new VisitPictureRequest();
+ param.setPicUri(img1.replace(HKConstants.IMG_INDEX_ERROR,"").replace(HKConstants.IMG_INDEX,""));
+ param.setSvrIndexCode(serverIndex);
+ is = HKService.getVisitPicture(param);
+ }else if(StringUtils.equals(folder_code,Constants.MEMBER_IMG)){
+ //璁垮浜嬩欢鍥剧墖
+ FacePictureRequest param = new FacePictureRequest();
+ param.setPicUri(img1.replace(HKConstants.IMG_INDEX_ERROR,"").replace(HKConstants.IMG_INDEX,""));
+ param.setServerIndexCode(serverIndex);
+ is = HKService.getFaceInputStream(param);
+ }
+ if(is ==null){
+ return null;
+ }
+
+ try {
+ if(ftp == null){
+ ftp = new FtpUtil(systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_HOST).getCode(),
+ Integer.parseInt(systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_PORT).getCode()),
+ systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_USERNAME).getCode(),
+ systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_PWD).getCode());
+ }else{
+ ftp.connect();
+ }
+ String date = DateUtil.getNowShortDate();
+ String fName = date+"/"+ UUID.randomUUID().toString()+".png";
+ String fileName = folder+fName;
+ boolean r = ftp.uploadInputstream(is,fileName);//涓婁紶
+ if(r){
+ log.info("銆愭捣搴峰浘鐗囦笅杞戒笂浼燜TP鎴愬姛銆�======================" );
+ return fName;
+ }else{
+ log.error("銆愭捣搴峰浘鐗囦笅杞戒笂浼燜TP澶辫触銆�======================" );
+ }
+ } catch (Exception e) {
+ log.error("銆愭捣搴峰浘鐗囦笅杞戒笂浼燜TP澶辫触銆�======================"+e.getMessage());
+ }
+ return null;
+ }
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncInitConfigServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncInitConfigServiceImpl.java
new file mode 100644
index 0000000..4fe3c6e
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncInitConfigServiceImpl.java
@@ -0,0 +1,37 @@
+package com.doumee.service.business.impl.hksync;
+
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.haikang.model.HKConstants;
+import com.doumee.core.haikang.model.HKTools;
+import com.doumee.core.utils.Constants;
+import com.doumee.service.business.InterfaceLogService;
+import com.hikvision.artemis.sdk.config.ArtemisConfig;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * 娴峰悍浜嬩欢璁㈤槄琛⊿ervice瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Service
+public class HkSyncInitConfigServiceImpl extends HkSyncBaseServiceImpl {
+
+ @Autowired
+ private SystemDictDataBiz systemDictDataBiz;
+ @Autowired
+ private InterfaceLogService interfaceLogService;
+
+ @PostConstruct
+ public int initHkConfig(){
+ ArtemisConfig.host = systemDictDataBiz.queryByCode(Constants.HK_PARAM, Constants.HK_HOST).getCode();
+ ArtemisConfig.appKey = systemDictDataBiz.queryByCode(Constants.HK_PARAM, Constants.HK_APPKEY).getCode();
+ ArtemisConfig.appSecret = systemDictDataBiz.queryByCode(Constants.HK_PARAM, Constants.HK_APPSECRET).getCode();
+ HKConstants.https = systemDictDataBiz.queryByCode(Constants.HK_PARAM, Constants.HK_HTTPS).getCode();
+ HKTools.interfaceLogService=interfaceLogService;
+ return 0;
+ }
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncOrgUserFromHKServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncOrgUserFromHKServiceImpl.java
new file mode 100644
index 0000000..e598615
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncOrgUserFromHKServiceImpl.java
@@ -0,0 +1,279 @@
+package com.doumee.service.business.impl.hksync.fhk;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.config.DataSyncConfig;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.haikang.model.HKConstants;
+import com.doumee.core.haikang.model.param.BaseListPageResponse;
+import com.doumee.core.haikang.model.param.BaseResponse;
+import com.doumee.core.haikang.model.param.request.*;
+import com.doumee.core.haikang.model.param.respose.*;
+import com.doumee.core.haikang.service.HKService;
+import com.doumee.core.model.LoginUserInfo;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.DESUtil;
+import com.doumee.core.utils.DateUtil;
+import com.doumee.dao.business.*;
+import com.doumee.dao.business.model.*;
+import com.doumee.service.business.impl.hksync.HkSyncBaseServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.SecurityUtils;
+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;
+
+import java.util.*;
+
+/**
+ * 娴峰悍缁勭粐浜哄憳閫氳繃姝ervice瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Service
+@Slf4j
+public class HkSyncOrgUserFromHKServiceImpl extends HkSyncBaseServiceImpl {
+ @Autowired
+ private CompanyMapper companyMapper;
+ @Autowired
+ private MemberMapper memberMapper;
+
+ @Autowired
+ private DataSyncConfig dataSyncConfig;
+ @Autowired
+ private SystemDictDataBiz systemDictDataBiz;
+
+ @Autowired
+ private RedisTemplate<String, Object> redisTemplate;
+
+ /**
+ * 鍚屾娴峰悍缁勭粐淇℃伅鍒颁笟鍔$郴缁�
+ */
+ @Override
+ @Transactional
+ public void syncOrgData(){
+ if(Constants.DEALING_HK_ORG){
+ return ;
+ }
+ Constants.DEALING_HK_ORG =true;
+ try {
+ if( Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) != DataSyncConfig.origin.hk){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝褰撳墠涓嶆敮鎸佺粍缁囧悓姝ユ搷浣渵");
+ }
+ LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+ TimeRangeListRequest param = new TimeRangeListRequest();
+ //鑾峰彇ERP缁勭粐淇℃伅锛堝叏閲忓悓姝ワ級
+ boolean hasNext = true;
+ int curTotal = 0;
+ int curPage = 1;
+
+ List<Company> allHkList = new ArrayList<>();
+ while (hasNext){
+ //鍒嗛〉閬嶅巻寰幆鏌ヨ鎵�鏈夐棬绂佽澶囨暟鎹�
+ param = new TimeRangeListRequest();
+ param.setPageNo(curPage);
+ param.setPageSize(100);
+ BaseResponse<BaseListPageResponse<OrgInfoResponse>> response = HKService.orgAllList(param);
+ if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){
+ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵逛笉璧凤紝娴峰悍鍚屾鏁版嵁澶辫触~");
+ }
+ if(response.getData() == null || response.getData().getTotal() ==0){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈悓姝ュ埌浠讳綍淇℃伅锛�");
+ }
+ BaseListPageResponse<OrgInfoResponse> r = response.getData();
+ curTotal += 100;
+ if(curTotal >= r.getTotal()){
+ hasNext = false;
+ }
+ if(r.getList() == null || r.getList().size()==0){
+ hasNext =false;
+ }else{
+ allHkList.addAll(getNewOrgModelBYList(r.getList(),user.getId()));
+ }
+ curPage++;
+ }
+ if(allHkList .size() == 0){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈悓姝ュ埌浠讳綍缁勭粐淇℃伅锛�");
+ }
+ companyMapper.delete(new UpdateWrapper<>());//娓呯┖鍘熸湁鏁版嵁
+ companyMapper.insertBatchSomeColumn(allHkList);//鎻掑叆鏂版暟鎹�
+ }catch (BusinessException e){
+ throw e;
+ }catch (Exception e){
+ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵逛笉璧凤紝娴峰悍鍚屾鏁版嵁澶辫触~");
+ }finally {
+ Constants.DEALING_HK_ORG =false;
+ }
+ }
+
+ private List<Company> getNewOrgModelBYList(List<OrgInfoResponse> list, Integer userid) {
+ List<Company> newList = new ArrayList<>();
+ if(list == null || list.size()==0){
+ return newList;
+ }
+ for(OrgInfoResponse model :list){
+ Company c = new Company();
+ c.setHkId(model.getOrgIndexCode());
+ c.setCode(model.getOrgNo());
+ c.setName(model.getOrgName());
+ c.setHkStatus(Constants.ONE);
+ c.setHkDate(new Date());
+ c.setIsdeleted(Constants.ZERO);
+ c.setCreateDate(c.getHkDate());
+ c.setEditDate(DateUtil.getISO8601DateByStr(model.getUpdateTime()));
+ c.setCreator(userid);
+ c.setStatus(Constants.ZERO);
+ c.setType(Constants.ONE);
+ if(!StringUtils.equals(model.getOrgIndexCode(),systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.HK_ROOTORG_CODE).getCode())){
+ c.setHkParentId(model.getParentOrgIndexCode());
+ }
+ newList.add(c);
+ }
+ return newList;
+ }
+
+ /**
+ * 鍚屾娴峰悍浜哄憳淇℃伅
+ * @return
+ */
+ @Override
+ public void syncUserData(){
+ if(Constants.DEALING_HK_USER){
+ return ;
+ }
+ Constants.DEALING_HK_USER =true;
+ try {
+ if( Constants.formatIntegerNum(dataSyncConfig.getOrgUserDataOrigin()) != DataSyncConfig.origin.hk){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝褰撳墠涓嶆敮鎸佺粍缁囧悓姝ユ搷浣渵");
+ }
+ LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+ List<Company> companies = companyMapper.selectList(new QueryWrapper<>());
+ if(companies == null || companies.size() == 0){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝璇峰厛鍚屾浼佷笟缁勭粐淇℃伅~");
+ }
+ TimeRangeListRequest param = new TimeRangeListRequest();
+ //鑾峰彇ERP缁勭粐淇℃伅锛堝叏閲忓悓姝ワ級
+ boolean hasNext = true;
+ int curTotal = 0;
+ int curPage = 1;
+ List<Member> allHkList = new ArrayList<>();
+ while (hasNext){
+ //鍒嗛〉閬嶅巻寰幆鏌ヨ鎵�鏈夐棬绂佽澶囨暟鎹�
+ param = new TimeRangeListRequest();
+ param.setPageNo(curPage);
+ param.setPageSize(100);
+ BaseResponse<BaseListPageResponse<UserInfoResponse>> response = HKService.userAllList(param);
+ if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){
+ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵逛笉璧凤紝娴峰悍鍚屾鏁版嵁澶辫触~");
+ }
+ if(response.getData() == null || response.getData().getTotal() ==0){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈悓姝ュ埌浠讳綍淇℃伅锛�");
+ }
+ BaseListPageResponse<UserInfoResponse> r = response.getData();
+ curTotal += 100;
+ if(curTotal >= r.getTotal()){
+ hasNext = false;
+ }
+ if(r.getList() == null || r.getList().size()==0){
+ hasNext =false;
+ }else{
+ allHkList.addAll(getNewUserModelBYList(r.getList(),companies,user.getId()));
+ }
+ curPage++;
+ }
+ if(allHkList .size() == 0){
+ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈悓姝ュ埌浠讳綍缁勭粐淇℃伅锛�");
+ }
+ memberMapper.delete(new UpdateWrapper<>());//娓呯┖鍘熸湁鏁版嵁
+ memberMapper.insertBatchSomeColumn(allHkList);//鎻掑叆鏂版暟鎹�
+ }catch (BusinessException e){
+ throw e;
+ }catch (Exception e){
+ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵逛笉璧凤紝娴峰悍鍚屾鏁版嵁澶辫触~");
+ }finally {
+ Constants.DEALING_HK_USER =false;
+ }
+ }
+
+
+ private List<Member> getNewUserModelBYList(List<UserInfoResponse> list, List<Company> companies,Integer userid) {
+ List<Member> newList = new ArrayList<>();
+ if(list == null || list.size()==0){
+ return newList;
+ }
+ for(UserInfoResponse model :list){
+ Member c = new Member();
+ String encryptIdNo = DESUtil.encrypt(Constants.EDS_PWD,model.getCertificateNo());
+ c.setIdcardNo(encryptIdNo);
+ c.setIdcardDecode(Constants.getTuominStr(model.getCertificateNo()));
+ c.setIdcardType(getIdcardTypeByHk(model.getCertificateType()));
+ c.setCode(model.getJobNo());
+ c.setPhone(model.getPhoneNo());
+ c.setHkId(model.getPersonId());
+ c.setName(model.getPersonName());
+ c.setHkStatus(Constants.ONE);
+ c.setHkDate(new Date());
+ c.setCanVisit(Constants.ZERO);
+ c.setHighCheckor(Constants.ZERO);
+ c.setSex(model.getGender());
+ c.setIsdeleted(Constants.ZERO);
+ c.setCreateDate(c.getHkDate());
+ c.setEditDate(DateUtil.getISO8601DateByStr(model.getUpdateTime()));
+ c.setCreator(userid);
+ c.setStatus(Constants.ZERO);
+ c.setType(Constants.TWO);
+ c.setCompanyId(getCompanyId(companies,model.getOrgIndexCode()));
+ if(model.getPersonPhoto()!=null && model.getPersonPhoto().size()>0){
+ c.setFaceId(model.getPersonPhoto().get(0).getPersonPhotoIndexCode());
+ c.setFaceImg(HKConstants.IMG_INDEX+model.getPersonPhoto().get(0).getPicUri());
+ c.setFaceServerIndexCode(model.getPersonPhoto().get(0).getServerIndexCode());
+ }
+ newList.add(c);
+ }
+ return newList;
+ }
+
+ private Integer getCompanyId(List<Company> companies, String orgIndexCode) {
+ if(companies == null){
+ return null;
+ }
+ for(Company c : companies){
+ if(StringUtils.equals(c.getHkId(),orgIndexCode)){
+ return c.getId();
+ }
+ }
+ return null;
+ }
+
+ /**
+ * //璇佷欢绫诲瀷111:韬唤璇�414:鎶ょ収113:鎴峰彛绨�335:椹鹃┒璇�131:宸ヤ綔璇�133:瀛︾敓璇�990:鍏朵粬 ;
+ * // 璇佷欢绫诲瀷 0韬唤璇� 1娓境璇佷欢 2鎶ょ収
+ * @param certificateType
+ * @return
+ */
+ private Integer getIdcardTypeByHk(Integer certificateType) {
+ if(Constants.equalsInteger(certificateType,HKConstants.CertificateType.SHENFENZHENG.getKey())){
+ return 0;
+ }else if(Constants.equalsInteger(certificateType,HKConstants.CertificateType.HUZHAO.getKey())){
+ return 2;
+ }else if(Constants.equalsInteger(certificateType,HKConstants.CertificateType.JIASHIZHENG.getKey())){
+ return 3;
+ }else if(Constants.equalsInteger(certificateType,HKConstants.CertificateType.XUESHENGZHENG.getKey())){
+ return 4;
+ }else if(Constants.equalsInteger(certificateType,HKConstants.CertificateType.GONGXUOZHENG.getKey())){
+ return 5;
+ }else if(Constants.equalsInteger(certificateType,HKConstants.CertificateType.GONGXUOZHENG.getKey())){
+ return 6;
+ }else if(Constants.equalsInteger(certificateType,HKConstants.CertificateType.HUKOUBEN.getKey())){
+ return 7;
+ }else if(Constants.equalsInteger(certificateType,HKConstants.CertificateType.QITA.getKey())){
+ return 8;
+ }
+ return null;
+ }
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/systembiz/SystemDictDataBizService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/systembiz/SystemDictDataBizService.java
new file mode 100644
index 0000000..c032257
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/systembiz/SystemDictDataBizService.java
@@ -0,0 +1,44 @@
+package com.doumee.service.systembiz;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.admin.request.VisitConfigDTO;
+import com.doumee.dao.system.dto.QuerySystemDictDataDTO;
+import com.doumee.dao.system.model.SystemDictData;
+import com.doumee.dao.system.vo.SystemDictDataListVO;
+
+import java.util.List;
+
+/**
+ * 瀛楀吀鏁版嵁Service瀹氫箟
+ * @author Eva.Caesar Liu
+ * @date 2023/03/21 14:49
+ */
+public interface SystemDictDataBizService {
+
+
+
+ /**
+ * 璁垮鏉ヨ閰嶇疆
+ * @return
+ */
+ VisitConfigDTO getVisitConfigDTO();
+
+ /**
+ * 淇敼璁垮鏉ヨ閰嶇疆
+ * @param miniProgrammeDTO
+ */
+ void updateVisitConfig(VisitConfigDTO miniProgrammeDTO);
+
+
+ /**
+ * 鍔冲姟鏉ヨ閰嶇疆
+ * @return
+ */
+ VisitConfigDTO getLaborConfigDTO();
+
+ /**
+ * 淇敼鍔冲姟鏉ヨ閰嶇疆
+ */
+ void updateLaborConfigDTO(VisitConfigDTO visitConfigDTO);
+}
diff --git a/server/visits/dmvisit_service/src/main/resources/application-dev.yml b/server/visits/dmvisit_service/src/main/resources/application-dev.yml
new file mode 100644
index 0000000..5532735
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/resources/application-dev.yml
@@ -0,0 +1,83 @@
+spring:
+ # 鏁版嵁婧愰厤缃�
+ datasource:
+ url: jdbc:mysql://sh-cdb-aiskr3vy.sql.tencentcdb.com:62443/antaiwuliu?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
+ username: doumee
+ password: rtjgfEr@&0c0m
+ driver-class-name: com.mysql.cj.jdbc.Driver
+ type: com.alibaba.druid.pool.DruidDataSource
+ redis:
+ # database: 0
+ host: 127.0.0.1
+ port: 6379
+ password:
+ timeout: 5000 # 杩炴帴姹犱腑鐨勬渶灏忕┖闂茶繛鎺�
+ jackson:
+ time-zone: GMT+8
+ date-format: yyyy-MM-dd HH:mm:ss
+
+#rocketmq:
+# namesrvAddr: rmq-cn-pe335rcnn06.cn-shanghai.rmq.aliyuncs.com:8080
+# groupId: GID-wakatest
+# topic: waka-test
+# username: 4derRb4Sw5EkqUMI
+# password: v50N97wf4av8Q8I4
+
+knife4j:
+ enable: true
+ basic:
+ enable: true
+ username: admin
+ password: 111111
+
+debug_model: true
+
+########################鍚屾鏁版嵁妯″紡 ########################
+data-sync:
+ org-user-data-origin: 1 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
+ visitor-data-origin: 1 #璁垮鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
+ need-deal-img: true #鏄惁闇�瑕佸鐞嗗浘鐗囨暟鎹�
+
+
+# Swagger閰嶇疆
+swagger:
+ host: 127.0.0.1
+ title: ${project.name}鎺ュ彛鏂囨。
+ description: ${project.name}鎺ュ彛鏂囨。
+ enabled: true
+ context-path:
+ # 绂佺敤swagger鏃剁殑閲嶅畾鍚戝湴鍧�
+ redirect-uri: /
+
+########################寰俊鏀粯鐩稿叧閰嶇疆########################
+wx:
+ pay:
+ appId: wxfab6da18632e28de
+ appSecret: 4ee3b22afa90287834319fc3c1635271
+ mchId: 1229817002
+ mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM
+ notifyUrl: https://dmtest.ahapp.net/smartmeeting_interface/web/api/wxPayNotify
+ keyPath: /usr/local/apiclient_cert.p12
+
+tencent:
+ map:
+ remoteHost: https://apis.map.qq.com
+ appKey: 3AYBZ-I5R3V-2BVP3-UWBDQ-ETBM5-B2BBQ
+
+
+
+des_pwd: 123456SDFKDJF
+
+## MQTT##
+mqtt:
+ host: tcp://192.168.10.198:1883
+ userName: root
+ passWord: 123456
+ qos: 1
+ clientId: ClientId_local #ClientId_local蹇呴』鍞竴 姣斿浣犲凡缁忓畾浜嗗彨ABC 閭d綘灏变竴鐩村彨ABC 鍏朵粬鍦版柟灏变笉瑕佷娇鐢ˋBC浜�
+ timeout: 10
+ keepalive: 20
+ topic1: A/pick/warn/# #绗﹀彿鏄唬琛ㄦ暣涓獁arn涓嬮潰鐨勫叏閮ㄥ瓙涓婚 娌℃湁鐞嗚В鐨勮瘽 鍙互鐧惧害浠旂粏鐞嗚В涓�涓�
+ topic2: A/cmd/resp
+ topic3: ABCF
+ topic4: ABCH
diff --git a/server/visits/dmvisit_service/src/main/resources/application-proHS.yml.bck b/server/visits/dmvisit_service/src/main/resources/application-proHS.yml.bck
new file mode 100644
index 0000000..05e27a4
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/resources/application-proHS.yml.bck
@@ -0,0 +1,81 @@
+spring:
+ # 鏁版嵁婧愰厤缃�
+ datasource:
+ url: jdbc:mysql://10.10.99.68:3306/visit?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
+ username: root
+ password: Hs@20240307
+ driver-class-name: com.mysql.cj.jdbc.Driver
+ type: com.alibaba.druid.pool.DruidDataSource
+ redis:
+ # database: 0
+ host: 127.0.0.1
+ port: 6379
+ password:
+ timeout: 5000 # 杩炴帴姹犱腑鐨勬渶灏忕┖闂茶繛鎺�
+ jackson:
+ time-zone: GMT+8
+ date-format: yyyy-MM-dd HH:mm:ss
+
+#rocketmq:
+# namesrvAddr: rmq-cn-pe335rcnn06.cn-shanghai.rmq.aliyuncs.com:8080
+# groupId: GID-wakatest
+# topic: waka-test
+# username: 4derRb4Sw5EkqUMI
+# password: v50N97wf4av8Q8I4
+
+knife4j:
+ enable: true
+ basic:
+ enable: true
+ username: admin
+ password: 111111
+
+debug_model: false
+
+# Swagger閰嶇疆
+swagger:
+ host: dmtest.ahapp.net
+ title: ${project.name}鎺ュ彛鏂囨。
+ description: ${project.name}鎺ュ彛鏂囨。
+ enabled: true
+ context-path: /erp_interface
+ # 绂佺敤swagger鏃剁殑閲嶅畾鍚戝湴鍧�
+ redirect-uri: /
+
+########################鍚屾鏁版嵁妯″紡 ########################
+data-sync:
+ org-user-data-origin: 1 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
+ visitor-data-origin: 1 #璁垮鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
+ need-deal-img: true #鏄惁闇�瑕佸鐞嗗浘鐗囨暟鎹�
+
+########################寰俊鏀粯鐩稿叧閰嶇疆########################
+wx:
+ pay:
+ appId: wxfab6da18632e28de
+ appSecret: 4ee3b22afa90287834319fc3c1635271
+ mchId: 1229817002
+ mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM
+ notifyUrl: https://dmtest.ahapp.net/smartmeeting_interface/web/api/wxPayNotify
+ keyPath: /usr/local/apiclient_cert.p12
+
+tencent:
+ map:
+ remoteHost: https://apis.map.qq.com
+ appKey: 3AYBZ-I5R3V-2BVP3-UWBDQ-ETBM5-B2BBQ
+
+
+des_pwd: 123456SDFKDJF
+
+## MQTT##
+mqtt:
+ host: tcp://192.168.10.198:1883
+ userName: root
+ passWord: 123456
+ qos: 1
+ clientId: ClientId_local #ClientId_local蹇呴』鍞竴 姣斿浣犲凡缁忓畾浜嗗彨ABC 閭d綘灏变竴鐩村彨ABC 鍏朵粬鍦版柟灏变笉瑕佷娇鐢ˋBC浜�
+ timeout: 10
+ keepalive: 20
+ topic1: A/pick/warn/# #绗﹀彿鏄唬琛ㄦ暣涓獁arn涓嬮潰鐨勫叏閮ㄥ瓙涓婚 娌℃湁鐞嗚В鐨勮瘽 鍙互鐧惧害浠旂粏鐞嗚В涓�涓�
+ topic2: A/cmd/resp
+ topic3: ABCF
+ topic4: ABCH
diff --git a/server/visits/dmvisit_service/src/main/resources/application-testYL.yml b/server/visits/dmvisit_service/src/main/resources/application-testYL.yml
new file mode 100644
index 0000000..4324462
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/resources/application-testYL.yml
@@ -0,0 +1,80 @@
+spring:
+ # 鏁版嵁婧愰厤缃�
+ datasource:
+ url: jdbc:mysql://sh-cdb-aiskr3vy.sql.tencentcdb.com:62443/dm_visit_yl?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
+ username: doumee
+ password: rtjgfEr@&0c0m
+ driver-class-name: com.mysql.cj.jdbc.Driver
+ type: com.alibaba.druid.pool.DruidDataSource
+ redis:
+ # database: 0
+ host: 127.0.0.1
+ port: 6379
+ password:
+ timeout: 5000 # 杩炴帴姹犱腑鐨勬渶灏忕┖闂茶繛鎺�
+ jackson:
+ time-zone: GMT+8
+ date-format: yyyy-MM-dd HH:mm:ss
+
+#rocketmq:
+# namesrvAddr: rmq-cn-pe335rcnn06.cn-shanghai.rmq.aliyuncs.com:8080
+# groupId: GID-wakatest
+# topic: waka-test
+# username: 4derRb4Sw5EkqUMI
+# password: v50N97wf4av8Q8I4
+
+knife4j:
+ enable: true
+ basic:
+ enable: true
+ username: admin
+ password: 111111
+
+debug_model: true
+########################鍚屾鏁版嵁妯″紡 ########################
+data-sync:
+ org-user-data-origin: 2 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
+ visitor-data-origin: 2 #璁垮鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
+ need-deal-img: false #鏄惁闇�瑕佸鐞嗗浘鐗囨暟鎹�
+
+# Swagger閰嶇疆
+swagger:
+ host: 127.0.0.1
+ title: ${project.name}鎺ュ彛鏂囨。
+ description: ${project.name}鎺ュ彛鏂囨。
+ enabled: true
+ context-path:
+ # 绂佺敤swagger鏃剁殑閲嶅畾鍚戝湴鍧�
+ redirect-uri: /
+
+########################寰俊鏀粯鐩稿叧閰嶇疆########################
+wx:
+ pay:
+ appId: wxfab6da18632e28de
+ appSecret: 4ee3b22afa90287834319fc3c1635271
+ mchId: 1229817002
+ mchKey: u4TSNtv0wFP7WRfnxBgijYOtRhS9FvlM
+ notifyUrl: https://dmtest.ahapp.net/smartmeeting_interface/web/api/wxPayNotify
+ keyPath: /usr/local/apiclient_cert.p12
+
+tencent:
+ map:
+ remoteHost: https://apis.map.qq.com
+ appKey: 3AYBZ-I5R3V-2BVP3-UWBDQ-ETBM5-B2BBQ
+
+
+des_pwd: 123456SDFKDJF
+
+## MQTT##
+mqtt:
+ host: tcp://192.168.10.198:1883
+ userName: root
+ passWord: 123456
+ qos: 1
+ clientId: ClientId_local #ClientId_local蹇呴』鍞竴 姣斿浣犲凡缁忓畾浜嗗彨ABC 閭d綘灏变竴鐩村彨ABC 鍏朵粬鍦版柟灏变笉瑕佷娇鐢ˋBC浜�
+ timeout: 10
+ keepalive: 20
+ topic1: A/pick/warn/# #绗﹀彿鏄唬琛ㄦ暣涓獁arn涓嬮潰鐨勫叏閮ㄥ瓙涓婚 娌℃湁鐞嗚В鐨勮瘽 鍙互鐧惧害浠旂粏鐞嗚В涓�涓�
+ topic2: A/cmd/resp
+ topic3: ABCF
+ topic4: ABCH
--
Gitblit v1.9.3