|
@ -0,0 +1,179 @@
|
|
|
package com.yihu.jw.service.channel;
|
|
|
|
|
|
import com.yihu.jw.entity.base.patient.BasePatientDO;
|
|
|
import com.yihu.jw.entity.hospital.consult.WlyyHospitalWaitingRoomDO;
|
|
|
import com.yihu.jw.entity.hospital.doctor.WlyyPatientRegisterTimeDO;
|
|
|
import com.yihu.jw.entity.hospital.message.SystemMessageDO;
|
|
|
import com.yihu.jw.entity.hospital.prescription.WlyyOutpatientDO;
|
|
|
import com.yihu.jw.entity.order.BusinessOrderDO;
|
|
|
import com.yihu.jw.hospital.consult.dao.HospitalWaitingRoomDao;
|
|
|
import com.yihu.jw.hospital.doctor.dao.PatientRegisterTimeDao;
|
|
|
import com.yihu.jw.hospital.message.service.SystemMessageService;
|
|
|
import com.yihu.jw.hospital.prescription.dao.OutpatientDao;
|
|
|
import com.yihu.jw.hospital.prescription.dao.PrescriptionDao;
|
|
|
import com.yihu.jw.hospital.prescription.dao.PrescriptionDiagnosisDao;
|
|
|
import com.yihu.jw.hospital.prescription.dao.PrescriptionInfoDao;
|
|
|
import com.yihu.jw.hospital.prescription.service.PrescriptionLogService;
|
|
|
import com.yihu.jw.hospital.prescription.service.PrescriptionService;
|
|
|
import com.yihu.jw.hospital.ykyy.service.YkyyService;
|
|
|
import com.yihu.jw.im.service.ImService;
|
|
|
import com.yihu.jw.order.BusinessOrderService;
|
|
|
import com.yihu.jw.order.dao.BusinessOrderDao;
|
|
|
import com.yihu.jw.patient.dao.BasePatientDao;
|
|
|
import com.yihu.jw.util.common.IdCardUtil;
|
|
|
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.jdbc.core.JdbcTemplate;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.util.Calendar;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
|
|
|
@Component
|
|
|
@Transactional
|
|
|
public class TimeoutOverDueService {
|
|
|
private static Logger logger = LoggerFactory.getLogger(TimeoutOverDueService.class);
|
|
|
@Autowired
|
|
|
private JdbcTemplate jdbcTemplate;
|
|
|
@Value("${wechat.ids}")
|
|
|
private String wechatId;
|
|
|
@Value("${hlwyyEntrance.url}")
|
|
|
private String hlwyyEntranceUrl;
|
|
|
@Autowired
|
|
|
private PrescriptionDao prescriptionDao;
|
|
|
@Autowired
|
|
|
private PrescriptionDiagnosisDao prescriptionDiagnosisDao;
|
|
|
@Autowired
|
|
|
private PrescriptionInfoDao prescriptionInfoDao;
|
|
|
@Autowired
|
|
|
private OutpatientDao outpatientDao;
|
|
|
@Autowired
|
|
|
private ImService imService;
|
|
|
@Autowired
|
|
|
private BusinessOrderDao businessOrderDao;
|
|
|
@Autowired
|
|
|
private BusinessOrderService businessOrderService;
|
|
|
@Autowired
|
|
|
private PrescriptionLogService prescriptionLogService;
|
|
|
@Autowired
|
|
|
private HospitalWaitingRoomDao hospitalWaitingRoomDao;
|
|
|
@Autowired
|
|
|
private PatientRegisterTimeDao patientRegisterTimeDao;
|
|
|
@Autowired
|
|
|
private YkyyService ykyyService;
|
|
|
@Autowired
|
|
|
private BasePatientDao basePatientDao;
|
|
|
@Autowired
|
|
|
private PrescriptionService prescriptionService;
|
|
|
@Autowired
|
|
|
private SystemMessageService systemMessageService;
|
|
|
/**
|
|
|
* 取消未结束门诊
|
|
|
*/
|
|
|
public void cancelOutPatientOver(){
|
|
|
logger.info("进入结束超时未接诊的门诊");
|
|
|
List<WlyyOutpatientDO> timeout = outpatientDao.findAllWaitingOutpatient();
|
|
|
if (null!=timeout&&timeout.size()>0){
|
|
|
logger.info("开始结束超时未接诊的门诊");
|
|
|
String cancelValue = "超时订单系统自动取消";
|
|
|
String cancelRemark = "当天未接诊的门诊订单自动取消";
|
|
|
for(WlyyOutpatientDO wlyyOutpatientDO:timeout){
|
|
|
String outPatientId = wlyyOutpatientDO.getId();
|
|
|
//判断医生是否接诊
|
|
|
List<WlyyHospitalWaitingRoomDO> roomDOs = hospitalWaitingRoomDao.findByOutpatientId(outPatientId);
|
|
|
if (roomDOs != null && roomDOs.size() > 0) {
|
|
|
for (WlyyHospitalWaitingRoomDO roomDO : roomDOs) {
|
|
|
if (roomDO.getVisitStatus() == 2) {
|
|
|
logger.info("id为:"+outPatientId+"的门诊已被医生接诊");
|
|
|
} else {
|
|
|
roomDO.setVisitStatus(-1);
|
|
|
logger.info("修改候诊室状态,将候诊病人移除候诊室");
|
|
|
hospitalWaitingRoomDao.save(roomDO);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
//更改门诊状态
|
|
|
wlyyOutpatientDO.setStatus("-1");
|
|
|
String description = null;
|
|
|
wlyyOutpatientDO.setDoctorCancelRemark(cancelRemark);
|
|
|
wlyyOutpatientDO.setDoctorCancelType("6");
|
|
|
wlyyOutpatientDO.setDoctorCancelValue(cancelValue);
|
|
|
wlyyOutpatientDO.setEndTime(new Date());
|
|
|
wlyyOutpatientDO.setOperator("system");
|
|
|
description = cancelValue;
|
|
|
//系统消息
|
|
|
SystemMessageDO messageDO = new SystemMessageDO();
|
|
|
messageDO.setTitle("超时订单系统自动取消");
|
|
|
messageDO.setType("13");
|
|
|
messageDO.setSender(wlyyOutpatientDO.getDoctor());
|
|
|
messageDO.setSenderName(wlyyOutpatientDO.getDoctorName());
|
|
|
messageDO.setRelationCode(wlyyOutpatientDO.getId());
|
|
|
messageDO.setReceiver(wlyyOutpatientDO.getPatient());
|
|
|
messageDO.setReceiverName(wlyyOutpatientDO.getPatientName());
|
|
|
net.sf.json.JSONObject data = new net.sf.json.JSONObject();
|
|
|
try {
|
|
|
data.put("name", wlyyOutpatientDO.getPatientName());
|
|
|
data.put("age", IdCardUtil.getAgeForIdcard(wlyyOutpatientDO.getIdcard()));
|
|
|
data.put("gender", IdCardUtil.getSexForIdcard(wlyyOutpatientDO.getIdcard()));
|
|
|
data.put("question", wlyyOutpatientDO.getIcd10Name());
|
|
|
String msg = "";
|
|
|
if ("1".equalsIgnoreCase(wlyyOutpatientDO.getType())) {
|
|
|
data.put("type", "9");
|
|
|
msg += wlyyOutpatientDO.getPatientName() + ",您好! 您有一个图文复诊已被系统取消,取消原因:" + cancelValue + "。取消说明:" + cancelRemark + "。";
|
|
|
prescriptionService.sendWxTemplateMsg(wechatId, wlyyOutpatientDO.getId(),null, "9", "systemCancelRemind", cancelRemark);
|
|
|
}
|
|
|
if ("2".equalsIgnoreCase(wlyyOutpatientDO.getType())) {
|
|
|
data.put("type", "16");
|
|
|
msg += wlyyOutpatientDO.getPatientName() + ",您好! 您有一个视频复诊已被系统取消,取消原因:" + cancelValue + "。取消说明:" + cancelRemark + "。";
|
|
|
prescriptionService.sendWxTemplateMsg(wechatId, wlyyOutpatientDO.getId(),null, "16", "systemCancelRemind", cancelRemark);
|
|
|
}
|
|
|
data.put("msg", msg);
|
|
|
messageDO.setData(data.toString());
|
|
|
systemMessageService.saveMessage(messageDO);
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
//推送消息到眼科通
|
|
|
BasePatientDO patient = basePatientDao.findById(wlyyOutpatientDO.getPatient());
|
|
|
if ("xm_ykyy_wx".equalsIgnoreCase(wechatId)) {
|
|
|
logger.info("推送消息到眼科通");
|
|
|
ykyyService.pushNotificationToYktPatient(patient.getYktId(), messageDO.getTitle(), data.get("msg").toString());
|
|
|
}
|
|
|
logger.info("修改保存的门诊记录:"+wlyyOutpatientDO.getId());
|
|
|
|
|
|
//删除门诊号源
|
|
|
List<WlyyPatientRegisterTimeDO> list = patientRegisterTimeDao.findByOutpatientId(wlyyOutpatientDO.getId());
|
|
|
if (list != null && list.size() > 0) {
|
|
|
patientRegisterTimeDao.delete(list);
|
|
|
}
|
|
|
BusinessOrderDO businessOrderDO = businessOrderDao.selectByRelationCode(outPatientId);
|
|
|
try {
|
|
|
if (wechatId.equalsIgnoreCase("xm_ykyy_wx")) {
|
|
|
businessOrderService.orderRefund(wechatId, wlyyOutpatientDO.getConsumer(), businessOrderDO.getOrderNo(), businessOrderDO.getPayPrice(), description);
|
|
|
//眼科接诊时更新眼科通状态
|
|
|
if (businessOrderDO!=null){
|
|
|
ykyyService.updateYktOrderStatus(businessOrderDO.getOrderNo(),"2");
|
|
|
}
|
|
|
} else if (wechatId.equalsIgnoreCase("xm_zsyy_wx")) {
|
|
|
|
|
|
/*
|
|
|
businessOrderService.ylzOrderRefund(wechatId, wlyyOutpatientDO.getPatient(), businessOrderDO.getOrderNo(), businessOrderDO.getPayPrice(), description);
|
|
|
*/
|
|
|
|
|
|
}
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
logger.info(wlyyOutpatientDO.getId()+"的门诊记录设置为取消");
|
|
|
}
|
|
|
}
|
|
|
outpatientDao.save(timeout);
|
|
|
}
|
|
|
}
|
|
|
|