Browse Source

Merge branch 'fanghuisheng' of uskycloud/usky-modules into master

fanghuisheng 3 ngày trước cách đây
mục cha
commit
dda0fd204a
32 tập tin đã thay đổi với 531 bổ sung520 xóa
  1. 0 7
      service-eg/service-eg-biz/src/main/java/com/usky/eg/mapper/EgDeviceMapper.java
  2. 6 0
      service-eg/service-eg-biz/src/main/java/com/usky/eg/mapper/SysPersonMapper.java
  3. 32 0
      service-eg/service-eg-biz/src/main/java/com/usky/eg/service/impl/EgDeviceServiceImpl.java
  4. 4 0
      service-eg/service-eg-biz/src/main/java/com/usky/eg/service/vo/EgDeviceBindFacePersonVO.java
  5. 0 24
      service-eg/service-eg-biz/src/main/resources/mapper/eg/EgDeviceMapper.xml
  6. 13 0
      service-eg/service-eg-biz/src/main/resources/mapper/eg/SysPersonMapper.xml
  7. 0 10
      service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/annotation/FaceLog.java
  8. 0 50
      service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/annotation/aspect/FaceAspect.java
  9. 23 2
      service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/controller/web/MeetingDeviceController.java
  10. 0 182
      service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/controller/web/MeetingFaceController.java
  11. 0 60
      service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/controller/web/MeetingFaceVefLogController.java
  12. 6 0
      service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/domain/MeetingDevice.java
  13. 25 0
      service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/domain/MeetingDevicePersonBind.java
  14. 0 75
      service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/domain/MeetingFaceVefLog.java
  15. 48 0
      service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/domain/SysPerson.java
  16. 29 0
      service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/mapper/MeetingDevicePersonBindMapper.java
  17. 0 6
      service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/mapper/MeetingFaceMapper.java
  18. 0 16
      service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/mapper/MeetingFaceVefLogMapper.java
  19. 21 0
      service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/mapper/SysPersonMapper.java
  20. 0 19
      service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/repository/MeetingInfoRepository.java
  21. 12 1
      service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/service/MeetingDeviceService.java
  22. 0 16
      service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/service/MeetingFaceVefLogService.java
  23. 192 0
      service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/service/impl/MeetingDeviceServiceImpl.java
  24. 0 20
      service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/service/impl/MeetingFaceVefLogServiceImpl.java
  25. 0 1
      service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/service/impl/MeetingFileServiceImpl.java
  26. 23 0
      service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/service/vo/MeetingDeviceBindFacePersonQueryVO.java
  27. 27 0
      service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/service/vo/MeetingDeviceBindFacePersonVO.java
  28. 18 0
      service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/service/vo/MeetingDeviceBindPersonRequest.java
  29. 34 0
      service-meeting/service-meeting-biz/src/main/resources/mapper/meeting/MeetingDevicePersonBindMapper.xml
  30. 0 15
      service-meeting/service-meeting-biz/src/main/resources/mapper/meeting/MeetingFaceMapper.xml
  31. 0 16
      service-meeting/service-meeting-biz/src/main/resources/mapper/meeting/MeetingFaceVefLogMapper.xml
  32. 18 0
      service-meeting/service-meeting-biz/src/main/resources/mapper/meeting/SysPersonMapper.xml

+ 0 - 7
service-eg/service-eg-biz/src/main/java/com/usky/eg/mapper/EgDeviceMapper.java

@@ -15,13 +15,6 @@ import org.springframework.stereotype.Repository;
  */
 @Repository
 public interface EgDeviceMapper extends CrudMapper<EgDevice> {
-    void insertMeetingFaceDevice(@Param("fid") Integer fid, @Param("egDeviceId") Integer egDeviceId);
-
-    void deleteMeetingFaceDevice(@Param("egDeviceId") Integer egDeviceId);
 
     Integer sysTenantId(@Param("domain") String domain);
-
-    Integer getMeetingFaceData(@Param("userId") Long userId);
-
-    Integer[] getMeetingFaceDeviceList(@Param("fid") Integer fid);
 }

+ 6 - 0
service-eg/service-eg-biz/src/main/java/com/usky/eg/mapper/SysPersonMapper.java

@@ -7,6 +7,7 @@ import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 人员信息表 Mapper
@@ -19,4 +20,9 @@ public interface SysPersonMapper extends BaseMapper<SysPerson> {
      */
     @Select("SELECT id, full_name, face_base, face_name, card_num FROM sys_person WHERE face_base IS NOT NULL AND face_base != '' AND face_status = 0")
     List<SysPerson> selectAllValidFace();
+
+    /**
+     * 按人员ID批量查询关联用户ID(sys_user_person)
+     */
+    List<Map<String, Object>> selectUserIdsByPersonIds(@Param("personIds") List<Integer> personIds);
 }

+ 32 - 0
service-eg/service-eg-biz/src/main/java/com/usky/eg/service/impl/EgDeviceServiceImpl.java

@@ -543,9 +543,18 @@ public class EgDeviceServiceImpl extends AbstractCrudService<EgDeviceMapper, EgD
         page = sysPersonMapper.selectPage(page, personWrapper);
 
         List<SysPerson> records = page.getRecords();
+        List<Integer> pagePersonIds = new ArrayList<>();
+        for (SysPerson p : records) {
+            if (p != null && p.getId() != null) {
+                pagePersonIds.add(p.getId());
+            }
+        }
+        Map<Integer, Long> personUserIdMap = buildPersonUserIdMap(pagePersonIds);
         List<EgDeviceBindFacePersonVO> rows = new ArrayList<>(records.size());
         for (SysPerson p : records) {
             EgDeviceBindFacePersonVO vo = new EgDeviceBindFacePersonVO();
+            vo.setId(p.getId());
+            vo.setUserId(personUserIdMap.get(p.getId()));
             vo.setFullName(p.getFullName());
             vo.setAge(p.getAge());
             vo.setGender(p.getGender());
@@ -559,6 +568,29 @@ public class EgDeviceServiceImpl extends AbstractCrudService<EgDeviceMapper, EgD
         return new CommonPage<>(rows, page.getTotal(), sz, cur);
     }
 
