package com.xjrsoft.module.oa.service.impl; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; 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.core.toolkit.Wrappers; import com.github.yulichang.base.MPJBaseServiceImpl; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.xjrsoft.common.enums.EnabledMark; import com.xjrsoft.common.exception.MyException; import com.xjrsoft.common.page.ConventPage; import com.xjrsoft.common.utils.LocalDateTimeUtil; import com.xjrsoft.common.utils.TreeUtil; import com.xjrsoft.common.utils.VoToColumnUtil; import com.xjrsoft.config.CommonPropertiesConfig; import com.xjrsoft.module.base.entity.BaseClass; import com.xjrsoft.module.base.entity.BaseGrade; import com.xjrsoft.module.base.mapper.BaseClassMapper; import com.xjrsoft.module.base.mapper.BaseGradeMapper; import com.xjrsoft.module.oa.dto.AddNewsAppendixDto; import com.xjrsoft.module.oa.dto.AddNewsDto; import com.xjrsoft.module.oa.dto.AddNewsRelationDto; import com.xjrsoft.module.oa.dto.AddProclamationDto; import com.xjrsoft.module.oa.dto.ChangeNewsDto; import com.xjrsoft.module.oa.dto.DeleteNewsRelationDto; import com.xjrsoft.module.oa.dto.NewsPageDto; import com.xjrsoft.module.oa.dto.NewsRelationConfigDto; import com.xjrsoft.module.oa.dto.ProclamationPageDto; import com.xjrsoft.module.oa.dto.UpdateNewsDto; import com.xjrsoft.module.oa.dto.UpdateNewsRelationDto; import com.xjrsoft.module.oa.dto.UpdateProclamationDto; import com.xjrsoft.module.oa.entity.News; import com.xjrsoft.module.oa.entity.NewsAppendix; import com.xjrsoft.module.oa.entity.NewsRelation; import com.xjrsoft.module.oa.entity.NewsRelationConfig; import com.xjrsoft.module.oa.mapper.NewsAppendixMapper; import com.xjrsoft.module.oa.mapper.NewsMapper; import com.xjrsoft.module.oa.mapper.NewsRelationConfigMapper; import com.xjrsoft.module.oa.mapper.NewsRelationMapper; import com.xjrsoft.module.oa.service.INewsAppendixService; import com.xjrsoft.module.oa.service.INewsRelationService; import com.xjrsoft.module.oa.service.INewsService; import com.xjrsoft.module.oa.vo.DeptIdOrClassIdVo; import com.xjrsoft.module.oa.vo.NewsAppendixVo; import com.xjrsoft.module.oa.vo.NewsGradeClassTreeVo; import com.xjrsoft.module.oa.vo.NewsPageVo; import com.xjrsoft.module.oa.vo.NewsRelationConfigVo; import com.xjrsoft.module.oa.vo.NewsRelationVo; import com.xjrsoft.module.oa.vo.ProclamationPageVo; import com.xjrsoft.module.oa.vo.ProclamationVo; import com.xjrsoft.module.organization.dto.WeChatSendMessageDto; import com.xjrsoft.module.organization.entity.Department; import com.xjrsoft.module.organization.entity.User; import com.xjrsoft.module.organization.entity.UserDeptRelation; import com.xjrsoft.module.organization.mapper.DepartmentMapper; import com.xjrsoft.module.organization.mapper.UserDeptRelationMapper; import com.xjrsoft.module.organization.mapper.UserMapper; import com.xjrsoft.module.organization.service.IWeChatService; import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll; import com.xjrsoft.module.student.mapper.BaseStudentSchoolRollMapper; import com.xjrsoft.module.system.entity.File; import com.xjrsoft.module.teacher.entity.XjrUser; import com.xjrsoft.module.teacher.mapper.XjrUserMapper; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; /** *

* 新闻中心表 服务实现类 *

* * @author zlf * @since 2022-06-16 */ @Service @AllArgsConstructor public class NewsServiceImpl extends MPJBaseServiceImpl implements INewsService { private final NewsMapper newsMapper; private final NewsAppendixMapper newsAppendixMapper; private final NewsRelationMapper newsRelationMapper; private final NewsRelationConfigMapper newsRelationConfigMapper; private final UserDeptRelationMapper userDeptRelationMapper; private final BaseStudentSchoolRollMapper baseStudentSchoolRollMapper; private final IWeChatService weChatService; private final UserMapper userMapper; private final BaseGradeMapper baseGradeMapper; private final DepartmentMapper departmentMapper; private final BaseClassMapper baseClassMapper; private final XjrUserMapper xjrUserMapper; private final CommonPropertiesConfig commonPropertiesConfig; private INewsRelationService newsRelationService; private INewsAppendixService newsAppendixService; @Override public List getGradeClassTree() { List treeVoList = new ArrayList(); //虚拟父级 treeVoList.add(new NewsGradeClassTreeVo() {{ setId(666666L); setName("班级"); }}); //获取所有班级的年级作为树的父级 MPJLambdaWrapper queryGrade = new MPJLambdaWrapper<>(); queryGrade .distinct() .selectAs(BaseGrade::getId, BaseGrade::getId) .selectAs(BaseGrade::getName, BaseGrade::getName) .leftJoin(BaseGrade.class, BaseGrade::getId, BaseClass::getGradeId); List gradeList = baseClassMapper.selectJoinList(BaseGrade.class, queryGrade); gradeList.forEach((node) -> { treeVoList.add(new NewsGradeClassTreeVo() {{ setId(node.getId()); setName(node.getName()); setParentId(666666L); }}); }); List classList = baseClassMapper.selectList(new QueryWrapper()); //获取班级荣誉中出现的学期下的所有班级作为树的子级 classList.forEach((node) -> { treeVoList.add(new NewsGradeClassTreeVo() {{ setId(node.getId()); setName(node.getName()); setParentId(node.getGradeId()); }}); }); List resultTreeVoList = TreeUtil.build(treeVoList); return resultTreeVoList; } @Override @Transactional(rollbackFor = Exception.class) public Long addProclamation(AddProclamationDto addProclamationDto) { News news = BeanUtil.toBean(addProclamationDto, News.class); news.setTypeId(2); news.setEnabledMark(EnabledMark.ENABLED.getCode()); //LambdaQueryWrapper queryWrapperSortcode = new LambdaQueryWrapper<>(); //queryWrapperSortcode.select("SELECT IFNULL(MAX(sort_code),1)"); newsMapper.insert(news); //添加附件子表 if (addProclamationDto.getAppendixList() != null) { for (AddNewsAppendixDto appendixDto : addProclamationDto.getAppendixList()) { NewsAppendix newsAppendix = BeanUtil.toBean(appendixDto, NewsAppendix.class); newsAppendix.setNewsId(news.getId()); newsAppendixMapper.insert(newsAppendix); } } //公告需要添加阅读关系配置,关系类型 1=部门 2=人员 3=班级 if (addProclamationDto.getSendRange() == 3 && addProclamationDto.getRelationList() != null && addProclamationDto.getRelationList().size() > 0) { addRelationConfig(news, addProclamationDto); } //如果状态是2,表示立即发布的公告,需要将阅读人添加进阅读关系表 if(addProclamationDto.getStatus() == 2){ addRelation(news, addProclamationDto, 2); return news.getId(); } //没有任何问题返回 return -1L; } @Override public ProclamationVo getProclamationById(Long id) { MPJLambdaWrapper queryWrapperNews = new MPJLambdaWrapper<>(); queryWrapperNews .select(News::getId) .selectAs(Department::getName, ProclamationVo::getSendDeptIdCN) .select(News.class, x -> VoToColumnUtil.fieldsToColumns(ProclamationVo.class).contains(x.getProperty())) .leftJoin(Department.class, Department::getId, News::getSendDeptId) .eq(News::getId, id); ProclamationVo proclamationVo = this.selectJoinOne(ProclamationVo.class, queryWrapperNews); if (proclamationVo == null) { return null; } //添加阅读关系集合 List newsRelationConfigVoList = new ArrayList<>(); //公告在草稿状态还没有阅读状态,只有阅读关系 if (proclamationVo.getStatus() == 1) { MPJLambdaWrapper queryWrapperNewsRelationConfig = new MPJLambdaWrapper<>(); queryWrapperNewsRelationConfig .select(NewsRelationConfig.class, x -> VoToColumnUtil.fieldsToColumns(NewsRelationConfigVo.class).contains(x.getProperty())) .eq(NewsRelationConfig::getNewsId, proclamationVo.getId()); newsRelationConfigVoList = newsRelationConfigMapper.selectJoinList(NewsRelationConfigVo.class, queryWrapperNewsRelationConfig); } proclamationVo.setNewsRelationConfigVoList(newsRelationConfigVoList); //添加阅读状态集合 List newsRelationVoList = new ArrayList<>(); //公告在发布状态或下架状态 if (proclamationVo.getStatus() == 2 || proclamationVo.getStatus() == 3) { MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); queryWrapper .select(NewsRelation::getId) .selectAs(XjrUser::getName, NewsRelationVo::getUserName) .select(NewsRelation.class, x -> VoToColumnUtil.fieldsToColumns(NewsRelationVo.class).contains(x.getProperty())) .leftJoin(XjrUser.class, XjrUser::getId, NewsRelation::getUserId) .eq(NewsRelation::getNewsId, proclamationVo.getId()) .disableSubLogicDel(); //当是发布人点击了该公告可以看到其下所有人的回复 if (ObjectUtil.isNotNull(proclamationVo.getCreateUserId()) && StpUtil.getLoginIdAsLong() == proclamationVo.getCreateUserId()) { newsRelationVoList = newsRelationService.selectJoinList(NewsRelationVo.class, queryWrapper); } else {//当不是发布人点击了该公告只能看到自己的回复 queryWrapper.eq(NewsRelation::getUserId, StpUtil.getLoginIdAsLong()); NewsRelationVo newsRelationVo = newsRelationService.selectJoinOne(NewsRelationVo.class, queryWrapper); if (ObjectUtil.isNotNull(newsRelationVo)) { newsRelationVoList.add(newsRelationVo); } } } proclamationVo.setRelationList(newsRelationVoList); //添加附件 List newsAppendixVoList = newsAppendixService.selectJoinList(NewsAppendixVo.class, new MPJLambdaWrapper().eq(NewsAppendix::getNewsId, id) .select(NewsRelation::getId) .select(NewsAppendix.class, x -> VoToColumnUtil.fieldsToColumns(NewsAppendixVo.class).contains(x.getProperty())) .leftJoin(File.class, File::getFolderId, NewsAppendix::getFileId, ext -> ext.selectAs(File::getFileName, NewsAppendixVo::getFileName) .selectAs(File::getFolderId, NewsAppendixVo::getFolderId) .selectAs(File::getFileUrl, NewsAppendixVo::getFileUrl)) ); if (newsAppendixVoList.size() > 0) { proclamationVo.setAppendixList(newsAppendixVoList); } return proclamationVo; } @Override public IPage proclamationManageBox(ProclamationPageDto dto) { MPJLambdaWrapper queryNews = new MPJLambdaWrapper<>(); queryNews .select(News::getId) .selectAs(Department::getName, ProclamationPageVo::getSendDeptIdCN) .select(News.class, x -> VoToColumnUtil.fieldsToColumns(ProclamationPageVo.class).contains(x.getProperty())) .leftJoin(Department.class, Department::getId, News::getSendDeptId) .eq(News::getCreateUserId, StpUtil.getLoginIdAsLong()) .eq(News::getTypeId, 2) .like(dto.getFullHead() != null, News::getFullHead, dto.getFullHead()) .like(dto.getKeyword() != null, News::getNewsContent, dto.getKeyword()) .orderByDesc(News::getId) .disableSubLogicDel(); IPage page = this.selectJoinListPage(ConventPage.getPage(dto), ProclamationPageVo.class, queryNews); return page; } @Override public IPage proclamationReceiptBox(ProclamationPageDto dto) { MPJLambdaWrapper queryNews = new MPJLambdaWrapper<>(); queryNews .select(News::getId) .selectAs(Department::getName, ProclamationPageVo::getSendDeptIdCN) .select(News.class, x -> VoToColumnUtil.fieldsToColumns(ProclamationPageVo.class).contains(x.getProperty())) .leftJoin(Department.class, Department::getId, News::getSendDeptId) .leftJoin(NewsRelation.class, NewsRelation::getNewsId, News::getId) .eq(News::getTypeId, 2) .eq(News::getStatus, 2) .gt(News::getSendEndDate, new Date()) .eq(NewsRelation::getUserId, StpUtil.getLoginIdAsLong()) .or() .eq(News::getSendRange, 2) .orderByDesc(News::getId) .disableSubLogicDel(); ; IPage page = this.selectJoinListPage(ConventPage.getPage(dto), ProclamationPageVo.class, queryNews); return page; } @Override @Transactional(rollbackFor = Exception.class) public Boolean changeStatus(ChangeNewsDto changeNewsDto) { News xjrNews = this.getById(changeNewsDto.getId()); if (changeNewsDto.getStatus() == null || xjrNews == null) { throw new MyException("参数异常"); } if (changeNewsDto.getStatus().equals(xjrNews.getStatus())) { if (changeNewsDto.getStatus() == 2) { throw new MyException("公告已发布!!!"); } else if (changeNewsDto.getStatus() == 3) { throw new MyException("公告已下架!!!"); } } xjrNews.setStatus(changeNewsDto.getStatus()); //发布公告,将阅读关系中选择的阅读人添加到关系表 if (xjrNews.getStatus() == 2) { //将发布时间改为当前时间 xjrNews.setReleaseTime(LocalDateTime.now()); //将张贴时间改为当前时间 xjrNews.setSendStartDate(LocalDateTime.now()); xjrNews.setModifyUserId(StpUtil.getLoginIdAsLong()); xjrNews.setModifyDate(LocalDateTime.now()); addRelation(xjrNews, null, 1); } if (xjrNews.getStatus() == 3) { //应该将关系配置表和关系表的数据设置为删除 } return this.updateById(xjrNews); } @Override @Transactional(rollbackFor = Exception.class) public boolean updateProclamation(UpdateProclamationDto updateProclamationDto) { News news = BeanUtil.toBean(updateProclamationDto, News.class); news.setModifyDate(LocalDateTime.now()); news.setModifyUserId(StpUtil.getLoginIdAsLong()); newsMapper.updateById(news); newsAppendixMapper.delete(Wrappers.lambdaQuery(NewsAppendix.class).eq(NewsAppendix::getNewsId, news.getId())); if (updateProclamationDto.getAppendixList() != null) { for (AddNewsAppendixDto appendixDto : updateProclamationDto.getAppendixList()) { NewsAppendix newsAppendix = BeanUtil.toBean(appendixDto, NewsAppendix.class); newsAppendix.setNewsId(news.getId()); newsAppendixMapper.insert(newsAppendix); } } if (updateProclamationDto.getSendRange() == 3 && updateProclamationDto.getRelationList() != null) { newsRelationMapper.delete(Wrappers.lambdaQuery(NewsRelation.class).eq(NewsRelation::getNewsId, news.getId())); newsRelationConfigMapper.delete(Wrappers.lambdaQuery(NewsRelationConfig.class).eq(NewsRelationConfig::getNewsId, news.getId())); updateRelationConfig(news, updateProclamationDto); } return true; } /** * 添加阅读关系配置表 * @param news * @return */ private Boolean updateRelationConfig(News news, UpdateProclamationDto updateProclamationDto){ AddProclamationDto addProclamationDto = BeanUtil.toBean(updateProclamationDto, AddProclamationDto.class); return addRelationConfig(news, addProclamationDto); } private Boolean addRelationConfig(News news, AddProclamationDto addProclamationDto){ for (AddNewsRelationDto relationDto : addProclamationDto.getRelationList()) { if (relationDto.getRelationType() == 1) { Department department = departmentMapper.selectById(relationDto.getRelationId()); newsRelationConfigMapper.insert(new NewsRelationConfig() {{ setNewsId(news.getId()); setRelationId(relationDto.getRelationId()); setRelationType(relationDto.getRelationType()); if (department != null) { setRelationName(department.getName()); //setRelationName("中小微企业是经济发展的“毛细血管,十二条措施明确推进破产审判全域智治集成改革,通过推广智慧破产平台、推动执破融合机制改革、推行小微企业破产特别保护,力求在涉企破产纠纷办理中提质效、降成本。扬州中院党组成员、副院长沈红表示,将以提升经营主体司法获得感和满意度为出发点和落脚点,让法治成为扬州营商环境核心竞争力。中小微企业是经济发展的毛细血管,十二条措施明确推进破产审判全域智治集成改革,通过推广智慧破产平台、推动执破融合机制改革、推行小微企业破产特别保护,力求在涉企破产纠纷办理中提质效、降成本。扬州中院党组成员、副院长沈红表示,将以提升经营主体司法获得感和满意度为出发点和落脚点,让法治成为扬州营商环境核心竞争力。"); } }}); } if (relationDto.getRelationType() == 2) { XjrUser xjrUser = xjrUserMapper.selectById(relationDto.getRelationId()); newsRelationConfigMapper.insert(new NewsRelationConfig() {{ setNewsId(news.getId()); setRelationId(relationDto.getRelationId()); setRelationType(relationDto.getRelationType()); if (xjrUser != null) { setRelationName(xjrUser.getName()); } }}); } if (relationDto.getRelationType() == 3) { BaseClass baseClass = baseClassMapper.selectById(relationDto.getRelationId()); BaseGrade baseGrade = null; if (baseClass == null) { baseGrade = baseGradeMapper.selectById(relationDto.getRelationId()); } BaseGrade finalBaseGrade = baseGrade; newsRelationConfigMapper.insert(new NewsRelationConfig() {{ setNewsId(news.getId()); setRelationId(relationDto.getRelationId()); setRelationType(relationDto.getRelationType()); if (baseClass != null) { setRelationName(baseClass.getName()); } if (finalBaseGrade != null) { setRelationName(finalBaseGrade.getName()); } }}); } } return true; } /** * 添加阅读关系到关系表 * @param xjrNews * @return */ private Boolean addRelation(News xjrNews ,AddProclamationDto addProclamationDto, int flag){ if (xjrNews.getSendRange() == 3) { List deptIdList = new ArrayList<>(); List personalIdList = new ArrayList<>(); List classIdList = new ArrayList<>(); if(flag == 1) { //查出当前公告的关系配置 //部门 LambdaQueryWrapper queryDeptList = new LambdaQueryWrapper<>(); queryDeptList .eq(NewsRelationConfig::getNewsId, xjrNews.getId()) .eq(NewsRelationConfig::getRelationType, 1); List deptList = newsRelationConfigMapper.selectList(queryDeptList); for (NewsRelationConfig newsRelationConfig : deptList) { deptIdList.add(newsRelationConfig.getRelationId()); } //人员 LambdaQueryWrapper queryPersonalList = new LambdaQueryWrapper<>(); queryPersonalList .eq(NewsRelationConfig::getNewsId, xjrNews.getId()) .eq(NewsRelationConfig::getRelationType, 2); List personalList = newsRelationConfigMapper.selectList(queryPersonalList); for (NewsRelationConfig newsRelationConfig : personalList) { personalIdList.add(newsRelationConfig.getRelationId()); } //班级 LambdaQueryWrapper queryClassList = new LambdaQueryWrapper<>(); queryClassList .eq(NewsRelationConfig::getNewsId, xjrNews.getId()) .eq(NewsRelationConfig::getRelationType, 3); List classList = newsRelationConfigMapper.selectList(queryClassList); for (NewsRelationConfig newsRelationConfig : classList) { classIdList.add(newsRelationConfig.getRelationId()); } } if(flag == 2){ for (AddNewsRelationDto addNewsRelationDto : addProclamationDto.getRelationList()) { if(addNewsRelationDto.getRelationType() == 1){ deptIdList.add(addNewsRelationDto.getRelationId()); } if(addNewsRelationDto.getRelationType() == 2){ personalIdList.add(addNewsRelationDto.getRelationId()); } if(addNewsRelationDto.getRelationType() == 3){ classIdList.add(addNewsRelationDto.getRelationId()); } } } //对人员进行筛选,避免重复添加 List userIdList = new ArrayList<>(); if (personalIdList.size() > 0) { //获取人员的班级或者部门 List deptIdOrClassIdVoList = newsMapper.getDeptIdOrClassId(personalIdList); for (DeptIdOrClassIdVo deptIdOrClassIdVo : deptIdOrClassIdVoList) { if (deptIdOrClassIdVo.getClassId() != null) {//有班级是学生 if (!classIdList.contains(deptIdOrClassIdVo.getClassId())) { userIdList.add(deptIdOrClassIdVo.getUserId()); } } else { if (!deptIdList.contains(deptIdOrClassIdVo.getDeptId())) { userIdList.add(deptIdOrClassIdVo.getUserId()); } } } } //添加部门人员 if (deptIdList.size() > 0) { newsRelationMapper.insertDeptUser(xjrNews.getId(), deptIdList); } //添加部门人员 if (classIdList.size() > 0) { newsRelationMapper.insertClassUser(xjrNews.getId(), classIdList); } //添加部门人员 if (userIdList.size() > 0) { newsRelationMapper.insertPersonl(xjrNews.getId(), userIdList); } } //遍历所有关系配置 /* for (NewsRelationConfig newsRelationConfig : newsRelationConfigList) { //阅读关系是部门 if (newsRelationConfig.getRelationType() == 1) { // 获取部门下的人员添加 Long deptId = newsRelationConfig.getRelationId(); MPJLambdaWrapper queryUser = new MPJLambdaWrapper<>(); queryUser .leftJoin(UserDeptRelation.class, UserDeptRelation::getUserId, XjrUser::getId) .leftJoin(Department.class, Department::getId, UserDeptRelation::getDeptId) .leftJoin(UserRoleRelation.class, UserRoleRelation::getUserId, XjrUser::getId) .leftJoin(Role.class, Role::getId, UserRoleRelation::getRoleId) .eq(Department::getId, deptId) .eq(Role::getId, 2); List userList = xjrUserMapper.selectJoinList(XjrUser.class, queryUser); for (XjrUser user : userList) { if (!userMap.containsKey(user.getId())) { userMap.put(user.getId(), user); newsRelationMapper.insert(new NewsRelation() {{ setNewsId(xjrNews.getId()); setUserId(user.getId()); setReadMark(0); setCreateDate(LocalDateTime.now()); }}); } } } //阅读关系是人员 if (newsRelationConfig.getRelationType() == 2) { if (!userMap.containsKey(newsRelationConfig.getRelationId())) { userMap.put(newsRelationConfig.getRelationId(), new XjrUser() {{ setId(newsRelationConfig.getRelationId()); }}); newsRelationMapper.insert(new NewsRelation() {{ setNewsId(xjrNews.getId()); setUserId(newsRelationConfig.getRelationId()); setReadMark(0); setCreateDate(LocalDateTime.now()); }}); } } //阅读关系是班级 if (newsRelationConfig.getRelationType() == 3) { // 获取班级下的人员添加 Long classId = newsRelationConfig.getRelationId(); MPJLambdaWrapper queryUser = new MPJLambdaWrapper<>(); queryUser .leftJoin(BaseStudentSchoolRoll.class, BaseStudentSchoolRoll::getUserId, XjrUser::getId) .eq(BaseStudentSchoolRoll::getClassId, classId); List userList = xjrUserMapper.selectJoinList(XjrUser.class, queryUser); for (XjrUser user : userList) { if (!userMap.containsKey(user.getId())) { userMap.put(user.getId(), user); newsRelationMapper.insert(new NewsRelation() {{ setNewsId(xjrNews.getId()); setUserId(user.getId()); setReadMark(0); setCreateDate(LocalDateTime.now()); }}); } } } }*/ if (xjrNews.getSendRange() == 2) { // MPJLambdaWrapper queryUser = new MPJLambdaWrapper<>(); // queryUser // .leftJoin(UserRoleRelation.class, UserRoleRelation::getUserId, XjrUser::getId) // .leftJoin(Role.class, Role::getId, UserRoleRelation::getRoleId) // .eq(Role::getId, 2); // List userList = xjrUserMapper.selectJoinList(XjrUser.class, queryUser); // for (XjrUser user : userList) { // newsRelationMapper.insert(new NewsRelation() {{ // setNewsId(xjrNews.getId()); // setUserId(user.getId()); // setReadMark(0); // setCreateDate(LocalDateTime.now()); // }}); // } newsRelationMapper.insertAllTeaStaff(xjrNews.getId()); } return true; } @Override @Transactional(rollbackFor = Exception.class) public Boolean add(AddNewsDto addNewsDto) { News news = BeanUtil.toBean(addNewsDto, News.class); news.setEnabledMark(EnabledMark.ENABLED.getCode()); newsMapper.insert(news); //添加附件子表 if (addNewsDto.getAppendixList() != null) { for (AddNewsAppendixDto appendixDto : addNewsDto.getAppendixList()) { NewsAppendix newsAppendix = BeanUtil.toBean(appendixDto, NewsAppendix.class); newsAppendix.setNewsId(news.getId()); newsAppendixMapper.insert(newsAppendix); } } //公告需要添加阅读关系,发送范围 1=全校教职工 2=全校师生 3=指定人员 //1=全校教职工,添加全校教职工到关系表 // if(addNewsDto.getTypeId() == 2 && addNewsDto.getSendRange() == 1){ // MPJLambdaWrapper queryUser = new MPJLambdaWrapper<>(); // queryUser // .leftJoin(UserRoleRelation.class, UserRoleRelation::getUserId, XjrUser::getId) // .leftJoin(Role.class, Role::getId, UserRoleRelation::getRoleId) // .eq(Role::getId, 2); // List userList = xjrUserMapper.selectJoinList(XjrUser.class,queryUser); // for (XjrUser user: userList) { // newsRelation.setUserId(user.getId()); // newsRelationMapper.insert(newsRelation); // } // } if (addNewsDto.getTypeId() == 2 && addNewsDto.getSendRange() == 1) { for (AddNewsRelationDto relationDto : addNewsDto.getRelationList()) { NewsRelationConfig newsRelationConfig = BeanUtil.toBean(relationDto, NewsRelationConfig.class); newsRelationConfig.setNewsId(news.getId()); newsRelationConfigMapper.insert(newsRelationConfig); NewsRelation newsRelation = BeanUtil.toBean(relationDto, NewsRelation.class); newsRelation.setNewsId(news.getId()); newsRelation.setReadMark(0); if (relationDto.getRelationType() == 1) { // 获取部门下的人员添加 Long deptId = relationDto.getRelationId(); MPJLambdaWrapper queryUser = new MPJLambdaWrapper<>(); queryUser .leftJoin(UserDeptRelation.class, UserDeptRelation::getUserId, XjrUser::getId) .leftJoin(Department.class, Department::getId, UserDeptRelation::getDeptId) .eq(Department::getId, deptId); List userList = xjrUserMapper.selectJoinList(XjrUser.class, queryUser); for (XjrUser user : userList) { newsRelation.setUserId(user.getId()); newsRelationMapper.insert(newsRelation); } } if (relationDto.getRelationType() == 2) { newsRelation.setUserId(relationDto.getRelationId()); newsRelationMapper.insert(newsRelation); } if (relationDto.getRelationType() == 3) { // 获取班级下的人员添加 Long deptId = relationDto.getRelationId(); MPJLambdaWrapper queryUser = new MPJLambdaWrapper<>(); queryUser .leftJoin(UserDeptRelation.class, UserDeptRelation::getUserId, XjrUser::getId) .leftJoin(Department.class, Department::getId, UserDeptRelation::getDeptId) .eq(Department::getId, deptId); List userList = xjrUserMapper.selectJoinList(XjrUser.class, queryUser); List userIdList = new ArrayList<>(); for (XjrUser user : userList) { userIdList.add(user.getId()); } for (Long userId : userIdList) { newsRelation.setUserId(userId); newsRelationMapper.insert(newsRelation); } } } } //添加新闻和公告的时候,如果状态是2,表示新闻和公告实时发布了,张贴开始时间就应该是发布时间需要发送消息 if (ObjectUtil.isNotNull(addNewsDto.getStatus()) && addNewsDto.getStatus() == 2) { SendMessage(news.getId()); } return true; } @Override public IPage manageBox(NewsPageDto dto) { dto.setLoginId(StpUtil.getLoginIdAsLong()); IPage page = newsMapper.manageBox(ConventPage.getPage(dto), dto); return page; } @Override public IPage receiptBox(NewsPageDto dto) { dto.setLoginId(StpUtil.getLoginIdAsLong()); IPage page = newsMapper.receiptBox(ConventPage.getPage(dto), dto); return page; } @Override @Transactional(rollbackFor = Exception.class) public boolean update(UpdateNewsDto updateNewsDto) { News news = BeanUtil.toBean(updateNewsDto, News.class); newsMapper.updateById(news); newsAppendixMapper.delete(Wrappers.lambdaQuery(NewsAppendix.class).eq(NewsAppendix::getNewsId, news.getId())); if (updateNewsDto.getAppendixList() != null) { for (AddNewsAppendixDto appendixDto : updateNewsDto.getAppendixList()) { NewsAppendix newsAppendix = BeanUtil.toBean(appendixDto, NewsAppendix.class); newsAppendix.setNewsId(news.getId()); newsAppendixMapper.insert(newsAppendix); } } if (updateNewsDto.getRelationList() != null) { newsRelationMapper.delete(Wrappers.lambdaQuery(NewsRelation.class).eq(NewsRelation::getNewsId, news.getId())); newsRelationConfigMapper.delete(Wrappers.lambdaQuery(NewsRelationConfig.class).eq(NewsRelationConfig::getNewsId, news.getId())); for (AddNewsRelationDto relationDto : updateNewsDto.getRelationList()) { NewsRelationConfig newsRelationConfig = BeanUtil.toBean(relationDto, NewsRelationConfig.class); newsRelationConfig.setNewsId(news.getId()); newsRelationConfigMapper.insert(newsRelationConfig); NewsRelation newsRelation = BeanUtil.toBean(relationDto, NewsRelation.class); newsRelation.setNewsId(news.getId()); newsRelation.setReadMark(0); if (relationDto.getRelationType() == 1) { // 获取部门下的人员添加 } else { newsRelation.setUserId(relationDto.getRelationId()); newsRelationMapper.insert(newsRelation); } } } return true; } /** * 设置新闻阅读权限 */ @Override @Transactional(rollbackFor = Exception.class) public boolean updateRelation(UpdateNewsRelationDto updateRelationDto) { if (updateRelationDto.getRelationList() != null) { for (NewsRelationConfigDto newsRelationConfigDto : updateRelationDto.getRelationList()) { NewsRelationConfig newsRelationConfig = new NewsRelationConfig(); newsRelationConfig.setNewsId(updateRelationDto.getId()); newsRelationConfig.setRelationId(newsRelationConfigDto.getRelationId()); newsRelationConfig.setRelationName(newsRelationConfigDto.getRelationName()); newsRelationConfig.setRelationType(updateRelationDto.getRelationType()); newsRelationConfigMapper.insert(newsRelationConfig); // 部门 if (updateRelationDto.getRelationType() == 1) { List userDeptRelationList = userDeptRelationMapper.selectList(Wrappers.query().lambda() .eq(UserDeptRelation::getDeptId, newsRelationConfigDto.getRelationId())); for (UserDeptRelation userDeptRelation : userDeptRelationList) { NewsRelation newsRelation = new NewsRelation(); newsRelation.setUserId(userDeptRelation.getUserId()); newsRelation.setNewsId(updateRelationDto.getId()); newsRelation.setReadMark(0); newsRelationMapper.insert(newsRelation); } } // 人员 if (updateRelationDto.getRelationType() == 2) { NewsRelation newsRelation = new NewsRelation(); newsRelation.setUserId(newsRelationConfigDto.getRelationId()); newsRelation.setNewsId(updateRelationDto.getId()); newsRelation.setReadMark(0); newsRelationMapper.insert(newsRelation); } // 班级 if (updateRelationDto.getRelationType() == 3) { List baseStudentSchoolRollList = baseStudentSchoolRollMapper.selectList(Wrappers.query().lambda() .eq(BaseStudentSchoolRoll::getClassId, newsRelationConfigDto.getRelationId())); for (BaseStudentSchoolRoll baseStudentSchoolRoll : baseStudentSchoolRollList) { NewsRelation newsRelation = new NewsRelation(); newsRelation.setUserId(baseStudentSchoolRoll.getUserId()); newsRelation.setNewsId(updateRelationDto.getId()); newsRelation.setReadMark(0); newsRelationMapper.insert(newsRelation); } } } } return true; } @Override @Transactional(rollbackFor = Exception.class) public boolean deleteRelation(DeleteNewsRelationDto deleteNewsRelationDto) { if (deleteNewsRelationDto.getRelationId() != null) { List newsRelationConfigList = newsRelationConfigMapper.selectList(Wrappers.query().lambda() .eq(NewsRelationConfig::getNewsId, deleteNewsRelationDto.getNewsId()) .in(NewsRelationConfig::getId, deleteNewsRelationDto.getRelationId()) ); for (NewsRelationConfig newsRelationConfig : newsRelationConfigList) { // 部门 if (newsRelationConfig.getRelationType() == 1) { List userDeptRelationList = userDeptRelationMapper.selectList(Wrappers.query().lambda() .eq(UserDeptRelation::getDeptId, newsRelationConfig.getRelationId())); List userIdList = userDeptRelationList.stream().map(UserDeptRelation::getUserId).collect(Collectors.toList()); newsRelationMapper.delete(Wrappers.query().lambda() .eq(NewsRelation::getNewsId, deleteNewsRelationDto.getNewsId()) .in(NewsRelation::getUserId, userIdList)); } // 人员 if (newsRelationConfig.getRelationType() == 2) { newsRelationMapper.delete(Wrappers.query().lambda() .eq(NewsRelation::getNewsId, deleteNewsRelationDto.getNewsId()) .eq(NewsRelation::getUserId, newsRelationConfig.getRelationId())); } // 班级 if (newsRelationConfig.getRelationType() == 3) { List baseStudentSchoolRollList = baseStudentSchoolRollMapper.selectList(Wrappers.query().lambda() .eq(BaseStudentSchoolRoll::getClassId, newsRelationConfig.getRelationId())); List userIdList = baseStudentSchoolRollList.stream().map(BaseStudentSchoolRoll::getUserId).collect(Collectors.toList()); newsRelationMapper.delete(Wrappers.query().lambda() .eq(NewsRelation::getNewsId, deleteNewsRelationDto.getNewsId()) .in(NewsRelation::getUserId, userIdList)); } } newsRelationConfigMapper.deleteBatchIds(deleteNewsRelationDto.getRelationId()); } return true; } @Override @Transactional(rollbackFor = Exception.class) public boolean delete(List ids) { newsMapper.deleteBatchIds(ids); return true; } @Override public boolean SendMessage(Long id) { try { News news = newsMapper.selectById(id); Department department = departmentMapper.selectById(news.getSendDeptId()); if (news.getSendRange() == 1) { List userList = userMapper.selectList(Wrappers.query().lambda().isNotNull(User::getOpenId).ne(User::getOpenId, "")); if (userList.size() > 0) { for (User user : userList) { WeChatSendMessageDto weChatSendMessageDto = new WeChatSendMessageDto(); weChatSendMessageDto.setUserId(user.getOpenId()); weChatSendMessageDto.setTemplateId("qmpXORPM1Cocqn503Qa4On6BJhR92UZ00eod2-6IcGo"); weChatSendMessageDto.setUrl(StrUtil.format("{}/pages/message/notice/detail?id={}", commonPropertiesConfig.getDomainApp(), id)); weChatSendMessageDto.setMsgId(id.toString()); JSONObject data = new JSONObject(); JSONObject data1 = new JSONObject(); String hValue = news.getFullHead().replace("“", "").replace("”", "").replace("\"", "").replace("\n", "").replace("\r", "").replace("\t", ""); data1.put("value", hValue); data.put("thing23", data1); JSONObject data2 = new JSONObject(); data2.put("value", (department == null) ? "重庆铜梁职业教育中心" : department.getName()); data.put("thing29", data2); JSONObject data3 = new JSONObject(); data3.put("value", LocalDateTimeUtil.format(news.getReleaseTime(), "yyyy-MM-dd HH:mm:ss")); data.put("time17", data3); weChatSendMessageDto.setContent(data); weChatService.sendTemplateMessage(weChatSendMessageDto); } } } else { List newsRelationVoList = newsRelationMapper.selectJoinList(NewsRelationVo.class, new MPJLambdaWrapper().distinct() .eq(NewsRelation::getNewsId, id) .select(NewsRelation.class, x -> VoToColumnUtil.fieldsToColumns(NewsRelationVo.class).contains(x.getProperty())) .innerJoin(User.class, onWrapper -> onWrapper.eq(NewsRelation::getUserId, User::getId).isNotNull(User::getOpenId).ne(User::getOpenId, "")) .selectAs(User::getOpenId, NewsRelationVo::getUserName) ); if (newsRelationVoList.size() > 0) { for (NewsRelationVo newsRelationVo : newsRelationVoList) { WeChatSendMessageDto weChatSendMessageDto = new WeChatSendMessageDto(); weChatSendMessageDto.setUserId(newsRelationVo.getUserName()); weChatSendMessageDto.setTemplateId("qmpXORPM1Cocqn503Qa4On6BJhR92UZ00eod2-6IcGo"); weChatSendMessageDto.setUrl(StrUtil.format("{}/pages/message/notice/detail?id={}", commonPropertiesConfig.getDomainApp(), id)); weChatSendMessageDto.setMsgId(id.toString()); JSONObject data = new JSONObject(); JSONObject data1 = new JSONObject(); data1.put("value", news.getFullHead()); data.put("thing23", data1); JSONObject data2 = new JSONObject(); data2.put("value", (department == null) ? "重庆铜梁职业教育中心" : department.getName()); data.put("thing29", data2); JSONObject data3 = new JSONObject(); data3.put("value", LocalDateTimeUtil.format(news.getReleaseTime(), "yyyy-MM-dd HH:mm:ss")); data.put("time17", data3); weChatSendMessageDto.setContent(data); weChatService.sendTemplateMessage(weChatSendMessageDto); } } } } catch (Exception ex) { } return true; } @Override public boolean dataHandle(Long id) { CompletableFuture.runAsync(() -> { this.SendMessage(id); }); return true; } }