package com.xjrsoft.module.base.service.impl; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.yulichang.base.MPJBaseServiceImpl; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.xjrsoft.common.utils.LocalDateTimeUtil; import com.xjrsoft.common.utils.VoToColumnUtil; import com.xjrsoft.config.CommonPropertiesConfig; import com.xjrsoft.module.base.dto.AddBaseClassDynamicsDto; import com.xjrsoft.module.base.entity.BaseClass; import com.xjrsoft.module.base.entity.BaseClassDynamics; import com.xjrsoft.module.base.entity.BaseClassDynamicsRelation; import com.xjrsoft.module.base.mapper.BaseClassDynamicsMapper; import com.xjrsoft.module.base.mapper.BaseClassDynamicsRelationMapper; import com.xjrsoft.module.base.service.IBaseClassDynamicsService; import com.xjrsoft.module.base.service.IBaseClassService; import com.xjrsoft.module.organization.dto.WeChatSendMessageDto; import com.xjrsoft.module.organization.entity.User; import com.xjrsoft.module.organization.entity.UserStudent; import com.xjrsoft.module.organization.service.IUserService; import com.xjrsoft.module.organization.service.IWeChatService; import com.xjrsoft.module.student.dto.BaseStudentUserPageDto; import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll; import com.xjrsoft.module.student.service.IBaseStudentService; import com.xjrsoft.module.student.vo.BaseStudentUserPageVo; import com.xjrsoft.module.workflow.entity.WorkflowFormRelation; import lombok.AllArgsConstructor; import me.zhyd.oauth.log.Log; import org.camunda.bpm.engine.history.HistoricProcessInstance; 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; /** * @title: 班级动态表 * @Author dzx * @Date: 2024-09-04 * @Version 1.0 */ @Service @AllArgsConstructor public class BaseClassDynamicsServiceImpl extends MPJBaseServiceImpl implements IBaseClassDynamicsService { private final IBaseStudentService studentService; private final IUserService userService; private final BaseClassDynamicsRelationMapper dynamicsRelationMapper; private final CommonPropertiesConfig commonPropertiesConfig; private final IWeChatService weChatService; private final IBaseClassService classService; @Override @Transactional public Boolean add(AddBaseClassDynamicsDto dto) { LocalDateTime now = LocalDateTime.now(); BaseClassDynamics baseClassDynamics = BeanUtil.toBean(dto, BaseClassDynamics.class); baseClassDynamics.setCreateDate(new Date()); this.save(baseClassDynamics); BaseClass aClass = classService.getById(dto.getClassId()); List classIds = new ArrayList<>(); classIds.add(dto.getClassId()); List studentList = studentService.getStudentList(new BaseStudentUserPageDto() {{ setClassIds(classIds); }}); for (BaseStudentUserPageVo studentUserPageVo : studentList) { BaseClassDynamicsRelation dynamicsRelation = new BaseClassDynamicsRelation() {{ setBaseClassDynamicsId(baseClassDynamics.getId()); setUserId(Long.parseLong(studentUserPageVo.getId())); setReadMark(0); }}; dynamicsRelationMapper.insert(dynamicsRelation); try { WeChatSendMessageDto weChatSendMessageDto = new WeChatSendMessageDto(); weChatSendMessageDto.setUserId(studentUserPageVo.getOpenId()); weChatSendMessageDto.setTemplateId("qmpXORPM1Cocqn503Qa4On6BJhR92UZ00eod2-6IcGo"); weChatSendMessageDto.setUrl(StrUtil.format("{}pages/student/trends/detail?id={}", commonPropertiesConfig.getDomainApp(), baseClassDynamics.getId())); weChatSendMessageDto.setMsgId(dynamicsRelation.getId().toString()); JSONObject data = new JSONObject(); JSONObject data1 = new JSONObject(); data1.put("value", baseClassDynamics.getTitle()); data.put("thing23", data1); JSONObject data2 = new JSONObject(); data2.put("value", (aClass.getName() == null) ? "重庆铜梁职业教育中心" : aClass.getName()); data.put("thing29", data2); JSONObject data3 = new JSONObject(); data3.put("value", LocalDateTimeUtil.format(now, "yyyy-MM-dd HH:mm:ss")); data.put("time17", data3); weChatSendMessageDto.setContent(data); weChatService.sendTemplateMessage(weChatSendMessageDto); }catch (Exception e){ Log.error(e.getMessage()); } } List list = userService.list( new MPJLambdaWrapper() .select(User::getId) .select(User.class, x -> VoToColumnUtil.fieldsToColumns(User.class).contains(x.getProperty())) .innerJoin(UserStudent.class, UserStudent::getUserId, User::getId) .innerJoin(BaseStudentSchoolRoll.class, BaseStudentSchoolRoll::getUserId, UserStudent::getStudentId) .innerJoin(WorkflowFormRelation.class, WorkflowFormRelation::getFormKeyValue, UserStudent::getId) .eq(BaseStudentSchoolRoll::getClassId, dto.getClassId()) .eq(WorkflowFormRelation::getCurrentState, HistoricProcessInstance.STATE_COMPLETED) .isNotNull(User::getOpenId) ); for (User user : list) { BaseClassDynamicsRelation dynamicsRelation = new BaseClassDynamicsRelation() {{ setBaseClassDynamicsId(baseClassDynamics.getId()); setUserId(user.getId()); setReadMark(0); }}; dynamicsRelationMapper.insert(dynamicsRelation); try { WeChatSendMessageDto weChatSendMessageDto = new WeChatSendMessageDto(); weChatSendMessageDto.setUserId(user.getOpenId()); weChatSendMessageDto.setTemplateId("qmpXORPM1Cocqn503Qa4On6BJhR92UZ00eod2-6IcGo"); weChatSendMessageDto.setUrl(StrUtil.format("{}pages/student/trends/detail?id={}", commonPropertiesConfig.getDomainApp(), baseClassDynamics.getId())); weChatSendMessageDto.setMsgId(dynamicsRelation.getId().toString()); JSONObject data = new JSONObject(); JSONObject data1 = new JSONObject(); data1.put("value", baseClassDynamics.getTitle()); data.put("thing23", data1); JSONObject data2 = new JSONObject(); data2.put("value", (aClass.getName() == null) ? "重庆铜梁职业教育中心" : aClass.getName()); data.put("thing29", data2); JSONObject data3 = new JSONObject(); data3.put("value", LocalDateTimeUtil.format(now, "yyyy-MM-dd HH:mm:ss")); data.put("time17", data3); weChatSendMessageDto.setContent(data); weChatService.sendTemplateMessage(weChatSendMessageDto); }catch (Exception e){ Log.error(e.getMessage()); } } return true; } @Override @Transactional public Boolean read(Long baseClassDynamicsId) { List list = dynamicsRelationMapper.selectList( new QueryWrapper().lambda() .eq(BaseClassDynamicsRelation::getBaseClassDynamicsId, baseClassDynamicsId) .eq(BaseClassDynamicsRelation::getUserId, StpUtil.getLoginIdAsLong()) ); for (BaseClassDynamicsRelation dynamicsRelation : list) { dynamicsRelation.setReadMark(1); dynamicsRelation.setReadDate(LocalDateTime.now()); dynamicsRelationMapper.updateById(dynamicsRelation); } return true; } }