TRX hace 1 año
padre
commit
a2b00a8d85
Se han modificado 15 ficheros con 520 adiciones y 20 borrados
  1. 106 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/visitor/VisitorMainModel.java
  2. 54 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/visitor/VisitorMainParam.java
  3. 56 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/visitor/VisitorMainSearch.java
  4. 1 4
      FullCardClient/src/main/java/com/zhongshu/card/client/model/visitor/setting/VisitorSettingDeviceModel.java
  5. 1 1
      FullCardClient/src/main/java/com/zhongshu/card/client/model/visitor/setting/VisitorSettingDeviceSearch.java
  6. 1 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/visitor/VisitorSettingController.java
  7. 4 4
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/visitor/VisitorSettingDeviceController.java
  8. 19 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/visitor/VisitorMainDao.java
  9. 19 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/visitor/extend/VisitorMainDaoExtend.java
  10. 1 3
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/visitor/extend/VisitorSettingDeviceDaoExtend.java
  11. 105 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/visitor/impl/VisitorMainDaoImpl.java
  12. 1 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/visitor/impl/VisitorSettingDeviceDaoImpl.java
  13. 16 4
      FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/visitor/VisitorMain.java
  14. 134 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/visitor/VisitorMainService.java
  15. 2 2
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/visitor/VisitorSettingDeviceService.java

+ 106 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/visitor/VisitorMainModel.java

@@ -0,0 +1,106 @@
+package com.zhongshu.card.client.model.visitor;
+
+import com.zhongshu.card.client.model.base.SuperModel;
+import com.zhongshu.card.client.model.devices.DeviceInfoModel;
+import com.zhongshu.card.client.model.devices.DeviceInfoSimpleModel;
+import com.zhongshu.card.client.model.org.OrganizationUserSimpleModel;
+import com.zhongshu.card.client.model.org.UserCountSimpleModel;
+import com.zhongshu.card.client.type.visitor.VisitorState;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author TRX
+ * @date 2025/2/11
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class VisitorMainModel extends SuperModel {
+
+    @Schema(description = "组件id")
+    private String sceneComponentId;
+
+    @Schema(description = "状态")
+    private VisitorState state;
+
+    private String stateStr;
+
+    public String getStateStr() {
+        if (state != null) {
+            return state.getRemark();
+        }
+        return "";
+    }
+
+    //-----------------------被访人 start--------------------------
+    @Schema(description = "被访人,也是审核人的用户userId")
+    private String visitorUserId;
+
+    @Schema(description = "被访人用户信息")
+    private UserCountSimpleModel visitorUserAccount;
+
+    @Schema(description = "被访人机构用户信息")
+    private OrganizationUserSimpleModel organizationUser;
+
+    @Schema(description = "审核时间")
+    private Long reviewTime;
+
+    @Schema(description = "是否已失效")
+    private Boolean isCancel = Boolean.FALSE;
+
+    //-------------------------------申请信息start--------------------
+    @Schema(description = "申请人userId")
+    private String applyUserId;
+
+    @Schema(description = "申请人用户信息")
+    private UserCountSimpleModel applyUserAccount;
+
+    @Schema(description = "申请人机构用户信息")
+    private OrganizationUserSimpleModel applyOrganizationUser;
+
+    @Schema(description = "微信的openId")
+    private String openId;
+
+    @Schema(description = "姓名")
+    private String name;
+
+    @Schema(description = "手机号码")
+    private String phone;
+
+    @Schema(description = "访客类型")
+    private String visitorType;
+
+    @Schema(description = "人脸url")
+    private String faceUrl;
+
+    @Schema(description = "人脸信息id")
+    private String faceFileId;
+
+    @Schema(description = "身份证号码")
+    private String cardNumber;
+
+    @Schema(description = "车牌号码")
+    private String carNo;
+
+    @Schema(description = "到访开始时间")
+    private Long startTime;
+
+    @Schema(description = "结束时间")
+    private Long endTime;
+
+    @Schema(description = "访问时间长")
+    private Long minutes;
+
+    @Schema(description = "可使用的设备id集合")
+    private List<String> deviceIds = new ArrayList<>();
+
+    @Schema(description = "设备列表")
+    private List<DeviceInfoSimpleModel> deviceInfos = new ArrayList<>();
+
+}

