Browse Source

用户故事小程序端接口与点赞接口

liyuan 1 month ago
parent
commit
53185aaa8c
15 changed files with 493 additions and 0 deletions
  1. 0 0
      blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/AppWeChatUserStoryMapper.xml
  2. 17 0
      blade-service-api/gubersail-shop-app-api/src/main/java/com/gubersail/shop/app/api/story/dto/AppWeChatUserStoryDto.java
  3. 104 0
      blade-service-api/gubersail-shop-app-api/src/main/java/com/gubersail/shop/app/api/story/entity/AppWeChatUserStory.java
  4. 62 0
      blade-service-api/gubersail-shop-app-api/src/main/java/com/gubersail/shop/app/api/story/entity/AppWechatUserStoryLikes.java
  5. 13 0
      blade-service-api/gubersail-shop-app-api/src/main/java/com/gubersail/shop/app/api/story/vo/AppWeChatUserStoryVo.java
  6. 2 0
      blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/story/service/impl/WeChatUserStoryServiceImpl.java
  7. 51 0
      blade-service/gubersail-shop-app/src/main/java/com/gubersail/shop/app/story/controller/AppWeChatUserStoryController.java
  8. 20 0
      blade-service/gubersail-shop-app/src/main/java/com/gubersail/shop/app/story/mapper/AppWeChatUserStoryLikesMapper.xml
  9. 10 0
      blade-service/gubersail-shop-app/src/main/java/com/gubersail/shop/app/story/mapper/AppWeChatUserStoryMapper.java
  10. 28 0
      blade-service/gubersail-shop-app/src/main/java/com/gubersail/shop/app/story/mapper/AppWeChatUserStoryMapper.xml
  11. 10 0
      blade-service/gubersail-shop-app/src/main/java/com/gubersail/shop/app/story/mapper/AppWechatUserStoryLikesMapper.java
  12. 41 0
      blade-service/gubersail-shop-app/src/main/java/com/gubersail/shop/app/story/service/IAppWeChatUserStoryService.java
  13. 115 0
      blade-service/gubersail-shop-app/src/main/java/com/gubersail/shop/app/story/service/impl/AppWeChatUserStoryServiceImpl.java
  14. 20 0
      blade-service/gubersail-shop-app/src/main/java/com/gubersail/shop/app/util/PageHelperUtil.java
  15. 0 0
      blade-service/gubersail-shop-app/src/main/java/com/gubersail/shop/app/zcrm/customer/mapper/AppWeChatUserStoryMapper.xml

+ 0 - 0
blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/DatasourceMapper.xml → blade-ops/blade-develop/src/main/java/org/springblade/develop/mapper/AppWeChatUserStoryMapper.xml


+ 17 - 0
blade-service-api/gubersail-shop-app-api/src/main/java/com/gubersail/shop/app/api/story/dto/AppWeChatUserStoryDto.java

@@ -0,0 +1,17 @@
+package com.gubersail.shop.app.api.story.dto;
+
+import com.gubersail.shop.app.api.story.entity.AppWeChatUserStory;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @author Rain
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class AppWeChatUserStoryDto extends AppWeChatUserStory {
+
+
+	private boolean isLiked;
+
+}

+ 104 - 0
blade-service-api/gubersail-shop-app-api/src/main/java/com/gubersail/shop/app/api/story/entity/AppWeChatUserStory.java

@@ -0,0 +1,104 @@
+package com.gubersail.shop.app.api.story.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author Rain
+ */
+@Data
+@TableName("wechat_user_story")
+public class AppWeChatUserStory implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 主键ID
+	 */
+	private Long id;
+
+	/**
+	 * 标题
+	 */
+	private String title;
+
+	/**
+	 * 标题图片
+	 */
+	private String titleImg;
+
+	/**
+	 * 内容
+	 */
+	private String content;
+
+	/**
+	 * 用户头像
+	 */
+	private String userAvatar;
+
+	/**
+	 * 用户昵称
+	 */
+	private String userName;
+
+	/**
+	 * 点赞数
+	 */
+	private Integer likes;
+
+	/**
+	 * 租户ID
+	 */
+	private String tenantId;
+
+	/**
+	 * 创建人
+	 */
+	private Long createUser;
+
+	/**
+	 * 创建部门
+	 */
+	private Long createDept;
+
+	/**
+	 * 创建时间
+	 */
+	private Date createTime;
+
+	/**
+	 * 修改人
+	 */
+	private Long updateUser;
+
+	/**
+	 * 修改时间
+	 */
+	private Date updateTime;
+
+	/**
+	 * 是否已删除(0 否,1 是)
+	 */
+	private Integer isDeleted;
+
+	/**
+	 * 备注
+	 */
+	private String remarks;
+
+	/**
+	 * 状态
+	 * 0 草稿
+	 * 1 发布
+	 */
+	private Integer status;
+
+	/**
+	 * 版本号
+	 */
+	private Integer version;
+
+}

