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

feat:家庭医生初始化

上级 26f6662d
......@@ -19,4 +19,13 @@ public class RegisterPatientVo {
@ApiModelProperty("激活权益订单号")
private String activateOrderId;
@ApiModelProperty("问诊订单ID")
private String admId;
@ApiModelProperty("排班标识")
private Integer scheduleFlag;
@ApiModelProperty("消息推送类型")
private Integer msgPushType;
}
......@@ -259,6 +259,17 @@
<version>4.4.2</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>cn.6tail</groupId>-->
<!-- <artifactId>lunar</artifactId>-->
<!-- <version>1.6.3</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>cn.6tail</groupId>-->
<!-- <artifactId>tyme4j</artifactId>-->
<!-- <version>1.0.3</version>-->
<!-- </dependency>-->
</dependencies>
<build>
......
package com.ebaiyihui.family.doctor.server.common.enums;
/**
* @ClassName: MsgTempTypeEnum
* @Author:yanliang
* @Date:2024/3/20 17:59
* @Description
*/
public enum MsgTempTypeEnum {
SIG_SUC("签约成功", 1),
UP_SUC("改签成功", 2),
HP_INQ_DOCTOR("家庭主页问医生", 3),
HP_INQ_DUTY_DOCTOR("家庭主页问联系值班医生", 4),
HEAL_DIS_CON("健康/疾病咨询", 5),
MED_GUD("用药指导", 6),
REP_INTER("报告解读", 7),
PRES_MED("处方开药", 8),
REP_ANO("报告异常", 9),
AFTER_HEAL_ASSE("完成健康评估后", 10),
ACT_PUSH_HEAL_REC("健康档案未完善主动推送", 11),
ACT__SIG_SUC("签约完成主动随访", 12),
ACT_FU_REP_ANO("报告异常主动随访", 13),
ACT_FU_UN_CON("未进行沟通主动随访", 14),
ACT_FU_TSD("清明节主动随访", 15),
ACT_FU_LD("劳动节主动随访", 16),
ACT_FU_TDBF("端午节主动随访", 17),
ACT_FU_MAF("中秋节主动随访", 18),
ACT_FU_ND("国庆节主动随访", 19);
private String desc;
private Integer value;
private MsgTempTypeEnum(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;
}
}
......@@ -8,6 +8,7 @@ import com.ebaiyihui.family.doctor.server.util.PageUtil;
import com.ebaiyihui.framework.response.BaseResponse;
import com.ebaiyihui.imforward.client.vo.IMQueryMsgReqVO;
import com.ebaiyihui.imforward.client.vo.IMQueryUserLoginReqVO;
import com.ebaiyihui.imforward.client.vo.IMQueryUserLoginRspVO;
import com.ebaiyihui.imforward.client.vo.IMSingleMsgResultVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
......@@ -109,7 +110,7 @@ public class PatientSignController {
@ApiOperation(value = "查询APP客户端是或否需要登陆IM", httpMethod = "POST", notes = "查询APP客户端是或否需要登陆IM")
@RequestMapping(value = "/querysdklogin", method = RequestMethod.POST)
public BaseResponse<?> querySdkLogin(@RequestBody IMQueryUserLoginReqVO reqVO) {
public BaseResponse<IMQueryUserLoginRspVO> querySdkLogin(@RequestBody IMQueryUserLoginReqVO reqVO) {
return patientSignService.querySdkLogin(reqVO);
}
}
......@@ -7,10 +7,12 @@ import com.ebaiyihui.family.doctor.common.vo.ImAccountVo;
import com.ebaiyihui.family.doctor.common.vo.ImInfoDetailDocResVo;
import com.ebaiyihui.family.doctor.common.vo.ImInfoListResVo;
import com.ebaiyihui.family.doctor.common.vo.ImInfoResVo;
import com.ebaiyihui.family.doctor.server.entity.PatientSignEntity;
import com.ebaiyihui.family.doctor.server.util.PageUtil;
import com.ebaiyihui.framework.response.BaseResponse;
import com.ebaiyihui.imforward.client.vo.IMQueryMsgReqVO;
import com.ebaiyihui.imforward.client.vo.IMQueryUserLoginReqVO;
import com.ebaiyihui.imforward.client.vo.IMQueryUserLoginRspVO;
import com.ebaiyihui.imforward.client.vo.IMSingleMsgResultVO;
import java.util.List;
......@@ -41,5 +43,7 @@ public interface PatientSignService {
BaseResponse<ImAccountVo> queryImAccount(ImAccountReqDTO param);
BaseResponse<?> querySdkLogin(IMQueryUserLoginReqVO reqVO);
BaseResponse<IMQueryUserLoginRspVO> querySdkLogin(IMQueryUserLoginReqVO reqVO);
List<PatientSignEntity> selectList(PatientSignEntity patientSignEntity);
}
......@@ -83,6 +83,16 @@ public class MobileBenefitPackageServiceImpl implements MobileBenefitPackageServ
RegisterPatientVo registerPatientVo = new RegisterPatientVo();
registerPatientVo.setPatientInfo(data);
registerPatientVo.setActivateOrderId(map.get("activateOrderId"));
if (Objects.nonNull(map.get("consultOrderNo"))) {
registerPatientVo.setAdmId(map.get("admId"));
}
if (Objects.nonNull(map.get("scheduleFlag"))) {
registerPatientVo.setScheduleFlag(Integer.valueOf(map.get("scheduleFlag")));
}
if (Objects.nonNull(map.get("msgPushType"))) {
registerPatientVo.setMsgPushType(Integer.valueOf(map.get("msgPushType")));
}
String patientId = map.get("patient_id");
if (!StringUtils.isEmpty(patientId)) {
// 查询患者信息
......
......@@ -9,9 +9,9 @@ import com.ebaiyihui.family.doctor.common.dto.ImAccountReqDTO;
import com.ebaiyihui.family.doctor.common.dto.ImInfoDetailDocReqDTO;
import com.ebaiyihui.family.doctor.common.dto.ImInfoListDocReqDTO;
import com.ebaiyihui.family.doctor.common.vo.*;
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.SignStatus;
import com.ebaiyihui.family.doctor.server.common.enums.StatusEnum;
import com.ebaiyihui.family.doctor.server.entity.PatientEntity;
import com.ebaiyihui.family.doctor.server.entity.PatientSignEntity;
......@@ -141,19 +141,9 @@ public class PatientSignServiceImpl implements PatientSignService {
resVo.setDeptId(String.valueOf(res.getData().getDeptId()));
}
// List<String> appointmentId = new ArrayList<>();
QueryWrapper<PatientSignEntity> listWrapper = new QueryWrapper<>();
PatientSignEntity pg = new PatientSignEntity();
pg.setDoctorId(patientSignEntity.getDoctorId());
pg.setDeptId(patientSignEntity.getDeptId());
pg.setPatientId(patientSignEntity.getPatientId());
pg.setAppCode(CommonConstants.APP_CODE);
listWrapper.setEntity(patientSign);
listWrapper.in("sign_status", 1, 2);
List<PatientSignEntity> patientSignEntities = patientSignMapper.selectList(listWrapper);
// appointmentId.add(admId);
imQueryMsgReqVO.setAppointmentId(patientSignEntities.stream().map(PatientSignEntity::getAdmId).collect(Collectors.toList()));
List<String> appointmentId = new ArrayList<>();
appointmentId.add(admId);
imQueryMsgReqVO.setAppointmentId(appointmentId);
BaseResponse<List<IMSingleMsgResultVO>> allMsgContent = getAllMsgContent(imQueryMsgReqVO);
......@@ -279,7 +269,7 @@ public class PatientSignServiceImpl implements PatientSignService {
}
@Override
public BaseResponse<?> querySdkLogin(IMQueryUserLoginReqVO reqVO) {
public BaseResponse<IMQueryUserLoginRspVO> querySdkLogin(IMQueryUserLoginReqVO reqVO) {
BaseResponse<IMQueryUserLoginRspVO> imSysResult = imApiFeignClient.queryUserLogin(reqVO);
if (imSysResult == null) {
......@@ -292,6 +282,16 @@ public class PatientSignServiceImpl implements PatientSignService {
return BaseResponse.success(imSysResult.getData());
}
@Override
public List<PatientSignEntity> selectList(PatientSignEntity patientSignEntity) {
QueryWrapper<PatientSignEntity> listWrapper = new QueryWrapper<>();
patientSignEntity.setStatus(StatusEnum.IN_CONSULTATION.getValue());
patientSignEntity.setSignStatus(SignStatus.SIGNED.getValue());
listWrapper.setEntity(patientSignEntity);
List<PatientSignEntity> patientSignEntities = patientSignMapper.selectList(listWrapper);
return patientSignEntities;
}
public ImAccountVo getImAccounts(PatientSignEntity patientSignEntity, String admId, String imAppCode, String doctorId) {
ImAccountVo admission = new ImAccountVo();
......
package com.ebaiyihui.family.doctor.server.task;
import com.alibaba.fastjson.JSONObject;
import com.ebaiyihui.family.doctor.common.bo.Result;
import com.ebaiyihui.family.doctor.common.dto.HealthInfoDTO;
import com.ebaiyihui.family.doctor.common.dto.SendImMsgDTO;
import com.ebaiyihui.family.doctor.server.common.constants.CommonConstants;
import com.ebaiyihui.family.doctor.server.common.constants.ImConstants;
import com.ebaiyihui.family.doctor.server.common.enums.MsgTempTypeEnum;
import com.ebaiyihui.family.doctor.server.entity.PatientSignEntity;
import com.ebaiyihui.family.doctor.server.service.ImMsgTemplateService;
import com.ebaiyihui.family.doctor.server.service.PatientSignService;
import com.ebaiyihui.family.doctor.server.util.DateUtils;
import com.ebaiyihui.family.doctor.server.util.ThirdOrderPushUtil;
import com.ebaiyihui.framework.response.BaseResponse;
import com.ebaiyihui.imforward.client.vo.IMQueryMsgReqVO;
import com.ebaiyihui.imforward.client.vo.IMQueryUserLoginReqVO;
import com.ebaiyihui.imforward.client.vo.IMQueryUserLoginRspVO;
import com.ebaiyihui.imforward.client.vo.IMSingleMsgResultVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @ClassName: TaskSchedule
* @Author:yanliang
* @Date:2024/3/20 17:29
* @Description
*/
@Component
@Slf4j
public class ScheduleTask {
@Autowired
private ImMsgTemplateService imMsgTemplateService;
@Autowired
private PatientSignService patientSignSevice;
@Autowired
private ThirdOrderPushUtil thirdOrderPushUtil;
@Scheduled(cron = "0 0 10 * * ?")
public void healthRecordWhetherUpdate() {
List<PatientSignEntity> patientSignEntities = patientSignSevice.selectList(new PatientSignEntity());
for (PatientSignEntity ps : patientSignEntities) {
HealthInfoDTO healthInfoDTO = new HealthInfoDTO();
healthInfoDTO.setPhone(ps.getPatientPhone());
// 查询用户健康档案30天内是否有更新
String result = thirdOrderPushUtil.getHealthRecordWhetherUpdate(healthInfoDTO);
Result<Boolean> res = JSONObject.parseObject(result, Result.class);
Boolean flag = res.getData();
SendImMsgDTO sendImMsgDTO = new SendImMsgDTO();
sendImMsgDTO.setAppCode(CommonConstants.APP_CODE);
sendImMsgDTO.setOrganId(CommonConstants.ORGAN_CODE);
sendImMsgDTO.setAdmId(ps.getAdmId());
if (!flag) {
sendImMsgDTO.setType(MsgTempTypeEnum.ACT_PUSH_HEAL_REC.getValue());
imMsgTemplateService.sendImMsg(sendImMsgDTO);
}
// 1、签约完成定时任务第10天,主动触发 2、定时任务之后每隔15天,主动触发
Date curDate = new Date();
int difDay = DateUtils.daysBetween(ps.getCreateTime(), curDate);
int afterFifteenDay = DateUtils.daysBetween(ps.getCreateTime(), curDate);
if (10 == difDay || afterFifteenDay % 15 == 0) {
sendImMsgDTO.setType(MsgTempTypeEnum.ACT__SIG_SUC.getValue());
imMsgTemplateService.sendImMsg(sendImMsgDTO);
}
// 1、当用户有触发过‘报告异常’问诊 2、定时任务触发20天后主动触发
if (20 == difDay) {
sendImMsgDTO.setType(MsgTempTypeEnum.ACT_FU_REP_ANO.getValue());
imMsgTemplateService.sendImMsg(sendImMsgDTO);
}
// 1、当用户与医生7天未进行沟通 2、判断后主动触发
// {"appCode":"EHOS_PATIENT","appointmentId":["9ad0b140bd1b4b86b1aa68f59c9dbf9a"],"businessCode":"jtys","msgType":"1","page":0,"pageSize":999,"sortOrder":"ASC","userId":"18170905967"}
IMQueryMsgReqVO imQueryMsgReqVO = new IMQueryMsgReqVO();
imQueryMsgReqVO.setAppCode(ImConstants.IM_PAT_ACCOUNT_NUM);
imQueryMsgReqVO.setBusinessCode(ImConstants.IM_QUERY_ACCOUNT_CODE);
imQueryMsgReqVO.setMsgType("1");
imQueryMsgReqVO.setPageSize(10);
imQueryMsgReqVO.setSortOrder("DESC");
List<String> appointmentIds = new ArrayList<>();
appointmentIds.add(ps.getAdmId());
imQueryMsgReqVO.setAppointmentId(appointmentIds);
imQueryMsgReqVO.setUserId(ps.getPatientUserId());
String sendTimeStr = "2023-12-01 00:00:00";
try {
BaseResponse<List<IMSingleMsgResultVO>> msgContent = patientSignSevice.getAllMsgContent(imQueryMsgReqVO);
if ("1".equals(msgContent.getCode())) {
List<IMSingleMsgResultVO> imSingleMsgResultVOS = msgContent.getData();
IMQueryUserLoginReqVO imQueryUserLoginReqVO = new IMQueryUserLoginReqVO();
imQueryUserLoginReqVO.setAppCode(ImConstants.IM_PAT_ACCOUNT_NUM);
imQueryUserLoginReqVO.setUserId(ps.getPatientUserId());
BaseResponse<IMQueryUserLoginRspVO> sdkLogin = patientSignSevice.querySdkLogin(imQueryUserLoginReqVO);
if ("1".equals(sdkLogin.getCode())) {
IMQueryUserLoginRspVO imQueryUserLoginRspVO = sdkLogin.getData();
String sdkAccount = imQueryUserLoginRspVO.getSdkAccount();
for (IMSingleMsgResultVO imSingleMsgResultVO : imSingleMsgResultVOS) {
if (imSingleMsgResultVO.getSender().equals(sdkAccount)) {
sendTimeStr = imSingleMsgResultVO.getSendTime();
break;
}
}
}
Date sendTime = DateUtils.parseDate(sendTimeStr, DateUtils.FULL_FORMAT);
int difSendDay = DateUtils.daysBetween(sendTime, curDate);
if (7 == difSendDay) {
sendImMsgDTO.setType(MsgTempTypeEnum.ACT_FU_UN_CON.getValue());
imMsgTemplateService.sendImMsg(sendImMsgDTO);
}
}
} catch (Exception e) {
log.error("获取发送消息异常", e);
}
}
}
@Scheduled(cron = "0 0 20 * * ?")
public void holidayPush() {
List<PatientSignEntity> patientSignEntities = patientSignSevice.selectList(new PatientSignEntity());
for (PatientSignEntity ps : patientSignEntities) {
try {
SendImMsgDTO sendImMsgDTO = new SendImMsgDTO();
sendImMsgDTO.setAppCode(CommonConstants.APP_CODE);
sendImMsgDTO.setOrganId(CommonConstants.ORGAN_CODE);
sendImMsgDTO.setAdmId(ps.getAdmId());
Date curDate = new Date();
Date qmBeforeDay = DateUtils.getQingMingBeforeDay(curDate);
Date curDay = DateUtils.parseDate(DateUtils.getFormatDateString(curDate, DateUtils.SIMPLE_FORMAT), DateUtils.SIMPLE_FORMAT);
if (qmBeforeDay.equals(curDay)) {
sendImMsgDTO.setType(MsgTempTypeEnum.ACT_FU_TSD.getValue());
imMsgTemplateService.sendImMsg(sendImMsgDTO);
}
Date laborBeforeDay = DateUtils.getLaborBeforeDay(curDate);
if (laborBeforeDay.equals(curDay)) {
sendImMsgDTO.setType(MsgTempTypeEnum.ACT_FU_LD.getValue());
imMsgTemplateService.sendImMsg(sendImMsgDTO);
}
Date duanWuBeforeDay = DateUtils.getLaborBeforeDay(curDate);
if (duanWuBeforeDay.equals(curDay)) {
sendImMsgDTO.setType(MsgTempTypeEnum.ACT_FU_TDBF.getValue());
imMsgTemplateService.sendImMsg(sendImMsgDTO);
}
Date zhongQiuBeforeDay = DateUtils.getZhongQiuBeforeDay(curDate);
if (zhongQiuBeforeDay.equals(curDay)) {
sendImMsgDTO.setType(MsgTempTypeEnum.ACT_FU_MAF.getValue());
imMsgTemplateService.sendImMsg(sendImMsgDTO);
}
Date guoQingBeforeDay = DateUtils.getGuoQingBeforeDay(curDate);
if (guoQingBeforeDay.equals(curDay)) {
sendImMsgDTO.setType(MsgTempTypeEnum.ACT_FU_MAF.getValue());
imMsgTemplateService.sendImMsg(sendImMsgDTO);
}
} catch (Exception e) {
log.error("节日日期转换异常", e);
}
}
}
}
......@@ -10,7 +10,6 @@ import java.text.DateFormat;
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
......@@ -36,6 +35,8 @@ public class DateUtils {
public final static String SIMPLE_TIME_FORMAT = "HH:mm:ss";
public final static String SIMPLE_TIME_FORMAT_MINUTE = "mm:ss";
public final static String YEAR = "yyyy";
/**
* 分钟 转 天时分
......@@ -2105,4 +2106,80 @@ public class DateUtils {
return futureDate;
}
public static Date getQingMingBeforeDay(Date currentDate) throws ParseException {
// 设置清明节日期为4月4日或4月5日
String qingMingDateStr = getFormatDateString(currentDate, YEAR) + "-04-04"; // 以2024年为例
Date qingMingDate = parseDate(qingMingDateStr, SIMPLE_FORMAT);
// 使用Calendar类处理日期
Calendar calendar = Calendar.getInstance();
calendar.setTime(qingMingDate);
calendar.add(Calendar.DAY_OF_YEAR, -1); // 获取清明节前一天
// 将获取到的日期转换为Date对象
Date qingMingEveDate = calendar.getTime();
return qingMingEveDate;
}
public static Date getLaborBeforeDay(Date currentDate) throws ParseException {
// 设置劳动节日期为5月1日
String laborDayStr = getFormatDateString(currentDate, YEAR) + "-05-01"; // 以2024年为例
Date laborDay = parseDate(laborDayStr, SIMPLE_FORMAT);
// 使用Calendar类处理日期
Calendar calendar = Calendar.getInstance();
calendar.setTime(laborDay);
calendar.add(Calendar.DAY_OF_YEAR, -1); // 获取劳动节前一天
// 将获取到的日期转换为Date对象
Date laborDayEve = calendar.getTime();
return laborDayEve;
}
public static Date getDuanWuBeforeDay(Date currentDate) throws ParseException {
// 设置端午节日期为6月8日
String duanWuDayStr = getFormatDateString(currentDate, YEAR) + "-06-08"; // 以2024年为例
Date duanWuDay = parseDate(duanWuDayStr, SIMPLE_FORMAT);
Calendar calendar = Calendar.getInstance();
calendar.setTime(duanWuDay);
// 往前推一天
calendar.add(Calendar.DAY_OF_YEAR, -1);
Date duanwuDayEve = calendar.getTime();
return duanwuDayEve;
}
public static Date getZhongQiuBeforeDay(Date currentDate) throws ParseException {
// 设置端午节日期为6月8日
String zhongQiuDayStr = getFormatDateString(currentDate, YEAR) + "-09-14"; // 以2024年为例
Date zhongQiuDay = parseDate(zhongQiuDayStr, SIMPLE_FORMAT);
Calendar calendar = Calendar.getInstance();
calendar.setTime(zhongQiuDay);
// 往前推一天
calendar.add(Calendar.DAY_OF_YEAR, -1);
Date zhongQiuDayEve = calendar.getTime();
return zhongQiuDayEve;
}
public static Date getGuoQingBeforeDay(Date currentDate) throws ParseException {
// 设置国庆节日期为10月01日
String guoQingDayStr = getFormatDateString(currentDate, YEAR) + "-10-01"; // 以2024年为例
Date guoQingDay = parseDate(guoQingDayStr, SIMPLE_FORMAT);
Calendar calendar = Calendar.getInstance();
calendar.setTime(guoQingDay);
// 往前推一天
calendar.add(Calendar.DAY_OF_YEAR, -1);
Date guoQingDayEve = calendar.getTime();
return guoQingDayEve;
}
}
......@@ -181,15 +181,18 @@ public class ThirdOrderPushUtil {
*
* @param healthInfoDTO
*/
public void getHealthRecordWhetherUpdate(HealthInfoDTO healthInfoDTO) {
public String getHealthRecordWhetherUpdate(HealthInfoDTO healthInfoDTO) {
String result = "";
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));
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);
}
return result;
}
/**
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论