+    private Map<Integer, Long> buildPersonUserIdMap(List<Integer> personIds) {
+        Map<Integer, Long> map = new HashMap<>();
+        if (CollectionUtils.isEmpty(personIds)) {
+            return map;
+        }
+        List<Map<String, Object>> rows = sysPersonMapper.selectUserIdsByPersonIds(personIds);
+        if (CollectionUtils.isEmpty(rows)) {
+            return map;
+        }
+        for (Map<String, Object> row : rows) {
+            if (row == null) {
+                continue;
+            }
+            Object personIdObj = row.get("personId");
+            Object userIdObj = row.get("userId");
+            if (personIdObj == null || userIdObj == null) {
+                continue;
+            }
+            map.put(Integer.valueOf(personIdObj.toString()), Long.valueOf(userIdObj.toString()));
+        }
+        return map;
+    }
+
     @Override
     public void bindPerson(Integer deviceId, String personIds, Integer isLoginNotify) {
         if (deviceId == null) {

+ 4 - 0
service-eg/service-eg-biz/src/main/java/com/usky/eg/service/vo/EgDeviceBindFacePersonVO.java

@@ -10,6 +10,10 @@ public class EgDeviceBindFacePersonVO implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
+    /** 人员主键ID(sys_person.id) */
+    private Integer id;
+    /** 用户ID(sys_user_person.user_id) */
+    private Long userId;
     private String fullName;
     private Integer age;
     private Integer gender;

+ 0 - 24
service-eg/service-eg-biz/src/main/resources/mapper/eg/EgDeviceMapper.xml

@@ -25,12 +25,6 @@
         <result column="password" property="password" />
         <result column="work_status" property="workStatus" />
     </resultMap>
-    <insert id="insertMeetingFaceDevice" parameterType="integer">
-        insert into meeting_face_device (face_id,device_id) value (#{fid}, #{egDeviceId});
-    </insert>
-    <delete id="deleteMeetingFaceDevice" parameterType="integer">
-        delete from meeting_face_device where device_id = #{egDeviceId};
-    </delete>
     <select id="sysTenantId" resultType="integer">
         select id
         from sys_tenant
@@ -40,23 +34,5 @@
             </if>
         </where>
     </select>
-    <select id="getMeetingFaceData" resultType="integer">
-        select mf.fid as fid
-        from meeting_face mf
-        <where>
-            <if test="userId != null">
-                and mf.user_id = #{userId}
-            </if>
-        </where>
-    </select>
-    <select id="getMeetingFaceDeviceList" resultType="integer">
-        select mfd.device_id as deviceFid
-        from meeting_face_device mfd
-        <where>
-            <if test="fid != null">
-                and mfd.face_id = #{fid}
-            </if>
-        </where>
-    </select>
 
 </mapper>

+ 13 - 0
service-eg/service-eg-biz/src/main/resources/mapper/eg/SysPersonMapper.xml

@@ -29,4 +29,17 @@
         <result column="card_num" property="cardNum"/>
     </resultMap>
 
+    <select id="selectUserIdsByPersonIds" resultType="java.util.HashMap">
+        select person_id as personId, user_id as userId
+        from sys_user_person
+        <where>
+            <if test="personIds != null and personIds.size() > 0">
+                and person_id in
+                <foreach collection="personIds" item="id" open="(" separator="," close=")">
+                    #{id}
+                </foreach>
+            </if>
+        </where>
+    </select>
+
 </mapper>

+ 0 - 10
service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/annotation/FaceLog.java

@@ -1,10 +0,0 @@
-package com.usky.meeting.annotation;
-
-import java.lang.annotation.*;
-
-@Documented
-@Retention(RetentionPolicy.RUNTIME)
-@Target(value = ElementType.METHOD)
-public @interface FaceLog {
-
-}

+ 0 - 50
service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/annotation/aspect/FaceAspect.java

@@ -1,50 +0,0 @@
-package com.usky.meeting.annotation.aspect;
-
-
-
-import com.usky.meeting.domain.MeetingFaceVefLog;
-import com.usky.meeting.service.MeetingFaceVefLogService;
-import com.usky.meeting.service.vo.FaceResultVO;
-import com.usky.meeting.service.vo.MeetingFaceVO;
-import org.aspectj.lang.JoinPoint;
-import org.aspectj.lang.annotation.AfterReturning;
-import org.aspectj.lang.annotation.Aspect;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import java.time.LocalDateTime;
-import java.util.Objects;
-
-/**
- * @author tanyongpeng
- * <p>方法执行后,添加日志</p>
- **/
-@Component
-@Aspect
-public class FaceAspect {
-
-    @Autowired
-    private MeetingFaceVefLogService faceVefLogService;
-
-    @AfterReturning(value = "@annotation(com.usky.meeting.annotation.FaceLog)",returning = "res")
-    public void addLog(JoinPoint joinPoint ,Object res){
-        MeetingFaceVO result = (MeetingFaceVO)res;
-        MeetingFaceVefLog faceVefLog = new MeetingFaceVefLog();
-        faceVefLog.setVefTime(LocalDateTime.now());
-        faceVefLog.setVefCode(result.getCode());
-        faceVefLog.setVefMsg(result.getMsg());
-        faceVefLog.setLoginName(result.getFaceName());
-        faceVefLog.setTenantId(result.getTenantId());
-        if(Objects.nonNull(result.getFaceBase())){
-            faceVefLog.setFaceBase(result.getFaceBase());
-            faceVefLog.setVefType(1);
-        }
-        if(Objects.nonNull(result.getCardNum())){
-            faceVefLog.setCardNum(result.getCardNum());
-            faceVefLog.setVefType(2);
-        }
-        faceVefLogService.save(faceVefLog);
-    }
-
-
-}

+ 23 - 2
service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/controller/web/MeetingDeviceController.java

@@ -7,13 +7,14 @@ import com.usky.common.log.annotation.Log;
 import com.usky.common.log.enums.BusinessType;
 import com.usky.meeting.domain.MeetingDevice;
 import com.usky.meeting.service.MeetingDeviceService;
+import com.usky.meeting.service.vo.MeetingDeviceBindFacePersonQueryVO;
+import com.usky.meeting.service.vo.MeetingDeviceBindFacePersonVO;
+import com.usky.meeting.service.vo.MeetingDeviceBindPersonRequest;
 import com.usky.meeting.service.vo.MeetingDeviceRequestVO;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import org.springframework.stereotype.Controller;
-
 /**
  * <p>
  * 设备表 前端控制器
@@ -40,6 +41,15 @@ public class MeetingDeviceController {
         return ApiResult.success(meetingDeviceService.meetingDeviceList(requestVO));
     }
 
+    /**
+     * 分页查询设备已绑定人员(可通过 deviceCode 过滤)
+     */
+    @PostMapping("/bindFacePerson/page")
+    public ApiResult<CommonPage<MeetingDeviceBindFacePersonVO>> pageBindFacePersons(
+            @RequestBody MeetingDeviceBindFacePersonQueryVO queryVO) {
+        return ApiResult.success(meetingDeviceService.pageBindFacePersons(queryVO));
+    }
+
     /**
      * 新增
      * @param meetingDevice
@@ -76,5 +86,16 @@ public class MeetingDeviceController {
         return ApiResult.success();
     }
 
+    /**
+     * 设备人员授权(覆盖式)
+     * personIds 为空字符串时解除该设备全部授权
+     */
+    @Log(title = "会议设备人员授权", businessType = BusinessType.UPDATE)
+    @PostMapping("/bindPerson")
+    public ApiResult<Void> bindPerson(@RequestBody MeetingDeviceBindPersonRequest request) {
+        meetingDeviceService.bindPerson(request);
+        return ApiResult.success();
+    }
+
 }
 

+ 0 - 182
service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/controller/web/MeetingFaceController.java

@@ -1,182 +0,0 @@
-package com.usky.meeting.controller.web;
-
-
-import cn.hutool.core.util.StrUtil;
-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.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.usky.common.core.bean.ApiResult;
-import com.usky.common.core.bean.CommonPage;
-import com.usky.common.core.exception.BusinessException;
-import com.usky.common.security.utils.SecurityUtils;
-import com.usky.meeting.annotation.FaceLog;
-import com.usky.meeting.domain.MeetingFace;
-import com.usky.meeting.domain.SysDept;
-import com.usky.meeting.mapper.MeetingFaceMapper;
-import com.usky.meeting.mapper.SysDeptMapper;
-import com.usky.meeting.repository.MeetingInfoRepository;
-import com.usky.meeting.service.MeetingFaceService;
-import com.usky.meeting.service.vo.DmpDeviceInfoVO;
-import com.usky.meeting.service.vo.FaceResultVO;
-import com.usky.meeting.service.vo.MeetingFaceRequestVO;
-import com.usky.meeting.service.vo.MeetingFaceVO;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.models.auth.In;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.web.bind.annotation.*;
-
-import org.springframework.stereotype.Controller;
-
-import java.time.LocalDateTime;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
-/**
- * <p>
- *  前端控制器
- * </p>
- *
- * @author zyj
- * @since 2024-03-08
- */
-@RestController
-@RequestMapping("/meetingFace")
-@Api("人脸验证接口")
-@Slf4j
-public class MeetingFaceController {
-    @Autowired
-    MeetingFaceService faceService;
-    @Autowired
-    MeetingInfoRepository meetingInfoRepository;
-    @Autowired
-    private MeetingFaceMapper meetingFaceMapper;
-    @Autowired
-    private SysDeptMapper sysDeptMapper;
-
-    @PostMapping("/vef")
-    @ApiOperation(value="人脸验证", notes="根据传入的base64编码和数据的base64编码进行对比")
-    @FaceLog
-    public MeetingFaceVO faceVef(@RequestBody MeetingFaceRequestVO requestVO){
-        return faceService.vef(requestVO);
-    }
-
-    @GetMapping("/faceList")
-    @ApiOperation(value = "人脸列表",notes = "查询所有的人脸信息")
-    public ApiResult<CommonPage<MeetingFace>> faceList(
-            @RequestParam Integer current,
-            @RequestParam Integer size,
-            @RequestParam(required = false) String faceName,
-            @RequestParam(required = false) String faceStatus,
-            @RequestParam(required = false) Integer fid,
-            @RequestParam(required = false) Long userId,
-            @RequestParam(required = false) Integer deptId
-    ){
-        IPage<MeetingFace> page = faceService.page(new Page(current, size), new QueryWrapper<MeetingFace>()
-                .like(StrUtil.isNotBlank(faceName),"face_name",faceName)
-                .like(StrUtil.isNotBlank(faceStatus),"face_status",faceStatus)
-                .eq(fid != null,"fid",fid)
-                .eq(userId != null,"user_id",userId)
-                .eq(deptId != null,"dept_id",deptId)
-                .eq("tenant_id", SecurityUtils.getTenantId()));
-        if(page.getRecords().size() > 0){
-//            for (int i = 0; i < page.getRecords().size(); i++) {
-//                if(Objects.nonNull(page.getRecords().get(i).getBindDevice()) || StringUtils.isNotBlank(page.getRecords().get(i).getBindDevice())){
-//                    String[] deviceIdStr = page.getRecords().get(i).getBindDevice().split(",");
-//                    Integer[] deviceIds = Arrays.stream(deviceIdStr).map(Integer::parseInt).toArray(Integer[]::new);
-//                    List<DmpDeviceInfoVO> list = meetingFaceMapper.getDeviceInfo(Arrays.asList(deviceIds));
-//                    page.getRecords().get(i).setDeviceInfos(list);
-//
-//                }
-//            }
-
-            QueryWrapper<SysDept> queryWrapper = Wrappers.query();
-            queryWrapper.eq("del_flag",0).eq("tenant_id",SecurityUtils.getTenantId());
-            List<SysDept> sysDeptList = sysDeptMapper.selectList(queryWrapper);
-            if(sysDeptList.size() > 0){
-                for (int i = 0; i < page.getRecords().size(); i++) {
-                    Integer deptId1 = page.getRecords().get(i).getDeptId();
-                    for (int j = 0; j < sysDeptList.size(); j++) {
-                        if(deptId1.equals(Integer.valueOf(sysDeptList.get(j).getDeptId().toString()))){
-                            page.getRecords().get(i).setSysDept(sysDeptList.get(j));
-                            break;
-                        }
-                    }
-
-                }
-            }
-
-        }
-        return ApiResult.success(new CommonPage<>(page.getRecords(),page.getTotal(),size,current));
-    }
-
-
-    @GetMapping("/faceDelete/{fid}")
-    @ApiOperation(value = "删除人脸",notes = "根据id进行删除")
-    public FaceResultVO faceDelete(@PathVariable Integer fid){
-        faceService.removeById(fid);
-        meetingInfoRepository.delMeetingFaceDevice(fid);
-        return FaceResultVO.success("删除成功");
-    }
-
-    @GetMapping("/info/{fid}")
-    @ApiOperation(value = "查询方法",notes = "根据id查询人脸信息")
-    public FaceResultVO info(@PathVariable Integer fid){
-        return FaceResultVO.success(faceService.getById(fid));
-    }
-
-    @PostMapping("/save")
-    @ApiOperation(value = "添加")
-    public FaceResultVO save(@RequestBody MeetingFace face){
-        Long userId = face.getUserId();
-        LambdaQueryWrapper<MeetingFace> queryWrapper = Wrappers.lambdaQuery();
-        queryWrapper.eq(MeetingFace::getUserId,userId);
-        List<MeetingFace> list = faceService.list(queryWrapper);
-        if(CollectionUtils.isNotEmpty(list)){
-            throw new BusinessException("人员已绑定,请检查");
-        }
-
-        face.setVefNum(0);
-        face.setCreateTime(LocalDateTime.now());
-        face.setTenantId(SecurityUtils.getTenantId());
-        String[] devicefids = new String[0];
-        if(Objects.nonNull(face.getBindDevice()) || StringUtils.isNotBlank(face.getBindDevice())){
-            devicefids = face.getBindDevice().split(",");
-        }
-        faceService.save(face);
-        if(devicefids.length > 0){
-            for (int i = 0; i < devicefids.length; i++) {
-                meetingInfoRepository.insertMeetingFaceDevice(face.getFid(),Integer.parseInt(devicefids[i]));
-            }
-        }
-        return FaceResultVO.success("添加成功");
-    }
-
-    @PostMapping("/update")
-    @ApiOperation(value = "修改")
-    public FaceResultVO update(@RequestBody MeetingFace face){
-        faceService.updateById(face);
-        meetingInfoRepository.delMeetingFaceDevice(face.getFid());
-        String[] devicefids = new String[0];
-        if(Objects.nonNull(face.getBindDevice()) || StringUtils.isNotBlank(face.getBindDevice())){
-            devicefids = face.getBindDevice().split(",");
-        }
-        if(devicefids.length > 0){
-            for (int i = 0; i < devicefids.length; i++) {
-                meetingInfoRepository.insertMeetingFaceDevice(face.getFid(),Integer.parseInt(devicefids[i]));
-            }
-        }
-        return FaceResultVO.success("修改成功");
-    }
-}
-

+ 0 - 60
service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/controller/web/MeetingFaceVefLogController.java

@@ -1,60 +0,0 @@
-package com.usky.meeting.controller.web;
-
-
-import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.usky.common.core.bean.ApiResult;
-import com.usky.common.core.bean.CommonPage;
-import com.usky.meeting.domain.MeetingFaceVefLog;
-import com.usky.meeting.service.MeetingFaceVefLogService;
-import com.usky.meeting.service.vo.FaceResultVO;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- *  前端控制器
- * </p>
- *
- * @author zyj
- * @since 2024-03-08
- */
-@RestController
-@RequestMapping("/meetingFaceVefLog")
-@Api("人脸日志接口")
-@Slf4j
-public class MeetingFaceVefLogController {
-
-    @Autowired
-    MeetingFaceVefLogService faceVefLogService;
-
-    @GetMapping("/list")
-    @ApiOperation(value = "日志接口",notes = "查询所有验证人脸日志信息")
-    public ApiResult<CommonPage<MeetingFaceVefLog>> faceList(
-            @RequestParam Integer current,
-            @RequestParam Integer size,
-            @RequestParam(required = false) String startTime,
-            @RequestParam(required = false) String endTime,
-            @RequestParam(required = false) String vefCode,
-            @RequestParam(required = false) String loginName
-    ){
-        IPage<MeetingFaceVefLog> page = faceVefLogService.page(new Page(current, size), new QueryWrapper<MeetingFaceVefLog>()
-                .like(StrUtil.isNotBlank(vefCode),"vef_code",vefCode)
-                .like(StrUtil.isNotBlank(loginName),"login_name",loginName)
-                .between(StrUtil.isNotBlank(startTime) && StrUtil.isNotBlank(endTime),"vef_time",startTime,endTime)
-                .orderByDesc("vef_time"));
-        return ApiResult.success(new CommonPage<>(page.getRecords(),page.getTotal(),size,current));
-    }
-
-}
-

+ 6 - 0
service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/domain/MeetingDevice.java

@@ -166,4 +166,10 @@ public class MeetingDevice implements Serializable {
      * 设备方向 1横屏 2竖屏
      */
     private Integer deviceDirection;
+
+    /**
+     * 绑定人员ID(逗号分隔,来自 meeting_device_person_bind)
+     */
+    @TableField(exist = false)
+    private String bindPerson;
 }

+ 25 - 0
service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/domain/MeetingDevicePersonBind.java

@@ -0,0 +1,25 @@
+package com.usky.meeting.domain;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * 会议设备人员绑定表 meeting_device_person_bind
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class MeetingDevicePersonBind implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /** 设备主键ID(meeting_device.device_uuid) */
+    private Long deviceUuid;
+
+    /** 人员ID */
+    private Integer personId;
+
+    /** 是否打开登录通知(1 是 0 否 默认0) */
+    private Integer isLoginNotify;
+}

+ 0 - 75
service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/domain/MeetingFaceVefLog.java

@@ -1,75 +0,0 @@
-package com.usky.meeting.domain;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import java.time.LocalDateTime;
-import java.io.Serializable;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * <p>
- * 
- * </p>
- *
- * @author zyj
- * @since 2024-03-08
- */
-@Data
-@EqualsAndHashCode(callSuper = false)
-public class MeetingFaceVefLog implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * 主键
-     */
-    @TableId(value = "lid", type = IdType.AUTO)
-    private Integer lid;
-
-    /**
-     * 验证时间
-     */
-    private LocalDateTime vefTime;
-
-    /**
-     * 返回code
-     */
-    private Integer vefCode;
-
-    /**
-     * 返回的消息
-     */
-    private String vefMsg;
-
-    /**
-     * 验证人
-     */
-    private String loginName;
-
-    /**
-     * 组织机构ID
-     */
-    private Integer deptId;
-
-    /**
-     * 租户ID
-     */
-    private Integer tenantId;
-
-    /**
-     * 图片数据 base_64编码
-     */
-    private String faceBase;
-
-    /**
-     * 卡号
-     */
-    private String cardNum;
-
-    /**
-     * 验证类型(1、人脸 2、卡号)
-     */
-    private Integer vefType;
-
-}

