|
@@ -1,20 +1,41 @@
|
|
|
package com.redxun.knowledge.album.service;
|
|
|
|
|
|
+import cn.hutool.core.date.DatePattern;
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.redxun.common.base.db.BaseDao;
|
|
|
import com.redxun.common.base.db.BaseService;
|
|
|
+import com.redxun.common.base.db.PageHelper;
|
|
|
import com.redxun.common.base.search.QueryFilter;
|
|
|
import com.redxun.common.service.impl.SuperServiceImpl;
|
|
|
-import com.redxun.knowledge.album.entity.dao.AlbumYelpApprove;
|
|
|
-import com.redxun.knowledge.album.mapper.AlbumYelpApproveMapper;
|
|
|
+import com.redxun.common.tool.StringUtils;
|
|
|
+import com.redxun.common.utils.ContextUtil;
|
|
|
+import com.redxun.dto.user.OsUserDto;
|
|
|
+import com.redxun.knowledge.album.entity.dao.*;
|
|
|
+import com.redxun.knowledge.album.entity.dto.AlbumApprovalRemarkDto;
|
|
|
+import com.redxun.knowledge.album.entity.enums.AlbumVersionApproveEnum;
|
|
|
+import com.redxun.knowledge.album.entity.vo.AlbumApproveListVo;
|
|
|
+import com.redxun.knowledge.album.entity.vo.AlbumYelpApproveListVo;
|
|
|
+import com.redxun.knowledge.album.mapper.*;
|
|
|
+import com.redxun.knowledge.common.MessageService;
|
|
|
+import com.redxun.knowledge.common.UserService;
|
|
|
+import com.redxun.knowledge.utils.PageListUtils;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
-* [业务--专辑点评审批表]业务服务类
|
|
|
-*/
|
|
|
+ * [业务--专辑点评审批表]业务服务类
|
|
|
+ */
|
|
|
@Slf4j
|
|
|
@Service
|
|
|
public class AlbumYelpApproveServiceImpl extends SuperServiceImpl<AlbumYelpApproveMapper, AlbumYelpApprove> implements BaseService<AlbumYelpApprove> {
|
|
@@ -22,6 +43,24 @@ public class AlbumYelpApproveServiceImpl extends SuperServiceImpl<AlbumYelpAppro
|
|
|
@Resource
|
|
|
private AlbumYelpApproveMapper albumYelpApproveMapper;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private AlbumCategoryMapper albumCategoryMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private AlbumApprovalNodeMapper albumApprovalNodeMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private AlbumYelpMapper albumYelpMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private AlbumInfoMapper albumInfoMapper;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private UserService userService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private MessageService messageService;
|
|
|
+
|
|
|
@Override
|
|
|
public BaseDao<AlbumYelpApprove> getRepository() {
|
|
|
return albumYelpApproveMapper;
|
|
@@ -29,6 +68,7 @@ public class AlbumYelpApproveServiceImpl extends SuperServiceImpl<AlbumYelpAppro
|
|
|
|
|
|
/**
|
|
|
* 根据专辑Id删除点评审核流程
|
|
|
+ *
|
|
|
* @param ids
|
|
|
*/
|
|
|
public void deleteByAlbumId(String ids) {
|
|
@@ -40,6 +80,215 @@ public class AlbumYelpApproveServiceImpl extends SuperServiceImpl<AlbumYelpAppro
|
|
|
*/
|
|
|
@Override
|
|
|
public IPage query(QueryFilter queryFilter) {
|
|
|
- return null;
|
|
|
+ Map<String, Object> params = PageHelper.constructParams(queryFilter);
|
|
|
+ String type = (String) queryFilter.getParams().get("type");
|
|
|
+ //获取全部数据
|
|
|
+ IPage page = albumYelpApproveMapper.findAllAlbumYelpApprove(queryFilter.getPage(), queryFilter.getParams(), params);
|
|
|
+ List<AlbumYelpApprove> albumYelpApproveList = page.getRecords();
|
|
|
+ //根据专辑Id进行数据分组
|
|
|
+ Map<String, List<AlbumYelpApprove>> albumApproveMap = albumYelpApproveList.stream().
|
|
|
+ collect(Collectors.groupingBy(AlbumYelpApprove::getYelpId));
|
|
|
+ // 返回结果集
|
|
|
+ List<AlbumYelpApproveListVo> albumApproveListVos = new ArrayList<>();
|
|
|
+ // 遍历每组的数据
|
|
|
+ Set<Map.Entry<String, List<AlbumYelpApprove>>> entries = albumApproveMap.entrySet();
|
|
|
+ for (Map.Entry<String, List<AlbumYelpApprove>> entry : entries) {
|
|
|
+ List<AlbumYelpApprove> value = entry.getValue();
|
|
|
+ for (int i = 0; i < value.size(); i++) {
|
|
|
+ //给结果集赋值
|
|
|
+ AlbumYelpApproveListVo albumApproveListVo = new AlbumYelpApproveListVo();
|
|
|
+ albumApproveListVo.setPkId(value.get(i).getYelpId());
|
|
|
+ albumApproveListVo.setContent(value.get(i).getAlbumYelp().getContent());
|
|
|
+ albumApproveListVo.setAlbumName(value.get(i).getAlbumInfo().getName());
|
|
|
+ String categoryId = value.get(i).getAlbumInfo().getCategoryId();
|
|
|
+ AlbumCategory albumCategory = albumCategoryMapper.selectById(categoryId);
|
|
|
+ if (albumCategory.getGrade() == 1) {
|
|
|
+ albumApproveListVo.setCategoryName(albumCategory.getName());
|
|
|
+ } else {
|
|
|
+ AlbumCategory albumCategoryParent = albumCategoryMapper.
|
|
|
+ selectOne(new LambdaQueryWrapper<AlbumCategory>().eq(AlbumCategory::getPkId, albumCategory.getParent()));
|
|
|
+ albumApproveListVo.setCategoryName(albumCategoryParent.getName() + "|" + albumCategory.getName());
|
|
|
+ }
|
|
|
+ albumApproveListVo.setCreateName(userService.queryOsUserDto(value.get(i).getCreateBy()).getFullName());
|
|
|
+ albumApproveListVo.setCreateTime(value.get(i).getCreateTime());
|
|
|
+ albumApproveListVo.setApprovalStateName(AlbumVersionApproveEnum.getMessage(value.get(i).getAlbumYelp().getApprovalState()));
|
|
|
+ //用于权限判断
|
|
|
+ albumApproveListVo.setApproverId(value.get(i).getApproverId());
|
|
|
+ albumApproveListVo.setApprovalState(value.get(i).getAlbumYelp().getApprovalState());
|
|
|
+ // albumApproveListVo.setApprovalId(value.get(i).getPkId());
|
|
|
+ List<String> actionFlag = new ArrayList<>();
|
|
|
+ if (value.get(i).getAlbumYelp().getApprovalState() == 1 || value.get(i).getAlbumYelp().getApprovalState() == 2) {
|
|
|
+ actionFlag.add("approve");
|
|
|
+ } else {
|
|
|
+ actionFlag.add("view");
|
|
|
+ }
|
|
|
+ albumApproveListVo.setActionFlag(actionFlag);
|
|
|
+ // 如果是最终审核通过,直接放入记录
|
|
|
+ if (value.get(i).getAlbumYelp().getApprovalState() == 5 && value.get(i).getIsFinal() == 1) {
|
|
|
+ albumApproveListVo.setApproverId(value.get(i).getApproverId());
|
|
|
+ //实际审核人姓名和实际审核人审核时间
|
|
|
+ albumApproveListVo.setPreviousApproverName(value.get(i).getActualApproverName());
|
|
|
+ albumApproveListVo.setPreviousApproverTime(value.get(i).getApprovalTime());
|
|
|
+ albumApproveListVos.add(albumApproveListVo);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ // 判断审批结果是否为null(如果审批结果没有null,证明审批已结束;如果等于0,证明审批没通过)
|
|
|
+ if (value.get(i).getResult() == null || value.get(i).getResult() == 0) {
|
|
|
+ if (i != 0) {
|
|
|
+ // 如果不是第一条数据,取前一条数据的实际审核人姓名
|
|
|
+ String actualApproverName = value.get(i - 1).getActualApproverName();
|
|
|
+ albumApproveListVo.setPreviousApproverName(actualApproverName);
|
|
|
+ // 如果不是第一条数据,取前一条数据的审批时间
|
|
|
+ Date approvalTime = value.get(i - 1).getApprovalTime();
|
|
|
+ albumApproveListVo.setPreviousApproverTime(approvalTime);
|
|
|
+ } else {
|
|
|
+ String actualApproverName = value.get(i).getActualApproverName();
|
|
|
+ albumApproveListVo.setPreviousApproverName(actualApproverName);
|
|
|
+ Date approvalTime = value.get(i).getApprovalTime();
|
|
|
+ albumApproveListVo.setPreviousApproverTime(approvalTime);
|
|
|
+ }
|
|
|
+ // 把该记录加到结果集中
|
|
|
+ albumApproveListVos.add(albumApproveListVo);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if ("1".equals(type)) {
|
|
|
+ Page pageResult = PageListUtils.getPages(queryFilter.getPage().getCurrent(), queryFilter.getPage().getSize(), albumApproveListVos);
|
|
|
+ return pageResult;
|
|
|
+ } else {
|
|
|
+ //获取当前登录人的userId和deptId
|
|
|
+ String userId = userService.queryLoginUser();
|
|
|
+ String deptId = userService.queryLoginUserDeptId();
|
|
|
+
|
|
|
+ List<AlbumYelpApproveListVo> albumApproveListVoUser = new ArrayList<>();
|
|
|
+ //根据部门Id获取子部门信息
|
|
|
+ //过滤数据
|
|
|
+ albumApproveListVos.forEach(albumApproveListVo -> {
|
|
|
+ Integer count = albumApprovalNodeMapper.selectAllByDeptId(deptId, albumApproveListVo.getApproverId());
|
|
|
+ if ((userId.equals(albumApproveListVo.getApproverId()) || count > 0) &&
|
|
|
+ (albumApproveListVo.getApprovalState() == 1 || albumApproveListVo.getApprovalState() == 2)) {
|
|
|
+ albumApproveListVoUser.add(albumApproveListVo);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ Page pageResult = PageListUtils.getPages(queryFilter.getPage().getCurrent(), queryFilter.getPage().getSize(), albumApproveListVoUser);
|
|
|
+ return pageResult;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 对知识专辑点评进行审核(快速审核和批量审核)
|
|
|
+ *
|
|
|
+ * @param albumApprovalRemarkDto
|
|
|
+ */
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Integer approve(AlbumApprovalRemarkDto albumApprovalRemarkDto) {
|
|
|
+ List<String> yelpIdList = albumApprovalRemarkDto.getPkIds();
|
|
|
+ // 如果审批结论为null,置位空字符串
|
|
|
+ if (StringUtils.isEmpty(albumApprovalRemarkDto.getRemark())) {
|
|
|
+ albumApprovalRemarkDto.setRemark("");
|
|
|
+ }
|
|
|
+ //判断是否审核过该记录且是否有权限
|
|
|
+ for (String yelpId : yelpIdList) {
|
|
|
+ List<AlbumYelpApprove> albumYelpApproveList = albumYelpApproveMapper.selectList(new LambdaQueryWrapper<AlbumYelpApprove>().
|
|
|
+ eq(AlbumYelpApprove::getYelpId, yelpId).
|
|
|
+ isNull(AlbumYelpApprove::getResult).
|
|
|
+ orderByAsc(AlbumYelpApprove::getSort));
|
|
|
+ if (albumYelpApproveList.get(0).getResult() != null) {
|
|
|
+ //已经审核过
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ //获取当前登录人的userId和deptId
|
|
|
+ String userId = userService.queryLoginUser();
|
|
|
+ String deptId = userService.queryLoginUserDeptId();
|
|
|
+ Integer count = albumApprovalNodeMapper.selectAllByDeptId(deptId, albumYelpApproveList.get(0).getApproverId());
|
|
|
+ if (!userId.equals(albumYelpApproveList.get(0).getApproverId())) {
|
|
|
+ if(count <= 0){
|
|
|
+ //没有权限
|
|
|
+ return 2;
|
|
|
+ } else {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //获取需要审核的审核记录
|
|
|
+ yelpIdList.forEach(yelpId -> {
|
|
|
+ List<AlbumYelpApprove> albumYelpApproveList = albumYelpApproveMapper.selectList(new LambdaQueryWrapper<AlbumYelpApprove>().
|
|
|
+ eq(AlbumYelpApprove::getYelpId, yelpId).
|
|
|
+ isNull(AlbumYelpApprove::getResult).
|
|
|
+ orderByAsc(AlbumYelpApprove::getSort));
|
|
|
+ //更改点评审核表中信息
|
|
|
+ AlbumYelpApprove albumYelpApprove = new AlbumYelpApprove();
|
|
|
+ albumYelpApprove.setPkId(albumYelpApproveList.get(0).getPkId());
|
|
|
+ albumYelpApprove.setResult(albumApprovalRemarkDto.getResult());
|
|
|
+ albumYelpApprove.setRemark(albumApprovalRemarkDto.getRemark());
|
|
|
+ albumYelpApprove.setActualApprover(userService.queryLoginUser());
|
|
|
+ albumYelpApprove.setActualApproverName(userService.queryLoginFullName());
|
|
|
+ albumYelpApprove.setApprovalTime(new Date());
|
|
|
+ albumYelpApproveMapper.updateById(albumYelpApprove);
|
|
|
+ //如果审核节点不是终审节点且专辑审核未通过,修改点评状态为节点驳回
|
|
|
+ if (albumYelpApproveList.get(0).getIsFinal() == 0 && albumApprovalRemarkDto.getResult() == 0) {
|
|
|
+ AlbumYelp albumYelp = new AlbumYelp();
|
|
|
+ albumYelp.setPkId(yelpId);
|
|
|
+ albumYelp.setState(2);
|
|
|
+ albumYelp.setApprovalState(3);
|
|
|
+ albumYelpMapper.updateById(albumYelp);
|
|
|
+ //发送站内信
|
|
|
+ AlbumInfo albumInfo = albumInfoMapper.selectById(albumYelpApproveList.get(0).getAlbumId());
|
|
|
+ AlbumYelp albumYelpById = albumYelpMapper.selectById(albumYelpApproveList.get(0).getYelpId());
|
|
|
+ sendMessage(albumYelpApproveList.get(0).getCreateBy(),albumInfo.getName(),albumYelpById.getContent(),albumApprovalRemarkDto.getRemark());
|
|
|
+ }
|
|
|
+ //如果审核节点是终审节点且专辑审核未通过,修改点评状态为最终驳回
|
|
|
+ if (albumYelpApproveList.get(0).getIsFinal() == 1 && albumApprovalRemarkDto.getResult() == 0) {
|
|
|
+ AlbumYelp albumYelp = new AlbumYelp();
|
|
|
+ albumYelp.setPkId(yelpId);
|
|
|
+ albumYelp.setState(2);
|
|
|
+ albumYelp.setApprovalState(4);
|
|
|
+ albumYelpMapper.updateById(albumYelp);
|
|
|
+ //发送站内信
|
|
|
+ AlbumInfo albumInfo = albumInfoMapper.selectById(albumYelpApproveList.get(0).getAlbumId());
|
|
|
+ AlbumYelp albumYelpById = albumYelpMapper.selectById(albumYelpApproveList.get(0).getYelpId());
|
|
|
+ sendMessage(albumYelpApproveList.get(0).getCreateBy(),albumInfo.getName(),albumYelpById.getContent(),albumApprovalRemarkDto.getRemark());
|
|
|
+ }
|
|
|
+ //如果审核节点是终审节点且专辑审核通过,修改点评状态为最终通过(即审核完成)
|
|
|
+ if (albumYelpApproveList.get(0).getIsFinal() == 1 && albumApprovalRemarkDto.getResult() == 1){
|
|
|
+ AlbumYelp albumYelp = new AlbumYelp();
|
|
|
+ albumYelp.setPkId(yelpId);
|
|
|
+ albumYelp.setState(1);
|
|
|
+ albumYelp.setApprovalState(5);
|
|
|
+ albumYelpMapper.updateById(albumYelp);
|
|
|
+ }
|
|
|
+ // 如果当前节点的下个节点为终审节点通过且当前节点审核通过,修改状态为待最终审核
|
|
|
+ if (albumYelpApproveList.size() > 1){
|
|
|
+ AlbumYelpApprove albumYelpApproveNext = albumYelpApproveList.get(1);
|
|
|
+ if(albumYelpApproveNext != null && albumYelpApproveNext.getIsFinal() == 1 && albumApprovalRemarkDto.getResult() == 1){
|
|
|
+ AlbumYelp albumYelp = new AlbumYelp();
|
|
|
+ albumYelp.setPkId(yelpId);
|
|
|
+ albumYelp.setApprovalState(2);
|
|
|
+ albumYelpMapper.updateById(albumYelp);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 给点评创建人发送站内信和企业微信消息(知识被驳回时,或者最终节点审核通过时)(flag为true,知识通过;为false,知识不通过)
|
|
|
+ *
|
|
|
+ * @param createBy,remark,flag
|
|
|
+ */
|
|
|
+ private void sendMessage(String createBy, String albumName, String yelpContent, String remark) {
|
|
|
+ List<OsUserDto> osUserDtoList = new ArrayList<>();
|
|
|
+ //查询用户信息
|
|
|
+ OsUserDto osUserDto = userService.queryOsUserDto(createBy);
|
|
|
+ osUserDtoList.add(osUserDto);
|
|
|
+ // 点评不通过
|
|
|
+ messageService.sendInnerMsg("您提交的申请已被驳回!",
|
|
|
+ "提交内容:" + albumName + ":" + yelpContent + "<br>" +
|
|
|
+ "驳回原因:" + remark + "<br>" +
|
|
|
+ "审核人:" + ContextUtil.getCurrentUser().getFullName() + "<br>" +
|
|
|
+ "审批时间:" + DateUtil.format(new Date(), DatePattern.NORM_DATETIME_PATTERN), osUserDtoList);
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
}
|