+ 54 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/visitor/VisitorMainParam.java

@@ -0,0 +1,54 @@
+package com.zhongshu.card.client.model.visitor;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author TRX
+ * @date 2025/2/11
+ */
+@Data
+public class VisitorMainParam {
+
+    private String id;
+
+    @Schema(description = "组件id")
+    private String sceneComponentId;
+
+    @Schema(description = "被访人,也是审核人的用户userId")
+    private String visitorUserId;
+
+    @Schema(description = "微信的openId")
+    private String openId;
+
+    @Schema(description = "姓名")
+    private String name;
+
+    @Schema(description = "手机号码")
+    private String phone;
+
+    @Schema(description = "访客类型")
+    private String visitorType;
+
+    @Schema(description = "人脸url")
+    private String faceUrl;
+
+    @Schema(description = "身份证号码")
+    private String cardNumber;
+
+    @Schema(description = "车牌号码")
+    private String carNo;
+
+    @Schema(description = "到访开始时间")
+    private Long startTime;
+
+    @Schema(description = "访问时间长")
+    private Long minutes;
+
+    @Schema(description = "可使用的设备id集合")
+    private List<String> deviceIds = new ArrayList<>();
+
+}

+ 56 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/visitor/VisitorMainSearch.java

@@ -0,0 +1,56 @@
+package com.zhongshu.card.client.model.visitor;
+
+import com.zhongshu.card.client.model.base.SuperSearch;
+import com.zhongshu.card.client.type.visitor.VisitorState;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author TRX
+ * @date 2025/2/11
+ */
+@Data
+public class VisitorMainSearch extends SuperSearch {
+
+    @Schema(description = "组件id")
+    private String sceneComponentId;
+
+    @Schema(description = "状态")
+    private VisitorState state;
+
+    //-----------------------被访人 start--------------------------
+    @Schema(description = "被访人,也是审核人的用户userId")
+    private String visitorUserId;
+
+    @Schema(description = "是否已失效")
+    private Boolean isCancel = Boolean.FALSE;
+
+    //-------------------------------申请信息start--------------------
+    @Schema(description = "申请人userId")
+    private String applyUserId;
+
+    @Schema(description = "微信的openId")
+    private String openId;
+
+    @Schema(description = "姓名")
+    private String name;
+
+    @Schema(description = "手机号码")
+    private String phone;
+
+    @Schema(description = "访客类型")
+    private List<String> visitorTypes;
+
+    @Schema(description = "身份证号码")
+    private String cardNumber;
+
+    @Schema(description = "车牌号码")
+    private String carNo;
+
+    @Schema(description = "可使用的设备id集合")
+    private List<String> deviceIds = new ArrayList<>();
+
+}

+ 1 - 4
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/visitor/VisitorSettingDeviceModel.java → FullCardClient/src/main/java/com/zhongshu/card/client/model/visitor/setting/VisitorSettingDeviceModel.java

@@ -1,13 +1,11 @@
-package com.zhongshu.card.server.core.domain.visitor;
+package com.zhongshu.card.client.model.visitor.setting;
 
 import com.github.microservice.models.type.DeviceType;
-import com.zhongshu.card.client.model.base.SuperModel;
 import com.zhongshu.card.client.model.devices.DeviceInfoModel;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
