Jelajahi Sumber

新增会议屏模板接口

fuyuchuan 4 hari lalu
induk
melakukan
a341beac01

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

@@ -70,7 +70,7 @@ public class MybatisGenerator {
         // strategy.setTablePrefix("t_"); // 表名前缀
         strategy.setEntityLombokModel(true); //使用lombok
         //修改自己想要生成的表
-        strategy.setInclude("meeting_device_heartbeat");  // 逆向工程使用的表   如果要生成多个,这里可以传入String[]
+        strategy.setInclude("meeting_template");  // 逆向工程使用的表   如果要生成多个,这里可以传入String[]
         mpg.setStrategy(strategy);
 
         // 关闭默认 xml 生成,调整生成 至 根目录

+ 80 - 0
service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/controller/web/MeetingTemplateController.java

@@ -0,0 +1,80 @@
+package com.usky.meeting.controller.web;
+
+
+import com.usky.common.core.bean.ApiResult;
+import com.usky.common.log.annotation.Log;
+import com.usky.common.log.enums.BusinessType;
+import com.usky.meeting.domain.MeetingTemplate;
+import com.usky.meeting.service.MeetingTemplateService;
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 会议屏模板表 前端控制器
+ * </p>
+ *
+ * @author fu
+ * @since 2025-11-18
+ */
+@Slf4j
+@RestController
+@RequestMapping("/meetingTemplate")
+public class MeetingTemplateController {
+
+    @Autowired
+    private MeetingTemplateService meetingTemplateService;
+
+    /**
+     * 新增和修改
+     * @param meetingTemplate  会议屏模板
+     * @return 添加结果
+     */
+    @PostMapping("/addAndUpdate")
+    @Log(title = "新增/修改会议屏模板", businessType = BusinessType.INSERT)
+    public ApiResult<Void> addAndUpdate(@RequestBody MeetingTemplate meetingTemplate) {
+        meetingTemplateService.addAndUpdate(meetingTemplate);
+        return ApiResult.success();
+    }
+
+    /**
+     * 删除
+     * @param templateId  会议屏模板id
+     * @return 删除结果
+     */
+    @DeleteMapping("/{templateId}")
+    @Log(title = "删除会议屏模板", businessType = BusinessType.DELETE)
+    public ApiResult<Void> remove(@PathVariable Long templateId) {
+        meetingTemplateService.deleteById(templateId);
+        return ApiResult.success();
+    }
+
+    /**
+     * 获取会议屏模板列表
+     * @param name  模板名称
+     * @param type  模板类型
+     * @param layout  模板布局
+     * @return 模板列表
+     */
+    @GetMapping("/templateList")
+    public ApiResult<List<MeetingTemplate>> list(@RequestParam(required = false) String name,
+                                                 @RequestParam(required = false) Integer type,
+                                                 @RequestParam(required = false) String layout) {
+        return ApiResult.success(meetingTemplateService.templateList(name, type, layout));
+    }
+
+    @PutMapping("/batchPublishing")
+    @Log(title = "批量发布会议屏模板", businessType = BusinessType.UPDATE)
+    public ApiResult<Void> batchPublishing(@RequestParam Integer templateId,
+                                           @RequestParam List<String> deviceCodes) {
+        meetingTemplateService.batchPublishing(templateId, deviceCodes);
+        return ApiResult.success();
+    }
+}
+

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

@@ -145,4 +145,9 @@ public class MeetingDevice implements Serializable {
      * 设备IP
      */
     private String ipAddr;
+
+    /**
+     * 模板id
+     */
+    private Integer templateId;
 }

+ 91 - 0
service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/domain/MeetingTemplate.java

@@ -0,0 +1,91 @@
+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 com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 会议屏模板表
+ * </p>
+ *
+ * @author fu
+ * @since 2025-11-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class MeetingTemplate implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 会议屏模板表主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 模板名称
+     */
+    private String name;
+
+    /**
+     * 分辨率
+     */
+    private String fbl;
+
+    /**
+     * 模板数据
+     */
+    private String s1Con;
+
+    /**
+     * 模板预览图
+     */
+    private String s1Cover;
+
+    /**
+     * 布局(all:全部、landscape:横屏、portrait:竖屏)
+     */
+    private String layout;
+
+    /**
+     * 模板类型(1.系统模板、2.自定义模板)
+     */
+    private Boolean type;
+
+    /**
+     * 创建者
+     */
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime createTime;
+
+    /**
+     * 更新者
+     */
+    private String updateBy;
+
+    /**
+     * 更新时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime updateTime;
+
+    /**
+     * 租户ID
+     */
+    private Integer tenantId;
+
+
+}

