|
@ -69,6 +69,7 @@ import com.yihu.jw.restmodel.hospital.consult.WlyyHospitalSysDictVO;
|
|
|
import com.yihu.jw.restmodel.hospital.doctor.WlyyDoctorWorkTimeVO;
|
|
|
import com.yihu.jw.restmodel.hospital.prescription.*;
|
|
|
import com.yihu.jw.restmodel.web.Envelop;
|
|
|
import com.yihu.jw.restmodel.web.ListEnvelop;
|
|
|
import com.yihu.jw.restmodel.web.MixEnvelop;
|
|
|
import com.yihu.jw.restmodel.web.PageEnvelop;
|
|
|
import com.yihu.jw.rm.hospital.BaseHospitalRequestMapping;
|
|
@ -107,6 +108,7 @@ import org.apache.commons.lang3.StringUtils;
|
|
|
import org.apache.http.NameValuePair;
|
|
|
import org.apache.http.message.BasicNameValuePair;
|
|
|
import org.checkerframework.checker.units.qual.A;
|
|
|
import org.checkerframework.checker.units.qual.MixedUnits;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
@ -272,6 +274,8 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
|
|
|
private HttpClientUtil httpClientUtil;
|
|
|
@Autowired
|
|
|
private YxTokenMappingDao yxTokenMappingDao;
|
|
|
@Autowired
|
|
|
private BaseNatAppointmentDao baseNatAppointmentDao;
|
|
|
|
|
|
|
|
|
|
|
@ -4682,6 +4686,55 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
//核算检测预约模板消息
|
|
|
public void sendNatWxTemplat(String name,String idcard,String mobile,String time,String orderNo,String relationName){
|
|
|
String first = "";
|
|
|
String contentMsg = "";
|
|
|
String msgUrl="";
|
|
|
String remark="";
|
|
|
String responseMsg="";
|
|
|
if ("natAppointmentRemind".equalsIgnoreCase(relationName)){
|
|
|
first = "尊敬的用户"+name+",您已完成线上自助核酸检测开单预约";
|
|
|
contentMsg = "申请人:"+name+";预约时间:"+time+";发票流水号:"+orderNo;
|
|
|
remark="请您持核酸开单预约信息和结算发票号、医保卡、就诊卡、电子健康卡,提前15分钟至我院五号楼北侧(急诊部后侧)核酸检测点2号窗口绑定检测。";
|
|
|
}
|
|
|
if ("xm_zsyy_wx".equalsIgnoreCase(wechatId)) {
|
|
|
String prefix = "https://hlwyy.xmzsh.com";
|
|
|
responseMsg = entranceService.ehospitalNotice(
|
|
|
name,
|
|
|
idcard,
|
|
|
mobile,
|
|
|
first,
|
|
|
prefix + msgUrl,
|
|
|
contentMsg,
|
|
|
remark);
|
|
|
logger.info("中山发送模板消息返回结果="+responseMsg);
|
|
|
System.out.println("结束发送模板消息");
|
|
|
}else if ("xm_zsyy_wx".equalsIgnoreCase(wechatId)) {
|
|
|
String prefix = "https://hlwyy.xmzsh.com";
|
|
|
responseMsg = entranceService.ehospitalNotice(
|
|
|
name,
|
|
|
idcard,
|
|
|
mobile,
|
|
|
first,
|
|
|
prefix + msgUrl,
|
|
|
contentMsg,
|
|
|
remark
|
|
|
);
|
|
|
logger.info("心脏发送模板消息返回结果="+responseMsg);
|
|
|
System.out.println("结束发送模板消息");
|
|
|
}
|
|
|
//保存发送模板记录,
|
|
|
WxPushLogDO wxPushLogDO = new WxPushLogDO();
|
|
|
wxPushLogDO.setCreateTime(new Date());
|
|
|
wxPushLogDO.setWechatId(wechatId);
|
|
|
wxPushLogDO.setReceiverName(name);
|
|
|
wxPushLogDO.setRequest(first+contentMsg+msgUrl);
|
|
|
wxPushLogDO.setResponse(responseMsg);
|
|
|
wxPushLogDO.setTempName("核算检测预约模板消息");
|
|
|
wxPushLogDao.save(wxPushLogDO);
|
|
|
|
|
|
}
|
|
|
|
|
|
public List<WlyyHospitalSysDictDO> findCancelReasonList() {
|
|
@ -10337,5 +10390,272 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
|
|
|
}
|
|
|
return doorServiceCount;
|
|
|
}
|
|
|
public MixEnvelop findJobCategory(){
|
|
|
String sqlPid = "select id as \"id\",name as \"name\",pid as \"pid\" from base_job_category where pid = 0 and del = 1";
|
|
|
List<Map<String,Object>> list = hibenateUtils.createSQLQuery(sqlPid);
|
|
|
if (list.size()>0){
|
|
|
for (Map<String,Object> map:list){
|
|
|
String child = "select id as \"id\",name as \"name\",pid as \"pid\" from base_job_category where del = 1";
|
|
|
String pid = map.get("id").toString();
|
|
|
child+=" and pid = "+pid;
|
|
|
List<Map<String,Object>> childList = hibenateUtils.createSQLQuery(child);
|
|
|
map.put("childList",childList);
|
|
|
}
|
|
|
}
|
|
|
MixEnvelop envelop = new MixEnvelop();
|
|
|
envelop.setDetailModelList(list);
|
|
|
return envelop;
|
|
|
}
|
|
|
public Map<String,Object> findRandomDoctor(){
|
|
|
String sql = "select t.id as \"id\"," +
|
|
|
"t.doctor_mapping_code as \"doctorMappingCode\"," +
|
|
|
"t.doctor_code as \"doctorCode\"," +
|
|
|
"t.dept_code as \"deptCode\"," +
|
|
|
"t.start_time as \"startTime\"," +
|
|
|
"t.end_time as \"endTime\"," +
|
|
|
"t.doctor_name as \"doctorName\"," +
|
|
|
"t.dept_name as \"deptName\" from base_doctor_time_mapping t where 1=1 ";
|
|
|
if ("xm_ykyy_wx".equalsIgnoreCase(wechatId)){
|
|
|
sql+=" order by dbms_random.value";
|
|
|
}else {
|
|
|
sql+=" ORDER BY RAND() ";
|
|
|
}
|
|
|
List<Map<String,Object>> list = hibenateUtils.createSQLQuery(sql);
|
|
|
if (list!=null&&list.size()>0){
|
|
|
return list.get(0);
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
public Map saveNatAppointment(String mediaCard,String patientId,String name,String cardNo,String cardType,String mobile,
|
|
|
String firstJobCode,String firstJobName,String secondJobCode,String secondJobName,String natTime,String address,String provinceName,String cityName,String townName,String streetName){
|
|
|
BaseNatAppointmentDO baseNatAppointmentDO= new BaseNatAppointmentDO();
|
|
|
Map returnMap = new HashMap();
|
|
|
net.sf.json.JSONObject jsondate = new JSONObject();
|
|
|
jsondate.put("checkPart","鼻/咽拭子");
|
|
|
jsondate.put("cardNo",mediaCard);
|
|
|
jsondate.put("chargeFlag","2");
|
|
|
jsondate.put("chargeCode","361322");
|
|
|
jsondate.put("icdCode","Z00.000");
|
|
|
jsondate.put("socialNo",cardNo);
|
|
|
jsondate.put("tellPhone",mobile);
|
|
|
jsondate.put("address1",provinceName);
|
|
|
jsondate.put("address2",cityName);
|
|
|
jsondate.put("address3",townName);
|
|
|
jsondate.put("address4",streetName);
|
|
|
jsondate.put("address5",2);
|
|
|
jsondate.put("area",address);
|
|
|
jsondate.put("target",2);
|
|
|
Map<String,Object> map = findRandomDoctor();
|
|
|
net.sf.json.JSONObject rs = new JSONObject();
|
|
|
if (map!=null){
|
|
|
try {
|
|
|
//先进行核算检测预约
|
|
|
JSONArray jsonArray = entranceService.BS10144(map.get("deptCode").toString(),map.get("doctorMappingCode").toString(),natTime,mediaCard,name,patientId,mobile,demoFlag);
|
|
|
|
|
|
String date = DateUtil.dateToStr(new Date(), "yyyy-MM-dd");
|
|
|
List<WlyyPatientRegisterDO> patientRegisterDOs = patientRegisterDao.findByPatientAndDateAndDoctorAndDel(patientId, date,map.get("doctorCode").toString() ,1);
|
|
|
if (patientRegisterDOs != null && patientRegisterDOs.size() > 0) {
|
|
|
WlyyPatientRegisterDO registerDO = patientRegisterDOs.get(0);
|
|
|
//判断是否已经挂号,如果已经挂号
|
|
|
if (StringUtils.isNotBlank(registerDO.getConNo()) && StringUtils.isNotBlank(registerDO.getRegisterNo())) {
|
|
|
net.sf.json.JSONObject res = new JSONObject();
|
|
|
res.put("@RESULT", "0");
|
|
|
logger.info("已经挂号 res: " + res.toString());
|
|
|
jsondate.put("serialNo",registerDO.getRegisterNo());
|
|
|
jsondate.put("dept",map.get("deptCode").toString());
|
|
|
jsondate.put("doctor",map.get("doctorMappingCode").toString());
|
|
|
}else {
|
|
|
returnMap.put("msg","已经挂号的数据有误");
|
|
|
returnMap.put("status","-1");
|
|
|
return map;
|
|
|
}
|
|
|
}else {
|
|
|
rs = entranceService.BS10111(cardNo, map.get("doctorMappingCode").toString(), map.get("deptCode").toString(), "31", "6", demoFlag);
|
|
|
net.sf.json.JSONObject res = rs.getJSONObject("resquest");
|
|
|
logger.info("挂号结果 res: " + res.toString());
|
|
|
String rsCode = res.getString("@RESULT");
|
|
|
if ("0".equals(rsCode)) {
|
|
|
//存储挂号号
|
|
|
// {"resquest":{"@RESULT":"0","@MSG":"完成","@serial_no":"47770476","@times":"28"}}
|
|
|
String serialNo = (String) res.get("@serial_no");
|
|
|
String conNo = (String) res.get("@times");
|
|
|
String xtgzh = (String) res.get("@xtgzh");
|
|
|
String realOrder = (String) res.get("@real_order");
|
|
|
logger.info("挂号流水 @serial_no: " + serialNo + " @times: " + conNo);
|
|
|
jsondate.put("serialNo",serialNo);
|
|
|
jsondate.put("dept",map.get("deptCode").toString());
|
|
|
jsondate.put("doctor",map.get("doctorMappingCode").toString());
|
|
|
//存储就诊记录
|
|
|
WlyyPatientRegisterDO registerDO = new WlyyPatientRegisterDO();
|
|
|
// 存储挂号医生与挂号科室
|
|
|
registerDO.setDoctor(map.get("doctorCode").toString());
|
|
|
registerDO.setDoctorName(map.get("doctorName").toString());
|
|
|
registerDO.setDept(map.get("deptCode").toString());
|
|
|
registerDO.setDeptName(map.get("deptName").toString());
|
|
|
registerDO.setRealOrder(realOrder);
|
|
|
registerDO.setXtgzh(xtgzh);
|
|
|
registerDO.setPatient(patientId);
|
|
|
registerDO.setPatientName(name);
|
|
|
//挂号流水号与挂号次数
|
|
|
registerDO.setRegisterNo(serialNo);
|
|
|
registerDO.setConNo(conNo);
|
|
|
registerDO.setCreateTime(new Date());
|
|
|
registerDO.setDel(1);
|
|
|
registerDO.setDate(DateUtil.dateToStr(new Date(), "yyyy-MM-dd"));
|
|
|
patientRegisterDao.save(registerDO);
|
|
|
//保存日志
|
|
|
WlyyHttpLogDO log = new WlyyHttpLogDO();
|
|
|
log.setCode("registerOutPatient");
|
|
|
log.setName("挂号");
|
|
|
log.setPatient(patientId);
|
|
|
log.setDoctor(map.get("doctorCode").toString());
|
|
|
log.setResponse(rs.toString());
|
|
|
log.setStatus(rsCode);
|
|
|
log.setCreateTime(new Date());
|
|
|
wlyyHttpLogDao.save(log);
|
|
|
|
|
|
} else if ("-2".equals(rsCode)) {
|
|
|
String serialNo = (String) res.get("@serial_no");
|
|
|
String xtgzh = (String) res.get("@xtgzh");
|
|
|
String realOrder = (String) res.get("@real_order");
|
|
|
String conNo = (String) res.get("@times");
|
|
|
jsondate.put("serialNo",serialNo);
|
|
|
jsondate.put("dept",map.get("deptCode").toString());
|
|
|
jsondate.put("doctor",map.get("doctorMappingCode").toString());
|
|
|
logger.info("挂号流水 @serial_no: " + serialNo + " @times: " + conNo);
|
|
|
//存储就诊记录
|
|
|
WlyyPatientRegisterDO registerDO = new WlyyPatientRegisterDO();
|
|
|
registerDO.setDoctor(map.get("doctorCode").toString());
|
|
|
registerDO.setDoctorName(map.get("doctorName").toString());
|
|
|
registerDO.setDept(map.get("deptCode").toString());
|
|
|
registerDO.setDeptName(map.get("deptName").toString());
|
|
|
registerDO.setRealOrder(realOrder);
|
|
|
registerDO.setXtgzh(xtgzh);
|
|
|
registerDO.setPatient(patientId);
|
|
|
registerDO.setPatientName(name);
|
|
|
registerDO.setRegisterNo(serialNo);
|
|
|
registerDO.setConNo(conNo);
|
|
|
registerDO.setCreateTime(new Date());
|
|
|
registerDO.setDate(DateUtil.dateToStr(new Date(), "yyyy-MM-dd"));
|
|
|
|
|
|
patientRegisterDao.save(registerDO);
|
|
|
//保存日志
|
|
|
WlyyHttpLogDO log = new WlyyHttpLogDO();
|
|
|
log.setCode("registerOutPatient");
|
|
|
log.setName("挂号");
|
|
|
log.setPatient(patientId);
|
|
|
log.setDoctor(map.get("doctorCode").toString());
|
|
|
log.setResponse(rs.toString());
|
|
|
log.setStatus(rsCode);
|
|
|
log.setCreateTime(new Date());
|
|
|
wlyyHttpLogDao.save(log);
|
|
|
}else {
|
|
|
returnMap.put("msg","请求挂号失败");
|
|
|
returnMap.put("status","-1");
|
|
|
return map;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
logger.info("saveNatAppointment params:"+jsondate.toString());
|
|
|
try {
|
|
|
JSONObject jsonObject = entranceService.BS10112(jsondate.toString(),flag);
|
|
|
//判断返回结果
|
|
|
String prers = jsonObject.getString("@RESULT");
|
|
|
//保存日志
|
|
|
WlyyHttpLogDO log = new WlyyHttpLogDO();
|
|
|
log.setCode("saveNatAppointment");
|
|
|
log.setName("核酸检测开方");
|
|
|
log.setPatient(patientId);
|
|
|
log.setDoctor(map.get("doctorCode").toString());
|
|
|
log.setResponse(jsonObject.toString());
|
|
|
log.setRequest(jsondate.toString());
|
|
|
log.setCreateTime(new Date());
|
|
|
wlyyHttpLogDao.save(log);
|
|
|
if ("0".equals(prers)) {
|
|
|
String realOrder = jsonObject.getString("@real_order");
|
|
|
baseNatAppointmentDO.setRealOrder(realOrder);
|
|
|
//成功后发送模板消息
|
|
|
sendNatWxTemplat(name,cardNo,mobile,natTime,realOrder,"natAppointmentRemind");
|
|
|
}else{
|
|
|
returnMap.put("msg","核酸检测开方失败");
|
|
|
returnMap.put("status","-1");
|
|
|
return map;
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
baseNatAppointmentDO.setMedicard(mediaCard);
|
|
|
baseNatAppointmentDO.setName(name);
|
|
|
baseNatAppointmentDO.setCardNo(cardNo);
|
|
|
baseNatAppointmentDO.setCardType(cardType);
|
|
|
baseNatAppointmentDO.setAddress(address);
|
|
|
baseNatAppointmentDO.setAppointmentTime(DateUtil.strToDate(natTime,"yyyy-MM-dd hh:mm:ss"));
|
|
|
baseNatAppointmentDO.setCityName(cityName);
|
|
|
baseNatAppointmentDO.setFirstJobCode(firstJobCode);
|
|
|
baseNatAppointmentDO.setFirstJobName(firstJobName);
|
|
|
baseNatAppointmentDO.setSecondJobCode(secondJobCode);
|
|
|
baseNatAppointmentDO.setSecondJobName(secondJobName);
|
|
|
baseNatAppointmentDO.setProvinceName(provinceName);
|
|
|
baseNatAppointmentDO.setTownName(townName);
|
|
|
baseNatAppointmentDO.setStreet(streetName);
|
|
|
baseNatAppointmentDO.setPatientId(patientId);
|
|
|
baseNatAppointmentDO.setIsSuccess("0");
|
|
|
baseNatAppointmentDO.setPayStatus("0");
|
|
|
baseNatAppointmentDO.setCreateTime(new Date());
|
|
|
baseNatAppointmentDO.setMobile(mobile);
|
|
|
baseNatAppointmentDao.save(baseNatAppointmentDO);
|
|
|
returnMap.put("msg","预约成功");
|
|
|
returnMap.put("status","200");
|
|
|
return map;
|
|
|
}
|
|
|
public MixEnvelop getNatRecords(String patientId,Integer page ,Integer pageSize){
|
|
|
String sql = "select t.name as \"name\"," +
|
|
|
"t.card_no as \"cardNo\"," +
|
|
|
"t.card_type as \"cardType\"," +
|
|
|
"t.mobile as \"mobile\"," +
|
|
|
"t.inspection_name as \"inspectionName\"," +
|
|
|
"t.real_order as \"realOrder\"," +
|
|
|
"t.real_order as \"realOrder\"," +
|
|
|
"t.is_success as \"isSuccess\"," +
|
|
|
"t.create_time as \"createTime\"," +
|
|
|
"t.appointment_time as \"appointmentTime\" " +
|
|
|
" from base_nat_appointment t where 1=1 ";
|
|
|
if (StringUtils.isNoneBlank(patientId)){
|
|
|
sql+=" and t.patient_id ='"+patientId+"'";
|
|
|
}
|
|
|
List<Map<String ,Object>> list = hibenateUtils.createSQLQuery(sql,page,pageSize);
|
|
|
List<Map<String ,Object>> listCount = hibenateUtils.createSQLQuery(sql);
|
|
|
MixEnvelop mixnvelop = new MixEnvelop();
|
|
|
if (listCount!=null&&listCount.size()>0){
|
|
|
mixnvelop.setCurrPage(page);
|
|
|
mixnvelop.setPageSize(pageSize);
|
|
|
mixnvelop.setTotalCount(listCount.size());
|
|
|
mixnvelop.setDetailModelList(list);
|
|
|
|
|
|
}
|
|
|
return mixnvelop;
|
|
|
|
|
|
}
|
|
|
|
|
|
public List<Map<String,Object>> findBaseAddress(String addressFlag,String parentName){
|
|
|
String sql="";
|
|
|
if ("1".equalsIgnoreCase(addressFlag)){
|
|
|
sql+="select t.province_name as \"provinceName\" from base_address_mapping t group by t.province_name ";
|
|
|
}else if("2".equalsIgnoreCase(addressFlag)){
|
|
|
sql+="select t.city_name as \"cityName\" from base_address_mapping t where t.province_name ='"+parentName+"' and city_name <> '' and city_name is not null group by t.city_name ";
|
|
|
}else if("3".equalsIgnoreCase(addressFlag)){
|
|
|
sql+="select t.town_name as \"townName\" from base_address_mapping t where t.city_name ='"+parentName+"' and town_name <> '' and town_name is not null group by t.town_name";
|
|
|
}else if("4".equalsIgnoreCase(addressFlag)){
|
|
|
sql+="select t.street_name as \"streetName\" from base_address_mapping t where t.town_name ='"+parentName+"' and street_name <> '' and street_name is not null";
|
|
|
}
|
|
|
List<Map<String,Object>> list = hibenateUtils.createSQLQuery(sql);
|
|
|
return list;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|