Forráskód Böngészése

通知规则代码提交

xujie 1 éve
szülő
commit
d686f01901
14 módosított fájl, 569 hozzáadás és 0 törlés
  1. 62 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/notice/CoreNoticeRule.java
  2. 65 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/notice/CoreNoticeRuleItem.java
  3. 68 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/notice/controller/CoreNoticeRuleController.java
  4. 28 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/notice/dto/CoreNoticeRuleDto.java
  5. 16 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/notice/mapper/CoreNoticeRuleItemMapper.java
  6. 31 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/notice/mapper/CoreNoticeRuleMapper.java
  7. 16 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/notice/service/ICoreNoticeRuleItemService.java
  8. 32 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/notice/service/ICoreNoticeRuleService.java
  9. 20 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/notice/service/impl/CoreNoticeRuleItemServiceImpl.java
  10. 133 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/notice/service/impl/CoreNoticeRuleServiceImpl.java
  11. 32 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/notice/vo/CoreNoticeRuleVo.java
  12. 11 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/notice/vo/SelectProductVo.java
  13. 16 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/notice/vo/SelectUserVo.java
  14. 39 0
      soc-modules/soc-modules-core/src/main/resources/mapper/notice/CoreNoticeRuleMapper.xml

+ 62 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/notice/CoreNoticeRule.java

@@ -0,0 +1,62 @@
+package com.xunmei.common.core.domain.notice;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 通知规则表
+ * </p>
+ *
+ * @author xujie
+ * @since 2024-09-19
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("core_notice_rule")
+@ApiModel(value="CoreNoticeRule对象", description="通知规则表")
+public class CoreNoticeRule implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId("id")
+    private Long id;
+
+    @ApiModelProperty(value = "规则名称")
+    @TableField("name")
+    private String name;
+
+    @ApiModelProperty(value = "是否发送短信:0.否 1.是")
+    @TableField("send_sms")
+    private Integer sendSms;
+
+    @ApiModelProperty(value = "是否启用:0.否 1.是")
+    @TableField("enable")
+    private Integer enable;
+
+    @ApiModelProperty(value = "是否删除:0.否 1.是")
+    @TableField("is_deleted")
+    private Integer isDeleted;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField("create_time")
+    private Date createTime;
+
+    @ApiModelProperty(value = "更新时间")
+    @TableField("update_time")
+    private Date updateTime;
+
+    @ApiModelProperty(value = "规则描述")
+    @TableField("remark")
+    private String remark;
+
+
+}

+ 65 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/notice/CoreNoticeRuleItem.java

@@ -0,0 +1,65 @@
+package com.xunmei.common.core.domain.notice;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author xujie
+ * @since 2024-09-19
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("core_notice_rule_item")
+@ApiModel(value="CoreNoticeRuleItem对象", description="")
+public class CoreNoticeRuleItem implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "通知规则id")
+    @TableField("rule_id")
+    private Long ruleId;
+
+    @ApiModelProperty(value = "组织机构id")
+    @TableField("org_id")
+    private Long orgId;
+
+    @ApiModelProperty(value = "角色id")
+    @TableField("role_ids")
+    private String roleIds;
+
+    @ApiModelProperty(value = "用户id")
+    @TableField("user_ids")
+    private String userIds;
+
+    @ApiModelProperty(value = "是否选择角色下所有用户:0.否 1.是")
+    @TableField("all_role_user")
+    private Integer allRoleUser;
+
+    @ApiModelProperty(value = "传感器产品名称")
+    @TableField("product_type")
+    private String productType;
+
+    @ApiModelProperty(value = "是否是所选机构外选择的用户:0.否 1.是")
+    @TableField("special")
+    private Integer special;
+
+    @ApiModelProperty(value = "是否删除:0.否 1.是")
+    @TableField("is_deleted")
+    private Integer isDeleted;
+
+
+}

+ 68 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/notice/controller/CoreNoticeRuleController.java

