Browse Source

用户故事pc端

liyuan 1 month ago
parent
commit
2258bf7c3f

+ 13 - 0
blade-service-api/gubersail-dealer-admin-api/src/main/java/com/gubersail/dealer/admin/api/story/dto/WeChatUserStoryDto.java

@@ -0,0 +1,13 @@
+package com.gubersail.dealer.admin.api.story.dto;
+
+import com.gubersail.dealer.admin.api.story.entity.WeChatUserStory;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @author Rain
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class WeChatUserStoryDto extends WeChatUserStory {
+}

+ 104 - 0
blade-service-api/gubersail-dealer-admin-api/src/main/java/com/gubersail/dealer/admin/api/story/entity/WeChatUserStory.java

@@ -0,0 +1,104 @@
+package com.gubersail.dealer.admin.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 WeChatUserStory 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;
+
+}

+ 13 - 0
blade-service-api/gubersail-dealer-admin-api/src/main/java/com/gubersail/dealer/admin/api/story/vo/WeChatUserStoryVo.java

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

+ 75 - 0
blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/story/controller/WeChatUserStoryController.java

@@ -0,0 +1,75 @@
+package com.gubersail.admin.story.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.gubersail.admin.story.service.IWeChatUserStoryService;
+import com.gubersail.dealer.admin.api.story.dto.WeChatUserStoryDto;
+import com.gubersail.dealer.admin.api.story.vo.WeChatUserStoryVo;
+import io.seata.core.model.Result;
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @author Rain
+ */
+@RestController
+@RequestMapping("/admin/story")
+@AllArgsConstructor
+public class WeChatUserStoryController {
+
+	private final IWeChatUserStoryService weChatUserStoryService;
+
+
+	/**
+	 * 分页查询用户故事
+	 */
+	@GetMapping("/list")
+	public R<IPage<WeChatUserStoryDto>> list(WeChatUserStoryVo weChatUserStoryVo, Query query) {
+		return R.data(weChatUserStoryService.getList(weChatUserStoryVo, query));
+	}
+
+	/**
+	 * 获取详情
+	 */
+	@GetMapping("/detail")
+	public R<WeChatUserStoryDto> detail(@RequestParam Long id) {
+		return R.data(weChatUserStoryService.getDetail(id));
+	}
+
+	/**
+	 * 保存(新增或更新)
+	 */
+	@PostMapping("/submit")
+	public R<Long> save(@RequestBody WeChatUserStoryVo weChatUserStoryVo) {
+		return weChatUserStoryService.submit(weChatUserStoryVo);
+	}
+
+	/**
+	 * 删除(逻辑删除)
+	 */
+	@PostMapping("/remove")
+	public R remove(@RequestBody List<Long> ids) {
+		return weChatUserStoryService.removeUserStoryByIds(ids);
+	}
+
+	/**
+	 * 发布故事
+	 */
+	@PostMapping("/publish")
+	public R publish(@RequestBody WeChatUserStoryVo weChatUserStoryVo) {
+		return weChatUserStoryService.publishStory(weChatUserStoryVo);
+	}
+
+	/**
+	 * 撤回故事
+	 */
+	@PostMapping("/withdraw")
+	public R withdraw(@RequestBody WeChatUserStoryVo weChatUserStoryVo) {
+		return weChatUserStoryService.withdrawStory(weChatUserStoryVo);
+	}
+
+
+}

+ 10 - 0
blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/story/mapper/WeChatUserStoryMapper.java

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

+ 28 - 0
blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/story/mapper/WeChatUserStoryMapper.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.admin.story.mapper.WeChatUserStoryMapper">
+
+
+    <resultMap id="WeChatUserStoryResultMap" type="com.gubersail.dealer.admin.api.story.entity.WeChatUserStory">
+        <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>

+ 66 - 0
blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/story/service/IWeChatUserStoryService.java

