|  | @ -0,0 +1,153 @@
 | 
	
		
			
				|  |  | package com.yihu.jw.service.channel;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | import com.fasterxml.jackson.databind.ObjectMapper;
 | 
	
		
			
				|  |  | import com.yihu.jw.doctor.dao.BaseDoctorDao;
 | 
	
		
			
				|  |  | import com.yihu.jw.entity.hospital.consult.WlyyHospitalSysDictDO;
 | 
	
		
			
				|  |  | import com.yihu.jw.entity.hospital.message.SystemMessageDO;
 | 
	
		
			
				|  |  | import com.yihu.jw.entity.hospital.prescription.WlyyOutpatientDO;
 | 
	
		
			
				|  |  | import com.yihu.jw.hospital.dict.WlyyHospitalSysDictDao;
 | 
	
		
			
				|  |  | import com.yihu.jw.hospital.message.dao.SystemMessageDao;
 | 
	
		
			
				|  |  | import com.yihu.jw.hospital.prescription.dao.OutpatientDao;
 | 
	
		
			
				|  |  | import com.yihu.jw.hospital.prescription.service.PrescriptionService;
 | 
	
		
			
				|  |  | import com.yihu.jw.util.RemindDoctorJob;
 | 
	
		
			
				|  |  | import com.yihu.jw.util.common.IdCardUtil;
 | 
	
		
			
				|  |  | import com.yihu.jw.util.date.DateUtil;
 | 
	
		
			
				|  |  | import com.yihu.jw.utils.YkyySMSService;
 | 
	
		
			
				|  |  | import com.yihu.jw.wechat.enterprise.EnterpriseService;
 | 
	
		
			
				|  |  | import net.sf.json.JSONObject;
 | 
	
		
			
				|  |  | import org.apache.commons.lang3.StringUtils;
 | 
	
		
			
				|  |  | import org.slf4j.Logger;
 | 
	
		
			
				|  |  | import org.slf4j.LoggerFactory;
 | 
	
		
			
				|  |  | import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  | import org.springframework.beans.factory.annotation.Value;
 | 
	
		
			
				|  |  | import org.springframework.stereotype.Component;
 | 
	
		
			
				|  |  | import org.springframework.stereotype.Service;
 | 
	
		
			
				|  |  | import org.springframework.transaction.annotation.Transactional;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | import java.util.Date;
 | 
	
		
			
				|  |  | import java.util.List;
 | 
	
		
			
				|  |  | import java.util.concurrent.TimeUnit;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | @Service
 | 
	
		
			
				|  |  | public class RemindDoctorService {
 | 
	
		
			
				|  |  |     private static final Logger logger = LoggerFactory.getLogger(RemindDoctorService.class);
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private SystemMessageDao systemMessageDao;
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private OutpatientDao outpatientDao;
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private BaseDoctorDao baseDoctorDao;
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private EnterpriseService enterpriseService;
 | 
	
		
			
				|  |  |     @Value("${wechat.id}")
 | 
	
		
			
				|  |  |     private String wechatId;
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private PrescriptionService prescriptionService;
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private WlyyHospitalSysDictDao wlyyHospitalSysDictDao;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public void sendSystemMessage() {
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             List<WlyyOutpatientDO> list = outpatientDao.findDoctorRemindMessage();
 | 
	
		
			
				|  |  |             WlyyHospitalSysDictDO wlyyHospitalSysDictDO = wlyyHospitalSysDictDao.findById("isCirculation");//是否重复提醒
 | 
	
		
			
				|  |  |             List<WlyyHospitalSysDictDO> dictDOS =wlyyHospitalSysDictDao.findByDictNameAndDictCode("RECEPTION_REMINDER","time");
 | 
	
		
			
				|  |  |             Long doctorRemindTime =0l;
 | 
	
		
			
				|  |  |             if (dictDOS!=null&&dictDOS.size()>0){
 | 
	
		
			
				|  |  |                 doctorRemindTime = Long.parseLong(dictDOS.get(0).getDictValue());
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             String baseUrl = prescriptionService.findDomainUrlInDict();
 | 
	
		
			
				|  |  |             String msg = "";
 | 
	
		
			
				|  |  |             String sex = "";
 | 
	
		
			
				|  |  |             String age="";
 | 
	
		
			
				|  |  |             String date = "";
 | 
	
		
			
				|  |  |             String title = "";
 | 
	
		
			
				|  |  |             for (WlyyOutpatientDO wlyyOutpatientDO : list) {
 | 
	
		
			
				|  |  |                 Long lastRemindTime=wlyyOutpatientDO.getLastRemindTime()==null?wlyyOutpatientDO.getCreateTime().getTime():wlyyOutpatientDO.getLastRemindTime().getTime();
 | 
	
		
			
				|  |  |                 Long nowTime = new Date().getTime();
 | 
	
		
			
				|  |  |                 if (StringUtils.isNoneBlank(wlyyOutpatientDO.getDoctor())&&!StringUtils.isNoneBlank(wlyyOutpatientDO.getRemindDoctor())&&(nowTime-lastRemindTime)>doctorRemindTime*1000*60) {
 | 
	
		
			
				|  |  |                     logger.info("条件满足开始发送提醒"+wlyyOutpatientDO.getId());
 | 
	
		
			
				|  |  |                     sex= IdCardUtil.getSexForIdcard(wlyyOutpatientDO.getIdcard());
 | 
	
		
			
				|  |  |                     age = IdCardUtil.getAgeForIdcard(wlyyOutpatientDO.getIdcard())+"";
 | 
	
		
			
				|  |  |                     Long createTime = wlyyOutpatientDO.getCreateTime().getTime();
 | 
	
		
			
				|  |  |                     Long minusts = TimeUnit.MILLISECONDS.toMinutes(nowTime - createTime);
 | 
	
		
			
				|  |  |                     SystemMessageDO systemMessageDO = new SystemMessageDO();
 | 
	
		
			
				|  |  |                     if ("2".equals(wlyyOutpatientDO.getOutpatientType())) {
 | 
	
		
			
				|  |  |                         systemMessageDO.setTitle("协同门诊消息提醒");
 | 
	
		
			
				|  |  |                         systemMessageDO.setType("3");
 | 
	
		
			
				|  |  |                     } else if ("3".equals(wlyyOutpatientDO.getOutpatientType())) {//专家咨询
 | 
	
		
			
				|  |  |                         //1.图文 2.视频 3家医
 | 
	
		
			
				|  |  |                         if ("1".equals(wlyyOutpatientDO.getType())) {
 | 
	
		
			
				|  |  |                             systemMessageDO.setTitle("图文咨询消息提醒");
 | 
	
		
			
				|  |  |                             systemMessageDO.setType("18");
 | 
	
		
			
				|  |  |                             title = "图文咨询消息提醒";
 | 
	
		
			
				|  |  |                             msg = wlyyOutpatientDO.getPatientName()+"("+sex+" "+age+"岁)向您发起了图文咨询,已等待"+minusts+"分钟。点击接诊";
 | 
	
		
			
				|  |  |                         } else if ("3".equals(wlyyOutpatientDO.getType())) {
 | 
	
		
			
				|  |  |                             systemMessageDO.setTitle("家医咨询消息提醒");
 | 
	
		
			
				|  |  |                             systemMessageDO.setType("15");
 | 
	
		
			
				|  |  |                         } else {
 | 
	
		
			
				|  |  |                             systemMessageDO.setTitle("视频咨询消息提醒");
 | 
	
		
			
				|  |  |                             systemMessageDO.setType("17");
 | 
	
		
			
				|  |  |                             title = "视频咨询消息提醒";
 | 
	
		
			
				|  |  |                             date = DateUtil.dateToStrLong(wlyyOutpatientDO.getRegisterDate());
 | 
	
		
			
				|  |  |                             msg = wlyyOutpatientDO.getPatientName()+"("+sex+" "+age+"岁)预约了"+date+"的视频咨询,点击查看";
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                     } else if ("1".equals(wlyyOutpatientDO.getOutpatientType())) {//在线复诊
 | 
	
		
			
				|  |  |                         //1.图文 2.视频
 | 
	
		
			
				|  |  |                         if ("1".equals(wlyyOutpatientDO.getType())) {
 | 
	
		
			
				|  |  |                             systemMessageDO.setTitle("图文复诊消息提醒");
 | 
	
		
			
				|  |  |                             systemMessageDO.setType("1");
 | 
	
		
			
				|  |  |                             title = "图文复诊消息提醒";
 | 
	
		
			
				|  |  |                             msg = wlyyOutpatientDO.getPatientName()+"("+sex+" "+age+"岁)向您发起了图文复诊,已等待"+minusts+"分钟。点击接诊";
 | 
	
		
			
				|  |  |                         } else {
 | 
	
		
			
				|  |  |                             systemMessageDO.setTitle("视频复诊消息提醒");
 | 
	
		
			
				|  |  |                             systemMessageDO.setType("2");
 | 
	
		
			
				|  |  |                             title = "视频复诊消息提醒";
 | 
	
		
			
				|  |  |                             date = DateUtil.dateToStrLong(wlyyOutpatientDO.getRegisterDate());
 | 
	
		
			
				|  |  |                             msg = wlyyOutpatientDO.getPatientName()+"("+sex+" "+age+"岁)预约了"+date+"的视频复诊,点击查看";
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                     }
 | 
	
		
			
				|  |  |                     JSONObject data = new JSONObject();
 | 
	
		
			
				|  |  |                     data.put("name", wlyyOutpatientDO.getPatientName());
 | 
	
		
			
				|  |  |                     data.put("age", IdCardUtil.getAgeForIdcard(wlyyOutpatientDO.getIdcard()));
 | 
	
		
			
				|  |  |                     data.put("gender", IdCardUtil.getSexForIdcard_new(wlyyOutpatientDO.getIdcard()));
 | 
	
		
			
				|  |  |                     data.put("question", wlyyOutpatientDO.getDescription());
 | 
	
		
			
				|  |  |                     data.put("msg", systemMessageDO.getTitle());
 | 
	
		
			
				|  |  |                     data.put("waitTime",minusts);
 | 
	
		
			
				|  |  |                     systemMessageDO.setData(data.toString());
 | 
	
		
			
				|  |  |                     systemMessageDO.setReceiver(wlyyOutpatientDO.getDoctor());
 | 
	
		
			
				|  |  |                     systemMessageDO.setReceiverName(wlyyOutpatientDO.getDoctorName());
 | 
	
		
			
				|  |  |                     systemMessageDO.setRelationCode(wlyyOutpatientDO.getId());
 | 
	
		
			
				|  |  |                     systemMessageDO.setSender(wlyyOutpatientDO.getPatient());
 | 
	
		
			
				|  |  |                     systemMessageDO.setSenderName(wlyyOutpatientDO.getPatientName());
 | 
	
		
			
				|  |  |                     systemMessageDO.setRelationCode(wlyyOutpatientDO.getId());
 | 
	
		
			
				|  |  |                     systemMessageDO.setIsRead("0");
 | 
	
		
			
				|  |  |                     systemMessageDO.setDel("1");
 | 
	
		
			
				|  |  |                     systemMessageDO.setCreateTime(new Date());
 | 
	
		
			
				|  |  |                     systemMessageDao.save(systemMessageDO);
 | 
	
		
			
				|  |  |                     //系统消息结束===开始发送企业模板消息
 | 
	
		
			
				|  |  |                     if (wechatId.equalsIgnoreCase("xm_zsyy_wx")){
 | 
	
		
			
				|  |  |                         String url=baseUrl+"/hlwyy/ims-app-web/#/onlineChat/detail?_rs_title="+wlyyOutpatientDO.getDescription()+"&type=3&id="+wlyyOutpatientDO.getId();
 | 
	
		
			
				|  |  |                         enterpriseService.sendTWMesByDoctor("zsyy",wlyyOutpatientDO.getDoctor(),title,msg,url);
 | 
	
		
			
				|  |  |                     }else if(wechatId.equalsIgnoreCase("xm_ykyy_wx")){
 | 
	
		
			
				|  |  |                         String url=baseUrl+"/ims-app-web/#/onlineChat/detail?_rs_title="+wlyyOutpatientDO.getDescription()+"&type=3&id="+wlyyOutpatientDO.getId();
 | 
	
		
			
				|  |  |                         enterpriseService.sendTWMesByDoctor("xm_ykyy_wx",wlyyOutpatientDO.getDoctor(),title,msg,url);
 | 
	
		
			
				|  |  |                     }else if (wechatId.equalsIgnoreCase("xm_xzzx_wx")){
 | 
	
		
			
				|  |  |                         String url=baseUrl+"/hlwyy/ims-app-web/#/onlineChat/detail?_rs_title="+wlyyOutpatientDO.getDescription()+"&type=3&id="+wlyyOutpatientDO.getId();
 | 
	
		
			
				|  |  |                         enterpriseService.sendTWMesByDoctor("xm_xzzx_wx",wlyyOutpatientDO.getDoctor(),title,msg,url);
 | 
	
		
			
				|  |  |                     }
 | 
	
		
			
				|  |  |                     if (wlyyHospitalSysDictDO!=null){
 | 
	
		
			
				|  |  |                         if ("1".equalsIgnoreCase(wlyyHospitalSysDictDO.getDictValue())){
 | 
	
		
			
				|  |  |                             wlyyOutpatientDO.setRemindDoctor("1");
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                     }
 | 
	
		
			
				|  |  |                     wlyyOutpatientDO.setLastRemindTime(new Date());
 | 
	
		
			
				|  |  |                     outpatientDao.save(wlyyOutpatientDO);
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }catch (Exception e){
 | 
	
		
			
				|  |  |             e.printStackTrace();
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | }
 |