package com.xjrsoft.module.oa.service.impl; import cn.hutool.core.bean.BeanUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.yulichang.base.MPJBaseServiceImpl; import com.github.yulichang.toolkit.MPJWrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.xjrsoft.common.enums.EnabledMark; import com.xjrsoft.common.utils.LocalDateTimeUtil; import com.xjrsoft.common.utils.VoToColumnUtil; import com.xjrsoft.module.authority.entity.DataAuthConfig; import com.xjrsoft.module.oa.dto.*; 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.INewsService; import com.xjrsoft.module.oa.vo.NewsAppendixVo; import com.xjrsoft.module.oa.vo.NewsRelationVo; import com.xjrsoft.module.organization.dto.WeChatSendMessageDto; import com.xjrsoft.module.organization.entity.User; import com.xjrsoft.module.organization.entity.UserDeptRelation; import com.xjrsoft.module.organization.entity.UserRoleRelation; import com.xjrsoft.module.organization.mapper.UserDeptRelationMapper; import com.xjrsoft.module.organization.mapper.UserMapper; import com.xjrsoft.module.organization.service.WeChatService; import com.xjrsoft.module.student.entity.BaseStudentContact; import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll; import com.xjrsoft.module.student.entity.BaseStudentUser; import com.xjrsoft.module.student.mapper.BaseStudentSchoolRollMapper; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; 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 com.xjrsoft.module.organization.service.WeChatService weChatService; private final UserMapper userMapper; @Override @Transactional(rollbackFor = Exception.class) public Long 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); } } if (addNewsDto.getRelationList() != null) { 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) { // 获取部门下的人员添加 } else { newsRelation.setUserId(relationDto.getRelationId()); newsRelationMapper.insert(newsRelation); } } } SendMessage(news.getId()); return news.getId(); } @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) { News news = newsMapper.selectById(id); 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("sHsmz7LRj7HLd7GSTS3r2uKMhE2f1iDAW15RqSK_6KM"); weChatSendMessageDto.setUrl("https://zhxy.cqtlzjzx.com/app/#/pages/message/notice/detail?id="+id); weChatSendMessageDto.setMsgId(id.toString()); JSONObject data = new JSONObject(); JSONObject data1 = new JSONObject(); data1.put("value", news.getFullHead()); data.put("thing2", data1); JSONObject data2 = new JSONObject(); data2.put("value", news.getAuthorName()); data.put("phrase5", data2); JSONObject data3 = new JSONObject(); data3.put("value", LocalDateTimeUtil.format(news.getReleaseTime(),"yyyy-MM-dd HH:mm:ss") ); data.put("time3", 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("sHsmz7LRj7HLd7GSTS3r2uKMhE2f1iDAW15RqSK_6KM"); weChatSendMessageDto.setUrl("https://zhxy.cqtlzjzx.com/app/#/pages/message/notice/detail?id="+id); weChatSendMessageDto.setMsgId(id.toString()); JSONObject data = new JSONObject(); JSONObject data1 = new JSONObject(); data1.put("value", news.getFullHead()); data.put("thing2", data1); JSONObject data2 = new JSONObject(); data2.put("value", news.getAuthorName()); data.put("phrase5", data2); JSONObject data3 = new JSONObject(); data3.put("value", LocalDateTimeUtil.format(news.getReleaseTime(),"yyyy-MM-dd HH:mm:ss") ); data.put("time3", data3); weChatSendMessageDto.setContent(data); weChatService.sendTemplateMessage(weChatSendMessageDto); } } } return true; } }