@@ -0,0 +1,66 @@
+package com.gubersail.admin.story.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gubersail.dealer.admin.api.story.dto.WeChatUserStoryDto;
+import com.gubersail.dealer.admin.api.story.entity.WeChatUserStory;
+import com.gubersail.dealer.admin.api.story.vo.WeChatUserStoryVo;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+
+import java.util.List;
+
+/**
+ * @author Rain
+ */
+public interface IWeChatUserStoryService extends IService<WeChatUserStory> {
+
+	/**
+	 * 获取列表
+	 *
+	 * @param weChatUserStoryVo 查询参数
+	 * @param query             分页
+	 * @return 结果
+	 */
+	IPage<WeChatUserStoryDto> getList(WeChatUserStoryVo weChatUserStoryVo, Query query);
+
+	/**
+	 * 获取详情
+	 *
+	 * @param id id
+	 * @return 结果
+	 */
+	WeChatUserStoryDto getDetail(Long id);
+
+	/**
+	 * 保存或更新
+	 *
+	 * @param weChatUserStoryVo 参数
+	 * @return 结果
+	 */
+	R<Long> submit(WeChatUserStoryVo weChatUserStoryVo);
+
+	/**
+	 * 逻辑删除
+	 *
+	 * @param ids id列表
+	 * @return 结果
+	 */
+	R removeUserStoryByIds(List<Long> ids);
+
+	/**
+	 * 发布故事
+	 *
+	 * @param weChatUserStoryVo id
+	 * @return 结果
+	 */
+	R publishStory(WeChatUserStoryVo weChatUserStoryVo);
+
+	/**
+	 * 撤回故事
+	 *
+	 * @param weChatUserStoryVo id
+	 * @return 结果
+	 */
+	R withdrawStory(WeChatUserStoryVo weChatUserStoryVo);
+}

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