+ 48 - 0
service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/domain/SysPerson.java

@@ -0,0 +1,48 @@
+package com.usky.meeting.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 人员信息表 sys_person
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("sys_person")
+public class SysPerson implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    private String fullName;
+    private Integer age;
+    private Integer gender;
+    private String address;
+    private Integer educationDegree;
+    private String idNumber;
+    private String linkPhone;
+    private Long postId;
+    private Long deptId;
+    private LocalDateTime entryTime;
+    private String certificateUrl1;
+    private String certificateUrl2;
+    private String certificateUrl3;
+    private String creator;
+    private LocalDateTime createTime;
+    private String updatePerson;
+    private LocalDateTime updateTime;
+    private String faceBase;
+    private Integer vefNum;
+    private String faceName;
+    private String remark;
+    private Byte faceStatus;
+    private String cardNum;
+}

+ 29 - 0
service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/mapper/MeetingDevicePersonBindMapper.java

@@ -0,0 +1,29 @@
+package com.usky.meeting.mapper;
+
+import com.usky.meeting.domain.MeetingDevicePersonBind;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 会议设备人员绑定 Mapper
+ */
+@Repository
+public interface MeetingDevicePersonBindMapper {
+
+    /**
+     * 根据设备UUID删除绑定关系
+     */
+    void deleteByDeviceUuid(@Param("deviceUuid") Long deviceUuid);
+
+    /**
+     * 根据多个设备UUID查询绑定关系
+     */
+    List<MeetingDevicePersonBind> selectByDeviceUuids(@Param("deviceUuids") List<Long> deviceUuids);
+
+    /**
+     * 新增绑定关系
+     */
+    void insert(MeetingDevicePersonBind bind);
+}

