Commit ecec3911 authored by renandong's avatar renandong 🇨🇳

标签中间表做逻辑删除,并加上时间

parent 2e792609
...@@ -7,6 +7,7 @@ import cn.hutool.core.util.ObjectUtil; ...@@ -7,6 +7,7 @@ import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.weface.entity.MenuTagsEntity; import com.weface.entity.MenuTagsEntity;
import com.weface.entity.TUserTagEntity; import com.weface.entity.TUserTagEntity;
import com.weface.entity.UserMenusEntity; import com.weface.entity.UserMenusEntity;
...@@ -102,7 +103,8 @@ public class MenuService { ...@@ -102,7 +103,8 @@ public class MenuService {
//收集中间表数据 //收集中间表数据
List<UserMenusEntity> userMenusList = new ArrayList<>(); List<UserMenusEntity> userMenusList = new ArrayList<>();
//获取所有用户信息 //获取所有用户信息
List<TUserTagEntity> tUserTagEntities = tUserTagService.list(); List<TUserTagEntity> tUserTagEntities = tUserTagService.list(new QueryWrapper<TUserTagEntity>()
.lambda().orderByDesc(TUserTagEntity::getSaveDate));
//遍历所有返回用户数据 //遍历所有返回用户数据
for (Map<String, Object> item : userTag) { for (Map<String, Object> item : userTag) {
//拿到当前用户giUid //拿到当前用户giUid
...@@ -119,11 +121,14 @@ public class MenuService { ...@@ -119,11 +121,14 @@ public class MenuService {
//收集标签id //收集标签id
List<Long> collect = list.stream().map(MenuTagsEntity::getId).collect(Collectors.toList()); List<Long> collect = list.stream().map(MenuTagsEntity::getId).collect(Collectors.toList());
//遍历标签id //遍历标签id
Date date = new Date();
for (Long aLong : collect) { for (Long aLong : collect) {
//填充数据 //填充数据
UserMenusEntity userMenusEntity = new UserMenusEntity(); UserMenusEntity userMenusEntity = new UserMenusEntity();
userMenusEntity.setUserId(uid); userMenusEntity.setUserId(uid);
userMenusEntity.setTagsId(aLong); userMenusEntity.setTagsId(aLong);
userMenusEntity.setIsValid(1);
userMenusEntity.setCreateTime(date);
//添加数据到集合内 //添加数据到集合内
userMenusList.add(userMenusEntity); userMenusList.add(userMenusEntity);
} }
......
package com.weface.config;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import java.util.Date;
/**
* @CreateUser: Administrator
* @CreateTime: 2021/11/16
* 自动填充属性
*/
public class MetaObjectHandlerConfig implements MetaObjectHandler {
/**
* 在添加时为公共字段填充属性
* @param metaObject
*/
@Override
public void insertFill(MetaObject metaObject) {
setFieldValByName("createTime", new Date(), metaObject);
setFieldValByName("isValid", 1, metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
}
}
...@@ -28,4 +28,11 @@ public class MybatisPlusConfig { ...@@ -28,4 +28,11 @@ public class MybatisPlusConfig {
return new PaginationInterceptor(); return new PaginationInterceptor();
} }
/**
* 自动填充属性
*/
@Bean
public MetaObjectHandlerConfig metaObjectHandlerConfig(){
return new MetaObjectHandlerConfig();
}
} }
...@@ -19,7 +19,7 @@ public interface UserMenusDao extends BaseMapper<UserMenusEntity> { ...@@ -19,7 +19,7 @@ public interface UserMenusDao extends BaseMapper<UserMenusEntity> {
//批量插入 //批量插入
int batchInsert(List<UserMenusEntity> list); int batchInsert(List<UserMenusEntity> list);
//全表删除 //根据uid查询标签id
int deleteAll(List<String> list); List<Long> findIdByUserId(List<String> list);
} }
...@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.annotation.TableName; ...@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
...@@ -43,7 +44,10 @@ public class TUserTagEntity implements Serializable { ...@@ -43,7 +44,10 @@ public class TUserTagEntity implements Serializable {
*/ */
@Excel(name = "用户Gid", width = 40) @Excel(name = "用户Gid", width = 40)
private String gid; private String gid;
/**
* 更新时间
*/
private Date saveDate;
/** /**
* 标签数据 * 标签数据
*/ */
......
package com.weface.entity; package com.weface.entity;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date;
/** /**
* 用户和标签中间表 * 用户和标签中间表
...@@ -31,5 +31,19 @@ public class UserMenusEntity implements Serializable { ...@@ -31,5 +31,19 @@ public class UserMenusEntity implements Serializable {
* 标签ID * 标签ID
*/ */
private Long tagsId; private Long tagsId;
/**
* 是否删除 1 未删除 0 删除
*/
/**
* 是否有效 1:有效 0 无效
*/
@TableLogic(value = "1", delval = "0")
@TableField(fill = FieldFill.INSERT)
private Integer isValid;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private Date createTime;
} }
package com.weface.serviceimpl; package com.weface.serviceimpl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.weface.dao.UserMenusDao; import com.weface.dao.UserMenusDao;
import com.weface.entity.UserMenusEntity; import com.weface.entity.UserMenusEntity;
...@@ -17,7 +18,6 @@ import java.util.stream.Collectors; ...@@ -17,7 +18,6 @@ import java.util.stream.Collectors;
@Transactional @Transactional
public class UserMenusServiceImpl extends ServiceImpl<UserMenusDao, UserMenusEntity> implements UserMenusService { public class UserMenusServiceImpl extends ServiceImpl<UserMenusDao, UserMenusEntity> implements UserMenusService {
/** /**
* 批量插入 * 批量插入
* *
...@@ -28,7 +28,11 @@ public class UserMenusServiceImpl extends ServiceImpl<UserMenusDao, UserMenusEnt ...@@ -28,7 +28,11 @@ public class UserMenusServiceImpl extends ServiceImpl<UserMenusDao, UserMenusEnt
if (CollectionUtils.isNotEmpty(userMenusList)) { if (CollectionUtils.isNotEmpty(userMenusList)) {
List<String> deleteUid = getDeleteUid(userMenusList); List<String> deleteUid = getDeleteUid(userMenusList);
//批量插入前全删 //批量插入前全删
this.baseMapper.deleteAll(deleteUid); List<Long> ids = this.baseMapper.findIdByUserId(deleteUid);
this.removeByIds(ids);
// this.remove(new QueryWrapper<UserMenusEntity>().lambda()
// .eq(UserMenusEntity::getIsValid, 1)
// .in(UserMenusEntity::getUserId, deleteUid));
//获取集合长度 //获取集合长度
int count = userMenusList.size(); int count = userMenusList.size();
//每次批量插入个数 //每次批量插入个数
...@@ -46,7 +50,6 @@ public class UserMenusServiceImpl extends ServiceImpl<UserMenusDao, UserMenusEnt ...@@ -46,7 +50,6 @@ public class UserMenusServiceImpl extends ServiceImpl<UserMenusDao, UserMenusEnt
} }
//批量插入每次一万条 //批量插入每次一万条
sum += this.baseMapper.batchInsert(userMenusEntities); sum += this.baseMapper.batchInsert(userMenusEntities);
} }
if (sum > 0) { if (sum > 0) {
log.warn("新增成功记录==" + sum + "==条"); log.warn("新增成功记录==" + sum + "==条");
...@@ -55,7 +58,8 @@ public class UserMenusServiceImpl extends ServiceImpl<UserMenusDao, UserMenusEnt ...@@ -55,7 +58,8 @@ public class UserMenusServiceImpl extends ServiceImpl<UserMenusDao, UserMenusEnt
} }
} }
} }
private List<String> getDeleteUid(List<UserMenusEntity> userMenusList){
private List<String> getDeleteUid(List<UserMenusEntity> userMenusList) {
return userMenusList.stream().map(UserMenusEntity::getUserId).distinct().collect(Collectors.toList()); return userMenusList.stream().map(UserMenusEntity::getUserId).distinct().collect(Collectors.toList());
} }
......
...@@ -44,8 +44,8 @@ mybatis-plus: ...@@ -44,8 +44,8 @@ mybatis-plus:
db-config: db-config:
#主键类型 AUTO:"数据库ID自增", INPUT:"用户输入ID", ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID"; #主键类型 AUTO:"数据库ID自增", INPUT:"用户输入ID", ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";
id-type: AUTO id-type: AUTO
logic-delete-value: -1 logic-delete-value: 0
logic-not-delete-value: 0 logic-not-delete-value: 1
banner: false banner: false
#原生配置 #原生配置
configuration: configuration:
......
...@@ -28,12 +28,9 @@ ...@@ -28,12 +28,9 @@
</select> </select>
<!-- 查询当天更新用户gid--> <!-- 查询当天更新用户gid-->
<select id="findTodayGid" resultType="string"> <select id="findTodayGid" resultType="string">
SELECT SELECT DISTINCT gid
gid FROM t_user_tag
FROM WHERE gid IS NOT NULL
t_user_tag
WHERE
gid IS NOT NULL
AND TO_DAYS( save_date ) = TO_DAYS( NOW() ) AND TO_DAYS( save_date ) = TO_DAYS( NOW() )
</select> </select>
<!-- 将公共片段抽取:只针对个别业务--> <!-- 将公共片段抽取:只针对个别业务-->
...@@ -50,7 +47,7 @@ ...@@ -50,7 +47,7 @@
FROM t_user_tag ut FROM t_user_tag ut
LEFT JOIN tb_user_menus um ON ut.uid = um.user_id LEFT JOIN tb_user_menus um ON ut.uid = um.user_id
LEFT JOIN tb_menu_tags mt ON um.tags_id = mt.id LEFT JOIN tb_menu_tags mt ON um.tags_id = mt.id
WHERE mt.level_first = "Android" WHERE mt.level_first = "Android" AND um.is_valid = 1
</sql> </sql>
<!-- 查询用户和标签信息--> <!-- 查询用户和标签信息-->
<select id="getUserAndTags" resultMap="tUserTagMap"> <select id="getUserAndTags" resultMap="tUserTagMap">
...@@ -81,7 +78,7 @@ ...@@ -81,7 +78,7 @@
LEFT JOIN tb_user_menus um ON ut.uid = um.user_id LEFT JOIN tb_user_menus um ON ut.uid = um.user_id
LEFT JOIN tb_menu_tags mt ON um.tags_id = mt.id LEFT JOIN tb_menu_tags mt ON um.tags_id = mt.id
WHERE WHERE
mt.level_first = "Android" mt.level_first = "Android" AND um.is_valid = 1
AND mt.level_third IN AND mt.level_third IN
<foreach item="item" index="index" collection="list" open="(" separator="," close=")"> <foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item} #{item}
......
...@@ -8,21 +8,23 @@ ...@@ -8,21 +8,23 @@
<result property="id" column="id"/> <result property="id" column="id"/>
<result property="userId" column="user_id"/> <result property="userId" column="user_id"/>
<result property="tagsId" column="tags_id"/> <result property="tagsId" column="tags_id"/>
<result property="isValid" column="is_valid"/>
<result property="createTime" column="create_time"/>
</resultMap> </resultMap>
<!--批量添加--> <!--批量添加-->
<insert id="batchInsert" parameterType="java.util.List"> <insert id="batchInsert" parameterType="java.util.List">
insert into tb_user_menus(id,user_id,tags_id) insert into tb_user_menus(id,user_id,tags_id,is_valid,create_time)
values values
<foreach collection="list" item="item" index="index" separator=","> <foreach collection="list" item="item" index="index" separator=",">
(#{item.id},#{item.userId},#{item.tagsId}) (#{item.id},#{item.userId},#{item.tagsId},#{item.isValid},#{item.createTime})
</foreach> </foreach>
</insert> </insert>
<!-- 批量删除--> <!-- 根据uid查询标签id-->
<delete id="deleteAll"> <select id="findIdByUserId" resultType="long">
DELETE FROM tb_user_menus where user_id IN SELECT id FROM tb_user_menus WHERE is_valid = 1 AND user_id IN
<foreach collection="list" item="item" index="index" separator="," open="(" close=")"> <foreach collection="list" item="item" index="index" separator="," open="(" close=")">
#{item} #{item}
</foreach> </foreach>
</delete> </select>
</mapper> </mapper>
\ No newline at end of file
package com.weface; package com.weface;
import com.weface.component.MenuService;
import com.weface.entity.UserMenusEntity;
import com.weface.service.TUserTagService;
import com.weface.service.UserMenusService;
import org.apache.commons.collections4.CollectionUtils;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@SpringBootTest @SpringBootTest
class PushMessageApplicationTests { class PushMessageApplicationTests {
@Autowired
private TUserTagService tUserTagService;
@Autowired
private MenuService menuService;
@Autowired
private UserMenusService userMenusService;
@Test @Test
void contextLoads() { void contextLoads() {
} }
@Test @Test
public void test(){ public void test(){
try {
List<String> todayGid = tUserTagService.findTodayGid();
int size = todayGid.size();
int limit = 1000;
List<UserMenusEntity> userMenusList = new ArrayList<>();
int totalPage = (size % limit == 0) ? (size / limit) : (size / limit + 1);
CountDownLatch latch = new CountDownLatch(totalPage);
ExecutorService pool = Executors.newFixedThreadPool(totalPage);
//收集中间表数据
for (int i = 0; i < totalPage; i++) {
int finalI = i;
Runnable runnable = () -> {
List<String> list = new ArrayList<>();
if (finalI == totalPage - 1) {
list = todayGid.subList(finalI * limit, size);
} else {
list = todayGid.subList(finalI * limit, (finalI + 1) * limit);
}
if (CollectionUtils.isNotEmpty(list)) {
String[] strings = list.toArray(new String[0]);
Map<String, Object> android = menuService.getUserTags(strings);
List<UserMenusEntity> tagUser = menuService.getTagUser(android);
if (CollectionUtils.isNotEmpty(tagUser)) {
userMenusList.addAll(tagUser);
}
}
latch.countDown();
};
pool.execute(runnable);
}
latch.await();
userMenusService.batchInsert(userMenusList);
} catch (InterruptedException e) {
e.printStackTrace();
}
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment