Răsfoiți Sursa

feat:新增房间功能模块并增加对应的逻辑代码

黄渊昊 5 luni în urmă
părinte
comite
c4d14f2567
19 a modificat fișierele cu 995 adăugiri și 4 ștergeri
  1. 45 4
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/controller/MonitorTargetController.java
  2. 13 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/entity/MonitorTarget.java
  3. 68 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetAddWithRoomParam.java
  4. 88 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetEditWithRoomParam.java
  5. 6 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetPageParam.java
  6. 19 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/service/MonitorTargetService.java
  7. 46 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/service/impl/MonitorTargetServiceImpl.java
  8. 133 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/targetroom/controller/TargetRoomController.java
  9. 77 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/targetroom/entity/TargetRoom.java
  10. 34 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/targetroom/enums/TargetRoomEnum.java
  11. 54 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/targetroom/listener/RoomListener.java
  12. 25 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/targetroom/mapper/TargetRoomMapper.java
  13. 5 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/targetroom/mapper/mapping/TargetRoomMapper.xml
  14. 46 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/targetroom/param/TargetRoomAddParam.java
  15. 51 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/targetroom/param/TargetRoomEditParam.java
  16. 35 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/targetroom/param/TargetRoomIdParam.java
  17. 55 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/targetroom/param/TargetRoomPageParam.java
  18. 83 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/targetroom/service/TargetRoomService.java
  19. 112 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/targetroom/service/impl/TargetRoomServiceImpl.java

+ 45 - 4
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/controller/MonitorTargetController.java

@@ -25,10 +25,7 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 import vip.xiaonuo.coldchain.modular.monitortarget.entity.MonitorTarget;
-import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetAddParam;
-import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetEditParam;
-import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetIdParam;
-import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetPageParam;
+import vip.xiaonuo.coldchain.modular.monitortarget.param.*;
 import vip.xiaonuo.coldchain.modular.monitortarget.service.MonitorTargetService;
 import vip.xiaonuo.common.annotation.CommonLog;
 import vip.xiaonuo.common.pojo.CommonResult;
@@ -62,6 +59,19 @@ public class MonitorTargetController {
         return CommonResult.data(monitorTargetService.page(monitorTargetPageParam));
     }
 