-import org.springframework.data.mongodb.core.index.Indexed;
 
 /**
  * @author TRX
@@ -21,7 +19,6 @@ public class VisitorSettingDeviceModel {
     private String id;
 
     @Schema(description = "组件id")
-    @Indexed(unique = true)
     private String sceneComponentId;
 
     @Schema(description = "设备id")

+ 1 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/visitor/VisitorSettingDeviceSearch.java → FullCardClient/src/main/java/com/zhongshu/card/client/model/visitor/setting/VisitorSettingDeviceSearch.java

@@ -1,4 +1,4 @@
-package com.zhongshu.card.server.core.domain.visitor;
+package com.zhongshu.card.client.model.visitor.setting;
 
 import com.github.microservice.models.type.DeviceType;
 import com.zhongshu.card.client.model.base.SuperSearch;

+ 1 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/visitor/VisitorSettingController.java

@@ -31,7 +31,7 @@ public class VisitorSettingController {
     @Autowired
     private VisitorSettingService visitorSettingService;
 
-    @Operation(summary = "得到配置", description = "得到配置")
+    @Operation(summary = "得到配置(传入组件id)", description = "得到配置")
     @RequestMapping(value = "getInfo", method = {RequestMethod.GET})
     public ResultContent<VisitorSettingModel> getInfo(IDParam param) {
         return visitorSettingService.getInfo(param.getId());

+ 4 - 4
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/visitor/VisitorSettingDeviceController.java

@@ -6,8 +6,8 @@ import com.github.microservice.net.ResultContent;
 import com.zhongshu.card.client.model.base.IDParam;
 import com.zhongshu.card.client.model.base.IDsParam;
 import com.zhongshu.card.client.model.visitor.setting.VisitorSettingDeviceParam;
-import com.zhongshu.card.server.core.domain.visitor.VisitorSettingDeviceModel;
-import com.zhongshu.card.server.core.domain.visitor.VisitorSettingDeviceSearch;
+import com.zhongshu.card.client.model.visitor.setting.VisitorSettingDeviceModel;
+import com.zhongshu.card.client.model.visitor.setting.VisitorSettingDeviceSearch;
 import com.zhongshu.card.server.core.service.visitor.VisitorSettingDeviceService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
@@ -47,8 +47,8 @@ public class VisitorSettingDeviceController {
 
     @ResourceAuth(value = "user", type = AuthType.User)
     @Operation(summary = "删除下的设备", description = "删除下的设备")
-    @RequestMapping(value = "deleteComponentDevicesInfo", method = {RequestMethod.POST})
-    public ResultContent deleteComponentDevicesInfo(@RequestBody IDParam param) {
+    @RequestMapping(value = "deleteComponentDeviceInfo", method = {RequestMethod.POST})
+    public ResultContent deleteComponentDeviceInfo(@RequestBody IDParam param) {
         return this.visitorSettingDeviceService.deleteComponentDeviceInfo(param.getId());
     }
 

+ 19 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/visitor/VisitorMainDao.java

@@ -0,0 +1,19 @@
+package com.zhongshu.card.server.core.dao.visitor;
+
+import com.github.microservice.components.data.mongo.mongo.dao.MongoDao;
+import com.zhongshu.card.server.core.dao.visitor.extend.VisitorMainDaoExtend;
+import com.zhongshu.card.server.core.domain.visitor.VisitorMain;
+
+import java.util.List;
+
+/**
+ * @author TRX
+ * @date 2024/3/21
+ */
+public interface VisitorMainDao extends MongoDao<VisitorMain>, VisitorMainDaoExtend {
+
+    VisitorMain findTopById(String id);
+
+    List<VisitorMain> findByIdIn(List<String> ids);
+
+}

+ 19 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/visitor/extend/VisitorMainDaoExtend.java

@@ -0,0 +1,19 @@
+package com.zhongshu.card.server.core.dao.visitor.extend;
+
+import com.zhongshu.card.client.model.visitor.VisitorMainSearch;
+import com.zhongshu.card.client.model.visitor.setting.VisitorSettingDeviceSearch;
+import com.zhongshu.card.server.core.domain.visitor.VisitorMain;
+import com.zhongshu.card.server.core.domain.visitor.VisitorSettingDevice;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+
+/**
+ * @Author TRX
+ * @CreateDate: 2023/7/7
+ * @Version: 1.0
+ */
+public interface VisitorMainDaoExtend {
+
+    Page<VisitorMain> page(Pageable pageable, VisitorMainSearch param);
+
+}

+ 1 - 3
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/visitor/extend/VisitorSettingDeviceDaoExtend.java

@@ -1,9 +1,7 @@
 package com.zhongshu.card.server.core.dao.visitor.extend;
 
-import com.zhongshu.card.client.model.devices.deviceGroup.DeviceGroupToDeviceSearch;
-import com.zhongshu.card.server.core.domain.devices.DeviceGroupToDevice;
 import com.zhongshu.card.server.core.domain.visitor.VisitorSettingDevice;