+ 0 - 6
service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/mapper/MeetingFaceMapper.java

@@ -2,13 +2,8 @@ package com.usky.meeting.mapper;
 
 import com.usky.meeting.domain.MeetingFace;
 import com.usky.common.mybatis.core.CrudMapper;
-import com.usky.meeting.service.vo.DmpDeviceInfoVO;
-import io.swagger.models.auth.In;
-import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
-import java.util.List;
-
 /**
  * <p>
  *  Mapper 接口
@@ -19,5 +14,4 @@ import java.util.List;
  */
 @Repository
 public interface MeetingFaceMapper extends CrudMapper<MeetingFace> {
-    List<DmpDeviceInfoVO> getDeviceInfo(@Param("deviceIdList") List<Integer> deviceIdList);
 }

+ 0 - 16
service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/mapper/MeetingFaceVefLogMapper.java

@@ -1,16 +0,0 @@
-package com.usky.meeting.mapper;
-
-import com.usky.meeting.domain.MeetingFaceVefLog;
-import com.usky.common.mybatis.core.CrudMapper;
-
-/**
- * <p>
- *  Mapper 接口
- * </p>
- *
- * @author zyj
- * @since 2024-03-08
- */
-public interface MeetingFaceVefLogMapper extends CrudMapper<MeetingFaceVefLog> {
-
-}

