TRX 1 yıl önce
ebeveyn
işleme
eb10b84bfe
13 değiştirilmiş dosya ile 417 ekleme ve 33 silme
  1. 4 1
      FullCardClient/src/main/java/com/zhongshu/card/client/model/visitor/VisitorMainModel.java
  2. 7 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/visitor/VisitorMainParam.java
  3. 17 0
      FullCardClient/src/main/java/com/zhongshu/card/client/openApi/base/BusIdParam.java
  4. 16 0
      FullCardClient/src/main/java/com/zhongshu/card/client/openApi/model/visitor/VisitorMainOpenParam.java
  5. 101 0
      FullCardClient/src/main/java/com/zhongshu/card/client/openApi/model/visitor/VisitorMainOpenSearch.java
  6. 42 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/openAPI/device/DeviceOpenApiController.java
  7. 7 18
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/openAPI/device/DevicePermissOpenApiController.java
  8. 58 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/openAPI/visitor/VisitorOpenApiController.java
  9. 2 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/visitor/VisitorMainDao.java
  10. 4 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/visitor/VisitorMain.java
  11. 10 7
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/openAPI/device/DevicePermissOpenApiService.java
  12. 140 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/openAPI/visitor/VisitorOpenService.java
  13. 9 7
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/visitor/VisitorMainService.java

+ 4 - 1
FullCardClient/src/main/java/com/zhongshu/card/client/model/visitor/VisitorMainModel.java

@@ -2,8 +2,8 @@ package com.zhongshu.card.client.model.visitor;
 
 import com.zhongshu.card.client.model.base.SuperModel;
 import com.zhongshu.card.client.model.devices.DeviceInfoSimpleModel;
-import com.zhongshu.card.client.model.org.orgUser.OrganizationUserSimpleModel;
 import com.zhongshu.card.client.model.org.UserCountSimpleModel;
+import com.zhongshu.card.client.model.org.orgUser.OrganizationUserSimpleModel;
 import com.zhongshu.card.client.type.visitor.VisitorApplyType;
 import com.zhongshu.card.client.type.visitor.VisitorState;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -184,4 +184,7 @@ public class VisitorMainModel extends SuperModel {
 
     @Schema(description = "是否是超时离开")
     private Boolean isOverTimeLeave;
+
+    @Schema(description = "openAPI管理数据ID")
+    private String busId;
 }

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

@@ -68,5 +68,12 @@ public class VisitorMainParam {
     @Schema(description = "到访地址")
     private String visitAddress;
 
+    @Schema(description = "项目oid")
+    private String projectOid;
+
+    @Schema(description = "openAPI管理数据ID")
+    private String busId;
+
+    @Schema(description = "扩展信息")
     private Map<String, Object> meatInfo = new HashMap<>();
 }

+ 17 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/openApi/base/BusIdParam.java

@@ -0,0 +1,17 @@
+package com.zhongshu.card.client.openApi.base;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ *
+ * @author TRX
+ * @date 2025/3/10
+ */
+@Data
+public class BusIdParam {
+
+    @Schema(description = "openAPI关联业务数据ID(用户自定义)")
+    private String busId;
+
+}

+ 16 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/openApi/model/visitor/VisitorMainOpenParam.java

@@ -0,0 +1,16 @@
+package com.zhongshu.card.client.openApi.model.visitor;
+
+import com.zhongshu.card.client.model.visitor.VisitorMainParam;
+import lombok.Data;
+
+/**
+ *
+ * @author TRX
+ * @date 2025/3/10
+ */
+@Data
+public class VisitorMainOpenParam extends VisitorMainParam {
+
+    private String projectCode;
+
+}

+ 101 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/openApi/model/visitor/VisitorMainOpenSearch.java

