提交 badc3294 authored 作者: 杨凯's avatar 杨凯

feat:家庭医生初始化

上级 253ca35f
package com.ebaiyihui.family.doctor.common.dto;
import lombok.Data;
/**
* @ClassName: AbnormalDataDTO
* @Author:yanliang
* @Date:2024/3/20 14:00
* @Description
*/
@Data
public class AbnormalDataDTO extends ThirdPushDTO{
private String abnormalId;
private String phone;
}
package com.ebaiyihui.family.doctor.common.dto;
import lombok.Data;
/**
* @ClassName: FollowUpOrderDTO
* @Author:yanliang
* @Date:2024/3/20 14:22
* @Description
*/
@Data
public class FollowUpOrderDTO extends ThirdPushDTO {
private String phone;
private String orderId;
private String doctorId;
private String consultOrderNo;
}
package com.ebaiyihui.family.doctor.common.dto;
import lombok.Data;
/**
* @ClassName: HealthSchStatusDTO
* @Author:yanliang
* @Date:2024/3/20 14:06
* @Description
*/
@Data
public class HealthInfoDTO extends ThirdPushDTO {
private String phone;
}
package com.ebaiyihui.family.doctor.common.dto;
import lombok.Data;
/**
* @ClassName: UserInfoDTO
* @Author:yanliang
* @Date:2024/3/20 14:25
* @Description
*/
@Data
public class UserInfoDTO extends ThirdPushDTO {
private String phone;
}
......@@ -84,6 +84,11 @@
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<!--swagger接口文档-->
<dependency>
<groupId>io.springfox</groupId>
......
......@@ -29,5 +29,40 @@ public class UrlConstants {
/**
* 修改签约信息
*/
public static final String UPDATE_SIGNED_ORDER_URL = "auth/v1.0.1/signature/changeSign";
public static final String UPDATE_SIGNED_ORDER_URL = "/auth/v1.0.1/signature/changeSign";
/**
* 获取异常数据
*/
public static final String ABNORMAL_DATA_URL = "/auth/v1.0.0/abnormal/detail";
/**
* 查询用户健康计划是否开启状态
*/
public static final String HEALTH_SCHEDULE_STATUS_URL = "/auth/v1.0.0/healthSchedule/status";
/**
* 查询用户健康档案30天内是否有更新
*/
public static final String HEALTH_RECORD_WHETHER_UPDATE_URL = "/auth/v1.0.0/healthRecordWhetherUpdate";
/**
* 推送创建家庭医生图文随访订单
*/
public static final String PUSH_FOLLOW_UP_ORDER_URL = "/auth/v1.0.0/push/follow_up_order";
/**
* 查询用户头像
*/
public static final String USER_PIC_URL = "/auth/v1.0.0/userPicUrl";
/**
* 查询用户基础信息
*/
public static final String USER_BASIC_INFO_URL = "/auth/v1.0.0/userBasicInformation";
/**
* 查询用户基础指标信息
*/
public static final String USER_BASIC_IND_URL = "/auth/v1.0.0/userBasicIndicators";
}
package com.ebaiyihui.family.doctor.server.common.enums;
/**
* @ClassName: SignStatus
* @Author:yanliang
* @Date:2024/3/15 17:50
* @Description
*/
public enum ContentType {
// 内容中的占位符
DOCTOR("医生", 1),
PATIENT("患者", 2);
private String desc;
private Integer value;
private ContentType(String desc, Integer value) {
this.desc = desc;
this.value = value;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public Integer getValue() {
return value;
}
public void setValue(Integer value) {
this.value = value;
}
}
package com.ebaiyihui.family.doctor.server.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.HashMap;
/**
* @ClassName: RabbitMqConfig
* @Author:yanliang
* @Date:2024/3/20 11:05
* @Description
*/
@Configuration
@Slf4j
public class RabbitMqConfig {
/**
* 延迟队列 TTL 名称
*/
public static final String ORDER_DELAY_QUEUE_1 = "byh-family-doctor-delay-queue";
/**
* 延迟交换机
*/
public static final String ORDER_DELAY_EXCHANGE = "byh-family-doctor-delay-exchange";
public static final String ORDER_ROUTING_KEY_5 = "family-doctor-order-key";
public static final String INQUIRY_END_PRE_QUEUE_NAME = "family.doctor.end.pre";
public static final String INQUIRY_END_PRE_KEY = "family.doctor-end-pre-key";
@Bean
public Queue queue() {
// 队列持久
return new Queue("family-doctor", true);
}
@Bean
DirectExchange exchange() {
// 交换机
return new DirectExchange("family-doctor-exchange", false, false);
}
@Bean
public Binding binding() {
// 消息队列绑定交换机
return BindingBuilder.bind(queue()).to(exchange()).with("family-doctor");
}
@Bean
public Queue delayedQueue() {
return new Queue(ORDER_DELAY_QUEUE_1, true);
}
@Bean
public CustomExchange orderDelayExchange1() {
HashMap param = new HashMap(10);
param.put("x-delayed-type", "direct");
return new CustomExchange(ORDER_DELAY_EXCHANGE, "x-delayed-message", true, false, param);
}
@Bean
public Binding orderBinding5() {
return BindingBuilder.bind(delayedQueue()).to(orderDelayExchange1()).with(ORDER_ROUTING_KEY_5).noargs();
}
@Bean
public Queue familyDoctorEndPreQueue() {
return new Queue(INQUIRY_END_PRE_QUEUE_NAME, true);
}
@Bean
public Binding familyDoctorEndPreBinding() {
return BindingBuilder.bind(familyDoctorEndPreQueue()).to(orderDelayExchange1()).with(INQUIRY_END_PRE_KEY).noargs();
}
}
......@@ -27,6 +27,8 @@ public class ImMsgTemplateEntity {
private String content;
private Integer contentType;
private Date createTime;
private Date updateTime;
......
package com.ebaiyihui.family.doctor.server.rabbitmq;
import com.ebaiyihui.family.doctor.server.common.enums.StatusEnum;
import com.ebaiyihui.family.doctor.server.config.RabbitMqConfig;
import com.ebaiyihui.family.doctor.server.entity.PatientSignEntity;
import com.ebaiyihui.family.doctor.server.mapper.PatientSignMapper;
import com.ebaiyihui.family.doctor.server.vo.OrderTaskVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
* @ClassName: RabbitConsumer
* @Author:yanliang
* @Date:2024/3/20 11:19
* @Description
*/
@Slf4j
@Component
public class RabbitConsumer {
@Autowired
private PatientSignMapper patientSignMapper;
@RabbitListener(queues = RabbitMqConfig.ORDER_DELAY_QUEUE_1)
public void orderDelayQueue1(@Payload OrderTaskVo orderTaskVo) {
log.info("定时任务监听结果:{}", orderTaskVo.toString());
try {
String id = orderTaskVo.getId();
log.info("【orderDelayQueue 监听的消息】 - 【消费时间】 - [{}]- 【订单ID】 - [{}]", new Date(), id);
PatientSignEntity patientSignEntity = patientSignMapper.selectById(id);
if (null == patientSignEntity) {
return;
}
// 存在进行中订单则将订单状态改为失效
if (StatusEnum.IN_CONSULTATION.getValue().equals(patientSignEntity.getStatus())) {
patientSignEntity.setStatus(StatusEnum.EXPIRED.getValue());
patientSignMapper.updateById(patientSignEntity);
}
} catch (Exception e) {
log.info("orderDelayQueue监听异常", e);
return;
}
}
}
package com.ebaiyihui.family.doctor.server.rabbitmq;
import com.ebaiyihui.family.doctor.server.config.RabbitMqConfig;
import com.ebaiyihui.family.doctor.server.vo.OrderTaskVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.amqp.core.MessageDeliveryMode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @ClassName: RabbitProduct
* @Author:yanliang
* @Date:2024/3/20 11:19
* @Description
*/
@Component
@Slf4j
public class RabbitProduct {
/**
* 24小时医生未接待
*/
private static final long EXPIRE_TIME_MAX = 24 * 60 * 60 * 1000;
@Autowired
private AmqpTemplate rabbitTemplate;
public void sendDelay(OrderTaskVo orderTaskVo) {
// 家庭医生排班医生24小时消息过期
if (orderTaskVo.getType() == 1) {
long time = EXPIRE_TIME_MAX;
log.info("过期时间:{}", time);
this.rabbitTemplate.convertAndSend(RabbitMqConfig.ORDER_DELAY_EXCHANGE,
RabbitMqConfig.ORDER_ROUTING_KEY_5, orderTaskVo, message -> {
message.getMessageProperties().setHeader("x-delay", time);
message.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT);
return message;
});
}
}
}
......@@ -29,5 +29,5 @@ public interface ImChatTemplate {
void doctorPrompted(String admId);
Boolean sendMsg(List<Components> componentsList, String admId);
Boolean sendMsg(List<Components> componentsList, String admId, Integer contentType);
}
......@@ -12,6 +12,7 @@ import com.ebaiyihui.family.doctor.common.dto.DoctorIdDTO;
import com.ebaiyihui.family.doctor.server.common.constants.CommonConstants;
import com.ebaiyihui.family.doctor.server.common.constants.IMInformConstants;
import com.ebaiyihui.family.doctor.server.common.constants.ImConstants;
import com.ebaiyihui.family.doctor.server.common.enums.ContentType;
import com.ebaiyihui.family.doctor.server.common.enums.SenderEnum;
import com.ebaiyihui.family.doctor.server.entity.PatientSignEntity;
import com.ebaiyihui.family.doctor.server.exception.BusinessException;
......@@ -30,6 +31,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
......@@ -141,12 +143,17 @@ public class ImChatTemplateImpl implements ImChatTemplate {
}
@Override
public Boolean sendMsg(List<Components> componentsList, String admId) {
public Boolean sendMsg(List<Components> componentsList, String admId, Integer contentType) {
if (!componentsList.isEmpty()) {
for (int i = 0; i < componentsList.size(); i++) {
String content = componentsList.get(i).getContent();
List<MessageInfo> messageInfos = new ArrayList<>();
PatientSignInfo patientSignInfo = getPatientSignInfo(admId);
if (ContentType.DOCTOR.getValue().equals(contentType)) {
content = MessageFormat.format(content, patientSignInfo.getDoctorName());
} else {
content = MessageFormat.format(content, patientSignInfo.getPatientName());
}
MessageInfo messageInfo = new MessageInfo();
if (SenderEnum.DOCTOR.getDesc().equals(componentsList.get(i).getSender())) {
messageInfo = getDoctorInformRefreshPatientParam(patientSignInfo, IMInformConstants.REFRESH);
......@@ -192,7 +199,7 @@ public class ImChatTemplateImpl implements ImChatTemplate {
return new PatientSignInfo();
}
PatientSignInfo patientSignInfo = new PatientSignInfo();
BeanUtils.copyProperties(patientSign, patientSignInfo);
BeanUtils.copyProperties(patientSignEntity, patientSignInfo);
// 获取医生基本信息
QueryPersonnelInfoReq queryPersonnelInfoReq = new QueryPersonnelInfoReq();
......
......@@ -48,7 +48,7 @@ public class ImMsgTemplateServiceImpl implements ImMsgTemplateService {
String components = imMsgTemplateEntity.getContent();
MsgContent msgContent = JSON.parseObject(components, MsgContent.class);
List<Components> componentsList = msgContent.getComponents().stream().sorted(Comparator.comparing(Components::getSort)).collect(Collectors.toList());
Boolean flag = imChatTemplate.sendMsg(componentsList, reqVo.getAdmId());
Boolean flag = imChatTemplate.sendMsg(componentsList, reqVo.getAdmId(), imMsgTemplateEntity.getContentType());
if (!flag) {
throw new BusinessException("消息推送失败");
}
......
......@@ -13,6 +13,7 @@ import com.ebaiyihui.family.doctor.server.entity.PatientSignEntity;
import com.ebaiyihui.family.doctor.server.exception.BusinessException;
import com.ebaiyihui.family.doctor.server.mapper.MobileBenefitPackageMapper;
import com.ebaiyihui.family.doctor.server.mapper.PatientSignMapper;
import com.ebaiyihui.family.doctor.server.rabbitmq.RabbitProduct;
import com.ebaiyihui.family.doctor.server.service.GoEasyPushService;
import com.ebaiyihui.family.doctor.server.service.ImChatTemplate;
import com.ebaiyihui.family.doctor.server.service.ImMsgTemplateService;
......@@ -20,6 +21,7 @@ import com.ebaiyihui.family.doctor.server.service.PatientService;
import com.ebaiyihui.family.doctor.server.util.DateUtils;
import com.ebaiyihui.family.doctor.server.util.ThirdOrderPushUtil;
import com.ebaiyihui.family.doctor.server.util.UUIDUtil;
import com.ebaiyihui.family.doctor.server.vo.OrderTaskVo;
import com.ebaiyihui.framework.response.BaseResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -57,6 +59,9 @@ public class PatientServiceImpl implements PatientService {
@Autowired
private ThirdOrderPushUtil thirdOrderPushUtil;
@Autowired
private RabbitProduct rabbitProduct;
@Override
public BaseResponse<String> signedDoctor(SignedDoctorDTO reqVo) {
......@@ -134,6 +139,12 @@ public class PatientServiceImpl implements PatientService {
notifyConsultDataDTO.setExpertName(reqVo.getDoctorName());
notifyConsultDataDTO.setOrderDate(DateUtils.dateToFullString(patientSignEntity.getCreateTime()));
thirdOrderPushUtil.syncBenefitUsedOrder(notifyConsultDataDTO);
} else {
//放入MQ任务,处理订单到时结束
OrderTaskVo orderTaskVo = new OrderTaskVo();
orderTaskVo.setType(1);
orderTaskVo.setId(String.valueOf(patientSignEntity.getId()));
rabbitProduct.sendDelay(orderTaskVo);
}
// 推送第三方签名相关订单信息
......
......@@ -2,9 +2,7 @@ package com.ebaiyihui.family.doctor.server.util;
import com.alibaba.fastjson.JSONObject;
import com.ebaiyihui.family.doctor.common.bo.Result;
import com.ebaiyihui.family.doctor.common.dto.NotifyConsultDataDTO;
import com.ebaiyihui.family.doctor.common.dto.SyncSignedOrderDTO;
import com.ebaiyihui.family.doctor.common.dto.ThirdPushDTO;
import com.ebaiyihui.family.doctor.common.dto.*;
import com.ebaiyihui.family.doctor.common.vo.AccessTokenVo;
import com.ebaiyihui.family.doctor.server.common.constants.CommonConstants;
import com.ebaiyihui.family.doctor.server.common.constants.ProjProperties;
......@@ -143,4 +141,121 @@ public class ThirdOrderPushUtil {
}
}
/**
* 获取异常数据
*
* @param abnormalDataDTO
*/
public void getAbnormalData(AbnormalDataDTO abnormalDataDTO) {
try {
String param = JSONObject.toJSONString(abnormalDataDTO);
log.info("getAbnormalData请求入参{}", param);
String result = HttpKit.jsonPost(projProperties.getFamilyDoctorThirdUrl() + UrlConstants.ABNORMAL_DATA_URL, param, getThirdHead(abnormalDataDTO));
log.info("getAbnormalData请求返参{}", param);
} catch (Exception e) {
log.error("getAbnormalData请求失败:{}", e);
}
}
/**
* 查询用户健康计划是否开启状态
*
* @param healthInfoDTO
*/
public void getHealthSchStatus(HealthInfoDTO healthInfoDTO) {
try {
String param = JSONObject.toJSONString(healthInfoDTO);
log.info("getHealthSchStatus请求入参{}", param);
String result = HttpKit.jsonPost(projProperties.getFamilyDoctorThirdUrl() + UrlConstants.HEALTH_SCHEDULE_STATUS_URL, param, getThirdHead(healthInfoDTO));
log.info("getHealthSchStatus请求返参{}", param);
} catch (Exception e) {
log.error("getHealthSchStatus请求失败:{}", e);
}
}
/**
* 查询用户健康档案30天内是否有更新
*
* @param healthInfoDTO
*/
public void getHealthRecordWhetherUpdate(HealthInfoDTO healthInfoDTO) {
try {
String param = JSONObject.toJSONString(healthInfoDTO);
log.info("getHealthRecordWhetherUpdate请求入参{}", param);
String result = HttpKit.jsonPost(projProperties.getFamilyDoctorThirdUrl() + UrlConstants.HEALTH_RECORD_WHETHER_UPDATE_URL, param, getThirdHead(healthInfoDTO));
log.info("getHealthRecordWhetherUpdate请求返参{}", param);
} catch (Exception e) {
log.error("getHealthRecordWhetherUpdate请求失败:{}", e);
}
}
/**
* 推送创建家庭医生图文随访订单
*
* @param followUpOrderDTO
*/
public void pushFollowUpOrder(FollowUpOrderDTO followUpOrderDTO) {
try {
String param = JSONObject.toJSONString(followUpOrderDTO);
log.info("pushFollowUpOrder请求入参{}", param);
String result = HttpKit.jsonPost(projProperties.getFamilyDoctorThirdUrl() + UrlConstants.PUSH_FOLLOW_UP_ORDER_URL, param, getThirdHead(followUpOrderDTO));
log.info("pushFollowUpOrder请求返参{}", param);
} catch (Exception e) {
log.error("pushFollowUpOrder请求失败:{}", e);
}
}
/**
* 查询用户头像
*
* @param userInfoDTO
*/
public void getUserPic(UserInfoDTO userInfoDTO) {
try {
String param = JSONObject.toJSONString(userInfoDTO);
log.info("getUserPic请求入参{}", param);
String result = HttpKit.jsonPost(projProperties.getFamilyDoctorThirdUrl() + UrlConstants.USER_PIC_URL, param, getThirdHead(userInfoDTO));
log.info("getUserPic请求返参{}", param);
} catch (Exception e) {
log.error("getUserPic请求失败:{}", e);
}
}
/**
* 获取用户基础信息
*
* @param userInfoDTO
*/
public void getUserBasicInfo(UserInfoDTO userInfoDTO) {
try {
String param = JSONObject.toJSONString(userInfoDTO);
log.info("getUserBasicInfo请求入参{}", param);
String result = HttpKit.jsonPost(projProperties.getFamilyDoctorThirdUrl() + UrlConstants.USER_BASIC_INFO_URL, param, getThirdHead(userInfoDTO));
log.info("getUserBasicInfo请求返参{}", param);
} catch (Exception e) {
log.error("getUserBasicInfo请求失败:{}", e);
}
}
/**
* 获取用户基础指标信息
*
* @param userInfoDTO
*/
public void getUserBasicInd(UserInfoDTO userInfoDTO) {
try {
String param = JSONObject.toJSONString(userInfoDTO);
log.info("getUserBasicInd请求入参{}", param);
String result = HttpKit.jsonPost(projProperties.getFamilyDoctorThirdUrl() + UrlConstants.USER_BASIC_IND_URL, param, getThirdHead(userInfoDTO));
log.info("getUserBasicInd请求返参{}", param);
} catch (Exception e) {
log.error("getUserBasicInd请求失败:{}", e);
}
}
}
package com.ebaiyihui.family.doctor.server.vo;
import lombok.Data;
import java.io.Serializable;
/**
* @ClassName: OrderTaskVo
* @Author:yanliang
* @Date:2024/3/20 11:23
* @Description
*/
@Data
public class OrderTaskVo implements Serializable {
private static final long serialVersionUID = 1L;
private String id;
private Integer type;
}
......@@ -19,11 +19,11 @@ spring:
cache:
cache-names: dataCache
type: REDIS
# rabbitmq:
# host: 123.57.93.190
# port: 5672
# username: byh
# password: byh2019@ZW..
rabbitmq:
host: rabbitmq
port: 5672
username: byh
password: byh@ycrmyy..
jackson:
serialization:
WRITE_DATES_AS_TIMESTAMPS: true
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论