@@ -0,0 +1,68 @@
+package com.xunmei.core.notice.controller;
+
+
+import com.xunmei.common.core.domain.edu.dto.CoreEduTrainingPlanPageDto;
+import com.xunmei.common.core.web.domain.AjaxResult;
+import com.xunmei.common.core.web.page.TableDataInfo;
+import com.xunmei.common.security.annotation.RequiresPermissions;
+import com.xunmei.core.notice.dto.CoreNoticeRuleDto;
+import com.xunmei.core.notice.service.ICoreNoticeRuleService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 通知规则表 前端控制器
+ * </p>
+ *
+ * @author xujie
+ * @since 2024-09-19
+ */
+@RestController
+@RequestMapping("/noticeRule")
+public class CoreNoticeRuleController {
+
+    @Resource
+    private ICoreNoticeRuleService coreNoticeRuleService;
+
+    @ApiOperation(value = "查询通知规则列表")
+    //@RequiresPermissions("core:noticeRule:list")
+    @GetMapping("/list")
+    public TableDataInfo list(CoreNoticeRuleDto dto) throws InterruptedException {
+        return coreNoticeRuleService.selectPage(dto);
+    }
+
+    @ApiOperation(value = "查询机构下用户")
+    //@RequiresPermissions("core:noticeRule:getSelectUser")
+    @GetMapping("/getSelectUser")
+    public AjaxResult getSelectUser(CoreNoticeRuleDto dto) throws InterruptedException {
+        return AjaxResult.success(coreNoticeRuleService.selectUserList(dto));
+    }
+
+    @ApiOperation(value = "查询传感器类型")
+    //@RequiresPermissions("core:noticeRule:getSelectUser")
+    @GetMapping("/getSelectProductType")
+    public AjaxResult getSelectProductType() throws InterruptedException {
+        return AjaxResult.success(coreNoticeRuleService.selectProductTypeList());
+    }
+
+    @ApiOperation(value = "新增或修改")
+    //@RequiresPermissions("core:noticeRule:getSelectUser")
+    @PostMapping("/saveOrUpdate")
+    public AjaxResult saveOrUpdate(@RequestBody CoreNoticeRuleDto dto) throws InterruptedException {
+        coreNoticeRuleService.saveOrUpdate(dto);
+        return AjaxResult.success();
+    }
+
+    @ApiOperation(value = "删除")
+    //@RequiresPermissions("core:noticeRule:getSelectUser")
+    @DeleteMapping("/remove/{id}")
+    public AjaxResult remove(@PathVariable Serializable id) throws InterruptedException {
+        coreNoticeRuleService.deleteNoticeRule(id);
+        return AjaxResult.success();
+    }
+}
+

+ 28 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/notice/dto/CoreNoticeRuleDto.java

@@ -0,0 +1,28 @@
+package com.xunmei.core.notice.dto;
+
+import com.xunmei.common.core.web.domain.PageRequest;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class CoreNoticeRuleDto extends PageRequest {
+
+    private Long id;
+
+    private String name;
+
+    private List<Long> orgIds;
+
+    private List<String> roleIds;
+
+    private List<String> userIds;
+
+    private List<String> productTypes;
+
+    private Boolean enable;
+
+    private Boolean sendSms;
+
+    private String remark;
+}

+ 16 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/notice/mapper/CoreNoticeRuleItemMapper.java

@@ -0,0 +1,16 @@
+package com.xunmei.core.notice.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xunmei.common.core.domain.notice.CoreNoticeRuleItem;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author xujie
+ * @since 2024-09-19
+ */
+public interface CoreNoticeRuleItemMapper extends BaseMapper<CoreNoticeRuleItem> {
+
+}

+ 31 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/notice/mapper/CoreNoticeRuleMapper.java

@@ -0,0 +1,31 @@
+package com.xunmei.core.notice.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.xunmei.common.core.domain.notice.CoreNoticeRule;
+import com.xunmei.core.notice.dto.CoreNoticeRuleDto;
+import com.xunmei.core.notice.vo.CoreNoticeRuleVo;
+import com.xunmei.core.notice.vo.SelectProductVo;
+import com.xunmei.core.notice.vo.SelectUserVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 通知规则表 Mapper 接口
+ * </p>
+ *
+ * @author xujie
+ * @since 2024-09-19
+ */
+public interface CoreNoticeRuleMapper extends BaseMapper<CoreNoticeRule> {
+
+
+    Page<CoreNoticeRuleVo> selectPageData(Page<CoreNoticeRuleVo> page, @Param("request") CoreNoticeRuleDto request);
+
+    List<SelectUserVo> selectUserList(@Param("orgIds")List<Long> orgIds);
+
+    List<SelectProductVo> selectProductTypeList();
+}

+ 16 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/notice/service/ICoreNoticeRuleItemService.java

@@ -0,0 +1,16 @@
+package com.xunmei.core.notice.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.xunmei.common.core.domain.notice.CoreNoticeRuleItem;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author xujie
+ * @since 2024-09-19
+ */
+public interface ICoreNoticeRuleItemService extends IService<CoreNoticeRuleItem> {
+
+}

+ 32 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/notice/service/ICoreNoticeRuleService.java

@@ -0,0 +1,32 @@
+package com.xunmei.core.notice.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.xunmei.common.core.domain.notice.CoreNoticeRule;
+import com.xunmei.common.core.web.page.TableDataInfo;
+import com.xunmei.core.notice.dto.CoreNoticeRuleDto;
+import com.xunmei.core.notice.vo.SelectProductVo;
+import com.xunmei.core.notice.vo.SelectUserVo;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * <p>
+ * 通知规则表 服务类
+ * </p>
+ *
+ * @author xujie
+ * @since 2024-09-19
+ */
+public interface ICoreNoticeRuleService extends IService<CoreNoticeRule> {
+
+    TableDataInfo selectPage(CoreNoticeRuleDto dto);
+
+    List<SelectUserVo> selectUserList(CoreNoticeRuleDto dto);
+
+    List<SelectProductVo> selectProductTypeList();
+
+    void saveOrUpdate(CoreNoticeRuleDto dto);
+
+    void deleteNoticeRule(Serializable id);
+}

+ 20 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/notice/service/impl/CoreNoticeRuleItemServiceImpl.java

@@ -0,0 +1,20 @@
+package com.xunmei.core.notice.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xunmei.common.core.domain.notice.CoreNoticeRuleItem;
+import com.xunmei.core.notice.mapper.CoreNoticeRuleItemMapper;
+import com.xunmei.core.notice.service.ICoreNoticeRuleItemService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author xujie
+ * @since 2024-09-19
+ */
+@Service
+public class CoreNoticeRuleItemServiceImpl extends ServiceImpl<CoreNoticeRuleItemMapper, CoreNoticeRuleItem> implements ICoreNoticeRuleItemService {
+
+}

+ 133 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/notice/service/impl/CoreNoticeRuleServiceImpl.java

@@ -0,0 +1,133 @@
+package com.xunmei.core.notice.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xunmei.common.core.domain.notice.CoreNoticeRule;
+import com.xunmei.common.core.domain.notice.CoreNoticeRuleItem;
+import com.xunmei.common.core.web.page.TableDataInfo;
+import com.xunmei.core.notice.dto.CoreNoticeRuleDto;
+import com.xunmei.core.notice.mapper.CoreNoticeRuleMapper;
+import com.xunmei.core.notice.service.ICoreNoticeRuleItemService;
+import com.xunmei.core.notice.service.ICoreNoticeRuleService;
+import com.xunmei.core.notice.vo.CoreNoticeRuleVo;
+import com.xunmei.core.notice.vo.SelectProductVo;
+import com.xunmei.core.notice.vo.SelectUserVo;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 通知规则表 服务实现类
+ * </p>
+ *
+ * @author xujie
+ * @since 2024-09-19
+ */
+@Service
+public class CoreNoticeRuleServiceImpl extends ServiceImpl<CoreNoticeRuleMapper, CoreNoticeRule> implements ICoreNoticeRuleService {
+
+
+    @Resource
+    private ICoreNoticeRuleItemService itemService;
+
+    @Override
+    public TableDataInfo selectPage(CoreNoticeRuleDto dto) {
+        Page<CoreNoticeRuleVo> page = baseMapper.selectPageData(dto.getPageRequest(), dto);
+        return TableDataInfo.build(page);
+    }
+
+    @Override
+    public List<SelectUserVo> selectUserList(CoreNoticeRuleDto dto) {
+        if (dto != null && dto.getOrgIds() != null && dto.getOrgIds().size() > 0) {
+            return baseMapper.selectUserList(dto.getOrgIds());
+        }
+        return null;
+    }
+
+    @Override
+    public List<SelectProductVo> selectProductTypeList() {
+        return baseMapper.selectProductTypeList();
+    }
+
+    @Transactional
+    @Override
+    public void saveOrUpdate(CoreNoticeRuleDto dto) {
+        CoreNoticeRule noticeRule = new CoreNoticeRule();
+        noticeRule.setName(dto.getName());
+        noticeRule.setRemark(dto.getRemark());
+        noticeRule.setEnable(dto.getEnable() ? 1 : 0);
+        noticeRule.setSendSms(dto.getSendSms() ? 1 : 0);
+
+        if (dto.getId() != null){
+            noticeRule.setId(dto.getId());
+            noticeRule.setUpdateTime(new Date());
+            super.updateById(noticeRule);
+
+            QueryWrapper<CoreNoticeRuleItem> wrapper = new QueryWrapper<>();
+            wrapper.lambda().eq(CoreNoticeRuleItem::getRuleId, dto.getId());
+            itemService.remove(wrapper);
+            //处理关联表数据
+            saveOrUpdateItem(dto, noticeRule.getId());
+        }else {
+            noticeRule.setId(IdWorker.getId());
+            noticeRule.setCreateTime(new Date());
+            super.save(noticeRule);
+            //处理关联表数据
+            saveOrUpdateItem(dto, noticeRule.getId());
+        }
+    }
+
+    @Transactional
+    @Override
+    public void deleteNoticeRule(Serializable id) {
+        super.removeById(id);
+
+        QueryWrapper<CoreNoticeRuleItem> wrapper = new QueryWrapper<>();
+        wrapper.lambda().eq(CoreNoticeRuleItem::getRuleId, id);
+        itemService.remove(wrapper);
+    }
+
+    private void saveOrUpdateItem(CoreNoticeRuleDto dto, Long ruleId) {
+        ArrayList<CoreNoticeRuleItem> items = new ArrayList<>();
+        String userId = handStr(dto.getUserIds());
+        String roleId = handStr(dto.getRoleIds());
+        //String productType = handStr(dto.getProductTypes());
+
+        for (Long orgId : dto.getOrgIds()) {
+            for (String productType : dto.getProductTypes()) {
+                CoreNoticeRuleItem item = new CoreNoticeRuleItem();
+                item.setRuleId(ruleId);
+                item.setOrgId(orgId);
+                item.setUserIds(userId);
+                item.setRoleIds(roleId);
+                item.setAllRoleUser(0);
+                if (ObjectUtil.isEmpty(userId)){
+                    item.setAllRoleUser(1);
+                }
+                item.setProductType(productType);
+                items.add(item);
+            }
+        }
+        itemService.saveBatch(items);
+    }
+
+    private String handStr(List<String> list){
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < list.size(); i++) {
+            sb.append(list.get(i));
+            if (i < list.size() - 1) {
+                sb.append(",");
+            }
+        }
+        return sb.toString();
+    }
+}