@@ -0,0 +1,101 @@
+package com.zhongshu.card.client.openApi.model.visitor;
+
+import com.zhongshu.card.client.openApi.base.SuperOpenAPIParam;
+import com.zhongshu.card.client.type.visitor.VisitorApplyType;
+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 VisitorMainOpenSearch extends SuperOpenAPIParam {
+
+    @Schema(description = "组件id")
+    private String sceneComponentId;
+
+    @Schema(description = "状态")
+    private VisitorState state;
+
+    @Schema(description = "最终状态")
+    private List<VisitorState> finalStates;
+
+    @Schema(description = "申请方式,预约类型")
+    private VisitorApplyType applyType;
+
+    //-----------------------被访人 start--------------------------
+    @Schema(description = "被访人,也是审核人的用户userId")
+    private String visitorUserId;
+
+    @Schema(description = "被访人姓名")
+    private String visitorUserName;
+
+    @Schema(description = "被访人手机")
+    private String visitorUserPhone;
+
+    @Schema(description = "是否已失效")
+    private Boolean isCancel = Boolean.FALSE;
+
+    @Schema(description = "清除人脸")
+    private Boolean isClearFace;
+
+    @Schema(description = "是否已失效(审核通过,但使用时间已过)")
+    private Boolean isOverTime = Boolean.FALSE;
+
+    @Schema(description = "是否离开")
+    private Boolean isLeave = Boolean.FALSE;
+    //-------------------------------申请信息start--------------------
+
+    @Schema(description = "是否已审核")
+    private Boolean isReViewed;
+
+    @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 Boolean reViewSuccess;
+
+    @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<>();
+
+    @Schema(description = "关联用户信息是否脱敏显示")
+    private Boolean isDesen;
+
+    @Schema(description = "预约开始时间(用户申请是填的时间)")
+    private Long visitorStartTime;
+
+    @Schema(description = "预约结束时间")
+    private Long visitorEndTime;
+
+    @Schema(description = "是否是超时离开")
+    private Boolean isOverTimeLeave;
+
+    @Schema(description = "实际到访时间 开始")
+    private Long startFirstVisitTime;
+
+    @Schema(description = "实际到访时间 结算")
+    private Long endFirstVisitTime;
+}

+ 42 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/openAPI/device/DeviceOpenApiController.java

@@ -0,0 +1,42 @@
+package com.zhongshu.card.server.core.controller.openAPI.device;
+
+import com.github.microservice.net.ResultContent;
+import com.github.microservice.staticVariable.OpenApiMark;
+import com.zhongshu.card.client.openApi.model.DeviceInfoOpenApiModel;
+import com.zhongshu.card.client.openApi.params.DeviceIdParam;
+import com.zhongshu.card.client.openApi.params.DeviceInfoOpenApiSearch;
+import com.zhongshu.card.server.core.service.openAPI.device.DevicePermissOpenApiService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author TRX
+ * @date 2024/6/5
+ */
+@RestController
+@RequestMapping("/" + OpenApiMark.fullCardOpenAPI + "/v1/device")
+@Tag(name = "openAPI-设备管理")
+public class DeviceOpenApiController {
+
+    @Autowired
+    private DevicePermissOpenApiService devicePermissOpenApiService;
+
+    @Operation(summary = "设备列表-分页查询", description = "设备列表-分页查询")
+    @RequestMapping(value = {"page"}, method = {RequestMethod.POST})
+    public ResultContent<Page<DeviceInfoOpenApiModel>> page(@RequestBody DeviceInfoOpenApiSearch param) {
+        return devicePermissOpenApiService.page(param);
+    }
+
+    @Operation(summary = "设备详情--根据设备ID查询", description = "设备详情-根据设备ID查询")
+    @RequestMapping(value = {"getDetailByDeviceId"}, method = {RequestMethod.POST})
+    public ResultContent<DeviceInfoOpenApiModel> getDetailByDeviceId(@RequestBody DeviceIdParam param) {
+        return devicePermissOpenApiService.getDetailByDeviceId(param);
+    }
+
+}

+ 7 - 18
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/openAPI/DevicePermissOpenApiController.java → FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/openAPI/device/DevicePermissOpenApiController.java

