Parcourir la source

通知规则入库修改

xujie il y a 1 an
Parent
commit
4829d93e89

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

@@ -26,8 +26,8 @@ public class CoreNoticeRuleItem implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    @TableId(value = "id", type = IdType.AUTO)
-    private Integer id;
+    @TableId(value = "id")
+    private Long id;
 
     @ApiModelProperty(value = "通知规则id")
     @TableField("rule_id")
@@ -41,9 +41,9 @@ public class CoreNoticeRuleItem implements Serializable {
     @TableField("role_id")
     private Long roleId;
 
-    @ApiModelProperty(value = "用户id")
-    @TableField("user_id")
-    private Long userId;
+    @ApiModelProperty(value = "用户ids")
+    @TableField("user_ids")
+    private String userIds;
 
     @ApiModelProperty(value = "是否发送短信:0.否 1.是")
     @TableField("send_sms")

+ 42 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/notice/CoreNoticeRuleItemUser.java

@@ -0,0 +1,42 @@
+package com.xunmei.common.core.domain.notice;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableName;
+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-29
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("core_notice_rule_item_user")
+@ApiModel(value="CoreNoticeRuleItemUser对象", description="")
+public class CoreNoticeRuleItemUser implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @TableField("user_id")
+    private Long userId;
+
+    @TableField("rule_item_id")
+    private Long ruleItemId;
+
+    @TableField("rule_id")
+    private Long ruleId;
+
+
+}

+ 17 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/notice/mapper/CoreNoticeRuleItemUserMapper.java

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

+ 17 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/notice/service/ICoreNoticeRuleItemUserService.java

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

+ 20 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/notice/service/impl/CoreNoticeRuleItemUserServiceImpl.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.CoreNoticeRuleItemUser;
+import com.xunmei.core.notice.mapper.CoreNoticeRuleItemUserMapper;
+import com.xunmei.core.notice.service.ICoreNoticeRuleItemUserService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author xujie
+ * @since 2024-09-29
+ */
+@Service
+public class CoreNoticeRuleItemUserServiceImpl extends ServiceImpl<CoreNoticeRuleItemUserMapper, CoreNoticeRuleItemUser> implements ICoreNoticeRuleItemUserService {
+
+}

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

@@ -7,11 +7,14 @@ 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.domain.notice.CoreNoticeRuleItemUser;
 import com.xunmei.common.core.web.page.TableDataInfo;
 import com.xunmei.core.notice.dto.CoreNoticeRuleDto;
 import com.xunmei.core.notice.dto.NoticeRuleUserItem;
+import com.xunmei.core.notice.mapper.CoreNoticeRuleItemUserMapper;
 import com.xunmei.core.notice.mapper.CoreNoticeRuleMapper;
 import com.xunmei.core.notice.service.ICoreNoticeRuleItemService;
+import com.xunmei.core.notice.service.ICoreNoticeRuleItemUserService;
 import com.xunmei.core.notice.service.ICoreNoticeRuleService;
 import com.xunmei.core.notice.vo.*;
 import org.springframework.stereotype.Service;
@@ -39,6 +42,9 @@ public class CoreNoticeRuleServiceImpl extends ServiceImpl<CoreNoticeRuleMapper,
     @Resource
     private ICoreNoticeRuleItemService itemService;
 