+ 21 - 0
service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/mapper/SysPersonMapper.java

@@ -0,0 +1,21 @@
+package com.usky.meeting.mapper;
+
+import com.usky.common.mybatis.core.CrudMapper;
+import com.usky.meeting.domain.SysPerson;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 人员信息表 Mapper
+ */
+@Repository
+public interface SysPersonMapper extends CrudMapper<SysPerson> {
+
+    /**
+     * 按人员ID批量查询关联用户ID(sys_user_person)
+     */
+    List<Map<String, Object>> selectUserIdsByPersonIds(@Param("personIds") List<Integer> personIds);
+}

+ 0 - 19
service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/repository/MeetingInfoRepository.java

@@ -306,25 +306,6 @@ public interface MeetingInfoRepository extends JpaRepository<MeetingInfo, Long>,
     @Query(value = "select * from meeting_info where room_id = :roomId",nativeQuery = true)
     List<MeetingInfo> queryAllMeetingByRoomId(@Param("roomId") Long roomId);
 
-    /**
-     * 新增人脸设备关联表记录
-     * @param faceId  人脸主键ID
-     * @param deviceId  设备主键ID
-     */
-    @Transactional
-    @Modifying
-    @Query(value = "insert into meeting_face_device (face_id,device_id) values (:faceId,:deviceId)",nativeQuery = true)
-    void insertMeetingFaceDevice(@Param("faceId") Integer faceId, @Param("deviceId") Integer deviceId);
-
-    /**
-     * 删除人脸设备关联表记录
-     * @param faceId
-     */
-    @Transactional
-    @Modifying
-    @Query(value = "delete from meeting_face_device where face_id = :faceId",nativeQuery = true)
-    void delMeetingFaceDevice(@Param("faceId") Integer faceId);
-
 //
 //
 //    /**

+ 12 - 1
service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/service/MeetingDeviceService.java

@@ -3,8 +3,10 @@ package com.usky.meeting.service;
 import com.usky.common.core.bean.CommonPage;
 import com.usky.meeting.domain.MeetingDevice;
 import com.usky.common.mybatis.core.CrudService;
+import com.usky.meeting.service.vo.MeetingDeviceBindFacePersonQueryVO;
+import com.usky.meeting.service.vo.MeetingDeviceBindFacePersonVO;
+import com.usky.meeting.service.vo.MeetingDeviceBindPersonRequest;
 import com.usky.meeting.service.vo.MeetingDeviceRequestVO;
