diff --git a/message-center-api/src/main/java/com/yxt/messagecenter/api/message/MessageFeign.java b/message-center-api/src/main/java/com/yxt/messagecenter/api/message/MessageFeign.java index 572ef21..760aa9c 100644 --- a/message-center-api/src/main/java/com/yxt/messagecenter/api/message/MessageFeign.java +++ b/message-center-api/src/main/java/com/yxt/messagecenter/api/message/MessageFeign.java @@ -59,4 +59,8 @@ public interface MessageFeign { public ResultBean saveOrUpdateAppMessage(@RequestBody AppMessageDto dto); /**********************************************************************************************/ + + @ApiOperation("移动端流程审批推送消息") + @PostMapping("/getMessage") + ResultBean getMessage(@RequestBody MessageFlowableDto dto); } \ No newline at end of file diff --git a/message-center-api/src/main/java/com/yxt/messagecenter/api/message/MessageFeignFallback.java b/message-center-api/src/main/java/com/yxt/messagecenter/api/message/MessageFeignFallback.java index 2d81052..d39c917 100644 --- a/message-center-api/src/main/java/com/yxt/messagecenter/api/message/MessageFeignFallback.java +++ b/message-center-api/src/main/java/com/yxt/messagecenter/api/message/MessageFeignFallback.java @@ -53,4 +53,9 @@ public class MessageFeignFallback implements MessageFeign { ResultBean rb = ResultBean.fireFail(); return rb.setMsg("接口message-center/message/saveOrUpdateAppMessage无法访问"); } + + @Override + public ResultBean getMessage(MessageFlowableDto dto) { + return null; + } } \ No newline at end of file diff --git a/message-center-api/src/main/java/com/yxt/messagecenter/api/message/MessageFlowableDto.java b/message-center-api/src/main/java/com/yxt/messagecenter/api/message/MessageFlowableDto.java new file mode 100644 index 0000000..b1da4e8 --- /dev/null +++ b/message-center-api/src/main/java/com/yxt/messagecenter/api/message/MessageFlowableDto.java @@ -0,0 +1,49 @@ +package com.yxt.messagecenter.api.message; + +import com.yxt.common.core.dto.Dto; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author dimengzhe + * @Date 2022/8/12 8:55 + * @Description + */ +@Data +public class MessageFlowableDto implements Dto { + private static final long serialVersionUID = 2368293589170415803L; + + @ApiModelProperty("接收人的sid集合") + private List list = new ArrayList<>(); + @ApiModelProperty("消息标题") + private String msgTitle; + @ApiModelProperty("消息内容") + private String msgContent; + + @ApiModelProperty("json组装") + private MessageJsonDto json; + @ApiModelProperty("创建人名称") + private String createName; + @ApiModelProperty("接收人的id集合") + private List receiveIdList; + + @ApiModelProperty("模块名称") + private String moduleName; + + @ApiModelProperty("具体页面的url") + private String moduleAction; + + @ApiModelProperty("业务sid") + private String businessSid; + + @ApiModelProperty("0.内置Activity 1.内置WebView 2.RePlugin插件") + private String app_type; + + @ApiModelProperty("插件sid") + private String moduleSid; + + +} diff --git a/message-center-api/src/main/java/com/yxt/messagecenter/api/message/MessageJsonDto.java b/message-center-api/src/main/java/com/yxt/messagecenter/api/message/MessageJsonDto.java new file mode 100644 index 0000000..cabd8a9 --- /dev/null +++ b/message-center-api/src/main/java/com/yxt/messagecenter/api/message/MessageJsonDto.java @@ -0,0 +1,33 @@ +package com.yxt.messagecenter.api.message; + +import com.yxt.common.core.dto.Dto; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + +/** + * @Author dimengzhe + * @Date 2022/8/12 10:19 + * @Description + */ +@Data +public class MessageJsonDto implements Dto { + private static final long serialVersionUID = -7733499156217768470L; + @ApiModelProperty("移动端页面地址#号后的数字集合") + private int[] buttons = {}; + @ApiModelProperty("任务id") + private String taskId; + @ApiModelProperty("节点名称") + private String taskName; + @ApiModelProperty("流程实例id") + private String procInsId; + @ApiModelProperty("节点id") + private String taskDefKey; + + @ApiModelProperty("app中特殊参数") + private Map appMap = new HashMap<>(); + + +} diff --git a/message-center-api/src/main/java/com/yxt/messagecenter/api/messagelist/MessageListFeign.java b/message-center-api/src/main/java/com/yxt/messagecenter/api/messagelist/MessageListFeign.java index 7d1541e..d57fb07 100644 --- a/message-center-api/src/main/java/com/yxt/messagecenter/api/messagelist/MessageListFeign.java +++ b/message-center-api/src/main/java/com/yxt/messagecenter/api/messagelist/MessageListFeign.java @@ -37,11 +37,11 @@ import java.util.List; public interface MessageListFeign { @ApiOperation("根据条件分页查询未读消息列表") - @PostMapping(value="/noreadListPage") + @PostMapping(value = "/noreadListPage") public ResultBean> noreadListPage(@RequestBody PagerQuery pq); @ApiOperation("根据条件分页查询已读消息列表") - @PostMapping(value="/readListPage") + @PostMapping(value = "/readListPage") public ResultBean> readListPage(@RequestBody PagerQuery pq); @ApiOperation("所有数据列表") @@ -60,14 +60,6 @@ public interface MessageListFeign { @GetMapping("/del/{ids}") public ResultBean del(@PathVariable("ids") String ids); -/* @ApiOperation("获取一条记录") - @GetMapping("/fetch/{id}") - public ResultBean fetch(@PathVariable("id") String id); - - @ApiOperation("获取一条记录") - @GetMapping("/fetchSid/{sid}") - public ResultBean fetchBySid(@PathVariable("sid") String sid);*/ - @ApiOperation("获取一条记录") @GetMapping("/fetchByMsgSid/{sid}") public ResultBean fetchByMsgSid(@PathVariable("sid") String sid); @@ -100,7 +92,7 @@ public interface MessageListFeign { @ApiOperation("获取待阅数量") @GetMapping("/selectUnReadCount") public ResultBean selectUnReadCount(@RequestParam(value = "msgTypeSid", required = false) String msgTypeSid, - @RequestParam("userSid") String userSid); + @RequestParam("userSid") String userSid); /********************************************************手机端接口*********************************************************/ @@ -114,7 +106,7 @@ public interface MessageListFeign { @ApiOperation("手机端用户根据消息类型批量设为已读") @PostMapping("/updateAppReadByType") - public ResultBean updateAppReadByType(@RequestParam ("msgTypeSid") String msgTypeSid, @RequestParam ("userSid") String userSid); + public ResultBean updateAppReadByType(@RequestParam("msgTypeSid") String msgTypeSid, @RequestParam("userSid") String userSid); /****************************************************************************************************************************/ } \ No newline at end of file diff --git a/message-center-biz/src/main/java/com/yxt/messagecenter/biz/message/MessageRest.java b/message-center-biz/src/main/java/com/yxt/messagecenter/biz/message/MessageRest.java index a1e8394..e1b1371 100644 --- a/message-center-biz/src/main/java/com/yxt/messagecenter/biz/message/MessageRest.java +++ b/message-center-biz/src/main/java/com/yxt/messagecenter/biz/message/MessageRest.java @@ -110,4 +110,9 @@ public class MessageRest implements MessageFeign { public ResultBean saveOrUpdateAppMessage(AppMessageDto dto) { return messageService.saveOrUpdateAppMessage(dto); } + + @Override + public ResultBean getMessage(MessageFlowableDto dto) { + return messageService.getMessage(dto); + } } diff --git a/message-center-biz/src/main/java/com/yxt/messagecenter/biz/message/MessageService.java b/message-center-biz/src/main/java/com/yxt/messagecenter/biz/message/MessageService.java index 53ca336..83140e1 100644 --- a/message-center-biz/src/main/java/com/yxt/messagecenter/biz/message/MessageService.java +++ b/message-center-biz/src/main/java/com/yxt/messagecenter/biz/message/MessageService.java @@ -1,19 +1,28 @@ package com.yxt.messagecenter.biz.message; import cn.hutool.core.bean.BeanUtil; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.yxt.common.base.service.MybatisBaseService; +import com.yxt.common.base.utils.JPushServer; import com.yxt.common.base.utils.PagerUtil; import com.yxt.common.core.query.PagerQuery; import com.yxt.common.core.result.ResultBean; import com.yxt.common.core.vo.PagerVo; import com.yxt.messagecenter.api.message.*; +import com.yxt.messagecenter.api.messagelist.MessageListDto; +import com.yxt.messagecenter.api.messagetype.MessageTypeVo; +import com.yxt.messagecenter.biz.messagelist.MessageListService; +import com.yxt.messagecenter.biz.messagetype.MessageTypeService; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.List; -import java.util.UUID; +import java.util.*; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; /** * Project: message-center(消息中心)
@@ -30,141 +39,216 @@ import java.util.UUID; */ @Service public class MessageService extends MybatisBaseService { - public PagerVo listPage(PagerQuery pq) { - MessageQuery query = pq.getParams(); - QueryWrapper qw = createQueryWrapper(query); - IPage page = PagerUtil.queryToPage(pq); - IPage pagging = baseMapper.selectPage(page, qw); - PagerVo p = PagerUtil.pageToVo(pagging, null); - return p; - } - public List listAll(MessageQuery query) { - QueryWrapper qw = createQueryWrapper(query); - return baseMapper.selectList(qw); - } - private QueryWrapper createQueryWrapper(MessageQuery query) { - // todo: 这里根据具体业务调整查询条件 - // 多字段Like示例:qw.and(wrapper -> wrapper.like("name", query.getName()).or().like("remark", query.getName())); - QueryWrapper qw = new QueryWrapper<>(); - - if (StringUtils.isNotBlank(query.getMsgType())) { - qw.eq("msgType", query.getMsgType()); - } - - if (StringUtils.isNotBlank(query.getMsgTitle())) { - qw.eq("msgTitle", query.getMsgTitle()); - } - - if (StringUtils.isNotBlank(query.getMsgContent())) { - qw.eq("msgContent", query.getMsgContent()); - } - - if (StringUtils.isNotBlank(query.getMsgSource())) { - qw.eq("msgSource", query.getMsgSource()); - } - - if (StringUtils.isNotBlank(query.getSenderSid())) { - qw.eq("senderSid", query.getSenderSid()); - } - - if (StringUtils.isNotBlank(query.getSenderName())) { - qw.eq("senderName", query.getSenderName()); - } - - if (StringUtils.isNotBlank(query.getSenderDeptSid())) { - qw.eq("senderDeptSid", query.getSenderDeptSid()); - } - - if (StringUtils.isNotBlank(query.getSenderDeptName())) { - qw.eq("senderDeptName", query.getSenderDeptName()); - } - - if (StringUtils.isNotBlank(query.getBusinessSid())) { - qw.eq("businessSid", query.getBusinessSid()); - } - - if (StringUtils.isNotBlank(query.getModuleSid())) { - qw.eq("moduleSid", query.getModuleSid()); - } - - if (StringUtils.isNotBlank(query.getModuleAction())) { - qw.eq("moduleAction", query.getModuleAction()); - } - - if (StringUtils.isNotBlank(query.getArgs_json())) { - qw.eq("args_json", query.getArgs_json()); - } - - if (StringUtils.isNotBlank(query.getH5_url())) { - qw.eq("h5_url", query.getH5_url()); - } - - if (StringUtils.isNotBlank(query.getXcx_url())) { - qw.eq("xcx_url", query.getXcx_url()); - } - - if (StringUtils.isNotBlank(query.getMsgTargetUri())) { - qw.eq("msgTargetUri", query.getMsgTargetUri()); - } - return qw; - } - - public PagerVo listPageVo(PagerQuery pq) { - MessageQuery query = pq.getParams(); - QueryWrapper qw = createQueryWrapper(query); - IPage page = PagerUtil.queryToPage(pq); - IPage pagging = baseMapper.selectPageVo(page, qw); - PagerVo p = PagerUtil.pageToVo(pagging, null); - return p; - } - - public List listAllVo(MessageQuery query) { - QueryWrapper qw = createQueryWrapper(query); - return baseMapper.selectListAllVo(qw); - } - - public List listVo() { - return baseMapper.selectListVo(); - } - - public void saveOrUpdateDto(MessageDto dto){ - Message entity = new Message(); - dto.fillEntity(entity); - this.saveOrUpdate(entity); - } - - public MessageVo fetchByIdVo(String id){ - Message entity = this.fetchById(id); - MessageVo vo = new MessageVo(); - BeanUtil.copyProperties(entity, vo); - return vo; - } - - /** - * 手机端保存/修改消息体 - * @param dto - * @return - */ - public ResultBean saveOrUpdateAppMessage(AppMessageDto dto) { - if (StringUtils.isBlank(dto.getSid())) { // 新增 - Message message = new Message(); - dto.fillEntity(message); - message.setSid(UUID.randomUUID().toString()); - Boolean flag = save(message); - if (flag) { - return new ResultBean().success().setMsg("保存成功").setData(message.getSid()); - } else { - return new ResultBean().fail().setMsg("保存失败"); - } - } else { // 修改 - Message message = fetchBySid(dto.getSid()); - BeanUtil.copyProperties(dto, message); - Boolean flag = updateById(message); - if (flag) { - return new ResultBean().success().setMsg("修改成功").setData(message.getSid()); - } else { - return new ResultBean().fail().setMsg("修改失败"); - } - } - } + + @Autowired + private MessageTypeService messageTypeService; + @Autowired + private MessageListService messageListService; + + public PagerVo listPage(PagerQuery pq) { + MessageQuery query = pq.getParams(); + QueryWrapper qw = createQueryWrapper(query); + IPage page = PagerUtil.queryToPage(pq); + IPage pagging = baseMapper.selectPage(page, qw); + PagerVo p = PagerUtil.pageToVo(pagging, null); + return p; + } + + public List listAll(MessageQuery query) { + QueryWrapper qw = createQueryWrapper(query); + return baseMapper.selectList(qw); + } + + private QueryWrapper createQueryWrapper(MessageQuery query) { + // todo: 这里根据具体业务调整查询条件 + // 多字段Like示例:qw.and(wrapper -> wrapper.like("name", query.getName()).or().like("remark", query.getName())); + QueryWrapper qw = new QueryWrapper<>(); + + if (StringUtils.isNotBlank(query.getMsgType())) { + qw.eq("msgType", query.getMsgType()); + } + + if (StringUtils.isNotBlank(query.getMsgTitle())) { + qw.eq("msgTitle", query.getMsgTitle()); + } + + if (StringUtils.isNotBlank(query.getMsgContent())) { + qw.eq("msgContent", query.getMsgContent()); + } + + if (StringUtils.isNotBlank(query.getMsgSource())) { + qw.eq("msgSource", query.getMsgSource()); + } + + if (StringUtils.isNotBlank(query.getSenderSid())) { + qw.eq("senderSid", query.getSenderSid()); + } + + if (StringUtils.isNotBlank(query.getSenderName())) { + qw.eq("senderName", query.getSenderName()); + } + + if (StringUtils.isNotBlank(query.getSenderDeptSid())) { + qw.eq("senderDeptSid", query.getSenderDeptSid()); + } + + if (StringUtils.isNotBlank(query.getSenderDeptName())) { + qw.eq("senderDeptName", query.getSenderDeptName()); + } + + if (StringUtils.isNotBlank(query.getBusinessSid())) { + qw.eq("businessSid", query.getBusinessSid()); + } + + if (StringUtils.isNotBlank(query.getModuleSid())) { + qw.eq("moduleSid", query.getModuleSid()); + } + + if (StringUtils.isNotBlank(query.getModuleAction())) { + qw.eq("moduleAction", query.getModuleAction()); + } + + if (StringUtils.isNotBlank(query.getArgs_json())) { + qw.eq("args_json", query.getArgs_json()); + } + + if (StringUtils.isNotBlank(query.getH5_url())) { + qw.eq("h5_url", query.getH5_url()); + } + + if (StringUtils.isNotBlank(query.getXcx_url())) { + qw.eq("xcx_url", query.getXcx_url()); + } + + if (StringUtils.isNotBlank(query.getMsgTargetUri())) { + qw.eq("msgTargetUri", query.getMsgTargetUri()); + } + return qw; + } + + public PagerVo listPageVo(PagerQuery pq) { + MessageQuery query = pq.getParams(); + QueryWrapper qw = createQueryWrapper(query); + IPage page = PagerUtil.queryToPage(pq); + IPage pagging = baseMapper.selectPageVo(page, qw); + PagerVo p = PagerUtil.pageToVo(pagging, null); + return p; + } + + public List listAllVo(MessageQuery query) { + QueryWrapper qw = createQueryWrapper(query); + return baseMapper.selectListAllVo(qw); + } + + public List listVo() { + return baseMapper.selectListVo(); + } + + public void saveOrUpdateDto(MessageDto dto) { + Message entity = new Message(); + dto.fillEntity(entity); + this.saveOrUpdate(entity); + } + + public MessageVo fetchByIdVo(String id) { + Message entity = this.fetchById(id); + MessageVo vo = new MessageVo(); + BeanUtil.copyProperties(entity, vo); + return vo; + } + + /** + * 手机端保存/修改消息体 + * + * @param dto + * @return + */ + public ResultBean saveOrUpdateAppMessage(AppMessageDto dto) { + if (StringUtils.isBlank(dto.getSid())) { // 新增 + Message message = new Message(); + dto.fillEntity(message); + message.setSid(UUID.randomUUID().toString()); + Boolean flag = save(message); + if (flag) { + return new ResultBean().success().setMsg("保存成功").setData(message.getSid()); + } else { + return new ResultBean().fail().setMsg("保存失败"); + } + } else { // 修改 + Message message = fetchBySid(dto.getSid()); + BeanUtil.copyProperties(dto, message); + Boolean flag = updateById(message); + if (flag) { + return new ResultBean().success().setMsg("修改成功").setData(message.getSid()); + } else { + return new ResultBean().fail().setMsg("修改失败"); + } + } + } + + public ResultBean getMessage(MessageFlowableDto dto) { + ResultBean rb = ResultBean.fireFail(); + String msgTitle = dto.getMsgTitle(); + String msgContent = dto.getMsgContent(); + List list = dto.getList(); + List receiveIdList = dto.getReceiveIdList(); + // 1、保存消息体 + AppMessageDto messageDto = new AppMessageDto(); + List messageBean = messageTypeService.selectMsgTypeList("0002"); + messageBean.removeAll(Collections.singleton(null)); + if (!messageBean.isEmpty()) { + for (MessageTypeVo message : messageBean) { + if (message.getMsgType().equals("审批中心")) { + messageDto.setMsgTypeSid(message.getMsgTypeSid()); + messageDto.setMsgType(message.getMsgType()); + } + } + } + messageDto.setMsgTitle(msgTitle); + messageDto.setMsgContent(msgContent); + messageDto.setMsgSource("审批中心"); + messageDto.setApp_type(dto.getApp_type()); + messageDto.setModuleSid(dto.getModuleSid()); + //将json与appMap中的参数融合 + Map jsonMap = BeanUtil.beanToMap(dto.getJson()); + jsonMap.putAll(dto.getJson().getAppMap()); + messageDto.setArgs_json(JSONObject.toJSONString(jsonMap)); + messageDto.setMsgTargetUri(dto.getModuleAction()); + String msgSid = saveOrUpdateAppMessage(messageDto).getData(); + String msgTypeSid = messageDto.getMsgTypeSid(); + // 2、保存至消息列表 + // 使用多线程保存 + List> futures = new ArrayList>(); + ExecutorService executor = Executors.newFixedThreadPool(4); + for (String receverSid : list) { + Future f = executor.submit(new Runnable() { + @Override + public void run() { + try { + System.out.println("run start-----------------" + System.currentTimeMillis() + ":" + Thread.currentThread().getName()); + MessageListDto messageList = new MessageListDto(); + messageList.setMsgSid(msgSid); + messageList.setRDelStatus(0); + messageList.setSDelStatus(0); + messageList.setReceiverSid(receverSid); + messageListService.saveOrUpdateDto(messageList); + System.out.println("run end-----------------" + System.currentTimeMillis() + ":" + Thread.currentThread().getName()); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + futures.add(f); + } + executor.shutdown(); + //标题、内容、消息类别key、消息类别名称、 + for (int i = 0; i < receiveIdList.size(); i++) { + /** + * msgTitle:排产申请 + * content:xxx的排产申请 + */ + JPushServer.sendPushAlias(msgTitle, dto.getCreateName() + "的" + dto.getModuleName(), msgTypeSid, "审批中心", receiveIdList.get(i)); + } + return rb.success().setData(msgSid); + } } \ No newline at end of file