-import com.zhongshu.card.server.core.domain.visitor.VisitorSettingDeviceSearch;
+import com.zhongshu.card.client.model.visitor.setting.VisitorSettingDeviceSearch;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 

+ 105 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/visitor/impl/VisitorMainDaoImpl.java

@@ -0,0 +1,105 @@
+package com.zhongshu.card.server.core.dao.visitor.impl;
+
+import com.github.microservice.components.data.mongo.mongo.helper.DBHelper;
+import com.zhongshu.card.client.model.visitor.VisitorMainSearch;
+import com.zhongshu.card.server.core.dao.BaseImpl;
+import com.zhongshu.card.server.core.dao.visitor.extend.VisitorMainDaoExtend;
+import com.zhongshu.card.server.core.domain.visitor.VisitorMain;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Pattern;
+
+/**
+ * @Author TRX
+ * @CreateDate: 2023/4/12
+ * @Version: 1.0
+ */
+public class VisitorMainDaoImpl extends BaseImpl implements VisitorMainDaoExtend {
+
+    @Autowired
+    private DBHelper dbHelper;
+
+    @Override
+    public Page<VisitorMain> page(Pageable pageable, VisitorMainSearch param) {
+        Criteria criteria = buildFilterCriteria(param);
+
+        Sort sort = buildSort(param);
+        Query query = Query.query(criteria);
+        query.with(sort);
+        return dbHelper.pages(query, pageable, VisitorMain.class);
+    }
+
+    private Criteria buildFilterCriteria(VisitorMainSearch param) {
+        Criteria criteria = buildCriteriaNotOid(param);
+
+        if (StringUtils.isNotEmpty(param.getProjectOid())) {
+            criteria.and("projectOid").is(param.getProjectOid());
+        }
+
+        if (StringUtils.isNotEmpty(param.getSceneComponentId())) {
+            criteria.and("sceneComponentId").is(param.getSceneComponentId());
+        }
+
+        if (param.getState() != null) {
+            criteria.and("state").is(param.getState());
+        }
+
+        if (StringUtils.isNotEmpty(param.getVisitorUserId())) {
+            criteria.and("visitorUserId").is(param.getVisitorUserId());
+        }
+
+        if (param.getIsCancel() != null) {
+            criteria.and("isCancel").is(param.getIsCancel());
+        }
+
+        if (StringUtils.isNotEmpty(param.getApplyUserId())) {
+            criteria.and("applyUserId").is(param.getApplyUserId());
+        }
+
+        if (StringUtils.isNotEmpty(param.getOpenId())) {
+            criteria.and("openId").is(param.getOpenId());
+        }
+
+        // 类型
+        if (ObjectUtils.isNotEmpty(param.getVisitorTypes())) {
+            criteria.and("visitorType").in(param.getVisitorTypes());
+        }
+        if (ObjectUtils.isNotEmpty(param.getDeviceIds())) {
+            criteria.and("deviceIds").in(param.getDeviceIds());
+        }
+
+        // 模糊搜索
+        List<Criteria> criterias = new ArrayList<>();
+        if (StringUtils.isNotEmpty(param.getName())) {
+            Pattern pattern = Pattern.compile("^.*" + param.getName() + ".*$");
+            criterias.add(Criteria.where("name").is(pattern));
+        }
+        if (StringUtils.isNotEmpty(param.getPhone())) {
+            Pattern pattern = Pattern.compile("^.*" + param.getPhone() + ".*$");
+            criterias.add(Criteria.where("phone").is(pattern));
+        }
+        if (StringUtils.isNotEmpty(param.getCardNumber())) {
+            Pattern pattern = Pattern.compile("^.*" + param.getCardNumber() + ".*$");
+            criterias.add(Criteria.where("cardNumber").is(pattern));
+        }
+        if (StringUtils.isNotEmpty(param.getCarNo())) {
+            Pattern pattern = Pattern.compile("^.*" + param.getCarNo() + ".*$");
+            criterias.add(Criteria.where("carNo").is(pattern));
+        }
+        if (!CollectionUtils.isEmpty(criterias)) {
+            criteria.andOperator(criterias.toArray(new Criteria[]{}));
+        }
+        return criteria;
+    }
+
+}