+ 62 - 0
blade-service-api/gubersail-shop-app-api/src/main/java/com/gubersail/shop/app/api/story/entity/AppWechatUserStoryLikes.java

@@ -0,0 +1,62 @@
+package com.gubersail.shop.app.api.story.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author Rain
+ */
+@Data
+@TableName("wechat_user_story_likes")
+public class AppWechatUserStoryLikes {
+
+	/**
+	 * 主键ID,自增 bigint(20)
+	 */
+	private Long id;
+
+	/**
+	 * 故事ID,关联用户故事表 bigint(20)
+	 */
+	private Long storyId;
+
+	/**
+	 * 用户ID
+	 */
+	private Long userId;
+
+	/**
+	 * 点赞状态
+	 * 0否1是
+	 */
+	private Integer likes;
+
+	/**
+	 * 逻辑删除标记
+	 * 0-未删除,1-已删除
+	 */
+	private Integer isDelete;
+
+	/**
+	 * 创建人ID
+	 */
+	private Long createUser;
+
+	/**
+	 * 记录创建时间
+	 */
+	private Date createTime;
+
+	/**
+	 * 最后修改人ID
+	 */
+	private Long updateUser;
+
+	/**
+	 * 记录最后更新时间
+	 */
+	private Date updateTime;
+
+}

+ 13 - 0
blade-service-api/gubersail-shop-app-api/src/main/java/com/gubersail/shop/app/api/story/vo/AppWeChatUserStoryVo.java

@@ -0,0 +1,13 @@
+package com.gubersail.shop.app.api.story.vo;
+
+import com.gubersail.shop.app.api.story.entity.AppWeChatUserStory;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @author Rain
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class AppWeChatUserStoryVo extends AppWeChatUserStory {
+}

+ 2 - 0
blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/story/service/impl/WeChatUserStoryServiceImpl.java

@@ -39,6 +39,8 @@ public class WeChatUserStoryServiceImpl extends ServiceImpl<WeChatUserStoryMappe
 		LambdaQueryWrapper<WeChatUserStory> searchQueryWrapper = new LambdaQueryWrapper<>();
 		searchQueryWrapper.like(StringUtils.hasText(weChatUserStoryVo.getTitle()), WeChatUserStory::getTitle, weChatUserStoryVo.getTitle());
 		searchQueryWrapper.eq(Objects.nonNull(weChatUserStoryVo.getStatus()), WeChatUserStory::getStatus, weChatUserStoryVo.getStatus());
