Browse Source

防疫通知

dev
zhaoqifeng 3 years ago
parent
commit
e831d56eb0
  1. 4
      epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/constant/UserMessageTypeConstant.java
  2. 17
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/IcNoticeDTO.java
  3. 63
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/SendNoticeFormDTO.java
  4. 14
      epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcNoticeController.java
  5. 12
      epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcNoticeEntity.java
  6. 20
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcNoticeService.java
  7. 108
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcNoticeServiceImpl.java

4
epmet-module/epmet-message/epmet-message-client/src/main/java/com/epmet/constant/UserMessageTypeConstant.java

@ -164,6 +164,10 @@ public interface UserMessageTypeConstant {
*/
String PROJECT_REMIND="project_remind";
/**
* 防疫通知
*/
String ANTIEPIDEMIC="antiepidemic";
/**

17
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/IcNoticeDTO.java

@ -1,8 +1,11 @@
package com.epmet.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
import java.util.List;
/**
@ -30,12 +33,21 @@ public class IcNoticeDTO implements Serializable {
* 通知渠道 0小程序通知1短信通知
*/
private String channel;
private List<String> channelList;
/**
* 通知来源 0行程上报1疫苗接种2核酸检测
*/
private String origin;
/**
* 用户ID
*/
private String userId;
/**
* 手机号
*/
private String mobile;
/**
* 被通知人身份证号
*/
@ -69,6 +81,7 @@ public class IcNoticeDTO implements Serializable {
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
private Date createdTime;
/**

63
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/SendNoticeFormDTO.java

@ -0,0 +1,63 @@
package com.epmet.dto.form;
import com.epmet.commons.tools.validator.group.DefaultGroup;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;
/**
* @Description
* @Author zhaoqifeng
* @Date 2022/3/28 14:14
*/
@NoArgsConstructor
@Data
public class SendNoticeFormDTO implements Serializable {
private static final long serialVersionUID = 4800907725063604885L;
private String customerId;
/**
* 用户列表
*/
@NotNull(message = "用户列表不能为空", groups = DefaultGroup.class)
private List<UserListBean> userList;
/**
* 通知渠道通知渠道 0小程序通知1短信通知
*/
@NotNull(message = "通知渠道不能为空", groups = DefaultGroup.class)
private List<String> channel;
/**
* 通知来源 0 行程上报1 疫苗接种2 核酸检测
*/
@NotNull(message = "通知来源不能为空", groups = DefaultGroup.class)
private String origin;
/**
* 通知内容
*/
@NotNull(message = "通知内容不能为空", groups = DefaultGroup.class)
private String content;
/**
* 组织名
*/
@NotNull(message = "组织名不能为空", groups = DefaultGroup.class)
private String orgName;
@NoArgsConstructor
@Data
public static class UserListBean {
/**
* 用户ID
*/
private String userId;
/**
* 手机号
*/
private String mobile;
/**
* 身份证
*/
private String idCard;
}
}

14
epmet-user/epmet-user-server/src/main/java/com/epmet/controller/IcNoticeController.java

@ -1,19 +1,21 @@
package com.epmet.controller;
import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.aop.NoRepeatSubmit;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.AssertUtils;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.commons.tools.validator.group.AddGroup;
import com.epmet.commons.tools.validator.group.UpdateGroup;
import com.epmet.commons.tools.validator.group.DefaultGroup;
import com.epmet.commons.tools.validator.group.UpdateGroup;
import com.epmet.dto.IcNoticeDTO;
import com.epmet.dto.form.SendNoticeFormDTO;
import com.epmet.service.IcNoticeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
@ -68,6 +70,12 @@ public class IcNoticeController {
return new Result();
}
@PostMapping("sendNotice")
public Result sendNotice(@LoginUser TokenDto tokenDto, @RequestBody SendNoticeFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, DefaultGroup.class);
formDTO.setCustomerId(tokenDto.getCustomerId());
icNoticeService.sendNotice(formDTO);
return new Result();
}
}

12
epmet-user/epmet-user-server/src/main/java/com/epmet/entity/IcNoticeEntity.java

