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;
}
}