-import org.springframework.web.bind.annotation.RequestBody;
 
 /**
  * <p>
@@ -24,4 +26,13 @@ public interface MeetingDeviceService extends CrudService<MeetingDevice> {
 
     void remove(Long deviceId);
 
+    /**
+     * 设备人员授权(覆盖式):先清空该设备绑定,再按 personIds 重新绑定;空字符串表示解除全部授权
+     */
+    void bindPerson(MeetingDeviceBindPersonRequest request);
+
+    /**
+     * 分页查询设备已绑定人员(支持 deviceCode / 姓名 / 人脸状态)
+     */
+    CommonPage<MeetingDeviceBindFacePersonVO> pageBindFacePersons(MeetingDeviceBindFacePersonQueryVO queryVO);
 }

+ 0 - 16
service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/service/MeetingFaceVefLogService.java

@@ -1,16 +0,0 @@
-package com.usky.meeting.service;
-
-import com.usky.meeting.domain.MeetingFaceVefLog;
-import com.usky.common.mybatis.core.CrudService;
-
-/**
- * <p>
- *  服务类
- * </p>
- *
- * @author zyj
- * @since 2024-03-08
- */
-public interface MeetingFaceVefLogService extends CrudService<MeetingFaceVefLog> {
-
-}

+ 192 - 0
service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/service/impl/MeetingDeviceServiceImpl.java

@@ -19,6 +19,9 @@ import com.usky.meeting.repository.MeetingRoomRepository;
 import com.usky.meeting.service.MeetingDeviceService;
 import com.usky.common.mybatis.core.AbstractCrudService;
 import com.usky.meeting.service.MeetingRoomService;
+import com.usky.meeting.service.vo.MeetingDeviceBindFacePersonQueryVO;
+import com.usky.meeting.service.vo.MeetingDeviceBindFacePersonVO;
+import com.usky.meeting.service.vo.MeetingDeviceBindPersonRequest;
 import com.usky.meeting.service.vo.MeetingDeviceRequestVO;
 import net.bytebuddy.implementation.bytecode.Throw;
 import org.aspectj.weaver.patterns.ThisOrTargetAnnotationPointcut;
@@ -56,6 +59,10 @@ public class MeetingDeviceServiceImpl extends AbstractCrudService<MeetingDeviceM
     private MeetingDeviceHeartbeatMapper heartbeatMapper;
     @Autowired
     private MeetingTemplateMapper meetingTemplateMapper;
+    @Autowired
+    private MeetingDevicePersonBindMapper meetingDevicePersonBindMapper;
+    @Autowired
+    private SysPersonMapper sysPersonMapper;
 
     @Override
     public CommonPage<MeetingDevice> meetingDeviceList(MeetingDeviceRequestVO requestVO) {
@@ -174,11 +181,54 @@ public class MeetingDeviceServiceImpl extends AbstractCrudService<MeetingDeviceM
                     MeetingDevice::getTemplateId,
                     buildIdMap(meetingTemplateList, MeetingTemplate::getId),
                     MeetingDevice::setMeetingTemplate);
+
+            // 5. 填充绑定人员
+            fillBindPerson(page.getRecords());
         }
 
         return new CommonPage<>(page.getRecords(), page.getTotal(), size, current);
     }
 