@ -1,13 +1,10 @@
package com.epmet.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.epmet.commons.mybatis.entity.BaseEpmetEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
* 防疫通知
*
@ -36,6 +33,15 @@ public class IcNoticeEntity extends BaseEpmetEntity {
*/
private String origin;
/**
* 用户ID
*/
private String userId;
/**
* 手机号
*/
private String mobile;
/**
* 被通知人身份证号
*/

20
epmet-user/epmet-user-server/src/main/java/com/epmet/service/IcNoticeService.java

@ -3,6 +3,7 @@ package com.epmet.service;
import com.epmet.commons.mybatis.service.BaseService;
import com.epmet.commons.tools.page.PageData;
import com.epmet.dto.IcNoticeDTO;
import com.epmet.dto.form.SendNoticeFormDTO;
import com.epmet.entity.IcNoticeEntity;
import java.util.List;
@ -75,4 +76,23 @@ public interface IcNoticeService extends BaseService<IcNoticeEntity> {
* @date 2022-03-28
*/
void delete(String[] ids);
/**
* 发送通知
*
* @Param formDTO
* @Return
* @Author zhaoqifeng
* @Date 2022/3/28 14:19
*/
void sendNotice(SendNoticeFormDTO formDTO);
/**
* 获取人员最新一条通知
* @Param idCard
* @Return {@link IcNoticeDTO}
* @Author zhaoqifeng
* @Date 2022/3/28 15:43
*/
IcNoticeDTO getNotice(String customerId, String idCard);
}

108
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcNoticeServiceImpl.java

@ -1,23 +1,36 @@
package com.epmet.service.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.*;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.utils.Result;
import com.epmet.constant.SmsTemplateConstant;
import com.epmet.constant.UserMessageTypeConstant;
import com.epmet.dao.IcNoticeDao;
import com.epmet.dto.IcNoticeDTO;
import com.epmet.dto.form.ProjectSendMsgFormDTO;
import com.epmet.dto.form.SendNoticeFormDTO;
import com.epmet.dto.form.UserMessageFormDTO;
import com.epmet.entity.IcNoticeEntity;
import com.epmet.feign.MessageFeignClient;
import com.epmet.service.IcNoticeService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
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 javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 防疫通知
@ -25,9 +38,13 @@ import java.util.Map;
* @author generator generator@elink-cn.com
* @since v1.0.0 2022-03-28
*/
@Slf4j
@Service
public class IcNoticeServiceImpl extends BaseServiceImpl<IcNoticeDao, IcNoticeEntity> implements IcNoticeService {
@Resource
private MessageFeignClient messageFeignClient;
@Override
public PageData<IcNoticeDTO> page(Map<String, Object> params) {
IPage<IcNoticeEntity> page = baseDao.selectPage(
@ -80,4 +97,91 @@ public class IcNoticeServiceImpl extends BaseServiceImpl<IcNoticeDao, IcNoticeEn
baseDao.deleteBatchIds(Arrays.asList(ids));
}
/**
* 发送通知
*
* @param formDTO
* @Param formDTO
* @Return
* @Author zhaoqifeng
* @Date 2022/3/28 14:19
*/
@Override
public void sendNotice(SendNoticeFormDTO formDTO) {
//保存消息
String channel = StringUtils.join(formDTO.getChannel(), StrConstant.COMMA);
List<IcNoticeEntity> entityList = formDTO.getUserList().stream().map(item -> {
IcNoticeEntity entity = new IcNoticeEntity();
entity.setCustomerId(formDTO.getCustomerId());
entity.setChannel(channel);
entity.setContent(formDTO.getContent());
entity.setOrigin(entity.getOrigin());
entity.setUserId(item.getUserId());
entity.setMobile(entity.getMobile());
entity.setIdCard(item.getIdCard());
entity.setOrgName(formDTO.getOrgName());
return entity;
}).collect(Collectors.toList());
insertBatch(entityList);
//通知
List<UserMessageFormDTO> msgList = new ArrayList<>();
//短信消息
List<ProjectSendMsgFormDTO> smsList = new ArrayList<>();
entityList.forEach(item -> {
if (StringUtils.isNotBlank(item.getUserId())) {
UserMessageFormDTO messageFormDTO = new UserMessageFormDTO();
messageFormDTO.setCustomerId(item.getCustomerId());
messageFormDTO.setApp(AppClientConstant.APP_GOV);
messageFormDTO.setGridId(StrConstant.STAR);
messageFormDTO.setUserId(item.getUserId());
messageFormDTO.setTitle("您有一条通知消息!");
messageFormDTO.setMessageContent(item.getContent());
messageFormDTO.setReadFlag(Constant.UNREAD);
messageFormDTO.setMessageType(UserMessageTypeConstant.ANTIEPIDEMIC);
messageFormDTO.setTargetId(item.getId());
msgList.add(messageFormDTO);
}
//TODO
if (StringUtils.isNotBlank(item.getMobile())) {
ProjectSendMsgFormDTO sms = new ProjectSendMsgFormDTO();
sms.setCustomerId(item.getCustomerId());
sms.setMobile(item.getMobile());
sms.setAliyunTemplateCode(SmsTemplateConstant.PROJECT_OVERDUE);
sms.setParameterKey("send_msg");
smsList.add(sms);
}
});
Result result = messageFeignClient.saveUserMessageList(msgList);
if (!result.success()) {
log.error("发送小程序消息失败" + JSON.toJSONString(result));
}
}
/**
* 获取人员最新一条通知
*
* @param idCard
* @Param idCard
* @Return {@link IcNoticeDTO}
* @Author zhaoqifeng
* @Date 2022/3/28 15:43
*/
@Override
public IcNoticeDTO getNotice(String customerId, String idCard) {
IcNoticeDTO result = new IcNoticeDTO();
LambdaQueryWrapper<IcNoticeEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(IcNoticeEntity::getCustomerId, customerId);
wrapper.eq(IcNoticeEntity::getIdCard, idCard);
wrapper.orderByDesc(IcNoticeEntity::getCreatedTime);
List<IcNoticeEntity> list = baseDao.selectList(wrapper);
if (CollectionUtils.isNotEmpty(list)) {
result = ConvertUtils.sourceToTarget(list.get(NumConstant.ZERO), IcNoticeDTO.class);
result.setChannelList(Arrays.asList(result.getChannel().split(StrConstant.COMMA)));
}
return result;
}
}
Loading…
Cancel
Save