@@ -0,0 +1,145 @@
+package com.gubersail.admin.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.admin.story.mapper.WeChatUserStoryMapper;
+import com.gubersail.admin.story.service.IWeChatUserStoryService;
+import com.gubersail.admin.util.PageHelperUtil;
+import com.gubersail.dealer.admin.api.story.dto.WeChatUserStoryDto;
+import com.gubersail.dealer.admin.api.story.entity.WeChatUserStory;
+import com.gubersail.dealer.admin.api.story.vo.WeChatUserStoryVo;
+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.util.CollectionUtils;
+import org.springframework.util.ObjectUtils;
+import org.springframework.util.StringUtils;
+
+import java.time.LocalDate;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * @author Rain
+ */
+@Service
+public class WeChatUserStoryServiceImpl extends ServiceImpl<WeChatUserStoryMapper, WeChatUserStory> implements IWeChatUserStoryService {
+
+	@Override
+	public IPage<WeChatUserStoryDto> getList(WeChatUserStoryVo weChatUserStoryVo, Query query) {
+		IPage<WeChatUserStoryDto> dtoPage = new Page<>();
+		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());
+		IPage<WeChatUserStory> weChatUserStoryPage = baseMapper.selectPage(Condition.getPage(query), searchQueryWrapper);
+		PageHelperUtil.getPageInfoDto(weChatUserStoryPage, dtoPage);
+		if (weChatUserStoryPage.getRecords().isEmpty()) {
+			return dtoPage;
+		}
+		dtoPage.setRecords(BeanUtil.copyProperties(weChatUserStoryPage.getRecords(), WeChatUserStoryDto.class));
+		return dtoPage;
+	}
+
+	@Override
+	public WeChatUserStoryDto getDetail(Long id) {
+		WeChatUserStory weChatUserStory = baseMapper.selectById(id);
+		if (ObjectUtils.isEmpty(weChatUserStory)) {
+			return null;
+		}
+		return BeanUtil.copyProperties(weChatUserStory, WeChatUserStoryDto.class);
+	}
+
+	@Override
+	public R<Long> submit(WeChatUserStoryVo weChatUserStoryVo) {
+		BladeUser nowSubmitUser = AuthUtil.getUser();
+		Date nowDate = new Date();
+		WeChatUserStory weChatUserStory = BeanUtil.copyProperties(weChatUserStoryVo, WeChatUserStory.class);
+		if (ObjectUtils.isEmpty(weChatUserStory)) {
+			return R.fail("用户故事信息不完整,请重新填写");
+		}
+		weChatUserStory.setTenantId(nowSubmitUser.getTenantId());
+		int insertOrUpdateCount;
+		if (Objects.isNull(weChatUserStory.getId())) {
+			weChatUserStory.setCreateUser(nowSubmitUser.getUserId());
+			weChatUserStory.setCreateDept(Long.valueOf(nowSubmitUser.getDeptId()));
+			weChatUserStory.setCreateTime(nowDate);
+			insertOrUpdateCount = baseMapper.insert(weChatUserStory);
+		} else {
+			weChatUserStory.setUpdateUser(nowSubmitUser.getUserId());
+			weChatUserStory.setUpdateTime(nowDate);
+			weChatUserStory.setVersion(weChatUserStory.getVersion() + 1);
+			insertOrUpdateCount = baseMapper.update(weChatUserStory, new LambdaQueryWrapper<WeChatUserStory>()
+				.eq(WeChatUserStory::getId, weChatUserStory.getId()));
+		}
+		return insertOrUpdateCount > 0 ? R.data(weChatUserStory.getId()) : R.fail("操作失败");
+	}
+
+	@Override
+	public R removeUserStoryByIds(List<Long> ids) {
+		if (CollectionUtils.isEmpty(ids)) {
+			return R.fail("请选择要删除的用户故事");
+		}
+		List<WeChatUserStory> weChatUserStories = baseMapper.selectBatchIds(ids);
+		WeChatUserStory published = weChatUserStories.stream().filter(weChatUserStory -> NumberEnum.ONE.number.equals(weChatUserStory.getStatus())).findFirst().orElse(null);
+		if (published != null) {
+			return R.fail("用户故事:" + published.getTitle() + "已发布,不能删除");
+		}
+		WeChatUserStory updateData = new WeChatUserStoryDto();
+		updateData.setIsDeleted(NumberEnum.ONE.number);
+		updateData.setUpdateUser(AuthUtil.getUserId());
+		updateData.setUpdateTime(new Date());
+		int updateCount = baseMapper.update(updateData, new LambdaQueryWrapper<WeChatUserStory>().in(WeChatUserStory::getId, ids));
+		return R.status(updateCount > 0);
+	}
+
+
+	@Override
+	public R publishStory(WeChatUserStoryVo weChatUserStoryVo) {
+		if (Objects.isNull(weChatUserStoryVo.getId())) {
+			return R.fail("请选择要发布的用户故事");
+		}
+		WeChatUserStory weChatUserStory = baseMapper.selectById(weChatUserStoryVo.getId());
+		if (ObjectUtils.isEmpty(weChatUserStory)) {
+			return R.fail("用户故事不存在或已被删除");
+		}
+		if (NumberEnum.ONE.number.equals(weChatUserStory.getStatus())) {
+			return R.success("用户故事已发布");
+		}
+		WeChatUserStory publishStoryData = new WeChatUserStoryDto();
+		publishStoryData.setUpdateUser(AuthUtil.getUserId());
+		publishStoryData.setUpdateTime(new Date());
+		publishStoryData.setStatus(NumberEnum.ONE.number);
+		publishStoryData.setId(weChatUserStory.getId());
+		int updateCount = baseMapper.updateById(publishStoryData);
+		return R.status(updateCount > 0);
+	}
+
+	@Override
+	public R withdrawStory(WeChatUserStoryVo weChatUserStoryVo) {
+		if (Objects.isNull(weChatUserStoryVo.getId())) {
+			return R.fail("请选择要发布的用户故事");
+		}
+		WeChatUserStory weChatUserStory = baseMapper.selectById(weChatUserStoryVo.getId());
+		if (ObjectUtils.isEmpty(weChatUserStory)) {
+			return R.fail("用户故事不存在或已被删除");
+		}
+		if (NumberEnum.Zero.number.equals(weChatUserStory.getStatus())) {
+			return R.success("用户故事已撤销");
+		}
+		WeChatUserStory withdrawStoryData = new WeChatUserStoryDto();
+		withdrawStoryData.setUpdateUser(AuthUtil.getUserId());
+		withdrawStoryData.setUpdateTime(new Date());
+		withdrawStoryData.setStatus(NumberEnum.Zero.number);
+		withdrawStoryData.setId(weChatUserStory.getId());
+		int updateCount = baseMapper.updateById(withdrawStoryData);
+		return R.status(updateCount > 0);
+	}
+}

+ 20 - 0
blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/util/PageHelperUtil.java

@@ -0,0 +1,20 @@
+package com.gubersail.admin.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());
+	}
+
+
+}