init
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
package com.newyetai.usercenter.notice.config;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@ConfigurationProperties(prefix = "notice")
|
||||
@Data
|
||||
@Component
|
||||
public class NoticeProperties {
|
||||
|
||||
private Map<String, WechatOffiaccountMsgProvider> wechatOffiaccountMsgs = new HashMap<>();
|
||||
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
public static class WechatOffiaccountMsgProvider {
|
||||
|
||||
/** 通知模版标识 **/
|
||||
private String noticeTemplateCode;
|
||||
|
||||
/** 微信公众号消息模版id **/
|
||||
private String templateId;
|
||||
|
||||
/** 微信公众号消息链接 **/
|
||||
private String link;
|
||||
|
||||
}
|
||||
|
||||
|
||||
public WechatOffiaccountMsgProvider getWechatOffiaccountProvider(String providerCode) {
|
||||
return this.wechatOffiaccountMsgs.get(providerCode);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package com.newyetai.usercenter.notice.constant;
|
||||
|
||||
/**
|
||||
* 消息通道类型:
|
||||
* @author sr on 2020-12-21
|
||||
*/
|
||||
public enum NoticeChannelTypeEnum {
|
||||
|
||||
/** 1站内信 **/
|
||||
SITE(1),
|
||||
/** 2短信 **/
|
||||
SMS(2),
|
||||
/** 3钉钉 **/
|
||||
DING_TALK(3),
|
||||
/** 4企业微信 **/
|
||||
WORK_WECHAT(4),
|
||||
/** 5邮件 **/
|
||||
MAIL(5),
|
||||
/** 6微信公众号 **/
|
||||
WECHAT_OFFIACCOUNT(6);
|
||||
|
||||
NoticeChannelTypeEnum(Integer type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
private Integer type;
|
||||
|
||||
public Integer getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package com.newyetai.usercenter.notice.constant;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
public interface NoticeContentTemplateConstants {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.newyetai.usercenter.notice.constant;
|
||||
|
||||
/**
|
||||
* 级别:
|
||||
* @author sr on 2020-12-21
|
||||
*/
|
||||
public enum NoticeLevelEnum {
|
||||
|
||||
/** 1平台 **/
|
||||
PLATFORM(1),
|
||||
/** 2机构 **/
|
||||
ORG(2);
|
||||
|
||||
NoticeLevelEnum(Integer type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
private Integer type;
|
||||
|
||||
public Integer getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.newyetai.usercenter.notice.constant;
|
||||
|
||||
/**
|
||||
* 模块分类
|
||||
* @author sr on 2020-12-21
|
||||
*/
|
||||
public enum NoticeModuleTypeEnum {
|
||||
|
||||
/** 1业务 **/
|
||||
BIZ(1),
|
||||
/** 2监控/预警 **/
|
||||
ACTUATOR(2);
|
||||
|
||||
NoticeModuleTypeEnum(Integer type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
private Integer type;
|
||||
|
||||
public Integer getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package com.newyetai.usercenter.notice.constant;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
public interface NoticeReceiverSettingConstants {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.newyetai.usercenter.notice.constant;
|
||||
|
||||
/**
|
||||
* 接收状态:
|
||||
* @author sr on 2020-12-21
|
||||
*/
|
||||
public enum NoticeReceiverStatusEnum {
|
||||
|
||||
/** 1待发送 **/
|
||||
INIT(1),
|
||||
/** 2已发送 **/
|
||||
SENT(2),
|
||||
/** 3发送失败 **/
|
||||
SEND_FAIL(3),
|
||||
/** 4接收已读 **/
|
||||
READ(4);
|
||||
|
||||
NoticeReceiverStatusEnum(Integer type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
private Integer type;
|
||||
|
||||
public Integer getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.newyetai.usercenter.notice.constant;
|
||||
|
||||
/**
|
||||
* 接收人关联类型:
|
||||
* @author sr on 2020-12-21
|
||||
*/
|
||||
public enum NoticeReceiverTypeEnum {
|
||||
|
||||
/** 1用户id **/
|
||||
USER(1),
|
||||
/** 2角色 **/
|
||||
ROLE(2),
|
||||
/** 3标准角色 **/
|
||||
STANDARD_ROLE(3);
|
||||
|
||||
NoticeReceiverTypeEnum(Integer type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
private Integer type;
|
||||
|
||||
public Integer getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.newyetai.usercenter.notice.constant;
|
||||
|
||||
/**
|
||||
* 接收状态:
|
||||
* @author sr on 2020-12-21
|
||||
*/
|
||||
public enum NoticeSendStatusEnum {
|
||||
|
||||
/** 1待处理 **/
|
||||
INIT(1),
|
||||
/** 2已处理 **/
|
||||
SENT(2);
|
||||
|
||||
|
||||
NoticeSendStatusEnum(Integer type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
private Integer type;
|
||||
|
||||
public Integer getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
package com.newyetai.usercenter.notice.controller;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.PutMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import com.newyetai.common.AlitaResult;
|
||||
import com.newyetai.common.util.UserContextHolder;
|
||||
import com.newyetai.common.validation.Update;
|
||||
import com.newyetai.tkmybatis.pojo.Page;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeContentTemplateDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeContentTemplateOperateDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeContentTemplateQueryDTO;
|
||||
import com.newyetai.usercenter.notice.service.NoticeContentTemplateService;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("notice_content_template")
|
||||
@Api(tags = "通知消息体模版")
|
||||
public class NoticeContentTemplateController{
|
||||
|
||||
@Autowired
|
||||
private NoticeContentTemplateService noticeContentTemplateService;
|
||||
|
||||
@PostMapping("/create")
|
||||
@ApiOperation("创建")
|
||||
public AlitaResult<Long> create(
|
||||
@Validated @RequestBody NoticeContentTemplateOperateDTO noticeContentTemplateOperateDTO){
|
||||
UserContextHolder.checkPlatformOrg();
|
||||
return AlitaResult.success(noticeContentTemplateService.create(noticeContentTemplateOperateDTO));
|
||||
}
|
||||
|
||||
@PutMapping("/modify")
|
||||
@ApiOperation("修改")
|
||||
public AlitaResult<Boolean> modify(
|
||||
@Validated(Update.class) @RequestBody NoticeContentTemplateOperateDTO noticeContentTemplateOperateDTO){
|
||||
UserContextHolder.checkPlatformOrg();
|
||||
noticeContentTemplateService.modify(noticeContentTemplateOperateDTO);
|
||||
return AlitaResult.success(true);
|
||||
}
|
||||
|
||||
@DeleteMapping("/remove/{id}")
|
||||
@ApiOperation("删除")
|
||||
public AlitaResult<Boolean> remove(@PathVariable Long id){
|
||||
UserContextHolder.checkPlatformOrg();
|
||||
noticeContentTemplateService.remove(id);
|
||||
return AlitaResult.success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@ApiOperation("分页查询")
|
||||
public AlitaResult<Page<NoticeContentTemplateDTO>> page(NoticeContentTemplateQueryDTO noticeContentTemplateQueryDTO){
|
||||
noticeContentTemplateService.page(noticeContentTemplateQueryDTO);
|
||||
return AlitaResult.success(noticeContentTemplateQueryDTO.getPageResult());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
package com.newyetai.usercenter.notice.controller;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import com.newyetai.common.AlitaResult;
|
||||
import com.newyetai.tkmybatis.pojo.Page;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeReceiverSettingDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeReceiverSettingOperateDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeReceiverSettingQueryDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeReceiverSettingRemoveDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeReceiverSettingRoleDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeReceiverSettingUserDTO;
|
||||
import com.newyetai.usercenter.notice.service.NoticeReceiverSettingService;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("notice_receiver_setting")
|
||||
@Api(tags = "通知接收人设置")
|
||||
public class NoticeReceiverSettingController{
|
||||
|
||||
@Autowired
|
||||
private NoticeReceiverSettingService noticeReceiverSettingService;
|
||||
|
||||
@PostMapping("/create")
|
||||
@ApiOperation("创建(新增)")
|
||||
public AlitaResult<Boolean> create(
|
||||
@Validated @RequestBody NoticeReceiverSettingOperateDTO noticeReceiverSettingOperateDTO) {
|
||||
noticeReceiverSettingService.create(noticeReceiverSettingOperateDTO);
|
||||
return AlitaResult.success(true);
|
||||
}
|
||||
|
||||
@PostMapping("/save")
|
||||
@ApiOperation("保存设置(内部判断新增/删除)")
|
||||
public AlitaResult<Boolean> save(
|
||||
@Validated @RequestBody NoticeReceiverSettingOperateDTO noticeReceiverSettingOperateDTO) {
|
||||
noticeReceiverSettingService.save(noticeReceiverSettingOperateDTO);
|
||||
return AlitaResult.success(true);
|
||||
}
|
||||
|
||||
@DeleteMapping("/remove")
|
||||
@ApiOperation("删除")
|
||||
public AlitaResult<Boolean> remove(
|
||||
@Validated @RequestBody NoticeReceiverSettingRemoveDTO noticeReceiverSettingRemoveDTO) {
|
||||
noticeReceiverSettingService.remove(noticeReceiverSettingRemoveDTO);
|
||||
return AlitaResult.success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@ApiOperation("分页查询")
|
||||
public AlitaResult<Page<NoticeReceiverSettingDTO>> page(
|
||||
NoticeReceiverSettingQueryDTO noticeReceiverSettingQueryDTO) {
|
||||
noticeReceiverSettingService.list(noticeReceiverSettingQueryDTO);
|
||||
return AlitaResult.success(noticeReceiverSettingQueryDTO.getPageResult());
|
||||
}
|
||||
|
||||
@GetMapping("/page_user")
|
||||
@ApiOperation("分页查询")
|
||||
public AlitaResult<Page<NoticeReceiverSettingUserDTO>> pageUser(
|
||||
@Validated NoticeReceiverSettingQueryDTO noticeReceiverSettingQueryDTO){
|
||||
noticeReceiverSettingService.listUser(noticeReceiverSettingQueryDTO);
|
||||
return AlitaResult.success(noticeReceiverSettingQueryDTO.getPageResult());
|
||||
}
|
||||
|
||||
@GetMapping("/page_role")
|
||||
@ApiOperation("分页查询")
|
||||
public AlitaResult<Page<NoticeReceiverSettingRoleDTO>> pageRole(
|
||||
@Validated NoticeReceiverSettingQueryDTO noticeReceiverSettingQueryDTO){
|
||||
noticeReceiverSettingService.listRole(noticeReceiverSettingQueryDTO);
|
||||
return AlitaResult.success(noticeReceiverSettingQueryDTO.getPageResult());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.newyetai.usercenter.notice.controller;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import com.newyetai.common.AlitaResult;
|
||||
import com.newyetai.tkmybatis.pojo.Page;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordOperateDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordQueryDTO;
|
||||
import com.newyetai.usercenter.notice.service.NoticeSendRecordService;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("notice_send_record")
|
||||
@Api(tags = "通知发送记录(内容模版级)")
|
||||
public class NoticeSendRecordController {
|
||||
|
||||
@Autowired
|
||||
private NoticeSendRecordService noticeSendRecordService;
|
||||
|
||||
@PostMapping("/create")
|
||||
@ApiOperation("创建(发送通知)")
|
||||
public AlitaResult<Boolean> create(
|
||||
@Validated @RequestBody NoticeSendRecordOperateDTO noticeSendRecordOperateDTO){
|
||||
noticeSendRecordService.create(noticeSendRecordOperateDTO);
|
||||
return AlitaResult.success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@ApiOperation("分页查询")
|
||||
public AlitaResult<Page<NoticeSendRecordDTO>> page(NoticeSendRecordQueryDTO noticeSendRecordQueryDTO){
|
||||
noticeSendRecordService.page(noticeSendRecordQueryDTO);
|
||||
return AlitaResult.success(noticeSendRecordQueryDTO.getPageResult());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
package com.newyetai.usercenter.notice.controller;
|
||||
|
||||
import com.newyetai.common.AlitaResult;
|
||||
import com.newyetai.tkmybatis.pojo.Page;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordDetailDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordDetailQueryDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordDetailReqDTO;
|
||||
import com.newyetai.usercenter.notice.service.NoticeSendRecordDetailService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("notice_send_record_detail")
|
||||
@Api(tags = "通知发送记录明细")
|
||||
public class NoticeSendRecordDetailController {
|
||||
|
||||
@Autowired
|
||||
private NoticeSendRecordDetailService noticeSendRecordDetailService;
|
||||
|
||||
@PostMapping("/page")
|
||||
@ApiOperation("分页查询(当前登录人通知)")
|
||||
public AlitaResult<Page<NoticeSendRecordDetailDTO>> page(@RequestBody
|
||||
NoticeSendRecordDetailQueryDTO noticeSendRecordDetailQueryDTO) {
|
||||
noticeSendRecordDetailQueryDTO.setUserId(noticeSendRecordDetailQueryDTO.getOperateUserId());
|
||||
noticeSendRecordDetailService.list(noticeSendRecordDetailQueryDTO);
|
||||
return AlitaResult.success(noticeSendRecordDetailQueryDTO.getPageResult());
|
||||
}
|
||||
|
||||
@GetMapping("/detail")
|
||||
@ApiOperation("单个明细查询")
|
||||
public AlitaResult<NoticeSendRecordDetailDTO> detail(@Validated NoticeSendRecordDetailReqDTO reqDTO) {
|
||||
return AlitaResult.success(noticeSendRecordDetailService.detail(reqDTO));
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/count")
|
||||
@ApiOperation("消息数量查询(当前登录人通知)")
|
||||
public AlitaResult<Integer> count(@RequestBody NoticeSendRecordDetailQueryDTO noticeSendRecordDetailQueryDTO) {
|
||||
noticeSendRecordDetailQueryDTO.setUserId(noticeSendRecordDetailQueryDTO.getOperateUserId());
|
||||
return AlitaResult.success(noticeSendRecordDetailService.count(noticeSendRecordDetailQueryDTO));
|
||||
}
|
||||
|
||||
// 已读
|
||||
@PostMapping("/read/{recordDetailId}")
|
||||
@ApiOperation("已读通知")
|
||||
public AlitaResult<Boolean> read(@PathVariable Long recordDetailId){
|
||||
noticeSendRecordDetailService.read(recordDetailId);
|
||||
return AlitaResult.success(true);
|
||||
}
|
||||
|
||||
@PostMapping("/read_all")
|
||||
@ApiOperation("已读通知")
|
||||
public AlitaResult<Boolean> readAll(){
|
||||
noticeSendRecordDetailService.readAll();
|
||||
return AlitaResult.success(true);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
package com.newyetai.usercenter.notice.controller;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.PutMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import com.newyetai.common.AlitaResult;
|
||||
import com.newyetai.common.util.UserContextHolder;
|
||||
import com.newyetai.common.validation.Update;
|
||||
import com.newyetai.tkmybatis.pojo.Page;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeTemplateDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeTemplateOperateDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeTemplateQueryDTO;
|
||||
import com.newyetai.usercenter.notice.service.NoticeTemplateService;
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-17
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("notice_template")
|
||||
@Api(tags = "通知模版")
|
||||
public class NoticeTemplateController{
|
||||
|
||||
@Autowired
|
||||
private NoticeTemplateService noticeTemplateService;
|
||||
|
||||
@PostMapping("/create")
|
||||
@ApiOperation("创建")
|
||||
public AlitaResult<Long> create(
|
||||
@Validated @RequestBody NoticeTemplateOperateDTO noticeTemplateOperateDTO) {
|
||||
UserContextHolder.checkPlatformOrg();
|
||||
return AlitaResult.success(noticeTemplateService.create(noticeTemplateOperateDTO));
|
||||
}
|
||||
|
||||
@PutMapping("/modify")
|
||||
@ApiOperation("修改")
|
||||
public AlitaResult<Boolean> modify(
|
||||
@Validated(Update.class) @RequestBody NoticeTemplateOperateDTO noticeTemplateOperateDTO) {
|
||||
UserContextHolder.checkPlatformOrg();
|
||||
noticeTemplateService.modify(noticeTemplateOperateDTO);
|
||||
return AlitaResult.success(true);
|
||||
}
|
||||
|
||||
@DeleteMapping("/remove/{id}")
|
||||
@ApiOperation("删除")
|
||||
public AlitaResult<Boolean> remove(@PathVariable Long id) {
|
||||
UserContextHolder.checkPlatformOrg();
|
||||
noticeTemplateService.remove(id);
|
||||
return AlitaResult.success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@ApiOperation("分页查询")
|
||||
public AlitaResult<Page<NoticeTemplateDTO>> page(NoticeTemplateQueryDTO noticeTemplateQueryDTO) {
|
||||
noticeTemplateService.page(noticeTemplateQueryDTO);
|
||||
return AlitaResult.success(noticeTemplateQueryDTO.getPageResult());
|
||||
}
|
||||
|
||||
@GetMapping("/find/{id}")
|
||||
@ApiOperation("单个查询")
|
||||
public AlitaResult<NoticeTemplateDTO> find(@PathVariable Long id) {
|
||||
return AlitaResult.success(noticeTemplateService.find(id));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.newyetai.usercenter.notice.dao;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import com.newyetai.tkmybatis.mybatis.MyMapper;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeContentTemplateDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeContentTemplateQueryDTO;
|
||||
import com.newyetai.usercenter.notice.entity.NoticeContentTemplate;
|
||||
|
||||
/**
|
||||
* 通知消息体模版
|
||||
*
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
public interface NoticeContentTemplateMapper extends MyMapper<NoticeContentTemplate> {
|
||||
|
||||
/**
|
||||
* 查询
|
||||
*
|
||||
* @param noticeContentTemplateQueryDTO
|
||||
* @return
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
List<NoticeContentTemplateDTO> listNoticeContentTemplateDTO(
|
||||
@Param("param") NoticeContentTemplateQueryDTO noticeContentTemplateQueryDTO);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
package com.newyetai.usercenter.notice.dao;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import com.newyetai.tkmybatis.mybatis.MyMapper;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeReceiverSettingDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeReceiverSettingOperateDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeReceiverSettingQueryDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeReceiverSettingRemoveDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeReceiverSettingRoleDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeReceiverSettingUserDTO;
|
||||
import com.newyetai.usercenter.notice.entity.NoticeReceiverSetting;
|
||||
|
||||
/**
|
||||
* 通知接收人设置
|
||||
*
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
public interface NoticeReceiverSettingMapper extends MyMapper<NoticeReceiverSetting> {
|
||||
|
||||
/**
|
||||
* 查询
|
||||
*
|
||||
* @param noticeReceiverSettingQueryDTO
|
||||
* @return
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
List<NoticeReceiverSettingDTO> listNoticeReceiverSettingDTO(
|
||||
@Param("param") NoticeReceiverSettingQueryDTO noticeReceiverSettingQueryDTO);
|
||||
|
||||
/**
|
||||
* 根据模版id删除接收人配置
|
||||
*
|
||||
* @param noticeReceiverSettingRemoveDTO
|
||||
* @return
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
int remove(@Param("param") NoticeReceiverSettingRemoveDTO noticeReceiverSettingRemoveDTO);
|
||||
|
||||
/**
|
||||
* 查询操作机构接收人现有配置
|
||||
*
|
||||
* @param noticeReceiverSettingOperateDTO
|
||||
* @return
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
Set<Long> findReceiverUnionIds(
|
||||
@Param("param") NoticeReceiverSettingOperateDTO noticeReceiverSettingOperateDTO);
|
||||
|
||||
/**
|
||||
* 新增接收人配置
|
||||
* @param noticeReceiverSettingOperateDTO
|
||||
* @param receiverUnionIds
|
||||
* @return
|
||||
* @author sr on 2020-12-21
|
||||
*/
|
||||
int create(@Param("param") NoticeReceiverSettingOperateDTO noticeReceiverSettingOperateDTO,
|
||||
@Param("receiverUnionIds") Set<Long> receiverUnionIds);
|
||||
|
||||
/**
|
||||
* 根据关联id获取用户id
|
||||
*
|
||||
* @param orgId
|
||||
* @param unionType
|
||||
* @param unionIds
|
||||
* @return
|
||||
* @author sr on 2020-12-21
|
||||
*/
|
||||
Set<Long> findUserIdByUnionType(Long orgId, Integer unionType, Set<Long> unionIds);
|
||||
|
||||
/**
|
||||
* 获取有效用户
|
||||
*
|
||||
* @return
|
||||
* @author sr on 2020-12-21
|
||||
*/
|
||||
Set<Long> validUser(Long orgId, Set<Long> userIds);
|
||||
|
||||
/**
|
||||
* 获取有效角色
|
||||
* @param orgId
|
||||
* @param roleIds
|
||||
* @return
|
||||
* @author sr on 2020-12-21
|
||||
*/
|
||||
Set<Long> validRole(Long orgId, Set<Long> roleIds);
|
||||
|
||||
/**
|
||||
* 查询接收人-用户
|
||||
*
|
||||
* @param noticeReceiverSettingQueryDTO
|
||||
* @return
|
||||
* @author sr on 2021-01-07
|
||||
*/
|
||||
List<NoticeReceiverSettingUserDTO> listNoticeReceiverSettingUserDTO(
|
||||
@Param("param") NoticeReceiverSettingQueryDTO noticeReceiverSettingQueryDTO);
|
||||
|
||||
/**
|
||||
* 查询接收人-角色
|
||||
*
|
||||
* @param noticeReceiverSettingQueryDTO
|
||||
* @return
|
||||
* @author sr on 2021-01-07
|
||||
*/
|
||||
List<NoticeReceiverSettingRoleDTO> listNoticeReceiverSettingRoleDTO(
|
||||
@Param("param") NoticeReceiverSettingQueryDTO noticeReceiverSettingQueryDTO);
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
package com.newyetai.usercenter.notice.dao;
|
||||
|
||||
import com.newyetai.tkmybatis.mybatis.MyMapper;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordDetailDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordDetailQueryDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordDetailReqDTO;
|
||||
import com.newyetai.usercenter.notice.dto.RecordDetailUpdateStatusDTO;
|
||||
import com.newyetai.usercenter.notice.entity.NoticeSendRecordDetail;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 通知发送记录明细(接收人)
|
||||
*
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
public interface NoticeSendRecordDetailMapper extends MyMapper<NoticeSendRecordDetail> {
|
||||
|
||||
/**
|
||||
* 查询
|
||||
*
|
||||
* @param noticeSendRecordDetailQueryDTO
|
||||
* @return
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
List<NoticeSendRecordDetailDTO> listNoticeSendRecordDetailDTO(
|
||||
@Param("param") NoticeSendRecordDetailQueryDTO noticeSendRecordDetailQueryDTO);
|
||||
|
||||
/**
|
||||
* @param noticeSendRecordDetails
|
||||
* @param operateUserId
|
||||
* @author sr on 2020-12-21
|
||||
*/
|
||||
void createDetails(@Param("entities") List<NoticeSendRecordDetail> noticeSendRecordDetails,
|
||||
@Param("operateUserId") Long operateUserId);
|
||||
|
||||
int modifyStatus(@Param("param") RecordDetailUpdateStatusDTO recordDetailUpdateStatusDTO);
|
||||
|
||||
/**
|
||||
* 详细通知发送记录数
|
||||
*
|
||||
* @param noticeSendRecordDetailQueryDTO 通知发送记录详细查询dto
|
||||
* @return {@link Integer}
|
||||
*/
|
||||
Integer countNoticeSendRecordDetail(@Param("param") NoticeSendRecordDetailQueryDTO noticeSendRecordDetailQueryDTO);
|
||||
|
||||
/**
|
||||
* 查询消息详情
|
||||
*
|
||||
* @param reqDTO 通知发送记录详细查询dto
|
||||
* @return {@link NoticeSendRecordDetailDTO}
|
||||
*/
|
||||
NoticeSendRecordDetailDTO findNoticeSendRecordDetailDTO(@Param("param") NoticeSendRecordDetailReqDTO reqDTO);
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package com.newyetai.usercenter.notice.dao;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import com.newyetai.tkmybatis.mybatis.MyMapper;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordModifyDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordQueryDTO;
|
||||
import com.newyetai.usercenter.notice.entity.NoticeSendRecord;
|
||||
|
||||
/**
|
||||
* 通知发送记录(内容模版级)
|
||||
*
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
public interface NoticeSendRecordMapper extends MyMapper<NoticeSendRecord> {
|
||||
|
||||
/**
|
||||
* 查询
|
||||
*
|
||||
* @param noticeSendRecordQueryDTO
|
||||
* @return
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
List<NoticeSendRecordDTO> listNoticeSendRecordDTO(@Param("param") NoticeSendRecordQueryDTO noticeSendRecordQueryDTO);
|
||||
|
||||
/**
|
||||
* 修改
|
||||
*
|
||||
* @param noticeSendRecordModifyDTO
|
||||
* @return
|
||||
* @author sr on 2021-02-08
|
||||
*/
|
||||
int modify(@Param("param")NoticeSendRecordModifyDTO noticeSendRecordModifyDTO);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.newyetai.usercenter.notice.dao;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import com.newyetai.tkmybatis.mybatis.MyMapper;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeTemplateDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeTemplateQueryDTO;
|
||||
import com.newyetai.usercenter.notice.entity.NoticeTemplate;
|
||||
|
||||
/**
|
||||
* 通知模版
|
||||
*
|
||||
* @author sr on 2020-12-17
|
||||
*/
|
||||
public interface NoticeTemplateMapper extends MyMapper<NoticeTemplate> {
|
||||
|
||||
/**
|
||||
* 查询
|
||||
*
|
||||
* @param noticeTemplateQueryDto
|
||||
* @return
|
||||
* @author sr on 2020-12-17
|
||||
*/
|
||||
List<NoticeTemplateDTO> listNoticeTemplateDTO(
|
||||
@Param("param") NoticeTemplateQueryDTO noticeTemplateQueryDTO);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
package com.newyetai.usercenter.notice.dto;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import com.newyetai.common.dto.BaseDTO;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-17
|
||||
*/
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@SuperBuilder
|
||||
@Data
|
||||
@ApiModel(description = "通知消息体模版")
|
||||
public class NoticeContentTemplateDTO extends BaseDTO implements Serializable{
|
||||
|
||||
/** **/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty("通知模版id")
|
||||
private Long templateId ;
|
||||
@ApiModelProperty("消息通道类型:1站内信,2短信,3钉钉,4企业微信,5邮件(见notice_channel_type)")
|
||||
private Integer channelType ;
|
||||
@ApiModelProperty("标题")
|
||||
private String title;
|
||||
@ApiModelProperty("内容模版")
|
||||
private String contentTemplate ;
|
||||
@ApiModelProperty("是否启用")
|
||||
private Boolean enabled;
|
||||
@ApiModelProperty("链接")
|
||||
private String link;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
package com.newyetai.usercenter.notice.dto;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
import com.newyetai.common.dto.BaseOperateDTO;
|
||||
import com.newyetai.common.validation.Update;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
@ApiModel(description = "通知消息体模版")
|
||||
public class NoticeContentTemplateOperateDTO extends BaseOperateDTO implements Serializable{
|
||||
|
||||
/** **/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty("id")
|
||||
@NotNull(message = "id不能为空", groups = {Update.class})
|
||||
private Long id;
|
||||
@ApiModelProperty("通知模版id")
|
||||
@NotNull(message = "通知模版id不能为空")
|
||||
private Long templateId ;
|
||||
@ApiModelProperty("消息通道类型:1站内信,2短信,3钉钉,4企业微信,5邮件(见notice_channel_type)")
|
||||
@NotNull(message = "消息通道类型不能为空")
|
||||
private Integer channelType ;
|
||||
@ApiModelProperty("标题")
|
||||
@NotBlank(message = "标题不能为空")
|
||||
private String title;
|
||||
@ApiModelProperty("内容模版")
|
||||
@NotBlank(message = "内容模版不能为空")
|
||||
private String contentTemplate ;
|
||||
@ApiModelProperty("是否启用")
|
||||
private Boolean enabled;
|
||||
@ApiModelProperty("链接")
|
||||
private String link;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package com.newyetai.usercenter.notice.dto;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import com.newyetai.common.dto.PageQueryDTO;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-17
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
@ApiModel(description = "通知消息体模版查询条件")
|
||||
public class NoticeContentTemplateQueryDTO extends PageQueryDTO<NoticeContentTemplateDTO> implements Serializable{
|
||||
|
||||
/** **/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty("id")
|
||||
private Long id;
|
||||
@ApiModelProperty("通知模版id")
|
||||
private Long templateId ;
|
||||
@ApiModelProperty("消息通道类型:1站内信,2短信,3钉钉,4企业微信,5邮件 等(见notice_channel_type)")
|
||||
private Integer channelType ;
|
||||
@ApiModelProperty("标题(模糊匹配)")
|
||||
private String titleLike;
|
||||
@ApiModelProperty("是否启用")
|
||||
private Boolean enabled;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
package com.newyetai.usercenter.notice.dto;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import com.newyetai.common.dto.BaseDTO;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-17
|
||||
*/
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@SuperBuilder
|
||||
@Data
|
||||
@ApiModel(description = "通知接收人设置")
|
||||
public class NoticeReceiverSettingDTO extends BaseDTO implements Serializable{
|
||||
|
||||
/** **/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty("通知模版id")
|
||||
private Long templateId ;
|
||||
@ApiModelProperty("机构id")
|
||||
private Long orgId ;
|
||||
@ApiModelProperty("接收人关联类型:1用户id,2角色,3标准角色(见notice_receiver_type)")
|
||||
private Integer receiverUnionType ;
|
||||
@ApiModelProperty("接收人关联id:用户id,角色id,标准角色id")
|
||||
private Long receiverUnionId ;
|
||||
@ApiModelProperty("接受人名称")
|
||||
private String receiverName;
|
||||
@ApiModelProperty("是否启用")
|
||||
private Boolean enabled;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package com.newyetai.usercenter.notice.dto;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
import com.newyetai.common.dto.BaseOperateDTO;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
@ApiModel(description = "通知接收人设置")
|
||||
public class NoticeReceiverSettingOperateDTO extends BaseOperateDTO implements Serializable{
|
||||
|
||||
/** **/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty("通知模版id")
|
||||
@NotNull(message = "通知模版id不能为空")
|
||||
private Long templateId ;
|
||||
@ApiModelProperty("接收人关联类型:1用户id,2角色,3标准角色(见notice_receiver_type)")
|
||||
@NotNull(message = "接收人关联类型不能为空")
|
||||
private Integer receiverUnionType ;
|
||||
@ApiModelProperty("接收人关联id:用户id,角色id,标准角色id")
|
||||
@NotNull(message = "接收人关联id不能为空")
|
||||
private Set<Long> receiverUnionIds ;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.newyetai.usercenter.notice.dto;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
|
||||
import com.newyetai.common.dto.PageQueryDTO;
|
||||
|
||||
/**
|
||||
* PageQueryDTO 范型 NoticeReceiverSettingDTO或其子类
|
||||
*
|
||||
* @author sr on 2020-12-17
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
@ApiModel(description = "通知接收人设置查询条件")
|
||||
public class NoticeReceiverSettingQueryDTO extends PageQueryDTO implements Serializable{
|
||||
|
||||
/** **/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty("id")
|
||||
private Long id;
|
||||
@ApiModelProperty("通知模版id")
|
||||
@NotNull(message = "通知模版id不能为空")
|
||||
private Long templateId ;
|
||||
@ApiModelProperty("机构id")
|
||||
private Long orgId ;
|
||||
@ApiModelProperty("接收人关联类型:1用户id,2角色,3标准角色(见notice_receiver_type)")
|
||||
private Integer receiverUnionType ;
|
||||
|
||||
public Long getOrgId() {
|
||||
return orgId == null ? getOperateOrgId() : orgId;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
package com.newyetai.usercenter.notice.dto;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
import com.newyetai.common.dto.BaseOperateDTO;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@ApiModel(description = "删除通知接收人")
|
||||
public class NoticeReceiverSettingRemoveDTO extends BaseOperateDTO implements Serializable{
|
||||
|
||||
/** **/
|
||||
private static final long serialVersionUID = -9143022441853162885L;
|
||||
|
||||
@ApiModelProperty("通知模版id")
|
||||
@NotNull(message = "通知模版id不能为空")
|
||||
private Long templateId ;
|
||||
@ApiModelProperty("接收人关联类型:1用户id,2角色,3标准角色(见notice_receiver_type)")
|
||||
@NotNull(message = "接收人关联类型不能为空")
|
||||
private Integer receiverUnionType ;
|
||||
@ApiModelProperty("接收人关联id:用户id,角色id,标准角色id")
|
||||
private Set<Long> receiverUnionIds ;
|
||||
|
||||
@Builder
|
||||
public NoticeReceiverSettingRemoveDTO(Long operateOrgId, Long operateUserId,
|
||||
@NotNull(message = "通知模版id不能为空") Long templateId,
|
||||
@NotNull(message = "接收人关联类型不能为空") Integer receiverUnionType, Set<Long> receiverUnionIds) {
|
||||
super(operateOrgId, operateUserId);
|
||||
this.templateId = templateId;
|
||||
this.receiverUnionType = receiverUnionType;
|
||||
this.receiverUnionIds = receiverUnionIds;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.newyetai.usercenter.notice.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author sr on 2021-01-07
|
||||
*/
|
||||
@NoArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@ApiModel(description = "通知接收人设置--用户")
|
||||
public class NoticeReceiverSettingRoleDTO extends NoticeReceiverSettingDTO{
|
||||
|
||||
/** **/
|
||||
private static final long serialVersionUID = 8752617190208418705L;
|
||||
|
||||
@ApiModelProperty("角色名称")
|
||||
private String roleName;
|
||||
@ApiModelProperty("是否启用")
|
||||
private Boolean enabled;
|
||||
@ApiModelProperty("标准角色")
|
||||
private Integer standardType;
|
||||
@ApiModelProperty("所属平台")
|
||||
private Integer platformCode;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.newyetai.usercenter.notice.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author sr on 2021-01-07
|
||||
*/
|
||||
@NoArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@ApiModel(description = "通知接收人设置--用户")
|
||||
public class NoticeReceiverSettingUserDTO extends NoticeReceiverSettingDTO{
|
||||
|
||||
/** **/
|
||||
private static final long serialVersionUID = 8752617190208418705L;
|
||||
|
||||
@ApiModelProperty("账户名")
|
||||
private String username;
|
||||
@ApiModelProperty("中文名")
|
||||
private String chineseName;
|
||||
@ApiModelProperty("是否启用")
|
||||
private Boolean enabled;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
package com.newyetai.usercenter.notice.dto;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.newyetai.common.dto.BaseDTO;
|
||||
import com.newyetai.common.util.JsonUtils;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-17
|
||||
*/
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@SuperBuilder
|
||||
@Data
|
||||
@ApiModel(description = "通知发送记录(内容模版级)")
|
||||
public class NoticeSendRecordDTO extends BaseDTO implements Serializable{
|
||||
|
||||
/** **/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty("通知模版id")
|
||||
private Long templateId ;
|
||||
@ApiModelProperty("发送方机构id")
|
||||
private Long senderOrgId ;
|
||||
@ApiModelProperty("接收方机构id")
|
||||
private Long receiverOrgId ;
|
||||
@ApiModelProperty("消息体模版id")
|
||||
private Long contentTemplateId ;
|
||||
@ApiModelProperty("消息体参数")
|
||||
private String contentParamData ;
|
||||
@ApiModelProperty("消息体")
|
||||
private String content ;
|
||||
@ApiModelProperty("是否指定接收方(非预先设定)")
|
||||
private Boolean appointed ;
|
||||
|
||||
@ApiModelProperty("状态:1待处理,2已处理(见notice_send_status)")
|
||||
private Integer status ;
|
||||
@ApiModelProperty("消息通道类型:1站内信,2短信,3钉钉,4企业微信,5邮件 等(见notice_channel_type)")
|
||||
private Integer channelType ;
|
||||
@ApiModelProperty("标题")
|
||||
private String title;
|
||||
@ApiModelProperty("内容模版")
|
||||
private String contentTemplate ;
|
||||
@ApiModelProperty("链接")
|
||||
private String link;
|
||||
|
||||
@JsonIgnore
|
||||
private Map<String, Object> contentParamDataMap;
|
||||
|
||||
public Map<String, Object> getContentParamDataMap(){
|
||||
if (contentParamDataMap == null) {
|
||||
if (StringUtils.isNotBlank(contentParamData)) {
|
||||
contentParamDataMap = JsonUtils.toObject(this.getContentParamData(), Map.class);
|
||||
} else {
|
||||
contentParamDataMap = Collections.emptyMap();
|
||||
}
|
||||
}
|
||||
return contentParamDataMap;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package com.newyetai.usercenter.notice.dto;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import com.newyetai.common.dto.BaseDTO;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-17
|
||||
*/
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@SuperBuilder
|
||||
@Data
|
||||
@ApiModel(description = "通知发送记录明细(接收人)")
|
||||
public class NoticeSendRecordDetailDTO extends BaseDTO implements Serializable{
|
||||
|
||||
/** **/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty("发送记录id")
|
||||
private Long recordId ;
|
||||
@ApiModelProperty("接收人id")
|
||||
private Long userId ;
|
||||
@ApiModelProperty("接收方帐号")
|
||||
private String receiverAccountNo ;
|
||||
@ApiModelProperty("接收状态:1待发送,2已发送,3发送失败,4接收已读(见notice_receiver_status)")
|
||||
private Integer receiverStatus ;
|
||||
|
||||
@ApiModelProperty("通知模版code")
|
||||
private String templateCode;
|
||||
@ApiModelProperty("标题")
|
||||
private String title;
|
||||
@ApiModelProperty("链接")
|
||||
private String link;
|
||||
@ApiModelProperty("消息体")
|
||||
private String content ;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package com.newyetai.usercenter.notice.dto;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
@ApiModel(description = "通知发送记录明细(接收人)")
|
||||
public class NoticeSendRecordDetailOperateDTO implements Serializable{
|
||||
|
||||
/** **/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty("发送记录id")
|
||||
private Long recordId ;
|
||||
@ApiModelProperty("接收人id")
|
||||
private Long userId ;
|
||||
@ApiModelProperty("接收方帐号")
|
||||
private String receiverAccountNo ;
|
||||
@ApiModelProperty("接收状态:1待发送,2已发送,3发送失败,4接收已读(见notice_receiver_status)")
|
||||
private Integer receiverStatus ;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
package com.newyetai.usercenter.notice.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.newyetai.common.dto.PageQueryDTO;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-17
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
@ApiModel(description = "通知发送记录明细(接收人)查询条件")
|
||||
public class NoticeSendRecordDetailQueryDTO extends PageQueryDTO<NoticeSendRecordDetailDTO> implements Serializable{
|
||||
|
||||
/** **/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty("id")
|
||||
private Long id;
|
||||
@ApiModelProperty("发送记录id")
|
||||
private Long recordId ;
|
||||
@ApiModelProperty("通知模版id")
|
||||
private Long templateId ;
|
||||
// 或模版code
|
||||
@ApiModelProperty("通知模版code")
|
||||
private String templateCode;
|
||||
@ApiModelProperty("消息通道类型:1站内信,2短信,3钉钉,4企业微信,5邮件(见notice_channel_type)")
|
||||
private Integer channelType ;
|
||||
@JsonIgnore
|
||||
@ApiModelProperty("接收人id")
|
||||
private Long userId ;
|
||||
@ApiModelProperty("接收状态:1待发送,2已发送,3发送失败,4接收已读(见notice_receiver_status)")
|
||||
private Integer receiverStatus ;
|
||||
@ApiModelProperty("消息通知时间起")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(
|
||||
shape = JsonFormat.Shape.STRING,
|
||||
pattern = "yyyy-MM-dd HH:mm:ss",
|
||||
timezone = "GMT+8"
|
||||
)
|
||||
private Date createTimeStart ;
|
||||
@ApiModelProperty("消息通知时间止")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(
|
||||
shape = JsonFormat.Shape.STRING,
|
||||
pattern = "yyyy-MM-dd HH:mm:ss",
|
||||
timezone = "GMT+8"
|
||||
)
|
||||
private Date createTimeEnd ;
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
package com.newyetai.usercenter.notice.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.newyetai.common.util.UserContextHolder;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.io.Serializable;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-17
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
@ApiModel(description = "通知发送记录明细(接收人)查询条件")
|
||||
public class NoticeSendRecordDetailReqDTO implements Serializable{
|
||||
|
||||
private static final long serialVersionUID = -3715540940245404664L;
|
||||
/** **/
|
||||
|
||||
@ApiModelProperty("id")
|
||||
@NotNull(message = "消息ID不能为空")
|
||||
private Long id;
|
||||
|
||||
@JsonIgnore
|
||||
@ApiModelProperty("接收人id")
|
||||
private Long userId ;
|
||||
|
||||
public Long getUserId() {
|
||||
if (Objects.isNull(userId)){
|
||||
userId = UserContextHolder.getExistLoginUserId();
|
||||
}
|
||||
return userId;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.newyetai.usercenter.notice.dto;
|
||||
|
||||
import com.newyetai.common.dto.BaseOperateDTO;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author sr on 2021-02-08
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
@ApiModel(description = "通知发送记录-修改")
|
||||
public class NoticeSendRecordModifyDTO extends BaseOperateDTO{
|
||||
|
||||
/** **/
|
||||
private static final long serialVersionUID = 1035598395983126645L;
|
||||
|
||||
@ApiModelProperty("id")
|
||||
private Long id;
|
||||
@ApiModelProperty("旧状态")
|
||||
public Integer oldStatus;
|
||||
@ApiModelProperty("新状态")
|
||||
public Integer newStatus;
|
||||
@ApiModelProperty("消息体")
|
||||
private String content ;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
package com.newyetai.usercenter.notice.dto;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import com.google.common.collect.Maps;
|
||||
import com.newyetai.common.dto.BaseOperateDTO;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Builder.Default;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
@ApiModel(description = "通知发送记录(内容模版级)")
|
||||
public class NoticeSendRecordOperateDTO extends BaseOperateDTO implements Serializable{
|
||||
|
||||
/** **/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty("通知模版id")
|
||||
private Long templateId ;
|
||||
// 或模版code
|
||||
@ApiModelProperty("通知模版code")
|
||||
private String templateCode;
|
||||
@ApiModelProperty("消息体模版id")
|
||||
private Long contentTemplateId ;
|
||||
// 或消息体通道类型
|
||||
@ApiModelProperty("消息通道类型:1站内信,2短信,3钉钉,4企业微信,5邮件(见notice_channel_type)")
|
||||
private Integer channelType ;
|
||||
@ApiModelProperty("接收方机构id,不传平台模版取1,非平台模版取当前上下文机构id")
|
||||
private Long receiverOrgId ;
|
||||
@ApiModelProperty("消息体参数")
|
||||
@Default
|
||||
private Map<String, Object> contentParamDataMap = Maps.newHashMap();
|
||||
@ApiModelProperty("指定接收人")
|
||||
private Set<Long> receiverUserIds;
|
||||
|
||||
/** 定制,通道类型不能为空 **/
|
||||
@ApiModelProperty("定制模版内容")
|
||||
private Boolean customContent;
|
||||
@ApiModelProperty("标题")
|
||||
private String title;
|
||||
@ApiModelProperty("内容模版")
|
||||
private String contentTemplate ;
|
||||
@ApiModelProperty("链接")
|
||||
private String link;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.newyetai.usercenter.notice.dto;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import com.newyetai.common.dto.PageQueryDTO;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-17
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
@ApiModel(description = "通知发送记录(内容模版级)查询条件")
|
||||
public class NoticeSendRecordQueryDTO extends PageQueryDTO<NoticeSendRecordDTO> implements Serializable{
|
||||
|
||||
/** **/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty("id")
|
||||
private Long id;
|
||||
@ApiModelProperty("通知模版id")
|
||||
private Long templateId ;
|
||||
@ApiModelProperty("通知模版code")
|
||||
private String templateCode;
|
||||
@ApiModelProperty("发送方机构id")
|
||||
private Long senderOrgId ;
|
||||
@ApiModelProperty("消息通道类型:1站内信,2短信,3钉钉,4企业微信,5邮件(见notice_channel_type)")
|
||||
private Integer channelType ;
|
||||
@ApiModelProperty("接收人id")
|
||||
private Long userId ;
|
||||
@ApiModelProperty("状态:1待处理,2已处理(见notice_send_status)")
|
||||
private Integer status ;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package com.newyetai.usercenter.notice.dto;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import com.newyetai.common.dto.BaseDTO;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-17
|
||||
*/
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@SuperBuilder
|
||||
@Data
|
||||
@ApiModel(description = "通知")
|
||||
public class NoticeTemplateDTO extends BaseDTO implements Serializable{
|
||||
|
||||
/** **/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty("通知模版code")
|
||||
private String templateCode;
|
||||
@ApiModelProperty("通知名称")
|
||||
private String templateName ;
|
||||
@ApiModelProperty("模块分类:1业务,2监控/预警(见notice_module_type)")
|
||||
private Integer moduleType;
|
||||
@ApiModelProperty("业务分类:")
|
||||
private Integer bizType;
|
||||
@ApiModelProperty("级别:1平台,2机构(见notice_level)")
|
||||
private Integer level;
|
||||
@ApiModelProperty("是否启用")
|
||||
private Boolean enabled;
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
package com.newyetai.usercenter.notice.dto;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
import com.newyetai.common.dto.BaseOperateDTO;
|
||||
import com.newyetai.common.validation.Update;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-17
|
||||
*/
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ApiModel(description = "通知")
|
||||
public class NoticeTemplateOperateDTO extends BaseOperateDTO implements Serializable {
|
||||
|
||||
/** **/
|
||||
private static final long serialVersionUID = 6246259217863925980L;
|
||||
|
||||
@ApiModelProperty("id")
|
||||
@NotNull(message = "id不能为空", groups = {Update.class})
|
||||
private Long id;
|
||||
@ApiModelProperty("通知模版code")
|
||||
@NotBlank(message = "模版标识不能为空")
|
||||
private String templateCode;
|
||||
@ApiModelProperty("通知名称")
|
||||
@NotBlank(message = "模版名称不能为空")
|
||||
private String templateName ;
|
||||
@ApiModelProperty("模块分类:1业务,2监控/预警(见notice_module_type)")
|
||||
@NotNull(message = "模块分类不能为空")
|
||||
private Integer moduleType;
|
||||
@ApiModelProperty("业务分类:")
|
||||
private Integer bizType;
|
||||
@ApiModelProperty("级别:1平台,2机构(见notice_level)")
|
||||
@NotNull(message = "级别不能为空")
|
||||
private Integer level;
|
||||
@ApiModelProperty("是否启用")
|
||||
private Boolean enabled;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package com.newyetai.usercenter.notice.dto;
|
||||
|
||||
import com.newyetai.common.annotation.trimAndUpper.TrimAndUpper;
|
||||
import com.newyetai.common.dto.PageQueryDTO;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.*;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-17
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
public class NoticeTemplateQueryDTO extends PageQueryDTO<NoticeTemplateDTO> implements Serializable{
|
||||
|
||||
/** **/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty("id")
|
||||
private Long id;
|
||||
@ApiModelProperty("通知模版code")
|
||||
private String templateCode;
|
||||
@ApiModelProperty("通知模版code(模糊匹配)")
|
||||
@TrimAndUpper(TrimAndUpper.ExecuteType.TRIM)
|
||||
private String templateCodeLike;
|
||||
@ApiModelProperty("通知名称(模糊匹配)")
|
||||
@TrimAndUpper(TrimAndUpper.ExecuteType.TRIM)
|
||||
private String templateNameLike ;
|
||||
@ApiModelProperty("模块分类:1业务,2监控/预警(见notice_module_type)")
|
||||
private Integer moduleType;
|
||||
@ApiModelProperty("级别:1平台,2机构(见notice_level)")
|
||||
private Integer level;
|
||||
@ApiModelProperty("是否启用")
|
||||
private Boolean enabled;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package com.newyetai.usercenter.notice.dto;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
|
||||
import com.newyetai.common.dto.BaseOperateDTO;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-28
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
@ApiModel("通知发送记录更新状态")
|
||||
public class RecordDetailUpdateStatusDTO extends BaseOperateDTO implements Serializable {
|
||||
|
||||
/** **/
|
||||
private static final long serialVersionUID = 2700111335512586751L;
|
||||
|
||||
@ApiModelProperty("旧状态")
|
||||
@NotEmpty(message = "旧状态不能为空")
|
||||
private Integer oldStatus;
|
||||
@ApiModelProperty("新状态")
|
||||
@NotEmpty(message = "新状态不能为空")
|
||||
private Integer newStatus;
|
||||
@ApiModelProperty("通知发送记录明细id")
|
||||
private Long recordDetailId;
|
||||
@ApiModelProperty("通知发送记录明细id集合")
|
||||
private Set<Long> recordDetailIds;
|
||||
@ApiModelProperty("通知发送记录id")
|
||||
private Long recordId;
|
||||
@ApiModelProperty("消息通道类型")
|
||||
@NotEmpty(message = "消息通道类型不能为空")
|
||||
private Integer channelType;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
package com.newyetai.usercenter.notice.entity;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.newyetai.common.entity.BaseEntity;
|
||||
import com.newyetai.usercenter.notice.constant.NoticeChannelTypeEnum;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 通知消息体模版
|
||||
*
|
||||
* @author sr on 2020-12-17
|
||||
*/
|
||||
@TableName("notice_content_template")
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class NoticeContentTemplate extends BaseEntity implements Serializable {
|
||||
|
||||
/** **/
|
||||
private static final long serialVersionUID = 1L;
|
||||
/** 通知模版id */
|
||||
private Long templateId ;
|
||||
/** {@link NoticeChannelTypeEnum} 消息通道类型:1站内信,2短信,3钉钉,4企业微信,5邮件 等(见notice_channel_type) */
|
||||
private Integer channelType ;
|
||||
/** 标题 **/
|
||||
private String title;
|
||||
/** 内容模版 */
|
||||
private String contentTemplate ;
|
||||
/** 是否启用 **/
|
||||
private Boolean enabled;
|
||||
/** 链接 **/
|
||||
private String link;
|
||||
|
||||
@Builder
|
||||
public NoticeContentTemplate(Long id, Boolean deleted, Long createBy, Date createTime,
|
||||
Long updateBy, Date updateTime, Long proxyBy, Long templateId, Integer channelType,
|
||||
String title, String contentTemplate, Boolean enabled, String link) {
|
||||
super(id, deleted, createBy, createTime, updateBy, updateTime, proxyBy);
|
||||
this.templateId = templateId;
|
||||
this.channelType = channelType;
|
||||
this.title = title;
|
||||
this.contentTemplate = contentTemplate;
|
||||
this.enabled = enabled;
|
||||
this.link = link;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
package com.newyetai.usercenter.notice.entity;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.newyetai.common.entity.BaseEntity;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 通知接收人设置
|
||||
*
|
||||
* @author sr on 2020-12-17
|
||||
*/
|
||||
@TableName("notice_receiver_setting")
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class NoticeReceiverSetting extends BaseEntity implements Serializable {
|
||||
|
||||
/** **/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 通知模版id */
|
||||
private Long templateId ;
|
||||
/** 机构id */
|
||||
private Long orgId ;
|
||||
/** 接收人关联类型:1用户id,2角色,3标准角色(见notice_receiver_type) */
|
||||
private Integer receiverUnionType ;
|
||||
/** 接收人关联id:用户id,角色id,标准角色id */
|
||||
private Long receiverUnionId ;
|
||||
|
||||
@Builder
|
||||
public NoticeReceiverSetting(Long id, Boolean deleted, Long createBy, Date createTime,
|
||||
Long updateBy, Date updateTime, Long proxyBy, Long templateId, Long orgId,
|
||||
Integer receiverUnionType, Long receiverUnionId) {
|
||||
super(id, deleted, createBy, createTime, updateBy, updateTime, proxyBy);
|
||||
this.templateId = templateId;
|
||||
this.orgId = orgId;
|
||||
this.receiverUnionType = receiverUnionType;
|
||||
this.receiverUnionId = receiverUnionId;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
package com.newyetai.usercenter.notice.entity;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.newyetai.common.entity.BaseEntity;
|
||||
import com.newyetai.usercenter.notice.constant.NoticeChannelTypeEnum;
|
||||
import com.newyetai.usercenter.notice.constant.NoticeSendStatusEnum;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 通知发送记录(内容模版级)
|
||||
*
|
||||
* @author sr on 2020-12-17
|
||||
*/
|
||||
@TableName("notice_send_record")
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class NoticeSendRecord extends BaseEntity implements Serializable {
|
||||
|
||||
/** **/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 通知模版id */
|
||||
private Long templateId ;
|
||||
/** 发送方机构id */
|
||||
private Long senderOrgId ;
|
||||
/** 接收方机构id */
|
||||
private Long receiverOrgId ;
|
||||
/** 消息体模版id */
|
||||
private Long contentTemplateId ;
|
||||
/** 消息体参数 */
|
||||
private String contentParamData ;
|
||||
/** 消息体 */
|
||||
private String content ;
|
||||
/** 是否指定接收方(非预先设定) **/
|
||||
private Boolean appointed ;
|
||||
|
||||
/** {@link NoticeSendStatusEnum}状态:1待处理,2已处理(见notice_send_status) */
|
||||
private Integer status ;
|
||||
/** {@link NoticeChannelTypeEnum} 消息通道类型:1站内信,2短信,3钉钉,4企业微信,5邮件 等(见notice_channel_type) */
|
||||
private Integer channelType ;
|
||||
/** 标题 **/
|
||||
private String title;
|
||||
/** 内容模版 */
|
||||
private String contentTemplate ;
|
||||
/** 链接 **/
|
||||
private String link;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
package com.newyetai.usercenter.notice.entity;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.newyetai.common.entity.BaseEntity;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 通知发送记录明细(接收人)
|
||||
*
|
||||
* @author sr on 2020-12-17
|
||||
*/
|
||||
@TableName("notice_send_record_detail")
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Builder
|
||||
@Data
|
||||
public class NoticeSendRecordDetail extends BaseEntity implements Serializable {
|
||||
|
||||
/** **/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 发送记录id */
|
||||
private Long recordId ;
|
||||
/** 接收人id */
|
||||
private Long userId ;
|
||||
/** 接收方帐号 */
|
||||
private String receiverAccountNo ;
|
||||
/** 接收状态:1待发送,2已发送,3发送失败,4接收已读(见notice_receiver_status) */
|
||||
private Integer receiverStatus ;
|
||||
|
||||
@Builder
|
||||
public NoticeSendRecordDetail(Long id, Boolean deleted, Long createBy, Date createTime,
|
||||
Long updateBy, Date updateTime, Long proxyBy, Long recordId, Long userId,
|
||||
String receiverAccountNo, Integer receiverStatus) {
|
||||
super(id, deleted, createBy, createTime, updateBy, updateTime, proxyBy);
|
||||
this.recordId = recordId;
|
||||
this.userId = userId;
|
||||
this.receiverAccountNo = receiverAccountNo;
|
||||
this.receiverStatus = receiverStatus;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
package com.newyetai.usercenter.notice.entity;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.newyetai.common.entity.BaseEntity;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 通知模版
|
||||
*
|
||||
* @author sr on 2020-12-17
|
||||
*/
|
||||
@TableName("notice_template")
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class NoticeTemplate extends BaseEntity implements Serializable {
|
||||
|
||||
/** **/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 通知模版code */
|
||||
private String templateCode ;
|
||||
/** 通知名称 **/
|
||||
private String templateName ;
|
||||
/** 模块分类:1业务,2监控/预警(见notice_module_type) */
|
||||
private Integer moduleType ;
|
||||
/** 业务分类: */
|
||||
private Integer bizType ;
|
||||
/** 级别:1平台,2机构(见notice_level) */
|
||||
private Integer level ;
|
||||
/** 是否启用 **/
|
||||
private Boolean enabled;
|
||||
|
||||
@Builder
|
||||
public NoticeTemplate(Long id, Boolean deleted, Long createBy, Date createTime, Long updateBy,
|
||||
Date updateTime, Long proxyBy, String templateCode, String templateName, Integer moduleType, Integer bizType,
|
||||
Integer level, Boolean enabled) {
|
||||
super(id, deleted, createBy, createTime, updateBy, updateTime, proxyBy);
|
||||
this.templateCode = templateCode;
|
||||
this.templateName = templateName;
|
||||
this.moduleType = moduleType;
|
||||
this.bizType = bizType;
|
||||
this.level = level;
|
||||
this.enabled = enabled;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.newyetai.usercenter.notice.dao.NoticeContentTemplateMapper">
|
||||
<select id="listNoticeContentTemplateDTO" resultType="com.newyetai.usercenter.notice.dto.NoticeContentTemplateDTO">
|
||||
select
|
||||
*
|
||||
from notice_content_template
|
||||
where
|
||||
deleted = 0
|
||||
<if test='param.id != null'>
|
||||
and id = #{param.id}
|
||||
</if>
|
||||
<if test="param.templateId != null">
|
||||
and template_id = #{param.templateId}
|
||||
</if>
|
||||
<if test="param.channelType != null">
|
||||
and channel_type = #{param.channelType}
|
||||
</if>
|
||||
<if test='param.titleLike != null and param.titleLike.trim() != ""'>
|
||||
<bind name="titleLike" value="'%' + param.titleLike + '%'"/>
|
||||
and title = #{titleLike}
|
||||
</if>
|
||||
<if test="param.enabled != null">
|
||||
and enabled = #{param.enabled}
|
||||
</if>
|
||||
</select>
|
||||
</mapper>
|
||||
@@ -0,0 +1,207 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.newyetai.usercenter.notice.dao.NoticeReceiverSettingMapper">
|
||||
<select id="listNoticeReceiverSettingDTO" resultType="com.newyetai.usercenter.notice.dto.NoticeReceiverSettingDTO">
|
||||
(
|
||||
SELECT
|
||||
s.*,
|
||||
u.username receiverName,
|
||||
u.enabled
|
||||
FROM
|
||||
notice_receiver_setting s
|
||||
LEFT JOIN uc_user u ON u.id = s.receiver_union_id
|
||||
AND u.deleted = 0
|
||||
WHERE
|
||||
s.deleted = 0
|
||||
AND s.receiver_union_type = 1
|
||||
<if test='param.id != null'>
|
||||
and s.id = #{param.id}
|
||||
</if>
|
||||
<if test="param.templateId != null">
|
||||
and s.template_id = #{param.templateId}
|
||||
</if>
|
||||
<if test="param.orgId != null">
|
||||
and s.org_id = #{param.orgId}
|
||||
</if>
|
||||
<if test="param.receiverUnionType != null">
|
||||
and s.receiver_union_type = #{param.receiverUnionType}
|
||||
</if>
|
||||
ORDER BY
|
||||
s.id DESC
|
||||
)
|
||||
UNION
|
||||
(
|
||||
SELECT
|
||||
s.*,
|
||||
r.NAME receiverName,
|
||||
r.enabled
|
||||
FROM
|
||||
notice_receiver_setting s
|
||||
LEFT JOIN xs_role r ON r.id = s.receiver_union_id
|
||||
AND r.deleted = 0
|
||||
WHERE
|
||||
s.deleted = 0
|
||||
AND s.receiver_union_type = 2
|
||||
<if test='param.id != null'>
|
||||
and s.id = #{param.id}
|
||||
</if>
|
||||
<if test="param.templateId != null">
|
||||
and s.template_id = #{param.templateId}
|
||||
</if>
|
||||
<if test="param.orgId != null">
|
||||
and s.org_id = #{param.orgId}
|
||||
</if>
|
||||
<if test="param.receiverUnionType != null">
|
||||
and s.receiver_union_type = #{param.receiverUnionType}
|
||||
</if>
|
||||
ORDER BY
|
||||
s.id DESC
|
||||
)
|
||||
</select>
|
||||
|
||||
<update id="remove">
|
||||
update
|
||||
notice_receiver_setting
|
||||
set
|
||||
deleted = 1,
|
||||
update_time = now(),
|
||||
update_by = #{param.operateUserId}
|
||||
where
|
||||
template_id = #{param.templateId}
|
||||
and receiver_union_type = #{param.receiverUnionType}
|
||||
and org_id = #{param.operateOrgId}
|
||||
and deleted = 0
|
||||
<if test="param.receiverUnionIds != null">
|
||||
and receiver_union_id in
|
||||
<foreach collection="param.receiverUnionIds" item="receiverUnionId" open="(" separator="," close=")">
|
||||
#{receiverUnionId}
|
||||
</foreach>
|
||||
</if>
|
||||
</update>
|
||||
|
||||
<select id="findReceiverUnionIds" resultType="long">
|
||||
select
|
||||
receiver_union_id
|
||||
from notice_receiver_setting
|
||||
where
|
||||
deleted = 0
|
||||
and template_id = #{param.templateId}
|
||||
and receiver_union_type = #{param.receiverUnionType}
|
||||
and org_id = #{param.operateOrgId}
|
||||
</select>
|
||||
|
||||
<insert id="create">
|
||||
insert into notice_receiver_setting
|
||||
(
|
||||
template_id,
|
||||
org_id,
|
||||
receiver_union_type,
|
||||
receiver_union_id,
|
||||
deleted,
|
||||
create_by,
|
||||
create_time
|
||||
) values
|
||||
<foreach collection="receiverUnionIds" item="receiverUnionId" separator="," >
|
||||
(#{param.templateId},
|
||||
#{param.operateOrgId},
|
||||
#{param.receiverUnionType},
|
||||
#{receiverUnionId},
|
||||
0,
|
||||
#{param.operateUserId},
|
||||
now())
|
||||
</foreach>
|
||||
</insert>
|
||||
|
||||
<select id="findUserIdByUnionType" resultType="long">
|
||||
select
|
||||
distinct u.id
|
||||
from uc_user u
|
||||
inner join xs_role_allocation ra on ra.allocation_id = u.id and ra.allocation_type = 1
|
||||
inner join xs_role r on r.id = ra.role_id
|
||||
where
|
||||
u.deleted = 0
|
||||
and ra.deleted = 0
|
||||
and r.deleted = 0
|
||||
and r.org_id = #{orgId}
|
||||
<!-- 机构内角色 -->
|
||||
and r.type = 1
|
||||
<if test="unionType == 2">
|
||||
and r.id in
|
||||
<foreach collection="unionIds" item="unionId" open="(" separator="," close=")">
|
||||
#{unionId}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="unionType == 3">
|
||||
and r.standard_type in
|
||||
<foreach collection="unionIds" item="unionId" open="(" separator="," close=")">
|
||||
#{unionId}
|
||||
</foreach>
|
||||
</if>
|
||||
</select>
|
||||
|
||||
<select id="validUser" resultType="long">
|
||||
select
|
||||
distinct u.id
|
||||
from uc_org_user ou
|
||||
inner join uc_user u on ou.user_id = u.id
|
||||
where
|
||||
ou.deleted = 0
|
||||
and u.deleted = 0
|
||||
and ou.org_id = #{orgId}
|
||||
and u.id in
|
||||
<foreach collection="userIds" item="userId" open="(" separator="," close=")">
|
||||
#{userId}
|
||||
</foreach>
|
||||
|
||||
</select>
|
||||
|
||||
<select id="validRole" resultType="long">
|
||||
select
|
||||
distinct id
|
||||
from xs_role
|
||||
where
|
||||
deleted = 0
|
||||
and type = 1
|
||||
and org_id = #{orgId}
|
||||
and id in
|
||||
<foreach collection="roleIds" item="roleId" open="(" separator="," close=")">
|
||||
#{roleId}
|
||||
</foreach>
|
||||
</select>
|
||||
|
||||
<select id="listNoticeReceiverSettingUserDTO" resultType="com.newyetai.usercenter.notice.dto.NoticeReceiverSettingUserDTO">
|
||||
select
|
||||
s.*,
|
||||
u.username,
|
||||
u.nickname chineseName,
|
||||
u.enabled
|
||||
from notice_receiver_setting s
|
||||
inner join uc_user u on s.receiver_union_id = u.id
|
||||
where
|
||||
s.deleted = 0
|
||||
and u.deleted = 0
|
||||
and s.template_id = #{param.templateId}
|
||||
and s.org_id = #{param.orgId}
|
||||
and s.receiver_union_type = 1
|
||||
</select>
|
||||
|
||||
<select id="listNoticeReceiverSettingRoleDTO" resultType="com.newyetai.usercenter.notice.dto.NoticeReceiverSettingRoleDTO">
|
||||
select
|
||||
s.*,
|
||||
r.name roleName,
|
||||
r.enabled,
|
||||
r.standard_type,
|
||||
r.platform_code
|
||||
from notice_receiver_setting s
|
||||
inner join xs_role r on s.receiver_union_id = r.id
|
||||
where
|
||||
s.deleted = 0
|
||||
and r.deleted = 0
|
||||
and s.template_id = #{param.templateId}
|
||||
and s.org_id = #{param.orgId}
|
||||
and s.receiver_union_type = 2
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
@@ -0,0 +1,171 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.newyetai.usercenter.notice.dao.NoticeSendRecordDetailMapper">
|
||||
<select id="listNoticeSendRecordDetailDTO" resultType="com.newyetai.usercenter.notice.dto.NoticeSendRecordDetailDTO">
|
||||
select
|
||||
rd.*,
|
||||
t.template_code,
|
||||
ct.title,
|
||||
ct.link,
|
||||
r.content
|
||||
from notice_send_record_detail rd
|
||||
inner join notice_send_record r on r.id = rd.record_id
|
||||
inner join notice_template t on t.id = r.template_id
|
||||
left join notice_content_template ct on ct.id = r.content_template_id and ct.deleted = 0
|
||||
where
|
||||
rd.deleted = 0
|
||||
and r.deleted = 0
|
||||
and t.deleted = 0
|
||||
<if test='param.id != null'>
|
||||
and rd.id = #{param.id}
|
||||
</if>
|
||||
<if test="param.recordId != null">
|
||||
and rd.record_id = #{param.recordId}
|
||||
</if>
|
||||
<if test="param.templateId != null">
|
||||
and r.template_id = #{param.templateId}
|
||||
</if>
|
||||
<if test='param.templateCode != null and param.templateCode.trim() != ""'>
|
||||
and t.template_code = #{param.templateCode}
|
||||
</if>
|
||||
<if test="param.channelType != null">
|
||||
and ct.channel_type = #{param.channelType}
|
||||
</if>
|
||||
<if test="param.userId != null">
|
||||
and rd.user_id = #{param.userId}
|
||||
</if>
|
||||
<if test="param.receiverStatus != null">
|
||||
and rd.receiver_status = #{param.receiverStatus}
|
||||
</if>
|
||||
<if test="param.createTimeStart != null">
|
||||
and rd.create_time >= #{param.createTimeStart}
|
||||
</if>
|
||||
<if test="param.createTimeEnd != null">
|
||||
and rd.create_time <= #{param.createTimeEnd}
|
||||
</if>
|
||||
order by rd.id desc
|
||||
</select>
|
||||
<select id="countNoticeSendRecordDetail" resultType="java.lang.Integer">
|
||||
select
|
||||
count(*)
|
||||
from notice_send_record_detail rd
|
||||
inner join notice_send_record r on r.id = rd.record_id
|
||||
inner join notice_template t on t.id = r.template_id
|
||||
left join notice_content_template ct on ct.id = r.content_template_id and ct.deleted = 0
|
||||
where
|
||||
rd.deleted = 0
|
||||
and r.deleted = 0
|
||||
and t.deleted = 0
|
||||
<if test='param.id != null'>
|
||||
and rd.id = #{param.id}
|
||||
</if>
|
||||
<if test="param.recordId != null">
|
||||
and rd.record_id = #{param.recordId}
|
||||
</if>
|
||||
<if test="param.templateId != null">
|
||||
and r.template_id = #{param.templateId}
|
||||
</if>
|
||||
<if test='param.templateCode != null and param.templateCode.trim() != ""'>
|
||||
and t.template_code = #{param.templateCode}
|
||||
</if>
|
||||
<if test="param.channelType != null">
|
||||
and ct.channel_type = #{param.channelType}
|
||||
</if>
|
||||
<if test="param.userId != null">
|
||||
and rd.user_id = #{param.userId}
|
||||
</if>
|
||||
<if test="param.receiverStatus != null">
|
||||
and rd.receiver_status = #{param.receiverStatus}
|
||||
</if>
|
||||
<if test="param.createTimeStart != null">
|
||||
and rd.create_time >= #{param.createTimeStart}
|
||||
</if>
|
||||
<if test="param.createTimeEnd != null">
|
||||
and rd.create_time <= #{param.createTimeEnd}
|
||||
</if>
|
||||
</select>
|
||||
<select id="findNoticeSendRecordDetailDTO"
|
||||
resultType="com.newyetai.usercenter.notice.dto.NoticeSendRecordDetailDTO">
|
||||
select
|
||||
rd.*,
|
||||
t.template_code,
|
||||
ct.title,
|
||||
ct.link,
|
||||
r.content
|
||||
from notice_send_record_detail rd
|
||||
inner join notice_send_record r on r.id = rd.record_id
|
||||
inner join notice_template t on t.id = r.template_id
|
||||
left join notice_content_template ct on ct.id = r.content_template_id and ct.deleted = 0
|
||||
where
|
||||
rd.deleted = 0
|
||||
and r.deleted = 0
|
||||
and t.deleted = 0
|
||||
<if test='param.id != null'>
|
||||
and rd.id = #{param.id}
|
||||
</if>
|
||||
<if test="param.userId != null">
|
||||
and rd.user_id = #{param.userId}
|
||||
</if>
|
||||
</select>
|
||||
|
||||
<insert id="createDetails" parameterType="com.newyetai.usercenter.notice.entity.NoticeSendRecordDetail" useGeneratedKeys="true" keyProperty="id">
|
||||
insert into notice_send_record_detail
|
||||
(
|
||||
record_id,
|
||||
user_id,
|
||||
receiver_account_no,
|
||||
receiver_status,
|
||||
deleted,
|
||||
create_by,
|
||||
create_time
|
||||
)
|
||||
values
|
||||
<foreach collection="entities" item="item" separator="," >
|
||||
(#{item.recordId},
|
||||
#{item.userId},
|
||||
#{item.receiverAccountNo},
|
||||
#{item.receiverStatus},
|
||||
0,
|
||||
#{operateUserId},
|
||||
now())
|
||||
</foreach>
|
||||
</insert>
|
||||
|
||||
<update id="modifyStatus">
|
||||
update notice_send_record_detail rd
|
||||
set
|
||||
rd.receiver_status = #{param.newStatus},
|
||||
rd.update_by = #{param.operateUserId},
|
||||
rd.update_time = now()
|
||||
where
|
||||
rd.receiver_status = #{param.oldStatus}
|
||||
and rd.deleted = 0
|
||||
<!-- 通道 -->
|
||||
and exists (
|
||||
select *
|
||||
from notice_send_record r
|
||||
where r.id = rd.record_id
|
||||
and r.deleted = 0
|
||||
and r.channel_type = #{param.channelType}
|
||||
)
|
||||
<!-- 已读只能本人读 -->
|
||||
<if test="param.newStatus == 4">
|
||||
and rd.user_id = #{param.operateUserId}
|
||||
</if>
|
||||
<if test="param.recordDetailId != null">
|
||||
and rd.id = #{param.recordDetailId}
|
||||
</if>
|
||||
<if test="param.recordId != null">
|
||||
and rd.record_id = #{param.param.recordId}
|
||||
</if>
|
||||
<if test="param.recordDetailIds != null">
|
||||
and rd.id in
|
||||
<foreach collection="param.recordDetailIds" item="detailId" open="(" separator="," close=")">
|
||||
#{detailId}
|
||||
</foreach>
|
||||
</if>
|
||||
</update>
|
||||
|
||||
</mapper>
|
||||
@@ -0,0 +1,58 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.newyetai.usercenter.notice.dao.NoticeSendRecordMapper">
|
||||
<select id="listNoticeSendRecordDTO" resultType="com.newyetai.usercenter.notice.dto.NoticeSendRecordDTO">
|
||||
select
|
||||
r.*
|
||||
from notice_send_record r
|
||||
inner join notice_template t on t.id = r.template_id
|
||||
inner join notice_content_template ct on ct.id = r.content_template_id
|
||||
where
|
||||
r.deleted = 0
|
||||
and t.deleted = 0
|
||||
and ct.deleted = 0
|
||||
<if test='param.id != null'>
|
||||
and r.id = #{param.id}
|
||||
</if>
|
||||
<if test="param.templateId != null">
|
||||
and r.template_id = #{param.templateId}
|
||||
</if>
|
||||
<if test='param.templateCode != null and param.templateCode.trim() != ""'>
|
||||
and t.template_code = #{param.templateCode}
|
||||
</if>
|
||||
<if test="param.senderOrgId != null">
|
||||
and r.sender_org_id = #{param.senderOrgId}
|
||||
</if>
|
||||
<if test="param.channelType != null">
|
||||
and ct.channel_type = #{param.channelType}
|
||||
</if>
|
||||
<if test="param.userId != null">
|
||||
and exists (
|
||||
select 1
|
||||
from notice_send_record_detail rd
|
||||
where rd.deleted = 0
|
||||
and rd.record_id = r.id
|
||||
and rd.user_id = #{param.userId}
|
||||
)
|
||||
</if>
|
||||
</select>
|
||||
|
||||
<update id="modify">
|
||||
update
|
||||
notice_send_record
|
||||
<set>
|
||||
status = #{param.newStatus},
|
||||
update_by = #{param.operateUserId},
|
||||
update_time = now(),
|
||||
<if test='param.content != null and param.content.trim() != ""'>
|
||||
content = #{param.content},
|
||||
</if>
|
||||
</set>
|
||||
where
|
||||
id = #{param.id}
|
||||
and status = #{param.oldStatus}
|
||||
and deleted = 0
|
||||
</update>
|
||||
</mapper>
|
||||
@@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.newyetai.usercenter.notice.dao.NoticeTemplateMapper">
|
||||
<select id="listNoticeTemplateDTO" resultType="com.newyetai.usercenter.notice.dto.NoticeTemplateDTO">
|
||||
select
|
||||
*
|
||||
from notice_template
|
||||
where
|
||||
deleted = 0
|
||||
<if test='param.id != null'>
|
||||
and id = #{param.id}
|
||||
</if>
|
||||
<if test='param.templateCodeLike != null and param.templateCodeLike.trim() != ""'>
|
||||
<bind name="templateCodeLike" value="'%' + param.templateCodeLike + '%'"/>
|
||||
and template_code like #{templateCodeLike}
|
||||
</if>
|
||||
<if test='param.templateCode != null and param.templateCode.trim() != ""'>
|
||||
and template_code = #{param.templateCode}
|
||||
</if>
|
||||
<if test='param.templateNameLike != null and param.templateNameLike.trim() != ""'>
|
||||
<bind name="templateNameLike" value="'%' + param.templateNameLike + '%'"/>
|
||||
and template_name like #{templateNameLike}
|
||||
</if>
|
||||
<if test="param.moduleType != null">
|
||||
and module_type = #{param.moduleType}
|
||||
</if>
|
||||
<if test="param.level != null">
|
||||
and level = #{param.level}
|
||||
</if>
|
||||
<if test="param.enabled != null">
|
||||
and enabled = #{param.enabled}
|
||||
</if>
|
||||
order by id desc
|
||||
</select>
|
||||
</mapper>
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.newyetai.usercenter.notice.mapstruct;
|
||||
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
import com.newyetai.usercenter.notice.dto.NoticeContentTemplateDTO;
|
||||
import com.newyetai.usercenter.notice.entity.NoticeContentTemplate;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeContentTemplateOperateDTO;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
@Mapper
|
||||
public interface NoticeContentTemplateMapMapper {
|
||||
|
||||
NoticeContentTemplateMapMapper INSTANCE =
|
||||
Mappers.getMapper(NoticeContentTemplateMapMapper.class);
|
||||
|
||||
/**
|
||||
* dto to entity
|
||||
*
|
||||
* @param noticeContentTemplateDto
|
||||
* @return
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
NoticeContentTemplate toEntity(
|
||||
NoticeContentTemplateDTO noticeContentTemplateDto);
|
||||
|
||||
|
||||
/**
|
||||
* @param noticeContentTemplateOperateDTO
|
||||
* @return
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
NoticeContentTemplate toEntity(NoticeContentTemplateOperateDTO noticeContentTemplateOperateDTO);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.newyetai.usercenter.notice.mapstruct;
|
||||
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
import com.newyetai.usercenter.notice.dto.NoticeReceiverSettingDTO;
|
||||
import com.newyetai.usercenter.notice.entity.NoticeReceiverSetting;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeReceiverSettingOperateDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeReceiverSettingRemoveDTO;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
@Mapper
|
||||
public interface NoticeReceiverSettingMapMapper {
|
||||
|
||||
NoticeReceiverSettingMapMapper INSTANCE =
|
||||
Mappers.getMapper(NoticeReceiverSettingMapMapper.class);
|
||||
|
||||
/**
|
||||
* dto to entity
|
||||
*
|
||||
* @param noticeReceiverSettingDto
|
||||
* @return
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
NoticeReceiverSetting toEntity(
|
||||
NoticeReceiverSettingDTO noticeReceiverSettingDto);
|
||||
|
||||
|
||||
/**
|
||||
* @param noticeReceiverSettingOperateDTO
|
||||
* @return
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
NoticeReceiverSetting toEntity(NoticeReceiverSettingOperateDTO noticeReceiverSettingOperateDTO);
|
||||
|
||||
/**
|
||||
* @param noticeReceiverSettingOperateDTO
|
||||
* @return
|
||||
* @author sr on 2020-12-21
|
||||
*/
|
||||
NoticeReceiverSettingRemoveDTO toRemoveDTO(NoticeReceiverSettingOperateDTO noticeReceiverSettingOperateDTO);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.newyetai.usercenter.notice.mapstruct;
|
||||
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordDetailDTO;
|
||||
import com.newyetai.usercenter.notice.entity.NoticeSendRecordDetail;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
@Mapper
|
||||
public interface NoticeSendRecordDetailMapMapper {
|
||||
|
||||
NoticeSendRecordDetailMapMapper INSTANCE =
|
||||
Mappers.getMapper(NoticeSendRecordDetailMapMapper.class);
|
||||
|
||||
/**
|
||||
* dto to entity
|
||||
*
|
||||
* @param noticeSendRecordDetailDto
|
||||
* @return
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
NoticeSendRecordDetail toEntity(
|
||||
NoticeSendRecordDetailDTO noticeSendRecordDetailDto);
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package com.newyetai.usercenter.notice.mapstruct;
|
||||
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
import com.newyetai.usercenter.notice.dto.NoticeContentTemplateDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordOperateDTO;
|
||||
import com.newyetai.usercenter.notice.entity.NoticeSendRecord;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
@Mapper
|
||||
public interface NoticeSendRecordMapMapper {
|
||||
|
||||
NoticeSendRecordMapMapper INSTANCE =
|
||||
Mappers.getMapper(NoticeSendRecordMapMapper.class);
|
||||
|
||||
/**
|
||||
* dto to entity
|
||||
*
|
||||
* @param noticeSendRecordDto
|
||||
* @return
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
NoticeSendRecord toEntity(
|
||||
NoticeSendRecordDTO noticeSendRecordDto);
|
||||
|
||||
|
||||
NoticeSendRecordOperateDTO clone(NoticeSendRecordOperateDTO dto);
|
||||
|
||||
NoticeContentTemplateDTO toContentTemplate(NoticeSendRecordOperateDTO dto);
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package com.newyetai.usercenter.notice.mapstruct;
|
||||
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
import com.newyetai.usercenter.notice.dto.NoticeTemplateDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeTemplateOperateDTO;
|
||||
import com.newyetai.usercenter.notice.entity.NoticeTemplate;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-17
|
||||
*/
|
||||
@Mapper
|
||||
public interface NoticeTemplateMapMapper {
|
||||
|
||||
NoticeTemplateMapMapper INSTANCE =
|
||||
Mappers.getMapper(NoticeTemplateMapMapper.class);
|
||||
|
||||
/**
|
||||
* dto to entity
|
||||
*
|
||||
* @param noticeTemplateDto
|
||||
* @return
|
||||
* @author sr on 2020-12-17
|
||||
*/
|
||||
NoticeTemplate toEntity(NoticeTemplateDTO noticeTemplateDto);
|
||||
|
||||
/**
|
||||
* @param noticeTemplateOperateDTO
|
||||
* @return
|
||||
* @author sr on 2020-12-17
|
||||
*/
|
||||
NoticeTemplate toEntity(NoticeTemplateOperateDTO noticeTemplateOperateDTO);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
package com.newyetai.usercenter.notice.service;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import com.newyetai.common.AlitaResult;
|
||||
import com.newyetai.common.freemarker.util.FreeMarkerTemplateUtils;
|
||||
import com.newyetai.mq.consumer.handler.ITopicMqHandler;
|
||||
import com.newyetai.mq.dto.TopicMqMessage;
|
||||
import com.newyetai.mq.util.MqSendUtils;
|
||||
import com.newyetai.security.util.MockUtils;
|
||||
import com.newyetai.usercenter.notice.constant.NoticeChannelTypeEnum;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordDTO;
|
||||
import com.newyetai.usercenter.notice.util.NoticeSendRecordUtils;
|
||||
import com.newyetai.usercenter.userprod.constant.UcMqSelfConstants;
|
||||
|
||||
public interface INoticeChannelProvider extends ITopicMqHandler<NoticeSendRecordDTO>{
|
||||
|
||||
Logger LOGGER = LoggerFactory.getLogger(INoticeChannelProvider.class);
|
||||
|
||||
/**
|
||||
*
|
||||
* @return {@link NoticeChannelTypeEnum}
|
||||
* @author sr on 2021-01-04
|
||||
*/
|
||||
Integer getChannelType();
|
||||
|
||||
default String format(String contentTemplate, Map<String, Object> contentParamDataMap) {
|
||||
return FreeMarkerTemplateUtils.formatString(contentTemplate, contentParamDataMap);
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送(保存发送记录+明细+处理真实通道消息发送)
|
||||
*
|
||||
* @param noticeSendRecordDTO
|
||||
* @author sr on 2021-02-19
|
||||
*/
|
||||
void send(NoticeSendRecordDTO noticeSendRecordDTO);
|
||||
|
||||
/**
|
||||
* 异步,发送mq
|
||||
*
|
||||
* @param noticeSendRecordDTO
|
||||
* @return
|
||||
* @author sr on 2021-02-19
|
||||
*/
|
||||
default AlitaResult<?> asyncDeal(NoticeSendRecordDTO noticeSendRecordDTO) {
|
||||
return MqSendUtils.send(
|
||||
getRoutingKey(),
|
||||
noticeSendRecordDTO);
|
||||
}
|
||||
|
||||
/**
|
||||
* mq routingKey: {@link UcMqSelfConstants}.ROUTING_KEY_NOTICE_CHANNEL_DEAL_PREFIX_channelType
|
||||
*/
|
||||
default String getRoutingKey() {
|
||||
return NoticeSendRecordUtils.getNoticeChannelDealKey(getChannelType());
|
||||
}
|
||||
|
||||
/**
|
||||
* 接收异步mq消息,处理send
|
||||
*/
|
||||
default void onMessage(TopicMqMessage<NoticeSendRecordDTO> message) {
|
||||
try {
|
||||
// mock用户
|
||||
MockUtils.mockPlatUser();
|
||||
send(message.getData());
|
||||
} catch (Exception e) {
|
||||
LOGGER.info("notice channel deal error:{}", e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
package com.newyetai.usercenter.notice.service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.newyetai.usercenter.notice.dto.NoticeContentTemplateQueryDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeContentTemplateOperateDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeContentTemplateDTO;
|
||||
|
||||
/**
|
||||
* 通知消息体模版
|
||||
*
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
public interface NoticeContentTemplateService {
|
||||
|
||||
/**
|
||||
* 新增
|
||||
*
|
||||
* @param noticeContentTemplateOperateDTO
|
||||
* @return
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
Long create(NoticeContentTemplateOperateDTO noticeContentTemplateOperateDTO);
|
||||
|
||||
/**
|
||||
* 修改
|
||||
*
|
||||
* @param noticeContentTemplateOperateDTO
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
void modify(NoticeContentTemplateOperateDTO noticeContentTemplateOperateDTO);
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*
|
||||
* @param id
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
void remove(Long id);
|
||||
|
||||
/**
|
||||
* 查询
|
||||
*
|
||||
* @param noticeContentTemplateQueryDTO
|
||||
* @return
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
List<NoticeContentTemplateDTO> page(NoticeContentTemplateQueryDTO noticeContentTemplateQueryDTO);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
package com.newyetai.usercenter.notice.service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import com.newyetai.usercenter.notice.dto.NoticeReceiverSettingDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeReceiverSettingOperateDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeReceiverSettingQueryDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeReceiverSettingRemoveDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeReceiverSettingRoleDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeReceiverSettingUserDTO;
|
||||
|
||||
/**
|
||||
* 通知接收人设置
|
||||
*
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
public interface NoticeReceiverSettingService {
|
||||
|
||||
/**
|
||||
* 创建(新增)
|
||||
*
|
||||
* @param noticeReceiverSettingOperateDTO
|
||||
* @author sr on 2021-01-07
|
||||
*/
|
||||
void create(NoticeReceiverSettingOperateDTO noticeReceiverSettingOperateDTO);
|
||||
|
||||
/**
|
||||
* 保存设置(内部判断新增/删除)
|
||||
*
|
||||
* @param noticeReceiverSettingOperateDTO
|
||||
* @return
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
void save(NoticeReceiverSettingOperateDTO noticeReceiverSettingOperateDTO);
|
||||
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*
|
||||
* @param id
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
void remove(Long id);
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*
|
||||
* @param noticeReceiverSettingRemoveDTO
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
void remove(NoticeReceiverSettingRemoveDTO noticeReceiverSettingRemoveDTO);
|
||||
|
||||
/**
|
||||
* 查询
|
||||
*
|
||||
* @param noticeReceiverSettingQueryDTO
|
||||
* @return
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
List<NoticeReceiverSettingDTO> list(NoticeReceiverSettingQueryDTO noticeReceiverSettingQueryDTO);
|
||||
|
||||
/**
|
||||
* 获取指定模版的所有接收人id
|
||||
*
|
||||
* @param templateId
|
||||
* @param receiverOrgId
|
||||
* @return
|
||||
* @author sr on 2021-01-07
|
||||
*/
|
||||
Set<Long> getReceiverIds(Long templateId, Long receiverOrgId);
|
||||
|
||||
/**
|
||||
* 查询接收人配置-人列表
|
||||
*
|
||||
* @param noticeReceiverSettingQueryDTO
|
||||
* @return
|
||||
* @author sr on 2021-01-07
|
||||
*/
|
||||
List<NoticeReceiverSettingUserDTO> listUser(
|
||||
NoticeReceiverSettingQueryDTO noticeReceiverSettingQueryDTO);
|
||||
|
||||
/**
|
||||
* 查询接收人配置-角色列表
|
||||
*
|
||||
* @param noticeReceiverSettingQueryDTO
|
||||
* @return
|
||||
* @author sr on 2021-01-07
|
||||
*/
|
||||
List<NoticeReceiverSettingRoleDTO> listRole(
|
||||
NoticeReceiverSettingQueryDTO noticeReceiverSettingQueryDTO);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.newyetai.usercenter.notice.service;
|
||||
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordDetailDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordDetailQueryDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordDetailReqDTO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 通知发送记录明细(接收人)
|
||||
*
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
public interface NoticeSendRecordDetailService {
|
||||
|
||||
/**
|
||||
* 查询
|
||||
*
|
||||
* @param noticeSendRecordDetailQueryDTO
|
||||
* @return
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
List<NoticeSendRecordDetailDTO> list(NoticeSendRecordDetailQueryDTO noticeSendRecordDetailQueryDTO);
|
||||
|
||||
/**
|
||||
* 消息明细
|
||||
*
|
||||
* @param reqDTO 通知发送记录详细查询dto
|
||||
* @return {@link NoticeSendRecordDetailDTO}
|
||||
*/
|
||||
NoticeSendRecordDetailDTO detail(NoticeSendRecordDetailReqDTO reqDTO);
|
||||
|
||||
/**
|
||||
* 消息数量
|
||||
*
|
||||
* @param noticeSendRecordDetailQueryDTO 通知发送记录详细查询dto
|
||||
* @return {@link Integer}
|
||||
*/
|
||||
Integer count(NoticeSendRecordDetailQueryDTO noticeSendRecordDetailQueryDTO);
|
||||
|
||||
void read(Long recordDetailId);
|
||||
|
||||
void readAll();
|
||||
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package com.newyetai.usercenter.notice.service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordQueryDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordOperateDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordDTO;
|
||||
|
||||
/**
|
||||
* 通知发送记录(内容模版级)
|
||||
*
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
public interface NoticeSendRecordService {
|
||||
|
||||
/**
|
||||
* 新增
|
||||
*
|
||||
* @param noticeSendRecordOperateDTO
|
||||
* @return
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
void create(NoticeSendRecordOperateDTO noticeSendRecordOperateDTO);
|
||||
|
||||
|
||||
/**
|
||||
* 查询
|
||||
*
|
||||
* @param noticeSendRecordQueryDTO
|
||||
* @return
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
List<NoticeSendRecordDTO> page(NoticeSendRecordQueryDTO noticeSendRecordQueryDTO);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
package com.newyetai.usercenter.notice.service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.newyetai.usercenter.notice.dto.NoticeTemplateDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeTemplateOperateDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeTemplateQueryDTO;
|
||||
|
||||
/**
|
||||
* 通知模版
|
||||
*
|
||||
* @author sr on 2020-12-17
|
||||
*/
|
||||
public interface NoticeTemplateService {
|
||||
|
||||
/**
|
||||
* 新增
|
||||
*
|
||||
* @param noticeTemplateOperateDTO
|
||||
* @return
|
||||
* @author sr on 2020-12-17
|
||||
*/
|
||||
Long create(NoticeTemplateOperateDTO noticeTemplateOperateDTO);
|
||||
|
||||
/**
|
||||
* 修改
|
||||
*
|
||||
* @param noticeTemplateOperateDTO
|
||||
* @author sr on 2020-12-17
|
||||
*/
|
||||
void modify(NoticeTemplateOperateDTO noticeTemplateOperateDTO);
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*
|
||||
* @param id
|
||||
* @author sr on 2020-12-17
|
||||
*/
|
||||
void remove(Long id);
|
||||
|
||||
/**
|
||||
* 查询
|
||||
*
|
||||
* @param noticeTemplateQueryDTO
|
||||
* @return
|
||||
* @author sr on 2020-12-17
|
||||
*/
|
||||
List<NoticeTemplateDTO> page(NoticeTemplateQueryDTO noticeTemplateQueryDTO);
|
||||
|
||||
/**
|
||||
* 校验模版
|
||||
*
|
||||
* @param templateId
|
||||
* @author sr on 2020-12-28
|
||||
*/
|
||||
void checkTemplate(Long templateId);
|
||||
|
||||
/**
|
||||
* @param id
|
||||
* @return
|
||||
* @author sr on 2021-02-01
|
||||
*/
|
||||
NoticeTemplateDTO find(Long id);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
package com.newyetai.usercenter.notice.service.impl;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import com.newyetai.common.exception.util.Assert;
|
||||
import com.newyetai.common.util.UserContextHolder;
|
||||
import com.newyetai.usercenter.notice.constant.NoticeChannelTypeEnum;
|
||||
import com.newyetai.usercenter.notice.dao.NoticeContentTemplateMapper;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeContentTemplateDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeContentTemplateOperateDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeContentTemplateQueryDTO;
|
||||
import com.newyetai.usercenter.notice.entity.NoticeContentTemplate;
|
||||
import com.newyetai.usercenter.notice.mapstruct.NoticeContentTemplateMapMapper;
|
||||
import com.newyetai.usercenter.notice.service.NoticeContentTemplateService;
|
||||
import com.newyetai.usercenter.notice.service.NoticeTemplateService;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
||||
public class NoticeContentTemplateServiceImpl implements NoticeContentTemplateService {
|
||||
|
||||
private final NoticeContentTemplateMapper noticeContentTemplateMapper;
|
||||
|
||||
private final NoticeTemplateService noticeTemplateService;
|
||||
|
||||
private void checkExist(Long templateId, Integer channelType) {
|
||||
boolean exists = noticeContentTemplateMapper.existsEntity(
|
||||
NoticeContentTemplate.builder().templateId(templateId).channelType(channelType).deleted(false).build());
|
||||
Assert.isTrue(!exists, "该模版消息通道类型已存在");
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public Long create(NoticeContentTemplateOperateDTO noticeContentTemplateOperateDTO) {
|
||||
Assert.isTrue(
|
||||
NoticeChannelTypeEnum.SITE.getType()
|
||||
.equals(noticeContentTemplateOperateDTO.getChannelType()),
|
||||
"暂只支持站内信配置");
|
||||
Long templateId = noticeContentTemplateOperateDTO.getTemplateId();
|
||||
// 校验模版是否有效
|
||||
noticeTemplateService.checkTemplate(templateId);
|
||||
this.checkExist(templateId,
|
||||
noticeContentTemplateOperateDTO.getChannelType());
|
||||
// 设置初始值
|
||||
if (noticeContentTemplateOperateDTO.getEnabled() == null) {
|
||||
noticeContentTemplateOperateDTO.setEnabled(true);
|
||||
}
|
||||
NoticeContentTemplate noticeContentTemplate =
|
||||
NoticeContentTemplateMapMapper.INSTANCE.toEntity(noticeContentTemplateOperateDTO);
|
||||
noticeContentTemplateMapper.saveEntity(noticeContentTemplate,
|
||||
UserContextHolder.getLoginUserId());
|
||||
return noticeContentTemplate.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void modify(NoticeContentTemplateOperateDTO noticeContentTemplateOperateDTO) {
|
||||
noticeContentTemplateMapper.updateEntitySelective(
|
||||
NoticeContentTemplate.builder().id(noticeContentTemplateOperateDTO.getId())
|
||||
.channelType(noticeContentTemplateOperateDTO.getChannelType())
|
||||
.title(noticeContentTemplateOperateDTO.getTitle())
|
||||
.contentTemplate(noticeContentTemplateOperateDTO.getContentTemplate())
|
||||
.enabled(noticeContentTemplateOperateDTO.getEnabled())
|
||||
.link(noticeContentTemplateOperateDTO.getLink())
|
||||
.build(),
|
||||
UserContextHolder.getLoginUserId());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void remove(Long id) {
|
||||
noticeContentTemplateMapper.deleteEntity(NoticeContentTemplate.builder().id(id).build(),
|
||||
UserContextHolder.getLoginUserId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<NoticeContentTemplateDTO> page(
|
||||
NoticeContentTemplateQueryDTO noticeContentTemplateQueryDTO) {
|
||||
return noticeContentTemplateMapper.listNoticeContentTemplateDTO(noticeContentTemplateQueryDTO);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,162 @@
|
||||
package com.newyetai.usercenter.notice.service.impl;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import com.google.common.collect.Sets;
|
||||
import com.newyetai.common.constant.CommonConstants;
|
||||
import com.newyetai.common.exception.BusinessException;
|
||||
import com.newyetai.common.exception.util.Assert;
|
||||
import com.newyetai.common.util.UserContextHolder;
|
||||
import com.newyetai.usercenter.notice.constant.NoticeLevelEnum;
|
||||
import com.newyetai.usercenter.notice.constant.NoticeReceiverTypeEnum;
|
||||
import com.newyetai.usercenter.notice.dao.NoticeReceiverSettingMapper;
|
||||
import com.newyetai.usercenter.notice.dao.NoticeTemplateMapper;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeReceiverSettingDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeReceiverSettingOperateDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeReceiverSettingQueryDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeReceiverSettingRemoveDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeReceiverSettingRoleDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeReceiverSettingUserDTO;
|
||||
import com.newyetai.usercenter.notice.entity.NoticeReceiverSetting;
|
||||
import com.newyetai.usercenter.notice.entity.NoticeTemplate;
|
||||
import com.newyetai.usercenter.notice.mapstruct.NoticeReceiverSettingMapMapper;
|
||||
import com.newyetai.usercenter.notice.service.NoticeReceiverSettingService;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
@Service
|
||||
public class NoticeReceiverSettingServiceImpl implements NoticeReceiverSettingService {
|
||||
|
||||
@Autowired
|
||||
private NoticeReceiverSettingMapper noticeReceiverSettingMapper;
|
||||
|
||||
@Autowired
|
||||
private NoticeTemplateMapper noticeTemplateMapper;
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void create(NoticeReceiverSettingOperateDTO noticeReceiverSettingOperateDTO) {
|
||||
this.save(noticeReceiverSettingOperateDTO, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void save(NoticeReceiverSettingOperateDTO noticeReceiverSettingOperateDTO) {
|
||||
this.save(noticeReceiverSettingOperateDTO, false);
|
||||
}
|
||||
|
||||
private void save(NoticeReceiverSettingOperateDTO noticeReceiverSettingOperateDTO, boolean created) {
|
||||
NoticeTemplate noticeTemplate =
|
||||
noticeTemplateMapper.getById(noticeReceiverSettingOperateDTO.getTemplateId());
|
||||
if (NoticeLevelEnum.PLATFORM.getType().equals(noticeTemplate.getLevel())
|
||||
&& !CommonConstants.PLATFORM_ORG_ID
|
||||
.equals(noticeReceiverSettingOperateDTO.getOperateOrgId())) {
|
||||
throw new BusinessException("该模版不支持机构设置");
|
||||
}
|
||||
// 校验传入接收人信息是否有效
|
||||
Long orgId = noticeReceiverSettingOperateDTO.getOperateOrgId();
|
||||
Integer receiverUnionType = noticeReceiverSettingOperateDTO.getReceiverUnionType();
|
||||
Set<Long> newReceiverUnionIds = noticeReceiverSettingOperateDTO.getReceiverUnionIds();
|
||||
if (NoticeReceiverTypeEnum.USER.getType().equals(receiverUnionType)) {
|
||||
Assert.isTrue(noticeReceiverSettingMapper.validUser(orgId, newReceiverUnionIds)
|
||||
.size() == newReceiverUnionIds.size(), "接收人关联无效");
|
||||
} else if (NoticeReceiverTypeEnum.ROLE.getType().equals(receiverUnionType)) {
|
||||
Assert.isTrue(noticeReceiverSettingMapper.validRole(orgId, newReceiverUnionIds)
|
||||
.size() == newReceiverUnionIds.size(), "接收人关联无效");
|
||||
}
|
||||
|
||||
// 查询当前机构现有templateId/receiverUnionType 配置
|
||||
Set<Long> currentReceiverUnionIds =
|
||||
noticeReceiverSettingMapper.findReceiverUnionIds(noticeReceiverSettingOperateDTO);
|
||||
|
||||
// 新增
|
||||
Set<Long> createReceiverUnionIds = Sets.newHashSet(newReceiverUnionIds);
|
||||
createReceiverUnionIds.removeAll(currentReceiverUnionIds);
|
||||
if (!createReceiverUnionIds.isEmpty()) {
|
||||
noticeReceiverSettingMapper.create(noticeReceiverSettingOperateDTO, createReceiverUnionIds);
|
||||
}
|
||||
// 新增不处理删除
|
||||
if (!created) {
|
||||
// 删除
|
||||
Set<Long> removeReceiverUnionIds = Sets.newHashSet(currentReceiverUnionIds);
|
||||
removeReceiverUnionIds.removeAll(newReceiverUnionIds);
|
||||
if (!removeReceiverUnionIds.isEmpty()) {
|
||||
NoticeReceiverSettingRemoveDTO removeDto =
|
||||
NoticeReceiverSettingMapMapper.INSTANCE.toRemoveDTO(noticeReceiverSettingOperateDTO);
|
||||
removeDto.setReceiverUnionIds(removeReceiverUnionIds);
|
||||
this.remove(removeDto);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void remove(Long id) {
|
||||
noticeReceiverSettingMapper.deleteEntity(NoticeReceiverSetting.builder().id(id).build(),
|
||||
UserContextHolder.getLoginUserId());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void remove(NoticeReceiverSettingRemoveDTO noticeReceiverSettingRemoveDTO) {
|
||||
// 只能删除当前登录人机构的配置;如需代机构删除配置请另外实现
|
||||
noticeReceiverSettingMapper.remove(noticeReceiverSettingRemoveDTO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<NoticeReceiverSettingDTO> list(
|
||||
NoticeReceiverSettingQueryDTO noticeReceiverSettingQueryDTO) {
|
||||
// 暂只支持查询当前机构
|
||||
noticeReceiverSettingQueryDTO.setOrgId(noticeReceiverSettingQueryDTO.getOperateOrgId());
|
||||
return noticeReceiverSettingMapper.listNoticeReceiverSettingDTO(noticeReceiverSettingQueryDTO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Long> getReceiverIds(Long templateId, Long receiverOrgId) {
|
||||
// 获取接收人配置
|
||||
List<NoticeReceiverSettingDTO> noticeReceiverSettingDTOs =
|
||||
noticeReceiverSettingMapper.listNoticeReceiverSettingDTO(NoticeReceiverSettingQueryDTO
|
||||
.builder().templateId(templateId).orgId(receiverOrgId).build());
|
||||
Map<Integer, Set<Long>> noticeReceiverSettingMap =
|
||||
noticeReceiverSettingDTOs.stream()
|
||||
.collect(Collectors.toMap(NoticeReceiverSettingDTO::getReceiverUnionType,
|
||||
dto -> Sets.newHashSet(dto.getReceiverUnionId()), (o, n) -> {
|
||||
o.addAll(n);
|
||||
return o;
|
||||
}, HashMap::new));
|
||||
// 根据接收人配置获取人id; orgId+unionType+unionIds
|
||||
Set<Long> userIds = Sets.newHashSet();
|
||||
noticeReceiverSettingMap.forEach((k, v) -> {
|
||||
if (NoticeReceiverTypeEnum.USER.getType().equals(k)) {
|
||||
userIds.addAll(v);
|
||||
} else {
|
||||
userIds
|
||||
.addAll(noticeReceiverSettingMapper.findUserIdByUnionType(receiverOrgId, k, v));
|
||||
}
|
||||
});
|
||||
return userIds;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<NoticeReceiverSettingUserDTO> listUser(
|
||||
NoticeReceiverSettingQueryDTO noticeReceiverSettingQueryDTO) {
|
||||
return noticeReceiverSettingMapper.listNoticeReceiverSettingUserDTO(noticeReceiverSettingQueryDTO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<NoticeReceiverSettingRoleDTO> listRole(
|
||||
NoticeReceiverSettingQueryDTO noticeReceiverSettingQueryDTO) {
|
||||
return noticeReceiverSettingMapper.listNoticeReceiverSettingRoleDTO(noticeReceiverSettingQueryDTO);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
package com.newyetai.usercenter.notice.service.impl;
|
||||
|
||||
import com.newyetai.common.exception.util.Assert;
|
||||
import com.newyetai.usercenter.notice.constant.NoticeChannelTypeEnum;
|
||||
import com.newyetai.usercenter.notice.dao.NoticeSendRecordDetailMapper;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordDetailDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordDetailQueryDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordDetailReqDTO;
|
||||
import com.newyetai.usercenter.notice.service.NoticeSendRecordDetailService;
|
||||
import com.newyetai.usercenter.notice.util.NoticeSendRecordDetailUtils;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
|
||||
public class NoticeSendRecordDetailServiceImpl implements NoticeSendRecordDetailService {
|
||||
|
||||
private final NoticeSendRecordDetailMapper noticeSendRecordDetailMapper;
|
||||
|
||||
@Override
|
||||
public NoticeSendRecordDetailDTO detail(NoticeSendRecordDetailReqDTO reqDTO) {
|
||||
return noticeSendRecordDetailMapper.findNoticeSendRecordDetailDTO(reqDTO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<NoticeSendRecordDetailDTO> list(
|
||||
NoticeSendRecordDetailQueryDTO noticeSendRecordDetailQueryDTO) {
|
||||
return noticeSendRecordDetailMapper
|
||||
.listNoticeSendRecordDetailDTO(noticeSendRecordDetailQueryDTO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer count(NoticeSendRecordDetailQueryDTO noticeSendRecordDetailQueryDTO) {
|
||||
noticeSendRecordDetailQueryDTO.setNeedPage(Boolean.FALSE);
|
||||
noticeSendRecordDetailQueryDTO.setPageSize(0);
|
||||
return noticeSendRecordDetailMapper
|
||||
.countNoticeSendRecordDetail(noticeSendRecordDetailQueryDTO);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void read(Long recordDetailId) {
|
||||
Assert.notNull(recordDetailId, "通知明细id不能为空");
|
||||
int modifyNum = noticeSendRecordDetailMapper
|
||||
.modifyStatus(NoticeSendRecordDetailUtils.buildRead(recordDetailId, NoticeChannelTypeEnum.SITE.getType()));
|
||||
Assert.isTrue(modifyNum > 0, "请勿重复读取,请检查数据或刷新数据");
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void readAll() {
|
||||
noticeSendRecordDetailMapper.modifyStatus(NoticeSendRecordDetailUtils.buildReadAll(NoticeChannelTypeEnum.SITE.getType()));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,181 @@
|
||||
package com.newyetai.usercenter.notice.service.impl;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.BooleanUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import com.newyetai.common.constant.CommonConstants;
|
||||
import com.newyetai.common.exception.util.Assert;
|
||||
import com.newyetai.common.util.BaseDtoUtils;
|
||||
import com.newyetai.common.util.JsonUtils;
|
||||
import com.newyetai.common.util.UserContextHolder;
|
||||
import com.newyetai.usercenter.notice.constant.NoticeLevelEnum;
|
||||
import com.newyetai.usercenter.notice.constant.NoticeReceiverStatusEnum;
|
||||
import com.newyetai.usercenter.notice.constant.NoticeSendStatusEnum;
|
||||
import com.newyetai.usercenter.notice.dao.NoticeContentTemplateMapper;
|
||||
import com.newyetai.usercenter.notice.dao.NoticeSendRecordDetailMapper;
|
||||
import com.newyetai.usercenter.notice.dao.NoticeSendRecordMapper;
|
||||
import com.newyetai.usercenter.notice.dao.NoticeTemplateMapper;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeContentTemplateDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeContentTemplateQueryDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordOperateDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordQueryDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeTemplateDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeTemplateQueryDTO;
|
||||
import com.newyetai.usercenter.notice.entity.NoticeSendRecord;
|
||||
import com.newyetai.usercenter.notice.entity.NoticeSendRecordDetail;
|
||||
import com.newyetai.usercenter.notice.mapstruct.NoticeSendRecordMapMapper;
|
||||
import com.newyetai.usercenter.notice.service.INoticeChannelProvider;
|
||||
import com.newyetai.usercenter.notice.service.NoticeReceiverSettingService;
|
||||
import com.newyetai.usercenter.notice.service.NoticeSendRecordService;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class NoticeSendRecordServiceImpl implements NoticeSendRecordService {
|
||||
|
||||
@Autowired
|
||||
private NoticeSendRecordMapper noticeSendRecordMapper;
|
||||
|
||||
@Autowired
|
||||
private NoticeTemplateMapper noticeTemplateMapper;
|
||||
|
||||
@Autowired
|
||||
private NoticeContentTemplateMapper noticeContentTemplateMapper;
|
||||
|
||||
@Autowired
|
||||
private NoticeReceiverSettingService noticeReceiverSettingService;
|
||||
|
||||
@Autowired
|
||||
private NoticeSendRecordDetailMapper noticeSendRecordDetailMapper;
|
||||
|
||||
private Map<Integer, INoticeChannelProvider> channelProviderMap;
|
||||
|
||||
@Autowired
|
||||
public void setChannelProviderMap(List<INoticeChannelProvider> channelProviders) {
|
||||
channelProviderMap =
|
||||
channelProviders.stream()
|
||||
.collect(Collectors.toMap(k -> k.getChannelType(), v -> v));
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void create(NoticeSendRecordOperateDTO noticeSendRecordOperateDTO) {
|
||||
// 克隆操作对象,清洗参数,替换流程中需要的正确的id等属性
|
||||
NoticeSendRecordOperateDTO tempOperateDto =
|
||||
NoticeSendRecordMapMapper.INSTANCE.clone(noticeSendRecordOperateDTO);
|
||||
Long templateId = noticeSendRecordOperateDTO.getTemplateId();
|
||||
String templateCode = noticeSendRecordOperateDTO.getTemplateCode();
|
||||
// 判断参数必填
|
||||
Assert.isTrue(templateId != null || StringUtils.isNotBlank(templateCode), "通知模版参数缺失");
|
||||
// 获取模版,级别-》机构id
|
||||
NoticeTemplateQueryDTO noticeTemplateQueryDTO =
|
||||
NoticeTemplateQueryDTO.builder().id(templateId).templateCode(templateCode).enabled(true)
|
||||
.build();
|
||||
noticeTemplateQueryDTO.setNeedPage(false);
|
||||
List<NoticeTemplateDTO> noticeTemplateDTOs =
|
||||
noticeTemplateMapper.listNoticeTemplateDTO(noticeTemplateQueryDTO);
|
||||
Assert.isTrue(!noticeTemplateDTOs.isEmpty(), "未找到对应通知模版");
|
||||
NoticeTemplateDTO noticeTemplateDTO = noticeTemplateDTOs.get(0);
|
||||
tempOperateDto.setTemplateId(noticeTemplateDTO.getId());
|
||||
// 平台模版指定接收人机构为平台
|
||||
Long receiverOrgId =
|
||||
NoticeLevelEnum.PLATFORM.getType().equals(noticeTemplateDTOs.get(0).getLevel())
|
||||
? CommonConstants.PLATFORM_ORG_ID
|
||||
: noticeSendRecordOperateDTO.getReceiverOrgId();
|
||||
if (receiverOrgId == null) {
|
||||
receiverOrgId = noticeSendRecordOperateDTO.getOperateOrgId();
|
||||
}
|
||||
tempOperateDto.setReceiverOrgId(receiverOrgId);
|
||||
|
||||
// 是否定制内容模版
|
||||
if (BooleanUtils.isTrue(noticeSendRecordOperateDTO.getCustomContent())) {
|
||||
Assert.isTrue(noticeSendRecordOperateDTO.getChannelType() != null, "定制内容模版,消息通道类型不能为空");
|
||||
dealByChannel(tempOperateDto,
|
||||
NoticeSendRecordMapMapper.INSTANCE.toContentTemplate(tempOperateDto));
|
||||
} else {
|
||||
// 获取内容模版, 未指定模版->获取所有内容模版
|
||||
List<NoticeContentTemplateDTO> noticeContentTemplateDTOs = noticeContentTemplateMapper
|
||||
.listNoticeContentTemplateDTO(NoticeContentTemplateQueryDTO.builder()
|
||||
.id(noticeSendRecordOperateDTO.getContentTemplateId())
|
||||
.templateId(tempOperateDto.getTemplateId())
|
||||
.channelType(noticeSendRecordOperateDTO.getChannelType()).enabled(true).build());
|
||||
Assert.isTrue(!noticeContentTemplateDTOs.isEmpty(), "未找到对应通知内容模版");
|
||||
noticeContentTemplateDTOs.forEach(
|
||||
noticeContentTemplateDTO -> dealByChannel(tempOperateDto,
|
||||
noticeContentTemplateDTO));
|
||||
}
|
||||
}
|
||||
|
||||
private void dealByChannel(NoticeSendRecordOperateDTO noticeSendRecordOperateDTO,
|
||||
NoticeContentTemplateDTO noticeContentTemplateDTO) {
|
||||
INoticeChannelProvider channelProvicer =
|
||||
channelProviderMap.get(noticeContentTemplateDTO.getChannelType());
|
||||
if (channelProvicer == null) {
|
||||
log.error("无对应消息通道处理...");
|
||||
}
|
||||
Set<Long> receiverUserIds = noticeSendRecordOperateDTO.getReceiverUserIds();
|
||||
NoticeSendRecordDTO noticeSendRecordDTO =
|
||||
NoticeSendRecordDTO.builder().templateId(noticeSendRecordOperateDTO.getTemplateId())
|
||||
.senderOrgId(noticeSendRecordOperateDTO.getOperateOrgId())
|
||||
.receiverOrgId(noticeSendRecordOperateDTO.getReceiverOrgId())
|
||||
.contentTemplateId(noticeContentTemplateDTO.getId())
|
||||
.contentParamData(
|
||||
JsonUtils.toJsonString(noticeSendRecordOperateDTO.getContentParamDataMap()))
|
||||
.appointed(CollectionUtils.isNotEmpty(receiverUserIds))
|
||||
.status(NoticeSendStatusEnum.INIT.getType())
|
||||
.channelType(noticeContentTemplateDTO.getChannelType())
|
||||
.title(noticeContentTemplateDTO.getTitle())
|
||||
.contentTemplate(noticeContentTemplateDTO.getContentTemplate())
|
||||
.link(noticeContentTemplateDTO.getLink()).build();
|
||||
|
||||
this.createDetail(noticeSendRecordDTO, receiverUserIds, NoticeReceiverStatusEnum.INIT.getType());
|
||||
// mq 触发消息通道真实处理流程
|
||||
channelProvicer.asyncDeal(noticeSendRecordDTO);
|
||||
|
||||
}
|
||||
|
||||
private void createDetail(NoticeSendRecordDTO noticeSendRecordDTO, Set<Long> receiverUserIds,
|
||||
Integer receiverStatus) {
|
||||
NoticeSendRecord noticeSendRecord =
|
||||
NoticeSendRecordMapMapper.INSTANCE.toEntity(noticeSendRecordDTO);
|
||||
noticeSendRecordMapper.saveEntity(noticeSendRecord,
|
||||
UserContextHolder.getLoginUserId());
|
||||
BaseDtoUtils.createCopy(noticeSendRecord, noticeSendRecordDTO);
|
||||
// TODO 根据channel获取接收人相关帐号List<NoticeSendRecordDetailOperateDTO> noticeSendRecordDetailOperateDTOs
|
||||
if (CollectionUtils.isEmpty(receiverUserIds)) {
|
||||
receiverUserIds =
|
||||
noticeReceiverSettingService.getReceiverIds(noticeSendRecordDTO.getTemplateId(),
|
||||
noticeSendRecordDTO.getReceiverOrgId());
|
||||
}
|
||||
// 插入发送记录明细;占位符替换内容模版内容
|
||||
Long recordId = noticeSendRecord.getId();
|
||||
List<NoticeSendRecordDetail> noticeSendRecordDetails = receiverUserIds.stream()
|
||||
.map(userId -> NoticeSendRecordDetail.builder().recordId(recordId).userId(userId)
|
||||
.receiverStatus(receiverStatus).build())
|
||||
.collect(Collectors.toList());
|
||||
noticeSendRecordDetailMapper.saveEntites(noticeSendRecordDetails,
|
||||
UserContextHolder.getLoginUserId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<NoticeSendRecordDTO> page(NoticeSendRecordQueryDTO noticeSendRecordQueryDTO) {
|
||||
// 暂只支持查询当前机构
|
||||
noticeSendRecordQueryDTO.setSenderOrgId(noticeSendRecordQueryDTO.getOperateOrgId());
|
||||
return noticeSendRecordMapper.listNoticeSendRecordDTO(noticeSendRecordQueryDTO);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
package com.newyetai.usercenter.notice.service.impl;
|
||||
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import com.newyetai.common.constant.CommonConstants;
|
||||
import com.newyetai.common.exception.util.Assert;
|
||||
import com.newyetai.common.util.UserContextHolder;
|
||||
import com.newyetai.usercenter.notice.constant.NoticeLevelEnum;
|
||||
import com.newyetai.usercenter.notice.dao.NoticeTemplateMapper;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeTemplateDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeTemplateOperateDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeTemplateQueryDTO;
|
||||
import com.newyetai.usercenter.notice.entity.NoticeTemplate;
|
||||
import com.newyetai.usercenter.notice.mapstruct.NoticeTemplateMapMapper;
|
||||
import com.newyetai.usercenter.notice.service.NoticeTemplateService;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-17
|
||||
*/
|
||||
@Service
|
||||
public class NoticeTemplateServiceImpl implements NoticeTemplateService {
|
||||
|
||||
@Autowired
|
||||
private NoticeTemplateMapper noticeTemplateMapper;
|
||||
|
||||
private void exist(NoticeTemplateOperateDTO noticeTemplateOperateDTO) {
|
||||
// templateCode 验重
|
||||
boolean exists = noticeTemplateMapper.existsEntity(
|
||||
NoticeTemplate.builder().id(noticeTemplateOperateDTO.getId())
|
||||
.templateCode(noticeTemplateOperateDTO.getTemplateCode()).build());
|
||||
Assert.isTrue(!exists, "模版标识已存在");
|
||||
Assert.isTrue(
|
||||
NoticeLevelEnum.ORG.getType().equals(noticeTemplateOperateDTO.getLevel())
|
||||
|| CommonConstants.PLATFORM_ORG_ID.equals(noticeTemplateOperateDTO.getOperateOrgId()),
|
||||
"不支持机构设置该级别模版");
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public Long create(NoticeTemplateOperateDTO noticeTemplateOperateDTO) {
|
||||
this.exist(noticeTemplateOperateDTO);
|
||||
// 设置初始值
|
||||
if (noticeTemplateOperateDTO.getEnabled() == null) {
|
||||
noticeTemplateOperateDTO.setEnabled(true);
|
||||
}
|
||||
NoticeTemplate noticeTemplate =
|
||||
NoticeTemplateMapMapper.INSTANCE.toEntity(noticeTemplateOperateDTO);
|
||||
noticeTemplateMapper.saveEntity(noticeTemplate, UserContextHolder.getLoginUserId());
|
||||
return noticeTemplate.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void modify(NoticeTemplateOperateDTO noticeTemplateOperateDTO) {
|
||||
this.exist(noticeTemplateOperateDTO);
|
||||
NoticeTemplate noticeTemplate =
|
||||
NoticeTemplateMapMapper.INSTANCE.toEntity(noticeTemplateOperateDTO);
|
||||
noticeTemplateMapper.updateEntitySelective(noticeTemplate, UserContextHolder.getLoginUserId());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void remove(Long id) {
|
||||
noticeTemplateMapper.deleteEntity(NoticeTemplate.builder().id(id).build(),
|
||||
UserContextHolder.getLoginUserId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<NoticeTemplateDTO> page(NoticeTemplateQueryDTO noticeTemplateQueryDTO) {
|
||||
return noticeTemplateMapper.listNoticeTemplateDTO(noticeTemplateQueryDTO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkTemplate(Long templateId) {
|
||||
NoticeTemplate noticeTemplate = noticeTemplateMapper.getById(templateId);
|
||||
Assert.isTrue(noticeTemplate != null, "未找到对应通知模版");
|
||||
Assert.isTrue(noticeTemplate.getEnabled(), "该通知模版无法操作");
|
||||
}
|
||||
|
||||
@Override
|
||||
public NoticeTemplateDTO find(Long id) {
|
||||
Assert.notNull(id, "id为空");
|
||||
List<NoticeTemplateDTO> templateDtos =
|
||||
noticeTemplateMapper.listNoticeTemplateDTO(NoticeTemplateQueryDTO.builder().id(id).build());
|
||||
Assert.isTrue(!templateDtos.isEmpty(), "未找到对应模版");
|
||||
return templateDtos.get(0);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
package com.newyetai.usercenter.notice.service.provider;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.commons.lang3.exception.ExceptionUtils;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import com.google.common.collect.Sets;
|
||||
import com.newyetai.common.AlitaResult;
|
||||
import com.newyetai.common.exception.util.Assert;
|
||||
import com.newyetai.common.util.JsonUtils;
|
||||
import com.newyetai.usercenter.notice.constant.NoticeReceiverStatusEnum;
|
||||
import com.newyetai.usercenter.notice.constant.NoticeSendStatusEnum;
|
||||
import com.newyetai.usercenter.notice.dao.NoticeSendRecordDetailMapper;
|
||||
import com.newyetai.usercenter.notice.dao.NoticeSendRecordMapper;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordDetailDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordDetailQueryDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordModifyDTO;
|
||||
import com.newyetai.usercenter.notice.service.INoticeChannelProvider;
|
||||
import com.newyetai.usercenter.notice.util.NoticeSendRecordDetailUtils;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
/**
|
||||
* 通知处理抽象类
|
||||
*
|
||||
* @author sr on 2021-02-19
|
||||
*/
|
||||
@Slf4j
|
||||
public abstract class AbstractNoticeChannelProvider implements INoticeChannelProvider {
|
||||
|
||||
private NoticeSendRecordMapper noticeSendRecordMapper;
|
||||
|
||||
private NoticeSendRecordDetailMapper noticeSendRecordDetailMapper;
|
||||
|
||||
public AbstractNoticeChannelProvider(NoticeSendRecordMapper noticeSendRecordMapper,
|
||||
NoticeSendRecordDetailMapper noticeSendRecordDetailMapper) {
|
||||
this.noticeSendRecordMapper = noticeSendRecordMapper;
|
||||
this.noticeSendRecordDetailMapper = noticeSendRecordDetailMapper;
|
||||
}
|
||||
|
||||
public void beforeSendDetails(NoticeSendRecordDTO noticeSendRecordDTO) {}
|
||||
|
||||
/**
|
||||
* 处理发送记录下所有明细
|
||||
* @param noticeSendRecordDTO
|
||||
* @author sr on 2021-02-19
|
||||
*/
|
||||
public void sendDetails(NoticeSendRecordDTO noticeSendRecordDTO) {
|
||||
NoticeSendRecordDetailQueryDTO noticeSendRecordDetailQueryDTO =
|
||||
NoticeSendRecordDetailQueryDTO.builder().recordId(noticeSendRecordDTO.getId())
|
||||
.receiverStatus(NoticeReceiverStatusEnum.INIT.getType()).build();
|
||||
List<NoticeSendRecordDetailDTO> recordDetails =
|
||||
noticeSendRecordDetailMapper
|
||||
.listNoticeSendRecordDetailDTO(noticeSendRecordDetailQueryDTO);
|
||||
if (recordDetails.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
Set<Long> sucRecordDetailIds = Sets.newHashSetWithExpectedSize(recordDetails.size());
|
||||
Set<Long> errRecordDetailIds = Sets.newHashSetWithExpectedSize(recordDetails.size());
|
||||
recordDetails.forEach(detail -> {
|
||||
AlitaResult<?> invokeResult = null;
|
||||
try {
|
||||
invokeResult = this.invoke(noticeSendRecordDTO, detail);
|
||||
} catch (Exception e) {
|
||||
invokeResult = AlitaResult.bizError(ExceptionUtils.getStackTrace(e));
|
||||
}
|
||||
if (invokeResult.getSuccess()) {
|
||||
sucRecordDetailIds.add(detail.getId());
|
||||
} else {
|
||||
errRecordDetailIds.add(detail.getId());
|
||||
log.error("notice sendDetail, id-{} error:{}", detail.getId(), invokeResult.getMsg());
|
||||
}
|
||||
});
|
||||
// 更新状态
|
||||
if (!sucRecordDetailIds.isEmpty()) {
|
||||
noticeSendRecordDetailMapper.modifyStatus(NoticeSendRecordDetailUtils.buildSend(
|
||||
sucRecordDetailIds, getChannelType(), NoticeReceiverStatusEnum.SENT.getType()));
|
||||
}
|
||||
if (!errRecordDetailIds.isEmpty()) {
|
||||
noticeSendRecordDetailMapper.modifyStatus(NoticeSendRecordDetailUtils.buildSend(
|
||||
errRecordDetailIds, getChannelType(), NoticeReceiverStatusEnum.SEND_FAIL.getType()));
|
||||
}
|
||||
}
|
||||
|
||||
public void afterSendDetails(NoticeSendRecordDTO noticeSendRecordDTO) {}
|
||||
|
||||
|
||||
/**
|
||||
* 单个明细真实发送处理
|
||||
* @param noticeSendRecordDTO
|
||||
* @param noticeSendRecordDetailDTO
|
||||
* @return
|
||||
* @author sr on 2021-02-19
|
||||
*/
|
||||
public AlitaResult<?> invoke(NoticeSendRecordDTO noticeSendRecordDTO,
|
||||
NoticeSendRecordDetailDTO noticeSendRecordDetailDTO) {
|
||||
return AlitaResult.bizError("未实现单个明细实际调用");
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Transactional
|
||||
public void send(NoticeSendRecordDTO noticeSendRecordDTO) {
|
||||
// 组装消息体
|
||||
String contentTemplate = noticeSendRecordDTO.getContentTemplate();
|
||||
String content = this.format(contentTemplate,
|
||||
JsonUtils.toObject(noticeSendRecordDTO.getContentParamData(), Map.class));
|
||||
noticeSendRecordDTO.setContent(content);
|
||||
int updateNum = noticeSendRecordMapper
|
||||
.modify(NoticeSendRecordModifyDTO.builder().id(noticeSendRecordDTO.getId())
|
||||
.oldStatus(NoticeSendStatusEnum.INIT.getType())
|
||||
.newStatus(NoticeSendStatusEnum.SENT.getType())
|
||||
.content(content).build());
|
||||
Assert.isTrue(updateNum > 0, "当前通知发送记录无法操作");
|
||||
beforeSendDetails(noticeSendRecordDTO);
|
||||
this.sendDetails(noticeSendRecordDTO);
|
||||
afterSendDetails(noticeSendRecordDTO);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.newyetai.usercenter.notice.service.provider;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.newyetai.common.AlitaResult;
|
||||
import com.newyetai.mq.producer.sender.IMqSender;
|
||||
import com.newyetai.mq.util.MqSendUtils;
|
||||
import com.newyetai.usercenter.notice.constant.NoticeChannelTypeEnum;
|
||||
import com.newyetai.usercenter.notice.dao.NoticeSendRecordDetailMapper;
|
||||
import com.newyetai.usercenter.notice.dao.NoticeSendRecordMapper;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordDetailDTO;
|
||||
|
||||
/**
|
||||
* 站内信
|
||||
*
|
||||
* @author sr on 2021-01-04
|
||||
*/
|
||||
@Service
|
||||
public class SiteNoticeChannelProvider extends AbstractNoticeChannelProvider {
|
||||
|
||||
public SiteNoticeChannelProvider(NoticeSendRecordMapper noticeSendRecordMapper,
|
||||
NoticeSendRecordDetailMapper noticeSendRecordDetailMapper) {
|
||||
super(noticeSendRecordMapper, noticeSendRecordDetailMapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getChannelType() {
|
||||
return NoticeChannelTypeEnum.SITE.getType();
|
||||
}
|
||||
|
||||
public AlitaResult<?> invoke(NoticeSendRecordDTO noticeSendRecordDTO,
|
||||
NoticeSendRecordDetailDTO noticeSendRecordDetailDTO) {
|
||||
/* TODO mq实现通知各系统(websocket)
|
||||
AlitaResult<?> mqResult = MqSendUtils.send(UcMqConstants.ROUTING_KEY_SITE_NOTICE, detail);
|
||||
Long detailId = detail.getId();
|
||||
if (mqResult.getSuccess()) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}*/
|
||||
return noticeSendRecordDTO.getContent() != null ? AlitaResult.success()
|
||||
: AlitaResult.bizError("消息内容为空,模版替换失败");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
package com.newyetai.usercenter.notice.service.provider;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.newyetai.common.AlitaResult;
|
||||
import com.newyetai.common.exception.util.Assert;
|
||||
import com.newyetai.sdk.wechat.WechatClient;
|
||||
import com.newyetai.sdk.wechat.model.KeyData;
|
||||
import com.newyetai.sdk.wechat.model.TemplateMessageReq;
|
||||
import com.newyetai.sdk.wechat.util.MessageParamUtils;
|
||||
import com.newyetai.usercenter.auth.constant.AuthTypeEnum;
|
||||
import com.newyetai.usercenter.auth.dto.AuthClientQueryDTO;
|
||||
import com.newyetai.usercenter.auth.dto.AuthDetailDTO;
|
||||
import com.newyetai.usercenter.auth.dto.AuthDetailQueryDTO;
|
||||
import com.newyetai.usercenter.auth.service.AuthDetailService;
|
||||
import com.newyetai.usercenter.auth.util.AuthClientUtils;
|
||||
import com.newyetai.usercenter.notice.constant.NoticeChannelTypeEnum;
|
||||
import com.newyetai.usercenter.notice.dao.NoticeSendRecordDetailMapper;
|
||||
import com.newyetai.usercenter.notice.dao.NoticeSendRecordMapper;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordDTO;
|
||||
import com.newyetai.usercenter.notice.dto.NoticeSendRecordDetailDTO;
|
||||
|
||||
/**
|
||||
* 微信公众号模版消息发送
|
||||
* @author sr on 2021-02-19
|
||||
*/
|
||||
@Service
|
||||
public class WechatOffiaccountNoticeChannelProvider extends AbstractNoticeChannelProvider {
|
||||
|
||||
@Autowired
|
||||
private AuthDetailService authDetailService;
|
||||
|
||||
/** 缓存微信公众号模版参数 recordId:templateData **/
|
||||
private Map<Long, Map<String, KeyData>> recordTemplateData =
|
||||
new ConcurrentHashMap<Long, Map<String, KeyData>>(200);
|
||||
|
||||
public WechatOffiaccountNoticeChannelProvider(NoticeSendRecordMapper noticeSendRecordMapper,
|
||||
NoticeSendRecordDetailMapper noticeSendRecordDetailMapper) {
|
||||
super(noticeSendRecordMapper, noticeSendRecordDetailMapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getChannelType() {
|
||||
return NoticeChannelTypeEnum.WECHAT_OFFIACCOUNT.getType();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String format(String contentTemplate, Map<String, Object> contentParamDataMap) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beforeSendDetails(NoticeSendRecordDTO noticeSendRecordDTO) {
|
||||
Long recordId = noticeSendRecordDTO.getId();
|
||||
Map<String, KeyData> templateData = recordTemplateData.get(recordId);
|
||||
if (templateData == null) {
|
||||
templateData =
|
||||
MessageParamUtils.dealData(noticeSendRecordDTO.getContentParamDataMap());
|
||||
recordTemplateData.put(recordId, templateData);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public AlitaResult<?> invoke(NoticeSendRecordDTO noticeSendRecordDTO,
|
||||
NoticeSendRecordDetailDTO noticeSendRecordDetailDTO) {
|
||||
|
||||
Long userId = noticeSendRecordDetailDTO.getUserId();
|
||||
Assert.isTrue(userId != null, "用户id为空");
|
||||
// 查询微信授权信息
|
||||
List<AuthDetailDTO> authDetailDTOs = authDetailService.list(AuthDetailQueryDTO.builder()
|
||||
.authTypeCode(AuthTypeEnum.WECHAT.getCode()).userId(userId).build());
|
||||
Assert.isTrue(!authDetailDTOs.isEmpty(), "未找到用户微信授权信息");
|
||||
AuthDetailDTO authDetailDTO = authDetailDTOs.get(0);
|
||||
String openId = authDetailDTO.getOpenId();
|
||||
// 发送公众号
|
||||
String token = AuthClientUtils
|
||||
.getService().getAccessToken(AuthClientQueryDTO.builder().id(authDetailDTO.getAuthClientId()).build());
|
||||
TemplateMessageReq templateMessageRequestParam =
|
||||
TemplateMessageReq.builder().accessToken(
|
||||
token)
|
||||
.toUser(openId)
|
||||
.templateId(noticeSendRecordDTO.getContentTemplate())
|
||||
.data(recordTemplateData.get(noticeSendRecordDTO.getId()))
|
||||
.url(noticeSendRecordDTO.getLink()).build();
|
||||
return WechatClient.sendTemplateMessage(templateMessageRequestParam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterSendDetails(NoticeSendRecordDTO noticeSendRecordDTO) {
|
||||
recordTemplateData.remove(noticeSendRecordDTO.getId());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.newyetai.usercenter.notice.util;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import com.newyetai.usercenter.notice.constant.NoticeReceiverStatusEnum;
|
||||
import com.newyetai.usercenter.notice.dto.RecordDetailUpdateStatusDTO;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
public class NoticeSendRecordDetailUtils {
|
||||
|
||||
public static RecordDetailUpdateStatusDTO buildRead(Long recordDetailId, Integer channelType) {
|
||||
RecordDetailUpdateStatusDTO recordDetailUpdateStatusDTO = buildReadAll(channelType);
|
||||
recordDetailUpdateStatusDTO.setRecordDetailId(recordDetailId);
|
||||
return recordDetailUpdateStatusDTO;
|
||||
}
|
||||
|
||||
public static RecordDetailUpdateStatusDTO buildReadAll(Integer channelType) {
|
||||
return RecordDetailUpdateStatusDTO.builder().channelType(channelType)
|
||||
.oldStatus(NoticeReceiverStatusEnum.SENT.getType())
|
||||
.newStatus(NoticeReceiverStatusEnum.READ.getType()).build();
|
||||
}
|
||||
|
||||
public static RecordDetailUpdateStatusDTO buildSend(Set<Long> recordDetailIds, Integer channelType,
|
||||
Integer sendStatus) {
|
||||
return RecordDetailUpdateStatusDTO.builder()
|
||||
.channelType(channelType)
|
||||
.oldStatus(NoticeReceiverStatusEnum.INIT.getType())
|
||||
.newStatus(sendStatus)
|
||||
.recordDetailIds(recordDetailIds).build();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.newyetai.usercenter.notice.util;
|
||||
|
||||
import com.newyetai.common.constant.CommonConstants;
|
||||
import com.newyetai.usercenter.userprod.constant.UcMqSelfConstants;
|
||||
|
||||
/**
|
||||
* @author sr on 2020-12-20
|
||||
*/
|
||||
public class NoticeSendRecordUtils {
|
||||
|
||||
/**
|
||||
* 根据消息通道获取通道处理mq的routingKey
|
||||
*
|
||||
* @param channelType
|
||||
* @return
|
||||
* @author sr on 2021-02-04
|
||||
*/
|
||||
public static String getNoticeChannelDealKey(Integer channelType) {
|
||||
return String.join(CommonConstants.UNDERLINE,
|
||||
UcMqSelfConstants.ROUTING_KEY_NOTICE_CHANNEL_DEAL_PREFIX, channelType.toString());
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user