@@ -1,16 +1,16 @@
-package com.zhongshu.card.server.core.controller.openAPI;
+package com.zhongshu.card.server.core.controller.openAPI.device;
 
 import com.github.microservice.net.ResultContent;
 import com.github.microservice.staticVariable.OpenApiMark;
-import com.zhongshu.card.client.openApi.model.DeviceInfoOpenApiModel;
 import com.zhongshu.card.client.openApi.model.DevicePermissOpenApiModel;
-import com.zhongshu.card.client.openApi.params.*;
+import com.zhongshu.card.client.openApi.params.DeviceIdAndProjectCodeParam;
+import com.zhongshu.card.client.openApi.params.PermissChangeOpenApiParam;
+import com.zhongshu.card.client.openApi.params.UserOpenApiParam;
 import com.zhongshu.card.client.type.DataState;
-import com.zhongshu.card.server.core.service.openAPI.DevicePermissOpenApiService;
+import com.zhongshu.card.server.core.service.openAPI.device.DevicePermissOpenApiService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
@@ -23,25 +23,13 @@ import java.util.List;
  * @date 2024/6/5
  */
 @RestController
-@RequestMapping("/"+ OpenApiMark.fullCardOpenAPI +"/v1/devicePermiss")
+@RequestMapping("/" + OpenApiMark.fullCardOpenAPI + "/v1/devicePermiss")
 @Tag(name = "openAPI-设备权限管理")
 public class DevicePermissOpenApiController {
 
     @Autowired
     private DevicePermissOpenApiService devicePermissOpenApiService;
 
-    @Operation(summary = "设备列表-分页查询", description = "设备列表-分页查询")
-    @RequestMapping(value = {"page"}, method = {RequestMethod.POST})
-    public ResultContent<Page<DeviceInfoOpenApiModel>> page(@RequestBody DeviceInfoOpenApiSearch param) {
-        return devicePermissOpenApiService.page(param);
-    }
-
-    @Operation(summary = "设备详情--根据设备ID查询", description = "设备详情-根据设备ID查询")
-    @RequestMapping(value = {"getDetailByDeviceId"}, method = {RequestMethod.POST})
-    public ResultContent<DeviceInfoOpenApiModel> getDetailByDeviceId(@RequestBody DeviceIdParam param) {
-        return devicePermissOpenApiService.getDetailByDeviceId(param);
-    }
-
     @Operation(summary = "查询设备的权限", description = "查询设备的权限")
     @RequestMapping(value = {"getDevicePermissByDeviceId"}, method = {RequestMethod.POST})
     public ResultContent<List<DevicePermissOpenApiModel>> getDevicePermissByDeviceId(@RequestBody DeviceIdAndProjectCodeParam param) {
@@ -78,4 +66,5 @@ public class DevicePermissOpenApiController {
         return devicePermissOpenApiService.addPermiss(param);
     }
 
+
 }

+ 58 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/openAPI/visitor/VisitorOpenApiController.java

@@ -0,0 +1,58 @@
+package com.zhongshu.card.server.core.controller.openAPI.visitor;
+
+import com.github.microservice.net.ResultContent;
+import com.github.microservice.staticVariable.OpenApiMark;
+import com.zhongshu.card.client.model.base.IDParam;
+import com.zhongshu.card.client.model.visitor.VisitorMainModel;
+import com.zhongshu.card.client.openApi.base.BusIdParam;
+import com.zhongshu.card.client.openApi.model.visitor.VisitorMainOpenParam;
+import com.zhongshu.card.client.openApi.model.visitor.VisitorMainOpenSearch;
+import com.zhongshu.card.server.core.service.openAPI.visitor.VisitorOpenService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 访客开放接口
+ * @author TRX
+ * @date 2024/6/5
+ */
+@RestController
+@RequestMapping("/" + OpenApiMark.fullCardOpenAPI + "/v1/visitor")
+@Tag(name = "openAPI-访客功能")
+public class VisitorOpenApiController {
+
+    @Autowired
+    private VisitorOpenService visitorOpenService;
+
+    @Operation(summary = "添加访客信息", description = "添加访客信息")
+    @RequestMapping(value = {"saveApplyVisitor"}, method = {RequestMethod.POST})
+    public ResultContent saveApplyVisitor(@RequestBody VisitorMainOpenParam param) {
+        return visitorOpenService.saveApplyVisitor(param);
+    }
+
+    @Operation(summary = "访客数据列表-分页查询(访客历史记录)", description = "访客数据列表-分页查询")
+    @RequestMapping(value = {"page"}, method = {RequestMethod.POST})
+    public ResultContent<Page<VisitorMainModel>> page(
+            @RequestBody VisitorMainOpenSearch param) {
+        return visitorOpenService.page(param);
+    }
+
+    @Operation(summary = "根据ID得到访客详情", description = "根据ID得到访客详情")
+    @RequestMapping(value = {"detailById"}, method = {RequestMethod.POST})
+    public ResultContent detailById(@RequestBody IDParam param) {
+        return visitorOpenService.getVisitorDetail(param);
+    }
+
+    @Operation(summary = "根据busId得到访客详情", description = "根据busId得到访客详情")
+    @RequestMapping(value = {"detailByBusId"}, method = {RequestMethod.POST})
+    public ResultContent detailByBusId(@RequestBody BusIdParam param) {
+        return visitorOpenService.detailByBusId(param);
+    }
+
+}

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

@@ -15,6 +15,8 @@ public interface VisitorMainDao extends MongoDao<VisitorMain>, VisitorMainDaoExt
 
     VisitorMain findTopById(String id);
 
+    VisitorMain findTopByBusId(String busId);
+
     List<VisitorMain> findByIdIn(List<String> ids);
 
     List<VisitorMain> findByState(VisitorState state);

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

@@ -192,4 +192,8 @@ public class VisitorMain extends SuperMain {
 
     @Schema(description = "是否是超时离开")
     private Boolean isOverTimeLeave;
+
+    @Schema(description = "openAPI管理数据ID")
+    private String busId;
+
 }

+ 10 - 7
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/openAPI/DevicePermissOpenApiService.java → FullCardServer/src/main/java/com/zhongshu/card/server/core/service/openAPI/device/DevicePermissOpenApiService.java

@@ -1,4 +1,4 @@
-package com.zhongshu.card.server.core.service.openAPI;
+package com.zhongshu.card.server.core.service.openAPI.device;
 
 import com.github.microservice.components.data.base.util.PageEntityUtil;
 import com.github.microservice.net.ResultContent;
@@ -18,6 +18,7 @@ import com.zhongshu.card.server.core.domain.devices.DeviceInfo;
 import com.zhongshu.card.server.core.domain.devices.permiss.DevicePermiss;
 import com.zhongshu.card.server.core.domain.org.OrganizationUser;
 import com.zhongshu.card.server.core.domain.org.UserAccount;
+import com.zhongshu.card.server.core.service.base.CommonService;
 import com.zhongshu.card.server.core.service.base.SuperService;
 import com.zhongshu.card.server.core.service.devices.permiss.DevicePermissIotService;
 import com.zhongshu.card.server.core.service.devices.permiss.DevicePermissService;
@@ -74,6 +75,9 @@ public class DevicePermissOpenApiService extends SuperService {
     @Autowired
     private OrganizationUserServiceImpl organizationUserService;
 
+    @Autowired
+    private CommonService commonService;
+
     /**
      * 设备列表
      *
@@ -192,19 +196,18 @@ public class DevicePermissOpenApiService extends SuperService {
      * @return
      */
     public ResultContent addPermiss(PermissChangeOpenApiParam param) {
-        if (StringUtils.isEmpty(param.getProjectCode())) {
-            return ResultContent.buildFail("projectCode不能为空");
+        ResultContent<String> resultContent = commonService.checkProjectCanUserByCode(param.getProjectCode());
+        if (resultContent.isFailed()) {
+            return ResultContent.buildFail(resultContent.getMsg());
         }
+        String projectOid = resultContent.getContent();
+
         if (StringUtils.isEmpty(param.getUserId())) {
             return ResultContent.buildFail("userId不能为空");
         }
         if (StringUtils.isEmpty(param.getDeviceId())) {
             return ResultContent.buildFail("deviceId不能为空");
         }
-        String projectOid = getOidByCode(param.getProjectCode());
-        if (StringUtils.isEmpty(projectOid)) {
-            return ResultContent.buildFail("projectCode不存在");
-        }
         DevicePermiss entity = devicePermissDao.findTopByUserIdAndDeviceIdAndProjectOid(param.getUserId(), param.getDeviceId(), projectOid);
         if (ObjectUtils.isNotEmpty(entity)) {
             return ResultContent.buildFail("权限已存在");

+ 140 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/openAPI/visitor/VisitorOpenService.java

@@ -0,0 +1,140 @@
+package com.zhongshu.card.server.core.service.openAPI.visitor;
+
+import com.github.microservice.components.data.base.util.PageEntityUtil;
+import com.github.microservice.net.ResultContent;
+import com.zhongshu.card.client.model.base.IDParam;
+import com.zhongshu.card.client.model.visitor.VisitorMainModel;
+import com.zhongshu.card.client.model.visitor.VisitorMainSearch;
+import com.zhongshu.card.client.model.visitor.VisitorReViewParam;
+import com.zhongshu.card.client.openApi.base.BusIdParam;
+import com.zhongshu.card.client.openApi.model.visitor.VisitorMainOpenParam;
+import com.zhongshu.card.client.openApi.model.visitor.VisitorMainOpenSearch;
+import com.zhongshu.card.client.type.visitor.VisitorState;
+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.CommonService;
+import com.zhongshu.card.server.core.service.visitor.VisitorMainService;
+import com.zhongshu.card.server.core.util.BeanUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.kafka.common.errors.ApiException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 访客功能openAPI
+ * @author TRX
+ * @date 2025/3/10
+ */
+@Slf4j
+@Service
+public class VisitorOpenService {
+
+    @Autowired
+    private VisitorMainService visitorMainService;
+
+    @Autowired
+    private CommonService commonService;
+
+    @Autowired
+    private SceneComponentDao sceneComponentDao;
+
+    @Autowired
+    private VisitorMainDao visitorMainDao;
+
+    /**
+     * 添加访客信息
+     * @return
+     */
+    @Transactional
+    public ResultContent saveApplyVisitor(VisitorMainOpenParam visitorMainParam) {
+        String visitorSceneComponentCode = "sign";
+        SceneComponent sceneComponent = sceneComponentDao.findTopByCode(visitorSceneComponentCode);
+        if (ObjectUtils.isEmpty(sceneComponent)) {
+            return ResultContent.buildFail("反馈组件未配置");
+        }
+        visitorMainParam.setSceneComponentId(sceneComponent.getId());
+
+        ResultContent<String> resultContent = commonService.checkProjectCanUserByCode(visitorMainParam.getProjectCode());
+        if (resultContent.isFailed()) {
+            return ResultContent.buildFail(resultContent.getMsg());
+        }
+        String projectOid = resultContent.getContent();
+        visitorMainParam.setProjectOid(projectOid);
+        ResultContent<VisitorMain> applyResult = visitorMainService.saveInfo(visitorMainParam);
+        if (applyResult.isFailed()) {
+            return ResultContent.buildFail(applyResult.getMsg());
+        }
+
+        // 自动通过
+        VisitorReViewParam reViewParam = new VisitorReViewParam();
+        reViewParam.setId(applyResult.getContent().getId());
+        reViewParam.setReviewRemark("自动通过");
+        ResultContent passResult = visitorMainService.passVisitApply(reViewParam);
+        if (passResult.isFailed()) {
+            throw new ApiException(passResult.getMsg());
+        }
+        return ResultContent.buildSuccess();
+    }
+
+    /**
+     * 分页列表
+     *
+     * @param param
+     * @return
+     */
+    public ResultContent<Page<VisitorMainModel>> page(VisitorMainOpenSearch param) {
+        if (param.getState() != null) {
+            if (param.getState() == VisitorState.Leave) {
+                param.setState(null);
+                param.setIsLeave(Boolean.TRUE);
+                param.setIsOverTimeLeave(null);
+            } else if (param.getState() == VisitorState.LeaveOutTime) {
+                param.setState(null);
+                param.setIsLeave(null);
+                param.setIsOverTimeLeave(Boolean.TRUE);
+            }
+        }
+        Pageable pageable = PageRequest.of(param.getNumber(), param.getSize());
+        ResultContent<String> resultContent = commonService.checkProjectCanUserByCode(param.getProjectCode());
+        if (resultContent.isFailed()) {
+            return ResultContent.buildFail(resultContent.getMsg());
+        }
+        String projectOid = resultContent.getContent();
+
+        VisitorMainSearch search = new VisitorMainSearch();
+        BeanUtils.copyProperties(param, search);
+        search.setProjectOid(projectOid);
+
+        Page<VisitorMain> page = visitorMainDao.page(pageable, search);
+        if (param.getIsDesen() != null && param.getIsDesen()) {
+            return ResultContent.buildSuccess(PageEntityUtil.concurrent2PageModel(page, visitorMainService::toDesenModel));
+        }
+        return ResultContent.buildSuccess(PageEntityUtil.concurrent2PageModel(page, visitorMainService::toModel));
+    }
+
+    public ResultContent<VisitorMainModel> getVisitorDetail(IDParam param) {
+        VisitorMain entity = visitorMainDao.findTopById(param.getId());
+        if (entity == null) {
+            return ResultContent.buildFail("数据不存在");
+        }
+        VisitorMainModel model = visitorMainService.toDesenModel(entity);
+        return ResultContent.buildSuccess(model);
+    }
+
+    public ResultContent<VisitorMainModel> detailByBusId(BusIdParam param) {
+        VisitorMain entity = visitorMainDao.findTopByBusId(param.getBusId());
+        if (entity == null) {
+            return ResultContent.buildFail("数据不存在");
+        }
+        VisitorMainModel model = visitorMainService.toDesenModel(entity);
+        return ResultContent.buildSuccess(model);
+    }
+
+}

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

@@ -106,10 +106,7 @@ public class VisitorMainService extends SuperPermissService {
      * @param param
      * @return
      */
-    public ResultContent saveInfo(VisitorMainParam param) {
-        if (StringUtils.isEmpty(param.getSceneComponentId())) {
-            return ResultContent.buildFail("sceneComponentId 不能为空");
-        }
+    public ResultContent<VisitorMain> saveInfo(VisitorMainParam param) {
         if (StringUtils.isEmpty(param.getVisitorUserId())) {
             return ResultContent.buildFail("visitorUserId 不能为空");
         }
@@ -147,21 +144,26 @@ public class VisitorMainService extends SuperPermissService {
         }
         param.setOpenId(openid);
 
+        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("组件不存在");
         }
-
         String projectOid = sceneComponent.getProjectOid();
         if (StringUtils.isEmpty(projectOid)) {
             projectOid = getCurrentProjectOid();
         }
         if (StringUtils.isEmpty(projectOid)) {
-            return ResultContent.buildFail("projectOid 信息为空");
+            projectOid = param.getProjectOid();
         }
 
+        if (StringUtils.isEmpty(projectOid)) {
+            return ResultContent.buildFail("projectOid 信息为空");
+        }
         // 访客组件配置
         VisitorSetting visitorSetting = visitorSettingDao.findTopBySceneComponentIdAndProjectOid(sceneComponentId, projectOid);
         if (ObjectUtils.isEmpty(visitorSetting)) {
@@ -236,7 +238,7 @@ public class VisitorMainService extends SuperPermissService {
         entity.setUserFromType(userFromType);
         entity.setTempUserId(tempUserId);
         visitorMainDao.save(entity);
-        return ResultContent.buildSuccess();
+        return ResultContent.buildSuccess(entity);
     }
 
     public ResultContent getInfo(String id) {