diff --git a/platform-common/src/main/java/com/lyms/platform/common/enums/WxTempleteIdEnums.java b/platform-common/src/main/java/com/lyms/platform/common/enums/WxTempleteIdEnums.java index f4d9f90..f2c5d0b 100644 --- a/platform-common/src/main/java/com/lyms/platform/common/enums/WxTempleteIdEnums.java +++ b/platform-common/src/main/java/com/lyms/platform/common/enums/WxTempleteIdEnums.java @@ -19,7 +19,8 @@ public enum WxTempleteIdEnums { GAO_WEI_ZHI_DAO("n6fSC1wYc3jOfGmuI1Vtbut6TlaBPlt5482SqJ8CE4o","高危提醒"), - ER_JIAN_KANG_ZHI_DAO("","儿童健康指导"); + ER_JIAN_KANG_ZHI_DAO("","儿童健康指导"), + CHAN_JIAN_KANG_ZHI_DAO("","产妇健康指导"); private WxTempleteIdEnums(String id, String name){ this.name=name; this.id =id; diff --git a/platform-msg-generate/src/main/java/com/lyms/platform/msg/service/impl/MsgGenerateServiceImpl.java b/platform-msg-generate/src/main/java/com/lyms/platform/msg/service/impl/MsgGenerateServiceImpl.java index acb830a..64d4294 100644 --- a/platform-msg-generate/src/main/java/com/lyms/platform/msg/service/impl/MsgGenerateServiceImpl.java +++ b/platform-msg-generate/src/main/java/com/lyms/platform/msg/service/impl/MsgGenerateServiceImpl.java @@ -49,6 +49,10 @@ public class MsgGenerateServiceImpl implements IMsgGenerateService { private BabyBookbuildingService babyBookbuildingService; + @Autowired + private PostReviewService postReviewService; + + /** * 生成孕妇的AMS推送消息 * @param generateHospitalId 医院id @@ -146,7 +150,7 @@ public class MsgGenerateServiceImpl implements IMsgGenerateService { end = configModels.size(); } TempleteMsgGenerateWorker worker = new TempleteMsgGenerateWorker(configModels.subList(i,end), - baseService,yunBookbuildingService,smsTemplateService,babyBookbuildingService); + baseService,yunBookbuildingService,smsTemplateService,babyBookbuildingService,postReviewService); pool.submit(worker); } diff --git a/platform-msg-generate/src/main/java/com/lyms/platform/msg/utils/DateUtils.java b/platform-msg-generate/src/main/java/com/lyms/platform/msg/utils/DateUtils.java index a3a414c..57cfe4e 100644 --- a/platform-msg-generate/src/main/java/com/lyms/platform/msg/utils/DateUtils.java +++ b/platform-msg-generate/src/main/java/com/lyms/platform/msg/utils/DateUtils.java @@ -88,6 +88,18 @@ public class DateUtils { } + public static Date addYear(Date srcDate, int year) { + try { + lock.lock(); + Calendar rightNow = Calendar.getInstance(); + rightNow.setTime(srcDate); + rightNow.add(Calendar.YEAR, year); + return rightNow.getTime(); + }finally { + lock.unlock(); + } + } + /** * 把时间格式化成对应格式的时间 * @param date diff --git a/platform-msg-generate/src/main/java/com/lyms/platform/msg/worker/BabyAmsMsgGenerateWorker.java b/platform-msg-generate/src/main/java/com/lyms/platform/msg/worker/BabyAmsMsgGenerateWorker.java index efcd1f9..f534853 100644 --- a/platform-msg-generate/src/main/java/com/lyms/platform/msg/worker/BabyAmsMsgGenerateWorker.java +++ b/platform-msg-generate/src/main/java/com/lyms/platform/msg/worker/BabyAmsMsgGenerateWorker.java @@ -96,7 +96,7 @@ public class BabyAmsMsgGenerateWorker implements Runnable { babyQuery.setSmsBuildTypeList(buildType); //儿童年龄满三岁就不在提供短信服务 - Date birthdayMax = DateUtil.addYear(new Date(), -3); + Date birthdayMax = DateUtils.addYear(new Date(), -3); babyQuery.setBirthStart(birthdayMax); //健康指导短信 只能是类型为 增值服务 开通状态 才发送 babyQuery.setServiceType(ServiceTypeEnums.ADD_SERVICE.getId()); @@ -127,7 +127,7 @@ public class BabyAmsMsgGenerateWorker implements Runnable { } - int weeks = DateUtil.daysBetween(baby.getBirth(),new Date()) / 7; + int weeks = DateUtils.daysBetween(baby.getBirth(),new Date()) / 7; String weekAge = String.valueOf(weeks); //得到符合当前周龄的短信条数 List messageContents = amsSmses.get(weekAge); @@ -143,13 +143,13 @@ public class BabyAmsMsgGenerateWorker implements Runnable { continue; } - String weekDay = DateUtil.getWeek(baby.getBirth(), new Date())+"周"; - String title = "儿童健康指导";//SmsServiceEnums.getSmsServiceById(SmsServiceEnums.YBZD.getId()); + String weekDay = weeks+"周"; + String title = "儿童健康指导"; String messageContent = "【"+messagePrefix+"】" + message.getContent(); - MessageRequest request = HelperUtils.getMessageRequest(title, baby.getMphone(), + MessageRequest request = HelperUtils.getMessageRequest(messageContent, baby.getMphone(), ServiceObjEnums.BABYOBJ.getId(), SmsServiceEnums.YBZD.getId(), - baby.getHospitalId(), message.getId(), baby.getId(), weekDay, "", messageContent, WxTempleteIdEnums.ER_JIAN_KANG_ZHI_DAO.getId()); + baby.getHospitalId(), message.getId(), baby.getId(), weekDay, title, "", WxTempleteIdEnums.ER_JIAN_KANG_ZHI_DAO.getId()); messages.add(request); break; diff --git a/platform-msg-generate/src/main/java/com/lyms/platform/msg/worker/ChanAmsMsgGenerateWorker.java b/platform-msg-generate/src/main/java/com/lyms/platform/msg/worker/ChanAmsMsgGenerateWorker.java index 266168d..7b55f44 100644 --- a/platform-msg-generate/src/main/java/com/lyms/platform/msg/worker/ChanAmsMsgGenerateWorker.java +++ b/platform-msg-generate/src/main/java/com/lyms/platform/msg/worker/ChanAmsMsgGenerateWorker.java @@ -59,7 +59,103 @@ public class ChanAmsMsgGenerateWorker implements Runnable { { for(SmsConfigModel config : configs) { + String hospitalId = config.getHospitalId(); + if (StringUtils.isEmpty(hospitalId)) + { + continue; + } + //判断医院是否运行 + if (!baseService.isRunning(hospitalId)) + { + continue; + } + + String serviceStr = config.getSmsService(); + + //判断消息服务是否启动 + boolean isStart = baseService.isStartService(SmsServiceEnums.YBZD.getId(),serviceStr); + if (!isStart) + { + continue; + } + // 查询模板短信 从ams平台配置的短信通过医院ID + Map> amsSmses = AmsMessageService + .getMessageTemplateMap(String.valueOf(hospitalId), + AmsServiceTypeEnum.CHAN_GUIDE); + + + PatientsQuery patientsQuery = new PatientsQuery(); + patientsQuery.setYn(YnEnums.YES.getId()); + patientsQuery.setHospitalId(hospitalId); + //1孕妇 3 产妇 + patientsQuery.setType(3); + patientsQuery.setDueStatus(0); + + List buildType = new ArrayList(); + buildType.add(0); + buildType.add(2); + patientsQuery.setSmsBuildTypeList(buildType); + +// //末次月经必须大于当前时间减去42周视为为分娩孕妇 +// Date lastMensesMax = DateUtil.addDay(new Date(), -42); +// patientsQuery.setLastMensesStart(lastMensesMax); + //健康指导短信 只能是类型为 增值服务 开通状态 才发送 + patientsQuery.setServiceType(ServiceTypeEnums.ADD_SERVICE.getId()); + patientsQuery.setServiceStatus(ServiceStatusEnums.ADD_OPEN.getId()); + + + //查询符合条件的产妇 + List patients = yunBookbuildingService.queryPregnantWithQuery(patientsQuery); + if (CollectionUtils.isNotEmpty(patients)) + { + + //发送短信集合 + MessageListRequest list = new MessageListRequest(); + List messages = new ArrayList<>(); + for (Patients pat : patients) + { + if (pat == null || pat.getFmDate() == null) + { + continue; + } + + String messagePrefix = baseService.getSmsPrefix(config, pat.getBookbuildingDoctor()); + + //计算产后多少周 按分娩日期计算 + int weeks = DateUtils.daysBetween(pat.getFmDate(),new Date()) / 7; + String yunWeek = String.valueOf(weeks); + //得到符合当前孕周的短信条数 + List messageContents = amsSmses.get(yunWeek); + + if (CollectionUtils.isNotEmpty(messageContents)) + { + for(MessageContent message : messageContents) + { + + //判断当前短信是否已经发送 通过短信ID和产妇ID + boolean isExist = SaveMessageService.isExistMsg(pat.getId(), message.getId()); + if (isExist) + { + continue; + } + + String weekDay = weeks+"周"; + String title = "产妇健康指导"; + + String messageContent = "【"+messagePrefix+"】" + message.getContent(); + MessageRequest request = HelperUtils.getMessageRequest(messageContent, pat.getPhone(), + ServiceObjEnums.CHANOBJ.getId(), SmsServiceEnums.YBZD.getId(), + pat.getHospitalId(), message.getId(), pat.getId(), weekDay, title, "", WxTempleteIdEnums.CHAN_JIAN_KANG_ZHI_DAO.getId()); + + messages.add(request); + break; + } + } + } + list.setMessages(messages); + HelperUtils.sendMsg(list); + } } } } diff --git a/platform-msg-generate/src/main/java/com/lyms/platform/msg/worker/TempleteMsgGenerateWorker.java b/platform-msg-generate/src/main/java/com/lyms/platform/msg/worker/TempleteMsgGenerateWorker.java index 871a858..b6f3d38 100644 --- a/platform-msg-generate/src/main/java/com/lyms/platform/msg/worker/TempleteMsgGenerateWorker.java +++ b/platform-msg-generate/src/main/java/com/lyms/platform/msg/worker/TempleteMsgGenerateWorker.java @@ -2,10 +2,7 @@ package com.lyms.platform.msg.worker; import com.lyms.platform.beans.MessageListRequest; import com.lyms.platform.beans.MessageRequest; -import com.lyms.platform.biz.service.BabyBookbuildingService; -import com.lyms.platform.biz.service.SmsConfigService; -import com.lyms.platform.biz.service.SmsTemplateService; -import com.lyms.platform.biz.service.YunBookbuildingService; +import com.lyms.platform.biz.service.*; import com.lyms.platform.common.enums.*; import com.lyms.platform.common.utils.DateUtil; import com.lyms.platform.common.utils.ExceptionUtils; @@ -18,6 +15,7 @@ import com.lyms.platform.query.*; import org.apache.commons.collections.CollectionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import java.util.*; import java.util.concurrent.ExecutorService; @@ -43,16 +41,20 @@ public class TempleteMsgGenerateWorker implements Runnable { private BabyBookbuildingService babyBookbuildingService; + private PostReviewService postReviewService; + public TempleteMsgGenerateWorker(List configs, IBaseService baseService, YunBookbuildingService yunBookbuildingService, SmsTemplateService smsTemplateService, - BabyBookbuildingService babyBookbuildingService) + BabyBookbuildingService babyBookbuildingService, + PostReviewService postReviewService) { this.configs = configs; this.baseService = baseService; this.yunBookbuildingService = yunBookbuildingService; this.smsTemplateService = smsTemplateService; this.babyBookbuildingService = babyBookbuildingService; + this.postReviewService = postReviewService; } @Override @@ -137,7 +139,7 @@ public class TempleteMsgGenerateWorker implements Runnable { //产妇 else if (serviceObj == ServiceObjEnums.CHANOBJ.getId()) { - + generateChanTempMsg(template, config); } } catch (Exception e) @@ -540,4 +542,86 @@ public class TempleteMsgGenerateWorker implements Runnable { list.setMessages(messages); HelperUtils.sendMsg(list); } + + + /** + * 产妇模板消息生成 + * @param template + * @param config + */ + private void generateChanTempMsg(SmsTemplateModel template, SmsConfigModel config) { + + //模板属于的医院id + String tempHid = template.getHospitalId(); + + //服务类型 + Integer serviceType = template.getServiceType(); + //服务状态 + Integer serviceStatus = template.getServiceStatus(); + //消息类型 + Integer smsType = template.getSmsType(); + + //发送时间 SendTimeEnums DT(0,"当天"),QYT(1,"前一天"),QLT(2,"前两天"),QST(3,"前三天"); + Integer sendTimeType = template.getSendTimeType(); + + + PatientsQuery patientsQuery = new PatientsQuery(); + patientsQuery.setYn(YnEnums.YES.getId()); + patientsQuery.setHospitalId(tempHid); + + List buildType = new ArrayList(); + buildType.add(0); + buildType.add(2); + patientsQuery.setSmsBuildTypeList(buildType); + //1孕妇 3产妇 + patientsQuery.setType(3); + //0未终止妊娠的产妇 + patientsQuery.setDueStatus(0); + + HelperUtils.getServicePatientQuery(serviceType, serviceStatus, patientsQuery); + + //发送短信集合 + MessageListRequest list = new MessageListRequest(); + List messages = new ArrayList<>(); + + //产妇预约短信 + if (smsType == SmsServiceEnums.CHFCYUTX.getId()) + { + //把时间格式成yyyy_MM_dd + String currentDate = DateUtil.getyyyy_MM_dd(new Date()); + Date actualSendDate = DateUtil.addDay(DateUtil.parseYMD(currentDate), sendTimeType); + + //查询出产妇预约 + List orderModels = postReviewService.queryPostOrder(actualSendDate, tempHid); + + if(CollectionUtils.isNotEmpty(orderModels)) + { + for(PostReviewModel orderModel : orderModels) + { + PatientsQuery query = new PatientsQuery(); + query.setYn(YnEnums.YES.getId()); + query.setId(orderModel.getId()); //id就是parentId + + //查询符合条件的产妇 + List patients = yunBookbuildingService.queryPregnantWithQuery(query); + if (CollectionUtils.isNotEmpty(patients)) + { + for (Patients pat : patients) + { + //短信前缀 + String messagePrefix = baseService.getSmsPrefix(config, pat.getBookbuildingDoctor()); + String messageContent = "【"+messagePrefix+"】"+template.getContent(); + String title = "产后复查"; + messageContent = HelperUtils.replaceEL(pat.getUsername(), actualSendDate, messageContent); + MessageRequest request = HelperUtils.getMessageRequest(messageContent, pat.getPhone(), + ServiceObjEnums.CHANOBJ.getId(), template.getSmsType(), + pat.getHospitalId(), template.getId(), pat.getId(), title, DateUtils.getDateStr(actualSendDate,DateUtils.Y_M_D), "", WxTempleteIdEnums.CHAN_JIAN_TI_XING.getId()); + + messages.add(request); + } + } + } + } + } + } }