+ 1 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/visitor/impl/VisitorSettingDeviceDaoImpl.java

@@ -4,7 +4,7 @@ import com.github.microservice.components.data.mongo.mongo.helper.DBHelper;
 import com.zhongshu.card.server.core.dao.BaseImpl;
 import com.zhongshu.card.server.core.dao.visitor.extend.VisitorSettingDeviceDaoExtend;
 import com.zhongshu.card.server.core.domain.visitor.VisitorSettingDevice;
-import com.zhongshu.card.server.core.domain.visitor.VisitorSettingDeviceSearch;
+import com.zhongshu.card.client.model.visitor.setting.VisitorSettingDeviceSearch;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;

+ 16 - 4
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/visitor/VisitorMain.java

@@ -32,6 +32,9 @@ public class VisitorMain extends SuperMain {
     @Schema(description = "组件id")
     private String sceneComponentId;
 
+    @Schema(description = "状态")
+    private VisitorState state;
+
     //-----------------------被访人 start--------------------------
     @Schema(description = "被访人,也是审核人的用户userId")
     private String visitorUserId;
@@ -47,9 +50,6 @@ public class VisitorMain extends SuperMain {
     @Schema(description = "审核时间")
     private Long reviewTime;
 
-    @Schema(description = "状态")
-    private VisitorState state;
-
     @Schema(description = "是否已失效")
     private Boolean isCancel = Boolean.FALSE;
 
@@ -65,17 +65,29 @@ public class VisitorMain extends SuperMain {
     @DBRef(lazy = true)
     private OrganizationUser applyOrganizationUser;
 
+    @Schema(description = "微信的openId")
+    private String openId;
+
+    @Schema(description = "姓名")
+    private String name;
+
     @Schema(description = "手机号码")
     private String phone;
 
     @Schema(description = "访客类型")
     private String visitorType;
 
+    @Schema(description = "人脸url")
+    private String faceUrl;
+
+    @Schema(description = "人脸信息id")
+    private String faceFileId;
+
     @Schema(description = "身份证号码")
     private String cardNumber;
 
     @Schema(description = "车牌号码")
-    private String cardNo;
+    private String carNo;
 
     @Schema(description = "到访开始时间")
     private Long startTime;

+ 134 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/visitor/VisitorMainService.java

@@ -0,0 +1,134 @@
+package com.zhongshu.card.server.core.service.visitor;
+
+import com.github.microservice.components.data.base.util.PageEntityUtil;
+import com.github.microservice.net.ResultContent;
+import com.github.microservice.net.ResultMessage;
+import com.zhongshu.card.client.model.devices.DeviceInfoSimpleModel;
+import com.zhongshu.card.client.model.visitor.VisitorMainModel;
+import com.zhongshu.card.client.model.visitor.VisitorMainParam;
+import com.zhongshu.card.client.model.visitor.VisitorMainSearch;
+import com.zhongshu.card.server.core.dao.devices.DeviceInfoDao;
+import com.zhongshu.card.server.core.dao.scene.SceneComponentDao;
+import com.zhongshu.card.server.core.dao.visitor.VisitorMainDao;
+import com.zhongshu.card.server.core.domain.scene.SceneComponent;
+import com.zhongshu.card.server.core.domain.visitor.VisitorMain;
+import com.zhongshu.card.server.core.service.base.SuperService;
+import com.zhongshu.card.server.core.service.devices.DeviceInfoServiceImpl;
+import com.zhongshu.card.server.core.service.user.UserAccountServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author TRX
+ * @date 2025/2/11
+ */
+@Slf4j
+@Service
+public class VisitorMainService extends SuperService {
+
+    @Autowired
+    private VisitorMainDao visitorMainDao;
+
+    @Autowired
+    private DeviceInfoDao deviceInfoDao;
+
+    @Autowired
+    private DeviceInfoServiceImpl deviceInfoService;
+
+    @Autowired
+    private UserAccountServiceImpl userAccountService;
+
+    @Autowired
+    private SceneComponentDao sceneComponentDao;
+
+    public ResultContent saveInfo(VisitorMainParam param) {
+        if (StringUtils.isEmpty(param.getSceneComponentId())) {
+            return ResultContent.buildFail("sceneComponentId 不能为空");
+        }
+        if (StringUtils.isEmpty(param.getSceneComponentId())) {
+            return ResultContent.buildFail("sceneComponentId 不能为空");
+        }
+
+        String sceneComponentId = param.getSceneComponentId();
+        SceneComponent sceneComponent = sceneComponentDao.findTopById(sceneComponentId);
+        if (ObjectUtils.isEmpty(sceneComponent)) {
+            return ResultContent.buildFail("组件不存在");
+        }
+
+        VisitorMain entity = null;
+        if (StringUtils.isNotEmpty(param.getId())) {
+            entity = visitorMainDao.findTopById(param.getId());
+            if (entity == null) {
+                return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, param.getId()));
+            }
+            initUpdateEntity(entity);
+        } else {
+            initEntityNoCheckOid(entity);
+        }
+
+
+        BeanUtils.copyProperties(param, param);
+
+        visitorMainDao.save(entity);
+        return ResultContent.buildSuccess();
+    }
+
+    public ResultContent getInfo(String id) {
+        VisitorMain entity = visitorMainDao.findTopById(id);
+        if (entity == null) {
+            return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
+        }
+        return ResultContent.buildSuccess(toModel(entity));
+    }
+
+    /**
+     * 删除数据
+     *
+     * @param id
+     * @return
+     */
+    public ResultContent deleteInfo(String id) {
+        VisitorMain entity = visitorMainDao.findTopById(id);
+        if (entity == null) {
+            return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
+        }
+        visitorMainDao.delete(entity);
+        return ResultContent.buildSuccess();
+    }
+
+    public ResultContent<Page<VisitorMainModel>> page(VisitorMainSearch param, Pageable pageable) {
+        Page<VisitorMain> page = visitorMainDao.page(pageable, param);
+        return ResultContent.buildSuccess(PageEntityUtil.concurrent2PageModel(page, this::toModel));
+    }
+
+    public VisitorMainModel toModel(VisitorMain entity) {
+        VisitorMainModel model = null;
+        if (ObjectUtils.isNotEmpty(entity)) {
+            model = new VisitorMainModel();
+            BeanUtils.copyProperties(entity, model);
+
+            // 用户信息
+            model.setVisitorUserAccount(userAccountService.toSimpleModel(entity.getVisitorUserAccount()));
+            model.setApplyUserAccount(userAccountService.toSimpleModel(entity.getApplyUserAccount()));
+
+            // 设备信息
+            List<DeviceInfoSimpleModel> deviceInfos = new ArrayList<>();
+            if (ObjectUtils.isNotEmpty(entity.getDeviceInfos())) {
+                deviceInfos = entity.getDeviceInfos().stream().map(deviceInfoService::toSimpleModel).collect(Collectors.toList());
+            }
+            model.setDeviceInfos(deviceInfos);
+        }
+        return model;
+    }
+
+}

+ 2 - 2
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/visitor/VisitorSettingDeviceService.java

@@ -13,8 +13,8 @@ import com.zhongshu.card.server.core.domain.devices.DeviceInfo;
 import com.zhongshu.card.server.core.domain.org.Organization;
 import com.zhongshu.card.server.core.domain.scene.SceneComponent;
 import com.zhongshu.card.server.core.domain.visitor.VisitorSettingDevice;
-import com.zhongshu.card.server.core.domain.visitor.VisitorSettingDeviceModel;
-import com.zhongshu.card.server.core.domain.visitor.VisitorSettingDeviceSearch;
+import com.zhongshu.card.client.model.visitor.setting.VisitorSettingDeviceModel;
+import com.zhongshu.card.client.model.visitor.setting.VisitorSettingDeviceSearch;
 import com.zhongshu.card.server.core.service.base.SuperService;
 import com.zhongshu.card.server.core.service.devices.DeviceInfoServiceImpl;
 import lombok.extern.slf4j.Slf4j;