zc 2 месяцев назад
Родитель
Сommit
dccb561122

+ 8 - 0
alien-entity/src/main/java/shop/alien/entity/store/LifeUserDynamics.java

@@ -104,4 +104,12 @@ public class LifeUserDynamics {
     @ApiModelProperty(value = "置顶")
     @TableField("top_status")
     private Integer topStatus;
+
+    @ApiModelProperty(value = "修改时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date topTime;
+
+    @ApiModelProperty(value = "启用状态0-启用,1-禁用")
+    @TableField("enable_status")
+    private Integer enableStatus;
 }

+ 6 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/LifeUserDynamicsVo.java

@@ -48,4 +48,10 @@ public class LifeUserDynamicsVo extends LifeUserDynamics {
 
     @ApiModelProperty(value = "达人标识")
     private String isExpert;
+
+    @ApiModelProperty(value = "转发量")
+    private Integer transferCount;
+
+    @ApiModelProperty(value = "粉丝量")
+    private Integer fansCount;
 }

+ 5 - 0
alien-entity/src/main/java/shop/alien/mapper/LifeUserDynamicsMapper.java

@@ -49,4 +49,9 @@ public interface LifeUserDynamicsMapper extends BaseMapper<LifeUserDynamics> {
             "and lud.id in (select llr.huifu_id from life_like_record llr where llr.dianzan_id = #{phoneId} and llr.delete_flag = 0) \n"+
             "and lud.phone_id not in (select lb.blocked_phone_id  from life_blacklist lb where lb.blocker_phone_id = #{phoneId} and lb.delete_flag = 0)")
     List<LifeUserDynamicsVo> selectDianZanList(String phoneId);
+
+    List<LifeUserDynamicsVo> getDynamicsList(@Param("nickName") String nickName, @Param("userType") String userType, @Param("dynamicsType") Integer dynamicsType, @Param("releaseStartTime") String releaseStartTime, @Param("releaseEndTime") String releaseEndTime);
+
+    List<LifeUserDynamicsVo> getDynamicsDetail(@Param("id") Integer id);
+
 }

+ 90 - 0
alien-entity/src/main/resources/mapper/LifeUserDynamicsMapper.xml