+ 32 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/notice/vo/CoreNoticeRuleVo.java

@@ -0,0 +1,32 @@
+package com.xunmei.core.notice.vo;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import lombok.Data;
+
+@Data
+public class CoreNoticeRuleVo {
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
+
+    private String name;
+
+    private String remark;
+
+    private Integer enable;
+
+    private Integer sendSms;
+
+    private String roleIds;
+
+    private String userIds;
+
+    private String orgIds;
+
+    private String orgNames;
+
+    private String productTypes;
+
+    private String productTypeNames;
+}

+ 11 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/notice/vo/SelectProductVo.java

@@ -0,0 +1,11 @@
+package com.xunmei.core.notice.vo;
+
+import lombok.Data;
+
+@Data
+public class SelectProductVo {
+
+    private String productType;
+
+    private String productName;
+}

+ 16 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/notice/vo/SelectUserVo.java

@@ -0,0 +1,16 @@
+package com.xunmei.core.notice.vo;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import lombok.Data;
+
+@Data
+public class SelectUserVo {
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
+
+    private String name;
+
+    private String username;
+}

+ 39 - 0
soc-modules/soc-modules-core/src/main/resources/mapper/notice/CoreNoticeRuleMapper.xml

@@ -0,0 +1,39 @@
+<?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.xunmei.core.notice.mapper.CoreNoticeRuleMapper">
+
+    <select id="selectPageData" resultType="com.xunmei.core.notice.vo.CoreNoticeRuleVo">
+        SELECT
+            e.id AS id,
+            e.`name` AS `name`,
+            e.remark AS remark,
+            e.`enable` as `enable`,
+            e.send_sms as sendSms,
+            GROUP_CONCAT( DISTINCT n.role_ids ) AS roleIds,
+            GROUP_CONCAT( DISTINCT n.user_ids ) AS userIds,
+            GROUP_CONCAT( DISTINCT n.org_id ) AS orgIds,
+            GROUP_CONCAT( DISTINCT o.short_name ) AS orgNames,
+            GROUP_CONCAT( DISTINCT n.product_type ) AS productTypes,
+            GROUP_CONCAT( DISTINCT s.product_name ) AS productTypeNames
+        FROM
+            core_notice_rule e
+            LEFT JOIN core_notice_rule_item n ON e.id = n.rule_id
+            LEFT JOIN sys_org o ON n.org_id = o.id
+            LEFT JOIN iot_alarm_system_field s ON n.product_type = s.product_type
+        where 1=1
+        <if test="request.name != null and request.name != ''">
+            and e.`name` like concat('%',#{request.name},'%')
+        </if>
+        group by e.id
+    </select>
+    <select id="selectUserList" resultType="com.xunmei.core.notice.vo.SelectUserVo">
+        select id,`name`,username from sys_user where locked = 0
+        and org_id in
+        <foreach collection="orgIds" item="orgId" open="(" separator="," close=")">
+            #{orgId}
+        </foreach>
+    </select>
+    <select id="selectProductTypeList" resultType="com.xunmei.core.notice.vo.SelectProductVo">
+        select product_type,product_name from iot_alarm_system_field where alarm_rule_property = 1 and `enable` = 1 GROUP BY product_type ;
+    </select>
+</mapper>