+    @Resource
+    private ICoreNoticeRuleItemUserService itemUserService;
+
     @Override
     public TableDataInfo selectPage(CoreNoticeRuleDto dto) {
         Page<CoreNoticeRuleVo> page = baseMapper.selectPageData(dto.getPageRequest(), dto);
@@ -72,6 +78,11 @@ public class CoreNoticeRuleServiceImpl extends ServiceImpl<CoreNoticeRuleMapper,
             QueryWrapper<CoreNoticeRuleItem> wrapper = new QueryWrapper<>();
             wrapper.lambda().eq(CoreNoticeRuleItem::getRuleId, dto.getId());
             itemService.remove(wrapper);
+
+            QueryWrapper<CoreNoticeRuleItemUser> itemUserQueryWrapper = new QueryWrapper<>();
+            itemUserQueryWrapper.lambda().eq(CoreNoticeRuleItemUser::getRuleId, dto.getId());
+            itemUserService.remove(itemUserQueryWrapper);
+
             //处理关联表数据
             saveOrUpdateItem(dto, noticeRule.getId());
         }else {
@@ -116,6 +127,7 @@ public class CoreNoticeRuleServiceImpl extends ServiceImpl<CoreNoticeRuleMapper,
 
     private void saveOrUpdateItem(CoreNoticeRuleDto dto, Long ruleId) {
         List<CoreNoticeRuleItem> items = new ArrayList<>();
+        List<CoreNoticeRuleItemUser> itemUsers = new ArrayList<>();
         if (dto.getItems() != null && dto.getItems().size() > 0) {
             List<NoticeRuleUserItem> itemList = dto.getItems();
             for (NoticeRuleUserItem item : itemList) {
@@ -123,27 +135,36 @@ public class CoreNoticeRuleServiceImpl extends ServiceImpl<CoreNoticeRuleMapper,
                 List<String> productTypes = item.getProductTypes();
                 //有具体人员,角色就不生效
                 if (userIds != null && userIds.size() > 0) {
-                    for(String userId : userIds){
-                        for (String productType : productTypes) {
-                            CoreNoticeRuleItem coreNoticeRuleItem = new CoreNoticeRuleItem();
-                            coreNoticeRuleItem.setRuleId(ruleId);
-                            coreNoticeRuleItem.setRoleId(null);
-                            coreNoticeRuleItem.setOrgId(item.getOrgId());
-                            coreNoticeRuleItem.setUserId(Long.valueOf(userId));
-                            coreNoticeRuleItem.setProductType(productType);
-                            coreNoticeRuleItem.setAllRoleUser(0);
-                            coreNoticeRuleItem.setSendSms(item.getSendSms());
-                            coreNoticeRuleItem.setIsDeleted(0);
-                            items.add(coreNoticeRuleItem);
+                    for (String productType : productTypes) {
+                        CoreNoticeRuleItem coreNoticeRuleItem = new CoreNoticeRuleItem();
+                        Long ruleItemId = IdWorker.getId();
+                        coreNoticeRuleItem.setId(ruleItemId);
+                        coreNoticeRuleItem.setRuleId(ruleId);
+                        coreNoticeRuleItem.setRoleId(null);
+                        coreNoticeRuleItem.setUserIds(String.join(",", userIds));
+                        coreNoticeRuleItem.setOrgId(item.getOrgId());
+                        coreNoticeRuleItem.setProductType(productType);
+                        coreNoticeRuleItem.setAllRoleUser(0);
+                        coreNoticeRuleItem.setSendSms(item.getSendSms());
+                        coreNoticeRuleItem.setIsDeleted(0);
+                        items.add(coreNoticeRuleItem);
+
+                        for (String userId : userIds) {
+                            CoreNoticeRuleItemUser ruleItemUser = new CoreNoticeRuleItemUser();
+                            ruleItemUser.setUserId(Long.valueOf(userId));
+                            ruleItemUser.setRuleItemId(ruleItemId);
+                            ruleItemUser.setRuleId(ruleId);
+                            itemUsers.add(ruleItemUser);
                         }
                     }
                 }else {
                     for (String productType : productTypes) {
                         CoreNoticeRuleItem coreNoticeRuleItem = new CoreNoticeRuleItem();
+                        coreNoticeRuleItem.setId(IdWorker.getId());
                         coreNoticeRuleItem.setRuleId(ruleId);
                         coreNoticeRuleItem.setRoleId(item.getRoleId());
+                        coreNoticeRuleItem.setUserIds(null);
                         coreNoticeRuleItem.setOrgId(item.getOrgId());
-                        coreNoticeRuleItem.setUserId(null);
                         coreNoticeRuleItem.setProductType(productType);
                         coreNoticeRuleItem.setAllRoleUser(1);
                         coreNoticeRuleItem.setSendSms(item.getSendSms());
@@ -154,11 +175,12 @@ public class CoreNoticeRuleServiceImpl extends ServiceImpl<CoreNoticeRuleMapper,
             }
         }
 
-        //删除相同数据
         if(items.size() > 0){
-            List<CoreNoticeRuleItem> distinctList = items.stream().distinct().collect(Collectors.toList());
+            itemService.saveBatch(items);
+        }
 
-            itemService.saveBatch(distinctList);
+        if (itemUsers.size() > 0){
+            itemUserService.saveBatch(itemUsers);
         }
     }
 }

+ 9 - 7
soc-modules/soc-modules-core/src/main/resources/mapper/notice/CoreNoticeRuleItemMapper.xml

@@ -9,19 +9,21 @@
             t.role_id AS roleId,
             r.role_name AS roleName,
             t.send_sms AS sendSms,
-            GROUP_CONCAT( DISTINCT t.user_id ) AS userIds,
+            t.user_ids AS userIds,
             GROUP_CONCAT( DISTINCT u.`name` ) AS userNames,
             GROUP_CONCAT( DISTINCT t.product_type ) AS productTypes,
             GROUP_CONCAT( DISTINCT s.product_name ) AS productTypeNames
         FROM
             core_notice_rule_item t
-                LEFT JOIN sys_org o ON t.org_id = o.id
-                LEFT JOIN sys_role r ON r.id = t.role_id
-                LEFT JOIN sys_user u ON t.user_id = u.id
-                LEFT JOIN iot_alarm_system_field s ON t.product_type = s.product_type
+            LEFT JOIN sys_org o ON t.org_id = o.id
+            LEFT JOIN sys_role r ON r.id = t.role_id
+            LEFT JOIN iot_alarm_system_field s ON t.product_type = s.product_type
+            LEFT JOIN core_notice_rule_item_user c ON c.rule_item_id = t.id
+            LEFT JOIN sys_user u ON c.user_id = u.id
         WHERE
-            t.is_deleted = 0 and t.rule_id = #{ruleId}
+            t.is_deleted = 0
+            AND t.rule_id = #{ruleId}
         GROUP BY
-            t.role_id,t.org_id,t.send_sms
+            t.role_id, t.org_id, t.user_ids, t.send_sms
     </select>
 </mapper>

+ 3 - 2
soc-modules/soc-modules-core/src/main/resources/mapper/notice/CoreNoticeRuleMapper.xml

@@ -14,7 +14,7 @@
             GROUP_CONCAT( DISTINCT o2.short_name ) AS orgNames,
             GROUP_CONCAT( DISTINCT n.role_id ) AS roleIds,
             GROUP_CONCAT( DISTINCT r.role_name ) AS roleNames,
-            GROUP_CONCAT( DISTINCT n.user_id ) AS userIds,
+            n.user_ids AS userIds,
             GROUP_CONCAT( DISTINCT u.`name` ) AS userNames,
             GROUP_CONCAT( DISTINCT n.product_type ) AS productTypes,
             GROUP_CONCAT( DISTINCT s.product_name ) AS productTypeNames
@@ -24,8 +24,9 @@
             LEFT JOIN sys_org o1 ON e.org_id = o1.id
             LEFT JOIN sys_org o2 ON n.org_id = o2.id
             LEFT JOIN sys_role r ON n.role_id = r.id
-            LEFT JOIN sys_user u ON n.user_id = u.id
             LEFT JOIN iot_alarm_system_field s ON n.product_type = s.product_type
+            LEFT JOIN core_notice_rule_item_user c ON n.id = c.rule_item_id
+            LEFT JOIN sys_user u ON c.user_id = u.id
         where 1=1
         <if test="request.name != null and request.name != ''">
             and e.`name` like concat('%',#{request.name},'%')

+ 4 - 1
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/notice/mapper/CoreNoticeRuleItemMapper.java

@@ -20,5 +20,8 @@ public interface CoreNoticeRuleItemMapper extends BaseMapper<CoreNoticeRuleItem>
 
     List<Long> getUserIdsByRoleIds(@Param("roleIds") List<String> roleIds, @Param("orgId") Long orgId);
 
-    List<Long> handleByOrgIdAndUserIds(@Param("userIds") List<String> userIds, @Param("orgId") Long orgId);
+    List<Long> getUserIdsByRoleId(@Param("roleId") Long roleId, @Param("orgId") Long orgId);
+
+    List<CoreNoticeRuleItem> getByOrgIdAndProductType(Long orgId,String productType);
+
 }

+ 3 - 2
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/notice/service/ICoreNoticeRuleItemService.java

@@ -18,7 +18,8 @@ public interface ICoreNoticeRuleItemService extends IService<CoreNoticeRuleItem>
 
     List<Long> getUserIdsByRoleIds(List<String> roleIds,Long orgId);
 
-    //根据传入用户id和orgId筛选出该机构下的人员
-    List<Long> handleByOrgIdAndUserIds(List<String> userIds,Long orgId);
+    List<Long> getUserIdsByRoleId(Long roleId,Long orgId);
+
+    List<CoreNoticeRuleItem> getByOrgIdAndProductType(Long orgId,String productType);
 
 }

+ 7 - 2
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/notice/service/impl/CoreNoticeRuleItemServiceImpl.java

@@ -27,7 +27,12 @@ public class CoreNoticeRuleItemServiceImpl extends ServiceImpl<CoreNoticeRuleIte
     }
 
     @Override
-    public List<Long> handleByOrgIdAndUserIds(List<String> userIds, Long orgId) {
-        return baseMapper.handleByOrgIdAndUserIds(userIds, orgId);
+    public List<Long> getUserIdsByRoleId(Long roleId, Long orgId) {
+        return baseMapper.getUserIdsByRoleId(roleId, orgId);
+    }
+
+    @Override
+    public List<CoreNoticeRuleItem> getByOrgIdAndProductType(Long orgId, String productType) {
+        return baseMapper.getByOrgIdAndProductType(orgId, productType);
     }
 }

+ 20 - 9
soc-modules/soc-modules-host/src/main/resources/mapper/CoreNoticeRuleItemMapper.xml

@@ -16,17 +16,28 @@
                 #{roleId}
             </foreach>
     </select>
-    <select id="handleByOrgIdAndUserIds" resultType="java.lang.Long">
+    <select id="getUserIdsByRoleId" resultType="java.lang.Long">
         SELECT
-            id
+            u.id
         FROM
-            sys_user
+            sys_user u
+            LEFT JOIN sys_user_role o ON u.id = o.user_id
+            LEFT JOIN sys_role r ON o.role_id = r.id
         WHERE
-            org_id = #{orgId}
-            and is_lock = 0
-            and id in
-            <foreach collection="userIds" item="userId" open="(" separator="," close=")">
-                #{userId}
-            </foreach>
+            u.org_id = #{orgId}
+            and u.is_lock = 0
+            and r.id = #{roleId}
+    </select>
+    <select id="getByOrgIdAndProductType" resultType="com.xunmei.common.core.domain.notice.CoreNoticeRuleItem">
+        SELECT
+            t.*
+        FROM
+            core_notice_rule_item t
+            LEFT JOIN core_notice_rule n ON t.rule_id = n.id
+        WHERE
+            t.is_deleted = 0
+            AND n.`enable` = 1
+            AND n.org_id = #{orgId}
+            AND t.product_type = #{productType}
     </select>
 </mapper>