@@ -0,0 +1,90 @@
+<?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="shop.alien.mapper.LifeUserDynamicsMapper">
+
+    <select id="getDynamicsList" resultType="shop.alien.entity.store.vo.LifeUserDynamicsVo">
+        select dyna1.*, COUNT(dyna1.id) AS fansCount from (
+        select dyna.*,COUNT(lc.id) AS commentCount,  COUNT(lm.id) AS transferNum from (
+        with dynamice as(
+        select id, title, phone_id phoneId, context, image_path, address,address_name,address_context, liulan_count, dianzan_count, type, created_time, substring_index(phone_id, '_', 1) flag, substring_index(phone_id, '_', -1) phone, draft , address_province, top_status, top_time, enable_status
+        from life_user_dynamics
+        where delete_flag = 0 and draft = 0 order by created_time desc
+        )
+        select dynamice.*, user.nick_name userName, user.head_img userImage, info.id storeUserId, user.id storeOrUserId, 0 isExpert
+        from dynamice
+        left join store_user user on dynamice.phone = user.phone and user.delete_flag = 0
+        left join store_info info on info.id = user.store_id and info.delete_flag = 0
+        left join store_img img on img.store_id = user.store_id and img.img_type = '10' and img.delete_flag = 0
+        where dynamice.flag = 'store'
+        union
+        select dynamice.*, user.user_name userName, user.user_image userImage, user.id storeUserId, user.id storeOrUserId, IF(lue.expert_code IS NOT NULL , 1, 0) AS isExpert
+        from dynamice
+        join life_user user on dynamice.phone = user.user_phone and user.delete_flag = 0
+        left join life_user_expert  lue on lue.user_id = user.id and lue.delete_flag = 0
+        where dynamice.flag = 'user') dyna
+        left join life_comment lc on lc.dongtai_shequ_id = dyna.id
+        left join life_message lm on lm.business_id = dyna.id
+        GROUP BY dyna.id order by  dyna.created_time desc) dyna1
+        left join life_fans lf1 on lf1.followed_id =  dyna1.phoneId
+        where 1=1
+        <if test="nickName != null and nickName != ''">
+            AND dyna1.userName LIKE CONCAT('%', #{nickName}, '%')
+        </if>
+
+        <if test="userType != null and userType != ''">
+            AND dyna1.flag = #{userType}
+        </if>
+
+        <!-- 同时处理字符串和数字类型 -->
+        <if test="dynamicsType != null">
+            <choose>
+                <when test="dynamicsType == 1">
+                    and dyna1.image_path REGEXP '.jpg|.jpeg|.png|.bmp|.webp|.gif|.svg'
+                </when>
+                <when test="dynamicsType == 2">
+                    <!-- 其他条件 -->
+                    and dyna1.image_path REGEXP '.mp4|.avi|.flv|.mkv|.rmvb|.wmv|.3gp|.mov'
+                </when>
+            </choose>
+        </if>
+
+
+
+        <if test="releaseStartTime != null and releaseStartTime != ''">
+            AND dyna1.created_time >= #{releaseStartTime}
+        </if>
+
+        <if test="releaseEndTime != null and releaseEndTime != ''">
+            AND dyna1.created_time &lt;= #{releaseEndTime}
+        </if>
+        GROUP by dyna1.id order by dyna1.top_status desc, dyna1.top_time desc
+    </select>
+
+    <select id="getDynamicsDetail" resultType="shop.alien.entity.store.vo.LifeUserDynamicsVo">
+        select dyna1.*, COUNT(dyna1.id) AS fansCount from (
+        select dyna.*,COUNT(lc.id) AS commentCount,  COUNT(lm.id) AS transferNum from (
+        with dynamice as(
+        select id, title, phone_id phoneId, context, image_path, address,address_name,address_context, liulan_count, dianzan_count, type, created_time, substring_index(phone_id, '_', 1) flag, substring_index(phone_id, '_', -1) phone, draft , address_province, top_status, top_time, enable_status
+        from life_user_dynamics
+        where id = #{id} and delete_flag = 0 and draft = 0 order by created_time desc
+        )
+        select dynamice.*, user.nick_name userName, user.head_img userImage, info.id storeUserId, user.id storeOrUserId, 0 isExpert
+        from dynamice
+        left join store_user user on dynamice.phone = user.phone and user.delete_flag = 0
+        left join store_info info on info.id = user.store_id and info.delete_flag = 0
+        left join store_img img on img.store_id = user.store_id and img.img_type = '10' and img.delete_flag = 0
+        where dynamice.flag = 'store'
+        union
+        select dynamice.*, user.user_name userName, user.user_image userImage, user.id storeUserId, user.id storeOrUserId, IF(lue.expert_code IS NOT NULL , 1, 0) AS isExpert
+        from dynamice
+        join life_user user on dynamice.phone = user.user_phone and user.delete_flag = 0
+        left join life_user_expert  lue on lue.user_id = user.id and lue.delete_flag = 0
+        where dynamice.flag = 'user') dyna
+        left join life_comment lc on lc.dongtai_shequ_id = dyna.id
+        left join life_message lm on lm.business_id = dyna.id
+        GROUP BY dyna.id order by  dyna.created_time desc) dyna1
+        left join life_fans lf1 on lf1.followed_id =  dyna1.phoneId
+        GROUP by dyna1.id order by dyna1.top_status desc, dyna1.top_time desc
+    </select>
+
+</mapper>

+ 59 - 0
alien-store/src/main/java/shop/alien/store/controller/LifeUserDynamicsController.java

@@ -181,4 +181,63 @@ public class LifeUserDynamicsController {
     public R<List<LifeUserDynamicsVo>> getDianZanList(@RequestParam(required = false) String phoneId) {
         return R.data(lifeUserDynamicsService.getDianZanList(phoneId));
     }
+
+    @ApiOperation("动态列表")
+    @ApiOperationSupport(order = 1)
+    @ApiImplicitParams({@ApiImplicitParam(name = "page", value = "分页页数", dataType = "String", paramType = "query", required = true),
+            @ApiImplicitParam(name = "size", value = "分页条数", dataType = "String", paramType = "query", required = true),
+            @ApiImplicitParam(name = "nickName", value = "昵称", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "userType", value = "1-用户 2-商户", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "dynamicsType", value = "1-图片 2-视频", dataType = "Integer", paramType = "query"),
+            @ApiImplicitParam(name = "releaseStartTime", value = "发布开始时间", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "releaseEndTime", value = "发布结束时间", dataType = "String", paramType = "query")})
+    @GetMapping("/getDynamicsList")
+    public R<IPage<LifeUserDynamicsVo>> getDynamicsList(@RequestParam(defaultValue = "1") Integer page,
+                                                        @RequestParam(defaultValue = "10") Integer size,
+                                                        @RequestParam(required = false) String nickName,
+                                                        @RequestParam(required = false) String userType,
+                                                        @RequestParam(defaultValue = "0",required = false) Integer dynamicsType,
+                                                        @RequestParam(required = false) String releaseStartTime,
+                                                        @RequestParam(required = false) String releaseEndTime) {
+        log.info("LifeUserDynamicsController.getDynamicsList?page={}&size={}&nickName={}&userType={}&dynamicsType={}", page, size, nickName, userType, dynamicsType);
+        List<LifeUserDynamicsVo> stores = lifeUserDynamicsService.getDynamicsList(page, size, nickName, userType, dynamicsType, releaseStartTime, releaseEndTime);
+        return R.data(ListToPage.setPage(stores, page, size));
+    }
+
+
+    @ApiOperation("置顶/取消功能")
+    @ApiOperationSupport(order = 2)
+    @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "用户动态ID", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "topStatus", value = "动态状态0-取消置顶,1-置顶", dataType = "Integer", paramType = "query")})
+    @PostMapping("setTopStatus")
+    public R setTopStatus(String id, int topStatus) {
+        log.info("LifeUserDynamicsController.setTopStatus?id={},topStatus={}", id, topStatus);
+        if (lifeUserDynamicsService.setTopStatus(id, topStatus) == 0){
+            return R.fail("操作失败");
+        }
+        return R.success("操作成功");
+    }
+
+    @ApiOperation("启用/禁用功能")
+    @ApiOperationSupport(order = 2)
+    @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "用户动态ID", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "topStatus", value = "启用状态0-启用,1-禁用", dataType = "Integer", paramType = "query")})
+    @PostMapping("setEnableStatus")
+    public R setEnableStatus(String id, int enableStatus) {
+        log.info("LifeUserDynamicsController.setEnableStatus?id={},enableStatus={}", id, enableStatus);
+        if (lifeUserDynamicsService.enableStatus(id, enableStatus) == 0){
+            return R.fail("操作失败");
+        }
+        return R.success("操作成功");
+    }
+
+    @ApiOperation("查看动态详情")
+    @ApiOperationSupport(order = 1)
+    @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "动态ID", dataType = "Integer", paramType = "query", required = true)})
+    @GetMapping("/getDynamicsDetail")
+    public R<LifeUserDynamicsVo> getDynamicsDetail(@RequestParam() Integer id) {
+        log.info("LifeUserDynamicsController.getDynamicsDetail?id={}", id);
+        LifeUserDynamicsVo lifeUserDynamicsVo = lifeUserDynamicsService.getDynamicsDetail(id);
+        return R.data(lifeUserDynamicsVo);
+    }
 }

