From 496a79471e5548942107e72bb48335f60318c439 Mon Sep 17 00:00:00 2001 From: 284718418@qq.com <youlinrc321> Date: Wed, 29 Jun 2022 08:50:13 +0800 Subject: [PATCH] OA 讯息添加文件传阅 模板排序 --- src/main/java/cn/timer/api/bean/qyxx/CmsContent.java | 3 +++ src/main/java/cn/timer/api/bean/qyxx/CmsContentModular.java | 3 +++ src/main/java/cn/timer/api/bean/qyxx/CmsContentRead.java | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/cn/timer/api/controller/qyxx/CmsController.java | 182 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------- src/main/java/cn/timer/api/dao/qyxx/CmsContentMapper.java | 4 ++-- src/main/java/cn/timer/api/dao/qyxx/CmsContentReadMapper.java | 17 +++++++++++++++++ src/main/java/cn/timer/api/dto/qyxx/CmsContentDto.java | 10 ++++++++++ src/main/java/cn/timer/api/dto/qyxx/CmsContentReadDto.java | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 322 insertions(+), 27 deletions(-) create mode 100644 src/main/java/cn/timer/api/bean/qyxx/CmsContentRead.java create mode 100644 src/main/java/cn/timer/api/dao/qyxx/CmsContentReadMapper.java create mode 100644 src/main/java/cn/timer/api/dto/qyxx/CmsContentReadDto.java diff --git a/src/main/java/cn/timer/api/bean/qyxx/CmsContent.java b/src/main/java/cn/timer/api/bean/qyxx/CmsContent.java index 6e24cb0..ca4dce5 100644 --- a/src/main/java/cn/timer/api/bean/qyxx/CmsContent.java +++ b/src/main/java/cn/timer/api/bean/qyxx/CmsContent.java @@ -146,4 +146,7 @@ public class CmsContent extends Model<CmsContent>{ @ApiModelProperty(value = "定时发布时间", example = "101") private Long fixedTime;// 定时发布时间 + + @ApiModelProperty(value = "是否公开:0否,1是", example = "1") + private Integer openStatus; } diff --git a/src/main/java/cn/timer/api/bean/qyxx/CmsContentModular.java b/src/main/java/cn/timer/api/bean/qyxx/CmsContentModular.java index fc7e65a..a017b9e 100644 --- a/src/main/java/cn/timer/api/bean/qyxx/CmsContentModular.java +++ b/src/main/java/cn/timer/api/bean/qyxx/CmsContentModular.java @@ -54,4 +54,7 @@ public class CmsContentModular extends Model<CmsContentModular> { @ApiModelProperty(value = "0- 开启 1-关闭", example = "0") private Integer isOpen; + @ApiModelProperty(value = "排序:升序", example = "0") + private Integer sort; + } diff --git a/src/main/java/cn/timer/api/bean/qyxx/CmsContentRead.java b/src/main/java/cn/timer/api/bean/qyxx/CmsContentRead.java new file mode 100644 index 0000000..5db9c63 --- /dev/null +++ b/src/main/java/cn/timer/api/bean/qyxx/CmsContentRead.java @@ -0,0 +1,74 @@ +package cn.timer.api.bean.qyxx; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import java.util.Date; + +/** + * 文件传阅表 + * + * @author wuqingjun + * @email 284718418@qq.com + * @date 2022-06-23 + */ +@Entity +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "cms_content_read") +@ApiModel("文件传阅表") +public class CmsContentRead extends Model<CmsContentRead>{ + + private static final long serialVersionUID = -5904257321968702198L; + + @Id + @GeneratedValue + @TableId(type = IdType.AUTO) + @ApiModelProperty(value = "编号", example = "1") + private Integer id; + + @ApiModelProperty(value = "企业讯息主表ID", example = "101") + private Integer cmsContentId; + + @ApiModelProperty(value = "留言/意见反馈", example = "") + private String reviewContent; + + @ApiModelProperty(value = "留言/意见反馈时间", example = "") + private Date reviewTime; + + @ApiModelProperty(value = "组织机构代码", example = "1") + private Integer orgCode; + + @ApiModelProperty(value = "用户ID", example = "1") + private Integer userId; + + @ApiModelProperty(value = "用户姓名", example = "张三") + private String userName; + + @ApiModelProperty(value = "阅读标记0.未读 1.已读", example = "0") + private Integer readStatus; + + @ApiModelProperty(value = "逻辑删除标记0.未删除 1.删除", example = "0") + private Integer deleteFlag; + + @ApiModelProperty(value = "创建时间", example = "") + private Date createTime; + + @ApiModelProperty(value = "更新时间", example = "") + private Date updateTime; + + +} diff --git a/src/main/java/cn/timer/api/controller/qyxx/CmsController.java b/src/main/java/cn/timer/api/controller/qyxx/CmsController.java index 14e0801..2924b8d 100644 --- a/src/main/java/cn/timer/api/controller/qyxx/CmsController.java +++ b/src/main/java/cn/timer/api/controller/qyxx/CmsController.java @@ -2,12 +2,15 @@ package cn.timer.api.controller.qyxx; import java.util.*; -import cn.timer.api.utils.redis.RedisUtil; +import cn.timer.api.bean.qyxx.*; +import cn.timer.api.dto.qyxx.CmsContentReadDto; +import com.github.yulichang.query.MPJQueryWrapper; import com.google.common.collect.Maps; -import org.apache.commons.lang3.StringUtils; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.core.RedisTemplate; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -26,10 +29,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; -import cn.timer.api.bean.qyxx.CmsAnnouncement; -import cn.timer.api.bean.qyxx.CmsContent; -import cn.timer.api.bean.qyxx.CmsContentModular; -import cn.timer.api.bean.qyxx.CmsIsRead; import cn.timer.api.bean.yggl.YgglMainEmp; import cn.timer.api.config.annotation.CurrentUser; import cn.timer.api.config.annotation.UserBean; @@ -49,6 +48,7 @@ import javax.annotation.Resource; @Api(tags = "5.0企业讯息") @Transactional @RequestMapping(value = "/qyxx", produces = { "application/json" }) +@Slf4j public class CmsController { @Autowired @@ -88,9 +88,16 @@ public class CmsController { public Result<Object> groupbyTime(@CurrentUser UserBean userBean) { Map map = Maps.newHashMap(); Integer orgCode = userBean.getOrgCode(); - QueryWrapper<CmsContent> queryWrapper = new QueryWrapper<>(); - queryWrapper.select("id", "title", "author", "releasetime", "fmtpath").eq("releasestate", 0) - .eq("organization_id", orgCode).orderByDesc("releasetime").last("limit 6"); + MPJQueryWrapper<CmsContent> queryWrapper = new MPJQueryWrapper<>(); + queryWrapper.select("t.id", "t.title", "t.author", "t.releasetime", "t.fmtpath") + .leftJoin("cms_content_read ccr on t.id = ccr.cms_content_id"); + queryWrapper.eq("t.releasestate", 0) + .and(!StringUtils.isEmpty(userBean.getEmpNum()), wq -> wq.eq("t.open_status", 1) + .or(true,q -> q.eq("t.open_status", 0).eq("ccr.user_id",userBean.getEmpNum())) + .or(true,q -> q.eq("t.open_status", 0).eq("t.userid",userBean.getEmpNum()))) + .eq("t.organization_id", orgCode) + .groupBy("t.id") + .orderByDesc("t.releasetime").last("limit 6"); List<CmsContent> qynr = CmsContent.builder().build().selectList(queryWrapper); /*应需求一定要展示前四张图片*/ QueryWrapper<CmsContent> qw = new QueryWrapper<>(); @@ -152,9 +159,16 @@ public class CmsController { for (CmsContentModular cmsContentModular : list) { // 分类模块id Integer id = cmsContentModular.getId(); - QueryWrapper<CmsContent> queryWrapper = new QueryWrapper<>(); - queryWrapper.select("id", "modularid", "title", "author", "releasetime").eq("releasestate", 0) - .eq("organization_id", userBean.getOrgCode()).orderByDesc("releasetime").eq("modularid", id) + MPJQueryWrapper<CmsContent> queryWrapper = new MPJQueryWrapper<>(); + queryWrapper.select("t.id", "t.modularid", "t.title", "t.author", "t.releasetime") + .leftJoin("cms_content_read ccr on t.id = ccr.cms_content_id"); + queryWrapper.eq("t.releasestate", 0) + .and(!StringUtils.isEmpty(userBean.getEmpNum()), wq -> wq.eq("t.open_status", 1) + .or(true,q -> q.eq("t.open_status", 0).eq("ccr.user_id",userBean.getEmpNum())) + .or(true,q -> q.eq("t.open_status", 0).eq("t.userid",userBean.getEmpNum()))) + .eq("t.organization_id", userBean.getOrgCode()).eq("t.modularid", id) + .groupBy("t.id") + .orderByDesc("t.releasetime") .last("limit 5"); List<CmsContent> qynrs = CmsContent.builder().build().selectList(queryWrapper); o.add(qynrs); @@ -171,7 +185,8 @@ public class CmsController { public Result<Object> getxxfl(@CurrentUser UserBean userBean) { return ResultUtil.data(CmsContentModular.builder().build().selectList(new QueryWrapper<CmsContentModular>() // .eq("organization_id", userBean.getOrgCode()) - .eq("is_open", 0)), "查询分类成功!"); + .eq("is_open", 0) + .orderByAsc("sort")), "查询分类成功!"); } /** @@ -193,6 +208,9 @@ public class CmsController { // qynr.setXxbh("XX" + i++); Boolean a = qynr.getId() == null; + if(a){ + qynr.setUserid(empNum); + } if (a && qynr.getPublisher() == null) qynr.setPublisher(empNum); qynr.setOrganizationId(orgCode); @@ -200,7 +218,7 @@ public class CmsController { // 录入时间 qynr.setAddeddate(now); - // 发布方式:1,审核通过后立即发布,2定时发布,3手动发布 + // 发布方式:1,审核通过后立即发布,2定时发布,3手动发布,4立即发布 Integer fbfs = qynr.getReleasetype(); // 定时 if (fbfs != null && fbfs == 2) { @@ -211,12 +229,31 @@ public class CmsController { .eq(YgglMainEmp::getOrgCode, orgCode).eq(YgglMainEmp::getEmpNum, empNum)).getName()); qynr.setReleasetype(fbfs); qynr.setStatus(0); + if(fbfs != null && fbfs == 4){ + qynr.setReleasestate(0); + qynr.setStatus(1); + qynr.setReleasetime(now.toString()); + } qynr.insertOrUpdate(); + // 新增 文件传阅 人员数据 + if(a){ + if(!CollectionUtils.isEmpty(cmsContentDto.getCmsContentReads())){ + for (CmsContentRead entity :cmsContentDto.getCmsContentReads() ) { + entity.setCmsContentId(qynr.getId()); + entity.setOrgCode(orgCode); + entity.setReadStatus(0); + entity.setDeleteFlag(0); + entity.insert(); + } + } + } - if (a) - return ResultUtil.data(qynr, "提交成功、等待管理员审核"); - else + if (a){ + String msg = fbfs==4?"提交成功":"提交成功、等待管理员审核"; + return ResultUtil.data(qynr, msg); + } else { return ResultUtil.data(qynr, "修改成功"); + } } /** @@ -311,14 +348,18 @@ public class CmsController { qyxxQueryDto.getCurrentPage() == null ? 1 : qyxxQueryDto.getCurrentPage(), qyxxQueryDto.getTotalPage() == null ? 10 : qyxxQueryDto.getTotalPage()); - QueryWrapper<CmsContent> queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("organization_id", userBean.getOrgCode()).eq("status", 1).eq("releasestate", 0) - .eq(t != null && t > -1, "modularid", t).eq(r != null && r > -1, "releasestate", r) - .between(!StrUtil.hasBlank(s) && !StrUtil.hasBlank(e), "releasetime", + MPJQueryWrapper<CmsContent> queryWrapper = new MPJQueryWrapper<>(); + queryWrapper.select("t.id", "t.title", "t.author", "t.releasetime", "t.fmtpath") + .leftJoin("cms_content_read ccr on t.id = ccr.cms_content_id"); + queryWrapper.and(!StringUtils.isEmpty(userBean.getEmpNum()), wq -> wq.eq("t.open_status", 1).or(true,sq -> sq.eq("t.open_status", 0).eq("ccr.user_id",userBean.getEmpNum()))); + queryWrapper.eq("t.organization_id", userBean.getOrgCode()).eq("t.status", 1).eq("t.releasestate", 0) + .eq(t != null && t > -1, "t.modularid", t).eq(r != null && r > -1, "t.releasestate", r) + .between(!StrUtil.hasBlank(s) && !StrUtil.hasBlank(e), "t.releasetime", !StrUtil.hasBlank(s) ? s : "1000-01-01 00:00:00", !StrUtil.hasBlank(e) ? e : "9999-01-01 00:00:00") - .and(!StrUtil.hasBlank(q), wq -> wq.like("userid", q).or().like("author", q).or().like("title", q)) - .orderByDesc("addeddate"); + .and(!StrUtil.hasBlank(q), wq -> wq.like("t.userid", q).or().like("t.author", q).or().like("title", q)) + .groupBy("t.id") + .orderByDesc("t.addeddate"); IPage<CmsContent> cmsContentPage = CmsContent.builder().build().selectPage(page, queryWrapper); List<CmsContent> cmsContents = cmsContentPage.getRecords(); cmsContentPage.getCurrent(); @@ -401,7 +442,7 @@ public class CmsController { QueryWrapper<CmsContent> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("organization_id", userBean.getOrgCode()) .select("id", "publisher_name", "auditopinion", "modularid", "status", "title", "releasetime", - "addeddate", "author", "summary", "releasetype", "fmtpath","filepath") + "addeddate", "author", "summary", "releasetype", "fmtpath","filepath","open_status") .ne("status", 1).eq(t != null && t > -1, "modularid", t) .between(!StrUtil.hasBlank(s) && !StrUtil.hasBlank(e), "releasetime", !StrUtil.hasBlank(s) ? s : "1000-01-01 00:00:00", @@ -580,4 +621,95 @@ public class CmsController { return ResultUtil.success("设置失败"); } + /** + * 查询传阅列表 + * @return + */ + @PostMapping(value = "/getCmsContentReads") + @ApiOperation(value = "查询传阅列表", httpMethod = "POST", notes = "接口发布说明") + public Result<Object> getCmsContentReads(@CurrentUser UserBean userBean, @RequestBody CmsContentReadDto cmsContentReadDto) { + Page<CmsContentRead> page = new Page<CmsContentRead>(cmsContentReadDto.getCurrentPage(), cmsContentReadDto.getTotalPage()); + //查询传阅列表 + IPage<CmsContentRead> cmsContentReads = CmsContentRead.builder().build() + .selectPage(page, new QueryWrapper<CmsContentRead>() + .lambda().eq(CmsContentRead::getCmsContentId, cmsContentReadDto.getCmsContentId()).orderByDesc(CmsContentRead::getReviewTime)); + + return ResultUtil.data(cmsContentReads); + } + + /** + * 标记已阅 + */ + @GetMapping(value = "/haveRead/{id}") + @ApiOperation(value = "标记已阅", httpMethod = "GET", notes = "接口发布说明") + public Result<Object> haveRead(@CurrentUser UserBean userBean, @PathVariable("id") Integer id) { + //用户id查询传阅消息 + CmsContentRead cmsContentRead = CmsContentRead.builder().build() + .selectOne(new QueryWrapper<CmsContentRead>().lambda() + .eq(CmsContentRead::getUserId, userBean.getEmpNum()) + .eq(CmsContentRead::getOrgCode, userBean.getOrgCode()) + .eq(CmsContentRead::getCmsContentId,id)); + + if(cmsContentRead == null){ + cmsContentRead = new CmsContentRead(); + cmsContentRead.setUserId(userBean.getEmpNum()); + cmsContentRead.setUserName(userBean.getUserInfo().getName()); + cmsContentRead.setOrgCode(userBean.getOrgCode()); + cmsContentRead.setCmsContentId(id); + }else { + //已阅 直接返回 + if(cmsContentRead.getReadStatus() == 1){ + return ResultUtil.data(1); + } + } + + try { + cmsContentRead.setReadStatus(1); + cmsContentRead.setReviewTime(new Date()); + cmsContentRead.insertOrUpdate(); + }catch (Exception e){ + log.error("=============已阅操作失败, " + e); + return ResultUtil.error(e); + } + return ResultUtil.success(); + } + + /** + * 根据讯息id查传阅列表 + * @return + */ + @PostMapping(value = "/comment") + @ApiOperation(value = "评论意见反馈", httpMethod = "POST", notes = "接口发布说明") + public Result<Object> comment(@CurrentUser UserBean userBean, @RequestBody CmsContentReadDto cmsContentReadDto) { + //用户id查询传阅消息 + CmsContentRead cmsContentRead = CmsContentRead.builder().build() + .selectOne(new QueryWrapper<CmsContentRead>().lambda() + .eq(CmsContentRead::getUserId, userBean.getEmpNum()) + .eq(CmsContentRead::getOrgCode, userBean.getOrgCode()) + .eq(CmsContentRead::getCmsContentId,cmsContentReadDto.getCmsContentId())); + try { + cmsContentRead.setReviewContent(cmsContentReadDto.getReviewContent()); + cmsContentRead.insertOrUpdate(); + }catch (Exception e){ + log.error("=============评论失败, " + e); + return ResultUtil.error(e); + } + return ResultUtil.success(); + } + + /** + * 添加传阅人员 + * @return + */ + @PostMapping(value = "/addReadPersonnel") + @ApiOperation(value = "添加传阅人员", httpMethod = "POST", notes = "接口发布说明") + public Result<Object> addReadPersonnel(@CurrentUser UserBean userBean, @RequestBody List<CmsContentRead> cmsContentReads) { + for (CmsContentRead ccr:cmsContentReads + ) { + ccr.insert(); + } + return ResultUtil.success(); + } + + } diff --git a/src/main/java/cn/timer/api/dao/qyxx/CmsContentMapper.java b/src/main/java/cn/timer/api/dao/qyxx/CmsContentMapper.java index 0c38dd8..0b4de2c 100644 --- a/src/main/java/cn/timer/api/dao/qyxx/CmsContentMapper.java +++ b/src/main/java/cn/timer/api/dao/qyxx/CmsContentMapper.java @@ -1,8 +1,8 @@ package cn.timer.api.dao.qyxx; +import com.github.yulichang.base.MPJBaseMapper; import org.springframework.stereotype.Repository; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; import cn.timer.api.bean.qyxx.CmsContent; @@ -12,6 +12,6 @@ import cn.timer.api.bean.qyxx.CmsContent; * @author dsc 2019-12-10 */ @Repository -public interface CmsContentMapper extends BaseMapper<CmsContent> { +public interface CmsContentMapper extends MPJBaseMapper<CmsContent> { } diff --git a/src/main/java/cn/timer/api/dao/qyxx/CmsContentReadMapper.java b/src/main/java/cn/timer/api/dao/qyxx/CmsContentReadMapper.java new file mode 100644 index 0000000..143da64 --- /dev/null +++ b/src/main/java/cn/timer/api/dao/qyxx/CmsContentReadMapper.java @@ -0,0 +1,17 @@ +package cn.timer.api.dao.qyxx; + +import cn.timer.api.bean.qyxx.CmsContentRead; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springframework.stereotype.Repository; + +/** + * 文件传阅表 + * + * @author wuqingjun + * @email 284718418@qq.com + * @date 2022-06-23 + */ +@Repository +public interface CmsContentReadMapper extends BaseMapper<CmsContentRead> { + +} diff --git a/src/main/java/cn/timer/api/dto/qyxx/CmsContentDto.java b/src/main/java/cn/timer/api/dto/qyxx/CmsContentDto.java index d5d1d06..a0050f2 100644 --- a/src/main/java/cn/timer/api/dto/qyxx/CmsContentDto.java +++ b/src/main/java/cn/timer/api/dto/qyxx/CmsContentDto.java @@ -1,10 +1,12 @@ package cn.timer.api.dto.qyxx; import java.io.Serializable; +import java.util.List; import javax.persistence.GeneratedValue; import javax.persistence.Id; +import cn.timer.api.bean.qyxx.CmsContentRead; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; @@ -137,4 +139,12 @@ public class CmsContentDto extends Page implements Serializable{ @ApiModelProperty(value = "定时发布时间", example = "101") private Long fixedTime;// 定时发布时间 + + @ApiModelProperty(value = "是否公开:0否,1是", example = "1") + private Integer openStatus; + /** + * 文件传阅人员 + */ + @ApiModelProperty(value = "文件传阅人员") + private List<CmsContentRead> cmsContentReads; } \ No newline at end of file diff --git a/src/main/java/cn/timer/api/dto/qyxx/CmsContentReadDto.java b/src/main/java/cn/timer/api/dto/qyxx/CmsContentReadDto.java new file mode 100644 index 0000000..9f9a71a --- /dev/null +++ b/src/main/java/cn/timer/api/dto/qyxx/CmsContentReadDto.java @@ -0,0 +1,56 @@ +package cn.timer.api.dto.qyxx; + +import cn.timer.api.utils.Page; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + + +import java.io.Serializable; +import java.util.Date; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class CmsContentReadDto extends Page implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "编号", example = "1") + private Integer id; + + @ApiModelProperty(value = "企业讯息主表ID", example = "101") + private Integer cmsContentId; + + @ApiModelProperty(value = "留言/意见反馈", example = "") + private String reviewContent; + + @ApiModelProperty(value = "留言/意见反馈时间", example = "") + private Date reviewTime; + + @ApiModelProperty(value = "组织机构代码", example = "1") + private Integer orgCode; + + @ApiModelProperty(value = "用户ID", example = "1") + private Integer userId; + + @ApiModelProperty(value = "用户姓名", example = "张三") + private String userName; + + @ApiModelProperty(value = "阅读标记0.未读 1.已读", example = "0") + private Integer readStatus; + + @ApiModelProperty(value = "逻辑删除标记0.未删除 1.删除", example = "0") + private Integer deleteFlag; + + @ApiModelProperty(value = "创建时间", example = "") + private Date createTime; + + @ApiModelProperty(value = "更新时间", example = "") + private Date updateTime; +} -- libgit2 0.26.0