+    /**
+     * 根据设备UUID集合查询 meeting_device_person_bind,将 person_id 按逗号拼接后写入 bindPerson
+     */
+    private void fillBindPerson(List<MeetingDevice> devices) {
+        if (CollectionUtils.isEmpty(devices)) {
+            return;
+        }
+        List<Long> deviceUuids = devices.stream()
+                .map(MeetingDevice::getDeviceUuid)
+                .filter(Objects::nonNull)
+                .distinct()
+                .collect(Collectors.toList());
+        if (deviceUuids.isEmpty()) {
+            return;
+        }
+        List<MeetingDevicePersonBind> bindList = meetingDevicePersonBindMapper.selectByDeviceUuids(deviceUuids);
+        Map<Long, List<String>> devicePersonMap = new HashMap<>();
+        if (!CollectionUtils.isEmpty(bindList)) {
+            for (MeetingDevicePersonBind bind : bindList) {
+                if (bind.getDeviceUuid() == null || bind.getPersonId() == null) {
+                    continue;
+                }
+                devicePersonMap
+                        .computeIfAbsent(bind.getDeviceUuid(), k -> new ArrayList<>())
+                        .add(String.valueOf(bind.getPersonId()));
+            }
+        }
+        for (MeetingDevice device : devices) {
+            if (device == null || device.getDeviceUuid() == null) {
+                continue;
+            }
+            List<String> personIds = devicePersonMap.get(device.getDeviceUuid());
+            if (personIds != null && !personIds.isEmpty()) {
+                device.setBindPerson(String.join(",", personIds));
+            } else {
+                device.setBindPerson("");
+            }
+        }
+    }
+
     /**
      * 构建ID到对象的Map,用于快速查找
      * @param dataList 待处理的列表
@@ -286,6 +336,148 @@ public class MeetingDeviceServiceImpl extends AbstractCrudService<MeetingDeviceM
         // remoteIotTaskService.deleteDeviceInfo(deviceId.toString());
     }
 
+    @Override
+    public void bindPerson(MeetingDeviceBindPersonRequest request) {
+        if (request == null || request.getDeviceUuid() == null) {
+            throw new BusinessException("设备UUID不能为空");
+        }
+        Long deviceUuid = request.getDeviceUuid();
+        MeetingDevice device = this.getById(deviceUuid);
+        Optional.ofNullable(device).orElseThrow(() -> new BusinessException("会议设备信息不存在"));
+
+        // 覆盖式:先清空原有绑定
+        meetingDevicePersonBindMapper.deleteByDeviceUuid(deviceUuid);
+
+        String personIds = request.getPersonIds();
+        // 空字符串视为解除全部授权
+        if (!StringUtils.isNotBlank(personIds)) {
+            return;
+        }
+
+        String[] personIdArr = personIds.split(",");
+        for (String personIdStr : personIdArr) {
+            if (!StringUtils.isNotBlank(personIdStr)) {
+                continue;
+            }
+            MeetingDevicePersonBind bind = new MeetingDevicePersonBind();
+            bind.setDeviceUuid(deviceUuid);
+            bind.setPersonId(Integer.parseInt(personIdStr.trim()));
+            bind.setIsLoginNotify(0);
+            meetingDevicePersonBindMapper.insert(bind);
+        }
+    }
+
+    @Override
+    public CommonPage<MeetingDeviceBindFacePersonVO> pageBindFacePersons(MeetingDeviceBindFacePersonQueryVO queryVO) {
+        Integer cur = queryVO.getCurrent();
+        Integer sz = queryVO.getSize();
+        IPage<SysPerson> page = new Page<>(cur, sz);
+
+        List<Long> deviceUuids = new ArrayList<>();
+        if (StringUtils.isNotBlank(queryVO.getDeviceCode())) {
+            MeetingDevice tempDevice = deviceMapper.selectOne(Wrappers.<MeetingDevice>lambdaQuery()
+                    .eq(MeetingDevice::getDeviceCode, queryVO.getDeviceCode()));
+            if (tempDevice == null) {
+                return new CommonPage<>(new ArrayList<>(), 0L, sz, cur);
+            }
+            MeetingDevice device = deviceMapper.selectOne(Wrappers.<MeetingDevice>lambdaQuery()
+                    .eq(MeetingDevice::getDeviceCode, queryVO.getDeviceCode())
+                    .eq(MeetingDevice::getTenantId, tempDevice.getTenantId()));
+            if (device == null || device.getDeviceUuid() == null) {
+                return new CommonPage<>(new ArrayList<>(), 0L, sz, cur);
+            }
+            deviceUuids.add(device.getDeviceUuid());
+        } else {
+            List<MeetingDevice> devices = deviceMapper.selectList(Wrappers.<MeetingDevice>lambdaQuery()
+                    .eq(MeetingDevice::getTenantId, SecurityUtils.getTenantId()));
+            if (!CollectionUtils.isEmpty(devices)) {
+                for (MeetingDevice d : devices) {
+                    if (d != null && d.getDeviceUuid() != null) {
+                        deviceUuids.add(d.getDeviceUuid());
+                    }
+                }
+            }
+        }
+
+        if (deviceUuids.isEmpty()) {
+            return new CommonPage<>(new ArrayList<>(), 0L, sz, cur);
+        }
+
+        List<MeetingDevicePersonBind> bindList = meetingDevicePersonBindMapper.selectByDeviceUuids(deviceUuids);
+        LinkedHashSet<Integer> personIdSet = new LinkedHashSet<>();
+        if (!CollectionUtils.isEmpty(bindList)) {
+            for (MeetingDevicePersonBind b : bindList) {
+                if (b.getPersonId() != null) {
+                    personIdSet.add(b.getPersonId());
+                }
+            }
+        }
+        if (personIdSet.isEmpty()) {
+            return new CommonPage<>(new ArrayList<>(), 0L, sz, cur);
+        }
+        List<Integer> personIds = new ArrayList<>(personIdSet);
+
+        LambdaQueryWrapper<SysPerson> personWrapper = Wrappers.lambdaQuery();
+        personWrapper.in(SysPerson::getId, personIds);
+        if (StringUtils.isNotBlank(queryVO.getFullName())) {
+            personWrapper.like(SysPerson::getFullName, queryVO.getFullName());
+        }
+        Integer faceStatusFilter = queryVO.getFaceStatus();
+        if (faceStatusFilter != null) {
+            personWrapper.eq(SysPerson::getFaceStatus, faceStatusFilter.byteValue());
+        }
+        personWrapper.orderByAsc(SysPerson::getId);
+        page = sysPersonMapper.selectPage(page, personWrapper);
+
+        List<SysPerson> records = page.getRecords();
+        List<Integer> pagePersonIds = new ArrayList<>();
+        for (SysPerson p : records) {
+            if (p != null && p.getId() != null) {
+                pagePersonIds.add(p.getId());
+            }
+        }
+        Map<Integer, Long> personUserIdMap = buildPersonUserIdMap(pagePersonIds);
+        List<MeetingDeviceBindFacePersonVO> rows = new ArrayList<>(records.size());
+        for (SysPerson p : records) {
+            MeetingDeviceBindFacePersonVO vo = new MeetingDeviceBindFacePersonVO();
+            vo.setId(p.getId());
+            vo.setUserId(personUserIdMap.get(p.getId()));
+            vo.setFullName(p.getFullName());
+            vo.setAge(p.getAge());
+            vo.setGender(p.getGender());
+            vo.setLinkPhone(p.getLinkPhone());
+            vo.setFaceBase(p.getFaceBase());
+            vo.setVefNum(p.getVefNum());
+            vo.setFaceStatus(p.getFaceStatus());
+            vo.setCardNum(p.getCardNum());
+            rows.add(vo);
+        }
+        return new CommonPage<>(rows, page.getTotal(), sz, cur);
+    }
+
+    private Map<Integer, Long> buildPersonUserIdMap(List<Integer> personIds) {
+        Map<Integer, Long> map = new HashMap<>();
+        if (CollectionUtils.isEmpty(personIds)) {
+            return map;
+        }
+        List<Map<String, Object>> rows = sysPersonMapper.selectUserIdsByPersonIds(personIds);
+        if (CollectionUtils.isEmpty(rows)) {
+            return map;
+        }
+        for (Map<String, Object> row : rows) {
+            if (row == null) {
+                continue;
+            }
+            Object personIdObj = row.get("personId");
+            Object userIdObj = row.get("userId");
+            if (personIdObj == null || userIdObj == null) {
+                continue;
+            }
+            map.put(Integer.valueOf(personIdObj.toString()), Long.valueOf(userIdObj.toString()));
+        }
+        return map;
+    }
+
     public boolean checkNameUnique(MeetingDevice meetingDevice) {
         Long deviceId = null == meetingDevice.getDeviceUuid() ? -1 : meetingDevice.getDeviceUuid();
         LambdaQueryWrapper<MeetingDevice> queryWrapper = Wrappers.lambdaQuery();

+ 0 - 20
service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/service/impl/MeetingFaceVefLogServiceImpl.java

@@ -1,20 +0,0 @@
-package com.usky.meeting.service.impl;
-
-import com.usky.meeting.domain.MeetingFaceVefLog;
-import com.usky.meeting.mapper.MeetingFaceVefLogMapper;
-import com.usky.meeting.service.MeetingFaceVefLogService;
-import com.usky.common.mybatis.core.AbstractCrudService;
-import org.springframework.stereotype.Service;
-
-/**
- * <p>
- *  服务实现类
- * </p>
- *
- * @author zyj
- * @since 2024-03-08
- */
-@Service
-public class MeetingFaceVefLogServiceImpl extends AbstractCrudService<MeetingFaceVefLogMapper, MeetingFaceVefLog> implements MeetingFaceVefLogService {
-
-}

