This commit is contained in:
dute7liang
2024-01-29 21:29:17 +08:00
parent e200a7bac3
commit ea111d983e
21 changed files with 399 additions and 14 deletions

View File

@@ -2,6 +2,7 @@ package com.ruoyi.cai.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.cai.domain.SysPush;
import com.ruoyi.cai.dto.admin.query.syspush.SysPushParams;
/**
* 推送系统消息Service接口
@@ -11,4 +12,5 @@ import com.ruoyi.cai.domain.SysPush;
*/
public interface SysPushService extends IService<SysPush> {
void saveSysPush(SysPushParams params);
}

View File

@@ -1,11 +1,41 @@
package com.ruoyi.cai.service.impl;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.TypeReference;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.cai.domain.SysPush;
import com.ruoyi.cai.domain.User;
import com.ruoyi.cai.dto.admin.query.syspush.SysPushImageContextDTO;
import com.ruoyi.cai.dto.admin.query.syspush.SysPushMasterDTO;
import com.ruoyi.cai.dto.admin.query.syspush.SysPushParams;
import com.ruoyi.cai.dto.admin.vo.syspush.SendSysPushResp;
import com.ruoyi.cai.enums.SystemConfigEnum;
import com.ruoyi.cai.enums.systempush.SystemPushStatusEnum;
import com.ruoyi.cai.enums.systempush.SystemPushTypeEnum;
import com.ruoyi.cai.manager.SystemConfigManager;
import com.ruoyi.cai.mapper.SysPushMapper;
import com.ruoyi.cai.notice.data.NoticeMsgR;
import com.ruoyi.cai.notice.data.NoticeOnlyImageR;
import com.ruoyi.cai.notice.data.NoticeR;
import com.ruoyi.cai.notice.data.child.ExtNoticeData;
import com.ruoyi.cai.notice.data.child.MultipleImageTextData;
import com.ruoyi.cai.notice.data.child.MultipleImageTextNode;
import com.ruoyi.cai.notice.data.child.SimpleImageTextData;
import com.ruoyi.cai.notice.enums.MessageBaseTypeEnum;
import com.ruoyi.cai.service.SysPushService;
import com.ruoyi.cai.service.UserService;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.BeanConvertUtil;
import com.ruoyi.yunxin.Yunxin;
import com.ruoyi.yunxin.enums.ImTypeEnum;
import com.ruoyi.yunxin.resp.YxCommonR;
import com.ruoyi.yunxin.resp.YxDataR;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* 推送系统消息Service业务层处理
*
@@ -15,4 +45,155 @@ import org.springframework.stereotype.Service;
@Service
public class SysPushServiceImpl extends ServiceImpl<SysPushMapper, SysPush> implements SysPushService {
@Autowired
private UserService userService;
@Autowired
private Yunxin yunxin;
@Autowired
private SystemConfigManager systemConfigManager;
@Override
public void saveSysPush(SysPushParams params) {
SysPushMasterDTO master = params.getMaster();
Integer type = master.getType();
SystemPushTypeEnum systemPushType = SystemPushTypeEnum.getByCode(type);
if(systemPushType == null){
throw new ServiceException("消息类型有误!");
}
User user = userService.getByUserCode(master.getUsercode());
if(user == null){
throw new ServiceException("蜜瓜号不存在!");
}
SysPush sysPush = new SysPush();
sysPush.setGroupId(master.getGroupId());
sysPush.setType(master.getType());
sysPush.setUserId(user.getId());
sysPush.setUsercode(master.getUsercode());
sysPush.setTitle(master.getTitle());
sysPush.setRemark(master.getRemark());
sysPush.setSendTimeType(master.getSendTimeType());
sysPush.setSendTime(master.getSendTime());
sysPush.setStatus(SystemPushStatusEnum.NO_RUN.getCode());
String context = null;
switch (systemPushType){
case SIMPLE_TEXT:
NoticeMsgR ok = NoticeMsgR.ok(master.getOnlyText());
context = JSON.toJSONString(ok);
break;
case TEXT:
ExtNoticeData data = new ExtNoticeData();
data.setTitle(master.getTitle());
data.setTxt1(master.getTextText1());
List<ExtNoticeData.MessageExtDataList> fields = BeanConvertUtil.convertListTo(params.getTextContext(), ExtNoticeData.MessageExtDataList::new);
data.setFields(fields);
data.setTxt2(master.getTextText2());
data.setLink_type(master.getTextLinkType());
data.setLink_url(master.getTextLinkUrl());
NoticeR<ExtNoticeData> noticeR = NoticeR.ok(MessageBaseTypeEnum.TXT, data);
context = JSON.toJSONString(noticeR);
break;
case SIMPLE_IMAGE_TEXT:
SimpleImageTextData simpleImageTextData = new SimpleImageTextData();
simpleImageTextData.setAct_type(master.getOneImageTitleType());
if(simpleImageTextData.getAct_type() == 1){ // 水印标题
simpleImageTextData.setAct_string(master.getOneImageText());
simpleImageTextData.setTitle(master.getOneImageText());
}else if(simpleImageTextData.getAct_type() == 2){ // 正常标题
simpleImageTextData.setAct_string(master.getOneImageText());
simpleImageTextData.setTitle(master.getOneImageText());
simpleImageTextData.setTxt(master.getOneImageText());
}
simpleImageTextData.setImage(master.getOneImageImage());
simpleImageTextData.setLink_type(master.getOneImageLinkType());
simpleImageTextData.setLink_url(master.getOneImageLinkUrl());
NoticeR<SimpleImageTextData> simpleImageTextR = NoticeR.ok(MessageBaseTypeEnum.SIMPLE_IMAGE_TEXT, simpleImageTextData);
context = JSON.toJSONString(simpleImageTextR);
break;
case IMAGE_TEXT:
List<SysPushImageContextDTO> imageContext = params.getImageContext();
List<MultipleImageTextNode> multipleImageTextNodeList = new ArrayList<>();
for (SysPushImageContextDTO dto : imageContext) {
MultipleImageTextNode multipleImageTextNode = new MultipleImageTextNode();
multipleImageTextNode.setImage(dto.getImage());
multipleImageTextNode.setTitle(dto.getText());
multipleImageTextNode.setLink_type(dto.getLinkType());
multipleImageTextNode.setLink_url(dto.getLinkUrl());
multipleImageTextNodeList.add(multipleImageTextNode);
}
MultipleImageTextData multipleImageTextData = new MultipleImageTextData();
multipleImageTextData.setList(multipleImageTextNodeList);
NoticeR<MultipleImageTextData> multipleImageTextDataNoticeR = NoticeR.ok(MessageBaseTypeEnum.MULTIPLE_IMAGE_TEXT, multipleImageTextData);
context = JSON.toJSONString(multipleImageTextDataNoticeR);
break;
case ONLY_IMAGE:
NoticeOnlyImageR noticeOnlyImageR = new NoticeOnlyImageR();
context = JSON.toJSONString(noticeOnlyImageR);
break;
default:
break;
}
sysPush.setContent(context);
sysPush.setParams(JSON.toJSONString(params));
this.save(sysPush);
}
public SendSysPushResp sendSysPush(SysPush sysPush, List<Long> userIds){
String cosUrl = systemConfigManager.getSystemConfig(SystemConfigEnum.COS_DOMAIN);
Integer type = sysPush.getType();
SystemPushTypeEnum systemPushType = SystemPushTypeEnum.getByCode(type);
if(systemPushType == null){
throw new ServiceException("消息类型有误!");
}
String content = sysPush.getContent();
Object body;
ImTypeEnum imTypeEnum;
switch (systemPushType){
case SIMPLE_TEXT:
body = JSON.parseObject(content, NoticeMsgR.class);
imTypeEnum = ImTypeEnum.TXT;
break;
case TEXT:
NoticeR<ExtNoticeData> noticeR = JSON.parseObject(content, new TypeReference<NoticeR<ExtNoticeData>>() {});
noticeR.getData().setCurrentDate();
body = noticeR;
imTypeEnum = ImTypeEnum.CUSTOM;
break;
case SIMPLE_IMAGE_TEXT:
NoticeR<SimpleImageTextData> simpleImageTextR = JSON.parseObject(content, new TypeReference<NoticeR<SimpleImageTextData>>() {});
imTypeEnum = ImTypeEnum.CUSTOM;
SimpleImageTextData data = simpleImageTextR.getData();
if(data.getImage() != null){
data.setImage(cosUrl+data.getImage());
}
body = simpleImageTextR;
break;
case IMAGE_TEXT:
NoticeR<MultipleImageTextData> multipleImageTextR = JSON.parseObject(content, new TypeReference<NoticeR<MultipleImageTextData>>() {});
MultipleImageTextData multipleImageTextData = multipleImageTextR.getData();
List<MultipleImageTextNode> list = multipleImageTextData.getList();
for (MultipleImageTextNode node : list) {
if(node.getImage() != null){
node.setImage(cosUrl+node.getImage());
}
}
body = multipleImageTextR;
imTypeEnum = ImTypeEnum.CUSTOM;
break;
case ONLY_IMAGE:
NoticeOnlyImageR imageR = JSON.parseObject(content, NoticeOnlyImageR.class);
if(imageR.getUrl() != null){
imageR.setUrl(cosUrl+imageR.getUrl());
}
body = imageR;
imTypeEnum = ImTypeEnum.IMAGE;
break;
default:
throw new ServiceException("消息类型有误");
}
YxDataR<YxCommonR> r = yunxin.batchSendToNotice(userIds, body, null, imTypeEnum);
SendSysPushResp resp = new SendSysPushResp();
resp.setImResp(r);
return resp;
}
}