+    /**
+     * 根据房间获取监控对象管理分页
+     *
+     * @author 黄渊昊
+     * @date 2024/11/13 16:56
+     */
+    @Operation(summary = "根据房间获取监控对象管理分页")
+    @SaCheckPermission("/coldchain/monitortarget/pageWithRoom")
+    @GetMapping("/coldchain/monitortarget/pageWithRoom")
+    public CommonResult<Page<MonitorTarget>> pageWithRoom(MonitorTargetPageParam monitorTargetPageParam) {
+        return CommonResult.data(monitorTargetService.page(monitorTargetPageParam));
+    }
+
     /**
      * 添加监控对象管理
      *
@@ -92,6 +102,37 @@ public class MonitorTargetController {
         return CommonResult.ok();
     }
 
+
+    /**
+     * 根据房间添加监控对象管理
+     *
+     * @author 黄渊昊
+     * @date 2024/11/13 16:56
+     */
+    @Operation(summary = "根据房间添加监控对象管理")
+    @CommonLog("根据房间添加监控对象管理")
+    @SaCheckPermission("/coldchain/monitortarget/addWithRoom")
+    @PostMapping("/coldchain/monitortarget/addWithRoom")
+    public CommonResult<String> addWithRoom(@RequestBody @Valid MonitorTargetAddWithRoomParam monitorTargetAddWithRoomParam) {
+        monitorTargetService.addWithRoom(monitorTargetAddWithRoomParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 根据房间编辑监控对象管理
+     *
+     * @author 黄渊昊
+     * @date 2024/11/13 16:56
+     */
+    @Operation(summary = "根据房间编辑监控对象管理")
+    @CommonLog("根据房间编辑监控对象管理")
+    @SaCheckPermission("/coldchain/monitortarget/editWithRoom")
+    @PostMapping("/coldchain/monitortarget/editWithRoom")
+    public CommonResult<String> editWithRoom(@RequestBody @Valid MonitorTargetEditWithRoomParam monitorTargetEditWithRoomParam) {
+        monitorTargetService.editWithRoom(monitorTargetEditWithRoomParam);
+        return CommonResult.ok();
+    }
+
     /**
      * 删除监控对象管理
      *

+ 13 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/entity/MonitorTarget.java

@@ -83,6 +83,19 @@ public class MonitorTarget extends OrgEntity {
     @Schema(description = "最近登录时间")
     private Date lastLoginTime;
 
+    /**
+     * 房间id
+     */
+    @Schema(description = "房间id")
+    private String roomId;
+
+    /**
+     * 房间名
+     */
+    @Schema(description = "房间名")
+    @TableField(exist = false)
+    private String roomName;
+
     /**
      * 告警接收人,存储告警通知的接收用户信息
      */

+ 68 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetAddWithRoomParam.java

@@ -0,0 +1,68 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitortarget.param;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.google.common.collect.Lists;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+import vip.xiaonuo.coldchain.core.alarm.bean.SensorAlarmUser;
+import vip.xiaonuo.coldchain.core.handler.SensorAlarmUserTypeHandler;
+
+import java.util.List;
+
+/**
+ * 监控对象管理添加参数
+ *
+ * @author 黄渊昊
+ * @date 2024/11/13 16:56
+ **/
+@Getter
+@Setter
+public class MonitorTargetAddWithRoomParam {
+
+    /**
+     * 名称
+     */
+    @Schema(description = "名称")
+    private String name;
+
+    /**
+     * 状态(1:正常,2:闲置)
+     */
+    @Schema(description = "状态(1:正常,2:闲置)")
+    @NotNull(message = "状态不能为空")
+    private String status;
+
+    /**
+     * 监控位置区域
+     */
+    @Schema(description = "监控位置区域")
+    private String monitorPoint;
+
+    /**
+     * 告警接收人,存储告警通知的接收用户信息
+     */
+    @TableField(value = "alarm_users", typeHandler = SensorAlarmUserTypeHandler.class)
+    @Schema(description = "告警接收人,存储告警通知的接收用户信息")
+    private List<SensorAlarmUser> alarmUsers = Lists.newArrayList();
+
+    /**
+     * 房间id
+     */
+    @NotNull(message = "房间不能为空")
+    private String orgId;
+
+}

+ 88 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetEditWithRoomParam.java

@@ -0,0 +1,88 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.monitortarget.param;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.google.common.collect.Lists;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+import vip.xiaonuo.coldchain.core.alarm.bean.SensorAlarmUser;
+import vip.xiaonuo.coldchain.core.handler.SensorAlarmUserTypeHandler;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 监控对象管理编辑参数
+ *
+ * @author 黄渊昊
+ * @date 2024/11/13 16:56
+ **/
+@Getter
+@Setter
+public class MonitorTargetEditWithRoomParam {
+
+    /**
+     * ID
+     */
+    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /**
+     * 名称
+     */
+    @Schema(description = "名称")
+    private String name;
+
+    /**
+     * 状态(1:正常,2:闲置)
+     */
+    @Schema(description = "状态(1:正常,2:闲置)")
+    private String status;
+
+    /**
+     * 监控位置区域
+     */
+    @Schema(description = "监控位置区域")
+    private String monitorPoint;
+
+    /**
+     * 最后心跳时间
+     */
+    @Schema(description = "最后心跳时间")
+    private Date lastHeartbeatTime;
+
+    /**
+     * 最近登录时间
+     */
+    @Schema(description = "最近登录时间")
+    private Date lastLoginTime;
+
+
+    /**
+     * 告警接收人,存储告警通知的接收用户信息
+     */
+    @TableField(value = "alarm_users", typeHandler = SensorAlarmUserTypeHandler.class)
+    @Schema(description = "告警接收人,存储告警通知的接收用户信息")
+    private List<SensorAlarmUser> alarmUsers = Lists.newArrayList();
+
+    /**
+     * 房间id
+     */
+    @NotNull(message = "房间不能为空")
+    private String orgId;
+}

+ 6 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetPageParam.java

@@ -73,4 +73,10 @@ public class MonitorTargetPageParam {
      */
     @Schema(description = "机构id")
     private String orgId;
+
+    /**
+     * 房间id
+     */
+    @Schema(description = "房间id")
+    private String roomId;
 }

+ 19 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/service/MonitorTargetService.java

@@ -36,6 +36,14 @@ public interface MonitorTargetService extends IService<MonitorTarget> {
      */
     Page<MonitorTarget> page(MonitorTargetPageParam monitorTargetPageParam);
 
+    /**
+     * 根据房间获取监控对象管理分页
+     *
+     * @author 黄渊昊
+     * @date 2024/11/13 16:56
+     */
+    Page<MonitorTarget> pageWithRoom(MonitorTargetPageParam monitorTargetPageParam);
+
     /**
      * 添加监控对象管理
      *
@@ -107,4 +115,15 @@ public interface MonitorTargetService extends IService<MonitorTarget> {
      * @return
      */
     List<MonitorTarget> myList(Boolean isAll);
+
+    /**
+     * 带房间的新增监控对象
+     * @param monitorTargetAddWithRoomParam
+     */
+    void addWithRoom(MonitorTargetAddWithRoomParam monitorTargetAddWithRoomParam);
+
+    /**
+     * 带房间的编辑监控对象
+     */
+    void editWithRoom(MonitorTargetEditWithRoomParam monitorTargetEditWithRoomParam);
 }

+ 46 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/service/impl/MonitorTargetServiceImpl.java

@@ -35,6 +35,7 @@ import vip.xiaonuo.coldchain.modular.monitortarget.param.*;
 import vip.xiaonuo.coldchain.modular.monitortarget.service.MonitorTargetService;
 import vip.xiaonuo.coldchain.modular.monitortargetregion.entity.MonitorTargetRegion;
 import vip.xiaonuo.coldchain.modular.monitortargetregion.service.MonitorTargetRegionService;
+import vip.xiaonuo.coldchain.modular.targetroom.service.TargetRoomService;
 import vip.xiaonuo.common.enums.CommonDeleteFlagEnum;
 import vip.xiaonuo.common.enums.CommonSortOrderEnum;
 import vip.xiaonuo.common.exception.CommonException;
@@ -59,9 +60,37 @@ public class MonitorTargetServiceImpl extends ServiceImpl<MonitorTargetMapper, M
     private MonitorDeviceService monitorDeviceService;
     @Resource
     private MonitorTargetMapper monitorTargetMapper;
+    @Resource
+    private TargetRoomService targetRoomService;
 
     @Override
     public Page<MonitorTarget> page(MonitorTargetPageParam monitorTargetPageParam) {
+        SaBaseLoginUser loginUser = StpLoginUserUtil.getLoginUser();
+        QueryWrapper<MonitorTarget> queryWrapper = new QueryWrapper<MonitorTarget>().checkSqlInjection();
+        if (ObjectUtil.isNotEmpty(monitorTargetPageParam.getName())) {
+            queryWrapper.lambda().like(MonitorTarget::getName, monitorTargetPageParam.getName());
+        }
+        if (ObjectUtil.isNotEmpty(monitorTargetPageParam.getRoomId())) {
+            queryWrapper.lambda().eq(MonitorTarget::getRoomId, monitorTargetPageParam.getRoomId());
+        }
+        if (ObjectUtil.isAllNotEmpty(monitorTargetPageParam.getSortField(), monitorTargetPageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(monitorTargetPageParam.getSortOrder());
+            queryWrapper.orderBy(true, monitorTargetPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()), StrUtil.toUnderlineCase(monitorTargetPageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(MonitorTarget::getId);
+        }
+        queryWrapper.lambda().eq(MonitorTarget::getCreateOrg, loginUser.getOrgId()).eq(MonitorTarget::getDeleteFlag, CommonDeleteFlagEnum.NOT_DELETE);
+        Page<MonitorTarget> page = this.page(CommonPageRequest.defaultPage(), queryWrapper);
+        //获取设备区域列表并赋值返回
+        page.getRecords().forEach(monitorTarget -> {
+            monitorTarget.setMonitorTargetRegionList(monitorTargetRegionService.getRegionListByTargetId(monitorTarget.getId()));
+            monitorTarget.setCreateOrgName(loginUser.getOrgName());
+        });
+        return page;
+    }
+
+    @Override
+    public Page<MonitorTarget> pageWithRoom(MonitorTargetPageParam monitorTargetPageParam) {
         SaBaseLoginUser loginUser = StpLoginUserUtil.getLoginUser();
         QueryWrapper<MonitorTarget> queryWrapper = new QueryWrapper<MonitorTarget>().checkSqlInjection();
         if (ObjectUtil.isNotEmpty(monitorTargetPageParam.getName())) {
@@ -79,6 +108,7 @@ public class MonitorTargetServiceImpl extends ServiceImpl<MonitorTargetMapper, M
         page.getRecords().forEach(monitorTarget -> {
             monitorTarget.setMonitorTargetRegionList(monitorTargetRegionService.getRegionListByTargetId(monitorTarget.getId()));
             monitorTarget.setCreateOrgName(loginUser.getOrgName());
+            monitorTarget.setRoomName(targetRoomService.queryEntity(monitorTarget.getRoomId()).getName());
         });
         return page;
     }
@@ -98,6 +128,21 @@ public class MonitorTargetServiceImpl extends ServiceImpl<MonitorTargetMapper, M
         this.updateById(monitorTarget);
     }
 
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void addWithRoom(MonitorTargetAddWithRoomParam monitorTargetAddWithRoomParam) {
+        MonitorTarget monitorTarget = BeanUtil.toBean(monitorTargetAddWithRoomParam, MonitorTarget.class);
+        this.save(monitorTarget);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void editWithRoom(MonitorTargetEditWithRoomParam monitorTargetEditWithRoomParam) {
+        MonitorTarget monitorTarget = this.queryEntity(monitorTargetEditWithRoomParam.getId());
+        BeanUtil.copyProperties(monitorTargetEditWithRoomParam, monitorTarget);
+        this.updateById(monitorTarget);
+    }
+
     @Transactional(rollbackFor = Exception.class)
     @Override
     public void delete(List<MonitorTargetIdParam> monitorTargetIdParamList) {
@@ -167,6 +212,7 @@ public class MonitorTargetServiceImpl extends ServiceImpl<MonitorTargetMapper, M
         //获取设备区域列表并赋值返回
         rlt.getRecords().forEach(monitorTarget -> {
             monitorTarget.setMonitorTargetRegionList(monitorTargetRegionService.getRegionListByTargetId(monitorTarget.getId()));
+            monitorTarget.setRoomName(targetRoomService.queryEntity(monitorTarget.getRoomId()).getName());
         });
         return rlt;
     }

+ 133 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/targetroom/controller/TargetRoomController.java

@@ -0,0 +1,133 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.targetroom.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+import vip.xiaonuo.common.annotation.CommonLog;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.coldchain.modular.targetroom.entity.TargetRoom;
+import vip.xiaonuo.coldchain.modular.targetroom.param.TargetRoomAddParam;
+import vip.xiaonuo.coldchain.modular.targetroom.param.TargetRoomEditParam;
+import vip.xiaonuo.coldchain.modular.targetroom.param.TargetRoomIdParam;
+import vip.xiaonuo.coldchain.modular.targetroom.param.TargetRoomPageParam;
+import vip.xiaonuo.coldchain.modular.targetroom.service.TargetRoomService;
+
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * 房间配置控制器
+ *
+ * @author hyh
+ * @date  2024/12/31 00:05
+ */
+@Tag(name = "房间配置控制器")
+@RestController
+@Validated
+public class TargetRoomController {
+
+    @Resource
+    private TargetRoomService targetRoomService;
+
+    /**
+     * 获取房间配置分页
+     *
+     * @author hyh
+     * @date  2024/12/31 00:05
+     */
+    @Operation(summary = "获取房间配置分页")
+    @SaCheckPermission("/coldchain/targetroom/page")
+    @GetMapping("/coldchain/targetroom/page")
+    public CommonResult<Page<TargetRoom>> page(TargetRoomPageParam targetRoomPageParam) {
+        return CommonResult.data(targetRoomService.page(targetRoomPageParam));
+    }
+
+    /**
+     * 添加房间配置
+     *
+     * @author hyh
+     * @date  2024/12/31 00:05
+     */
+    @Operation(summary = "添加房间配置")
+    @CommonLog("添加房间配置")
+    @SaCheckPermission("/coldchain/targetroom/add")
+    @PostMapping("/coldchain/targetroom/add")
+    public CommonResult<String> add(@RequestBody @Valid TargetRoomAddParam targetRoomAddParam) {
+        targetRoomService.add(targetRoomAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑房间配置
+     *
+     * @author hyh
+     * @date  2024/12/31 00:05
+     */
+    @Operation(summary = "编辑房间配置")
+    @CommonLog("编辑房间配置")
+    @SaCheckPermission("/coldchain/targetroom/edit")
+    @PostMapping("/coldchain/targetroom/edit")
+    public CommonResult<String> edit(@RequestBody @Valid TargetRoomEditParam targetRoomEditParam) {
+        targetRoomService.edit(targetRoomEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除房间配置
+     *
+     * @author hyh
+     * @date  2024/12/31 00:05
+     */
+    @Operation(summary = "删除房间配置")
+    @CommonLog("删除房间配置")
+    @SaCheckPermission("/coldchain/targetroom/delete")
+    @PostMapping("/coldchain/targetroom/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   List<TargetRoomIdParam> targetRoomIdParamList) {
+        targetRoomService.delete(targetRoomIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取房间配置详情
+     *
+     * @author hyh
+     * @date  2024/12/31 00:05
+     */
+    @Operation(summary = "获取房间配置详情")
+    @SaCheckPermission("/coldchain/targetroom/detail")
+    @GetMapping("/coldchain/targetroom/detail")
+    public CommonResult<TargetRoom> detail(@Valid TargetRoomIdParam targetRoomIdParam) {
+        return CommonResult.data(targetRoomService.detail(targetRoomIdParam));
+    }
+
+    /**
+     * 获取房间列表
+     */
+    @Operation(summary = "获取房间列表")
+    @SaCheckPermission("/coldchain/targetroom/list")
+    @GetMapping("/coldchain/targetroom/list")
+    public CommonResult<List<TargetRoom>> list() {
+        return CommonResult.data(targetRoomService.myList());
+    }
+}

+ 77 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/targetroom/entity/TargetRoom.java

@@ -0,0 +1,77 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.targetroom.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import vip.xiaonuo.common.pojo.OrgEntity;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 房间配置实体
+ *
+ * @author hyh
+ * @date  2024/12/31 00:05
+ **/
+@Getter
+@Setter
+@TableName("target_room")
+public class TargetRoom extends OrgEntity {
+
+    /** ID */
+    @TableId
+    @Schema(description = "ID")
+    private String id;
+
+    /** 房间名 */
+    @Schema(description = "房间名")
+    private String name;
+
+    /** 排序码 */
+    @Schema(description = "排序码")
+    private Integer sortCode;
+
+    /** 扩展信息 */
+    @Schema(description = "扩展信息")
+    private String extJson;
+
+    /** 删除标志 */
+    @Schema(description = "删除标志")
+    @TableLogic
+    @TableField(fill = FieldFill.INSERT)
+    private String deleteFlag;
+
+    /** 创建时间 */
+    @Schema(description = "创建时间")
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    /** 创建用户 */
+    @Schema(description = "创建用户")
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    /** 修改时间 */
+    @Schema(description = "修改时间")
+    @TableField(fill = FieldFill.UPDATE)
+    private Date updateTime;
+
+    /** 修改用户 */
+    @Schema(description = "修改用户")
+    @TableField(fill = FieldFill.UPDATE)
+    private String updateUser;
+}

+ 34 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/targetroom/enums/TargetRoomEnum.java

@@ -0,0 +1,34 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.targetroom.enums;
+
+import lombok.Getter;
+
+/**
+ * 房间配置枚举
+ *
+ * @author hyh
+ * @date  2024/12/31 00:05
+ **/
+@Getter
+public enum TargetRoomEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    TargetRoomEnum(String value) {
+        this.value = value;
+    }
+}

+ 54 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/targetroom/listener/RoomListener.java

@@ -0,0 +1,54 @@
+package vip.xiaonuo.coldchain.modular.targetroom.listener;
+
+import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.json.JSONArray;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Component;
+import vip.xiaonuo.auth.core.pojo.SaBaseLoginUser;
+import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
+import vip.xiaonuo.coldchain.modular.targetroom.param.TargetRoomAddParam;
+import vip.xiaonuo.coldchain.modular.targetroom.service.TargetRoomService;
+import vip.xiaonuo.common.listener.CommonDataChangeListener;
+import vip.xiaonuo.sys.core.enums.SysDataTypeEnum;
+import vip.xiaonuo.sys.modular.org.service.impl.SysOrgServiceImpl;
+
+import java.util.List;
+
+@Component
+public class RoomListener implements CommonDataChangeListener {
+
+    @Resource
+    private TargetRoomService targetRoomService;
+
+    @Override
+    public void doAddWithDataIdList(String dataType, List<String> dataIdList) {
+        if(dataType.equals(SysDataTypeEnum.ORG.getValue())) {
+            TargetRoomAddParam param = new TargetRoomAddParam();
+            param.setName("全屋");
+            dataIdList.forEach(orgId -> {
+                param.setOrgId(orgId);
+                targetRoomService.add(param);
+            });
+        }
+    }
+
+    @Override
+    public void doAddWithDataList(String dataType, JSONArray jsonArray) {
+
+    }
+
+    @Override
+    public void doUpdateWithDataIdList(String dataType, List<String> dataIdList) {
+
+    }
+
+    @Override
+    public void doUpdateWithDataList(String dataType, JSONArray jsonArray) {
+
+    }
+
+    @Override
+    public void doDeleteWithDataIdList(String dataType, List<String> dataIdList) {
+
+    }
+}

+ 25 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/targetroom/mapper/TargetRoomMapper.java

@@ -0,0 +1,25 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.targetroom.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.coldchain.modular.targetroom.entity.TargetRoom;
+
+/**
+ * 房间配置Mapper接口
+ *
+ * @author hyh
+ * @date  2024/12/31 00:05
+ **/
+public interface TargetRoomMapper extends BaseMapper<TargetRoom> {
+}

+ 5 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/targetroom/mapper/mapping/TargetRoomMapper.xml

@@ -0,0 +1,5 @@
+<?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="vip.xiaonuo.coldchain.modular.targetroom.mapper.TargetRoomMapper">
+
+</mapper>

+ 46 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/targetroom/param/TargetRoomAddParam.java

@@ -0,0 +1,46 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.targetroom.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 房间配置添加参数
+ *
+ * @author hyh
+ * @date  2024/12/31 00:05
+ **/
+@Getter
+@Setter
+public class TargetRoomAddParam {
+
+    /** 房间名 */
+    @Schema(description = "房间名")
+    private String name;
+
+    /** 组织id */
+    @Schema(description = "组织id")
+    private String orgId;
+
+    /** 排序码 */
+    @Schema(description = "排序码")
+    private Integer sortCode = 99;
+
+}

+ 51 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/targetroom/param/TargetRoomEditParam.java

@@ -0,0 +1,51 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.targetroom.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 房间配置编辑参数
+ *
+ * @author hyh
+ * @date  2024/12/31 00:05
+ **/
+@Getter
+@Setter
+public class TargetRoomEditParam {
+
+    /** ID */
+    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "id不能为空")
+    private String id;
+
+    /** 房间名 */
+    @Schema(description = "房间名")
+    private String name;
+
+    /** 组织id */
+    @Schema(description = "组织id")
+    private String orgId;
+
+    /** 排序码 */
+    @Schema(description = "排序码")
+    private Integer sortCode;
+
+}

+ 35 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/targetroom/param/TargetRoomIdParam.java

@@ -0,0 +1,35 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.targetroom.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+
+/**
+ * 房间配置Id参数
+ *
+ * @author hyh
+ * @date  2024/12/31 00:05
+ **/
+@Getter
+@Setter
+public class TargetRoomIdParam {
+
+    /** ID */
+    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "id不能为空")
+    private String id;
+}

+ 55 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/targetroom/param/TargetRoomPageParam.java

@@ -0,0 +1,55 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.targetroom.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 房间配置查询参数
+ *
+ * @author hyh
+ * @date  2024/12/31 00:05
+ **/
+@Getter
+@Setter
+public class TargetRoomPageParam {
+
+    /** 当前页 */
+    @Schema(description = "当前页码")
+    private Integer current;
+
+    /** 每页条数 */
+    @Schema(description = "每页条数")
+    private Integer size;
+
+    /** 排序字段 */
+    @Schema(description = "排序字段,字段驼峰名称,如:userName")
+    private String sortField;
+
+    /** 排序方式 */
+    @Schema(description = "排序方式,升序:ASCEND;降序:DESCEND")
+    private String sortOrder;
+
+    /** 关键词 */
+    @Schema(description = "关键词")
+    private String searchKey;
+
+    /** 房间名 */
+    @Schema(description = "房间名")
+    private String name;
+
+}

+ 83 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/targetroom/service/TargetRoomService.java

@@ -0,0 +1,83 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.targetroom.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.coldchain.modular.targetroom.entity.TargetRoom;
+import vip.xiaonuo.coldchain.modular.targetroom.param.TargetRoomAddParam;
+import vip.xiaonuo.coldchain.modular.targetroom.param.TargetRoomEditParam;
+import vip.xiaonuo.coldchain.modular.targetroom.param.TargetRoomIdParam;
+import vip.xiaonuo.coldchain.modular.targetroom.param.TargetRoomPageParam;
+
+import java.util.List;
+
+/**
+ * 房间配置Service接口
+ *
+ * @author hyh
+ * @date  2024/12/31 00:05
+ **/
+public interface TargetRoomService extends IService<TargetRoom> {
+
+    /**
+     * 获取房间配置分页
+     *
+     * @author hyh
+     * @date  2024/12/31 00:05
+     */
+    Page<TargetRoom> page(TargetRoomPageParam targetRoomPageParam);
+
+    /**
+     * 添加房间配置
+     *
+     * @author hyh
+     * @date  2024/12/31 00:05
+     */
+    void add(TargetRoomAddParam targetRoomAddParam);
+
+    /**
+     * 编辑房间配置
+     *
+     * @author hyh
+     * @date  2024/12/31 00:05
+     */
+    void edit(TargetRoomEditParam targetRoomEditParam);
+
+    /**
+     * 删除房间配置
+     *
+     * @author hyh
+     * @date  2024/12/31 00:05
+     */
+    void delete(List<TargetRoomIdParam> targetRoomIdParamList);
+
+    /**
+     * 获取房间配置详情
+     *
+     * @author hyh
+     * @date  2024/12/31 00:05
+     */
+    TargetRoom detail(TargetRoomIdParam targetRoomIdParam);
+
+    /**
+     * 获取房间配置详情
+     *
+     * @author hyh
+     * @date  2024/12/31 00:05
+     **/
+    TargetRoom queryEntity(String id);
+
+    List<TargetRoom> myList();
+
+}

+ 112 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/targetroom/service/impl/TargetRoomServiceImpl.java

@@ -0,0 +1,112 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.coldchain.modular.targetroom.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.util.ObjectUtil;
+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.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import vip.xiaonuo.auth.core.pojo.SaBaseLoginUser;
+import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
+import vip.xiaonuo.common.enums.CommonDeleteFlagEnum;
+import vip.xiaonuo.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.page.CommonPageRequest;
+import vip.xiaonuo.coldchain.modular.targetroom.entity.TargetRoom;
+import vip.xiaonuo.coldchain.modular.targetroom.mapper.TargetRoomMapper;
+import vip.xiaonuo.coldchain.modular.targetroom.param.TargetRoomAddParam;
+import vip.xiaonuo.coldchain.modular.targetroom.param.TargetRoomEditParam;
+import vip.xiaonuo.coldchain.modular.targetroom.param.TargetRoomIdParam;
+import vip.xiaonuo.coldchain.modular.targetroom.param.TargetRoomPageParam;
+import vip.xiaonuo.coldchain.modular.targetroom.service.TargetRoomService;
+
+import java.util.List;
+
+/**
+ * 房间配置Service接口实现类
+ *
+ * @author hyh
+ * @date  2024/12/31 00:05
+ **/
+@Service
+public class TargetRoomServiceImpl extends ServiceImpl<TargetRoomMapper, TargetRoom> implements TargetRoomService {
+
+    @Override
+    public Page<TargetRoom> page(TargetRoomPageParam targetRoomPageParam) {
+        SaBaseLoginUser loginUser = StpLoginUserUtil.getLoginUser();
+        QueryWrapper<TargetRoom> queryWrapper = new QueryWrapper<TargetRoom>().checkSqlInjection();
+        if(ObjectUtil.isNotEmpty(targetRoomPageParam.getName())) {
+            queryWrapper.lambda().like(TargetRoom::getName, targetRoomPageParam.getName());
+        }
+        queryWrapper.lambda().eq(TargetRoom::getCreateOrg, loginUser.getOrgId()).eq(TargetRoom::getDeleteFlag, CommonDeleteFlagEnum.NOT_DELETE);
+        if(ObjectUtil.isAllNotEmpty(targetRoomPageParam.getSortField(), targetRoomPageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(targetRoomPageParam.getSortOrder());
+            queryWrapper.orderBy(true, targetRoomPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(targetRoomPageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(TargetRoom::getSortCode);
+        }
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(TargetRoomAddParam targetRoomAddParam) {
+        SaBaseLoginUser loginUser = StpLoginUserUtil.getLoginUser();
+        TargetRoom targetRoom = BeanUtil.toBean(targetRoomAddParam, TargetRoom.class);
+        targetRoom.setCreateOrg(loginUser.getOrgId());
+        this.save(targetRoom);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(TargetRoomEditParam targetRoomEditParam) {
+        TargetRoom targetRoom = this.queryEntity(targetRoomEditParam.getId());
+        BeanUtil.copyProperties(targetRoomEditParam, targetRoom);
+        this.updateById(targetRoom);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<TargetRoomIdParam> targetRoomIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(targetRoomIdParamList, TargetRoomIdParam::getId));
+    }
+
+    @Override
+    public TargetRoom detail(TargetRoomIdParam targetRoomIdParam) {
+        return this.queryEntity(targetRoomIdParam.getId());
+    }
+
+    @Override
+    public TargetRoom queryEntity(String id) {
+        TargetRoom targetRoom = this.getById(id);
+        if(ObjectUtil.isEmpty(targetRoom)) {
+            throw new CommonException("房间配置不存在,id值为:{}", id);
+        }
+        return targetRoom;
+    }
+
+    @Override
+    public List<TargetRoom> myList() {
+        LambdaQueryWrapper<TargetRoom> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(TargetRoom::getDeleteFlag, CommonDeleteFlagEnum.NOT_DELETE);
+        return list(queryWrapper);
+    }
+}