From 7038dace122b467519605378f6cb1b9fb15ddb9b Mon Sep 17 00:00:00 2001 From: liquanyu Date: Wed, 18 Apr 2018 16:20:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AD=95=E5=A6=87=E5=AD=A6=E6=A0=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lyms/platform/biz/dal/IYunBookBuildingDao.java | 2 + .../biz/dal/impl/YunBookbuildingDaoImpl.java | 5 + .../biz/service/YunBookbuildingService.java | 9 +- .../platform/common/enums/SmsServiceEnums.java | 3 +- .../platform/common/enums/WxTempleteIdEnums.java | 1 + .../java/com/lyms/platform/pojo/CourseModel.java | 11 ++ .../java/com/lyms/platform/query/CourseQuery.java | 13 ++ .../platform/msg/service/IMsgGenerateService.java | 8 +- .../msg/service/impl/MsgGenerateServiceImpl.java | 58 ++++++- .../msg/worker/CourseMsgGenerateWorker.java | 190 +++++++++++++++++++++ 10 files changed, 292 insertions(+), 8 deletions(-) create mode 100644 platform-msg-generate/src/main/java/com/lyms/platform/msg/worker/CourseMsgGenerateWorker.java diff --git a/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/IYunBookBuildingDao.java b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/IYunBookBuildingDao.java index 7525980..b6af7c8 100644 --- a/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/IYunBookBuildingDao.java +++ b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/IYunBookBuildingDao.java @@ -17,4 +17,6 @@ public interface IYunBookBuildingDao { List getBirthHusbands(String dateStr); public Patients findOneById(String id); + + int queryPatientCount(MongoQuery query); } diff --git a/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/impl/YunBookbuildingDaoImpl.java b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/impl/YunBookbuildingDaoImpl.java index 2b3317d..38436c5 100644 --- a/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/impl/YunBookbuildingDaoImpl.java +++ b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/dal/impl/YunBookbuildingDaoImpl.java @@ -37,6 +37,11 @@ public class YunBookbuildingDaoImpl extends BaseMongoDAOImpl implement } @Override + public int queryPatientCount(MongoQuery query) { + return (int) count(query.convertToMongoQuery()); + } + + @Override public void updatePatient(Patients obj, String id) { update(new MongoQuery(new MongoCondition("id", id, MongoOper.IS)).convertToMongoQuery(), obj); } diff --git a/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/service/YunBookbuildingService.java b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/service/YunBookbuildingService.java index 04724ca..fedc01a 100644 --- a/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/service/YunBookbuildingService.java +++ b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/service/YunBookbuildingService.java @@ -6,6 +6,7 @@ import com.lyms.platform.common.enums.YnEnums; import com.lyms.platform.pojo.AntExChuModel; import com.lyms.platform.query.AntExChuQuery; import com.lyms.platform.query.PatientsQuery; +import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; @@ -58,8 +59,12 @@ public class YunBookbuildingService { } public List queryPregnantWithQuery(PatientsQuery patientsQuery) { - MongoQuery query = patientsQuery.convertToQuery(); - return yunBookBuildingDao.queryPatientWithQuery(query.addOrder(Sort.Direction.DESC, "created")); + MongoQuery query = patientsQuery.convertToQuery(); + if (StringUtils.isNotEmpty(patientsQuery.getNeed())) { + patientsQuery.mysqlBuild(yunBookBuildingDao.queryPatientCount(query)); + query.start(patientsQuery.getOffset()).end(patientsQuery.getLimit()); + } + return yunBookBuildingDao.queryPatientWithQuery(query.addOrder(Sort.Direction.DESC, "created")); } public List queryPregnantWithQuery(PatientsQuery patientsQuery,String sortkey,Sort.Direction sort) { diff --git a/platform-common/src/main/java/com/lyms/platform/common/enums/SmsServiceEnums.java b/platform-common/src/main/java/com/lyms/platform/common/enums/SmsServiceEnums.java index c35ba67..2a3275a 100644 --- a/platform-common/src/main/java/com/lyms/platform/common/enums/SmsServiceEnums.java +++ b/platform-common/src/main/java/com/lyms/platform/common/enums/SmsServiceEnums.java @@ -39,7 +39,8 @@ public enum SmsServiceEnums { YBYYTX(25,"儿童眼保键预约提醒",14,"2"), TSYYTX(26,"儿童听力筛查预约提醒",14,"2"), TYZDYYTX(27,"儿童听力诊断预约提醒",14,"2"), - TLZDYYTX(28,"儿童听力随访预约提醒",14,"2"); + TLZDYYTX(28,"儿童听力随访预约提醒",14,"2"), + YFXXKCTX(29,"孕妇学校课程提醒",21,"1,3"); private SmsServiceEnums(int id,String name,int pid,String serviceObj){ this.id = id; 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 c834866..7c489b4 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 @@ -21,6 +21,7 @@ public enum WxTempleteIdEnums { YUN_YI_BAN_ZHI_DAO("98i1P6zh3slBxEKLftweaESnnem4w6SDmzvJIBWRXNE","孕妇一般指导"),//孕妇 CHAN_YI_BAN_ZHI_DAO("H2_ucLqVEbsZAv-EZcmUDpD1Zul5NGqMoJktHT0u4gw","产妇一般指导"),//产妇 BABY_YI_BAN_ZHI_DAO("dqvyESU8UXx1V3cIMQDqj4PLxI6T9-sgihQcs3ZGL9E","儿童一般指导"),//儿童 + YUN_XUE_KE_CHEN_TX("","孕妇学校课程提醒"),//孕妇学校课程提醒 YI_SHENG_ZHI_DAO("OggqiSHitLkCgSLCaCH72reCZzaw5NyG8iO56InQiQg","医生指导");//指导 // WEI_JI_ZHI_DAO("fNkkLSp_gS-YWvzji6gwgdTddl4XBlk8SNP7FRksrfk","危急值提醒");//危急值提醒 diff --git a/platform-dal/src/main/java/com/lyms/platform/pojo/CourseModel.java b/platform-dal/src/main/java/com/lyms/platform/pojo/CourseModel.java index 1716199..55be653 100644 --- a/platform-dal/src/main/java/com/lyms/platform/pojo/CourseModel.java +++ b/platform-dal/src/main/java/com/lyms/platform/pojo/CourseModel.java @@ -72,6 +72,17 @@ public class CourseModel extends BaseModel { //课程对象id 0全部/空 1孕期 2儿童 ,3产后 private Integer courseObjId; + //是否发送过推送 字段不存在表示未推送,1已推送 + private Integer isSend; + + public Integer getIsSend() { + return isSend; + } + + public void setIsSend(Integer isSend) { + this.isSend = isSend; + } + public Integer getCourseObjId() { return courseObjId; } diff --git a/platform-dal/src/main/java/com/lyms/platform/query/CourseQuery.java b/platform-dal/src/main/java/com/lyms/platform/query/CourseQuery.java index 1497dd8..8980cc0 100644 --- a/platform-dal/src/main/java/com/lyms/platform/query/CourseQuery.java +++ b/platform-dal/src/main/java/com/lyms/platform/query/CourseQuery.java @@ -75,6 +75,8 @@ public class CourseQuery extends BaseQuery implements IConvertToNativeQuery { private Date courseEndTime; private String keyword; + private boolean isSend; + @Override public MongoQuery convertToQuery() { MongoCondition condition = MongoCondition.newInstance(); @@ -114,6 +116,10 @@ public class CourseQuery extends BaseQuery implements IConvertToNativeQuery { condition = condition.and("status", status, MongoOper.IS); } + if (!isSend) { + condition = condition.and("isSend", false, MongoOper.EXISTS); + } + if (null != courseEndTime) { condition = condition.and("courseEndTime", courseEndTime, MongoOper.LTE); } @@ -188,6 +194,13 @@ public class CourseQuery extends BaseQuery implements IConvertToNativeQuery { return condition.toMongoQuery(); } + public boolean isSend() { + return isSend; + } + + public void setIsSend(boolean isSend) { + this.isSend = isSend; + } public String getKeyword() { return keyword; diff --git a/platform-msg-generate/src/main/java/com/lyms/platform/msg/service/IMsgGenerateService.java b/platform-msg-generate/src/main/java/com/lyms/platform/msg/service/IMsgGenerateService.java index 6fe3ca2..3d027f9 100644 --- a/platform-msg-generate/src/main/java/com/lyms/platform/msg/service/IMsgGenerateService.java +++ b/platform-msg-generate/src/main/java/com/lyms/platform/msg/service/IMsgGenerateService.java @@ -33,7 +33,13 @@ public interface IMsgGenerateService { /** * 生成所有 - * @param generateHospitalId + * @param */ void generaterAllMsg(); + + /** + * 生成 课程推送 + * @param generateHospitalId + */ + void generateCourseMsg(String generateHospitalId); } 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 07f309d..7c42c1a 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 @@ -1,19 +1,22 @@ package com.lyms.platform.msg.service.impl; import com.lyms.platform.biz.service.*; +import com.lyms.platform.common.enums.CourseStatusEnums; +import com.lyms.platform.common.enums.YnEnums; +import com.lyms.platform.common.utils.DateUtil; import com.lyms.platform.msg.service.IBaseService; import com.lyms.platform.msg.service.IMsgGenerateService; import com.lyms.platform.msg.utils.DateUtils; -import com.lyms.platform.msg.worker.BabyAmsMsgGenerateWorker; -import com.lyms.platform.msg.worker.ChanAmsMsgGenerateWorker; -import com.lyms.platform.msg.worker.TempleteMsgGenerateWorker; -import com.lyms.platform.msg.worker.YunAmsMsgGenerateWorker; +import com.lyms.platform.msg.worker.*; import com.lyms.platform.permission.service.BabyPatientExtendEarFollowUpService; import com.lyms.platform.permission.service.BabyPatientExtendEarHearingDiagnoseService; import com.lyms.platform.permission.service.BabyPatientExtendEarScreenService; +import com.lyms.platform.pojo.CourseModel; import com.lyms.platform.pojo.SmsConfigModel; +import com.lyms.platform.query.CourseQuery; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -40,6 +43,8 @@ public class MsgGenerateServiceImpl implements IMsgGenerateService { @Autowired private IBaseService baseService; + @Autowired + private CourseService courseService; @Autowired private MongoTemplate mongoTemplate; @@ -178,6 +183,51 @@ public class MsgGenerateServiceImpl implements IMsgGenerateService { } } + + /** + * isSend字段不存在表示未推送过 + * 并且取的课程只去当天时间范围内的来推送 + * 生成课程推送 + * @param generateHospitalId + */ + @Override + public void generateCourseMsg(String generateHospitalId) { + + CourseQuery query = new CourseQuery(); + query.setYn(YnEnums.YES.getId()); + query.setStatus(CourseStatusEnums.YFB.getId()); + query.setIsSend(false); + String currentDate = DateUtil.getyyyy_MM_dd(new Date()); + query.setCreatedStart(DateUtil.parseYMD(currentDate)); + query.setCreatedEnd(DateUtil.parseYMDHMS(currentDate + " 23:59:59")); + + if (StringUtils.isNotEmpty(generateHospitalId)) + { + query.setHospitalId(generateHospitalId); + } + + List courseModels = courseService.queryCourseList(query); + + logger.info("The generateCourseMsg configs hospital size is {}",courseModels.size()); + if (CollectionUtils.isNotEmpty(courseModels)) + { + int end = 0; + for (int i = 0; i < courseModels.size(); i += 5) { + end = (end + 5); + if (end > courseModels.size()) { + end = courseModels.size(); + } + CourseMsgGenerateWorker worker = new CourseMsgGenerateWorker(courseModels.subList(i,end), + baseService, + yunBookbuildingService, + smsTemplateService, + babyBookbuildingService + ); + pool.execute(worker); + } + } + } + /** * 总的方法调用 */ diff --git a/platform-msg-generate/src/main/java/com/lyms/platform/msg/worker/CourseMsgGenerateWorker.java b/platform-msg-generate/src/main/java/com/lyms/platform/msg/worker/CourseMsgGenerateWorker.java new file mode 100644 index 0000000..6128586 --- /dev/null +++ b/platform-msg-generate/src/main/java/com/lyms/platform/msg/worker/CourseMsgGenerateWorker.java @@ -0,0 +1,190 @@ +package com.lyms.platform.msg.worker; + +import com.lyms.platform.beans.MsgListRequest; +import com.lyms.platform.beans.MsgRequest; +import com.lyms.platform.biz.service.*; +import com.lyms.platform.common.enums.*; +import com.lyms.platform.common.utils.JsonUtil; +import com.lyms.platform.common.utils.StringUtils; +import com.lyms.platform.msg.model.MessageContent; +import com.lyms.platform.msg.remote.AmsMessageService; +import com.lyms.platform.msg.remote.SaveMessageService; +import com.lyms.platform.msg.service.IBaseService; +import com.lyms.platform.msg.utils.DateUtils; +import com.lyms.platform.msg.utils.HelperUtils; +import com.lyms.platform.permission.service.BabyPatientExtendEarFollowUpService; +import com.lyms.platform.permission.service.BabyPatientExtendEarHearingDiagnoseService; +import com.lyms.platform.permission.service.BabyPatientExtendEarScreenService; +import com.lyms.platform.pojo.CourseModel; +import com.lyms.platform.pojo.HighRiskSmsModel; +import com.lyms.platform.pojo.Patients; +import com.lyms.platform.pojo.SmsConfigModel; +import com.lyms.platform.query.HighRiskSmsQuery; +import com.lyms.platform.query.PatientsQuery; +import org.apache.commons.collections.CollectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.mongodb.core.MongoTemplate; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * Created by lqy on 2017-07-18. + */ +public class CourseMsgGenerateWorker implements Runnable { + + + private static final Logger logger = LoggerFactory.getLogger(CourseMsgGenerateWorker.class); + + private List courseModels; + + private IBaseService baseService; + + private YunBookbuildingService yunBookbuildingService; + + + private SmsTemplateService smsTemplateService; + + private BabyBookbuildingService babyBookbuildingService; + + public CourseMsgGenerateWorker( List courseModels, IBaseService baseService, + YunBookbuildingService yunBookbuildingService, + SmsTemplateService smsTemplateService, + BabyBookbuildingService babyBookbuildingService) + { + this.courseModels = courseModels; + this.baseService = baseService; + this.yunBookbuildingService = yunBookbuildingService; + this.smsTemplateService = smsTemplateService; + this.babyBookbuildingService = babyBookbuildingService; + } + + + @Override + public void run() { + if (CollectionUtils.isNotEmpty(courseModels)) + { + for (CourseModel course : courseModels) + { + List configModels = baseService.getHospitalConfigs(course.getHospitalId()); + if (CollectionUtils.isEmpty(configModels) && configModels.get(0) != null) + { + continue; + } + + SmsConfigModel config = configModels.get(0); + + String hospitalId = course.getHospitalId(); + + logger.info("genernate course hospital id = "+hospitalId); + if (StringUtils.isEmpty(hospitalId)) + { + continue; + } + + //判断医院是否运行 + if (!baseService.isRunning(hospitalId)) + { + continue; + } + + String serviceStr = config.getSmsService(); + String serviceType = config.getServiceType(); + + //判断消息服务是否启动 + //0服务不提供,1 推送服务, 2 短信服务,3推送和短信服务 + int service = baseService.isStartService(SmsServiceEnums.YBZD.getId(), serviceStr,serviceType); + if (service == 0) + { + continue; + } + //课程对象id 0全部/空 1孕期 2儿童 ,3产后 (儿童占时没有) + if (course.getCourseObjId() == null || course.getCourseObjId() == 1) + { + generateYun(course,config,service); + generateChan(course,config,service); + } + else if (course.getCourseObjId() == 1) + { + generateYun(course,config,service); + } + else if (course.getCourseObjId() == 3) + { + generateChan(course,config,service); + } + } + } + } + + private void generateYun(CourseModel course,SmsConfigModel config,int service) + { + //发送短信集合 + MsgListRequest list = new MsgListRequest(); + List messages = new ArrayList<>(); + PatientsQuery patientsQuery = new PatientsQuery(); + patientsQuery.setYn(YnEnums.YES.getId()); + patientsQuery.setHospitalId(course.getHospitalId()); + patientsQuery.setLimit(1000); + int count = 1; + while (true) + { + List buildType = new ArrayList(); + buildType.add(0); + buildType.add(2); + patientsQuery.setSmsBuildTypeList(buildType); + //1孕妇 3 产妇 + patientsQuery.setType(1); + //分娩状态 + patientsQuery.setDueStatus(0); + + //末次月经必须大于当前时间减去42周视为未分娩孕妇 + Date lastMenses = DateUtils.getNewDate(new Date(),-42, "周", 0); + Date lastMensesMax = DateUtils.formatDate(lastMenses,DateUtils.Y_M_D); + patientsQuery.setLastMensesStart(lastMensesMax); + + patientsQuery.setNeed("true"); + patientsQuery.setPage(count); + + //查询符合条件的孕妇 + List patients = yunBookbuildingService.queryPregnantWithQuery(patientsQuery); + if (CollectionUtils.isNotEmpty(patients)) + { + for (Patients pat : patients) + { + //消息前缀 + String messagePrefix = baseService.getSmsPrefix(config, pat.getBookbuildingDoctor(), ServiceObjEnums.YUNOBJ.getId()); + String courseTime = DateUtils.getDateStr(course.getCourseTime(),DateUtils.Y_M_D_H_M)+" ("+DateUtils.getWeekOfDate(course.getCourseTime())+")"; + + String messageContent = "【"+messagePrefix+"】"; + MsgRequest request = HelperUtils.getMessageRequest(messageContent, pat.getPhone(), + ServiceObjEnums.YUNOBJ.getId(), SmsServiceEnums.YFXXKCTX.getId(), + course.getHospitalId(), course.getId(), pat.getId(), course.getCourseName(), + course.getCourseSpeaker(), courseTime, + WxTempleteIdEnums.YUN_XUE_KE_CHEN_TX.getId(),service); + + messages.add(request); + } + } + else + { + break; + } + count++; + } + list.setMessages(messages); + HelperUtils.sendMsg(list); + } + + private void generateChan(CourseModel course,SmsConfigModel config,int service) + { + //发送短信集合 + MsgListRequest list = new MsgListRequest(); + List messages = new ArrayList<>(); + + list.setMessages(messages); + HelperUtils.sendMsg(list); + } +} -- 1.8.3.1