feat(property): 小程序添加访客管理功能
- 新增访客管理相关的接口和服务实现 - 添加访客信息同步到 E8 平台的功能 - 实现访客二维码生成和获取功能
This commit is contained in:
@@ -2,6 +2,8 @@ package org.dromara.sis.api;
|
|||||||
|
|
||||||
import org.dromara.sis.api.domain.RemoteVisitor;
|
import org.dromara.sis.api.domain.RemoteVisitor;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author lsm
|
* @author lsm
|
||||||
* @apiNote RemoteVisitorService
|
* @apiNote RemoteVisitorService
|
||||||
@@ -15,5 +17,13 @@ public interface RemoteVisitorService {
|
|||||||
* @param visitor 访客信息
|
* @param visitor 访客信息
|
||||||
* @return 访客ID
|
* @return 访客ID
|
||||||
*/
|
*/
|
||||||
Long syncE8PlatVisitor(RemoteVisitor visitor);
|
Map<String, Object> syncE8PlatVisitor(RemoteVisitor visitor);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取访客二维码
|
||||||
|
*
|
||||||
|
* @param id 访客id
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
Map<String, Object> getQrCode(Long id);
|
||||||
}
|
}
|
||||||
|
@@ -57,6 +57,12 @@ public class SaPermissionImpl implements StpInterface {
|
|||||||
"xcx:workOrders:query",
|
"xcx:workOrders:query",
|
||||||
// 工单类型管理
|
// 工单类型管理
|
||||||
"xcx:workOrdersType:query",
|
"xcx:workOrdersType:query",
|
||||||
|
// 访客管理
|
||||||
|
"xcx:visitorManagement:add",
|
||||||
|
"xcx:visitorManagement:query",
|
||||||
|
"xcx:visitorManagement:edit",
|
||||||
|
"xcx:visitorManagement:list",
|
||||||
|
"xcx:visitorManagement:getQrCode",
|
||||||
// 文件上传
|
// 文件上传
|
||||||
"system:oss:upload"
|
"system:oss:upload"
|
||||||
);
|
);
|
||||||
|
@@ -53,8 +53,10 @@ public class XServiceWorkOrdersTypeController extends BaseController {
|
|||||||
/**
|
/**
|
||||||
* 查询【工单类型】树结构
|
* 查询【工单类型】树结构
|
||||||
*/
|
*/
|
||||||
@GetMapping("/typeTree")
|
@GetMapping("/typeTree/{id}")
|
||||||
public R<List<ServiceWorkOrdersTypeVo>> typeTree() {
|
public R<List<ServiceWorkOrdersTypeVo>> typeTree(@NotNull(message = "id不能为空")
|
||||||
return R.ok(serviceWorkOrdersTypeService.typeTree());
|
@PathVariable("id") Long id) {
|
||||||
|
List<ServiceWorkOrdersTypeVo> list = serviceWorkOrdersTypeService.typeTree();
|
||||||
|
return R.ok(list.stream().filter(vo -> vo.getId().equals(id)).toList());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,113 @@
|
|||||||
|
package org.dromara.property.controller.xcx;
|
||||||
|
|
||||||
|
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||||
|
import cn.dev33.satoken.stp.StpUtil;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
|
import jakarta.validation.constraints.NotEmpty;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.apache.dubbo.config.annotation.DubboReference;
|
||||||
|
import org.dromara.common.core.constant.GlobalConstants;
|
||||||
|
import org.dromara.common.core.domain.R;
|
||||||
|
import org.dromara.common.core.validate.AddGroup;
|
||||||
|
import org.dromara.common.core.validate.EditGroup;
|
||||||
|
import org.dromara.common.excel.utils.ExcelUtil;
|
||||||
|
import org.dromara.common.idempotent.annotation.RepeatSubmit;
|
||||||
|
import org.dromara.common.log.annotation.Log;
|
||||||
|
import org.dromara.common.log.enums.BusinessType;
|
||||||
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||||
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||||
|
import org.dromara.common.redis.utils.RedisUtils;
|
||||||
|
import org.dromara.common.web.core.BaseController;
|
||||||
|
import org.dromara.common.websocket.dto.WebSocketMessageDto;
|
||||||
|
import org.dromara.common.websocket.holder.WebSocketSessionHolder;
|
||||||
|
import org.dromara.common.websocket.utils.WebSocketUtils;
|
||||||
|
import org.dromara.property.domain.bo.QrCodeInfo;
|
||||||
|
import org.dromara.property.domain.bo.TbVisitorManagementBo;
|
||||||
|
import org.dromara.property.domain.vo.TbVisitorManagementVo;
|
||||||
|
import org.dromara.property.service.ITbVisitorManagementService;
|
||||||
|
import org.dromara.system.api.RemoteConfigService;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.time.Duration;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 访客管理
|
||||||
|
* 前端访问路由地址为:/property/visitorManagement
|
||||||
|
*
|
||||||
|
* @author lsm
|
||||||
|
* @since 2025-06-19
|
||||||
|
*/
|
||||||
|
@Validated
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/xcx/visitorManagement")
|
||||||
|
public class XTbVisitorManagementController extends BaseController {
|
||||||
|
|
||||||
|
private final ITbVisitorManagementService tbVisitorManagementService;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小程序新增访客邀约
|
||||||
|
*
|
||||||
|
* @param bo bean
|
||||||
|
*/
|
||||||
|
@RepeatSubmit()
|
||||||
|
@PostMapping()
|
||||||
|
@SaCheckPermission("xcx:visitorManagement:add")
|
||||||
|
public R<Void> add(@Validated(AddGroup.class) @RequestBody TbVisitorManagementBo bo) {
|
||||||
|
return toAjax(tbVisitorManagementService.insertByXcxBo(bo));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小程序修改访客邀约
|
||||||
|
*
|
||||||
|
* @param bo bean
|
||||||
|
*/
|
||||||
|
@PutMapping()
|
||||||
|
@RepeatSubmit()
|
||||||
|
@SaCheckPermission("xcx:visitorManagement:edit")
|
||||||
|
public R<Void> edit(@Validated(EditGroup.class) @RequestBody TbVisitorManagementBo bo) {
|
||||||
|
return toAjax(tbVisitorManagementService.updateByXcxBo(bo));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小程序查询访客邀约详情
|
||||||
|
*
|
||||||
|
* @param id 主键
|
||||||
|
*/
|
||||||
|
@GetMapping("/{id}")
|
||||||
|
@SaCheckPermission("xcx:visitorManagement:query")
|
||||||
|
public R<TbVisitorManagementVo> getInfo(@NotNull(message = "主键不能为空")
|
||||||
|
@PathVariable("id") Long id) {
|
||||||
|
return R.ok(tbVisitorManagementService.queryByIdForXcx(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小程序查询本人邀约/预约列表
|
||||||
|
*/
|
||||||
|
@GetMapping("/list/{type}")
|
||||||
|
@SaCheckPermission("xcx:visitorManagement:list")
|
||||||
|
public R<List<TbVisitorManagementVo>> list(@NotNull(message = "类型不能为空")
|
||||||
|
@PathVariable("type") Integer type) {
|
||||||
|
return R.ok(tbVisitorManagementService.queryMyListByXcx(type));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取访客二维码
|
||||||
|
*
|
||||||
|
* @param id 主键
|
||||||
|
*/
|
||||||
|
@GetMapping("/qrCode/{id}")
|
||||||
|
@SaCheckPermission("xcx:visitorManagement:getQrCode")
|
||||||
|
public R<String> getQrCode(@NotNull(message = "主键不能为空")
|
||||||
|
@PathVariable("id") Long id) {
|
||||||
|
int code = Integer.parseInt(tbVisitorManagementService.getQrCodeByIdForXcx(id).get("code").toString());
|
||||||
|
return code == 200 ? R.ok(tbVisitorManagementService.getQrCodeByIdForXcx(id).get("data").toString()) : R.fail(tbVisitorManagementService.getQrCodeByIdForXcx(id).get("data").toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -118,6 +118,11 @@ public class TbVisitorManagement extends TenantEntity {
|
|||||||
*/
|
*/
|
||||||
private String searchValue;
|
private String searchValue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
private String remark;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* e8平台id
|
* e8平台id
|
||||||
*/
|
*/
|
||||||
|
@@ -15,7 +15,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
|
|||||||
* 访客管理业务对象 tb_visitor_management
|
* 访客管理业务对象 tb_visitor_management
|
||||||
*
|
*
|
||||||
* @author mocheng
|
* @author mocheng
|
||||||
* @date 2025-06-19
|
* @since 2025-06-19
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@@ -139,6 +139,14 @@ public class TbVisitorManagementVo implements Serializable {
|
|||||||
|
|
||||||
private String url;
|
private String url;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* e8平台id
|
||||||
|
*/
|
||||||
|
private Long eEightId;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -1,8 +1,6 @@
|
|||||||
package org.dromara.property.service;
|
package org.dromara.property.service;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import org.dromara.property.domain.TbVisitorManagement;
|
|
||||||
import org.dromara.property.domain.vo.TbVisitorManagementVo;
|
import org.dromara.property.domain.vo.TbVisitorManagementVo;
|
||||||
import org.dromara.property.domain.bo.TbVisitorManagementBo;
|
import org.dromara.property.domain.bo.TbVisitorManagementBo;
|
||||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||||
@@ -10,12 +8,13 @@ import org.dromara.common.mybatis.core.page.PageQuery;
|
|||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 访客管理Service接口
|
* 访客管理Service接口
|
||||||
*
|
*
|
||||||
* @author mocheng
|
* @author mocheng
|
||||||
* @date 2025-06-19
|
* @since 2025-06-19
|
||||||
*/
|
*/
|
||||||
public interface ITbVisitorManagementService {
|
public interface ITbVisitorManagementService {
|
||||||
|
|
||||||
@@ -47,7 +46,6 @@ public interface ITbVisitorManagementService {
|
|||||||
List<TbVisitorManagementVo> queryListByWapper(QueryWrapper wapper);
|
List<TbVisitorManagementVo> queryListByWapper(QueryWrapper wapper);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增访客管理
|
* 新增访客管理
|
||||||
*
|
*
|
||||||
@@ -83,4 +81,46 @@ public interface ITbVisitorManagementService {
|
|||||||
* @return 是否删除成功
|
* @return 是否删除成功
|
||||||
*/
|
*/
|
||||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小程序新增访客邀约
|
||||||
|
*
|
||||||
|
* @param bo bean
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
Boolean insertByXcxBo(TbVisitorManagementBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小程序修改邀约信息
|
||||||
|
*
|
||||||
|
* @param bo bean
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
Boolean updateByXcxBo(TbVisitorManagementBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小程序查询访客邀约详情
|
||||||
|
*
|
||||||
|
* @param id 主键
|
||||||
|
* @return vo
|
||||||
|
*/
|
||||||
|
TbVisitorManagementVo queryByIdForXcx(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小程序查询本人邀约/预约列表
|
||||||
|
*
|
||||||
|
* @param type 列表类型
|
||||||
|
* @return list
|
||||||
|
*/
|
||||||
|
List<TbVisitorManagementVo> queryMyListByXcx(Integer type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小程序获取邀约二维码
|
||||||
|
*
|
||||||
|
* @param id 主键
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
Map<String, Object> getQrCodeByIdForXcx(Long id);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,9 @@
|
|||||||
package org.dromara.property.service.impl;
|
package org.dromara.property.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import cn.hutool.core.lang.Assert;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
import org.apache.dubbo.config.annotation.DubboReference;
|
import org.apache.dubbo.config.annotation.DubboReference;
|
||||||
import org.dromara.common.core.constant.GlobalConstants;
|
import org.dromara.common.core.constant.GlobalConstants;
|
||||||
import org.dromara.common.core.utils.MapstructUtils;
|
import org.dromara.common.core.utils.MapstructUtils;
|
||||||
@@ -14,8 +16,12 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.dromara.common.redis.utils.RedisUtils;
|
import org.dromara.common.redis.utils.RedisUtils;
|
||||||
|
import org.dromara.common.satoken.utils.LoginHelper;
|
||||||
|
import org.dromara.property.api.model.LoginResidentPerson;
|
||||||
import org.dromara.property.domain.TbUserGroup;
|
import org.dromara.property.domain.TbUserGroup;
|
||||||
import org.dromara.property.domain.bo.QrCodeInfo;
|
import org.dromara.property.domain.bo.QrCodeInfo;
|
||||||
|
import org.dromara.property.domain.vo.residentVo.ResidentPersonVo;
|
||||||
|
import org.dromara.property.service.residentService.IResidentPersonService;
|
||||||
import org.dromara.resource.api.RemoteFileService;
|
import org.dromara.resource.api.RemoteFileService;
|
||||||
import org.dromara.sis.api.RemoteVisitorService;
|
import org.dromara.sis.api.RemoteVisitorService;
|
||||||
import org.dromara.sis.api.domain.RemoteVisitor;
|
import org.dromara.sis.api.domain.RemoteVisitor;
|
||||||
@@ -28,6 +34,7 @@ import org.dromara.property.domain.vo.TbVisitorManagementVo;
|
|||||||
import org.dromara.property.domain.TbVisitorManagement;
|
import org.dromara.property.domain.TbVisitorManagement;
|
||||||
import org.dromara.property.mapper.TbVisitorManagementMapper;
|
import org.dromara.property.mapper.TbVisitorManagementMapper;
|
||||||
import org.dromara.property.service.ITbVisitorManagementService;
|
import org.dromara.property.service.ITbVisitorManagementService;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -45,6 +52,8 @@ import java.util.Collection;
|
|||||||
public class TbVisitorManagementServiceImpl implements ITbVisitorManagementService {
|
public class TbVisitorManagementServiceImpl implements ITbVisitorManagementService {
|
||||||
|
|
||||||
private final TbVisitorManagementMapper baseMapper;
|
private final TbVisitorManagementMapper baseMapper;
|
||||||
|
private final IResidentPersonService residentPersonService;
|
||||||
|
|
||||||
|
|
||||||
@DubboReference
|
@DubboReference
|
||||||
private RemoteUserService remoteUserService;
|
private RemoteUserService remoteUserService;
|
||||||
@@ -64,18 +73,14 @@ public class TbVisitorManagementServiceImpl implements ITbVisitorManagementServi
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public TbVisitorManagementVo queryById(Long id) {
|
public TbVisitorManagementVo queryById(Long id) {
|
||||||
// TbVisitorManagementVo tbVisitorManagementVo = baseMapper.selectVoById(id);
|
|
||||||
//获取ossId
|
//获取ossId
|
||||||
TbVisitorManagementVo tbVisitorManagementVo = baseMapper.selectVoById(id);
|
TbVisitorManagementVo tbVisitorManagementVo = baseMapper.selectVoById(id);
|
||||||
if (tbVisitorManagementVo.getFacePictures() == null) {
|
if (tbVisitorManagementVo.getFacePictures() != null) {
|
||||||
return baseMapper.selectVoById(id);
|
|
||||||
} else {
|
|
||||||
String facePictures = tbVisitorManagementVo.getFacePictures();
|
String facePictures = tbVisitorManagementVo.getFacePictures();
|
||||||
String url = remoteFileService.selectUrlByIds(facePictures);
|
String url = remoteFileService.selectUrlByIds(facePictures);
|
||||||
tbVisitorManagementVo.setUrl(url);
|
tbVisitorManagementVo.setUrl(url);
|
||||||
|
|
||||||
return baseMapper.selectVoById(id);
|
|
||||||
}
|
}
|
||||||
|
return tbVisitorManagementVo;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -131,6 +136,7 @@ public class TbVisitorManagementServiceImpl implements ITbVisitorManagementServi
|
|||||||
* @return 是否新增成功
|
* @return 是否新增成功
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public Boolean insertByBo(TbVisitorManagementBo bo) {
|
public Boolean insertByBo(TbVisitorManagementBo bo) {
|
||||||
QrCodeInfo info = RedisUtils.getCacheObject(GlobalConstants.CAPTCHA_CODE_KEY + "Qrcode" + bo.getQrCodeId());
|
QrCodeInfo info = RedisUtils.getCacheObject(GlobalConstants.CAPTCHA_CODE_KEY + "Qrcode" + bo.getQrCodeId());
|
||||||
RedisUtils.deleteKeys(GlobalConstants.CAPTCHA_CODE_KEY + "Qrcode" + bo.getQrCodeId());
|
RedisUtils.deleteKeys(GlobalConstants.CAPTCHA_CODE_KEY + "Qrcode" + bo.getQrCodeId());
|
||||||
@@ -142,20 +148,13 @@ public class TbVisitorManagementServiceImpl implements ITbVisitorManagementServi
|
|||||||
add.setTenantId(userInfoById.getTenantId());
|
add.setTenantId(userInfoById.getTenantId());
|
||||||
add.setCreateBy(userInfoById.getUserId());
|
add.setCreateBy(userInfoById.getUserId());
|
||||||
add.setUpdateById(userInfoById.getUserId());
|
add.setUpdateById(userInfoById.getUserId());
|
||||||
|
|
||||||
// //文件上传时,获取ossId
|
|
||||||
// String ossId = String.valueOf(remoteFileService.uploadImg(bo.getFacePictures().getBytes()).getOssId());
|
|
||||||
// add.setFacePictures(ossId);
|
|
||||||
|
|
||||||
add.setUpdateBy(userInfoById.getUserId());
|
add.setUpdateBy(userInfoById.getUserId());
|
||||||
add.setCreateDept(userInfoById.getDeptId());
|
add.setCreateDept(userInfoById.getDeptId());
|
||||||
boolean flag = baseMapper.insert(add) > 0;
|
boolean flag = baseMapper.insert(add) > 0;
|
||||||
|
Assert.isTrue(flag, "新增访客管理失败");
|
||||||
if (flag) {
|
if (flag) {
|
||||||
bo.setId(add.getId());
|
bo.setId(add.getId());
|
||||||
Long e8Id = syncE8PlatVisitor(bo);
|
syncE8PlatVisitor(bo);
|
||||||
add.setEEightId(e8Id);
|
|
||||||
baseMapper.updateById(add);
|
|
||||||
}
|
}
|
||||||
return flag;
|
return flag;
|
||||||
}
|
}
|
||||||
@@ -168,6 +167,7 @@ public class TbVisitorManagementServiceImpl implements ITbVisitorManagementServi
|
|||||||
* @return 是否新增成功
|
* @return 是否新增成功
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public Boolean insertH5ByBo(TbVisitorManagementBo bo) {
|
public Boolean insertH5ByBo(TbVisitorManagementBo bo) {
|
||||||
QrCodeInfo info = RedisUtils.getCacheObject(GlobalConstants.CAPTCHA_CODE_KEY + "Qrcode" + bo.getQrCodeId());
|
QrCodeInfo info = RedisUtils.getCacheObject(GlobalConstants.CAPTCHA_CODE_KEY + "Qrcode" + bo.getQrCodeId());
|
||||||
RedisUtils.deleteKeys(GlobalConstants.CAPTCHA_CODE_KEY + "Qrcode" + bo.getQrCodeId());
|
RedisUtils.deleteKeys(GlobalConstants.CAPTCHA_CODE_KEY + "Qrcode" + bo.getQrCodeId());
|
||||||
@@ -182,12 +182,10 @@ public class TbVisitorManagementServiceImpl implements ITbVisitorManagementServi
|
|||||||
add.setUpdateBy(userInfoById.getUserId());
|
add.setUpdateBy(userInfoById.getUserId());
|
||||||
add.setCreateDept(userInfoById.getDeptId());
|
add.setCreateDept(userInfoById.getDeptId());
|
||||||
boolean flag = baseMapper.insert(add) > 0;
|
boolean flag = baseMapper.insert(add) > 0;
|
||||||
|
Assert.isTrue(flag, "新增访客管理失败");
|
||||||
if (flag) {
|
if (flag) {
|
||||||
bo.setId(add.getId());
|
bo.setId(add.getId());
|
||||||
Long e8Id = syncE8PlatVisitor(bo);
|
syncE8PlatVisitor(bo);
|
||||||
add.setEEightId(e8Id);
|
|
||||||
baseMapper.updateById(add);
|
|
||||||
}
|
}
|
||||||
return flag;
|
return flag;
|
||||||
}
|
}
|
||||||
@@ -200,22 +198,13 @@ public class TbVisitorManagementServiceImpl implements ITbVisitorManagementServi
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Boolean insertVistorManagementByBo(TbVisitorManagementBo bo) {
|
public Boolean insertVistorManagementByBo(TbVisitorManagementBo bo) {
|
||||||
// QrCodeInfo info = RedisUtils.getCacheObject("Qrcode" + bo.getQrCodeId());
|
|
||||||
TbVisitorManagement add = MapstructUtils.convert(bo, TbVisitorManagement.class);
|
TbVisitorManagement add = MapstructUtils.convert(bo, TbVisitorManagement.class);
|
||||||
|
|
||||||
//文件上传时,获取ossId
|
|
||||||
// String ossId = String.valueOf(remoteFileService.uploadImg(bo.getFacePictures().getBytes()).getOssId());
|
|
||||||
// add.setFacePictures(ossId);
|
|
||||||
|
|
||||||
validEntityBeforeSave(add);
|
validEntityBeforeSave(add);
|
||||||
// add.setCreateById(info.getUserid());
|
|
||||||
boolean flag = baseMapper.insert(add) > 0;
|
boolean flag = baseMapper.insert(add) > 0;
|
||||||
if (flag) {
|
if (flag) {
|
||||||
assert add != null;
|
assert add != null;
|
||||||
bo.setId(add.getId());
|
bo.setId(add.getId());
|
||||||
Long e8Id = syncE8PlatVisitor(bo);
|
syncE8PlatVisitor(bo);
|
||||||
add.setEEightId(e8Id);
|
|
||||||
baseMapper.updateById(add);
|
|
||||||
}
|
}
|
||||||
return flag;
|
return flag;
|
||||||
}
|
}
|
||||||
@@ -225,9 +214,8 @@ public class TbVisitorManagementServiceImpl implements ITbVisitorManagementServi
|
|||||||
* 访客登记同步E8平台门禁
|
* 访客登记同步E8平台门禁
|
||||||
*
|
*
|
||||||
* @param visitor 访客信息
|
* @param visitor 访客信息
|
||||||
* @return E8平台访客ID
|
|
||||||
*/
|
*/
|
||||||
private Long syncE8PlatVisitor(TbVisitorManagementBo visitor) {
|
private void syncE8PlatVisitor(TbVisitorManagementBo visitor) {
|
||||||
RemoteVisitor remoteVisitor = new RemoteVisitor();
|
RemoteVisitor remoteVisitor = new RemoteVisitor();
|
||||||
remoteVisitor.setVisitorName(visitor.getVisitorName());
|
remoteVisitor.setVisitorName(visitor.getVisitorName());
|
||||||
remoteVisitor.setMobilePhone(visitor.getVisitorPhone());
|
remoteVisitor.setMobilePhone(visitor.getVisitorPhone());
|
||||||
@@ -235,7 +223,15 @@ public class TbVisitorManagementServiceImpl implements ITbVisitorManagementServi
|
|||||||
remoteVisitor.setVisitorStartTime(DateUtil.format(visitor.getVisitingBeginTime(), "yyyy-MM-dd HH:mm:ss"));
|
remoteVisitor.setVisitorStartTime(DateUtil.format(visitor.getVisitingBeginTime(), "yyyy-MM-dd HH:mm:ss"));
|
||||||
remoteVisitor.setVistorEndTime(DateUtil.format(visitor.getVisitingEndTime(), "yyyy-MM-dd HH:mm:ss"));
|
remoteVisitor.setVistorEndTime(DateUtil.format(visitor.getVisitingEndTime(), "yyyy-MM-dd HH:mm:ss"));
|
||||||
remoteVisitor.setVisitorFaceImg(visitor.getFacePictures());
|
remoteVisitor.setVisitorFaceImg(visitor.getFacePictures());
|
||||||
return remoteVisitorService.syncE8PlatVisitor(remoteVisitor);
|
Map<String, Object> res = remoteVisitorService.syncE8PlatVisitor(remoteVisitor);
|
||||||
|
LambdaUpdateWrapper<TbVisitorManagement> lambda = new LambdaUpdateWrapper<>();
|
||||||
|
lambda.eq(TbVisitorManagement::getId, visitor.getId());
|
||||||
|
if (Integer.parseInt(String.valueOf(res.get("code"))) == 200) {
|
||||||
|
lambda.set(TbVisitorManagement::getEEightId, Long.valueOf(res.get("data").toString()));
|
||||||
|
} else {
|
||||||
|
lambda.set(TbVisitorManagement::getRemark, res.get("data").toString());
|
||||||
|
}
|
||||||
|
baseMapper.update(null, lambda);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -272,4 +268,104 @@ public class TbVisitorManagementServiceImpl implements ITbVisitorManagementServi
|
|||||||
}
|
}
|
||||||
return baseMapper.deleteByIds(ids) > 0;
|
return baseMapper.deleteByIds(ids) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小程序新增访客邀约
|
||||||
|
*
|
||||||
|
* @param bo bean
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public Boolean insertByXcxBo(TbVisitorManagementBo bo) {
|
||||||
|
TbVisitorManagement add = MapstructUtils.convert(bo, TbVisitorManagement.class);
|
||||||
|
Assert.notNull(add, "数据处理失败");
|
||||||
|
assert add != null;
|
||||||
|
add.setType(1);
|
||||||
|
|
||||||
|
LoginResidentPerson person = LoginHelper.getLoginResident();
|
||||||
|
Assert.notNull(person, "用户信息不存在");
|
||||||
|
assert person != null;
|
||||||
|
|
||||||
|
ResidentPersonVo residentPersonVo = residentPersonService.queryById(person.getUserId());
|
||||||
|
add.setInterviewedPerson(person.getNickname());
|
||||||
|
add.setInterviewedUnit(person.getUnitName());
|
||||||
|
add.setInterviewedPhone(residentPersonVo.getPhone());
|
||||||
|
|
||||||
|
boolean flag = baseMapper.insert(add) > 0;
|
||||||
|
Assert.isTrue(flag, "小程序新增访客邀约失败");
|
||||||
|
if (flag) {
|
||||||
|
bo.setId(add.getId());
|
||||||
|
syncE8PlatVisitor(bo);
|
||||||
|
}
|
||||||
|
return flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小程序修改邀约信息
|
||||||
|
*
|
||||||
|
* @param bo bean
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public Boolean updateByXcxBo(TbVisitorManagementBo bo) {
|
||||||
|
TbVisitorManagement update = MapstructUtils.convert(bo, TbVisitorManagement.class);
|
||||||
|
Assert.notNull(update, "数据处理失败");
|
||||||
|
boolean flag = baseMapper.updateById(update) > 0;
|
||||||
|
Assert.isTrue(flag, "小程序修改邀约信息失败");
|
||||||
|
return flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小程序查询访客邀约详情
|
||||||
|
*
|
||||||
|
* @param id 主键
|
||||||
|
* @return vo
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public TbVisitorManagementVo queryByIdForXcx(Long id) {
|
||||||
|
//获取ossId
|
||||||
|
TbVisitorManagementVo tbVisitorManagementVo = baseMapper.selectVoById(id);
|
||||||
|
if (tbVisitorManagementVo.getFacePictures() != null) {
|
||||||
|
String facePictures = tbVisitorManagementVo.getFacePictures();
|
||||||
|
String url = remoteFileService.selectUrlByIds(facePictures);
|
||||||
|
tbVisitorManagementVo.setUrl(url);
|
||||||
|
}
|
||||||
|
return tbVisitorManagementVo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小程序查询本人邀约/预约列表
|
||||||
|
*
|
||||||
|
* @param type 列表类型
|
||||||
|
* @return list
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<TbVisitorManagementVo> queryMyListByXcx(Integer type) {
|
||||||
|
LoginResidentPerson person = LoginHelper.getLoginResident();
|
||||||
|
Assert.notNull(person, "用户信息不存在");
|
||||||
|
assert person != null;
|
||||||
|
ResidentPersonVo residentPersonVo = residentPersonService.queryById(person.getUserId());
|
||||||
|
LambdaQueryWrapper<TbVisitorManagement> qw = new LambdaQueryWrapper<>();
|
||||||
|
qw.eq(TbVisitorManagement::getInterviewedPerson, residentPersonVo.getUserName())
|
||||||
|
.eq(TbVisitorManagement::getInterviewedPhone, residentPersonVo.getPhone())
|
||||||
|
.eq(TbVisitorManagement::getType, type)
|
||||||
|
.orderByDesc(TbVisitorManagement::getCreateTime);
|
||||||
|
return baseMapper.selectVoList(qw);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小程序获取邀约二维码
|
||||||
|
*
|
||||||
|
* @param id 主键
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Map<String, Object> getQrCodeByIdForXcx(Long id) {
|
||||||
|
TbVisitorManagementVo vo = baseMapper.selectVoById(id);
|
||||||
|
Assert.notNull(vo, "数据不存在");
|
||||||
|
return remoteVisitorService.getQrCode(vo.getEEightId());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
package org.dromara.sis.dubbo;
|
package org.dromara.sis.dubbo;
|
||||||
|
|
||||||
import cn.hutool.core.lang.Assert;
|
import cn.hutool.core.lang.Assert;
|
||||||
|
import cn.hutool.json.JSONUtil;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.dubbo.config.annotation.DubboReference;
|
import org.apache.dubbo.config.annotation.DubboReference;
|
||||||
@@ -9,10 +10,15 @@ import org.dromara.resource.api.RemoteFileService;
|
|||||||
import org.dromara.sis.api.RemoteVisitorService;
|
import org.dromara.sis.api.RemoteVisitorService;
|
||||||
import org.dromara.sis.api.domain.RemoteVisitor;
|
import org.dromara.sis.api.domain.RemoteVisitor;
|
||||||
import org.dromara.sis.sdk.e8.E8PlatformApi;
|
import org.dromara.sis.sdk.e8.E8PlatformApi;
|
||||||
|
import org.dromara.sis.sdk.e8.domain.ApiResp;
|
||||||
import org.dromara.sis.sdk.e8.domain.visitors.req.VisitorAddReq;
|
import org.dromara.sis.sdk.e8.domain.visitors.req.VisitorAddReq;
|
||||||
import org.dromara.sis.sdk.e8.domain.visitors.res.VisitorAddRes;
|
import org.dromara.sis.sdk.e8.domain.visitors.res.VisitorAddRes;
|
||||||
import org.dromara.sis.sdk.e8.utils.ImageUtil;
|
import org.dromara.sis.sdk.e8.utils.ImageUtil;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author lsm
|
* @author lsm
|
||||||
* @apiNote RemoteVisitorServiceImpl
|
* @apiNote RemoteVisitorServiceImpl
|
||||||
@@ -36,7 +42,7 @@ public class RemoteVisitorServiceImpl implements RemoteVisitorService {
|
|||||||
* @return 访客ID
|
* @return 访客ID
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Long syncE8PlatVisitor(RemoteVisitor visitor) {
|
public Map<String, Object> syncE8PlatVisitor(RemoteVisitor visitor) {
|
||||||
try {
|
try {
|
||||||
byte[] imgByte = fileService.downloadToByteArray(Long.parseLong(visitor.getVisitorFaceImg()));
|
byte[] imgByte = fileService.downloadToByteArray(Long.parseLong(visitor.getVisitorFaceImg()));
|
||||||
Assert.notNull(imgByte, "下载访客照片失败");
|
Assert.notNull(imgByte, "下载访客照片失败");
|
||||||
@@ -53,12 +59,38 @@ public class RemoteVisitorServiceImpl implements RemoteVisitorService {
|
|||||||
req.setVisitorStartTime(visitor.getVisitorStartTime());
|
req.setVisitorStartTime(visitor.getVisitorStartTime());
|
||||||
req.setVistorEndTime(visitor.getVistorEndTime());
|
req.setVistorEndTime(visitor.getVistorEndTime());
|
||||||
req.setVisitorFaceImg(imgUrl);
|
req.setVisitorFaceImg(imgUrl);
|
||||||
VisitorAddRes res = e8PlatformApi.addVisitor(req);
|
ApiResp res = e8PlatformApi.addVisitor(req);
|
||||||
Assert.notNull(res, "e8平台新增访客登记失败");
|
Assert.notNull(res, "e8平台新增访客登记失败");
|
||||||
return res.getId();
|
|
||||||
|
return res.getCode() == 0
|
||||||
|
? Map.of("code", 200, "data",
|
||||||
|
JSONUtil.toBean(JSONUtil.toJsonStr(res.getResult()), VisitorAddRes.class).getId())
|
||||||
|
: Map.of("code", 500, "data", res.getMessage());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.info(e.getMessage());
|
log.info(e.getMessage());
|
||||||
return null;
|
return Map.of("code", 500, "data", "e8平台新增访客登记出错");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取访客二维码
|
||||||
|
*
|
||||||
|
* @param id 访客id
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Map<String, Object> getQrCode(Long id) {
|
||||||
|
try {
|
||||||
|
ApiResp res = e8PlatformApi.getVisitorQrCode(List.of(id));
|
||||||
|
Assert.notNull(res, "e8平台获取访客二维码失败");
|
||||||
|
return res.getCode() == 0
|
||||||
|
? Map.of("code", 200, "data",
|
||||||
|
JSONUtil.toList(JSONUtil.toJsonStr(res.getResult()), VisitorAddRes.class).get(0).getQrCodeStr())
|
||||||
|
: Map.of("code", 500, "data", res.getMessage());
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.info(e.getMessage());
|
||||||
|
return Map.of("code", 500, "data", "e8平台获取访客二维码出错");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
package org.dromara.sis.sdk.e8;
|
package org.dromara.sis.sdk.e8;
|
||||||
|
|
||||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||||
|
import org.dromara.sis.sdk.e8.domain.ApiResp;
|
||||||
import org.dromara.sis.sdk.e8.domain.QueryDto;
|
import org.dromara.sis.sdk.e8.domain.QueryDto;
|
||||||
import org.dromara.sis.sdk.e8.domain.accessControl.req.CustomerAuthAddReq;
|
import org.dromara.sis.sdk.e8.domain.accessControl.req.CustomerAuthAddReq;
|
||||||
import org.dromara.sis.sdk.e8.domain.accessControl.req.RemoteOpenDoorReq;
|
import org.dromara.sis.sdk.e8.domain.accessControl.req.RemoteOpenDoorReq;
|
||||||
@@ -20,7 +21,6 @@ import org.dromara.sis.sdk.e8.domain.lift.req.LiftAddReq;
|
|||||||
import org.dromara.sis.sdk.e8.domain.lift.req.LiftUpdateReq;
|
import org.dromara.sis.sdk.e8.domain.lift.req.LiftUpdateReq;
|
||||||
import org.dromara.sis.sdk.e8.domain.lift.res.LiftFindRes;
|
import org.dromara.sis.sdk.e8.domain.lift.res.LiftFindRes;
|
||||||
import org.dromara.sis.sdk.e8.domain.visitors.req.VisitorAddReq;
|
import org.dromara.sis.sdk.e8.domain.visitors.req.VisitorAddReq;
|
||||||
import org.dromara.sis.sdk.e8.domain.visitors.res.VisitorAddRes;
|
|
||||||
import org.dromara.sis.sdk.e8.domain.voucher.req.ChangeCardReq;
|
import org.dromara.sis.sdk.e8.domain.voucher.req.ChangeCardReq;
|
||||||
import org.dromara.sis.sdk.e8.domain.voucher.req.IssueVoucherReq;
|
import org.dromara.sis.sdk.e8.domain.voucher.req.IssueVoucherReq;
|
||||||
import org.dromara.sis.sdk.e8.domain.voucher.req.OperateVoucherReq;
|
import org.dromara.sis.sdk.e8.domain.voucher.req.OperateVoucherReq;
|
||||||
@@ -240,15 +240,15 @@ public interface E8PlatformApi {
|
|||||||
* 新增访客登记
|
* 新增访客登记
|
||||||
*
|
*
|
||||||
* @param req 入参
|
* @param req 入参
|
||||||
* @return VisitorAddRes
|
* @return ApiResp
|
||||||
*/
|
*/
|
||||||
VisitorAddRes addVisitor(VisitorAddReq req);
|
ApiResp addVisitor(VisitorAddReq req);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取访客二维码
|
* 获取访客二维码
|
||||||
*
|
*
|
||||||
* @param ids 访客ids
|
* @param ids 访客ids
|
||||||
* @return VisitorAddRes
|
* @return ApiResp
|
||||||
*/
|
*/
|
||||||
VisitorAddRes getVisitorQrCode(List<Long> ids);
|
ApiResp getVisitorQrCode(List<Long> ids);
|
||||||
}
|
}
|
||||||
|
@@ -31,7 +31,6 @@ import org.dromara.sis.sdk.e8.domain.lift.req.LiftFindReq;
|
|||||||
import org.dromara.sis.sdk.e8.domain.lift.req.LiftUpdateReq;
|
import org.dromara.sis.sdk.e8.domain.lift.req.LiftUpdateReq;
|
||||||
import org.dromara.sis.sdk.e8.domain.lift.res.LiftFindRes;
|
import org.dromara.sis.sdk.e8.domain.lift.res.LiftFindRes;
|
||||||
import org.dromara.sis.sdk.e8.domain.visitors.req.VisitorAddReq;
|
import org.dromara.sis.sdk.e8.domain.visitors.req.VisitorAddReq;
|
||||||
import org.dromara.sis.sdk.e8.domain.visitors.res.VisitorAddRes;
|
|
||||||
import org.dromara.sis.sdk.e8.domain.voucher.req.ChangeCardReq;
|
import org.dromara.sis.sdk.e8.domain.voucher.req.ChangeCardReq;
|
||||||
import org.dromara.sis.sdk.e8.domain.voucher.req.IssueVoucherReq;
|
import org.dromara.sis.sdk.e8.domain.voucher.req.IssueVoucherReq;
|
||||||
import org.dromara.sis.sdk.e8.domain.voucher.req.OperateVoucherReq;
|
import org.dromara.sis.sdk.e8.domain.voucher.req.OperateVoucherReq;
|
||||||
@@ -724,7 +723,7 @@ public class E8PlatformApiService implements E8PlatformApi {
|
|||||||
* @return VisitorAddRes
|
* @return VisitorAddRes
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public VisitorAddRes addVisitor(VisitorAddReq req) {
|
public ApiResp addVisitor(VisitorAddReq req) {
|
||||||
// 将添加请求对象转换为Map对象,以便后续API调用
|
// 将添加请求对象转换为Map对象,以便后续API调用
|
||||||
Map<String, Object> params = BeanUtil.beanToMap(req);
|
Map<String, Object> params = BeanUtil.beanToMap(req);
|
||||||
|
|
||||||
@@ -735,11 +734,11 @@ public class E8PlatformApiService implements E8PlatformApi {
|
|||||||
if (!apiResp.getSuccess()) {
|
if (!apiResp.getSuccess()) {
|
||||||
log.error("E8新增访客信息失败 errorMsg:{}", apiResp);
|
log.error("E8新增访客信息失败 errorMsg:{}", apiResp);
|
||||||
// 如果API调用失败,返回null
|
// 如果API调用失败,返回null
|
||||||
return null;
|
return apiResp;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 返回API调用是否成功的标志
|
// 返回API调用是否成功的标志
|
||||||
return JSONUtil.toBean(JSONUtil.toJsonStr(apiResp.getResult()), VisitorAddRes.class);
|
return apiResp;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -749,7 +748,7 @@ public class E8PlatformApiService implements E8PlatformApi {
|
|||||||
* @return String
|
* @return String
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public VisitorAddRes getVisitorQrCode(List<Long> ids) {
|
public ApiResp getVisitorQrCode(List<Long> ids) {
|
||||||
Map<String, Object> params = new HashMap<>();
|
Map<String, Object> params = new HashMap<>();
|
||||||
params.put("ids", ids);
|
params.put("ids", ids);
|
||||||
|
|
||||||
@@ -760,11 +759,11 @@ public class E8PlatformApiService implements E8PlatformApi {
|
|||||||
if (!apiResp.getSuccess()) {
|
if (!apiResp.getSuccess()) {
|
||||||
log.error("E8获取访客二维码失败 errorMsg:{}", apiResp);
|
log.error("E8获取访客二维码失败 errorMsg:{}", apiResp);
|
||||||
// 如果API调用失败,返回null
|
// 如果API调用失败,返回null
|
||||||
return null;
|
return apiResp;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 返回API调用是否成功的标志
|
// 返回API调用是否成功的标志
|
||||||
return JSONUtil.toList(JSONUtil.toJsonStr(apiResp.getResult()), VisitorAddRes.class).get(0);
|
// return JSONUtil.toList(JSONUtil.toJsonStr(apiResp.getResult()), VisitorAddRes.class).get(0);
|
||||||
|
return apiResp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user