+ 18 - 0
service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/mapper/MeetingTemplateMapper.java

@@ -0,0 +1,18 @@
+package com.usky.meeting.mapper;
+
+import com.usky.meeting.domain.MeetingTemplate;
+import com.usky.common.mybatis.core.CrudMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * <p>
+ * 会议屏模板表 Mapper 接口
+ * </p>
+ *
+ * @author fu
+ * @since 2025-11-18
+ */
+@Repository
+public interface MeetingTemplateMapper extends CrudMapper<MeetingTemplate> {
+
+}

+ 45 - 0
service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/service/MeetingTemplateService.java

@@ -0,0 +1,45 @@
+package com.usky.meeting.service;
+
+import com.usky.meeting.domain.MeetingTemplate;
+import com.usky.common.mybatis.core.CrudService;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 会议屏模板表 服务类
+ * </p>
+ *
+ * @author fu
+ * @since 2025-11-18
+ */
+public interface MeetingTemplateService extends CrudService<MeetingTemplate> {
+
+    /**
+     * 新增和修改
+     * @param meetingTemplate   会议屏模板
+     */
+    void addAndUpdate(MeetingTemplate meetingTemplate);
+
+    /**
+     * 删除
+     * @param templateId  会议屏模板ID
+     */
+    void deleteById(Long templateId);
+
+    /**
+     * 获取模板列表
+     * @param name  模板名称
+     * @param type  模板类型
+     * @param layout  模板布局
+     * @return  模板列表
+     */
+    List<MeetingTemplate> templateList(String name, Integer type, String layout);
+
+    /**
+     * 批量发布
+     * @param templateId  模板ID
+     * @param deviceCodes  设备编号
+     */
+    void batchPublishing(Integer templateId, List<String> deviceCodes);
+}

+ 129 - 0
service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/service/impl/MeetingTemplateServiceImpl.java