+ 0 - 1
service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/service/impl/MeetingFileServiceImpl.java

@@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.usky.common.core.bean.CommonPage;
 import com.usky.common.security.utils.SecurityUtils;
-import com.usky.meeting.domain.MeetingFace;
 import com.usky.meeting.domain.MeetingFile;
 import com.usky.meeting.mapper.MeetingFileMapper;
 import com.usky.meeting.service.MeetingFileService;

+ 23 - 0
service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/service/vo/MeetingDeviceBindFacePersonQueryVO.java

@@ -0,0 +1,23 @@
+package com.usky.meeting.service.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 会议设备绑定人员分页查询参数
+ */
+@Data
+public class MeetingDeviceBindFacePersonQueryVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private Integer current;
+    private Integer size;
+    /** 设备编码,空则当前租户全部设备 */
+    private String deviceCode;
+    /** 姓名模糊,可空 */
+    private String fullName;
+    /** 人脸状态 0/1,可空 */
+    private Integer faceStatus;
+}

+ 27 - 0
service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/service/vo/MeetingDeviceBindFacePersonVO.java

@@ -0,0 +1,27 @@
+package com.usky.meeting.service.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 会议设备绑定人员列表项
+ */
+@Data
+public class MeetingDeviceBindFacePersonVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /** 人员主键ID(sys_person.id) */
+    private Integer id;
+    /** 用户ID(sys_user_person.user_id) */
+    private Long userId;
+    private String fullName;
+    private Integer age;
+    private Integer gender;
+    private String linkPhone;
+    private String faceBase;
+    private Integer vefNum;
+    private Byte faceStatus;
+    private String cardNum;
+}

+ 18 - 0
service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/service/vo/MeetingDeviceBindPersonRequest.java

@@ -0,0 +1,18 @@
+package com.usky.meeting.service.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+/**
+ * 会议设备人员授权请求
+ */
+@Data
+public class MeetingDeviceBindPersonRequest {
+
+    /** 会议设备 UUID(meeting_device.device_uuid) */
+    @JsonFormat(shape = JsonFormat.Shape.STRING)
+    private Long deviceUuid;
+
+    /** 人员 ID,逗号分隔;空字符串表示清空授权 */
+    private String personIds;
+}

+ 34 - 0
service-meeting/service-meeting-biz/src/main/resources/mapper/meeting/MeetingDevicePersonBindMapper.xml

@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.usky.meeting.mapper.MeetingDevicePersonBindMapper">
+
+    <resultMap id="BaseResultMap" type="com.usky.meeting.domain.MeetingDevicePersonBind">
+        <result column="device_uuid" property="deviceUuid"/>
+        <result column="person_id" property="personId"/>
+        <result column="is_login_notify" property="isLoginNotify"/>
+    </resultMap>
+
+    <delete id="deleteByDeviceUuid">
+        delete from meeting_device_person_bind
+        where device_uuid = #{deviceUuid}
+    </delete>
+
+    <select id="selectByDeviceUuids" resultMap="BaseResultMap">
+        select device_uuid, person_id, is_login_notify
+        from meeting_device_person_bind
+        <where>
+            <if test="deviceUuids != null and deviceUuids.size() > 0">
+                and device_uuid in
+                <foreach collection="deviceUuids" item="id" open="(" separator="," close=")">
+                    #{id}
+                </foreach>
+            </if>
+        </where>
+    </select>
+
+    <insert id="insert" parameterType="com.usky.meeting.domain.MeetingDevicePersonBind">
+        insert into meeting_device_person_bind (device_uuid, person_id, is_login_notify)
+        values (#{deviceUuid}, #{personId}, #{isLoginNotify})
+    </insert>
+
+</mapper>

+ 0 - 15
service-meeting/service-meeting-biz/src/main/resources/mapper/meeting/MeetingFaceMapper.xml

@@ -17,20 +17,5 @@
         <result column="tenant_id" property="tenantId" />
         <result column="user_id" property="userId" />
     </resultMap>
-    <select id="getDeviceInfo" resultType="com.usky.meeting.service.vo.DmpDeviceInfoVO">
-        SELECT dd.id,dd.device_id,dd.device_name,dd.product_id,dd.tenant_id,dd.company_code,dd.install_address,dd.service_status,dd.product_code,dd.device_uuid
-            FROM dmp_device dd
-        <where>
-            <if test="deviceIdList != null and deviceIdList.size() > 0">
-                AND dd.id in
-                <foreach item="item" collection="deviceIdList" open="(" separator="," close=")">
-                    #{item}
-                </foreach>
-            </if>
-            <if test="1 == 1">
-                and dd.delete_flag = 0
-            </if>
-        </where>
-    </select>
 
 </mapper>

+ 0 - 16
service-meeting/service-meeting-biz/src/main/resources/mapper/meeting/MeetingFaceVefLogMapper.xml

@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.usky.meeting.mapper.MeetingFaceVefLogMapper">
-
-    <!-- 通用查询映射结果 -->
-    <resultMap id="BaseResultMap" type="com.usky.meeting.domain.MeetingFaceVefLog">
-        <id column="lid" property="lid" />
-        <result column="vef_time" property="vefTime" />
-        <result column="vef_code" property="vefCode" />
-        <result column="vef_msg" property="vefMsg" />
-        <result column="login_name" property="loginName" />
-        <result column="dept_id" property="deptId" />
-        <result column="tenant_id" property="tenantId" />
-    </resultMap>
-
-</mapper>

+ 18 - 0
service-meeting/service-meeting-biz/src/main/resources/mapper/meeting/SysPersonMapper.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.usky.meeting.mapper.SysPersonMapper">
+
+    <select id="selectUserIdsByPersonIds" resultType="java.util.HashMap">
+        select person_id as personId, user_id as userId
+        from sys_user_person
+        <where>
+            <if test="personIds != null and personIds.size() > 0">
+                and person_id in
+                <foreach collection="personIds" item="id" open="(" separator="," close=")">
+                    #{id}
+                </foreach>
+            </if>
+        </where>
+    </select>
+
+</mapper>