+		searchQueryWrapper.eq(WeChatUserStory::getIsDeleted, NumberEnum.Zero.number);
+		searchQueryWrapper.orderByDesc(WeChatUserStory::getCreateTime);
 		IPage<WeChatUserStory> weChatUserStoryPage = baseMapper.selectPage(Condition.getPage(query), searchQueryWrapper);
 		PageHelperUtil.getPageInfoDto(weChatUserStoryPage, dtoPage);
 		if (weChatUserStoryPage.getRecords().isEmpty()) {

+ 51 - 0
blade-service/gubersail-shop-app/src/main/java/com/gubersail/shop/app/story/controller/AppWeChatUserStoryController.java

@@ -0,0 +1,51 @@
+package com.gubersail.shop.app.story.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.gubersail.shop.app.api.story.dto.AppWeChatUserStoryDto;
+import com.gubersail.shop.app.api.story.vo.AppWeChatUserStoryVo;
+import com.gubersail.shop.app.story.service.IAppWeChatUserStoryService;
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author Rain
+ */
+@RestController
+@RequestMapping("/app/story")
+@AllArgsConstructor
+public class AppWeChatUserStoryController {
+
+	private final IAppWeChatUserStoryService weChatUserStoryService;
+
+
+	/**
+	 * 分页查询用户故事
+	 */
+	@GetMapping("/list")
+	public R<IPage<AppWeChatUserStoryDto>> list(AppWeChatUserStoryVo weChatUserStoryVo, Query query) {
+		return R.data(weChatUserStoryService.getList(weChatUserStoryVo, query));
+	}
+
+	/**
+	 * 获取详情
+	 */
+	@GetMapping("/detail")
+	public R<AppWeChatUserStoryDto> detail(@RequestParam Long id) {
+		return R.data(weChatUserStoryService.getDetail(id));
+	}
+
+	/**
+	 * 点赞
+	 */
+	@GetMapping("/likeStory")
+	public R likeStory(@RequestParam Long id, @RequestParam Integer likeStatus) {
+		return weChatUserStoryService.likeStory(id, likeStatus);
+	}
+
+
+}

+ 20 - 0
blade-service/gubersail-shop-app/src/main/java/com/gubersail/shop/app/story/mapper/AppWeChatUserStoryLikesMapper.xml

@@ -0,0 +1,20 @@
+<?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">
+<!--suppress ALL -->
+<mapper namespace="com.gubersail.shop.app.story.mapper.AppWechatUserStoryLikesMapper">
+
+
+    <resultMap id="WeChatUserStoryLikesResultMap" type="com.gubersail.shop.app.api.story.entity.AppWechatUserStoryLikes">
+        <id column="id" property="id"/>
+        <result column="story_id" property="storyId"/>
+        <result column="user_id" property="userId"/>
+        <result column="likes" property="likes"/>
+        <result column="is_delete" property="isDelete"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_time" property="updateTime"/>
+    </resultMap>
+
+
+</mapper>

+ 10 - 0
blade-service/gubersail-shop-app/src/main/java/com/gubersail/shop/app/story/mapper/AppWeChatUserStoryMapper.java

@@ -0,0 +1,10 @@
+package com.gubersail.shop.app.story.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gubersail.shop.app.api.story.entity.AppWeChatUserStory;
+
+/**
+ * @author Rain
+ */
+public interface AppWeChatUserStoryMapper extends BaseMapper<AppWeChatUserStory> {
+}

+ 28 - 0
blade-service/gubersail-shop-app/src/main/java/com/gubersail/shop/app/story/mapper/AppWeChatUserStoryMapper.xml

@@ -0,0 +1,28 @@
+<?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">
+<!--suppress ALL -->
+<mapper namespace="com.gubersail.shop.app.story.mapper.AppWeChatUserStoryMapper">
+
+
+    <resultMap id="WeChatUserStoryResultMap" type="com.gubersail.shop.app.api.story.entity.AppWeChatUserStory">
+        <id property="id" column="id"/>
+        <result property="title" column="title"/>
+        <result property="titleImg" column="title_img"/>
+        <result property="content" column="content"/>
+        <result property="userAvatar" column="user_avatar"/>
+        <result property="userName" column="user_name"/>
+        <result property="likes" column="likes"/>
+        <result property="tenantId" column="tenant_id"/>
+        <result property="createUser" column="create_user"/>
+        <result property="createDept" column="create_dept"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateUser" column="update_user"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="isDeleted" column="is_deleted"/>
+        <result property="remarks" column="remarks"/>
+        <result property="status" column="status"/>
+        <result property="version" column="version"/>
+    </resultMap>
+
+
+</mapper>

+ 10 - 0
blade-service/gubersail-shop-app/src/main/java/com/gubersail/shop/app/story/mapper/AppWechatUserStoryLikesMapper.java

@@ -0,0 +1,10 @@
+package com.gubersail.shop.app.story.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gubersail.shop.app.api.story.entity.AppWechatUserStoryLikes;
+
+/**
+ * @author Rain
+ */
+public interface AppWechatUserStoryLikesMapper extends BaseMapper<AppWechatUserStoryLikes> {
+}

+ 41 - 0
blade-service/gubersail-shop-app/src/main/java/com/gubersail/shop/app/story/service/IAppWeChatUserStoryService.java

@@ -0,0 +1,41 @@
+package com.gubersail.shop.app.story.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gubersail.shop.app.api.story.dto.AppWeChatUserStoryDto;
+import com.gubersail.shop.app.api.story.entity.AppWeChatUserStory;
+import com.gubersail.shop.app.api.story.vo.AppWeChatUserStoryVo;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+
+/**
+ * @author Rain
+ */
+public interface IAppWeChatUserStoryService extends IService<AppWeChatUserStory> {
+
+	/**
+	 * 获取列表
+	 *
+	 * @param weChatUserStoryVo 查询参数
+	 * @param query             分页
+	 * @return 结果
+	 */
+	IPage<AppWeChatUserStoryDto> getList(AppWeChatUserStoryVo weChatUserStoryVo, Query query);
+
+	/**
+	 * 获取详情
+	 *
+	 * @param id id
+	 * @return 结果
+	 */
+	AppWeChatUserStoryDto getDetail(Long id);
+
+	/**
+	 * 点赞或取消
+	 *
+	 * @param id         故事id
+	 * @param likeStatus 0 取消点赞 1 点赞
+	 * @return 结果
+	 */
+	R likeStory(Long id, Integer likeStatus);
+}

+ 115 - 0
blade-service/gubersail-shop-app/src/main/java/com/gubersail/shop/app/story/service/impl/AppWeChatUserStoryServiceImpl.java

@@ -0,0 +1,115 @@
+package com.gubersail.shop.app.story.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gubersail.shop.app.api.story.dto.AppWeChatUserStoryDto;
+import com.gubersail.shop.app.api.story.entity.AppWeChatUserStory;
+import com.gubersail.shop.app.api.story.entity.AppWechatUserStoryLikes;
+import com.gubersail.shop.app.api.story.vo.AppWeChatUserStoryVo;
+import com.gubersail.shop.app.story.mapper.AppWeChatUserStoryMapper;
+import com.gubersail.shop.app.story.mapper.AppWechatUserStoryLikesMapper;
+import com.gubersail.shop.app.story.service.IAppWeChatUserStoryService;
+import com.gubersail.shop.app.util.PageHelperUtil;
+import lombok.AllArgsConstructor;
+import org.springblade.common.enums.NumberEnum;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.BladeUser;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.ObjectUtils;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * @author Rain
+ */
+@Service
+@AllArgsConstructor
+public class AppWeChatUserStoryServiceImpl extends ServiceImpl<AppWeChatUserStoryMapper, AppWeChatUserStory> implements IAppWeChatUserStoryService {
+
+	private final AppWechatUserStoryLikesMapper appWechatUserStoryLikesMapper;
+
+	@Override
+	public IPage<AppWeChatUserStoryDto> getList(AppWeChatUserStoryVo weChatUserStoryVo, Query query) {
+		IPage<AppWeChatUserStoryDto> dtoPage = new Page<>();
+		LambdaQueryWrapper<AppWeChatUserStory> searchQueryWrapper = new LambdaQueryWrapper<>();
+		searchQueryWrapper.eq(AppWeChatUserStory::getIsDeleted, NumberEnum.Zero.number);
+		IPage<AppWeChatUserStory> weChatUserStoryPage = baseMapper.selectPage(Condition.getPage(query), searchQueryWrapper);
+		PageHelperUtil.getPageInfoDto(weChatUserStoryPage, dtoPage);
+		searchQueryWrapper.orderByDesc(AppWeChatUserStory::getLikes).orderByDesc(AppWeChatUserStory::getCreateTime);
+		if (weChatUserStoryPage.getRecords().isEmpty()) {
+			return dtoPage;
+		}
+		BladeUser nowStoryUser = AuthUtil.getUser();
+		List<AppWeChatUserStoryDto> dtoList = BeanUtil.copyProperties(weChatUserStoryPage.getRecords(), AppWeChatUserStoryDto.class);
+		List<Long> ids = dtoList.stream().map(AppWeChatUserStoryDto::getId).collect(Collectors.toList());
+		List<AppWechatUserStoryLikes> appWechatUserStoryLikesList = appWechatUserStoryLikesMapper.selectList(new LambdaQueryWrapper<AppWechatUserStoryLikes>()
+			.eq(AppWechatUserStoryLikes::getUserId, nowStoryUser.getUserId()).in(AppWechatUserStoryLikes::getStoryId, ids).eq(AppWechatUserStoryLikes::getIsDelete, NumberEnum.Zero.number));
+		if (!CollectionUtils.isEmpty(appWechatUserStoryLikesList)) {
+			Set<Long> likedStoryIds = appWechatUserStoryLikesList.stream()
+				.map(AppWechatUserStoryLikes::getStoryId)
+				.collect(Collectors.toSet());
+			dtoList.forEach(dto -> dto.setLiked(likedStoryIds.contains(dto.getId())));
+		}
+		dtoPage.setRecords(dtoList);
+		return dtoPage;
+	}
+
+	@Override
+	public AppWeChatUserStoryDto getDetail(Long id) {
+		AppWeChatUserStory weChatUserStory = baseMapper.selectById(id);
+		if (ObjectUtils.isEmpty(weChatUserStory)) {
+			return null;
+		}
+		AppWeChatUserStoryDto dto = BeanUtil.copyProperties(weChatUserStory, AppWeChatUserStoryDto.class);
+		if (ObjectUtils.isEmpty(dto)) {
+			return dto;
+		}
+		Integer storyLikes = appWechatUserStoryLikesMapper.selectCount(new LambdaQueryWrapper<AppWechatUserStoryLikes>()
+			.eq(AppWechatUserStoryLikes::getStoryId, id).eq(AppWechatUserStoryLikes::getIsDelete, NumberEnum.Zero.number).eq(AppWechatUserStoryLikes::getUserId, AuthUtil.getUserId()));
+		dto.setLiked(storyLikes > 0);
+		return dto;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R likeStory(Long id, Integer likeStatus) {
+		BladeUser nowStoryUser = AuthUtil.getUser();
+		Date nowDate = new Date();
+		AppWechatUserStoryLikes storyLikes = new AppWechatUserStoryLikes();
+		storyLikes.setStoryId(id);
+		storyLikes.setUserId(nowStoryUser.getUserId());
+		if (NumberEnum.ONE.number.equals(likeStatus)) {
+			storyLikes.setCreateUser(nowStoryUser.getUserId());
+			storyLikes.setCreateTime(nowDate);
+			appWechatUserStoryLikesMapper.insert(storyLikes);
+		} else {
+			storyLikes.setUpdateUser(nowStoryUser.getUserId());
+			storyLikes.setUpdateTime(nowDate);
+			storyLikes.setIsDelete(NumberEnum.ONE.number);
+			appWechatUserStoryLikesMapper.update(storyLikes, new LambdaQueryWrapper<AppWechatUserStoryLikes>()
+				.eq(AppWechatUserStoryLikes::getStoryId,  id).eq(AppWechatUserStoryLikes::getUserId, nowStoryUser.getUserId())
+				.eq(AppWechatUserStoryLikes::getIsDelete, NumberEnum.Zero.number));
+		}
+		AppWeChatUserStory weChatUserStory = baseMapper.selectById(id);
+		AppWeChatUserStory updateStory = new AppWeChatUserStory();
+		Integer newLikes = likeStatus.equals(NumberEnum.ONE.number) ? 1 : -1;
+		updateStory.setLikes(weChatUserStory.getLikes() + newLikes);
+		updateStory.setUpdateUser(nowStoryUser.getUserId());
+		updateStory.setUpdateTime(nowDate);
+		int updateCount = baseMapper.update(updateStory, new LambdaQueryWrapper<AppWeChatUserStory>().eq(AppWeChatUserStory::getId, id).eq(AppWeChatUserStory::getIsDeleted, NumberEnum.Zero.number));
+		return R.status(updateCount > 0);
+	}
+
+
+}

+ 20 - 0
blade-service/gubersail-shop-app/src/main/java/com/gubersail/shop/app/util/PageHelperUtil.java

@@ -0,0 +1,20 @@
+package com.gubersail.shop.app.util;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ * @author Rain
+ */
+public class PageHelperUtil {
+
+
+
+	public static <E, D> void getPageInfoDto(IPage<E> pageData, IPage<D> pageDtoData) {
+		pageDtoData.setTotal(pageData.getTotal());
+		pageDtoData.setCurrent(pageData.getCurrent());
+		pageDtoData.setSize(pageData.getSize());
+		pageDtoData.setTotal(pageData.getTotal());
+	}
+
+
+}

+ 0 - 0
blade-service/gubersail-shop-app/src/main/java/com/gubersail/shop/app/zcrm/customer/mapper/ShopAppViewCustomerSelMapper.xml → blade-service/gubersail-shop-app/src/main/java/com/gubersail/shop/app/zcrm/customer/mapper/AppWeChatUserStoryMapper.xml