@@ -0,0 +1,129 @@
+package com.usky.meeting.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.usky.common.core.exception.BusinessException;
+import com.usky.common.security.utils.SecurityUtils;
+import com.usky.meeting.domain.MeetingDevice;
+import com.usky.meeting.domain.MeetingTemplate;
+import com.usky.meeting.mapper.MeetingDeviceMapper;
+import com.usky.meeting.mapper.MeetingTemplateMapper;
+import com.usky.meeting.service.MeetingTemplateService;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import com.usky.system.model.LoginUser;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.security.Security;
+import java.time.LocalDateTime;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * <p>
+ * 会议屏模板表 服务实现类
+ * </p>
+ *
+ * @author fu
+ * @since 2025-11-18
+ */
+@Service
+public class MeetingTemplateServiceImpl extends AbstractCrudService<MeetingTemplateMapper, MeetingTemplate> implements MeetingTemplateService {
+
+    @Autowired
+    private MeetingDeviceMapper meetingDeviceMapper;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void addAndUpdate(MeetingTemplate dto) {
+
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        if (loginUser == null || loginUser.getTenantId() == null) {
+            throw new BusinessException("未获取到登录用户!");
+        }
+        String username = loginUser.getUsername();
+        Integer tenantId = loginUser.getTenantId();
+        LocalDateTime now = LocalDateTime.now();
+
+        if (dto.getId() != null) {
+            dto.setUpdateTime(now);
+            dto.setUpdateBy(username);
+            this.updateById(dto);
+        } else {
+            MeetingTemplate tpl = new MeetingTemplate();
+            BeanUtils.copyProperties(dto, tpl);
+            tpl.setCreateTime(now);
+            tpl.setCreateBy(username);
+            tpl.setTenantId(tenantId);
+            this.save(tpl);
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteById(Long templateId) {
+        if (templateId == null) {
+            throw new BusinessException("会议模板ID不能为空!");
+        }
+        Integer tenantId = SecurityUtils.getTenantId();
+
+        LambdaQueryWrapper<MeetingTemplate> lambdaQuery = new LambdaQueryWrapper<MeetingTemplate>();
+        lambdaQuery.eq(MeetingTemplate::getId, templateId)
+                .eq(MeetingTemplate::getTenantId, tenantId);
+        Integer i = baseMapper.selectCount(lambdaQuery);
+        if (i == 0) {
+            throw new BusinessException("会议模板不存在!");
+        }
+
+        LambdaUpdateWrapper<MeetingDevice> unwrap = new LambdaUpdateWrapper<>();
+        unwrap.eq(MeetingDevice::getTemplateId, templateId)
+                .eq(MeetingDevice::getTenantId, tenantId);
+        MeetingDevice updater = new MeetingDevice();
+        updater.setTemplateId(null);
+        meetingDeviceMapper.update(updater, unwrap);
+
+        LambdaQueryWrapper<MeetingTemplate> tplWrap = new LambdaQueryWrapper<>();
+        tplWrap.eq(MeetingTemplate::getId, templateId)
+                .eq(MeetingTemplate::getTenantId, tenantId);
+        remove(tplWrap);
+    }
+
+    @Override
+    public List<MeetingTemplate> templateList(String name, Integer type, String layout) {
+        LambdaQueryWrapper<MeetingTemplate> lambdaQuery = new LambdaQueryWrapper<>();
+        lambdaQuery.eq(MeetingTemplate::getTenantId, SecurityUtils.getTenantId())
+                .like(StringUtils.isNotBlank(name), MeetingTemplate::getName, name)
+                .eq(type != null, MeetingTemplate::getType, type)
+                .eq(StringUtils.isNotBlank(layout), MeetingTemplate::getLayout, layout);
+        return baseMapper.selectList(lambdaQuery);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void batchPublishing(Integer templateId, List<String> deviceCodes) {
+        if (deviceCodes == null || deviceCodes.isEmpty()) {
+            throw new BusinessException("模板ID和设备编码不能为空!");
+        }
+        Integer tenantId = SecurityUtils.getTenantId();
+
+        LambdaQueryWrapper<MeetingTemplate> lambdaQuery = new LambdaQueryWrapper<>();
+        lambdaQuery.eq(MeetingTemplate::getId, templateId)
+                .eq(MeetingTemplate::getTenantId, tenantId);
+        MeetingTemplate template = baseMapper.selectOne(lambdaQuery);
+        if (template == null) {
+            throw new BusinessException("模板不存在!");
+        }
+
+        LambdaUpdateWrapper<MeetingDevice> unwrap = new LambdaUpdateWrapper<>();
+        unwrap.eq(MeetingDevice::getTenantId, tenantId)
+                .in(MeetingDevice::getDeviceCode, deviceCodes);
+        MeetingDevice updater = new MeetingDevice();
+        updater.setTemplateId(templateId);
+        meetingDeviceMapper.update(updater, unwrap);
+
+        baseMapper.delete(lambdaQuery);
+    }
+}

+ 1 - 0
service-meeting/service-meeting-biz/src/main/resources/mapper/meeting/MeetingDeviceMapper.xml

@@ -23,6 +23,7 @@
         <result column="tenant_id" property="tenantId"/>
         <result column="device_code" property="deviceCode"/>
         <result column="ip_addr" property="ipAddr"/>
+        <result column="template_id" property="templateId"/>
     </resultMap>
 
 </mapper>

+ 21 - 0
service-meeting/service-meeting-biz/src/main/resources/mapper/meeting/MeetingTemplateMapper.xml

@@ -0,0 +1,21 @@
+<?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.MeetingTemplateMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.meeting.domain.MeetingTemplate">
+        <id column="id" property="id" />
+        <result column="name" property="name" />
+        <result column="fbl" property="fbl" />
+        <result column="s1_con" property="s1Con" />
+        <result column="s1_cover" property="s1Cover" />
+        <result column="layout" property="layout" />
+        <result column="type" property="type" />
+        <result column="create_by" property="createBy" />
+        <result column="create_time" property="createTime" />
+        <result column="update_by" property="updateBy" />
+        <result column="update_time" property="updateTime" />
+        <result column="tenant_id" property="tenantId" />
+    </resultMap>
+
+</mapper>