+ 31 - 0
alien-store/src/main/java/shop/alien/store/service/LifeUserDynamicsService.java

@@ -57,6 +57,21 @@ public class LifeUserDynamicsService extends ServiceImpl<LifeUserDynamicsMapper,
         return lifeUserDynamicsMapper.update(null, lambdaUpdateWrapper);
     }
 
+    public int setTopStatus(String id, int topStatus) {
+        LambdaUpdateWrapper<LifeUserDynamics> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
+        lambdaUpdateWrapper.eq(LifeUserDynamics::getId, id);
+        lambdaUpdateWrapper.set(LifeUserDynamics::getTopStatus, topStatus);
+        lambdaUpdateWrapper.set(LifeUserDynamics::getTopTime, new Date());
+        return lifeUserDynamicsMapper.update(null, lambdaUpdateWrapper);
+    }
+
+    public int enableStatus(String id, int enableStatus) {
+        LambdaUpdateWrapper<LifeUserDynamics> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
+        lambdaUpdateWrapper.eq(LifeUserDynamics::getId, id);
+        lambdaUpdateWrapper.set(LifeUserDynamics::getEnableStatus, enableStatus);
+        return lifeUserDynamicsMapper.update(null, lambdaUpdateWrapper);
+    }
+
     public int addOrUpdateStore(LifeUserDynamics store) {
         if (StringUtils.isEmpty(store.getId())) {
             Date nowDate = new Date(System.currentTimeMillis());
@@ -450,4 +465,20 @@ public class LifeUserDynamicsService extends ServiceImpl<LifeUserDynamicsMapper,
         }
         return  lifeUserDynamicsVos;
     }
+
+    public List<LifeUserDynamicsVo> getDynamicsList(Integer page, Integer size, String nickName, String userType, Integer dynamicsType, String releaseStartTime, String releaseEndTime) {
+        // 查询动态数据并按类型过滤
+        List<LifeUserDynamicsVo> lifeUserDynamicsVoList = lifeUserDynamicsMapper.getDynamicsList(nickName, userType, dynamicsType, releaseStartTime, releaseEndTime);
+
+        return lifeUserDynamicsVoList;
+    }
+
+    public LifeUserDynamicsVo getDynamicsDetail(Integer id) {
+        // 查询动态数据并按类型过滤
+        List<LifeUserDynamicsVo> lifeUserDynamicsVoList = lifeUserDynamicsMapper.getDynamicsDetail(id);
+        if(!CollectionUtils.isEmpty(lifeUserDynamicsVoList)){
+            return lifeUserDynamicsVoList.get(0);
+        }
+        return new LifeUserDynamicsVo();
+    }
 }