|
@ -0,0 +1,4962 @@
|
|
|
package com.yihu.jw.hospital.prescription.service;
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
import com.yihu.jw.dict.dao.DictHospitalDeptDao;
|
|
|
import com.yihu.jw.doctor.dao.BaseDoctorDao;
|
|
|
import com.yihu.jw.doctor.dao.BaseDoctorHospitalDao;
|
|
|
import com.yihu.jw.doctor.service.BaseDoctorInfoService;
|
|
|
import com.yihu.jw.entity.base.dict.DictHospitalDeptDO;
|
|
|
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
|
|
|
import com.yihu.jw.entity.base.doctor.BaseDoctorHospitalDO;
|
|
|
import com.yihu.jw.entity.base.org.BaseDoctorPatientFollowDO;
|
|
|
import com.yihu.jw.entity.base.org.BaseOrgDO;
|
|
|
import com.yihu.jw.entity.base.patient.BasePatientDO;
|
|
|
import com.yihu.jw.entity.base.patient.PatientMedicareCardDO;
|
|
|
import com.yihu.jw.entity.hospital.consult.WlyyDoctorClinicRoomDO;
|
|
|
import com.yihu.jw.entity.hospital.consult.WlyyHospitalSysDictDO;
|
|
|
import com.yihu.jw.entity.hospital.consult.WlyyHospitalWaitingRoomDO;
|
|
|
import com.yihu.jw.entity.hospital.dict.WlyyChargeDictDO;
|
|
|
import com.yihu.jw.entity.hospital.doctor.WlyyDoctorOnlineTimeDO;
|
|
|
import com.yihu.jw.entity.hospital.doctor.WlyyDoctorWorkTimeDO;
|
|
|
import com.yihu.jw.entity.hospital.doctor.WlyyPatientRegisterTimeDO;
|
|
|
import com.yihu.jw.entity.hospital.httplog.WlyyHttpLogDO;
|
|
|
import com.yihu.jw.entity.hospital.mapping.DoctorMappingDO;
|
|
|
import com.yihu.jw.entity.hospital.message.SystemMessageDO;
|
|
|
import com.yihu.jw.entity.hospital.prescription.*;
|
|
|
import com.yihu.jw.entity.ylzinfo.OauthYlzConfigDO;
|
|
|
import com.yihu.jw.file_upload.FileUploadService;
|
|
|
import com.yihu.jw.hospital.consult.dao.HospitalWaitingRoomDao;
|
|
|
import com.yihu.jw.hospital.dict.WlyyChargeDictDao;
|
|
|
import com.yihu.jw.hospital.dict.WlyyHospitalSysDictDao;
|
|
|
import com.yihu.jw.hospital.doctor.dao.DoctorWorkTimeDao;
|
|
|
import com.yihu.jw.hospital.doctor.dao.PatientRegisterTimeDao;
|
|
|
import com.yihu.jw.hospital.doctor.dao.WlyyDoctorOnlineTimeDao;
|
|
|
import com.yihu.jw.hospital.httplog.dao.WlyyHttpLogDao;
|
|
|
import com.yihu.jw.hospital.mapping.service.DoctorMappingService;
|
|
|
import com.yihu.jw.hospital.mapping.service.PatientMappingService;
|
|
|
import com.yihu.jw.hospital.message.service.SystemMessageService;
|
|
|
import com.yihu.jw.hospital.prescription.dao.*;
|
|
|
import com.yihu.jw.hospital.prescription.service.entrance.EntranceService;
|
|
|
import com.yihu.jw.org.dao.BaseOrgDao;
|
|
|
import com.yihu.jw.patient.dao.BaseDoctorPatientFollowDao;
|
|
|
import com.yihu.jw.patient.dao.BasePatientDao;
|
|
|
import com.yihu.jw.patient.dao.BasePatientMedicareCardDao;
|
|
|
import com.yihu.jw.restmodel.base.dict.DictHospitalDeptVO;
|
|
|
import com.yihu.jw.restmodel.base.org.BaseOrgVO;
|
|
|
import com.yihu.jw.restmodel.hospital.archive.ArchiveVO;
|
|
|
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.MixEnvelop;
|
|
|
import com.yihu.jw.rm.hospital.BaseHospitalRequestMapping;
|
|
|
import com.yihu.jw.util.common.IdCardUtil;
|
|
|
import com.yihu.jw.util.date.DateUtil;
|
|
|
import com.yihu.jw.utils.WebserviceUtil;
|
|
|
import com.yihu.jw.utils.hibernate.HibenateUtils;
|
|
|
import com.yihu.mysql.query.BaseJpaService;
|
|
|
import com.yihu.utils.security.MD5;
|
|
|
import com.ylzinfo.ehc.EhcHandler;
|
|
|
import com.ylzinfo.ehc.common.utils.DateUtils;
|
|
|
import com.ylzinfo.ehc.trans.TransRequest;
|
|
|
import com.ylzinfo.ehc.trans.TransResponse;
|
|
|
import jxl.write.*;
|
|
|
import net.sf.json.JSONArray;
|
|
|
import net.sf.json.JSONObject;
|
|
|
import org.apache.commons.collections.map.HashedMap;
|
|
|
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.data.redis.core.StringRedisTemplate;
|
|
|
import org.springframework.jdbc.core.BeanPropertyRowMapper;
|
|
|
import org.springframework.jdbc.core.JdbcTemplate;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
import java.io.OutputStream;
|
|
|
import java.lang.Boolean;
|
|
|
import java.util.*;
|
|
|
|
|
|
/**
|
|
|
* Created by Trick on 2019/5/17.
|
|
|
*/
|
|
|
@Service
|
|
|
@Transactional
|
|
|
public class YkyyPrescriptionService extends BaseJpaService<WlyyPrescriptionDO, PrescriptionDao> {
|
|
|
|
|
|
private static final Logger logger = LoggerFactory.getLogger(YkyyPrescriptionService.class);
|
|
|
|
|
|
@Autowired
|
|
|
private JdbcTemplate jdbcTemplate;
|
|
|
@Autowired
|
|
|
private BaseDoctorDao baseDoctorDao;
|
|
|
@Autowired
|
|
|
private BasePatientDao basePatientDao;
|
|
|
@Autowired
|
|
|
private BasePatientMedicareCardDao basePatientMedicareCardDao;
|
|
|
@Autowired
|
|
|
private PrescriptionDao prescriptionDao;
|
|
|
@Autowired
|
|
|
private PrescriptionDiagnosisDao prescriptionDiagnosisDao;
|
|
|
@Autowired
|
|
|
private PrescriptionExpressageDao prescriptionExpressageDao;
|
|
|
@Autowired
|
|
|
private PrescriptionExpressageLogDao prescriptionExpressageLogDao;
|
|
|
@Autowired
|
|
|
private PrescriptionInfoDao prescriptionInfoDao;
|
|
|
@Autowired
|
|
|
private HospitalWaitingRoomDao hospitalWaitingRoomDao;
|
|
|
@Autowired
|
|
|
private DictHospitalDeptDao dictHospitalDeptDao;
|
|
|
@Autowired
|
|
|
private BaseOrgDao baseOrgDao;
|
|
|
@Autowired
|
|
|
private EntranceService entranceService;
|
|
|
@Autowired
|
|
|
private PatientMappingService patientMappingService;
|
|
|
@Autowired
|
|
|
private DoctorMappingService doctorMappingService;
|
|
|
@Autowired
|
|
|
private OutpatientDao outpatientDao;
|
|
|
@Autowired
|
|
|
private ObjectMapper objectMapper;
|
|
|
@Autowired
|
|
|
private WlyyChargeDictDao wlyyChargeDictDao;
|
|
|
@Autowired
|
|
|
private WlyyHospitalSysDictDao sysDictDao;
|
|
|
@Autowired
|
|
|
private DoctorWorkTimeDao doctorWorkTimeDao;
|
|
|
@Autowired
|
|
|
private PatientRegisterTimeDao patientRegisterTimeDao;
|
|
|
@Autowired
|
|
|
private WlyyHttpLogDao wlyyHttpLogDao;
|
|
|
@Autowired
|
|
|
private WlyyDoctorClinicRoomDao wlyyDoctorClinicRoomDao;
|
|
|
@Autowired
|
|
|
private BaseDoctorHospitalDao baseDoctorHospitalDao;
|
|
|
@Autowired
|
|
|
private PrescriptionExpressageService sfexpressService;
|
|
|
@Autowired
|
|
|
private WlyyDoctorOnlineTimeDao wlyyDoctorOnlineTimeDao;
|
|
|
@Autowired
|
|
|
private OauthYlzConfigDao oauthYlzConfigDao;
|
|
|
@Autowired
|
|
|
private PatientRegisterDao patientRegisterDao;
|
|
|
@Autowired
|
|
|
private PrescriptionLogService prescriptionLogService;
|
|
|
@Autowired
|
|
|
private WlyyInspectionDao wlyyInspectionDao;
|
|
|
@Autowired
|
|
|
private StringRedisTemplate redisTemplate;
|
|
|
@Autowired
|
|
|
private SystemMessageService systemMessageService;
|
|
|
@Autowired
|
|
|
private HibenateUtils hibenateUtils;
|
|
|
@Autowired
|
|
|
private BaseDoctorPatientFollowDao baseOrgPatientDao;
|
|
|
@Autowired
|
|
|
private WlyyHospitalWorkRuleDao wlyyHospitalWorkRuleDao;
|
|
|
@Autowired
|
|
|
private BaseDoctorInfoService baseDoctorService;
|
|
|
|
|
|
|
|
|
@Value("${demo.flag}")
|
|
|
private boolean demoFlag;
|
|
|
|
|
|
/**
|
|
|
* 获取居民就诊记录接口
|
|
|
* @param patient
|
|
|
* @param startTime
|
|
|
* @param endTime
|
|
|
* @param demoFlag
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public List<WlyyOutpatientVO> findOutpatientList(String patient, String startTime, String endTime, boolean demoFlag)throws Exception{
|
|
|
logger.info("findOutpatientList patient:"+patient);
|
|
|
String patNo =patientMappingService.findHisPatNoByPatient(patient);
|
|
|
if(StringUtils.isBlank(patNo)){
|
|
|
return null;
|
|
|
}
|
|
|
logger.info("findOutpatientList patNo "+patNo);
|
|
|
return entranceService.BS30025(patNo,null,startTime,endTime,demoFlag);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查询单条门诊记录
|
|
|
* @param patient
|
|
|
* @param conNo
|
|
|
* @return
|
|
|
*/
|
|
|
public WlyyOutpatientVO findOutpatientInfo(String patient,String conNo)throws Exception{
|
|
|
logger.info("findOutpatientList patient:"+patient);
|
|
|
String patNo =patientMappingService.findHisPatNoByPatient(patient);
|
|
|
if(StringUtils.isBlank(patNo)){
|
|
|
return null;
|
|
|
}
|
|
|
logger.info("findOutpatientList patNo:"+patNo);
|
|
|
List<WlyyOutpatientVO> list = entranceService.BS30025(patNo,conNo,null,null,demoFlag);
|
|
|
|
|
|
if(list!=null&&list.size()>0){
|
|
|
WlyyOutpatientVO outpatientVO = list.get(0);
|
|
|
BasePatientDO patientDO = basePatientDao.findById(patient);
|
|
|
outpatientVO.setSex(patientDO.getSex()+"");
|
|
|
outpatientVO.setBirthday(patientDO.getBirthday());
|
|
|
return outpatientVO;
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
*
|
|
|
*/
|
|
|
public List<WlyyPrescriptionVO> findOriginPrescriptionList(String registerSn,String patient,String realOrder,String admNo,boolean demoFlag)throws Exception{
|
|
|
String patNo =patientMappingService.findHisPatNoByPatient(patient);
|
|
|
if(StringUtils.isBlank(patNo)){
|
|
|
return null;
|
|
|
}
|
|
|
//BS16017(String REGISTER_SN,String realOrder,String PAT_NO,String ADM_NO,boolean demoFlag) throws Exception {
|
|
|
logger.info("findOriginPrescriptionList: registerSn:"+registerSn+" patient"+patient+" patNo:"+patNo+" realOrder:"+realOrder+" admNo:"+admNo);
|
|
|
return entranceService.BS16017(registerSn,realOrder,patNo,admNo,demoFlag);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取单条处方记录
|
|
|
* @param registerSn
|
|
|
* @param patient
|
|
|
* @param admNo
|
|
|
* @param realOrder
|
|
|
* @param demoFlag
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public WlyyPrescriptionVO findOriginPrescription(String registerSn, String patient, String admNo, String realOrder, boolean demoFlag)throws Exception{
|
|
|
String patNo =patientMappingService.findHisPatNoByPatient(patient);
|
|
|
if(StringUtils.isBlank(patNo)){
|
|
|
return null;
|
|
|
}
|
|
|
List<WlyyPrescriptionVO> rs = entranceService.BS16017(registerSn,realOrder,patNo,admNo,demoFlag);
|
|
|
if(rs!=null&&rs.size()>0){
|
|
|
return rs.get(0);
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取复诊记录列表
|
|
|
* @param patient
|
|
|
* @param status
|
|
|
* @param page
|
|
|
* @param size
|
|
|
* @return
|
|
|
*/
|
|
|
public MixEnvelop findReOutpatientList(String patient,Integer status,String startTime,String endTime,Integer page,Integer size){
|
|
|
String totalSql = "SELECT " +
|
|
|
" COUNT(1) AS total " +
|
|
|
" FROM " +
|
|
|
" wlyy_outpatient o " +
|
|
|
" WHERE " +
|
|
|
" o.patient = ? AND o.outpatient_type != '2' ";
|
|
|
List<Object> totalParams = new ArrayList<>();
|
|
|
totalParams.add(patient);
|
|
|
if(status!=null){
|
|
|
totalSql += " AND o.status = ? ";
|
|
|
totalParams.add(status);
|
|
|
}
|
|
|
if(StringUtils.isNotBlank(startTime)){
|
|
|
totalSql += " AND create_time >= ? ";
|
|
|
totalParams.add(startTime+" 00:00:00");
|
|
|
}
|
|
|
if(StringUtils.isNotBlank(endTime)){
|
|
|
totalSql += " AND create_time <= ? ";
|
|
|
totalParams.add(endTime+" 23:59:59");
|
|
|
}
|
|
|
List<Map<String, Object>> rstotal = jdbcTemplate.queryForList(totalSql,totalParams.toArray());
|
|
|
Long count = 0L;
|
|
|
if (rstotal != null && rstotal.size() > 0) {
|
|
|
count = (Long) rstotal.get(0).get("total");
|
|
|
}
|
|
|
String sql ="SELECT " +
|
|
|
" o.id, " +
|
|
|
" o.adm_no AS admNo, " +
|
|
|
" o.origin_adm_no AS originAdmNo, " +
|
|
|
" o.register_no AS registerNo, " +
|
|
|
" o.origin_register_no AS originRegisterNo, " +
|
|
|
" o.origin_con_no AS originConNo," +
|
|
|
" o.con_no AS conNo," +
|
|
|
" o.hospital," +
|
|
|
" o.hospital_name AS hospitalName," +
|
|
|
" o.win_no AS winNo," +
|
|
|
" o.type," +
|
|
|
" o.dept AS dept, " +
|
|
|
" o.dept_name AS deptName, " +
|
|
|
" o.patient AS patient, " +
|
|
|
" o.patient_name AS patientName, " +
|
|
|
" o.doctor AS doctor, " +
|
|
|
" o.doctor_name AS doctorName, " +
|
|
|
" o.idcard AS idcard, " +
|
|
|
" o.card_no AS cardNo," +
|
|
|
" o.mjz AS mjz, " +
|
|
|
" o.icd10 AS icd10, " +
|
|
|
" o.icd10_name AS icd10Name, " +
|
|
|
" o.adm_date AS admDate, " +
|
|
|
" o.con_date AS conDate, " +
|
|
|
" o.description AS description, " +
|
|
|
" o.disease_img AS diseaseImg, " +
|
|
|
" o.create_time AS createTime, " +
|
|
|
" o.`status` AS `status`," +
|
|
|
" o.register_date AS registerDate," +
|
|
|
" o.evaluate_status AS evaluateStatus " +
|
|
|
" FROM " +
|
|
|
" wlyy_outpatient o " +
|
|
|
" WHERE " +
|
|
|
" o.patient = ? ";
|
|
|
List<Object> params = new ArrayList<>();
|
|
|
params.add(patient);
|
|
|
if(status!=null){
|
|
|
sql += " AND o.status = ? ";
|
|
|
params.add(status);
|
|
|
}
|
|
|
if(StringUtils.isNotBlank(startTime)){
|
|
|
sql += " AND o.create_time >= ? ";
|
|
|
params.add(startTime+" 00:00:00");
|
|
|
}
|
|
|
if(StringUtils.isNotBlank(endTime)){
|
|
|
sql += " AND o.create_time <= ? ";
|
|
|
params.add(endTime+" 23:59:59");
|
|
|
|
|
|
}
|
|
|
sql += " AND o.outpatient_type != '2' ORDER BY o.create_time DESC LIMIT " + (page - 1) * size + "," + size + " ";
|
|
|
List<WlyyOutpatientVO> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper(WlyyOutpatientVO.class),params.toArray());
|
|
|
|
|
|
return MixEnvelop.getSuccessListWithPage(BaseHospitalRequestMapping.Prescription.api_success, list, page, size, count);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取单条复诊记录信息
|
|
|
* @param outpatientId
|
|
|
* @return
|
|
|
*/
|
|
|
public com.alibaba.fastjson.JSONObject findReOutpatientInfo(String outpatientId,String prescriptionId){
|
|
|
com.alibaba.fastjson.JSONObject rs = new com.alibaba.fastjson.JSONObject();
|
|
|
|
|
|
//复诊信息
|
|
|
WlyyOutpatientDO outpatientDO = outpatientDao.findOne(outpatientId);
|
|
|
rs.put("outpatient",convertToModel(outpatientDO,WlyyOutpatientVO.class));
|
|
|
|
|
|
//居民详情
|
|
|
BasePatientDO basePatientDO = basePatientDao.findById(outpatientDO.getPatient());
|
|
|
rs.put("patientName",basePatientDO.getName());
|
|
|
rs.put("photo",basePatientDO.getPhoto());
|
|
|
rs.put("patientId",basePatientDO.getId());
|
|
|
rs.put("idCard",basePatientDO.getIdcard());
|
|
|
rs.put("sex", basePatientDO.getSex());
|
|
|
PatientMedicareCardDO cardDO = basePatientMedicareCardDao.findByTypeAndPatientCodeAndDel(PatientMedicareCardDO.Type.MedicareCard.getType(),outpatientDO.getPatient(),"1");
|
|
|
rs.put("ssc",cardDO);
|
|
|
rs.put("age",IdCardUtil.getAgeForIdcard(basePatientDO.getIdcard()));
|
|
|
rs.put("address",basePatientDO.getAddress());
|
|
|
rs.put("mobile",basePatientDO.getMobile());
|
|
|
rs.put("birthday",DateUtil.dateToStr(basePatientDO.getBirthday(),"yyyy-MM-dd"));
|
|
|
|
|
|
|
|
|
//获取处方信息
|
|
|
List<WlyyPrescriptionDO> prescriptionDOs = null;
|
|
|
if(StringUtils.isNotBlank(prescriptionId)){
|
|
|
prescriptionDOs = prescriptionDao.findById(prescriptionId);
|
|
|
}else{
|
|
|
prescriptionDOs = prescriptionDao.findByOutpatientId(outpatientId);
|
|
|
}
|
|
|
List<WlyyPrescriptionVO> prescriptionVOs = new ArrayList<>();
|
|
|
if(prescriptionDOs!=null&&prescriptionDOs.size()>0){
|
|
|
convertToModels(prescriptionDOs,prescriptionVOs,WlyyPrescriptionVO.class);
|
|
|
for(WlyyPrescriptionVO vo:prescriptionVOs){
|
|
|
|
|
|
//疾病信息
|
|
|
vo.setDiagnosisVOs(findDiagnosisById(vo.getId()));
|
|
|
|
|
|
//药品信息
|
|
|
List<WlyyPrescriptionInfoVO> infoVOs = new ArrayList<>();
|
|
|
vo.setInfoVOs(convertToModels(prescriptionInfoDao.findByPrescriptionId(vo.getId()),infoVOs,WlyyPrescriptionInfoVO.class));
|
|
|
|
|
|
//检查检验信息
|
|
|
List<WlyyInspectionVO> inspectionVOs = new ArrayList<>();
|
|
|
vo.setInspectionVOs(convertToModels(wlyyInspectionDao.findByPrescriptionId(vo.getId()),inspectionVOs,WlyyInspectionVO.class));
|
|
|
}
|
|
|
}
|
|
|
rs.put("prescriptions",prescriptionVOs);
|
|
|
|
|
|
//物流信息
|
|
|
List<WlyyPrescriptionExpressageDO> expressageDOs = prescriptionExpressageDao.findByOutpatientId(outpatientId);
|
|
|
if(expressageDOs!=null&&expressageDOs.size()>0){
|
|
|
rs.put("expressage",convertToModel(expressageDOs.get(0), WlyyPrescriptionExpressageVO.class));
|
|
|
}else{
|
|
|
rs.put("expressage",null);
|
|
|
}
|
|
|
|
|
|
//物流配送新
|
|
|
List<WlyyPrescriptionExpressageLogDO> expressageLogDOs = prescriptionExpressageLogDao.queryByOutpatientIdOrderByCreateTimeDesc(outpatientId);
|
|
|
List<WlyyPrescriptionExpressageLogVO> expressageLogVOs = new ArrayList<>();
|
|
|
if(expressageLogDOs!=null&&expressageLogDOs.size()>0){
|
|
|
rs.put("expressageLogs",convertToModels(expressageLogDOs,expressageLogVOs, WlyyPrescriptionExpressageLogVO.class));
|
|
|
}else{
|
|
|
rs.put("expressageLogs",null);
|
|
|
}
|
|
|
|
|
|
//预约记录
|
|
|
List<WlyyPatientRegisterTimeDO> timeDOs = patientRegisterTimeDao.findByOutpatientId(outpatientId);
|
|
|
if(timeDOs!=null&&timeDOs.size()>0){
|
|
|
rs.put("register",timeDOs.get(0));
|
|
|
}else{
|
|
|
rs.put("register",null);
|
|
|
}
|
|
|
|
|
|
return rs;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 查询历史
|
|
|
* @param patient
|
|
|
* @param status
|
|
|
* @param startTime
|
|
|
* @param endTime
|
|
|
* @param page
|
|
|
* @param size
|
|
|
* @return
|
|
|
*/
|
|
|
public MixEnvelop findPrescriptionList(String patient, String status,String startTime, String endTime, Integer page, Integer size){
|
|
|
|
|
|
String totalSql ="SELECT " +
|
|
|
" count(1) AS total " +
|
|
|
" FROM " +
|
|
|
" wlyy_prescription p ";
|
|
|
totalSql += " WHERE 1=1 ";
|
|
|
if(StringUtils.isNotBlank(patient)){
|
|
|
totalSql+=" AND p.patient_code ='"+patient+"'";
|
|
|
}
|
|
|
if(StringUtils.isNotBlank(status)){
|
|
|
totalSql+=" AND p.status IN ("+status+")";
|
|
|
}
|
|
|
if(StringUtils.isNotBlank(startTime)){
|
|
|
totalSql += " AND create_time >='"+startTime+" 00:00:00'";
|
|
|
}
|
|
|
if(StringUtils.isNotBlank(endTime)){
|
|
|
totalSql += " AND create_time <='"+endTime+" 23:59:59'";
|
|
|
}
|
|
|
List<Map<String, Object>> rstotal = jdbcTemplate.queryForList(totalSql);
|
|
|
|
|
|
Long count = 0L;
|
|
|
if (rstotal != null && rstotal.size() > 0) {
|
|
|
count = (Long) rstotal.get(0).get("total");
|
|
|
}
|
|
|
|
|
|
String sql ="SELECT " +
|
|
|
" p.id, " +
|
|
|
" p.real_order AS realOrder," +
|
|
|
" p.origin_real_order AS originRealOrder," +
|
|
|
" p.adm_no AS admNo," +
|
|
|
" p.origin_adm_no AS originAdmNo," +
|
|
|
" p.serial_no AS serialNo," +
|
|
|
" p.type AS type, " +
|
|
|
" p.patient_code AS patientCode, " +
|
|
|
" p.patient_name AS patientName, " +
|
|
|
" p.ssc AS ssc, " +
|
|
|
" p.doctor AS doctor, " +
|
|
|
" p.doctor_name AS doctorName, " +
|
|
|
" p.`status` AS `status`, " +
|
|
|
" p.mk_fail_reason AS mkFailReason, " +
|
|
|
" p.mk_time AS mk_time, " +
|
|
|
" p.prescribe_reason AS prescribeReason, " +
|
|
|
" p.prescribe_time AS prescribeTime, " +
|
|
|
" p.pay_time AS payTime, " +
|
|
|
" p.dosage_time AS dosageTime, " +
|
|
|
" p.finish_time AS finishTime, " +
|
|
|
" p.create_time AS createTime, " +
|
|
|
" p.dept AS dept, " +
|
|
|
" p.dept_name AS deptName, " +
|
|
|
" p.hospital AS hospital, " +
|
|
|
" p.hospital_name AS hospitalName, " +
|
|
|
" p.consult AS consult, " +
|
|
|
" p.dispensary_type AS dispensaryType, " +
|
|
|
" p.reason AS reason, " +
|
|
|
" p.remark AS remark, " +
|
|
|
" p.cancel_reason AS cancelReason, " +
|
|
|
" p.ca_cert_data AS caCertData, " +
|
|
|
" p.ca_message AS caMessage, " +
|
|
|
" p.digital_sign_no AS digitalSignNo, " +
|
|
|
" p.original_data_abstract AS originalDataAbstract, " +
|
|
|
" p.str_original_data AS strOriginalData, " +
|
|
|
" p.his_dept_code AS hisDeptCode, " +
|
|
|
" p.his_doctor_code AS hisDoctorCode, " +
|
|
|
" p.his_gister_type_code AS hisGisterTypeCode, " +
|
|
|
" p.his_rate_type_code AS hisRateTypeCode, " +
|
|
|
" p.his_hospital AS hisHospital, " +
|
|
|
" p.his_register_fee AS hisRegisterFee, " +
|
|
|
" p.pay_status AS payStatus " +
|
|
|
" FROM " +
|
|
|
" wlyy_prescription p " +
|
|
|
" WHERE 1=1 ";
|
|
|
if(StringUtils.isNotBlank(patient)){
|
|
|
sql+=" AND p.patient_code ='"+patient+"'";
|
|
|
}
|
|
|
if(StringUtils.isNotBlank(status)){
|
|
|
sql+=" AND p.status IN ("+status+")";
|
|
|
}
|
|
|
if(StringUtils.isNotBlank(startTime)){
|
|
|
sql += " AND create_time >='"+startTime+" 00:00:00'";
|
|
|
}
|
|
|
if(StringUtils.isNotBlank(endTime)){
|
|
|
sql += " AND create_time <='"+endTime+" 23:59:59'";
|
|
|
}
|
|
|
sql += " LIMIT " + (page - 1) * size + "," + size + "";
|
|
|
List<WlyyPrescriptionVO> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper(WlyyPrescriptionVO.class));
|
|
|
|
|
|
//设置病种,药品
|
|
|
if(list!=null&&list.size()>0){
|
|
|
for(WlyyPrescriptionVO vo:list){
|
|
|
vo.setDiagnosisVOs(findDiagnosisById(vo.getId()));
|
|
|
List<WlyyPrescriptionInfoVO> infoVOs = new ArrayList<>();
|
|
|
vo.setInfoVOs(convertToModels(prescriptionInfoDao.findByPrescriptionId(vo.getId()),infoVOs,WlyyPrescriptionInfoVO.class));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return MixEnvelop.getSuccessListWithPage(BaseHospitalRequestMapping.Prescription.api_success, list, page, size, count);
|
|
|
}
|
|
|
|
|
|
public List<WlyyPrescriptionDiagnosisVO> findDiagnosisById(String id){
|
|
|
List<WlyyPrescriptionDiagnosisDO> list = prescriptionDiagnosisDao.findByPrescriptionId(id);
|
|
|
List<WlyyPrescriptionDiagnosisVO> rs = new ArrayList<>();
|
|
|
if(list!=null&&list.size()>0){
|
|
|
return convertToModels(list,rs,WlyyPrescriptionDiagnosisVO.class);
|
|
|
}
|
|
|
return rs;
|
|
|
}
|
|
|
|
|
|
public Map<String,Object> findPrescriptionInfo(String prescriptionId){
|
|
|
//续方信息
|
|
|
Map<String,Object> rs = new HashedMap();
|
|
|
WlyyPrescriptionDO wlyyPrescriptionDO = prescriptionDao.findOne(prescriptionId);
|
|
|
rs.put("prescription",convertToModel(wlyyPrescriptionDO,WlyyPrescriptionVO.class));
|
|
|
|
|
|
//居民详情
|
|
|
BasePatientDO basePatientDO = basePatientDao.findById(wlyyPrescriptionDO.getPatientCode());
|
|
|
rs.put("patientName",basePatientDO.getName());
|
|
|
rs.put("patientId",basePatientDO.getId());
|
|
|
rs.put("idCard",basePatientDO.getIdcard());
|
|
|
rs.put("sex", basePatientDO.getSex());
|
|
|
PatientMedicareCardDO cardDO = basePatientMedicareCardDao.findByTypeAndPatientCodeAndDel(PatientMedicareCardDO.Type.MedicareCard.getType(),wlyyPrescriptionDO.getPatientCode(),"1");
|
|
|
rs.put("ssc",cardDO);
|
|
|
rs.put("age",IdCardUtil.getAgeForIdcard(basePatientDO.getIdcard()));
|
|
|
|
|
|
//诊断信息
|
|
|
rs.put("diagnosis",findDiagnosisById(wlyyPrescriptionDO.getId()));
|
|
|
|
|
|
//药品信息
|
|
|
rs.put("infos",prescriptionInfoDao.findByPrescriptionId(wlyyPrescriptionDO.getId()));
|
|
|
|
|
|
return rs;
|
|
|
}
|
|
|
|
|
|
public Boolean checkPrescription(String patient){
|
|
|
List<WlyyPrescriptionDO> list = prescriptionDao.findByPatientCode(patient);
|
|
|
if(list!=null&&list.size()>0){
|
|
|
return false;
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 发起图文和视频复诊
|
|
|
* @param outpatientJson
|
|
|
* @param expressageJson
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public WlyyOutpatientDO appointmentRevisit(String outpatientJson,String expressageJson,String registerJson,String chargeType)throws Exception{
|
|
|
|
|
|
//1.保存就诊实体
|
|
|
WlyyOutpatientDO outpatientDO = objectMapper.readValue(outpatientJson,WlyyOutpatientDO.class);
|
|
|
BasePatientDO patientDO = basePatientDao.findById(outpatientDO.getPatient());
|
|
|
|
|
|
outpatientDO.setMjz("mz");
|
|
|
outpatientDO.setStatus("0");
|
|
|
outpatientDO.setCreateTime(new Date());
|
|
|
outpatientDO.setIdcard(patientDO.getIdcard());
|
|
|
outpatientDO.setOutpatientType("1");
|
|
|
outpatientDO.setCreateTime(new Date());
|
|
|
outpatientDO.setPayStatus(0);
|
|
|
|
|
|
if(outpatientDO.getRegisterDate()==null){
|
|
|
outpatientDO.setRegisterDate(new Date());
|
|
|
}
|
|
|
|
|
|
WlyyOutpatientDO outpatient = outpatientDao.save(outpatientDO);
|
|
|
|
|
|
WlyyPatientRegisterTimeDO registerTimeDO = null;
|
|
|
|
|
|
try {
|
|
|
//如果是视频预约咨询
|
|
|
if(StringUtils.isNotBlank(registerJson)){
|
|
|
registerTimeDO = objectMapper.readValue(registerJson,WlyyPatientRegisterTimeDO.class);
|
|
|
registerTimeDO.setOutpatientId(outpatient.getId());
|
|
|
registerTimeDO.setCreateTime(new Date());
|
|
|
patientRegisterTimeDao.save(registerTimeDO);
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
throw new RuntimeException("号源已经被预约,请选择其他号源");
|
|
|
}
|
|
|
|
|
|
//2.物流信息
|
|
|
WlyyPrescriptionExpressageDO expressageDO = objectMapper.readValue(expressageJson,WlyyPrescriptionExpressageDO.class);
|
|
|
expressageDO.setDel(1);
|
|
|
expressageDO.setCreateTime(new Date());
|
|
|
expressageDO.setOutpatientId(outpatient.getId());
|
|
|
prescriptionExpressageDao.save(expressageDO);
|
|
|
|
|
|
//3.创建候诊室
|
|
|
createRoom(outpatient,chargeType);
|
|
|
|
|
|
return outpatient;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 创建候诊室
|
|
|
* @param outpatientDO
|
|
|
* @return
|
|
|
*/
|
|
|
public Boolean createRoom(WlyyOutpatientDO outpatientDO,String chargeType){
|
|
|
|
|
|
WlyyHospitalWaitingRoomDO waitingRoom = new WlyyHospitalWaitingRoomDO();
|
|
|
|
|
|
waitingRoom.setDept(outpatientDO.getDept());
|
|
|
waitingRoom.setDeptName(outpatientDO.getDeptName());
|
|
|
waitingRoom.setHospital(outpatientDO.getHospital());
|
|
|
waitingRoom.setHospitalName(outpatientDO.getHospitalName());
|
|
|
|
|
|
//是否是有协同门诊医生
|
|
|
if(StringUtils.isNotBlank(outpatientDO.getGeneralDoctor())){
|
|
|
waitingRoom.setGeneralDoctor(outpatientDO.getGeneralDoctor());
|
|
|
waitingRoom.setGeneralDoctorName(outpatientDO.getGeneralDoctorName());
|
|
|
}
|
|
|
|
|
|
waitingRoom.setPatientId(outpatientDO.getPatient());
|
|
|
waitingRoom.setPatientName(outpatientDO.getPatientName());
|
|
|
waitingRoom.setReservationTime(outpatientDO.getRegisterDate());
|
|
|
waitingRoom.setVisitStatus(0);
|
|
|
//设置复诊类型
|
|
|
waitingRoom.setReservationType(StringUtils.isNotBlank(outpatientDO.getOutpatientType())?Integer.parseInt(outpatientDO.getOutpatientType()):1);
|
|
|
|
|
|
waitingRoom.setSort(0);
|
|
|
waitingRoom.setConsultType(Integer.parseInt(outpatientDO.getType()));
|
|
|
if(StringUtils.isNotBlank(outpatientDO.getDoctor())){
|
|
|
waitingRoom.setDoctor(outpatientDO.getDoctor());
|
|
|
waitingRoom.setDoctorName(outpatientDO.getDoctorName());
|
|
|
}
|
|
|
waitingRoom.setOutpatientId(outpatientDO.getId());
|
|
|
waitingRoom.setCreateTime(new Date());
|
|
|
|
|
|
if(StringUtils.isNotBlank(chargeType)){
|
|
|
waitingRoom.setChargeType(chargeType);
|
|
|
}
|
|
|
|
|
|
hospitalWaitingRoomDao.save(waitingRoom);
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
|
|
|
public Boolean cancelPrescription(String prescriptionId){
|
|
|
WlyyPrescriptionDO prescriptionDO = prescriptionDao.findOne(prescriptionId);
|
|
|
prescriptionDO.setStatus(-2);
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
*@param admNo 门诊唯一号
|
|
|
* @param realOrder 处方号
|
|
|
* @param status 处方状态 1审方失败,2审核完成,3结算完成
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<String,Object> updatePrescriptionByHisStatu(String admNo,String realOrder,String status)throws Exception {
|
|
|
Map<String,Object> rs = new HashedMap();
|
|
|
|
|
|
String sql = "";
|
|
|
//status 处方流程状态 ,13 开方失败/调整中,20 诊断完成/开方成功/待支付,已完成:100 已完成
|
|
|
//pay_status`:处方结算状态,0为未结算,1为结算成功,默认为0',
|
|
|
String outPatientSql="";
|
|
|
if ("1".equals(status)) {
|
|
|
sql = "UPDATE base.wlyy_prescription p SET p.`status`='13' WHERE p.adm_no='" + admNo + "' AND p.real_order='" + realOrder + "' ";
|
|
|
WlyyPrescriptionDO wlyyPrescriptionDO = prescriptionDao.findByRealOrder(realOrder);
|
|
|
jdbcTemplate.execute(sql);
|
|
|
|
|
|
} else if ("2".equals(status)) {
|
|
|
//开方成功时候,先用处方号获取本地处方状态是否为开方失败,如果是则需要更新本地的处方
|
|
|
sql = "UPDATE base.wlyy_prescription p SET p.`status`='20' WHERE p.adm_no='" + admNo + "' AND p.real_order='" + realOrder + "' ";
|
|
|
//变更门诊状态
|
|
|
outPatientSql="UPDATE base.wlyy_outpatient p SET p.`status`='2' WHERE p.adm_no='" + admNo + "'";
|
|
|
jdbcTemplate.execute(outPatientSql);
|
|
|
jdbcTemplate.execute(sql);
|
|
|
|
|
|
} else if ("3".equals(status)) {
|
|
|
//自取处方结束
|
|
|
WlyyPrescriptionDO wlyyPrescriptionDO = prescriptionDao.findByRealOrder(realOrder);
|
|
|
WlyyOutpatientDO outpatientDO = outpatientDao.findById(wlyyPrescriptionDO.getOutpatientId());
|
|
|
|
|
|
if (null != wlyyPrescriptionDO && 1 == wlyyPrescriptionDO.getDispensaryType()) {
|
|
|
//取药类型:1 自取 2快递配送
|
|
|
wlyyPrescriptionDO.setPayStatus(1);
|
|
|
wlyyPrescriptionDO.setStatus(100);
|
|
|
|
|
|
prescriptionLogService.addPrescriptionLog(wlyyPrescriptionDO.getId(),100,2,outpatientDO.getDoctor(),outpatientDO.getDoctorName(),"",new Date());
|
|
|
prescriptionDao.save(wlyyPrescriptionDO);
|
|
|
|
|
|
} else {
|
|
|
//取药类型:1 自取 2快递配送
|
|
|
wlyyPrescriptionDO.setPayStatus(1);
|
|
|
wlyyPrescriptionDO.setStatus(32);
|
|
|
|
|
|
try{
|
|
|
WlyyPrescriptionVO vo = findOriginPrescription(outpatientDO.getRegisterNo(),outpatientDO.getPatient(),admNo,realOrder,demoFlag);
|
|
|
wlyyPrescriptionDO.setDispUser(vo.getDispUser());
|
|
|
wlyyPrescriptionDO.setDispUserName(vo.getDispUserName());
|
|
|
wlyyPrescriptionDO.setDispDate(new Date());
|
|
|
prescriptionLogService.addPrescriptionLog(wlyyPrescriptionDO.getId(),32,2,vo.getDispUser(),vo.getDispUserName(),"",new Date());
|
|
|
}catch (Exception e){
|
|
|
logger.error("获取处方信息异常"+e.toString());
|
|
|
}
|
|
|
prescriptionDao.save(wlyyPrescriptionDO);
|
|
|
}
|
|
|
//发送取药系统消息
|
|
|
SystemMessageDO systemMessageDO = sendPatientGetDrugMes(outpatientDO,wlyyPrescriptionDO);
|
|
|
|
|
|
rs.put("mes",systemMessageDO);
|
|
|
}
|
|
|
|
|
|
rs.put("flag",true);
|
|
|
return rs;
|
|
|
}
|
|
|
|
|
|
public SystemMessageDO sendPatientGetDrugMes(WlyyOutpatientDO outpatient,WlyyPrescriptionDO prescriptionDO){
|
|
|
SystemMessageDO systemMessageDO = new SystemMessageDO();
|
|
|
try{
|
|
|
|
|
|
systemMessageDO.setTitle("患者取药");
|
|
|
systemMessageDO.setType("7");
|
|
|
systemMessageDO.setReceiver(outpatient.getDoctor());
|
|
|
systemMessageDO.setReceiverName(outpatient.getDoctorName());
|
|
|
systemMessageDO.setRelationCode(outpatient.getId());
|
|
|
systemMessageDO.setSender(outpatient.getPatient());
|
|
|
systemMessageDO.setSenderName(outpatient.getPatientName());
|
|
|
systemMessageDO.setRelationCode(outpatient.getId());
|
|
|
|
|
|
JSONObject data = new JSONObject();
|
|
|
data.put("name",outpatient.getPatientName());
|
|
|
data.put("age",IdCardUtil.getAgeForIdcard(outpatient.getIdcard()));
|
|
|
data.put("gender",IdCardUtil.getSexForIdcard_new(outpatient.getIdcard()));
|
|
|
data.put("recipeType",prescriptionDO.getDispensaryType());
|
|
|
data.put("message","患者已完成取药");
|
|
|
|
|
|
systemMessageDO.setData(data.toString());
|
|
|
|
|
|
systemMessageService.saveMessage(systemMessageDO);
|
|
|
|
|
|
}catch (Exception e){
|
|
|
logger.error("sendPatientGetDrugMes :"+e.toString());
|
|
|
}
|
|
|
return systemMessageDO;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取卡记录
|
|
|
* @param patient
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public JSONArray findPatientCard(String patient)throws Exception{
|
|
|
BasePatientDO patientDO = basePatientDao.findById(patient);
|
|
|
JSONArray res = entranceService.BS15018(patientDO.getIdcard(),null,demoFlag);
|
|
|
JSONArray rs = new JSONArray();
|
|
|
if(res !=null){
|
|
|
for (int i =0;i<res.size();i++){
|
|
|
JSONObject card = res.getJSONObject(i);
|
|
|
String cardStat = card.getString("CARD_STAT");
|
|
|
if("激活".equals(cardStat)){
|
|
|
rs.add(card);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return rs;
|
|
|
}
|
|
|
|
|
|
|
|
|
public Map<String,Object> checkOutpatient(String patient)throws Exception{
|
|
|
//-1卡余额不足,,-2 存在未结束的诊断热 1成功
|
|
|
Map<String,Object> rs = new HashedMap();
|
|
|
//1.余额判断改到前端判断
|
|
|
//net.sf.json.JSONObject json = entranceService.qutpatientBalance(cardNo,demoFlag);
|
|
|
|
|
|
//2.判断是否有未结束的
|
|
|
List<WlyyOutpatientDO> list = outpatientDao.findByPatientList(patient);
|
|
|
if(list!=null&&list.size()>0){
|
|
|
rs.put("outpatient",list.get(0));
|
|
|
rs.put("code",-2);
|
|
|
rs.put("mes","存在未结束的诊断");
|
|
|
return rs;
|
|
|
}
|
|
|
rs.put("code",1);
|
|
|
rs.put("mes","验证通过");
|
|
|
return rs;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取所有医院列表
|
|
|
* @return
|
|
|
*/
|
|
|
public List<BaseOrgVO> findAllHospital(Integer level,String keyWord){
|
|
|
|
|
|
if (StringUtils.isNoneEmpty(keyWord)) {
|
|
|
keyWord = "%" + keyWord + "%";
|
|
|
|
|
|
if(level!=null){
|
|
|
List<BaseOrgDO> list = baseOrgDao.findByLevelAndName(level,"1",keyWord);
|
|
|
List<BaseOrgVO> rs = new ArrayList<>();
|
|
|
return convertToModels(list,rs,BaseOrgVO.class);
|
|
|
}else {
|
|
|
List<BaseOrgDO> list = baseOrgDao.findByDelAndName("1",keyWord);
|
|
|
List<BaseOrgVO> rs = new ArrayList<>();
|
|
|
return convertToModels(list,rs,BaseOrgVO.class);
|
|
|
}
|
|
|
}else{
|
|
|
|
|
|
if(level!=null){
|
|
|
List<BaseOrgDO> list = baseOrgDao.findByLevelAndDel(level,"1");
|
|
|
List<BaseOrgVO> rs = new ArrayList<>();
|
|
|
return convertToModels(list,rs,BaseOrgVO.class);
|
|
|
}else {
|
|
|
List<BaseOrgDO> list = baseOrgDao.findByDel("1");
|
|
|
List<BaseOrgVO> rs = new ArrayList<>();
|
|
|
return convertToModels(list,rs,BaseOrgVO.class);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取机构下部门信息
|
|
|
*
|
|
|
* @param orgCode
|
|
|
* @return
|
|
|
*/
|
|
|
public List<DictHospitalDeptVO> findDeptByHospital(String orgCode, String dept, String consultDeptFlag) {
|
|
|
List<DictHospitalDeptDO> list;
|
|
|
if (StringUtils.isNotBlank(consultDeptFlag) && "1".equals(consultDeptFlag)) {
|
|
|
list = dictHospitalDeptDao.findByOrgCodeAndConsultDeptFlag(orgCode, consultDeptFlag);
|
|
|
} else {
|
|
|
list = dictHospitalDeptDao.findByOrgCodeIn(orgCode);
|
|
|
}
|
|
|
List<DictHospitalDeptVO> rs = new ArrayList<>();
|
|
|
convertToModels(list, rs, DictHospitalDeptVO.class);
|
|
|
if (rs != null && rs.size() > 0 && StringUtils.isNotBlank(dept)) {
|
|
|
//排序
|
|
|
for (int i = 0; i < rs.size(); i++) {
|
|
|
String id = rs.get(i).getCode();
|
|
|
if (dept.equals(id)) {
|
|
|
Collections.swap(rs, 0, i);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return rs;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取医生列表.
|
|
|
*
|
|
|
* @param orgCode
|
|
|
* @param dept
|
|
|
* @return
|
|
|
*/
|
|
|
public List<Map<String,Object>> findDoctorByHospitalAndDept(String orgCode,String dept,String chargeType,String doctorCode,String outpatientType,String startDate,String endDate,String key,String consultStatus){
|
|
|
String sql ="SELECT " +
|
|
|
" d.id AS \"id\", " +
|
|
|
" d.photo AS \"photo\", " +
|
|
|
" d.name AS \"name\", " +
|
|
|
" d.expertise AS \"expertise\"," +
|
|
|
" d.introduce AS \"introduce\"," +
|
|
|
" d.job_title_code AS \"jobTitleCode\", " +
|
|
|
" d.job_title_name AS \"jobTitleName\"," +
|
|
|
" d.charge_type AS \"chargeType\"," +
|
|
|
" d.outpatient_type AS \"outpatientType\"," +
|
|
|
" d.consult_status AS \"consultStatus\"" +
|
|
|
" FROM " +
|
|
|
" base_doctor d " +
|
|
|
" JOIN base_doctor_hospital h ON h.doctor_code = d.id " +
|
|
|
" WHERE " +
|
|
|
" 1=1";
|
|
|
Map<String,Object> params = new HashedMap();
|
|
|
if (StringUtils.isNotBlank(dept)) {
|
|
|
sql += " AND h.dept_code = '" + dept + "'";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(orgCode)) {
|
|
|
sql += " AND h.org_code = '" + orgCode + "'";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(chargeType)) {
|
|
|
if ("all".equals(chargeType)) {
|
|
|
//查询全部号源
|
|
|
} else {
|
|
|
sql += " AND d.charge_type ='" + chargeType + "'";
|
|
|
}
|
|
|
} else {
|
|
|
sql += " AND d.charge_type is not null ";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(outpatientType)) {
|
|
|
if ("all".equals(outpatientType)) {
|
|
|
//查询全部权限
|
|
|
} else {
|
|
|
sql += " AND d.outpatient_type like'%" + outpatientType + "%'";
|
|
|
}
|
|
|
} else {
|
|
|
sql += " AND d.outpatient_type is not null ";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(key)) {
|
|
|
sql += " AND (h.dept_name like '%" + key + "%' OR d.name like '%" + key + "%' OR d.expertise like '%" + key + "%') ";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(consultStatus)) {
|
|
|
sql += " AND d.consult_status = '" + consultStatus + "'";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(endDate) && StringUtils.isNotBlank(startDate)) {
|
|
|
sql += " AND EXISTS ( " +
|
|
|
" SELECT " +
|
|
|
" 1 " +
|
|
|
" FROM " +
|
|
|
" wlyy_doctor_work_time t " +
|
|
|
" WHERE " +
|
|
|
" t.doctor = d.id " +
|
|
|
" AND t.start_time >=:startDate" +
|
|
|
" AND t.start_time <=:endDate" +
|
|
|
" )";
|
|
|
params.put("startDate",DateUtil.stringToDate(startDate,"yyyy-MM-ss HH:mm:ss"));
|
|
|
params.put("endDate",DateUtil.stringToDate(endDate,"yyyy-MM-ss HH:mm:ss"));
|
|
|
|
|
|
}
|
|
|
|
|
|
logger.info("findDoctorByHospitalAndDept sql:" + sql);
|
|
|
|
|
|
List<Map<String, Object>> list = hibenateUtils.createSQLQuery(sql,params);
|
|
|
|
|
|
if (list != null && list.size() > 0 && StringUtils.isNotBlank(doctorCode)) {
|
|
|
//排序
|
|
|
for (int i = 0; i < list.size(); i++) {
|
|
|
String id = (String) list.get(i).get("id");
|
|
|
if (doctorCode.equals(id)) {
|
|
|
Collections.swap(list, 0, i);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取医生列表带排班
|
|
|
*
|
|
|
* @param orgCode
|
|
|
* @param dept
|
|
|
* @return
|
|
|
*/
|
|
|
public MixEnvelop findDoctorWithWork(String orgCode, String dept, String chargeType, String doctorCode, String outpatientType, String startDate, String endDate, String key, String consultStatus, Integer page, Integer size) {
|
|
|
|
|
|
String totalSql = "SELECT " +
|
|
|
" count(1) AS \"total\" " +
|
|
|
" FROM " +
|
|
|
" base_doctor d " +
|
|
|
" JOIN base_doctor_hospital h ON h.doctor_code = d.id " +
|
|
|
" WHERE " +
|
|
|
" 1=1 ";
|
|
|
Map<String,Object> params = new HashedMap();
|
|
|
if (StringUtils.isNotBlank(dept)) {
|
|
|
totalSql += " AND h.dept_code = '" + dept + "'";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(orgCode)) {
|
|
|
totalSql += " AND h.org_code = '" + orgCode + "'";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(chargeType)) {
|
|
|
totalSql += " AND d.charge_type ='" + chargeType + "'";
|
|
|
} else {
|
|
|
totalSql += " AND d.charge_type is not null ";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(outpatientType)) {
|
|
|
if (outpatientType.contains("or")) {
|
|
|
String[] outpatientTypeArray = outpatientType.split("or");
|
|
|
totalSql += " AND ( ";
|
|
|
|
|
|
for (int i = 0; i < outpatientTypeArray.length; i++) {
|
|
|
totalSql += " d.outpatient_type like'%" + outpatientTypeArray[i] + "%'";
|
|
|
if (i != outpatientTypeArray.length - 1) {
|
|
|
totalSql += " or ";
|
|
|
}
|
|
|
}
|
|
|
totalSql += " ) ";
|
|
|
} else {
|
|
|
totalSql += " AND d.outpatient_type like'%" + outpatientType + "%'";
|
|
|
}
|
|
|
} else {
|
|
|
totalSql += " AND d.outpatient_type is not null ";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(key)) {
|
|
|
totalSql += " AND (h.dept_name like '%" + key + "%' OR d.name like '%" + key + "%' OR d.expertise like '%" + key + "%') ";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(consultStatus)) {
|
|
|
totalSql += " AND d.consult_status = '" + consultStatus + "'";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(endDate) && StringUtils.isNotBlank(startDate)) {
|
|
|
totalSql += " AND EXISTS ( " +
|
|
|
" SELECT " +
|
|
|
" 1 " +
|
|
|
" FROM " +
|
|
|
" wlyy_doctor_work_time t " +
|
|
|
" WHERE " +
|
|
|
" t.doctor = d.id " +
|
|
|
" AND t.start_time >=:startDate" +
|
|
|
" AND t.start_time <=:endDate" +
|
|
|
" )";
|
|
|
params.put("startDate",DateUtil.stringToDate(startDate,"yyyy-MM-ss HH:mm:ss"));
|
|
|
params.put("endDate",DateUtil.stringToDate(endDate,"yyyy-MM-ss HH:mm:ss"));
|
|
|
}
|
|
|
List<Map<String, Object>> rstotal = hibenateUtils.createSQLQuery(totalSql,params);
|
|
|
|
|
|
Long count = 0L;
|
|
|
if (rstotal != null && rstotal.size() > 0) {
|
|
|
count = hibenateUtils.objTransformLong(rstotal.get(0).get("total"));
|
|
|
}
|
|
|
|
|
|
String sql = "SELECT " +
|
|
|
" d.id AS \"id\", " +
|
|
|
" d.photo AS \"photo\", " +
|
|
|
" d.name AS \"name\", " +
|
|
|
" d.expertise AS \"expertise\"," +
|
|
|
" d.introduce AS \"introduce\"," +
|
|
|
" d.job_title_code AS \"jobTitleCode\", " +
|
|
|
" d.job_title_name AS \"jobTitleName\"," +
|
|
|
" d.charge_type AS \"chargeType\"," +
|
|
|
" h.dept_code AS \"deptCode\"," +
|
|
|
" h.dept_Name AS \"deptName\"," +
|
|
|
" d.outpatient_type AS \"outpatientType\"," +
|
|
|
" d.consult_status AS \"consultStatus\"" +
|
|
|
" FROM " +
|
|
|
" base_doctor d " +
|
|
|
" JOIN base_doctor_hospital h ON h.doctor_code = d.id " +
|
|
|
" WHERE " +
|
|
|
" 1=1";
|
|
|
if (StringUtils.isNotBlank(dept)) {
|
|
|
sql += " AND h.dept_code = '" + dept + "'";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(orgCode)) {
|
|
|
sql += " AND h.org_code = '" + orgCode + "'";
|
|
|
}
|
|
|
|
|
|
if (StringUtils.isNotBlank(chargeType)) {
|
|
|
sql += " AND d.charge_type ='" + chargeType + "'";
|
|
|
} else {
|
|
|
sql += " AND d.charge_type is not null";
|
|
|
}
|
|
|
|
|
|
if (StringUtils.isNotBlank(outpatientType)) {
|
|
|
if (outpatientType.contains("or")) {
|
|
|
String[] outpatientTypeArray = outpatientType.split("or");
|
|
|
sql += " AND ( ";
|
|
|
|
|
|
for (int i = 0; i < outpatientTypeArray.length; i++) {
|
|
|
sql += " d.outpatient_type like'%" + outpatientTypeArray[i] + "%'";
|
|
|
if (i != outpatientTypeArray.length - 1) {
|
|
|
sql += " or ";
|
|
|
}
|
|
|
}
|
|
|
sql += " ) ";
|
|
|
} else {
|
|
|
sql += " AND d.outpatient_type like'%" + outpatientType + "%'";
|
|
|
}
|
|
|
} else {
|
|
|
sql += " AND d.outpatient_type is not null ";
|
|
|
}
|
|
|
|
|
|
if (StringUtils.isNotBlank(key)) {
|
|
|
sql += " AND (h.dept_name like '%" + key + "%' OR d.name like '%" + key + "%' OR d.expertise like '%" + key + "%') ";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(consultStatus)) {
|
|
|
sql += " AND d.consult_status = '" + consultStatus + "'";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(endDate) && StringUtils.isNotBlank(startDate)) {
|
|
|
sql += " AND EXISTS ( " +
|
|
|
" SELECT " +
|
|
|
" 1 " +
|
|
|
" FROM " +
|
|
|
" wlyy_doctor_work_time t " +
|
|
|
" WHERE " +
|
|
|
" t.doctor = d.id " +
|
|
|
" AND t.start_time >= :startDate" +
|
|
|
" AND t.start_time <= :endDate" +
|
|
|
" )";
|
|
|
}
|
|
|
sql += " AND d.del='1' AND d.outpatient_type is not null ";
|
|
|
logger.info("withwork sql:" +sql);
|
|
|
List<Map<String, Object>> list = hibenateUtils.createSQLQuery(sql,params,page,size);
|
|
|
if (list != null && list.size() > 0) {
|
|
|
//获取排班
|
|
|
for (Map<String, Object> doctor : list) {
|
|
|
String id = (String) doctor.get("id");
|
|
|
List<WlyyDoctorWorkTimeVO> times = findDoctorWorkTime(id, orgCode);
|
|
|
doctor.put("workTime", times);
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(doctorCode)) {
|
|
|
//排序
|
|
|
for (int i = 0; i < list.size(); i++) {
|
|
|
String id = (String) list.get(i).get("id");
|
|
|
if (doctorCode.equals(id)) {
|
|
|
Collections.swap(list, 0, i);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return MixEnvelop.getSuccessListWithPage(BaseHospitalRequestMapping.Prescription.api_success, list, page, size, count);
|
|
|
}
|
|
|
|
|
|
public List<WlyyDoctorWorkTimeVO> findDoctorWorkTime(String doctor, String hospital) {
|
|
|
|
|
|
List<WlyyHospitalWorkRuleDO> list = wlyyHospitalWorkRuleDao.findByHospital(hospital);
|
|
|
|
|
|
if (list != null && list.size() > 0) {
|
|
|
WlyyHospitalWorkRuleDO rule = list.get(0);
|
|
|
|
|
|
String openTimeString = DateUtil.dateToStr(new Date(), "yyyy-MM-dd")+ " " + rule.getMaxDayOpenTime() + ":00";
|
|
|
logger.info("today openTimeString :"+openTimeString);
|
|
|
Date openTime = DateUtil.strToDate(openTimeString, "yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
|
Integer openDay = rule.getMaxDay();
|
|
|
if (openTime.before(new Date())) {
|
|
|
openDay = openDay - 1;
|
|
|
}
|
|
|
Date preDate = DateUtil.getPreDays(new Date(), openDay);
|
|
|
String maxDateString = DateUtil.dateToStr(preDate,"yyyy-MM-dd")+" 23:59:59";
|
|
|
logger.info("maxDateString :"+maxDateString);
|
|
|
|
|
|
Date endDate = DateUtil.stringToDate(maxDateString, "yyyy-MM-dd HH:mm:ss");
|
|
|
List<WlyyDoctorWorkTimeVO> timeVOs = new ArrayList<>();
|
|
|
List<WlyyDoctorWorkTimeDO> timeDOs = doctorWorkTimeDao.findDoctorWorkTime(doctor, new Date(), endDate);
|
|
|
if(timeDOs!=null&&timeDOs.size()>0){
|
|
|
convertToModels(timeDOs, timeVOs, WlyyDoctorWorkTimeVO.class);
|
|
|
if (timeVOs != null && timeVOs.size() > 0) {
|
|
|
for (WlyyDoctorWorkTimeVO timeVO : timeVOs) {
|
|
|
timeVO.setCount(findWorkTimeInfoCout(timeVO.getId()));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return timeVOs;
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 查询医生列表带月份排班状态
|
|
|
*
|
|
|
* @param orgCode
|
|
|
* @param dept
|
|
|
* @param chargeType
|
|
|
* @param date
|
|
|
* @param page
|
|
|
* @param size
|
|
|
* @return
|
|
|
*/
|
|
|
public MixEnvelop findDoctorWithMouthWork(String orgCode, String dept, String chargeType, String date, String nameKey,String iswork, Integer page, Integer size) {
|
|
|
|
|
|
String totalSql = "SELECT " +
|
|
|
" count(1) AS \"total\" " +
|
|
|
" FROM " +
|
|
|
" base_doctor d " +
|
|
|
" JOIN base_doctor_hospital h ON h.doctor_code = d.id " +
|
|
|
" JOIN base_doctor_role r ON r.doctor_code = d.id " +
|
|
|
" WHERE " +
|
|
|
" h.org_code = '" + orgCode + "'" +
|
|
|
" AND r.role_code ='specialist'";
|
|
|
if (StringUtils.isNotBlank(chargeType)) {
|
|
|
if ("all".equals(chargeType)) {
|
|
|
//不过滤号别
|
|
|
} else {
|
|
|
totalSql += " AND d.charge_type ='" + chargeType + "'";
|
|
|
|
|
|
}
|
|
|
} else {
|
|
|
//不传号别过滤不为为空
|
|
|
totalSql += " AND d.charge_type is not null ";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(dept)) {
|
|
|
totalSql += " AND h.dept_code = '" + dept + "' ";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(nameKey)) {
|
|
|
totalSql += " AND d.name like '%" + nameKey + "%' ";
|
|
|
}
|
|
|
//过滤排班
|
|
|
if(StringUtils.isNotBlank(iswork)){
|
|
|
if("1".equals(iswork)){
|
|
|
totalSql +=" AND d.id IN ( " +
|
|
|
" SELECT DISTINCT " +
|
|
|
" t.doctor " +
|
|
|
" FROM " +
|
|
|
" wlyy_doctor_work_time t " +
|
|
|
" WHERE " +
|
|
|
" t.work_date LIKE '%"+date+"%' " +
|
|
|
" )";
|
|
|
}else{
|
|
|
totalSql +=" AND d.id NOT IN ( " +
|
|
|
" SELECT DISTINCT " +
|
|
|
" t.doctor " +
|
|
|
" FROM " +
|
|
|
" wlyy_doctor_work_time t " +
|
|
|
" WHERE " +
|
|
|
" t.work_date LIKE '%"+date+"%' " +
|
|
|
" )";
|
|
|
}
|
|
|
|
|
|
}
|
|
|
List<Map<String, Object>> rstotal = hibenateUtils.createSQLQuery(totalSql);
|
|
|
|
|
|
Long count = 0L;
|
|
|
if (rstotal != null && rstotal.size() > 0) {
|
|
|
count = hibenateUtils.objTransformLong(rstotal.get(0).get("total"));
|
|
|
}
|
|
|
|
|
|
String sql = "SELECT " +
|
|
|
" d.id AS \"id\", " +
|
|
|
" d.photo AS \"photo\", " +
|
|
|
" d.name AS \"name\", " +
|
|
|
" d.expertise AS \"expertise\"," +
|
|
|
" d.introduce AS \"introduce\"," +
|
|
|
" d.job_title_code AS \"jobTitleCode\", " +
|
|
|
" d.job_title_name AS \"jobTitleName\"," +
|
|
|
" d.charge_type AS \"chargeType\"," +
|
|
|
" h.dept_code AS \"deptCode\"," +
|
|
|
" h.dept_Name AS \"deptName\"" +
|
|
|
" FROM " +
|
|
|
" base_doctor d " +
|
|
|
" JOIN base_doctor_hospital h ON h.doctor_code = d.id " +
|
|
|
" JOIN base_doctor_role r ON r.doctor_code = d.id " +
|
|
|
" WHERE " +
|
|
|
" h.org_code = '" + orgCode + "'" +
|
|
|
" AND r.role_code ='specialist'";
|
|
|
if (StringUtils.isNotBlank(chargeType)) {
|
|
|
if ("all".equals(chargeType)) {
|
|
|
//不过滤号别
|
|
|
} else {
|
|
|
sql += " AND d.charge_type ='" + chargeType + "'";
|
|
|
}
|
|
|
} else {
|
|
|
//不传号别过滤不为为空
|
|
|
sql += " AND d.charge_type is not null ";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(dept)) {
|
|
|
sql += " AND h.dept_code = '" + dept + "' ";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(nameKey)) {
|
|
|
sql += " AND d.name like '%" + nameKey + "%' ";
|
|
|
}
|
|
|
//过滤排班
|
|
|
if(StringUtils.isNotBlank(iswork)){
|
|
|
if("1".equals(iswork)){
|
|
|
sql +=" AND d.id IN ( " +
|
|
|
" SELECT DISTINCT " +
|
|
|
" t.doctor " +
|
|
|
" FROM " +
|
|
|
" wlyy_doctor_work_time t " +
|
|
|
" WHERE " +
|
|
|
" t.work_date LIKE '%"+date+"%' " +
|
|
|
" )";
|
|
|
}else{
|
|
|
sql +=" AND d.id NOT IN ( " +
|
|
|
" SELECT DISTINCT " +
|
|
|
" t.doctor " +
|
|
|
" FROM " +
|
|
|
" wlyy_doctor_work_time t " +
|
|
|
" WHERE " +
|
|
|
" t.work_date LIKE '%"+date+"%' " +
|
|
|
" )";
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
List<Map<String, Object>> list = hibenateUtils.createSQLQuery(sql,page,size);
|
|
|
if (list != null && list.size() > 0) {
|
|
|
//获取排班
|
|
|
for (Map<String, Object> doctor : list) {
|
|
|
String id = (String) doctor.get("id");
|
|
|
List<WlyyDoctorWorkTimeDO> workTimeDOs = doctorWorkTimeDao.findDoctorWorkTimeByMonth(id, "%" + date + "%");
|
|
|
if (workTimeDOs != null && workTimeDOs.size() > 0) {
|
|
|
doctor.put("isScheduling", true);
|
|
|
} else {
|
|
|
doctor.put("isScheduling", false);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
logger.info("findDoctorWithMouthWork :" + sql);
|
|
|
return MixEnvelop.getSuccessListWithPage(BaseHospitalRequestMapping.Prescription.api_success, list, page, size, count);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 挂号
|
|
|
*
|
|
|
* @return
|
|
|
*/
|
|
|
public JSONObject registerOutPatient(String outPatientId, String doctor) throws Exception {
|
|
|
|
|
|
WlyyOutpatientDO outpatientDO = outpatientDao.findOne(outPatientId);
|
|
|
|
|
|
|
|
|
DoctorMappingDO doctorMappingDO = doctorMappingService.findMappingCode(doctor, outpatientDO.getHospital());
|
|
|
if (doctorMappingDO == null) {
|
|
|
throw new RuntimeException("未找到医生映射信息");
|
|
|
}
|
|
|
|
|
|
BasePatientDO basePatientDO = basePatientDao.findById(outpatientDO.getPatient());
|
|
|
|
|
|
Integer manageType = 1;//处理类型(1-新增 2-修改 3-删除) 必填
|
|
|
|
|
|
//查找居民当天挂号记录
|
|
|
String date = DateUtil.dateToStr(new Date(), "yyyy-MM-dd");
|
|
|
List<WlyyPatientRegisterDO> patientRegisterDOs = patientRegisterDao.findByPatientAndDateAndDoctor(outpatientDO.getPatient(), date, doctor);
|
|
|
if (patientRegisterDOs != null && patientRegisterDOs.size() > 0) {
|
|
|
WlyyPatientRegisterDO registerDO = patientRegisterDOs.get(0);
|
|
|
//判断是否已经挂号,如果已经挂号
|
|
|
if (StringUtils.isNotBlank(registerDO.getConNo()) && StringUtils.isNotBlank(registerDO.getRegisterNo())) {
|
|
|
|
|
|
JSONObject res = new JSONObject();
|
|
|
res.put("@RESULT", "0");
|
|
|
logger.info("已经挂号 res: " + res.toString());
|
|
|
|
|
|
//更新挂号流水号
|
|
|
outpatientDO.setConNo(registerDO.getConNo());
|
|
|
outpatientDO.setRegisterNo(registerDO.getRegisterNo());
|
|
|
outpatientDO.setAdmDate(registerDO.getCreateTime());
|
|
|
outpatientDao.save(outpatientDO);
|
|
|
//调用电子病历注册
|
|
|
manageType = 2;
|
|
|
registDianziBingli(outpatientDO, basePatientDO, manageType, registerDO.getRegisterNo(), registerDO.getConNo());
|
|
|
return res;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
JSONObject rs = entranceService.BS10111(outpatientDO.getCardNo(), doctorMappingDO.getMappingCode(), outpatientDO.getDept(), null, outpatientDO.getWinNo(), demoFlag);
|
|
|
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");
|
|
|
outpatientDO.setRegisterNo(serialNo);
|
|
|
String conNo = (String) res.get("@times");
|
|
|
outpatientDO.setConNo(conNo);
|
|
|
outpatientDO.setAdmDate(new Date());
|
|
|
logger.info("挂号流水 @serial_no: " + serialNo + " @times: " + conNo);
|
|
|
outpatientDao.save(outpatientDO);
|
|
|
|
|
|
//存储就诊记录
|
|
|
WlyyPatientRegisterDO registerDO = new WlyyPatientRegisterDO();
|
|
|
// 存储挂号医生与挂号科室
|
|
|
registerDO.setDoctor(outpatientDO.getDoctor());
|
|
|
registerDO.setDoctorName(outpatientDO.getDoctorName());
|
|
|
registerDO.setDept(outpatientDO.getDept());
|
|
|
registerDO.setDeptName(outpatientDO.getDeptName());
|
|
|
|
|
|
registerDO.setPatient(outpatientDO.getPatient());
|
|
|
registerDO.setPatientName(outpatientDO.getPatientName());
|
|
|
//挂号流水号与挂号次数
|
|
|
registerDO.setRegisterNo(serialNo);
|
|
|
registerDO.setConNo(conNo);
|
|
|
registerDO.setCreateTime(new Date());
|
|
|
registerDO.setDate(DateUtil.dateToStr(new Date(), "yyyy-MM-dd"));
|
|
|
patientRegisterDao.save(registerDO);
|
|
|
|
|
|
//调用电子病历注册
|
|
|
manageType = 1;//处理类型(1-新增 2-修改 3-删除) 必填
|
|
|
registDianziBingli(outpatientDO, basePatientDO, manageType, registerDO.getRegisterNo(), registerDO.getConNo());
|
|
|
|
|
|
} else if ("-2".equals(rsCode)) {
|
|
|
|
|
|
String serialNo = (String) res.get("@serial_no");
|
|
|
outpatientDO.setRegisterNo(serialNo);
|
|
|
String conNo = (String) res.get("@times");
|
|
|
outpatientDO.setConNo(conNo);
|
|
|
outpatientDO.setAdmDate(new Date());
|
|
|
logger.info("挂号流水 @serial_no: " + serialNo + " @times: " + conNo);
|
|
|
outpatientDao.save(outpatientDO);
|
|
|
|
|
|
//存储就诊记录
|
|
|
WlyyPatientRegisterDO registerDO = new WlyyPatientRegisterDO();
|
|
|
|
|
|
registerDO.setDoctor(outpatientDO.getDoctor());
|
|
|
registerDO.setDoctorName(outpatientDO.getDoctorName());
|
|
|
registerDO.setDept(outpatientDO.getDept());
|
|
|
registerDO.setDeptName(outpatientDO.getDeptName());
|
|
|
|
|
|
registerDO.setPatient(outpatientDO.getPatient());
|
|
|
registerDO.setPatientName(outpatientDO.getPatientName());
|
|
|
registerDO.setRegisterNo(serialNo);
|
|
|
registerDO.setConNo(conNo);
|
|
|
registerDO.setCreateTime(new Date());
|
|
|
registerDO.setDate(DateUtil.dateToStr(new Date(), "yyyy-MM-dd"));
|
|
|
|
|
|
patientRegisterDao.save(registerDO);
|
|
|
|
|
|
//调用电子病历注册
|
|
|
manageType = 1;//处理类型(1-新增 2-修改 3-删除) 必填
|
|
|
registDianziBingli(outpatientDO, basePatientDO, manageType, registerDO.getRegisterNo(), registerDO.getConNo());
|
|
|
}
|
|
|
|
|
|
|
|
|
//保存日志
|
|
|
WlyyHttpLogDO log = new WlyyHttpLogDO();
|
|
|
log.setCode("registerOutPatient");
|
|
|
log.setName("挂号");
|
|
|
log.setPatient(outpatientDO.getPatient());
|
|
|
log.setDoctor(doctor);
|
|
|
log.setResponse(rs.toString());
|
|
|
log.setRequest("outPatientId=" + outPatientId + "&doctor=" + doctor);
|
|
|
log.setStatus(rsCode);
|
|
|
log.setCreateTime(new Date());
|
|
|
wlyyHttpLogDao.save(log);
|
|
|
return res;
|
|
|
}
|
|
|
|
|
|
public String registDianziBingli(WlyyOutpatientDO outpatientDO, BasePatientDO basePatientDO, Integer manageType, String RegisterSN, String registerCon) throws Exception {
|
|
|
|
|
|
//调用电子病历接口注册居民信息
|
|
|
String patientMappingCode = patientMappingService.findHisPatNoByIdCard(basePatientDO.getIdcard());
|
|
|
DoctorMappingDO doctorMappingDO = doctorMappingService.findMappingCode(outpatientDO.getDoctor(), outpatientDO.getHospital());
|
|
|
Map<String, String> params = new HashedMap();
|
|
|
params.put("type", "PatientInfo");
|
|
|
|
|
|
String _xmlStr = "<?xml version='1.0' encoding='UTF-8'?>" +
|
|
|
"<HtRequest>" +
|
|
|
"<OutRegister>" +
|
|
|
"<RecordFlow>" + outpatientDO.getId() + "</RecordFlow>" +
|
|
|
"<RegisterSN>" + RegisterSN + "</RegisterSN>" +
|
|
|
"<TreatDate>" + DateUtil.getStringDate("yyyyMMdd") + "</TreatDate>" +
|
|
|
"<RegisterDeptCode>" + outpatientDO.getDept() + "</RegisterDeptCode>" +
|
|
|
"<RegisterDeptName>" + outpatientDO.getDeptName() + "</RegisterDeptName>" +
|
|
|
"<RegisterDoctorID>" + doctorMappingDO.getMappingCode() + "</RegisterDoctorID>" +
|
|
|
"<RegisterDoctorName>" + doctorMappingDO.getDoctorName() + "</RegisterDoctorName>" +
|
|
|
"<DutyID></DutyID>" +
|
|
|
"<DutyName></DutyName>" +
|
|
|
"<OutPatientTime></OutPatientTime>" +
|
|
|
"<NumClassCode></NumClassCode>" +
|
|
|
"<NumClassName></NumClassName>" +
|
|
|
"<JoinGroupCode></JoinGroupCode>" +
|
|
|
"<JoinGroupName></JoinGroupName>" +
|
|
|
"<NumClassNO></NumClassNO>" +
|
|
|
"<AppointmentDateTime></AppointmentDateTime>" +
|
|
|
"<AppointSN></AppointSN>" +
|
|
|
"<Pid>" + patientMappingCode + "</Pid>" +
|
|
|
"<CardNO>" + outpatientDO.getCardNo() + "</CardNO>\n" +
|
|
|
"<PatientName>" + basePatientDO.getName() + "</PatientName>" +
|
|
|
"<SexCode>" + basePatientDO.getSex() + "</SexCode>";
|
|
|
if (1 == basePatientDO.getSex()) {
|
|
|
_xmlStr = _xmlStr + "<Sex>男</Sex>";
|
|
|
} else {
|
|
|
_xmlStr = _xmlStr + "<Sex>女</Sex>";
|
|
|
}
|
|
|
_xmlStr = _xmlStr + "<Age>" + IdCardUtil.getAgeForIdcard(basePatientDO.getIdcard()) + "</Age>" +
|
|
|
"<AgeDesc>" + IdCardUtil.getAgeForIdcard(basePatientDO.getIdcard()) + "岁</AgeDesc>" +
|
|
|
"<PatientClass></PatientClass>" +
|
|
|
"<FeeTypeCode></FeeTypeCode>" +
|
|
|
"<FeeTypeName></FeeTypeName>" +
|
|
|
"<MedicalInsuranceType></MedicalInsuranceType>" +
|
|
|
"<IsFirst>N</IsFirst>" +
|
|
|
"<RegisterDateTime>20200121</RegisterDateTime>" +
|
|
|
"<RegisterUserID>" + patientMappingCode + "</RegisterUserID>" +
|
|
|
"<RegisterUserName></RegisterUserName>" +
|
|
|
"<OutStatus>20</OutStatus>" +
|
|
|
"<ModifierID></ModifierID>" +
|
|
|
"<Modifier></Modifier>" +
|
|
|
"<ModifyTime></ModifyTime>" +
|
|
|
"<RetreatDateTime></RetreatDateTime>" +
|
|
|
"<RetreatUserID></RetreatUserID>" +
|
|
|
"<RetreatUserName></RetreatUserName>" +
|
|
|
"<PaymentMethodCode></PaymentMethodCode>" +
|
|
|
"<PaymentMethod></PaymentMethod>" +
|
|
|
"<RegisterFee></RegisterFee>" +
|
|
|
"<MedicalFee></MedicalFee>" +
|
|
|
"<OtherFee></OtherFee>" +
|
|
|
"<TotalFee></TotalFee>" +
|
|
|
"<MedicalFloor>N</MedicalFloor>" +
|
|
|
"<MedicalAddress></MedicalAddress>" +
|
|
|
"<LastDeptCode></LastDeptCode>" +
|
|
|
"<LastDeptName></LastDeptName>" +
|
|
|
"<LastDoctorID></LastDoctorID>" +
|
|
|
"<LastDoctorName></LastDoctorName>" +
|
|
|
"<LastTreatDateTime></LastTreatDateTime>" +
|
|
|
"<LastOpid></LastOpid>" +
|
|
|
"<NumTypeCode>0</NumTypeCode>" +
|
|
|
"<NumTypeName></NumTypeName>" +
|
|
|
"<RegisterSource>1</RegisterSource>" +
|
|
|
"<AcctNO></AcctNO>" +
|
|
|
"<IsAcct>N</IsAcct>" +
|
|
|
"<ManageType>" + manageType + "</ManageType>" +
|
|
|
"<Times>" + registerCon + "</Times>" +
|
|
|
"</OutRegister>" +
|
|
|
"<PatientInfo>" +
|
|
|
"<RecordFlow>" + outpatientDO.getId() + "</RecordFlow>" +
|
|
|
"<PID>" + patientMappingCode + "</PID></PatientInfo></HtRequest>";
|
|
|
|
|
|
|
|
|
// String xmlStr = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
|
|
|
// "<HtRequest >" +
|
|
|
// "<PatientInfo>" +
|
|
|
// "<RecordFlow>"+outPatientId+"</RecordFlow >" +
|
|
|
// "<PID>"+patientMappingCode+"</PID>" +
|
|
|
// "<InsuranceNo>"+basePatientDO.getIdcard()+"</InsuranceNo>" +
|
|
|
// "<PatientName>"+basePatientDO.getName()+"</PatientName>" +
|
|
|
// "<TmpFlag>正式</TmpFlag>" +
|
|
|
// "<LastName>"+basePatientDO.getName().substring(1,basePatientDO.getName().length())+"</LastName>" +
|
|
|
// "<FirstName>"+basePatientDO.getName().substring(0,1)+"</FirstName>" +
|
|
|
// "<PY>"+ PinYinUtils.getUpEname(basePatientDO.getName())+"</PY>" +
|
|
|
// "<WB></WB>" +
|
|
|
// "<SexCode>"+basePatientDO.getSex()+"</SexCode>";
|
|
|
// if(1 == basePatientDO.getSex()){
|
|
|
// xmlStr = xmlStr + "<Sex>男</Sex>";
|
|
|
// }else{
|
|
|
// xmlStr = xmlStr + "<Sex>女</Sex>";
|
|
|
// }
|
|
|
//
|
|
|
// xmlStr = xmlStr + "<DateOfBirth>"+DateUtil.dateToStrShort(IdCardUtil.getBirthdayForIdcard(basePatientDO.getIdcard()))+"</DateOfBirth>" +
|
|
|
// "<TimeOfBirth></TimeOfBirth>" +
|
|
|
// "<MarriageStatusCode></MarriageStatusCode>" +
|
|
|
// "<MarriageStatus></MarriageStatus>" +
|
|
|
// "<OccupationCode></OccupationCode>" +
|
|
|
// "<Occupation></Occupation>" +
|
|
|
// "<NationalityCode></NationalityCode>" +
|
|
|
// "<Nationality></Nationality>" +
|
|
|
// "<CountryCode>CN</CountryCode>" +
|
|
|
// "<Country>中国</Country>" +
|
|
|
// "<FormalSchoolingCode></FormalSchoolingCode>" +
|
|
|
// "<FormalSchooling></FormalSchooling>" +
|
|
|
// "<Religion></Religion>" +
|
|
|
// "<BirthPlaceCode></BirthPlaceCode>" +
|
|
|
// "<BirthPlace></BirthPlace>" +
|
|
|
// "<NativePlaceCode></NativePlaceCode>" +
|
|
|
// "<NativePlace></NativePlace>" +
|
|
|
// "<BloodType></BloodType>" +
|
|
|
// "<CertTypeCode>111</CertTypeCode>" +
|
|
|
// "<CertType>身份证</CertType>" +
|
|
|
// "<CertNo>"+basePatientDO.getIdcard()+"</CertNo>" +
|
|
|
// "<PatientClassCode></PatientClassCode>" +
|
|
|
// "<PatientClass></PatientClass>" +
|
|
|
// "<FeeTypeCode></FeeTypeCode>" +
|
|
|
// "<FeeType></FeeType>" +
|
|
|
// "<Company></Company>" +
|
|
|
// "<PublicExpenseNo></PublicExpenseNo>" +
|
|
|
// "<ContractUnitCode></ContractUnitCode> " +
|
|
|
// "<ContractUnit></ContractUnit>" +
|
|
|
// "<BusinessAddressCode></BusinessAddressCode>" +
|
|
|
// "<BusinessAddress></BusinessAddress>" +
|
|
|
// "<BusinessPostCode></BusinessPostCode>" +
|
|
|
// "<BusinessPhone></BusinessPhone>" +
|
|
|
// "<HomeAddressCode></HomeAddressCode>" +
|
|
|
// "<HomeAddress></HomeAddress>" +
|
|
|
// "<HomePostCode></HomePostCode>" +
|
|
|
// "<MobilePhone></MobilePhone>" +
|
|
|
// "<Contact></Contact>" +
|
|
|
// "<RelationCode></RelationCode>" +
|
|
|
// "<Relation></Relation>" +
|
|
|
// "<ContactEmail></ContactEmail>" +
|
|
|
// "<ContactMethod></ContactMethod>" +
|
|
|
// "<VIPType></VIPType>" +
|
|
|
// "<OperatorID></OperatorID>" +
|
|
|
// "<Operator></Operator>" +
|
|
|
// "<OperatorTime>0</OperatorTime>" +
|
|
|
// "<Available></Available>" +
|
|
|
// "<ManageType>"+manageType+"</ManageType>" +
|
|
|
// "<InsuranceTypeCode></InsuranceTypeCode>" +
|
|
|
// "<InsuranceType></InsuranceType>" +
|
|
|
// "<RegisteredAddressCode></RegisteredAddressCode>" +
|
|
|
// "<RegisteredAddress></RegisteredAddress>" +
|
|
|
// "<ContactAddressCode></ContactAddressCode>" +
|
|
|
// "<ContactAddress></ContactAddress>" +
|
|
|
// "<RegisteredPostCode></RegisteredPostCode>" +
|
|
|
// "<ContactPostcode></ContactPostcode>" +
|
|
|
// "<BloodType></BloodType>" +
|
|
|
// "<RhBloodType></RhBloodType>" +
|
|
|
// "</PatientInfo>" +
|
|
|
// "</HtRequest>";
|
|
|
String returnValue = "";
|
|
|
params.put("xmlStr", _xmlStr);
|
|
|
|
|
|
returnValue = WebserviceUtil.post("http://192.10.33.34:9080/HtMzWebService/services/Manage",
|
|
|
"http://business.htemr.haitaiinc.com",
|
|
|
"manageAdt",
|
|
|
params);
|
|
|
|
|
|
logger.info("调用电子病历注册接口请求成功,返回值xmlstr:" + returnValue);
|
|
|
|
|
|
return returnValue;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取诊断
|
|
|
*
|
|
|
* @param pyKey
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public JSONArray getICD10(String pyKey) throws Exception {
|
|
|
return entranceService.MS25001(pyKey, demoFlag);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取药品
|
|
|
*
|
|
|
* @return
|
|
|
*/
|
|
|
public JSONArray getDrugDictionary(String chargeCode, String pyKey, String winNo, String groupNo) throws Exception {
|
|
|
return entranceService.MS53001(chargeCode, pyKey, "0", winNo, "0", groupNo, demoFlag);
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 获取药品用法
|
|
|
*/
|
|
|
public JSONArray getDrugUse(String drugNo, String pyKey) throws Exception {
|
|
|
return entranceService.BS10110(drugNo, pyKey, demoFlag);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 医院频次
|
|
|
*
|
|
|
* @return
|
|
|
*/
|
|
|
public JSONArray getDrugFrequency() throws Exception {
|
|
|
return entranceService.MS30012(demoFlag);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 检查模板选择接口
|
|
|
*
|
|
|
* @param bz_code
|
|
|
* @param flag
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public JSONArray getJcmb(String bz_code, String tc_no, String flag) throws Exception {
|
|
|
return entranceService.BS25033(bz_code, tc_no, flag, demoFlag);
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 检验选择接口
|
|
|
*
|
|
|
* @param bz_code
|
|
|
* @param flag
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public JSONArray getJymb(String bz_code, String tc_no, String flag) throws Exception {
|
|
|
return entranceService.BS20030(bz_code, tc_no, flag, demoFlag);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 套餐选择接口
|
|
|
*
|
|
|
* @param bz_code
|
|
|
* @param flag
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public JSONArray getTcxz(String bz_code, String tc_no, String flag) throws Exception {
|
|
|
return entranceService.MS02017(bz_code, tc_no, flag, demoFlag);
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 套餐子项目接口
|
|
|
*
|
|
|
* @param parent_code 检查检验项目的charge_code
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public JSONArray getTcChild(String parent_code) throws Exception {
|
|
|
return entranceService.MS02015(parent_code, demoFlag);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 项目子项目接口
|
|
|
*
|
|
|
* @param zd_charge_code
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public JSONArray getInsChild(String zd_charge_code) throws Exception {
|
|
|
return entranceService.MS02016(zd_charge_code, demoFlag);
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 获取检查检验
|
|
|
*
|
|
|
* @return
|
|
|
*/
|
|
|
public JSONArray getInspectionDictionary(String pyKey, String codes, String winNo) throws Exception {
|
|
|
JSONArray rs = entranceService.MS25002(pyKey, codes, winNo, demoFlag);
|
|
|
if (rs != null && rs.size() > 0) {
|
|
|
|
|
|
//设置科室翻译名称字典,减少循环层级降低循环次数
|
|
|
List<DictHospitalDeptDO> depts = dictHospitalDeptDao.findByOrgCode("350211A1002");
|
|
|
Map<String, String> deptDictMap = new HashedMap();
|
|
|
for (DictHospitalDeptDO dp : depts) {
|
|
|
deptDictMap.put(dp.getCode(), dp.getName());
|
|
|
}
|
|
|
|
|
|
//翻译执行科室
|
|
|
for (int i = 0; i < rs.size(); i++) {
|
|
|
JSONObject dict = (JSONObject) rs.get(i);
|
|
|
String dept = dict.getString("exec_unit");
|
|
|
if (StringUtils.isNotBlank(dept)) {
|
|
|
String deptName = deptDictMap.get(dept);
|
|
|
if (StringUtils.isNotBlank(deptName)) {
|
|
|
dict.put("exec_unit_name", deptName);
|
|
|
} else {
|
|
|
dict.put("exec_unit_name", "");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return rs;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 下诊断,线上开方
|
|
|
*
|
|
|
* @param outPatientId
|
|
|
* @param advice
|
|
|
* @param type 1带处方,2不带处方
|
|
|
* @param infoJsons
|
|
|
* @param diagnosisJson
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<String, Object> makeDiagnosis(String outPatientId, String advice, String type, String infoJsons, String diagnosisJson, String inspectionJson) throws Exception {
|
|
|
|
|
|
Map<String, Object> result = new HashedMap();
|
|
|
|
|
|
//获取门诊记录
|
|
|
WlyyOutpatientDO outpatientDO = outpatientDao.findOne(outPatientId);
|
|
|
//设置医嘱
|
|
|
outpatientDO.setAdvice(advice);
|
|
|
|
|
|
//========================处方操作=============================================================
|
|
|
//创建处方记录
|
|
|
List<WlyyPrescriptionDO> prescriptionDOs = prescriptionDao.findByOutpatientId(outPatientId);
|
|
|
WlyyPrescriptionDO prescriptionDO = null;
|
|
|
if (prescriptionDOs != null && prescriptionDOs.size() > 0) {
|
|
|
prescriptionDO = prescriptionDOs.get(0);
|
|
|
} else {
|
|
|
prescriptionDO = new WlyyPrescriptionDO();
|
|
|
prescriptionDO.setOutpatientId(outPatientId);
|
|
|
}
|
|
|
prescriptionDO.setCreateTime(new Date());
|
|
|
prescriptionDO.setStatus(10);
|
|
|
prescriptionDO.setPatientCode(outpatientDO.getPatient());
|
|
|
prescriptionDO.setPatientName(outpatientDO.getPatientName());
|
|
|
prescriptionDO.setDoctor(outpatientDO.getDoctor());
|
|
|
prescriptionDO.setDoctorName(outpatientDO.getDoctorName());
|
|
|
WlyyPrescriptionDO prescription = prescriptionDao.save(prescriptionDO);
|
|
|
|
|
|
//========================处方操作结束=============================================================
|
|
|
|
|
|
//加入处方状态变更流水日志
|
|
|
prescriptionLogService.addPrescriptionLog(prescription.getId(), 10, 2, outpatientDO.getDoctor(), outpatientDO.getDoctorName(), "", new Date());
|
|
|
|
|
|
//============================下诊断==============================================================
|
|
|
//删除之前诊断
|
|
|
List<WlyyPrescriptionDiagnosisDO> ds = prescriptionDiagnosisDao.findByPrescriptionId(prescription.getId());
|
|
|
if (ds != null && ds.size() > 0) {
|
|
|
prescriptionDiagnosisDao.delete(ds);
|
|
|
}
|
|
|
|
|
|
List<WlyyPrescriptionDiagnosisDO> diagnosisDOs = (List<WlyyPrescriptionDiagnosisDO>) com.alibaba.fastjson.JSONArray.parseArray(diagnosisJson, WlyyPrescriptionDiagnosisDO.class);
|
|
|
String Icd10 = "";
|
|
|
String Icd10Name = "";
|
|
|
for (WlyyPrescriptionDiagnosisDO diagnosisDO : diagnosisDOs) {
|
|
|
if ("1".equals(diagnosisDO.getType())) {
|
|
|
Icd10 = diagnosisDO.getCode() + "," + Icd10;
|
|
|
Icd10Name += diagnosisDO.getName() + "," + Icd10Name;
|
|
|
} else {
|
|
|
Icd10 += diagnosisDO.getCode() + ",";
|
|
|
Icd10Name += diagnosisDO.getName() + ",";
|
|
|
}
|
|
|
diagnosisDO.setPrescriptionId(prescription.getId());
|
|
|
}
|
|
|
prescriptionDiagnosisDao.save(diagnosisDOs);
|
|
|
|
|
|
//存储icd10
|
|
|
Icd10 = Icd10.substring(0, Icd10.length() - 1);
|
|
|
Icd10Name = Icd10Name.substring(0, Icd10Name.length() - 1);
|
|
|
outpatientDO.setIcd10(Icd10);
|
|
|
outpatientDO.setIcd10Name(Icd10Name);
|
|
|
outpatientDao.save(outpatientDO);
|
|
|
//============================下诊断end==============================================================
|
|
|
|
|
|
//判断是否有检查检验或药品开方
|
|
|
if ("1".equals(type)) {
|
|
|
|
|
|
//doctor转换为his医生
|
|
|
DoctorMappingDO doctorMappingDO = doctorMappingService.findMappingCode(outpatientDO.getDoctor(), outpatientDO.getHospital());
|
|
|
if (doctorMappingDO == null) {
|
|
|
throw new RuntimeException("未找到医生映射信息");
|
|
|
}
|
|
|
|
|
|
//his处方拼接开方条件
|
|
|
com.alibaba.fastjson.JSONArray jsonData = new com.alibaba.fastjson.JSONArray();
|
|
|
|
|
|
//===================药品操作======================================================
|
|
|
// 删除原有药品信息
|
|
|
List<WlyyPrescriptionInfoDO> oldInfos = prescriptionInfoDao.findByPrescriptionId(prescription.getId());
|
|
|
if (oldInfos != null && oldInfos.size() > 0) {
|
|
|
prescriptionInfoDao.delete(oldInfos);
|
|
|
}
|
|
|
|
|
|
//存储药品,构建his开方入参
|
|
|
if (StringUtils.isNotBlank(infoJsons)) {
|
|
|
//药品
|
|
|
List<WlyyPrescriptionInfoDO> infoDOs = (List<WlyyPrescriptionInfoDO>) com.alibaba.fastjson.JSONArray.parseArray(infoJsons, WlyyPrescriptionInfoDO.class);
|
|
|
|
|
|
for (WlyyPrescriptionInfoDO info : infoDOs) {
|
|
|
|
|
|
info.setDel(1);
|
|
|
info.setPrescriptionId(prescription.getId());
|
|
|
|
|
|
//设置his药品查询条件
|
|
|
setInfoJsonParam(jsonData, doctorMappingDO, outpatientDO, prescriptionDO, info, Icd10);
|
|
|
}
|
|
|
//保存药品信息
|
|
|
prescriptionInfoDao.save(infoDOs);
|
|
|
|
|
|
//计算药品费用
|
|
|
prescription.setDrugFee(getInfoFee(infoDOs));
|
|
|
}
|
|
|
//=====================药品操作=======================================================================
|
|
|
|
|
|
|
|
|
//=====================检查检验=======================================================================
|
|
|
//存储检查检验,构建his开方入参
|
|
|
//删除之前检查检验
|
|
|
List<WlyyInspectionDO> inspectionDels = wlyyInspectionDao.findByOutpatientId(outPatientId);
|
|
|
if (inspectionDels != null && inspectionDels.size() > 0) {
|
|
|
wlyyInspectionDao.delete(inspectionDels);
|
|
|
}
|
|
|
|
|
|
if (StringUtils.isNotBlank(inspectionJson)) {
|
|
|
List<WlyyInspectionDO> inspections = (List<WlyyInspectionDO>) com.alibaba.fastjson.JSONArray.parseArray(inspectionJson, WlyyInspectionDO.class);
|
|
|
for (WlyyInspectionDO ins : inspections) {
|
|
|
|
|
|
ins.setCreateTime(new Date());
|
|
|
ins.setPrescriptionId(prescription.getId());
|
|
|
ins.setOutpatientId(outPatientId);
|
|
|
|
|
|
//设置his药品查询条件
|
|
|
setInspectionParam(jsonData, doctorMappingDO, outpatientDO, prescriptionDO, ins, Icd10);
|
|
|
}
|
|
|
//保存检查检验。
|
|
|
wlyyInspectionDao.save(inspections);
|
|
|
|
|
|
//计算检查检验费用
|
|
|
prescription.setDrugFee(getInsFee(inspections));
|
|
|
}
|
|
|
//=====================检查检验=======================================================================
|
|
|
|
|
|
//保存挂号费用
|
|
|
prescription.setRegFee(getChargeFee(outpatientDO.getDoctor()));
|
|
|
//保存费用
|
|
|
prescriptionDao.save(prescription);
|
|
|
|
|
|
//上传his开方
|
|
|
return sendHisDiagnosis(jsonData, outpatientDO, prescription);
|
|
|
|
|
|
} else {
|
|
|
|
|
|
outpatientDO.setStatus("2");
|
|
|
outpatientDao.save(outpatientDO);
|
|
|
result.put("code", 1);
|
|
|
result.put("mes", "诊断完成");
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 计算药品费用
|
|
|
*
|
|
|
* @param infoDOs
|
|
|
* @return
|
|
|
*/
|
|
|
public Double getInfoFee(List<WlyyPrescriptionInfoDO> infoDOs) {
|
|
|
Double fee = 0D;
|
|
|
try {
|
|
|
if (infoDOs != null && infoDOs.size() > 0) {
|
|
|
for (WlyyPrescriptionInfoDO info : infoDOs) {
|
|
|
Integer quantity = Integer.parseInt(info.getQuantity());
|
|
|
fee += info.getPackRetprice() * quantity;
|
|
|
}
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
logger.error("getInfoFee:" + e.toString());
|
|
|
}
|
|
|
return fee;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 计算检查检验费用
|
|
|
*
|
|
|
* @param inspections
|
|
|
* @return
|
|
|
*/
|
|
|
public Double getInsFee(List<WlyyInspectionDO> inspections) {
|
|
|
Double fee = 0D;
|
|
|
try {
|
|
|
if (inspections != null && inspections.size() > 0) {
|
|
|
for (WlyyInspectionDO ins : inspections) {
|
|
|
Double chargeAmount = Double.parseDouble(ins.getChargeAmount());
|
|
|
fee += chargeAmount * ins.getQuantity();
|
|
|
}
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
logger.error("getInsFee:" + e.toString());
|
|
|
}
|
|
|
return fee;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 计算挂号费用
|
|
|
*
|
|
|
* @param doctor
|
|
|
* @return
|
|
|
*/
|
|
|
public Double getChargeFee(String doctor) {
|
|
|
Double fee = 0D;
|
|
|
try {
|
|
|
BaseDoctorDO doctorDO = baseDoctorDao.findById(doctor);
|
|
|
WlyyChargeDictDO chargeDictDO = wlyyChargeDictDao.findByChargeTypeAndDeptTypeCode(doctorDO.getChargeType(), "6");
|
|
|
return chargeDictDO.getReqFee();
|
|
|
} catch (Exception e) {
|
|
|
logger.error("getChargeFee:" + e.toString());
|
|
|
|
|
|
}
|
|
|
return fee;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 上传his开方
|
|
|
*
|
|
|
* @param jsonData
|
|
|
* @param outpatientDO
|
|
|
* @param prescription
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public Map<String, Object> sendHisDiagnosis(com.alibaba.fastjson.JSONArray jsonData, WlyyOutpatientDO outpatientDO, WlyyPrescriptionDO prescription) throws Exception {
|
|
|
Map<String, Object> result = new HashedMap();
|
|
|
//调用his开方接口
|
|
|
JSONObject jsonObject = entranceService.BS10112(jsonData.toJSONString(), demoFlag);
|
|
|
//如果无法解析his系统报文,his系统报错
|
|
|
if (jsonObject == null) {
|
|
|
//记录http日志
|
|
|
WlyyHttpLogDO log = new WlyyHttpLogDO();
|
|
|
log.setCode("makeDiagnosis");
|
|
|
log.setName("下诊断");
|
|
|
log.setPatient(outpatientDO.getPatient());
|
|
|
log.setDoctor(outpatientDO.getDoctor());
|
|
|
log.setResponse("his系统异常,无法解析返回值");
|
|
|
log.setRequest(jsonData.toJSONString());
|
|
|
log.setStatus("-99");
|
|
|
log.setCreateTime(new Date());
|
|
|
wlyyHttpLogDao.save(log);
|
|
|
//开方失败
|
|
|
//更新处方状态
|
|
|
prescription.setStatus(13);
|
|
|
prescriptionDao.save(prescription);
|
|
|
//记录开发失败日志
|
|
|
prescriptionLogService.addPrescriptionLog(prescription.getId(), 13, 2, outpatientDO.getDoctor(), outpatientDO.getDoctorName(), "", new Date());
|
|
|
//开方失败返回值
|
|
|
result.put("code", -1);
|
|
|
result.put("mes", "开方失败,his系统异常");
|
|
|
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
logger.info("调用his开方接口: " + jsonObject.toString());
|
|
|
//判断返回结果
|
|
|
String rs = jsonObject.getString("@RESULT");
|
|
|
//保存日志
|
|
|
WlyyHttpLogDO log = new WlyyHttpLogDO();
|
|
|
log.setCode("makeDiagnosis");
|
|
|
log.setName("下诊断");
|
|
|
log.setPatient(outpatientDO.getPatient());
|
|
|
log.setDoctor(outpatientDO.getDoctor());
|
|
|
log.setResponse(jsonObject.toString());
|
|
|
log.setRequest(jsonData.toJSONString());
|
|
|
log.setStatus(rs);
|
|
|
log.setCreateTime(new Date());
|
|
|
wlyyHttpLogDao.save(log);
|
|
|
|
|
|
if ("0".equals(rs)) {
|
|
|
String admNo = jsonObject.getString("@ADM_NO");
|
|
|
String realOrder = jsonObject.getString("@real_order");
|
|
|
|
|
|
prescription.setAdmNo(admNo);
|
|
|
prescription.setRealOrder(realOrder);
|
|
|
prescriptionDao.save(prescription);
|
|
|
outpatientDO.setAdmNo(admNo);
|
|
|
outpatientDao.save(outpatientDO);
|
|
|
|
|
|
result.put("code", 1);
|
|
|
result.put("mes", "开方提交成功");
|
|
|
|
|
|
return result;
|
|
|
} else {
|
|
|
//开方失败
|
|
|
result.put("code", -1);
|
|
|
result.put("mes", jsonObject.getString("@MSG"));
|
|
|
//更新处方状态
|
|
|
prescription.setStatus(13);
|
|
|
prescriptionDao.save(prescription);
|
|
|
//记录开发失败日志
|
|
|
prescriptionLogService.addPrescriptionLog(prescription.getId(), 13, 2, outpatientDO.getDoctor(), outpatientDO.getDoctorName(), "", new Date());
|
|
|
|
|
|
return result;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 设置检查检验his入参
|
|
|
*
|
|
|
* @param jsonData
|
|
|
* @param doctorMappingDO
|
|
|
* @param outpatientDO
|
|
|
* @param inspectionDO
|
|
|
* @param Icd10
|
|
|
*/
|
|
|
public void setInspectionParam(com.alibaba.fastjson.JSONArray jsonData, DoctorMappingDO doctorMappingDO, WlyyOutpatientDO outpatientDO, WlyyPrescriptionDO prescriptionDO, WlyyInspectionDO inspectionDO, String Icd10) {
|
|
|
|
|
|
com.alibaba.fastjson.JSONObject json = new com.alibaba.fastjson.JSONObject();
|
|
|
if (StringUtils.isNotBlank(prescriptionDO.getRealOrder())) {
|
|
|
json.put("realOrder", prescriptionDO.getRealOrder());
|
|
|
}
|
|
|
json.put("cardNo", outpatientDO.getCardNo());
|
|
|
json.put("doctor", doctorMappingDO.getMappingCode());
|
|
|
json.put("dept", outpatientDO.getDept());
|
|
|
|
|
|
json.put("frequency", inspectionDO.getFrequency()); //组号
|
|
|
json.put("quantity", inspectionDO.getQuantity()); //数量
|
|
|
json.put("serialNo", outpatientDO.getRegisterNo()); //挂号流水号-必输
|
|
|
json.put("groupNo", "00"); //-库房号
|
|
|
json.put("serial", "00"); //药品序列号-必输
|
|
|
|
|
|
json.put("winNo", outpatientDO.getWinNo());
|
|
|
json.put("chargeFlag", 2); //项目类别-必输 1-药品 2检验检查
|
|
|
/**
|
|
|
* code;//项目编码',
|
|
|
* name;//(检查方法)',
|
|
|
* information;//病史与体征',
|
|
|
* checkEquip;//类别',
|
|
|
* checkPart;//部位',
|
|
|
* adresult;//辅助检查治疗',
|
|
|
* goal;//检查目的',
|
|
|
* opview;//手术所见-病理申请单必填',
|
|
|
* specimenName;//标本名称-病理申请单必填',
|
|
|
* specimenNum;//标本数量-病理申请单必填',
|
|
|
* ywjcResult;//以往检查结果-病理申请单选填',
|
|
|
* ywjcDate;//以往检查时间-病理申请单选填 格式:yyyy-mm-dd',
|
|
|
* blzd;//病理诊断-病理申请单选填',
|
|
|
* fixationfluid;//固定液
|
|
|
*/
|
|
|
json.put("parentCode", inspectionDO.getParentCode()); //父节点
|
|
|
json.put("chargeCode", inspectionDO.getCode()); //项目编码
|
|
|
json.put("name", inspectionDO.getName()); //挂号流水号-必输
|
|
|
json.put("information", inspectionDO.getInformation());//库房号-必输
|
|
|
json.put("checkEquip", inspectionDO.getCheckEquip()); //药品序列号-必输
|
|
|
json.put("checkPart", inspectionDO.getCheckPart());
|
|
|
json.put("adresult", inspectionDO.getAdresult());
|
|
|
json.put("goal", inspectionDO.getGoal());
|
|
|
json.put("opview", inspectionDO.getOpview());
|
|
|
json.put("specimenName", inspectionDO.getSpecimenName());
|
|
|
json.put("specimenNum", inspectionDO.getSpecimenNum());
|
|
|
json.put("ywjcResult", inspectionDO.getYwjcResult());
|
|
|
json.put("ywjcDate", inspectionDO.getYwjcDate());
|
|
|
json.put("blzd", inspectionDO.getBlzd());
|
|
|
json.put("fixationfluid", inspectionDO.getFixationfluid());
|
|
|
//设置诊断
|
|
|
setIcd10(json, Icd10);
|
|
|
jsonData.add(json);
|
|
|
logger.info("json:" + json.toString());
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 设置药品his入参
|
|
|
*
|
|
|
* @param jsonData
|
|
|
* @param doctorMappingDO
|
|
|
* @param outpatientDO
|
|
|
* @param info
|
|
|
* @param Icd10
|
|
|
*/
|
|
|
public void setInfoJsonParam(com.alibaba.fastjson.JSONArray jsonData, DoctorMappingDO doctorMappingDO, WlyyOutpatientDO outpatientDO, WlyyPrescriptionDO prescriptionDO, WlyyPrescriptionInfoDO info, String Icd10) {
|
|
|
|
|
|
com.alibaba.fastjson.JSONObject json = new com.alibaba.fastjson.JSONObject();
|
|
|
|
|
|
if (StringUtils.isNotBlank(prescriptionDO.getRealOrder())) {
|
|
|
json.put("realOrder", prescriptionDO.getRealOrder());
|
|
|
}
|
|
|
json.put("cardNo", outpatientDO.getCardNo());
|
|
|
json.put("doctor", doctorMappingDO.getMappingCode());
|
|
|
json.put("dept", outpatientDO.getDept());
|
|
|
json.put("chargeCode", info.getDrugNo());
|
|
|
json.put("winNo", outpatientDO.getWinNo());
|
|
|
json.put("chargeFlag", 1); //项目类别-必输 1-药品 2检验检查
|
|
|
json.put("quantity", info.getQuantity()); //数量-必输
|
|
|
json.put("serialNo", outpatientDO.getRegisterNo()); //挂号流水号-必输
|
|
|
json.put("groupNo", info.getGroupNo());//库房号-必输
|
|
|
json.put("serial", info.getSerial()); //药品序列号-必输
|
|
|
|
|
|
json.put("dosage", info.getDosage());
|
|
|
json.put("unit", info.getUnit());
|
|
|
json.put("usage", info.getUsageCode());
|
|
|
json.put("supplyCode", info.getSupplyCode());
|
|
|
if (StringUtils.isNotBlank(info.getDays())) {
|
|
|
json.put("days", info.getDays());
|
|
|
} else {
|
|
|
//如果是中草药,贴数为天数,没有默认1天
|
|
|
json.put("days", StringUtils.isNotBlank(info.getPostCount()) ? info.getPostCount() : "1");
|
|
|
}
|
|
|
json.put("frequency", info.getFrequency());
|
|
|
json.put("comm", info.getComm());
|
|
|
|
|
|
//设置诊断
|
|
|
setIcd10(json, Icd10);
|
|
|
|
|
|
jsonData.add(json);
|
|
|
logger.info("json:" + json.toString());
|
|
|
}
|
|
|
|
|
|
public void setIcd10(com.alibaba.fastjson.JSONObject json, String Icd10) {
|
|
|
String Icd10s[] = Icd10.split(",");
|
|
|
for (int i = 0; i < Icd10s.length; i++) {
|
|
|
if (i == 0) {
|
|
|
json.put("icdCode", Icd10s[i]);
|
|
|
} else if (i == 1) {
|
|
|
json.put("diagTwo", Icd10s[i]);
|
|
|
} else if (i == 2) {
|
|
|
json.put("diagThree", Icd10s[i]);
|
|
|
} else if (i == 3) {
|
|
|
json.put("diagFour", Icd10s[i]);
|
|
|
} else if (i == 4) {
|
|
|
json.put("diagFive", Icd10s[i]);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 订单查询
|
|
|
*
|
|
|
* @param status
|
|
|
* @param oneselfPickupFlg
|
|
|
* @param nameKey
|
|
|
* @param startTime
|
|
|
* @param endTime
|
|
|
* @param page
|
|
|
* @param size
|
|
|
* @return
|
|
|
*/
|
|
|
public MixEnvelop findExpressageList(String status, String oneselfPickupFlg, String nameKey, String startTime, String endTime, Integer page, Integer size) {
|
|
|
String totalSql = "SELECT " +
|
|
|
" COUNT(1) AS total " +
|
|
|
" FROM " +
|
|
|
" wlyy_outpatient o " +
|
|
|
" JOIN wlyy_prescription p ON p.outpatient_id = o.id " +
|
|
|
" JOIN wlyy_prescription_expressage e ON e.outpatient_id = o.id" +
|
|
|
" WHERE" +
|
|
|
" 1=1";
|
|
|
if (StringUtils.isNotBlank(status)) {
|
|
|
totalSql += " AND p.status in(" + status + ")";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(oneselfPickupFlg)) {
|
|
|
totalSql += " AND e.oneself_pickup_flg =" + oneselfPickupFlg;
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(nameKey)) {
|
|
|
totalSql += " AND e.name like '%" + nameKey + "%'";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(startTime)) {
|
|
|
totalSql += " AND e.create_time >='" + startTime + " 00:00:00'";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(endTime)) {
|
|
|
totalSql += " AND e.create_time <='" + endTime + " 23:59:59'";
|
|
|
}
|
|
|
List<Map<String, Object>> rstotal = jdbcTemplate.queryForList(totalSql);
|
|
|
|
|
|
Long count = 0L;
|
|
|
if (rstotal != null && rstotal.size() > 0) {
|
|
|
count = (Long) rstotal.get(0).get("total");
|
|
|
}
|
|
|
String sql = "SELECT " +
|
|
|
" e.create_time AS createTime, " +
|
|
|
" e.`name`, " +
|
|
|
" e.oneself_pickup_flg AS oneselfPickupFlg, " +
|
|
|
" o.id AS outpatientId, " +
|
|
|
" o.icd10_name AS icd10Name, " +
|
|
|
" p.`status`, " +
|
|
|
" p.id AS prescriptionId ," +
|
|
|
" e.id AS expressageId" +
|
|
|
" FROM " +
|
|
|
" wlyy_outpatient o " +
|
|
|
" JOIN wlyy_prescription p ON p.outpatient_id = o.id " +
|
|
|
" JOIN wlyy_prescription_expressage e ON e.outpatient_id = o.id " +
|
|
|
" WHERE" +
|
|
|
" 1=1";
|
|
|
if (StringUtils.isNotBlank(status)) {
|
|
|
sql += " AND p.status in(" + status + ")";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(oneselfPickupFlg)) {
|
|
|
sql += " AND e.oneself_pickup_flg =" + oneselfPickupFlg;
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(nameKey)) {
|
|
|
sql += " AND e.name like '%" + nameKey + "%'";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(startTime)) {
|
|
|
sql += " AND e.create_time >='" + startTime + " 00:00:00'";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(endTime)) {
|
|
|
sql += " AND e.create_time <='" + endTime + " 23:59:59'";
|
|
|
}
|
|
|
|
|
|
sql += " LIMIT " + (page - 1) * size + "," + size + "";
|
|
|
List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
|
|
|
|
|
|
return MixEnvelop.getSuccessListWithPage(BaseHospitalRequestMapping.Prescription.api_success, list, page, size, count);
|
|
|
|
|
|
}
|
|
|
|
|
|
public Boolean setMailno(String mailno, String expressageId) {
|
|
|
WlyyPrescriptionExpressageDO expressageDO = prescriptionExpressageDao.findOne(expressageId);
|
|
|
expressageDO.setMailno(mailno);
|
|
|
prescriptionExpressageDao.save(expressageDO);
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
|
|
|
public void pushListWrite(OutputStream os, List<Map<String, Object>> ls) throws Exception {
|
|
|
WritableWorkbook wwb = jxl.Workbook.createWorkbook(os);
|
|
|
try {
|
|
|
WritableSheet ws;
|
|
|
ws = wwb.createSheet("sheet", 1);
|
|
|
|
|
|
String[] header = {"订单日期", "收货人", "诊断结果", "配送方式", "订单状态"};
|
|
|
int k = 0;
|
|
|
for (String h : header) {
|
|
|
addCell(ws, 0, k, h);//表名,行,列,header
|
|
|
k++;
|
|
|
}
|
|
|
|
|
|
int i = 1;
|
|
|
for (Map<String, Object> m : ls) {
|
|
|
addCell(ws, i, 0, DateUtil.dateToStr((Date) m.get("createTime"), "yyyy-MM-dd HH:mm:ss"), "");
|
|
|
addCell(ws, i, 1, (String) m.get("name"), "");
|
|
|
addCell(ws, i, 2, (String) m.get("icd10Name"), "");
|
|
|
addCell(ws, i, 3, getOneselfPickupFlgString((Integer) m.get("oneselfPickupFlg")), "");
|
|
|
addCell(ws, i, 4, getStatusName((Integer) m.get("status")), "");
|
|
|
i++;
|
|
|
}
|
|
|
wwb.write();
|
|
|
wwb.close();
|
|
|
} catch (IOException e) {
|
|
|
e.printStackTrace();
|
|
|
if (wwb != null) wwb.close();
|
|
|
throw e;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @return
|
|
|
*/
|
|
|
public String getOneselfPickupFlgString(Integer oneselfPickupFlg) {
|
|
|
if (1 == oneselfPickupFlg) {
|
|
|
return "自取";
|
|
|
} else if (0 == oneselfPickupFlg) {
|
|
|
return "快递";
|
|
|
} else {
|
|
|
return "其他";
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @param status
|
|
|
* @return
|
|
|
*/
|
|
|
public String getStatusName(Integer status) {
|
|
|
if (31 == status) {
|
|
|
return "待配送";
|
|
|
} else if (32 == status) {
|
|
|
return "配送中";
|
|
|
} else if (100 == status) {
|
|
|
return "已完成";
|
|
|
} else {
|
|
|
return "其他";
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//添加单元格内容
|
|
|
public void addCell(WritableSheet ws, int row, int column, String data) throws WriteException {
|
|
|
Label label = new Label(column, row, data);
|
|
|
ws.addCell(label);
|
|
|
}
|
|
|
|
|
|
//添加单元格内容
|
|
|
public void addCell(WritableSheet ws, int row, int column, String data, String memo) throws WriteException {
|
|
|
Label label = new Label(column, row, data);
|
|
|
if (!org.springframework.util.StringUtils.isEmpty(memo)) {
|
|
|
WritableCellFeatures cellFeatures = new WritableCellFeatures();
|
|
|
cellFeatures.setComment(memo);
|
|
|
label.setCellFeatures(cellFeatures);
|
|
|
}
|
|
|
ws.addCell(label);
|
|
|
}
|
|
|
|
|
|
public List<WlyyChargeDictVO> findByDeptTypeCode(String deptTypeCode) {
|
|
|
List<WlyyChargeDictDO> dictDOs = wlyyChargeDictDao.findByDeptTypeCode(deptTypeCode);
|
|
|
List<WlyyChargeDictVO> dictVOs = new ArrayList<>();
|
|
|
return convertToModels(dictDOs, dictVOs, WlyyChargeDictVO.class);
|
|
|
}
|
|
|
|
|
|
|
|
|
// 过时
|
|
|
// public List<WlyyDoctorWorkTimeVO> findDoctorWorkTime(String doctor) {
|
|
|
// //获取医生排班规则
|
|
|
// List<WlyyHospitalSysDictDO> list = sysDictDao.findByDictName("Scheduling");
|
|
|
//
|
|
|
// Calendar ncTime = Calendar.getInstance();
|
|
|
// ncTime.setTime(new Date());
|
|
|
//
|
|
|
// Calendar scTime = Calendar.getInstance();
|
|
|
// scTime.setTime(new Date());
|
|
|
//
|
|
|
// Calendar ecTime = Calendar.getInstance();
|
|
|
// ecTime.setTime(new Date());
|
|
|
//
|
|
|
// //设置几天号源,及最后天号源的开放时间
|
|
|
// int days = Integer.parseInt(findHospitalSysDictValue(list, "OpenDays"));
|
|
|
// String closeTime = findHospitalSysDictValue(list, "CloseTime");
|
|
|
//
|
|
|
// //比较当前时间是否超过开放时间
|
|
|
// if (DateUtil.strToDate(DateUtil.getTimeShort(), DateUtil.HH_MM_SS).after(DateUtil.strToDate(closeTime, DateUtil.HH_MM))) {
|
|
|
// //当前时间超过开放时间,可以预约最后一天全部号源
|
|
|
// ecTime.add(Calendar.DAY_OF_MONTH, days);
|
|
|
// ecTime.set(ecTime.get(Calendar.YEAR), ecTime.get(Calendar.MONTH), ecTime.get(Calendar.DATE), 23, 59, 59);
|
|
|
// } else {
|
|
|
// //当前时间没超过开放时间,可以预约最后一天前一天全部号源
|
|
|
// ecTime.add(Calendar.DAY_OF_MONTH, days > 1 ? days - 1 : 0);
|
|
|
// ecTime.set(ecTime.get(Calendar.YEAR), ecTime.get(Calendar.MONTH), ecTime.get(Calendar.DATE), 23, 59, 59);
|
|
|
// }
|
|
|
//
|
|
|
//
|
|
|
// List<WlyyDoctorWorkTimeDO> times = doctorWorkTimeDao.findDoctorWorkTime(doctor, scTime.getTime(), ecTime.getTime());
|
|
|
//
|
|
|
// workTimeFilter(list, times);
|
|
|
//
|
|
|
// List<WlyyDoctorWorkTimeVO> timeVOs = new ArrayList<>();
|
|
|
//
|
|
|
// convertToModels(times, timeVOs, WlyyDoctorWorkTimeVO.class);
|
|
|
//
|
|
|
// if (timeVOs != null && timeVOs.size() > 0) {
|
|
|
// for (WlyyDoctorWorkTimeVO timeVO : timeVOs) {
|
|
|
// timeVO.setCount(findWorkTimeCount(timeVO.getId()));
|
|
|
// }
|
|
|
// }
|
|
|
// return timeVOs;
|
|
|
// }
|
|
|
|
|
|
// public List<WlyyDoctorWorkTimeDO> workTimeFilter(List<WlyyHospitalSysDictDO> sys, List<WlyyDoctorWorkTimeDO> times) {
|
|
|
//
|
|
|
// if (times != null && times.size() > 0) {
|
|
|
// //上午号源开放的最早天数
|
|
|
// int AMCloseDays = Integer.parseInt(findHospitalSysDictValue(sys, "AMCloseDays"));
|
|
|
// //每一天上午的最早预约的过号时间
|
|
|
// String AMCloseTime = findHospitalSysDictValue(sys, "AMCloseTime");
|
|
|
// //下午号源开放的最早天数
|
|
|
// int PMCloseDays = Integer.parseInt(findHospitalSysDictValue(sys, "PMCloseDays"));
|
|
|
// //每一天下午的最早预约的过号时间
|
|
|
// String PMCloseTime = findHospitalSysDictValue(sys, "PMCloseTime");
|
|
|
//
|
|
|
// Iterator it = times.iterator();
|
|
|
// while (it.hasNext()) {
|
|
|
// //设置上午过号时间
|
|
|
// Calendar scAMTime = Calendar.getInstance();
|
|
|
// scAMTime.setTime(new Date());
|
|
|
// scAMTime.add(Calendar.DAY_OF_MONTH, AMCloseDays);
|
|
|
//
|
|
|
// //设置下午午过号时间
|
|
|
// Calendar scPMTime = Calendar.getInstance();
|
|
|
// scPMTime.setTime(new Date());
|
|
|
// scPMTime.add(Calendar.DAY_OF_MONTH, PMCloseDays);
|
|
|
//
|
|
|
// WlyyDoctorWorkTimeDO time = (WlyyDoctorWorkTimeDO) it.next();
|
|
|
//
|
|
|
// Boolean filter = true;
|
|
|
//
|
|
|
// //1.【上午的排班中】 且 【排班结束时间】如果在【开放时间】前,则移除
|
|
|
// if (filter && "1".equals(time.getTimeType()) && time.getEndTime().before(scAMTime.getTime())) {
|
|
|
// it.remove();
|
|
|
// filter = false;
|
|
|
// }
|
|
|
//
|
|
|
// //2.【下午午的排班中】 且 【排班结束时间】如果在【开放时间】前,则移除该排班
|
|
|
// if (filter && "2".equals(time.getTimeType()) && time.getEndTime().before(scPMTime.getTime())) {
|
|
|
// it.remove();
|
|
|
// filter = false;
|
|
|
// }
|
|
|
//
|
|
|
// //3.如果【当前时间】过了【上午放号时间】,则移除所有上午的排班
|
|
|
// if (filter && "1".equals(time.getTimeType()) &&
|
|
|
// DateUtil.strToDate(DateUtil.getTimeShort(), DateUtil.HH_MM_SS).after(DateUtil.strToDate(AMCloseTime, DateUtil.HH_MM))) {
|
|
|
// scAMTime.set(scAMTime.get(Calendar.YEAR), scAMTime.get(Calendar.MONTH), scAMTime.get(Calendar.DATE), 12, 00, 00);
|
|
|
//
|
|
|
// if (time.getEndTime().before(scAMTime.getTime())) {
|
|
|
// it.remove();
|
|
|
// filter = false;
|
|
|
// }
|
|
|
// }
|
|
|
// //4.如果【当前时间】过了【下午午放号时间】,则移除所有下午的排班
|
|
|
// if (filter && "2".equals(time.getTimeType()) &&
|
|
|
// DateUtil.strToDate(DateUtil.getTimeShort(), DateUtil.HH_MM_SS).after(DateUtil.strToDate(PMCloseTime, DateUtil.HH_MM))) {
|
|
|
// scPMTime.set(scAMTime.get(Calendar.YEAR), scAMTime.get(Calendar.MONTH), scAMTime.get(Calendar.DATE), 12, 00, 00);
|
|
|
//
|
|
|
// if (time.getEndTime().before(scPMTime.getTime())) {
|
|
|
// it.remove();
|
|
|
// }
|
|
|
// }
|
|
|
// }
|
|
|
// }
|
|
|
// return times;
|
|
|
// }
|
|
|
|
|
|
|
|
|
public String findHospitalSysDictValue(List<WlyyHospitalSysDictDO> list, String dictCode) {
|
|
|
|
|
|
if (list != null && list.size() > 0) {
|
|
|
for (WlyyHospitalSysDictDO sysDictDO : list) {
|
|
|
if (dictCode.equals(sysDictDO.getDictCode())) {
|
|
|
return sysDictDO.getDictValue();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return "";
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取卡信息
|
|
|
*
|
|
|
* @param cardNo
|
|
|
* @param demoFlag
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public JSONObject getCardInfo(String cardNo, boolean demoFlag) throws Exception {
|
|
|
return entranceService.qutpatientBalance(cardNo, demoFlag);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 新排班号源详情
|
|
|
* @param id
|
|
|
* @return
|
|
|
*/
|
|
|
public List<Map<String,Object>> findWorkTimeInfo(String id){
|
|
|
WlyyDoctorWorkTimeDO timeDO = doctorWorkTimeDao.findOne(id);
|
|
|
|
|
|
Long ss = timeDO.getEndTime().getTime()-timeDO.getStartTime().getTime();
|
|
|
Long s = ss/timeDO.getSourceNumber();
|
|
|
|
|
|
Calendar sc = Calendar.getInstance();
|
|
|
sc.setTime(timeDO.getStartTime());
|
|
|
|
|
|
List<Map<String,Object>> rs = new ArrayList<>();
|
|
|
|
|
|
//1.根据当前时间,去取已过时间的号源
|
|
|
while (sc.getTime().before(timeDO.getEndTime())){
|
|
|
if(new Date().before(sc.getTime())){
|
|
|
break;
|
|
|
}
|
|
|
//加上时间间隔
|
|
|
Date temp =new Date();
|
|
|
temp.setTime(sc.getTime().getTime()+s);
|
|
|
sc.setTime(temp);
|
|
|
}
|
|
|
|
|
|
List<WlyyPatientRegisterTimeDO> registerTimeDOs = patientRegisterTimeDao.findByDoctorAndWorkId(timeDO.getDoctor(),id);
|
|
|
|
|
|
//2.根据时间间隔拆分号源
|
|
|
while (sc.getTime().before(timeDO.getEndTime())){
|
|
|
|
|
|
Map<String,Object> t = new HashedMap();
|
|
|
t.put("startTime",DateUtil.dateToStr(sc.getTime(),"yyyy-MM-dd HH:mm:ss"));
|
|
|
//加上时间间隔
|
|
|
Date temp =new Date();
|
|
|
temp.setTime(sc.getTime().getTime()+s);
|
|
|
sc.setTime(temp);
|
|
|
//如果结束时间大于排班时间则不再拆分号源
|
|
|
if(sc.getTime().after(timeDO.getEndTime())){
|
|
|
break;
|
|
|
}
|
|
|
t.put("endTime",DateUtil.dateToStr(sc.getTime(),"yyyy-MM-dd HH:mm:ss"));
|
|
|
|
|
|
//如果号源被预约了,标记为true
|
|
|
Boolean registered = false;
|
|
|
if(registerTimeDOs!=null&®isterTimeDOs.size()>0){
|
|
|
for(WlyyPatientRegisterTimeDO registerTimeDO : registerTimeDOs){
|
|
|
if(t.get("startTime").equals(DateUtil.dateToStr(registerTimeDO.getStartTime(),"yyyy-MM-dd HH:mm:ss"))){
|
|
|
registered = true;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
t.put("registered",registered);
|
|
|
rs.add(t);
|
|
|
}
|
|
|
|
|
|
return rs;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 计算号源数目
|
|
|
* @param id
|
|
|
* @return
|
|
|
*/
|
|
|
public Integer findWorkTimeInfoCout(String id){
|
|
|
WlyyDoctorWorkTimeDO timeDO = doctorWorkTimeDao.findOne(id);
|
|
|
|
|
|
if(timeDO.getSourceNumber()==null||timeDO.getStartTime()==null||timeDO.getEndTime()==null){
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
Long ss = timeDO.getEndTime().getTime()-timeDO.getStartTime().getTime();
|
|
|
Long s = ss/timeDO.getSourceNumber();
|
|
|
|
|
|
Calendar sc = Calendar.getInstance();
|
|
|
sc.setTime(timeDO.getStartTime());
|
|
|
|
|
|
List<Map<String,Object>> rs = new ArrayList<>();
|
|
|
|
|
|
//1.根据当前时间,去取已过时间的号源
|
|
|
while (sc.getTime().before(timeDO.getEndTime())){
|
|
|
if(new Date().before(sc.getTime())){
|
|
|
break;
|
|
|
}
|
|
|
//加上时间间隔
|
|
|
Date temp =new Date();
|
|
|
temp.setTime(sc.getTime().getTime()+s);
|
|
|
sc.setTime(temp);
|
|
|
}
|
|
|
|
|
|
List<WlyyPatientRegisterTimeDO> registerTimeDOs = patientRegisterTimeDao.findByDoctorAndWorkId(timeDO.getDoctor(),id);
|
|
|
|
|
|
//2.根据时间间隔拆分号源
|
|
|
while (sc.getTime().before(timeDO.getEndTime())){
|
|
|
|
|
|
Map<String,Object> t = new HashedMap();
|
|
|
t.put("startTime",DateUtil.dateToStr(sc.getTime(),"yyyy-MM-dd HH:mm:ss"));
|
|
|
//加上时间间隔
|
|
|
Date temp =new Date();
|
|
|
temp.setTime(sc.getTime().getTime()+s);
|
|
|
sc.setTime(temp);
|
|
|
//如果结束时间大于排班时间则不再拆分号源
|
|
|
if(sc.getTime().after(timeDO.getEndTime())){
|
|
|
break;
|
|
|
}
|
|
|
t.put("endTime",DateUtil.dateToStr(sc.getTime(),"yyyy-MM-dd HH:mm:ss"));
|
|
|
|
|
|
//如果号源被预约了,标记为true
|
|
|
Boolean registered = false;
|
|
|
if(registerTimeDOs!=null&®isterTimeDOs.size()>0){
|
|
|
for(WlyyPatientRegisterTimeDO registerTimeDO : registerTimeDOs){
|
|
|
if(t.get("startTime").equals(DateUtil.dateToStr(registerTimeDO.getStartTime(),"yyyy-MM-dd HH:mm:ss"))){
|
|
|
registered = true;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if(!registered){
|
|
|
rs.add(t);
|
|
|
}
|
|
|
}
|
|
|
return rs.size();
|
|
|
}
|
|
|
|
|
|
@Deprecated
|
|
|
public List<Map<String,Object>> findWorkTimeInfoOld(String id){
|
|
|
WlyyDoctorWorkTimeDO timeDO = doctorWorkTimeDao.findOne(id);
|
|
|
Calendar sc = Calendar.getInstance();
|
|
|
sc.setTime(timeDO.getStartTime());
|
|
|
|
|
|
List<Map<String,Object>> rs = new ArrayList<>();
|
|
|
|
|
|
//1.根据当前时间,去取已过时间的号源
|
|
|
while (sc.getTime().before(timeDO.getEndTime())){
|
|
|
if(new Date().before(sc.getTime())){
|
|
|
break;
|
|
|
}
|
|
|
//加上时间间隔
|
|
|
sc.add(Calendar.MINUTE,timeDO.getTimeInterval());
|
|
|
}
|
|
|
|
|
|
List<WlyyPatientRegisterTimeDO> registerTimeDOs = patientRegisterTimeDao.findByDoctorAndWorkId(timeDO.getDoctor(),id);
|
|
|
|
|
|
//2.根据时间间隔拆分号源
|
|
|
while (sc.getTime().before(timeDO.getEndTime())){
|
|
|
|
|
|
Map<String,Object> t = new HashedMap();
|
|
|
t.put("startTime",DateUtil.dateToStr(sc.getTime(),"yyyy-MM-dd HH:mm:ss"));
|
|
|
//加上时间间隔
|
|
|
sc.add(Calendar.MINUTE,timeDO.getTimeInterval());
|
|
|
//如果结束时间大于排班时间则不再拆分号源
|
|
|
if(sc.getTime().after(timeDO.getEndTime())){
|
|
|
break;
|
|
|
}
|
|
|
t.put("endTime",DateUtil.dateToStr(sc.getTime(),"yyyy-MM-dd HH:mm:ss"));
|
|
|
|
|
|
//如果号源被预约了,标记为true
|
|
|
Boolean registered = false;
|
|
|
if(registerTimeDOs!=null&®isterTimeDOs.size()>0){
|
|
|
for(WlyyPatientRegisterTimeDO registerTimeDO : registerTimeDOs){
|
|
|
if(t.get("startTime").equals(DateUtil.dateToStr(registerTimeDO.getStartTime(),"yyyy-MM-dd HH:mm:ss"))){
|
|
|
registered = true;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
t.put("registered",registered);
|
|
|
rs.add(t);
|
|
|
}
|
|
|
|
|
|
return rs;
|
|
|
}
|
|
|
|
|
|
public Integer findWorkTimeCount(String id){
|
|
|
WlyyDoctorWorkTimeDO timeDO = doctorWorkTimeDao.findOne(id);
|
|
|
Calendar sc = Calendar.getInstance();
|
|
|
sc.setTime(timeDO.getStartTime());
|
|
|
|
|
|
List<Map<String,Object>> rs = new ArrayList<>();
|
|
|
|
|
|
//1.根据当前时间,去取已过时间的号源
|
|
|
while (sc.getTime().before(timeDO.getEndTime())){
|
|
|
if(new Date().before(sc.getTime())){
|
|
|
break;
|
|
|
}
|
|
|
//加上时间间隔
|
|
|
sc.add(Calendar.MINUTE,timeDO.getTimeInterval());
|
|
|
}
|
|
|
|
|
|
List<WlyyPatientRegisterTimeDO> registerTimeDOs = patientRegisterTimeDao.findByDoctorAndWorkId(timeDO.getDoctor(),id);
|
|
|
|
|
|
//2.根据时间间隔拆分号源
|
|
|
while (sc.getTime().before(timeDO.getEndTime())){
|
|
|
|
|
|
Map<String,Object> t = new HashedMap();
|
|
|
t.put("startTime",DateUtil.dateToStr(sc.getTime(),"yyyy-MM-dd HH:mm:ss"));
|
|
|
//加上时间间隔
|
|
|
sc.add(Calendar.MINUTE,timeDO.getTimeInterval());
|
|
|
|
|
|
if(sc.getTime().after(timeDO.getEndTime())){
|
|
|
break;
|
|
|
}
|
|
|
t.put("endTime",DateUtil.dateToStr(sc.getTime(),"yyyy-MM-dd HH:mm:ss"));
|
|
|
|
|
|
if(registerTimeDOs!=null&®isterTimeDOs.size()>0){
|
|
|
Boolean registered = false;
|
|
|
for(WlyyPatientRegisterTimeDO registerTimeDO : registerTimeDOs){
|
|
|
if(t.get("startTime").equals(DateUtil.dateToStr(registerTimeDO.getStartTime(),"yyyy-MM-dd HH:mm:ss"))){
|
|
|
registered = true;
|
|
|
}
|
|
|
}
|
|
|
if(!registered){
|
|
|
rs.add(t);
|
|
|
}
|
|
|
}else {
|
|
|
rs.add(t);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return rs.size();
|
|
|
}
|
|
|
|
|
|
public Map<String,Object> findDoctorInfo(String doctor,String withWork){
|
|
|
BaseDoctorDO doctorDO = baseDoctorDao.findById(doctor);
|
|
|
|
|
|
Map<String,Object> rs = new HashedMap();
|
|
|
if(doctorDO!=null){
|
|
|
rs.put("doctor",doctor);
|
|
|
rs.put("doctorSex",doctorDO.getSex());
|
|
|
if(StringUtils.isNoneBlank(doctorDO.getIdcard())){
|
|
|
rs.put("doctorAge",IdCardUtil.getAgeForIdcard(doctorDO.getIdcard()));
|
|
|
}else{
|
|
|
rs.put("doctorAge","");
|
|
|
}
|
|
|
rs.put("doctor",doctorDO.getName());
|
|
|
rs.put("jobTitleCode",doctorDO.getJobTitleCode());
|
|
|
rs.put("jobTitleName",doctorDO.getJobTitleName());
|
|
|
rs.put("chargeType",doctorDO.getChargeType());
|
|
|
rs.put("photo",doctorDO.getPhoto());
|
|
|
rs.put("consultStatus",doctorDO.getConsultStatus());
|
|
|
rs.put("outpatientType",doctorDO.getOutpatientType());
|
|
|
rs.put("expertise",doctorDO.getExpertise());
|
|
|
rs.put("introduce",doctorDO.getIntroduce());
|
|
|
rs.put("consultStatus",doctorDO.getConsultStatus());// 咨询在线状态
|
|
|
|
|
|
//机构科室信息
|
|
|
List<BaseDoctorHospitalDO> hospitalDOs = baseDoctorHospitalDao.findByDoctorCode(doctorDO.getId());
|
|
|
if(hospitalDOs!=null&&hospitalDOs.size()>0){
|
|
|
rs.put("hospital",hospitalDOs.get(0));
|
|
|
BaseOrgDO org = baseOrgDao.findByCode(hospitalDOs.get(0).getOrgCode());
|
|
|
rs.put("winNo",org.getWinNo());
|
|
|
rs.put("deptName",hospitalDOs.get(0).getDeptName());
|
|
|
rs.put("dept",hospitalDOs.get(0).getDeptCode());
|
|
|
|
|
|
if(StringUtils.isNotBlank(withWork)&&"1".equals(withWork)){
|
|
|
List<WlyyDoctorWorkTimeVO> times = findDoctorWorkTime(doctor,hospitalDOs.get(0).getOrgCode());
|
|
|
rs.put("workTime",times);
|
|
|
}
|
|
|
}else{
|
|
|
rs.put("hospital",null);
|
|
|
rs.put("winNo",null);
|
|
|
rs.put("deptName",null);
|
|
|
rs.put("dept",null);
|
|
|
rs.put("workTime",null);
|
|
|
}
|
|
|
|
|
|
|
|
|
//医生角色
|
|
|
String sql = "SELECT " +
|
|
|
" t. CODE AS \"roleCode\", " +
|
|
|
" t. NAME AS \"roleName\"" +
|
|
|
" FROM " +
|
|
|
" base_doctor_role r " +
|
|
|
" JOIN base_doctor_role_dict t ON t.`code` = r.role_code " +
|
|
|
" WHERE " +
|
|
|
" r.doctor_code = '"+doctor+"'";
|
|
|
List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
|
|
|
|
|
|
if(list!=null&&list.size()>0){
|
|
|
rs.put("roles",list);
|
|
|
}else{
|
|
|
rs.put("roles",null);
|
|
|
}
|
|
|
//医生预约量
|
|
|
List<WlyyPatientRegisterTimeDO> registerTimeDOs = patientRegisterTimeDao.findByDoctor(doctor);
|
|
|
if(registerTimeDOs!=null&®isterTimeDOs.size()>0){
|
|
|
rs.put("registerCount",registerTimeDOs.size());
|
|
|
}else{
|
|
|
rs.put("registerCount",0);
|
|
|
}
|
|
|
//医生问诊量
|
|
|
// List<WlyyOutpatientDO> wlyyOutpatientDOs = outpatientDao.findByDoctorAndStatus(doctor,"2");
|
|
|
// if(wlyyOutpatientDOs!=null&&wlyyOutpatientDOs.size()>0){
|
|
|
// rs.put("outpatientCount",wlyyOutpatientDOs.size());
|
|
|
// }else{
|
|
|
// rs.put("outpatientCount",0);
|
|
|
// }
|
|
|
//
|
|
|
// //协同门诊量
|
|
|
// Integer coordinationCout = outpatientDao.countByDoctorAndStatusAndOutpatientType(doctor,"2","2");
|
|
|
// rs.put("coordinationCout",coordinationCout);
|
|
|
|
|
|
|
|
|
|
|
|
//专家咨询
|
|
|
String zjCountsql = "SELECT id AS \"id\" FROM wlyy_consult_team WHERE doctor='"+doctor+"' AND (type=1 OR type=15)";
|
|
|
List<Map<String,Object>> zjList = jdbcTemplate.queryForList(zjCountsql);
|
|
|
|
|
|
if(zjList!=null&&zjList.size()>0){
|
|
|
rs.put("zjCount",zjList.size());
|
|
|
}else{
|
|
|
rs.put("zjCount",0);
|
|
|
}
|
|
|
|
|
|
//查询医生各项评价平均分
|
|
|
String sqlscore = "SELECT " +
|
|
|
"AVG(a.score) AS \"score\"," +
|
|
|
"a.score_type AS \"score_type\" " +
|
|
|
"FROM base_evaluate a,base_evaluate_score b " +
|
|
|
"WHERE " +
|
|
|
"a.relation_code=b.id " +
|
|
|
"AND b.doctor='"+doctor+"' " +
|
|
|
"GROUP BY a.score_type";
|
|
|
List<Map<String,Object>> listscore = jdbcTemplate.queryForList(sqlscore);
|
|
|
|
|
|
Double doctorScore = new Double("0");
|
|
|
|
|
|
if(listscore!=null&&listscore.size()>0){
|
|
|
for(Map<String,Object> _listscore :listscore){
|
|
|
doctorScore += (Double)_listscore.get("score");
|
|
|
}
|
|
|
}
|
|
|
doctorScore = doctorScore/3;
|
|
|
rs.put("doctorScore",doctorScore);
|
|
|
|
|
|
if(listscore!=null&&listscore.size()>0){
|
|
|
rs.put("scoreDoctor",listscore);
|
|
|
}else{
|
|
|
rs.put("scoreDoctor",null);
|
|
|
}
|
|
|
|
|
|
//查询评价明细
|
|
|
String sqlScoreList = "SELECT " +
|
|
|
"a.score as \"score\"," +
|
|
|
"b.score as \"doctorscore\"," +
|
|
|
"a.score_type as \"score_type\"," +
|
|
|
"a.content as \"content\"," +
|
|
|
"b.create_time as \"create_time\"," +
|
|
|
"c.type as \"type\"," +
|
|
|
"c.name as \"patientname\"," +
|
|
|
"b.id as \"id\"," +
|
|
|
"c.photo as \"patientphoto\"," +
|
|
|
"b.type as \"niming\" " +
|
|
|
"FROM " +
|
|
|
"base_evaluate a " +
|
|
|
"LEFT JOIN base_evaluate_score b ON b.id=a.relation_code " +
|
|
|
"LEFT JOIN wlyy_consult_team c ON c.consult=b.relation_code AND c.doctor='"+doctor+"' " +
|
|
|
"WHERE a.relation_code=b.id AND b.doctor='"+doctor+"' ";
|
|
|
List<Map<String,Object>> scoreList = jdbcTemplate.queryForList(sqlScoreList);
|
|
|
|
|
|
if(scoreList!=null&&scoreList.size()>0){
|
|
|
|
|
|
// Set<String> datelist = new HashSet<>();
|
|
|
|
|
|
HashMap<String,List<Map<String,Object>>> waitinglist = new HashMap<>();
|
|
|
|
|
|
if(scoreList!=null&&scoreList.size()>0){
|
|
|
for(Map<String,Object> scorepatient :scoreList){
|
|
|
String id = (String)scorepatient.get("id");
|
|
|
|
|
|
if(id == null){
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
if(waitinglist.keySet().contains(id)){
|
|
|
waitinglist.get(id).add(scorepatient);
|
|
|
}else{
|
|
|
List<Map<String,Object>> _cu = new ArrayList<>();
|
|
|
_cu.add(scorepatient);
|
|
|
waitinglist.put(id,_cu);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
rs.put("scoreList",waitinglist);
|
|
|
}else{
|
|
|
rs.put("scoreList",null);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return rs;
|
|
|
}
|
|
|
|
|
|
public Map<String,Object> findDoctorBaseInfo(String doctor){
|
|
|
BaseDoctorDO doctorDO = baseDoctorDao.findById(doctor);
|
|
|
|
|
|
Map<String,Object> rs = new HashedMap();
|
|
|
if(doctorDO!=null){
|
|
|
rs.put("doctor",doctor);
|
|
|
rs.put("doctor",doctorDO.getName());
|
|
|
rs.put("jobTitleCode",doctorDO.getJobTitleCode());
|
|
|
rs.put("jobTitleName",doctorDO.getJobTitleName());
|
|
|
rs.put("chargeType",doctorDO.getChargeType());
|
|
|
rs.put("photo",doctorDO.getPhoto());
|
|
|
rs.put("consultStatus",doctorDO.getConsultStatus());
|
|
|
rs.put("outpatientType",doctorDO.getOutpatientType());
|
|
|
rs.put("expertise",doctorDO.getExpertise());
|
|
|
rs.put("introduce",doctorDO.getIntroduce());
|
|
|
rs.put("townCode",doctorDO.getTownCode());
|
|
|
rs.put("townName",doctorDO.getTownName());
|
|
|
rs.put("consultStatus",doctorDO.getConsultStatus());// 咨询在线状态
|
|
|
|
|
|
//机构科室信息
|
|
|
List<BaseDoctorHospitalDO> hospitalDOs = baseDoctorHospitalDao.findByDoctorCode(doctorDO.getId());
|
|
|
if(hospitalDOs!=null&&hospitalDOs.size()>0){
|
|
|
rs.put("hospital",hospitalDOs.get(0));
|
|
|
BaseOrgDO org = baseOrgDao.findByCode(hospitalDOs.get(0).getOrgCode());
|
|
|
if(org!=null){
|
|
|
rs.put("winNo",org.getWinNo());
|
|
|
rs.put("deptName",hospitalDOs.get(0).getDeptName());
|
|
|
rs.put("deptCode",hospitalDOs.get(0).getDeptCode());
|
|
|
}
|
|
|
}else{
|
|
|
rs.put("hospital",null);
|
|
|
rs.put("winNo",null);
|
|
|
rs.put("deptName",null);
|
|
|
rs.put("deptCode",null);
|
|
|
}
|
|
|
|
|
|
//多科室兼容
|
|
|
rs.put("hospitalList",hospitalDOs);
|
|
|
|
|
|
|
|
|
//医生角色
|
|
|
String sql = "SELECT " +
|
|
|
" t.CODE AS \"roleCode\", " +
|
|
|
" t.NAME AS \"roleName\"" +
|
|
|
" FROM " +
|
|
|
" base_doctor_role r " +
|
|
|
" JOIN base_doctor_role_dict t ON t.code = r.role_code " +
|
|
|
" WHERE " +
|
|
|
" r.doctor_code = '"+doctor+"'";
|
|
|
logger.info(sql);
|
|
|
List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
|
|
|
|
|
|
if(list!=null&&list.size()>0){
|
|
|
rs.put("roles",list);
|
|
|
}else{
|
|
|
rs.put("roles",null);
|
|
|
}
|
|
|
|
|
|
//密码过期
|
|
|
rs.put("authPw",baseDoctorService.findDoctorPwlimitDate(doctor));
|
|
|
}
|
|
|
|
|
|
return rs;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 居民取消复诊或者医生拒绝接诊
|
|
|
* @param outPatientId
|
|
|
* @param cancelType
|
|
|
* @param cancelValue
|
|
|
* @param cancelRemark
|
|
|
* @param operator 1居民 2医生
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<String,Object> cancelOutPatient(String outPatientId,String cancelType,String cancelValue,String cancelRemark,Integer operator){
|
|
|
|
|
|
Map<String,Object> rs = new HashedMap();
|
|
|
//判断医生是否接诊
|
|
|
List<WlyyHospitalWaitingRoomDO> roomDOs =hospitalWaitingRoomDao.findByOutpatientId(outPatientId);
|
|
|
if(roomDOs!=null&&roomDOs.size()>0){
|
|
|
for(WlyyHospitalWaitingRoomDO roomDO:roomDOs){
|
|
|
if(roomDO.getVisitStatus()==2){
|
|
|
rs.put("code",-1);
|
|
|
rs.put("mes","医生已经接诊,无法取消");
|
|
|
return rs;
|
|
|
}else{
|
|
|
roomDO.setVisitStatus(-1);
|
|
|
hospitalWaitingRoomDao.save(roomDO);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//更改门诊状态
|
|
|
WlyyOutpatientDO wlyyOutpatientDO = outpatientDao.findOne(outPatientId);
|
|
|
wlyyOutpatientDO.setStatus("-1");
|
|
|
if (1 == operator){
|
|
|
//居民取消
|
|
|
wlyyOutpatientDO.setPatientCancelRemark(cancelRemark);
|
|
|
wlyyOutpatientDO.setPatientCancelType(cancelType);
|
|
|
wlyyOutpatientDO.setPatientCancelValue(cancelValue);
|
|
|
}else{
|
|
|
//医生拒绝接诊
|
|
|
wlyyOutpatientDO.setDoctorCancelRemark(cancelRemark);
|
|
|
wlyyOutpatientDO.setDoctorCancelType(cancelType);
|
|
|
wlyyOutpatientDO.setDoctorCancelValue(cancelValue);
|
|
|
}
|
|
|
|
|
|
outpatientDao.save(wlyyOutpatientDO);
|
|
|
|
|
|
//删除门诊号源
|
|
|
List<WlyyPatientRegisterTimeDO> list = patientRegisterTimeDao.findByOutpatientId(wlyyOutpatientDO.getId());
|
|
|
if(list!=null&&list.size()>0){
|
|
|
patientRegisterTimeDao.delete(list);
|
|
|
}
|
|
|
|
|
|
rs.put("code",1);
|
|
|
rs.put("mes","取消成功");
|
|
|
return rs;
|
|
|
}
|
|
|
|
|
|
public List<WlyyHospitalSysDictDO> findCancelReasonList(){
|
|
|
return sysDictDao.findByDictName("PatientCancel");
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 獲取快速咨詢時間
|
|
|
* @return
|
|
|
*/
|
|
|
public List<Map<String,Object>> findFastRegisterDate(){
|
|
|
int days = 7;
|
|
|
String AMStartTime ="8:00";
|
|
|
String AMEndTime ="12:00";
|
|
|
String PMStartTime ="14:00";
|
|
|
String PMEndTime ="17:00";
|
|
|
|
|
|
//设置上午过号时间
|
|
|
Calendar scTime = Calendar.getInstance();
|
|
|
scTime.setTime(new Date());
|
|
|
|
|
|
Calendar ecTime = Calendar.getInstance();
|
|
|
ecTime.setTime(new Date());
|
|
|
|
|
|
List<Map<String,Object>> times = new ArrayList<>();
|
|
|
for(int i=0;i<days;i++){
|
|
|
//設置上午時段
|
|
|
Map<String,Object> time = new HashedMap();
|
|
|
time.put("timeType","1");
|
|
|
time.put("date",DateUtil.dateToStr(scTime.getTime(),"yyyy-MM-dd"));
|
|
|
time.put("weekDay",scTime.get(Calendar.DAY_OF_WEEK));
|
|
|
|
|
|
String ts[] = AMStartTime.split(":");
|
|
|
scTime.set(scTime.get(Calendar.YEAR),scTime.get(Calendar.MONTH),scTime.get(Calendar.DAY_OF_MONTH),Integer.parseInt(ts[0]),Integer.parseInt(ts[1]),00);
|
|
|
time.put("startTime",DateUtil.dateToStr(scTime.getTime(),"yyyy-MM-dd HH:mm:ss"));
|
|
|
|
|
|
String ts2[] = AMEndTime.split(":");
|
|
|
scTime.set(scTime.get(Calendar.YEAR),scTime.get(Calendar.MONTH),scTime.get(Calendar.DAY_OF_MONTH),Integer.parseInt(ts2[0]),Integer.parseInt(ts2[1]),00);
|
|
|
time.put("endTime",DateUtil.dateToStr(scTime.getTime(),"yyyy-MM-dd HH:mm:ss"));
|
|
|
times.add(time);
|
|
|
|
|
|
//設置下午時段
|
|
|
Map<String,Object> time2 = new HashedMap();
|
|
|
time2.put("timeType","2");
|
|
|
time2.put("date",DateUtil.dateToStr(scTime.getTime(),"yyyy-MM-dd"));
|
|
|
time2.put("weekDay",scTime.get(Calendar.DAY_OF_WEEK));
|
|
|
|
|
|
String pts[] = PMStartTime.split(":");
|
|
|
scTime.set(scTime.get(Calendar.YEAR),scTime.get(Calendar.MONTH),scTime.get(Calendar.DAY_OF_MONTH),Integer.parseInt(pts[0]),Integer.parseInt(pts[1]),00);
|
|
|
time2.put("startTime",DateUtil.dateToStr(scTime.getTime(),"yyyy-MM-dd HH:mm:ss"));
|
|
|
|
|
|
String pts2[] = PMEndTime.split(":");
|
|
|
scTime.set(scTime.get(Calendar.YEAR),scTime.get(Calendar.MONTH),scTime.get(Calendar.DAY_OF_MONTH),Integer.parseInt(pts2[0]),Integer.parseInt(pts2[1]),00);
|
|
|
time2.put("endTime",DateUtil.dateToStr(scTime.getTime(),"yyyy-MM-dd HH:mm:ss"));
|
|
|
times.add(time2);
|
|
|
//生成下一天
|
|
|
scTime.add(Calendar.DAY_OF_MONTH,1);
|
|
|
}
|
|
|
|
|
|
if(DateUtil.strToDate(DateUtil.getTimeShort(),DateUtil.HH_MM).after(DateUtil.strToDate(AMEndTime,DateUtil.HH_MM))) {
|
|
|
times.remove(0);
|
|
|
}
|
|
|
if(DateUtil.strToDate(DateUtil.getTimeShort(),DateUtil.HH_MM).after(DateUtil.strToDate(PMEndTime,DateUtil.HH_MM))) {
|
|
|
times.remove(0);
|
|
|
}
|
|
|
return times;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 医生可接单列表(图文复诊、视频复诊、协同门诊)
|
|
|
* @param doctor
|
|
|
* @param type 1:图文诊室,2:视频诊室(视频复诊、协同门诊)
|
|
|
* @query_status 0:图文复诊候诊 1:图文复诊抢单列表
|
|
|
* @dept 部门
|
|
|
* @return
|
|
|
*/
|
|
|
public List<Map<String,Object>> findWaitingRoomOutpatientByDoctor(String doctor, Integer type,Integer query_status,String dept) {
|
|
|
|
|
|
String sql ="SELECT " +
|
|
|
"room.outpatient_id AS id," +
|
|
|
"room.patient_id AS patient_id," +
|
|
|
"room.patient_name AS name," +
|
|
|
"patient.sex AS sex," +
|
|
|
"patient.idcard AS idcard," +
|
|
|
"patient.photo AS photo," +
|
|
|
"outpatient.mobile AS mobile," +
|
|
|
"patient.birthday AS birthday," +
|
|
|
"room.consult_type AS consult_type," +
|
|
|
"date_format(room.reservation_time ,'%Y-%m-%d %H:%i:%S' ) AS timedate_format," +
|
|
|
"outpatient.disease_img AS disease_img," +
|
|
|
"outpatient.description AS description," +
|
|
|
"room.reservation_type AS reservation_type," +
|
|
|
"outpatient.origin_con_no AS origin_con_no " +
|
|
|
"FROM " +
|
|
|
"wlyy_hospital_waiting_room room," +
|
|
|
"base_patient patient," +
|
|
|
"wlyy_outpatient outpatient " +
|
|
|
"WHERE " +
|
|
|
"room.patient_id=patient.id " +
|
|
|
"AND room.outpatient_id=outpatient.id " +
|
|
|
"AND outpatient.status = 0 ";
|
|
|
//视频复诊,协同门诊 医生抢单
|
|
|
if(type == 2 ){
|
|
|
sql += "AND room.doctor IS NULL ";
|
|
|
}else{
|
|
|
//图文复诊候诊列表
|
|
|
if(0 == query_status){
|
|
|
sql += "AND room.doctor='"+doctor+"' ";
|
|
|
}else{
|
|
|
//图文复诊医生抢单列表
|
|
|
sql += "AND room.doctor IS NULL ";
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
//协同门诊
|
|
|
if(3 == type){
|
|
|
sql += " AND room.reservation_type=2 ";
|
|
|
}else{
|
|
|
//在线复诊
|
|
|
sql += " AND room.reservation_type=1 AND room.consult_type="+type ;
|
|
|
}
|
|
|
|
|
|
if(StringUtils.isNoneBlank(dept)){
|
|
|
sql += " AND outpatient.dept='"+dept+"' ";
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
|
|
|
if(list!=null&&list.size()>0){
|
|
|
//根据身份证计算年龄
|
|
|
for(Map<String,Object> outpatient :list){
|
|
|
String idcard = (String)outpatient.get("idcard");
|
|
|
outpatient.put("age",DateUtil.getAgeForIdcard(idcard));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
public List<Map<String,Object>> findWaitingRoomPatient(String dept, Integer type) {
|
|
|
|
|
|
String sql ="SELECT " +
|
|
|
"patient.id AS id," +
|
|
|
"patient.name AS name," +
|
|
|
"patient.sex AS sex," +
|
|
|
"patient.idcard AS idcard," +
|
|
|
"patient.photo AS photo," +
|
|
|
"waitingroom.reservation_type AS type," +
|
|
|
"waitingroom.consult_type AS consult_type," +
|
|
|
"waitingroom.reservation_time AS reservation_time " +
|
|
|
"FROM " +
|
|
|
"wlyy_hospital_waiting_room waitingroom," +
|
|
|
"base_patient patient " +
|
|
|
"WHERE waitingroom.consult_type=2 AND doctor IS NOT NULL ";
|
|
|
|
|
|
List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
|
|
|
if(list!=null&&list.size()>0){
|
|
|
//根据身份证计算年龄
|
|
|
for(Map<String,Object> roompatient :list){
|
|
|
String idcard = (String)roompatient.get("idcard");
|
|
|
roompatient.put("age",DateUtil.getAgeForIdcard(idcard));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
public JSONObject findWaitingRoomStatusCount(String dept) {
|
|
|
|
|
|
String totalSql = "SELECT count(id) AS total FROM wlyy_hospital_waiting_room WHERE visit_status=1 ";
|
|
|
totalSql += " AND reservation_time >='"+DateUtil.dateToStrShort(new Date())+" 00:00:00'";
|
|
|
totalSql += " AND reservation_time <='"+DateUtil.dateToStrShort(new Date())+" 23:59:59'";
|
|
|
List<Map<String, Object>> rstotal = jdbcTemplate.queryForList(totalSql);
|
|
|
Long count = 0L;
|
|
|
if (rstotal != null && rstotal.size() > 0) {
|
|
|
count = (Long) rstotal.get(0).get("total");
|
|
|
}
|
|
|
|
|
|
JSONObject result = new JSONObject();
|
|
|
result.put("waiting_count",count);
|
|
|
result.put("outpatient_count",count);
|
|
|
result.put("waiting_count_difference",count);
|
|
|
result.put("outpatient_count_difference",count);
|
|
|
result.put("yesterday_waiting_count",count);
|
|
|
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
public List<JSONObject> findClinicRoomList(String dept,String date,String consult_status) {
|
|
|
if(StringUtils.isBlank(date)){
|
|
|
date = DateUtil.getStringDateShort();
|
|
|
}
|
|
|
|
|
|
//获取今天的排班列表
|
|
|
String doctorsql ="SELECT doctor,doctor_name,dept,dept_name FROM wlyy_doctor_work_time WHERE date='"+date+"'";
|
|
|
|
|
|
if(StringUtils.isNoneBlank(dept)){
|
|
|
doctorsql = doctorsql + " and dept = '"+dept+"' ";
|
|
|
}
|
|
|
doctorsql = doctorsql+ " GROUP BY doctor";
|
|
|
|
|
|
List<Map<String,Object>> doctorlist = jdbcTemplate.queryForList(doctorsql);
|
|
|
|
|
|
HashMap<String ,JSONObject> result = new HashMap<>();
|
|
|
|
|
|
for (int i = 0; i < doctorlist.size(); i++) {
|
|
|
JSONObject jsonObject = new JSONObject();
|
|
|
jsonObject.put("id",(String)doctorlist.get(0).get("doctor"));
|
|
|
|
|
|
if(StringUtils.isNoneBlank((String)doctorlist.get(0).get("doctor_name"))){
|
|
|
jsonObject.put("doctor_name",(String)doctorlist.get(0).get("doctor_name"));
|
|
|
jsonObject.put("dept_name",(String)doctorlist.get(0).get("dept_name"));
|
|
|
jsonObject.put("dept_code",(String)doctorlist.get(0).get("dept"));
|
|
|
}else{
|
|
|
jsonObject.put("doctor_name","");
|
|
|
jsonObject.put("dept_name","");
|
|
|
jsonObject.put("dept_code","");
|
|
|
}
|
|
|
jsonObject.put("visit_status",1);
|
|
|
jsonObject.put("waiting_count",0);
|
|
|
jsonObject.put("patient_name","");
|
|
|
jsonObject.put("time_cost",0);
|
|
|
|
|
|
result.put((String)doctorlist.get(0).get("doctor"),jsonObject);
|
|
|
}
|
|
|
|
|
|
//获取预约了今天的候诊居民
|
|
|
String waitingSql ="SELECT count(op.id) AS waitCount," +
|
|
|
"room.doctor AS doctor, " +
|
|
|
"room.doctor_name AS doctorName " +
|
|
|
"FROM wlyy_outpatient op,wlyy_hospital_waiting_room room " +
|
|
|
"WHERE op.`status`=0 AND room.outpatient_id=op.id AND room.consult_type=2 " +
|
|
|
"AND room.doctor IS NOT NULL ";
|
|
|
if(StringUtils.isNoneBlank(dept)){
|
|
|
waitingSql = waitingSql + " and op.dept = '"+dept+"' ";
|
|
|
}
|
|
|
waitingSql = waitingSql + "AND room.reservation_time>='"+date+" 00:00:00' AND room.reservation_time<='"+date+" 23:59:59' GROUP BY room.doctor; ";
|
|
|
|
|
|
List<Map<String,Object>> waitinglist = jdbcTemplate.queryForList(waitingSql);
|
|
|
if(waitinglist!=null&&waitinglist.size()>0){
|
|
|
//根据身份证计算年龄
|
|
|
for(Map<String,Object> waitObj :waitinglist){
|
|
|
String doctor = (String) waitObj.get("doctor");
|
|
|
if(StringUtils.isNoneBlank(doctor)){
|
|
|
Long waitCount = (Long) waitObj.get("waitCount");
|
|
|
if(result.keySet().contains(doctor)){
|
|
|
result.get(doctor).put("waiting_count",waitCount);
|
|
|
}else{
|
|
|
JSONObject jsonObject = new JSONObject();
|
|
|
jsonObject.put("id",doctor);
|
|
|
jsonObject.put("visit_status",1);
|
|
|
jsonObject.put("waiting_count",waitCount);
|
|
|
if(StringUtils.isNoneBlank((String)waitObj.get("doctorName"))){
|
|
|
jsonObject.put("doctor_name",(String)waitObj.get("doctorName"));
|
|
|
}else{
|
|
|
jsonObject.put("doctor_name","");
|
|
|
}
|
|
|
jsonObject.put("patient_name","");
|
|
|
jsonObject.put("time_cost",0);
|
|
|
result.put(doctor,jsonObject);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//获取进行中的居民
|
|
|
String onlineSql ="SELECT " +
|
|
|
"room.outpatient_id AS id," +
|
|
|
"room.patient_id AS patient_id," +
|
|
|
"room.patient_name AS patient_name," +
|
|
|
"patient.sex AS sex," +
|
|
|
"patient.idcard AS idcard," +
|
|
|
"patient.photo AS photo," +
|
|
|
"patient.birthday AS birthday," +
|
|
|
"room.consult_type AS consult_type," +
|
|
|
"date_format(room.reservation_time ,'%Y-%m-%d %H:%i:%S' ) AS time," +
|
|
|
"TIMESTAMPDIFF(MINUTE, room.reservation_time,NOW()) AS time_cost," +
|
|
|
"room.doctor AS doctor, " +
|
|
|
"room.doctor_name AS doctorName " +
|
|
|
"FROM " +
|
|
|
"wlyy_hospital_waiting_room room," +
|
|
|
"base_patient patient," +
|
|
|
"wlyy_outpatient outpatient," +
|
|
|
"wlyy_consult_team consult " +
|
|
|
"WHERE " +
|
|
|
"room.patient_id=patient.id " +
|
|
|
"AND room.outpatient_id=outpatient.id " +
|
|
|
"AND consult.relation_code=outpatient.id " +
|
|
|
"AND consult.status=0 " +
|
|
|
"AND room.consult_type=2 ";
|
|
|
if(StringUtils.isNoneBlank(dept)){
|
|
|
onlineSql = onlineSql + " and outpatient.dept = '"+dept+"' ";
|
|
|
}
|
|
|
onlineSql = onlineSql+ "AND room.reservation_time>='"+date+" 00:00:00' AND room.reservation_time<='"+date+" 23:59:59' GROUP BY room.doctor";
|
|
|
|
|
|
List<Map<String,Object>> onlinelist = jdbcTemplate.queryForList(onlineSql);
|
|
|
if(onlinelist!=null&&onlinelist.size()>0){
|
|
|
//根据身份证计算年龄
|
|
|
for(Map<String,Object> onlineObj :onlinelist){
|
|
|
String doctor = (String) onlineObj.get("doctor");
|
|
|
if(StringUtils.isNoneBlank(doctor)){
|
|
|
if(result.keySet().contains(doctor)){
|
|
|
result.get(doctor).put("visit_status",2);
|
|
|
result.get(doctor).put("patient_name",(String) onlineObj.get("patient_name"));
|
|
|
result.get(doctor).put("time_cost",(Long) onlineObj.get("time_cost"));
|
|
|
}else{
|
|
|
JSONObject jsonObject = new JSONObject();
|
|
|
jsonObject.put("id",doctor);
|
|
|
|
|
|
if(StringUtils.isNoneBlank((String) onlineObj.get("doctorName"))){
|
|
|
jsonObject.put("doctor_name",(String) onlineObj.get("doctorName"));
|
|
|
}else{
|
|
|
jsonObject.put("doctor_name","");
|
|
|
}
|
|
|
jsonObject.put("visit_status",2);
|
|
|
jsonObject.put("waiting_count",0);
|
|
|
jsonObject.put("patient_name",(String) onlineObj.get("patient_name"));
|
|
|
jsonObject.put("time_cost",(Long) onlineObj.get("time_cost"));
|
|
|
result.put(doctor,jsonObject);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
List<JSONObject> finalresult = new ArrayList<>();
|
|
|
|
|
|
for (JSONObject jsonObject : result.values()) {
|
|
|
|
|
|
//离线:在线状态=离线
|
|
|
//空闲:在线状态=在线 and 接诊状态=空闲
|
|
|
//接诊中:在线状态=在线 and 接诊状态=接诊中
|
|
|
|
|
|
//过滤空闲或者接诊中的居民
|
|
|
if(StringUtils.isBlank(consult_status)){
|
|
|
finalresult.add(jsonObject);
|
|
|
}else{
|
|
|
if("0".equals(consult_status)){
|
|
|
//只显示在线
|
|
|
}else if("1".equals(consult_status) && "1".equals(jsonObject.getString("visit_status"))){
|
|
|
//空闲
|
|
|
finalresult.add(jsonObject);
|
|
|
}else if("2".equals(consult_status) && "2".equals(jsonObject.getString("visit_status"))){
|
|
|
//接诊
|
|
|
finalresult.add(jsonObject);
|
|
|
}else{}
|
|
|
}
|
|
|
}
|
|
|
Integer room_no = 1;
|
|
|
for(JSONObject jsonObject :finalresult){
|
|
|
String roomname = "";
|
|
|
if(room_no < 10){
|
|
|
roomname = "0"+room_no+"诊室";
|
|
|
}else{
|
|
|
roomname = room_no+"诊室";
|
|
|
}
|
|
|
jsonObject.put("room_name",roomname);
|
|
|
room_no ++;
|
|
|
}
|
|
|
|
|
|
return finalresult;
|
|
|
}
|
|
|
|
|
|
public WlyyDoctorClinicRoomDO findClinicRoomStatus(String id) {
|
|
|
return wlyyDoctorClinicRoomDao.findOne(id);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取快速咨询时间分段
|
|
|
* @param startTime
|
|
|
* @param endTime
|
|
|
* @return
|
|
|
*/
|
|
|
public List<Map<String,Object>> findByTimeSlot(String startTime,String endTime){
|
|
|
int interval = 30;
|
|
|
List<Map<String,Object>> times = new ArrayList<>();
|
|
|
//设置上午过号时间
|
|
|
Calendar scTime = Calendar.getInstance();
|
|
|
scTime.setTime(DateUtil.stringToDate(startTime,"yyyy-MM-dd HH:mm:ss"));
|
|
|
|
|
|
Calendar ecTime = Calendar.getInstance();
|
|
|
ecTime.setTime(DateUtil.stringToDate(endTime,"yyyy-MM-dd HH:mm:ss"));
|
|
|
|
|
|
while (scTime.getTime().before(ecTime.getTime())){
|
|
|
if(new Date().before(scTime.getTime())){
|
|
|
Map<String,Object> time = new HashedMap();
|
|
|
time.put("startTime",DateUtil.dateToStr(scTime.getTime(),"yyyy-MM-dd HH:mm:ss"));
|
|
|
scTime.add(Calendar.MINUTE,interval);
|
|
|
time.put("endTime",DateUtil.dateToStr(scTime.getTime(),"yyyy-MM-dd HH:mm:ss"));
|
|
|
times.add(time);
|
|
|
}else{
|
|
|
scTime.add(Calendar.MINUTE,interval);
|
|
|
}
|
|
|
}
|
|
|
return times;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 根据疾病名称,热门部门查询医生
|
|
|
* @param orgCode 机构码
|
|
|
* @param dept 部门CODE
|
|
|
* @param diseaseKey 疾病名称
|
|
|
* @param jobTitleNameKey
|
|
|
* @param outpatientType
|
|
|
* @param keyName
|
|
|
* @param workingTime
|
|
|
* @param consutlSort
|
|
|
* @return
|
|
|
*/
|
|
|
public List<Map<String,Object>> findDoctorByHospitalAndDiseaseAndDept(String iswork,String patientid,String orgCode, String dept,
|
|
|
String diseaseKey, String doctorNameKey,
|
|
|
String jobTitleNameKey, String outpatientType,
|
|
|
String keyName, String workingTime, String consultStatus,String chargType,String consutlSort,Integer page,Integer pagesize) {
|
|
|
|
|
|
/* if(page >=1){
|
|
|
page --;
|
|
|
}
|
|
|
|
|
|
if (pagesize <= 0) {
|
|
|
pagesize = 10;
|
|
|
}*/
|
|
|
|
|
|
String sql ="SELECT " +
|
|
|
" d.id AS \"id\", " +
|
|
|
" d.photo AS \"photo\", " +
|
|
|
" d.name AS \"name\", " +
|
|
|
" d.expertise AS \"expertise\"," +
|
|
|
" d.introduce AS \"introduce\"," +
|
|
|
" d.job_title_code AS \"jobTitleCode\", " +
|
|
|
" d.job_title_name AS \"jobTitleName\"," +
|
|
|
" d.charge_type AS \"chargeType\"," +
|
|
|
" h.dept_name AS \"deptName\"," +
|
|
|
" d.consult_status AS \"consultStatus\"," +
|
|
|
" d.outpatient_type AS \"outpatientType\"," +
|
|
|
" a.total AS \"consultTotal\"," +
|
|
|
" h.org_name AS \"orgName\"," +
|
|
|
" follow.patient AS \"followid\"," +
|
|
|
" h.org_code AS \"orgCode\"" +
|
|
|
" FROM " +
|
|
|
" base_doctor d " +
|
|
|
" JOIN base_doctor_hospital h ON h.doctor_code = d.id "+
|
|
|
" Left join base_doctor_patient_follow follow on follow.doctor = d.id and follow.patient='"+patientid+"'"+
|
|
|
" Left join ( select count(id) as total,doctor from wlyy_outpatient where status = 2 GROUP BY doctor ) a on a.doctor = d.id ";
|
|
|
|
|
|
if(StringUtils.isNotBlank(workingTime)){
|
|
|
sql+=" JOIN wlyy_doctor_work_time wk on wk.doctor = d.id ";
|
|
|
}
|
|
|
|
|
|
sql += " WHERE 1=1 ";
|
|
|
|
|
|
Map<String, Object> params = new HashedMap();
|
|
|
|
|
|
if(StringUtils.isBlank(chargType)){
|
|
|
sql +=" AND d.charge_type is not null ";
|
|
|
}
|
|
|
if(StringUtils.isNotBlank(chargType)){
|
|
|
if("all".equals(chargType)){
|
|
|
//不过滤
|
|
|
}else{
|
|
|
sql+=" AND d.charge_type = :chargType";
|
|
|
params.put("chargType",chargType);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if(StringUtils.isNotBlank(iswork)&&"1".equals(iswork)){
|
|
|
logger.info("iswork:"+iswork);
|
|
|
Date date = new Date();
|
|
|
sql+=" AND (" +
|
|
|
" EXISTS ( " +
|
|
|
" SELECT " +
|
|
|
" 1 " +
|
|
|
" FROM " +
|
|
|
" wlyy_doctor_work_time t " +
|
|
|
" WHERE " +
|
|
|
" t.doctor = d.id " +
|
|
|
" AND t.start_time <=:startTime" +
|
|
|
" AND t.end_time >=:endTime"+
|
|
|
" ) OR " +
|
|
|
" d.consult_status = '1') ";
|
|
|
params.put("startTime",date);
|
|
|
params.put("endTime",date);
|
|
|
}
|
|
|
if(StringUtils.isNotBlank(orgCode)){
|
|
|
sql += " AND h.org_code = :orgCode";
|
|
|
params.put("orgCode",orgCode);
|
|
|
}
|
|
|
if(StringUtils.isNotBlank(diseaseKey)){
|
|
|
sql+=" AND d.expertise like :diseaseKey";
|
|
|
params.put("diseaseKey","%"+diseaseKey+"%");
|
|
|
}
|
|
|
|
|
|
if(StringUtils.isNotBlank(doctorNameKey)){
|
|
|
sql+=" AND d.name like :doctorNameKey";
|
|
|
params.put("doctorNameKey","%"+doctorNameKey+"%");
|
|
|
}
|
|
|
|
|
|
if(StringUtils.isNotBlank(dept)){
|
|
|
sql+=" AND h.dept_code = :dept ";
|
|
|
params.put("dept",dept);
|
|
|
|
|
|
}
|
|
|
|
|
|
if(StringUtils.isNotBlank(jobTitleNameKey)){
|
|
|
sql+=" AND d.job_title_name = :jobTitleNameKey ";
|
|
|
params.put("jobTitleNameKey",jobTitleNameKey);
|
|
|
}
|
|
|
|
|
|
if(StringUtils.isNotBlank(outpatientType)){
|
|
|
if(outpatientType.contains("or")){
|
|
|
String[] outpatientTypeArray = outpatientType.split("or");
|
|
|
sql+= " AND ( ";
|
|
|
|
|
|
for (int i = 0; i < outpatientTypeArray.length; i++) {
|
|
|
sql +=" d.outpatient_type like'%"+outpatientTypeArray[i]+"%'";
|
|
|
if(i != outpatientTypeArray.length -1){
|
|
|
sql += " or ";
|
|
|
}
|
|
|
}
|
|
|
sql+= " ) ";
|
|
|
}else{
|
|
|
sql+= " AND d.outpatient_type like'%"+outpatientType+"%'";
|
|
|
}
|
|
|
}else{
|
|
|
sql+=" AND d.outpatient_type is not null ";
|
|
|
}
|
|
|
|
|
|
if(StringUtils.isNotBlank(keyName)){
|
|
|
sql+=" AND (h.dept_name like '%"+keyName+"%' or d.name like '%"+keyName+"%' or d.expertise like '%"+keyName+"%' )";
|
|
|
}
|
|
|
|
|
|
if(StringUtils.isNotBlank(workingTime)){
|
|
|
sql+=" AND wk.date = :workingTime ";
|
|
|
params.put("workingTime",workingTime);
|
|
|
}
|
|
|
|
|
|
|
|
|
if(StringUtils.isNotBlank(consultStatus)){
|
|
|
sql+=" AND d.consult_status = :consultStatus ";
|
|
|
params.put("consultStatus",consultStatus);
|
|
|
|
|
|
}
|
|
|
|
|
|
sql += " and d.del='1' order by a.total "+ consutlSort;
|
|
|
|
|
|
List<Map<String,Object>> list = hibenateUtils.createSQLQuery(sql,params,page,pagesize);
|
|
|
|
|
|
logger.info("findDoctorByHospitalAndDiseaseAndDept end:"+DateUtil.dateToStr(new Date(),"yyyy-MM-dd HH:mm:ss:SSS"));
|
|
|
logger.info("sql:"+sql);
|
|
|
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取常见疾病、热门部门、医生拒绝接诊原因 字典
|
|
|
* @param dictName 字典名称
|
|
|
* @return
|
|
|
*/
|
|
|
public List<Map<String,Object>> findHotDeptAndDiseaseDict(String dictName) {
|
|
|
String sql ="SELECT * from wlyy_hospital_sys_dict where dict_name='"+dictName+"' ORDER BY sort ASC";
|
|
|
|
|
|
List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
|
|
|
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查询排班规则
|
|
|
* @return
|
|
|
*/
|
|
|
public List<WlyyHospitalSysDictVO> findWorkRule(String dictName,String hospital){
|
|
|
List<WlyyHospitalSysDictDO> list = sysDictDao.findByHospitalAndDictNameOrderBySortAsc(hospital,dictName);
|
|
|
List<WlyyHospitalSysDictVO> vos = new ArrayList<>();
|
|
|
return convertToModels(list,vos,WlyyHospitalSysDictVO.class);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 保存排班规则
|
|
|
* @param workRoleJsons
|
|
|
* @return
|
|
|
*/
|
|
|
public Boolean updateWorkRule(String workRoleJsons){
|
|
|
List<WlyyHospitalSysDictDO> sysDicts = (List<WlyyHospitalSysDictDO>) com.alibaba.fastjson.JSONArray.parseArray(workRoleJsons, WlyyHospitalSysDictDO.class);
|
|
|
List<WlyyHospitalSysDictDO> list = sysDictDao.findByHospitalAndDictNameOrderBySortAsc(sysDicts.get(0).getHospital(),sysDicts.get(0).getDictName());
|
|
|
sysDictDao.delete(list);
|
|
|
sysDictDao.save(sysDicts);
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @param type
|
|
|
* @param codes
|
|
|
* @param workTimeJson
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public Boolean saveDoctorWorkTimeJson(String type,String codes,String workTimeJson,String date)throws Exception{
|
|
|
|
|
|
com.alibaba.fastjson.JSONArray works = JSON.parseArray(workTimeJson);
|
|
|
List<WlyyDoctorWorkTimeDO> wlyyDoctorWorkTimeDOs = new ArrayList<>();
|
|
|
for(int i=0;i<works.size();i++){
|
|
|
com.alibaba.fastjson.JSONObject work = (com.alibaba.fastjson.JSONObject)works.get(i);
|
|
|
WlyyDoctorWorkTimeDO timeDO = objectMapper.readValue(work.toJSONString(),WlyyDoctorWorkTimeDO.class);
|
|
|
wlyyDoctorWorkTimeDOs.add(timeDO);
|
|
|
}
|
|
|
|
|
|
//全院医生
|
|
|
if("1".equals(type)){
|
|
|
String sql ="SELECT " +
|
|
|
" DISTINCT " +
|
|
|
" d.id AS \"id\", " +
|
|
|
" d.name AS \"name\", " +
|
|
|
" h.org_code AS \"org_code\", " +
|
|
|
" h.org_name AS \"org_name\"" +
|
|
|
" FROM " +
|
|
|
" base_doctor d " +
|
|
|
" JOIN base_doctor_hospital h ON d.id= h.doctor_code " +
|
|
|
" WHERE " +
|
|
|
" h.org_code ='"+codes+"'";
|
|
|
List<Map<String,Object>> doctors = jdbcTemplate.queryForList(sql);
|
|
|
List<WlyyDoctorWorkTimeDO> workTimeDOs =makeDoctorWorkTimeDOList(doctors,wlyyDoctorWorkTimeDOs);
|
|
|
saveDoctorWorkTime(workTimeDOs,date,doctors);
|
|
|
//科室
|
|
|
}else if("2".equals(type)){
|
|
|
|
|
|
String sql ="SELECT " +
|
|
|
" DISTINCT " +
|
|
|
" d.id AS \"id\", " +
|
|
|
" d.name AS \"name\", " +
|
|
|
" h.org_code AS \"org_code\", " +
|
|
|
" h.org_name AS \"org_name\"" +
|
|
|
" FROM " +
|
|
|
" base_doctor d " +
|
|
|
" JOIN base_doctor_hospital h ON d.id= h.doctor_code " +
|
|
|
" WHERE " +
|
|
|
" h.dept_code in ("+sqlCode(codes)+")";
|
|
|
List<Map<String,Object>> doctors = jdbcTemplate.queryForList(sql);
|
|
|
List<WlyyDoctorWorkTimeDO> workTimeDOs =makeDoctorWorkTimeDOList(doctors,wlyyDoctorWorkTimeDOs);
|
|
|
saveDoctorWorkTime(workTimeDOs,date,doctors);
|
|
|
//医生批量
|
|
|
}else if("3".equals(type)){
|
|
|
String sql ="SELECT " +
|
|
|
" DISTINCT " +
|
|
|
" d.id AS \"id\", " +
|
|
|
" d.name AS \"name\", " +
|
|
|
" h.org_code AS \"org_code\", " +
|
|
|
" h.org_name AS \"org_name\"" +
|
|
|
" FROM " +
|
|
|
" base_doctor d " +
|
|
|
" JOIN base_doctor_hospital h ON d.id= h.doctor_code " +
|
|
|
" WHERE " +
|
|
|
" d.id in ("+sqlCode(codes)+")";
|
|
|
List<Map<String,Object>> doctors = jdbcTemplate.queryForList(sql);
|
|
|
List<WlyyDoctorWorkTimeDO> workTimeDOs =makeDoctorWorkTimeDOList(doctors,wlyyDoctorWorkTimeDOs);
|
|
|
saveDoctorWorkTime(workTimeDOs,date,doctors);
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
public String sqlCode(String codes){
|
|
|
String code[] = codes.split(",");
|
|
|
String rs = "";
|
|
|
for(String c:code){
|
|
|
rs+="'"+c+"',";
|
|
|
}
|
|
|
rs = rs.substring(0,rs.length()-1);
|
|
|
return rs;
|
|
|
}
|
|
|
|
|
|
public List<WlyyDoctorWorkTimeDO> makeDoctorWorkTimeDOList(List<Map<String,Object>> doctors,List<WlyyDoctorWorkTimeDO> wlyyDoctorWorkTimeDOs){
|
|
|
List<WlyyDoctorWorkTimeDO> rs = new ArrayList<>();
|
|
|
if(doctors!=null&&doctors.size()>0){
|
|
|
//构建医生排班
|
|
|
for(Map<String,Object> doctor:doctors){
|
|
|
for(WlyyDoctorWorkTimeDO time:wlyyDoctorWorkTimeDOs){
|
|
|
WlyyDoctorWorkTimeDO t = new WlyyDoctorWorkTimeDO();
|
|
|
t.setDoctor((String)doctor.get("id"));
|
|
|
t.setDoctorName((String)doctor.get("name"));
|
|
|
// t.setDept((String)doctor.get("dept_code"));
|
|
|
// t.setDeptName((String)doctor.get("dept_name"));
|
|
|
t.setHospital((String)doctor.get("org_code"));
|
|
|
t.setHospitalName((String)doctor.get("org_name"));
|
|
|
t.setCreateTime(new Date());
|
|
|
|
|
|
t.setType(time.getType());
|
|
|
t.setTimeType(time.getTimeType());
|
|
|
t.setStartTime(time.getStartTime());
|
|
|
t.setEndTime(time.getEndTime());
|
|
|
t.setDate(time.getDate());
|
|
|
t.setTimeInterval(time.getTimeInterval());
|
|
|
t.setSourceNumber(time.getSourceNumber());
|
|
|
rs.add(t);
|
|
|
}
|
|
|
logger.info(rs.size()+"");
|
|
|
}
|
|
|
}
|
|
|
return rs;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 批量更新医生多月份排班数据
|
|
|
* @param workTimeDOs
|
|
|
* @return
|
|
|
*/
|
|
|
public Boolean saveDoctorWorkTime(List<WlyyDoctorWorkTimeDO> workTimeDOs,String date,List<Map<String,Object>> doctors){
|
|
|
|
|
|
if(workTimeDOs!=null&&workTimeDOs.size()>0){
|
|
|
//按月按医生分组标记排班数据
|
|
|
List<String> workMonths = new ArrayList<>();
|
|
|
|
|
|
for(WlyyDoctorWorkTimeDO time : workTimeDOs){
|
|
|
//医生工作月份
|
|
|
String workMonth = time.getDoctor()+","+time.getDate().substring(0,7);
|
|
|
//判断是否是首次插入医生月份数据,如果是首次,则删除该医生当前月份排班数据数据
|
|
|
if(!workMonths.contains(workMonth)){
|
|
|
workMonths.add(workMonth);
|
|
|
List<WlyyDoctorWorkTimeDO> oldTimes = doctorWorkTimeDao.findDoctorWorkTimeByMonth(time.getDoctor(),"%"+time.getDate().substring(0,7)+"%");
|
|
|
doctorWorkTimeDao.delete(oldTimes);
|
|
|
}
|
|
|
}
|
|
|
doctorWorkTimeDao.save(workTimeDOs);
|
|
|
}else{
|
|
|
//如果排班数据为空,删除医生月份下排班数据
|
|
|
if(StringUtils.isNotBlank(date)){
|
|
|
String d[] = date.split(",");
|
|
|
for(String dt:d){
|
|
|
for(Map<String,Object> doc:doctors){
|
|
|
List<WlyyDoctorWorkTimeDO> oldTimes = doctorWorkTimeDao.findDoctorWorkTimeByMonth((String)doc.get("id"),"%"+dt+"%");
|
|
|
doctorWorkTimeDao.delete(oldTimes);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查询某个医生某个月份排班记录
|
|
|
* @param doctor
|
|
|
* @param date
|
|
|
* @return
|
|
|
*/
|
|
|
public List<WlyyDoctorWorkTimeVO> findDoctorWorkTimeByMonth(String doctor,String date,String startDate,String endDate){
|
|
|
|
|
|
if(StringUtils.isNotBlank(date)){
|
|
|
List<WlyyDoctorWorkTimeDO> times = doctorWorkTimeDao.findDoctorWorkTimeByMonth(doctor,"%"+date+"%");
|
|
|
List<WlyyDoctorWorkTimeVO> timeVOs = new ArrayList<>();
|
|
|
return convertToModels(times,timeVOs,WlyyDoctorWorkTimeVO.class);
|
|
|
}else{
|
|
|
List<WlyyDoctorWorkTimeDO> times = doctorWorkTimeDao.findDoctorWorkTimeByTime(doctor,DateUtil.stringToDate(startDate+" 00:00:00","yyyy-MM-dd HH:mm:ss"),DateUtil.stringToDate(endDate+" 23:59:59","yyyy-MM-dd HH:mm:ss"));
|
|
|
List<WlyyDoctorWorkTimeVO> timeVOs = new ArrayList<>();
|
|
|
return convertToModels(times,timeVOs,WlyyDoctorWorkTimeVO.class);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public Map<String,Object> findPatientInfo(String patient){
|
|
|
Map<String,Object> rs = new HashedMap();
|
|
|
BasePatientDO basePatientDO = basePatientDao.findById(patient);
|
|
|
rs.put("id",patient);
|
|
|
rs.put("name",basePatientDO.getName());
|
|
|
rs.put("sex",basePatientDO.getSex());
|
|
|
rs.put("provinceCode",basePatientDO.getProvinceCode());
|
|
|
rs.put("provinceName",basePatientDO.getProvinceName());
|
|
|
rs.put("cityCode",basePatientDO.getCityCode());
|
|
|
rs.put("cityName",basePatientDO.getCityName());
|
|
|
rs.put("townCode",basePatientDO.getTownCode());
|
|
|
rs.put("townName",basePatientDO.getTownName());
|
|
|
rs.put("idcard",basePatientDO.getIdcard());
|
|
|
rs.put("age",IdCardUtil.getAgeForIdcard(basePatientDO.getIdcard()));
|
|
|
rs.put("mobile",basePatientDO.getMobile());
|
|
|
return rs;
|
|
|
}
|
|
|
|
|
|
public Map<String,Object> getPatientInfoMap(BasePatientDO basePatientDO){
|
|
|
Map<String,Object> rs = new HashedMap();
|
|
|
rs.put("id",basePatientDO.getId());
|
|
|
rs.put("name",basePatientDO.getName());
|
|
|
rs.put("sex",basePatientDO.getSex());
|
|
|
rs.put("provinceCode",basePatientDO.getProvinceCode());
|
|
|
rs.put("provinceName",basePatientDO.getProvinceName());
|
|
|
rs.put("cityCode",basePatientDO.getCityCode());
|
|
|
rs.put("cityName",basePatientDO.getCityName());
|
|
|
rs.put("townCode",basePatientDO.getTownCode());
|
|
|
rs.put("townName",basePatientDO.getTownName());
|
|
|
rs.put("idcard",basePatientDO.getIdcard());
|
|
|
rs.put("age",IdCardUtil.getAgeForIdcard(basePatientDO.getIdcard()));
|
|
|
rs.put("mobile",basePatientDO.getMobile());
|
|
|
return rs;
|
|
|
}
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
private FileUploadService fileUploadService;
|
|
|
|
|
|
public Map<String,Object> test() throws Exception{
|
|
|
entranceService.MS02014(false);
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
public String test2(String no) throws Exception{
|
|
|
TransRequest e = new TransRequest();
|
|
|
e.setMethod("ehc.ehealthcard.auth.query");
|
|
|
e.setApp_id("1BQA48ETK000A718A8C000001FFAA482");
|
|
|
e.setTerm_id("35020010001");
|
|
|
e.setVersion("X.M.0.1");
|
|
|
e.setTimestamp(DateUtil.dateToStr(new Date(),"yyyyMMddHHmmss"));
|
|
|
e.setSign_type("MD5");
|
|
|
e.setEnc_type("AES");
|
|
|
com.alibaba.fastjson.JSONObject bizContent = new com.alibaba.fastjson.JSONObject();
|
|
|
bizContent.put("out_authorize_no", no);
|
|
|
bizContent.put("out_authorize_time", DateUtils.getOutTradeTime());
|
|
|
e.setBiz_content(JSON.toJSONString(bizContent));
|
|
|
EhcHandler ehcHandler = new EhcHandler("http://www.mstpay.com:1811/ehcService/gateway.do", "1BQA48ETK000A718A8C000001FFAA482", "35020010001", "1BQA48ETK001A718A8C00000FE996B9B");
|
|
|
TransResponse re = ehcHandler.execute(e);
|
|
|
String rs = com.alibaba.fastjson.JSONObject.toJSONString(re);
|
|
|
return rs;
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 获取正在进行中的视频复诊/协同门诊
|
|
|
* @param doctor
|
|
|
* @param general_doctor
|
|
|
* @return
|
|
|
*/
|
|
|
public List<Map<String,Object>> getVideoPrescriptionByDoctor(String doctor,String general_doctor) {
|
|
|
String sql ="SELECT " +
|
|
|
"room.outpatient_id AS id," +
|
|
|
"room.patient_id AS patient_id," +
|
|
|
"room.patient_name AS name," +
|
|
|
"patient.sex AS sex," +
|
|
|
"patient.idcard AS idcard," +
|
|
|
"patient.photo AS photo," +
|
|
|
"patient.birthday AS birthday," +
|
|
|
"patient.mobile AS mobile," +
|
|
|
"room.consult_type AS consult_type," +
|
|
|
"date_format(room.reservation_time ,'%Y-%m-%d %H:%i:%S' ) AS time," +
|
|
|
"room.reservation_type AS reservation_type," +
|
|
|
"outpatient.disease_img AS disease_img," +
|
|
|
"outpatient.description AS description," +
|
|
|
"outpatient.origin_con_no AS origin_con_no, " +
|
|
|
"consult.consult AS consult " +
|
|
|
"FROM " +
|
|
|
"wlyy_hospital_waiting_room room," +
|
|
|
"base_patient patient," +
|
|
|
"wlyy_outpatient outpatient, " +
|
|
|
"wlyy_consult_team consult " +
|
|
|
"WHERE " +
|
|
|
"room.patient_id=patient.id " +
|
|
|
"AND room.outpatient_id=outpatient.id " +
|
|
|
"AND consult.relation_code=outpatient.id " +
|
|
|
"AND consult.status = 0 ";
|
|
|
if(StringUtils.isNoneBlank(doctor)){
|
|
|
sql = sql +"AND room.doctor='"+doctor+"' " +
|
|
|
"AND room.consult_type= 2";
|
|
|
}else if(StringUtils.isNoneBlank(general_doctor)){
|
|
|
sql = sql +"AND room.general_doctor='"+general_doctor+"' " +
|
|
|
"AND room.consult_type= 2";
|
|
|
}else{}
|
|
|
|
|
|
|
|
|
List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
|
|
|
if(list!=null&&list.size()>0){
|
|
|
//根据身份证计算年龄
|
|
|
for(Map<String,Object> outpatient :list){
|
|
|
String idcard = (String)outpatient.get("idcard");
|
|
|
String patient_id = (String)outpatient.get("patient_id");
|
|
|
outpatient.put("age",DateUtil.getAgeForIdcard(idcard));
|
|
|
|
|
|
String outpatient_id = (String)outpatient.get("id");
|
|
|
|
|
|
String isAlert = redisTemplate.opsForValue().get("patient_alert_"+patient_id);
|
|
|
if(StringUtils.isBlank(isAlert)){
|
|
|
outpatient.put("alert_tag",0);//已提醒
|
|
|
}else{
|
|
|
outpatient.put("alert_tag",1);//未提醒
|
|
|
}
|
|
|
outpatient.put("online_tag",1);//未提醒
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
public com.alibaba.fastjson.JSONArray getWaitingForVisitVideoPrescriptionByDoctor(String doctor) {
|
|
|
|
|
|
String sql ="SELECT " +
|
|
|
"room.outpatient_id AS id," +
|
|
|
"room.patient_id AS patient_id," +
|
|
|
"room.patient_name AS name," +
|
|
|
"patient.sex AS sex," +
|
|
|
"patient.idcard AS idcard," +
|
|
|
"patient.photo AS photo," +
|
|
|
"patient.birthday AS birthday," +
|
|
|
"patient.mobile AS mobile," +
|
|
|
"outpatient.mobile AS outpatient_mobile," +
|
|
|
"room.consult_type AS consult_type," +
|
|
|
"date_format(room.reservation_time ,'%Y-%m-%d %H:%i:%S' ) AS time," +
|
|
|
"date_format(room.reservation_time ,'%Y-%m-%d' ) AS group_date," +
|
|
|
"room.reservation_type AS reservation_type," +
|
|
|
"outpatient.disease_img AS disease_img," +
|
|
|
"outpatient.description AS description," +
|
|
|
"outpatient.origin_con_no AS origin_con_no, " +
|
|
|
"room.reservation_type AS reservation_type " +
|
|
|
"FROM " +
|
|
|
"wlyy_hospital_waiting_room room," +
|
|
|
"base_patient patient," +
|
|
|
"wlyy_outpatient outpatient " +
|
|
|
"WHERE " +
|
|
|
"room.patient_id=patient.id " +
|
|
|
"AND room.outpatient_id=outpatient.id " +
|
|
|
"AND outpatient.status = 0 " +
|
|
|
"AND room.doctor='"+doctor+"' " +
|
|
|
"AND room.reservation_time is not null " +
|
|
|
"AND room.consult_type= 2 AND room.reservation_time >= '"+DateUtil.dateToStrShort(new Date())+" 00:00:00' order by room.reservation_time ASC ";
|
|
|
// "AND room.reservation_time>='"+DateUtil.getStringDate("yyyy-MM-dd")+" 00:00:00"+"' ";
|
|
|
|
|
|
List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
|
|
|
|
|
|
Set<String> datelist = new HashSet<>();
|
|
|
|
|
|
HashMap<String,List<Map<String,Object>>> waitinglist = new HashMap<>();
|
|
|
|
|
|
if(list!=null&&list.size()>0){
|
|
|
//根据身份证计算年龄
|
|
|
for(Map<String,Object> outpatient :list){
|
|
|
String idcard = (String)outpatient.get("idcard");
|
|
|
String patient_id = (String)outpatient.get("patient_id");
|
|
|
outpatient.put("age",DateUtil.getAgeForIdcard(idcard));
|
|
|
|
|
|
String group_date = (String)outpatient.get("group_date");
|
|
|
|
|
|
if(waitinglist.keySet().contains(group_date)){
|
|
|
waitinglist.get(group_date).add(outpatient);
|
|
|
}else{
|
|
|
List<Map<String,Object>> _cu = new ArrayList<>();
|
|
|
_cu.add(outpatient);
|
|
|
waitinglist.put(group_date,_cu);
|
|
|
}
|
|
|
|
|
|
//全科医生来源
|
|
|
outpatient.put("general_doctor_info","");//全科医生名字
|
|
|
outpatient.put("general_doctor_hospital","");//全科医生社区
|
|
|
String isAlert = redisTemplate.opsForValue().get("patient_alert_"+patient_id);
|
|
|
if(StringUtils.isBlank(isAlert)){
|
|
|
outpatient.put("alert_tag",0);//已提醒
|
|
|
}else{
|
|
|
outpatient.put("alert_tag",1);//未提醒
|
|
|
}
|
|
|
|
|
|
outpatient.put("online_tag",1);//在线状态
|
|
|
|
|
|
String outpatient_mobile = (String)outpatient.get("outpatient_mobile");
|
|
|
if(StringUtils.isNoneBlank(outpatient_mobile)){
|
|
|
outpatient.put("mobile",outpatient_mobile);//复诊有手机号,传递复诊手机号
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
Collection<String> keyset= waitinglist.keySet();
|
|
|
List<String> _list = new ArrayList<String>(keyset);
|
|
|
|
|
|
//对key键值按字典升序排序
|
|
|
Collections.sort(_list);
|
|
|
com.alibaba.fastjson.JSONArray result = new com.alibaba.fastjson.JSONArray();
|
|
|
|
|
|
|
|
|
for (int i = 0; i < _list.size(); i++) {
|
|
|
com.alibaba.fastjson.JSONObject object = new com.alibaba.fastjson.JSONObject();
|
|
|
if(_list.get(i).equals(DateUtil.getStringDateShort())){
|
|
|
object.put("day","today");
|
|
|
}else{
|
|
|
object.put("day",_list.get(i));
|
|
|
}
|
|
|
object.put("data",waitinglist.get(_list.get(i)));
|
|
|
result.add(object);
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 医生抢单(视频)
|
|
|
* @param outpatientCode
|
|
|
* @param doctor
|
|
|
*/
|
|
|
public void pickVideoPrescripitonWaitingPeople(String outpatientCode, String doctor) throws Exception{
|
|
|
BaseDoctorDO baseDoctorDO = baseDoctorDao.findById(doctor);
|
|
|
List<WlyyHospitalWaitingRoomDO> roomDOs =hospitalWaitingRoomDao.findByOutpatientId(outpatientCode);
|
|
|
if(roomDOs!=null&&roomDOs.size()>0){
|
|
|
for(WlyyHospitalWaitingRoomDO roomDO:roomDOs){
|
|
|
roomDO.setDoctor(doctor);
|
|
|
roomDO.setDoctorName(baseDoctorDO.getName());
|
|
|
hospitalWaitingRoomDao.save(roomDO);
|
|
|
}
|
|
|
}
|
|
|
WlyyOutpatientDO wlyyOutpatientDO = outpatientDao.findOne(outpatientCode);
|
|
|
wlyyOutpatientDO.setDoctor(doctor);
|
|
|
wlyyOutpatientDO.setDoctorName(baseDoctorDO.getName());
|
|
|
outpatientDao.save(wlyyOutpatientDO);
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 复诊视频咨询人数, 协同门诊人数
|
|
|
* @param doctor
|
|
|
* @param outpatient_type 1复诊 2协同
|
|
|
* @return
|
|
|
*/
|
|
|
public Long doctorIndexConsultCount(String doctor,String outpatient_type) {
|
|
|
|
|
|
|
|
|
String sql ="SELECT " +
|
|
|
"count(room.outpatient_id) AS total " +
|
|
|
"FROM " +
|
|
|
"wlyy_hospital_waiting_room room," +
|
|
|
"base_patient patient," +
|
|
|
"wlyy_outpatient outpatient, " +
|
|
|
"wlyy_consult_team consult " +
|
|
|
"WHERE " +
|
|
|
"room.patient_id=patient.id " +
|
|
|
"AND room.outpatient_id=outpatient.id " +
|
|
|
"AND consult.relation_code=outpatient.id " +
|
|
|
"AND consult.status = 0 " +
|
|
|
"AND outpatient_type.doctor='"+outpatient_type+"'" +
|
|
|
"AND room.doctor='"+doctor+"' ";
|
|
|
if("1".equals(outpatient_type)){
|
|
|
sql = sql + " AND room.consult_type= 2 ";
|
|
|
}else if("2".equals(outpatient_type)){
|
|
|
}else{}
|
|
|
|
|
|
List<Map<String, Object>> rstotal = jdbcTemplate.queryForList(sql);
|
|
|
|
|
|
Long videoOnlineCount = 0l;
|
|
|
if (rstotal != null && rstotal.size() > 0) {
|
|
|
videoOnlineCount = (Long) rstotal.get(0).get("total");
|
|
|
}
|
|
|
|
|
|
return videoOnlineCount;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 根据门诊唯一号,处方号,到顺丰下单,下单成功返回面单信息
|
|
|
* @param admNo 门诊唯一号
|
|
|
* @param realOrder 处方号
|
|
|
* @return
|
|
|
*/
|
|
|
public Object getSFExpressInfo(String admNo,String realOrder)throws Exception {
|
|
|
|
|
|
//根据门诊唯一号取就诊记录
|
|
|
List<WlyyOutpatientDO> wlyyOutpatientDOs = outpatientDao.findByAdmNo(admNo);
|
|
|
|
|
|
Object result = "";
|
|
|
|
|
|
|
|
|
if(!wlyyOutpatientDOs.isEmpty() && wlyyOutpatientDOs.size()>0){
|
|
|
List<WlyyPrescriptionExpressageDO> expressageDOList = sfexpressService.findByField("outpatientId",wlyyOutpatientDOs.get(0).getId());
|
|
|
WlyyPrescriptionExpressageDO sfexpress_obj = null;
|
|
|
if(CollectionUtils.isEmpty(expressageDOList)){
|
|
|
throw new Exception("顺丰快递下单失败,未找到该处方的派送地址!");
|
|
|
}else{
|
|
|
sfexpress_obj = expressageDOList.get(0);
|
|
|
//如果该处方的快递单号已生成,则说明已经下单成功,不需要重复下单,直接返回面单信息
|
|
|
if(org.apache.commons.lang.StringUtils.isNotBlank(sfexpress_obj.getMailno())){
|
|
|
//处方已下单成功
|
|
|
}else{
|
|
|
//如果该处方的快递单号未生成,则继续下单
|
|
|
//根据业务订单号判断是否已经下单成功
|
|
|
boolean go_on = sfexpressService.sfOrderSearchService(sfexpress_obj);
|
|
|
|
|
|
//如果该业务订单号未下单成功过,则重新下单
|
|
|
if(go_on){
|
|
|
//请求顺丰接口下单,成功下单后,返回快递单号
|
|
|
sfexpress_obj = sfexpressService.postSFOrderService(sfexpress_obj);
|
|
|
//保存快递单号和增加处方物流记录为配送
|
|
|
sfexpressService.updatePrescriptionExpressage(sfexpress_obj);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if(sfexpress_obj != null && StringUtils.isNoneBlank(sfexpress_obj.getMailno())){
|
|
|
com.alibaba.fastjson.JSONObject sfJsonObject = new com.alibaba.fastjson.JSONObject();
|
|
|
|
|
|
sfJsonObject.put("mailno", sfexpress_obj.getMailno());
|
|
|
sfJsonObject.put("mailtype", "标准快递");
|
|
|
sfJsonObject.put("destcode", "592");
|
|
|
sfJsonObject.put("j_name", "厦门大学附属中山医院");
|
|
|
sfJsonObject.put("j_provinceName", "福建省");
|
|
|
sfJsonObject.put("j_cityName", "厦门市");
|
|
|
sfJsonObject.put("j_townName", "思明区");
|
|
|
sfJsonObject.put("j_address", "湖滨南路201-209号");
|
|
|
sfJsonObject.put("j_phone", "4003008888");
|
|
|
sfJsonObject.put("d_name", sfexpress_obj.getName());
|
|
|
sfJsonObject.put("d_provinceName", sfexpress_obj.getProvinceName());
|
|
|
sfJsonObject.put("d_cityName", sfexpress_obj.getCityName());
|
|
|
sfJsonObject.put("d_townName", sfexpress_obj.getTownName());
|
|
|
sfJsonObject.put("d_address", sfexpress_obj.getAddress());
|
|
|
sfJsonObject.put("d_phone",sfexpress_obj.getMobile());
|
|
|
sfJsonObject.put("express_type",11);
|
|
|
sfJsonObject.put("pay_method",2);
|
|
|
sfJsonObject.put("receive_time","");
|
|
|
sfJsonObject.put("dispensaryType",2);
|
|
|
result = sfJsonObject;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 根据类型获取候诊居民数量
|
|
|
* @param doctor
|
|
|
* @param outpatient_type 1复诊 2协同
|
|
|
* @param type 1图文 2视频
|
|
|
* @return
|
|
|
*/
|
|
|
public Long getWaitVideoCount(String doctor,String type,String outpatient_type) {
|
|
|
String sql ="SELECT " +
|
|
|
"count(outpatient.id) AS total " +
|
|
|
"FROM " +
|
|
|
"wlyy_outpatient outpatient," +
|
|
|
"base_patient patient " +
|
|
|
"WHERE " +
|
|
|
"outpatient.patient=patient.id " +
|
|
|
"AND outpatient.status in (0,1) " +
|
|
|
"AND outpatient.doctor='"+doctor+"' " +
|
|
|
"AND outpatient.outpatient_type= '"+outpatient_type+"' ";
|
|
|
if("1".equals(outpatient_type)){//复诊
|
|
|
sql = sql + " AND outpatient.type= '"+type+"' ";
|
|
|
if("2".equals(type)){//视频复诊才需要判断时间,
|
|
|
sql = sql + " AND outpatient.register_date is not null AND outpatient.register_date >= '"+DateUtil.dateToStrShort(new Date())+" 00:00:00' ";
|
|
|
}
|
|
|
}else if("2".equals(outpatient_type)){
|
|
|
//协同门诊也需要判断时间
|
|
|
sql = sql + " AND outpatient.register_date is not null AND outpatient.register_date >= '"+DateUtil.dateToStrShort(new Date())+" 00:00:00' ";
|
|
|
}
|
|
|
List<Map<String, Object>> rstotal = jdbcTemplate.queryForList(sql);
|
|
|
|
|
|
Long waitVideoCount = 0l;
|
|
|
if (rstotal != null && rstotal.size() > 0) {
|
|
|
waitVideoCount = Long.parseLong(rstotal.get(0).get("total").toString());
|
|
|
}
|
|
|
|
|
|
return waitVideoCount;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 保存在线排班
|
|
|
* @param onlineWorkJson
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public Envelop saveDoctorOnlineWork(String onlineWorkJson)throws Exception{
|
|
|
WlyyDoctorOnlineTimeDO timeDO = objectMapper.readValue(onlineWorkJson,WlyyDoctorOnlineTimeDO.class);
|
|
|
List<WlyyDoctorOnlineTimeDO> list = wlyyDoctorOnlineTimeDao.findWorkExistList(timeDO.getDoctor(),timeDO.getStartTime(),timeDO.getEndTime());
|
|
|
if(list!=null&&list.size()>0){
|
|
|
return Envelop.getError("排班已存在",-1);
|
|
|
}
|
|
|
timeDO.setCreateTime(new Date());
|
|
|
return Envelop.getSuccess("保存成功");
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 删除在线排班
|
|
|
* @param id
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public Envelop delDoctorOnlineWork(String id)throws Exception{
|
|
|
wlyyDoctorOnlineTimeDao.delete(id);
|
|
|
return Envelop.getSuccess("删除成功");
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查询医生在线排班
|
|
|
* @param doctor
|
|
|
* @param startDate
|
|
|
* @param endDate
|
|
|
* @return
|
|
|
*/
|
|
|
public List<WlyyDoctorOnlineTimeDO> findDoctorOnlineWorkList(String doctor,String startDate,String endDate){
|
|
|
return wlyyDoctorOnlineTimeDao.findWorkList(doctor,DateUtil.stringToDate(startDate+" 00:00:00","yyyy-MM-dd HH:mm:ss"),DateUtil.stringToDate(endDate+" 23:59:59","yyyy-MM-dd HH:mm:ss"));
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 发起图文和视频协同门诊复诊
|
|
|
* @param outpatientJson
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public WlyyOutpatientDO cooperativeOutpatient(String outpatientJson,String registerJson,String chargeType)throws Exception{
|
|
|
|
|
|
//1.保存就诊实体
|
|
|
WlyyOutpatientDO outpatientDO = objectMapper.readValue(outpatientJson,WlyyOutpatientDO.class);
|
|
|
BasePatientDO patientDO = basePatientDao.findById(outpatientDO.getPatient());
|
|
|
|
|
|
outpatientDO.setMjz("mz");
|
|
|
outpatientDO.setStatus("0");
|
|
|
outpatientDO.setCreateTime(new Date());
|
|
|
outpatientDO.setIdcard(patientDO.getIdcard());
|
|
|
outpatientDO.setOutpatientType("2");
|
|
|
outpatientDO.setCreateTime(new Date());
|
|
|
|
|
|
if(outpatientDO.getRegisterDate()==null){
|
|
|
outpatientDO.setRegisterDate(new Date());
|
|
|
}
|
|
|
|
|
|
WlyyOutpatientDO outpatient = outpatientDao.save(outpatientDO);
|
|
|
|
|
|
WlyyPatientRegisterTimeDO registerTimeDO = null;
|
|
|
|
|
|
try {
|
|
|
//如果是视频预约咨询
|
|
|
if(StringUtils.isNotBlank(registerJson)){
|
|
|
registerTimeDO = objectMapper.readValue(registerJson,WlyyPatientRegisterTimeDO.class);
|
|
|
registerTimeDO.setOutpatientId(outpatient.getId());
|
|
|
registerTimeDO.setCreateTime(new Date());
|
|
|
patientRegisterTimeDao.save(registerTimeDO);
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
throw new RuntimeException("号源已经被预约,请选择其他号源");
|
|
|
}
|
|
|
|
|
|
//3.创建候诊室
|
|
|
createRoom(outpatient,chargeType);
|
|
|
|
|
|
return outpatient;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 发送新增门诊信息
|
|
|
* @param outpatient
|
|
|
* @return
|
|
|
*/
|
|
|
public SystemMessageDO sendOutPatientMes(WlyyOutpatientDO outpatient){
|
|
|
SystemMessageDO systemMessageDO = new SystemMessageDO();
|
|
|
try{
|
|
|
//1.在线复诊2.协同门诊
|
|
|
if("2".equals(outpatient.getOutpatientType())){
|
|
|
systemMessageDO.setTitle("协同门诊");
|
|
|
systemMessageDO.setType("3");
|
|
|
}else{
|
|
|
//1.图文 2.视频
|
|
|
if("1".equals(outpatient.getType())){
|
|
|
systemMessageDO.setTitle("图文复诊");
|
|
|
systemMessageDO.setType("1");
|
|
|
}else {
|
|
|
systemMessageDO.setTitle("视频复诊");
|
|
|
systemMessageDO.setType("2");
|
|
|
}
|
|
|
}
|
|
|
systemMessageDO.setReceiver(outpatient.getDoctor());
|
|
|
systemMessageDO.setReceiverName(outpatient.getDoctorName());
|
|
|
systemMessageDO.setRelationCode(outpatient.getId());
|
|
|
systemMessageDO.setSender(outpatient.getPatient());
|
|
|
systemMessageDO.setSenderName(outpatient.getPatientName());
|
|
|
systemMessageDO.setRelationCode(outpatient.getId());
|
|
|
|
|
|
JSONObject data = new JSONObject();
|
|
|
data.put("name",outpatient.getPatientName());
|
|
|
data.put("age",IdCardUtil.getAgeForIdcard(outpatient.getIdcard()));
|
|
|
data.put("gender",IdCardUtil.getSexForIdcard_new(outpatient.getIdcard()));
|
|
|
data.put("question",outpatient.getDescription());
|
|
|
systemMessageDO.setData(data.toString());
|
|
|
|
|
|
systemMessageService.saveMessage(systemMessageDO);
|
|
|
|
|
|
}catch (Exception e){
|
|
|
logger.error("sendOutPatientMes :"+e.toString());
|
|
|
return null;
|
|
|
}
|
|
|
return systemMessageDO;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 指定门诊医生医生
|
|
|
* @param outpatientJson
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public WlyyOutpatientDO saveOutpatientDoctor(String outpatientJson,String registerJson,String chargeType)throws Exception{
|
|
|
|
|
|
//1.保存就诊实体
|
|
|
WlyyOutpatientDO outpatientDO = objectMapper.readValue(outpatientJson,WlyyOutpatientDO.class);
|
|
|
|
|
|
WlyyOutpatientDO one = outpatientDao.findOne(outpatientDO.getId());
|
|
|
if(StringUtils.isNotBlank(one.getDoctor())){
|
|
|
throw new RuntimeException("已有医生接诊");
|
|
|
}
|
|
|
one.setDoctor(outpatientDO.getDoctor());
|
|
|
one.setDoctorName(outpatientDO.getDoctorName());
|
|
|
one.setRegisterDate(outpatientDO.getRegisterDate());
|
|
|
one.setDept(outpatientDO.getDept());
|
|
|
one.setDeptName(outpatientDO.getDeptName());
|
|
|
one.setType(outpatientDO.getType());
|
|
|
WlyyOutpatientDO outpatient = outpatientDao.save(one);
|
|
|
|
|
|
WlyyPatientRegisterTimeDO registerTimeDO = null;
|
|
|
|
|
|
try {
|
|
|
//如果是视频预约咨询
|
|
|
if(StringUtils.isNotBlank(registerJson)){
|
|
|
//删除预约记录
|
|
|
List<WlyyPatientRegisterTimeDO> registerTimeDOs = patientRegisterTimeDao.findByOutpatientId(outpatientDO.getId());
|
|
|
if(registerTimeDOs!=null&®isterTimeDOs.size()>0){
|
|
|
patientRegisterTimeDao.delete(registerTimeDOs);
|
|
|
}
|
|
|
|
|
|
registerTimeDO = objectMapper.readValue(registerJson,WlyyPatientRegisterTimeDO.class);
|
|
|
registerTimeDO.setOutpatientId(outpatient.getId());
|
|
|
registerTimeDO.setCreateTime(new Date());
|
|
|
patientRegisterTimeDao.save(registerTimeDO);
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
throw new RuntimeException("号源已经被预约,请选择其他号源");
|
|
|
}
|
|
|
|
|
|
//更新候诊室
|
|
|
List<WlyyHospitalWaitingRoomDO> roomDOs = hospitalWaitingRoomDao.findByOutpatientId(outpatientDO.getId());
|
|
|
|
|
|
if(roomDOs!=null&&roomDOs.size()>0){
|
|
|
for(WlyyHospitalWaitingRoomDO room:roomDOs){
|
|
|
room.setDept(outpatientDO.getDept());
|
|
|
room.setDeptName(outpatientDO.getDeptName());
|
|
|
room.setDoctor(outpatientDO.getDoctor());
|
|
|
room.setDoctorName(outpatientDO.getDoctorName());
|
|
|
room.setChargeType(chargeType);
|
|
|
}
|
|
|
hospitalWaitingRoomDao.save(roomDOs);
|
|
|
}
|
|
|
|
|
|
return outpatient;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 验证电子健康卡授权
|
|
|
* @param authorizeNo
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<String,Object> checkOauthQRCode(String authorizeNo){
|
|
|
|
|
|
Map<String,Object> rsMap = new HashedMap();
|
|
|
OauthYlzConfigDO oauthYlzConfigDO = oauthYlzConfigDao.findOne("ylz_config");
|
|
|
try {
|
|
|
TransRequest e = new TransRequest();
|
|
|
e.setMethod("ehc.ehealthcard.auth.query");
|
|
|
e.setApp_id(oauthYlzConfigDO.getAppId());
|
|
|
e.setTerm_id(oauthYlzConfigDO.getTermId());
|
|
|
e.setVersion(oauthYlzConfigDO.getVersion());
|
|
|
e.setTimestamp(DateUtil.dateToStr(new Date(),"yyyyMMddHHmmss"));
|
|
|
e.setSign_type(oauthYlzConfigDO.getSignType());
|
|
|
e.setEnc_type(oauthYlzConfigDO.getEncType());
|
|
|
com.alibaba.fastjson.JSONObject bizContent = new com.alibaba.fastjson.JSONObject();
|
|
|
bizContent.put("out_authorize_no", authorizeNo);
|
|
|
e.setBiz_content(JSON.toJSONString(bizContent));
|
|
|
|
|
|
EhcHandler ehcHandler = new EhcHandler(oauthYlzConfigDO.getUrl(), oauthYlzConfigDO.getAppId(), oauthYlzConfigDO.getTermId(), oauthYlzConfigDO.getAppKey());
|
|
|
TransResponse re = ehcHandler.execute(e);
|
|
|
String rs = com.alibaba.fastjson.JSONObject.toJSONString(re);
|
|
|
com.alibaba.fastjson.JSONObject json = (com.alibaba.fastjson.JSONObject) com.alibaba.fastjson.JSONObject.parse(rs);
|
|
|
logger.info("checkOauthQRCode:"+rs);
|
|
|
String ret_code = json.getString("ret_code");
|
|
|
if("0000".equals(ret_code)){
|
|
|
logger.info("biz_content: "+json.getString("biz_content"));
|
|
|
String strBiz = json.getString("biz_content");
|
|
|
com.alibaba.fastjson.JSONObject biz = (com.alibaba.fastjson.JSONObject) com.alibaba.fastjson.JSONObject.parse(strBiz);
|
|
|
// com.alibaba.fastjson.JSONObject biz = json.getJSONObject("biz_content");
|
|
|
String auth_status = biz.getString("auth_status");
|
|
|
if("succ".equals(auth_status)){
|
|
|
String idcard = biz.getString("id_no");
|
|
|
BasePatientDO patientDO = basePatientDao.findByIdcardAndDel(idcard,"1");
|
|
|
if(patientDO == null){
|
|
|
BasePatientDO patient = new BasePatientDO();
|
|
|
|
|
|
String salt = UUID.randomUUID().toString().substring(0,5);
|
|
|
String mobile = biz.getString("mobile_phone");
|
|
|
String pw = mobile.substring(mobile.length()-6);
|
|
|
|
|
|
patient.setIdcard(idcard);
|
|
|
patient.setName(biz.getString("user_name"));
|
|
|
patient.setPassword(MD5.md5Hex(pw + "{" + salt + "}"));
|
|
|
patient.setSalt(salt);
|
|
|
patient.setMobile(mobile);
|
|
|
patient.setDel("1");
|
|
|
patient.setEnabled(1);
|
|
|
patient.setLocked(0);
|
|
|
patient.setCreateTime(new Date());
|
|
|
patient.setUpdateTime(new Date());
|
|
|
patient.setBirthday(DateUtil.strToDate(biz.getString("birthday"),"yyyyMMdd"));
|
|
|
|
|
|
basePatientDao.save(patient);
|
|
|
rsMap.put("sCode",auth_status);
|
|
|
rsMap.put("sMes","success");
|
|
|
rsMap.put("patient",getPatientInfoMap(patient));
|
|
|
return rsMap;
|
|
|
}else{
|
|
|
rsMap.put("sCode",auth_status);
|
|
|
rsMap.put("sMes","success");
|
|
|
rsMap.put("patient",getPatientInfoMap(patientDO));
|
|
|
return rsMap;
|
|
|
}
|
|
|
}else if("ing".equals(auth_status)){
|
|
|
rsMap.put("sCode",auth_status);
|
|
|
rsMap.put("sMes","正在授权");
|
|
|
return rsMap;
|
|
|
}else if("fail".equals(auth_status)){
|
|
|
rsMap.put("sCode",auth_status);
|
|
|
rsMap.put("sMes","授权失败");
|
|
|
return rsMap;
|
|
|
}else if("cancel".equals(auth_status)){
|
|
|
rsMap.put("sCode",auth_status);
|
|
|
rsMap.put("sMes","取消授权");
|
|
|
return rsMap;
|
|
|
}
|
|
|
}
|
|
|
rsMap.put("sCode","err");
|
|
|
rsMap.put("sMes","请求失败");
|
|
|
return rsMap;
|
|
|
|
|
|
}catch (Exception e){
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
rsMap.put("sCode","err");
|
|
|
rsMap.put("sMes","请求失败");
|
|
|
return rsMap;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查询协同门诊记录
|
|
|
* @param generalDoctor
|
|
|
* @param startDate
|
|
|
* @param endDate
|
|
|
* @param status
|
|
|
* @return
|
|
|
*/
|
|
|
public Envelop findByGeneralDoctor(String generalDoctor,String startDate,String endDate,String status,String sort,Integer page,Integer size){
|
|
|
|
|
|
String sqlTotal ="SELECT " +
|
|
|
" count(1) AS total "+
|
|
|
" FROM " +
|
|
|
" wlyy_outpatient o " +
|
|
|
" WHERE " +
|
|
|
" o.general_doctor = '"+generalDoctor+"'";
|
|
|
if(StringUtils.isNotBlank(startDate)){
|
|
|
sqlTotal += " AND o.register_date >='"+startDate+" 00:00:00' ";
|
|
|
}
|
|
|
if(StringUtils.isNotBlank(endDate)){
|
|
|
sqlTotal += " AND o.register_date <='"+endDate+" 23:59:59' ";
|
|
|
}
|
|
|
if(StringUtils.isNotBlank(status)){
|
|
|
sqlTotal += " AND o.status ='"+status+"'";
|
|
|
}
|
|
|
|
|
|
List<Map<String, Object>> rstotal = jdbcTemplate.queryForList(sqlTotal);
|
|
|
|
|
|
Long total = 0l;
|
|
|
if (rstotal != null && rstotal.size() > 0) {
|
|
|
total = (Long) rstotal.get(0).get("total");
|
|
|
}
|
|
|
String sql ="SELECT " +
|
|
|
" o.id AS id, " +
|
|
|
" o.adm_no AS admNo, " +
|
|
|
" o.origin_adm_no AS originAdmNo, " +
|
|
|
" o.register_no AS registerNo, " +
|
|
|
" o.origin_register_no AS originRegisterNo, " +
|
|
|
" o.origin_con_no AS originConNo, " +
|
|
|
" o.con_no AS conNo, " +
|
|
|
" o.outpatient_type AS outpatientType, " +
|
|
|
" o.type AS type, " +
|
|
|
" o.hospital AS hospital, " +
|
|
|
" o.hospital_name AS hospitalName, " +
|
|
|
" o.win_no AS winNo, " +
|
|
|
" o.dept AS dept, " +
|
|
|
" o.dept_name AS deptName, " +
|
|
|
" o.patient AS patient, " +
|
|
|
" o.patient_name AS patientName, " +
|
|
|
" o.doctor AS doctor, " +
|
|
|
" o.doctor_name AS doctorName, " +
|
|
|
" o.general_doctor AS generalDoctor, " +
|
|
|
" o.general_doctor_name AS generalDoctorName, " +
|
|
|
" o.idcard AS idcard, " +
|
|
|
" o.card_no AS cardNo, " +
|
|
|
" o.mjz AS mjz, " +
|
|
|
" o.icd10 AS icd10, "+
|
|
|
" o.icd10_name AS icd10Name, " +
|
|
|
" o.advice AS advice, " +
|
|
|
" o.adm_date AS admDate, " +
|
|
|
" o.description AS description, " +
|
|
|
" o.disease_img AS diseaseImg, " +
|
|
|
" o.create_time AS createTime, " +
|
|
|
" o.con_date AS conDate, " +
|
|
|
" o.patient_cancel_type AS patientCancelType, " +
|
|
|
" o.patient_cancel_value AS patientCancelValue, " +
|
|
|
" o.patient_cancel_remark AS patientCancelRemark, " +
|
|
|
" o.register_date AS registerDate, " +
|
|
|
" o.`status` AS STATUS, " +
|
|
|
" o.evaluate_status AS evaluateStatus " +
|
|
|
" FROM " +
|
|
|
" wlyy_outpatient o " +
|
|
|
" WHERE " +
|
|
|
" o.general_doctor = '"+generalDoctor+"'";
|
|
|
if(StringUtils.isNotBlank(startDate)){
|
|
|
sql+=" AND o.register_date >='"+startDate+" 00:00:00'";
|
|
|
}
|
|
|
if(StringUtils.isNotBlank(endDate)){
|
|
|
sql+=" AND o.register_date <='"+endDate+" 23:59:59'";
|
|
|
}
|
|
|
if(StringUtils.isNotBlank(status)){
|
|
|
sql+=" AND o.status ='"+status+"'";
|
|
|
}
|
|
|
if(StringUtils.isNotBlank(sort)){
|
|
|
sql += " ORDER BY o.register_date "+sort+" LIMIT " + (page - 1) * size + "," + size + "";
|
|
|
}else{
|
|
|
sql += " ORDER BY o.register_date ASC LIMIT " + (page - 1) * size + "," + size + "";
|
|
|
}
|
|
|
|
|
|
List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
|
|
|
//List<WlyyOutpatientDO> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper(WlyyOutpatientDO.class));
|
|
|
return MixEnvelop.getSuccessListWithPage(BaseHospitalRequestMapping.Prescription.api_success, list, page, size, total);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 全科医生首页协同门诊统计列表.
|
|
|
* @param generalDoctor
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<String,Object> findGeneralDoctorInfo(String generalDoctor){
|
|
|
|
|
|
Map<String,Object> rs = new HashedMap();
|
|
|
Date startTime = DateUtil.strToDate(DateUtil.dateToStr(new Date(),"yyyy-MM-dd")+" 00:00:00","yyyy-MM-dd HH:mm:ss");
|
|
|
Date endTime = DateUtil.strToDate(DateUtil.dateToStr(new Date(),"yyyy-MM-dd")+" 23:59:59","yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
|
//今天协同门诊列表
|
|
|
List<WlyyOutpatientDO> todayList = outpatientDao.findByGeneralDoctor(generalDoctor,startTime,endTime,"0");
|
|
|
|
|
|
rs.put("todayList",todayList);
|
|
|
|
|
|
List<WlyyOutpatientDO> todayBeginList = outpatientDao.findByGeneralDoctor(generalDoctor,startTime,endTime,"1");
|
|
|
|
|
|
rs.put("todayBeginList",todayBeginList);
|
|
|
|
|
|
Calendar tomorrowTime = Calendar.getInstance();
|
|
|
tomorrowTime.setTime(startTime);
|
|
|
tomorrowTime.add(Calendar.DATE,1);
|
|
|
|
|
|
Calendar tomorrowEndtime = Calendar.getInstance();
|
|
|
tomorrowEndtime.setTime(endTime);
|
|
|
tomorrowEndtime.add(Calendar.DATE,1);
|
|
|
//明天协同门诊列表
|
|
|
List<WlyyOutpatientDO> tomorrowList = outpatientDao.findByGeneralDoctor(generalDoctor,tomorrowTime.getTime(),tomorrowEndtime.getTime(),"0");
|
|
|
rs.put("tomorrowList",tomorrowList);
|
|
|
|
|
|
//统计科预约医生
|
|
|
String sql = "SELECT " +
|
|
|
" COUNT(1) AS total " +
|
|
|
" FROM " +
|
|
|
" base_doctor d " +
|
|
|
" JOIN base_doctor_role r ON d.id = r.doctor_code " +
|
|
|
" WHERE " +
|
|
|
" r.role_code ='specialist'" +
|
|
|
" AND d.charge_type is not null " +
|
|
|
" AND d.outpatient_type like '%xt%' ";
|
|
|
List<Map<String, Object>> rstotal = jdbcTemplate.queryForList(sql);
|
|
|
|
|
|
Long doctorTotal = 0l;
|
|
|
if (rstotal != null && rstotal.size() > 0) {
|
|
|
doctorTotal = (Long) rstotal.get(0).get("total");
|
|
|
}
|
|
|
|
|
|
rs.put("doctorTotal",doctorTotal);
|
|
|
|
|
|
//统计在线医生
|
|
|
String onlineSql="SELECT " +
|
|
|
" COUNT(1) AS total " +
|
|
|
" FROM " +
|
|
|
" base_doctor d " +
|
|
|
" JOIN base_doctor_role r ON d.id = r.doctor_code " +
|
|
|
" WHERE " +
|
|
|
" r.role_code ='specialist' " +
|
|
|
" AND d.consult_status ='1' " +
|
|
|
" AND d.charge_type is not null " +
|
|
|
" AND d.outpatient_type like '%xt%' ";
|
|
|
List<Map<String, Object>> oltotal = jdbcTemplate.queryForList(onlineSql);
|
|
|
|
|
|
Long onlineTotal = 0l;
|
|
|
if (oltotal != null && oltotal.size() > 0) {
|
|
|
onlineTotal = (Long) oltotal.get(0).get("total");
|
|
|
}
|
|
|
|
|
|
rs.put("onlineTotal",onlineTotal);
|
|
|
|
|
|
return rs;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查询医生所有可抢单的数量
|
|
|
* @param doctor
|
|
|
* @param dept
|
|
|
* @return
|
|
|
*/
|
|
|
public com.alibaba.fastjson.JSONObject findWaitingRoomOutpatientNumberByDoctor(String doctor,String dept) {
|
|
|
|
|
|
com.alibaba.fastjson.JSONObject object = new com.alibaba.fastjson.JSONObject();
|
|
|
|
|
|
|
|
|
//总数
|
|
|
String sqlAll = "SELECT " +
|
|
|
" COUNT(room.outpatient_id) AS total " +
|
|
|
"FROM " +
|
|
|
"wlyy_hospital_waiting_room room," +
|
|
|
"wlyy_outpatient outpatient " +
|
|
|
"WHERE " +
|
|
|
" room.outpatient_id=outpatient.id " +
|
|
|
"AND outpatient.status = 0 AND room.doctor IS NULL AND outpatient.dept='"+dept+"' ";
|
|
|
|
|
|
List<Map<String, Object>> alltotal = jdbcTemplate.queryForList(sqlAll);
|
|
|
|
|
|
Long totalsqlAll = 0l;
|
|
|
if (alltotal != null && alltotal.size() > 0) {
|
|
|
totalsqlAll = (Long) alltotal.get(0).get("total");
|
|
|
}
|
|
|
|
|
|
object.put("all",totalsqlAll);
|
|
|
|
|
|
//图文复诊
|
|
|
String imgAll = "SELECT " +
|
|
|
" COUNT(room.outpatient_id) AS total " +
|
|
|
"FROM " +
|
|
|
"wlyy_hospital_waiting_room room," +
|
|
|
"wlyy_outpatient outpatient " +
|
|
|
"WHERE " +
|
|
|
" room.outpatient_id=outpatient.id " +
|
|
|
"AND outpatient.status = 0 AND room.doctor IS NULL AND room.reservation_type=1 AND room.consult_type=1 AND outpatient.dept='"+dept+"' ";
|
|
|
|
|
|
List<Map<String, Object>> imgtotal = jdbcTemplate.queryForList(imgAll);
|
|
|
|
|
|
Long twCount = 0l;
|
|
|
if (imgtotal != null && imgtotal.size() > 0) {
|
|
|
twCount = (Long) imgtotal.get(0).get("total");
|
|
|
}
|
|
|
|
|
|
object.put("twCount",twCount);
|
|
|
|
|
|
//视频复诊
|
|
|
String spsql = "SELECT " +
|
|
|
" COUNT(room.outpatient_id) AS total " +
|
|
|
"FROM " +
|
|
|
"wlyy_hospital_waiting_room room," +
|
|
|
"wlyy_outpatient outpatient " +
|
|
|
"WHERE " +
|
|
|
" room.outpatient_id=outpatient.id " +
|
|
|
"AND outpatient.status = 0 AND room.doctor IS NULL AND room.reservation_type=1 AND room.consult_type=2 AND outpatient.dept='"+dept+"' ";
|
|
|
|
|
|
List<Map<String, Object>> sptotal = jdbcTemplate.queryForList(spsql);
|
|
|
|
|
|
Long spcount = 0l;
|
|
|
if (sptotal != null && sptotal.size() > 0) {
|
|
|
spcount = (Long) sptotal.get(0).get("total");
|
|
|
}
|
|
|
|
|
|
object.put("spCount",spcount);
|
|
|
|
|
|
|
|
|
//协同门诊
|
|
|
String xtsql = "SELECT " +
|
|
|
" COUNT(room.outpatient_id) AS total " +
|
|
|
"FROM " +
|
|
|
"wlyy_hospital_waiting_room room," +
|
|
|
"wlyy_outpatient outpatient " +
|
|
|
"WHERE " +
|
|
|
" room.outpatient_id=outpatient.id " +
|
|
|
"AND outpatient.status = 0 AND room.doctor IS NULL AND room.reservation_type=2 AND outpatient.dept='"+dept+"' ";
|
|
|
|
|
|
List<Map<String, Object>> xttotal = jdbcTemplate.queryForList(xtsql);
|
|
|
|
|
|
Long xtcount = 0l;
|
|
|
if (xttotal != null && xttotal.size() > 0) {
|
|
|
xtcount = (Long) xttotal.get(0).get("total");
|
|
|
}
|
|
|
|
|
|
object.put("xtCount",xtcount);
|
|
|
|
|
|
|
|
|
return object;
|
|
|
}
|
|
|
|
|
|
public Map<String,Object> refuseOutpatientByDoctor(String outPatientId, String cancelType, String cancelValue, String cancelRemark) {
|
|
|
Map<String,Object> rs = new HashedMap();
|
|
|
//判断医生是否接诊
|
|
|
List<WlyyHospitalWaitingRoomDO> roomDOs =hospitalWaitingRoomDao.findByOutpatientId(outPatientId);
|
|
|
if(roomDOs!=null&&roomDOs.size()>0){
|
|
|
for(WlyyHospitalWaitingRoomDO roomDO:roomDOs){
|
|
|
if(roomDO.getVisitStatus()==2){
|
|
|
rs.put("code",-1);
|
|
|
rs.put("mes","医生已经接诊,无法取消");
|
|
|
return rs;
|
|
|
}else{
|
|
|
roomDO.setVisitStatus(-1);
|
|
|
hospitalWaitingRoomDao.save(roomDO);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//更改门诊状态
|
|
|
WlyyOutpatientDO wlyyOutpatientDO = outpatientDao.findOne(outPatientId);
|
|
|
wlyyOutpatientDO.setStatus("-1");
|
|
|
wlyyOutpatientDO.setDoctorCancelRemark(cancelRemark);
|
|
|
wlyyOutpatientDO.setDoctorCancelType(cancelType);
|
|
|
wlyyOutpatientDO.setDoctorCancelValue(cancelValue);
|
|
|
outpatientDao.save(wlyyOutpatientDO);
|
|
|
|
|
|
//删除门诊号源
|
|
|
List<WlyyPatientRegisterTimeDO> list = patientRegisterTimeDao.findByOutpatientId(wlyyOutpatientDO.getId());
|
|
|
if(list!=null&&list.size()>0){
|
|
|
patientRegisterTimeDao.delete(list);
|
|
|
}
|
|
|
|
|
|
rs.put("code",1);
|
|
|
rs.put("mes","取消成功");
|
|
|
return rs;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取居民当日就诊列表
|
|
|
* @param patient
|
|
|
* @return
|
|
|
*/
|
|
|
public List<Map<String,Object>> getTodayOutpatinetList(String patient) {
|
|
|
String sql ="SELECT date_format(p.register_date ,'%Y-%m-%d %H:%i:%S' ) AS time,d.NAME as doctorName,d.job_title_name,d.photo AS photo,p.id as outpatientid FROM wlyy_outpatient p,base_doctor d " +
|
|
|
"WHERE p.patient='"+patient+"' AND p.doctor=d.id AND p.status=0 AND p.register_date BETWEEN '"+DateUtil.dateToStrShort(new Date())+" 00:00:00' AND '"+DateUtil.dateToStrShort(new Date())+" 23:59:59'";
|
|
|
List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取doctormappingcode
|
|
|
* @param doctor
|
|
|
* @param orgCode
|
|
|
* @return
|
|
|
*/
|
|
|
public DoctorMappingDO getDoctorMapping(String doctor,String orgCode){
|
|
|
return doctorMappingService.findMappingCode(doctor,orgCode);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取医生简介
|
|
|
* @param doctorCode
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public net.sf.json.JSON getDoctorIntroduction(String doctorCode) throws Exception {
|
|
|
DoctorMappingDO doctorMappingDO = doctorMappingService.findMappingCode(doctorCode,"350211A1002");
|
|
|
if(doctorMappingDO==null){
|
|
|
throw new RuntimeException("未找到医生映射信息");
|
|
|
}
|
|
|
return entranceService.BS16010(doctorMappingDO.getMappingCode(),demoFlag);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
*
|
|
|
* @param name
|
|
|
* @param hospital
|
|
|
* @return
|
|
|
*/
|
|
|
public List<WlyyHospitalSysDictDO> findByDict(String name,String hospital){
|
|
|
return sysDictDao.findByHospitalAndDictNameOrderBySortAsc(hospital,name);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 建立档案
|
|
|
* @param json
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public JSONObject setRecord(String json,String type)throws Exception{
|
|
|
JSONObject rs = new JSONObject();
|
|
|
ArchiveVO archiveVO = objectMapper.readValue(json,ArchiveVO.class);
|
|
|
if(archiveVO!=null){
|
|
|
if(StringUtils.isBlank(archiveVO.getBrnl00())){
|
|
|
archiveVO.setBrnl00(IdCardUtil.getAgeForIdcard(archiveVO.getSfzhao())+"");
|
|
|
}
|
|
|
if(StringUtils.isBlank(archiveVO.getCsrq00())){
|
|
|
archiveVO.setCsrq00(DateUtil.dateToStr(IdCardUtil.getBirthdayForIdcard(archiveVO.getSfzhao()),"yyyyMMdd"));
|
|
|
}
|
|
|
//1为需要同步建档
|
|
|
if("1".equals(type)){
|
|
|
rs = entranceService.BS16018(archiveVO,demoFlag);
|
|
|
}
|
|
|
//保存互联网医院居民账户
|
|
|
BasePatientDO patientDO = savePatient(archiveVO);
|
|
|
rs.put("patient",patientDO.getId());
|
|
|
}
|
|
|
return rs;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 存储居民
|
|
|
* @param archiveVO
|
|
|
* @return
|
|
|
*/
|
|
|
public BasePatientDO savePatient(ArchiveVO archiveVO)throws Exception{
|
|
|
BasePatientDO patientDO = basePatientDao.findByIdcardAndDel(archiveVO.getSfzhao(),"1");
|
|
|
if(patientDO == null) {
|
|
|
BasePatientDO patient = new BasePatientDO();
|
|
|
|
|
|
String salt = UUID.randomUUID().toString().substring(0, 5);
|
|
|
String mobile = archiveVO.getYytel0();
|
|
|
String pw = mobile.substring(mobile.length() - 6);
|
|
|
|
|
|
patient.setIdcard(archiveVO.getSfzhao());
|
|
|
patient.setName(archiveVO.getXming0());
|
|
|
patient.setPassword(MD5.md5Hex(pw + "{" + salt + "}"));
|
|
|
patient.setSalt(salt);
|
|
|
patient.setMobile(mobile);
|
|
|
patient.setDel("1");
|
|
|
patient.setEnabled(1);
|
|
|
patient.setLocked(0);
|
|
|
patient.setCreateTime(new Date());
|
|
|
patient.setUpdateTime(new Date());
|
|
|
patient.setBirthday(IdCardUtil.getBirthdayForIdcard(archiveVO.getSfzhao()));
|
|
|
|
|
|
return basePatientDao.save(patient);
|
|
|
}
|
|
|
return patientDO;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取HIIS居民档案信息
|
|
|
* @param idcard
|
|
|
* @param patient
|
|
|
* @param admitNum
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public JSONArray findPatientRecord(String idcard,String patient,String admitNum,String ybcard)throws Exception{
|
|
|
String patientId = null;
|
|
|
if(StringUtils.isNotBlank(patient)){
|
|
|
patientId = patientMappingService.findHisPatNoByPatient(patient);
|
|
|
}
|
|
|
return entranceService.BS10008(idcard,patientId,admitNum,ybcard,demoFlag);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取医生信息
|
|
|
* @param hospital
|
|
|
* @param name
|
|
|
* @return
|
|
|
*/
|
|
|
public List<Map<String,Object>> findDoctorByName(String hospital, String name,String chargeType){
|
|
|
String sql ="SELECT " +
|
|
|
" d.id AS \"id\", " +
|
|
|
" d.`name` AS \"name\"" +
|
|
|
" FROM " +
|
|
|
" base_doctor d ";
|
|
|
if(StringUtils.isNotBlank(hospital)){
|
|
|
sql +=" JOIN base_doctor_hospital h ON h.doctor_code = d.id";
|
|
|
}
|
|
|
sql +=" JOIN base_doctor_role r ON r.doctor_code = d.id ";
|
|
|
sql +=" WHERE " +
|
|
|
" d. NAME LIKE '%"+name+"%'";
|
|
|
if(StringUtils.isNotBlank(hospital)){
|
|
|
sql +=" AND h.org_code ='"+hospital+"'";
|
|
|
}
|
|
|
|
|
|
if(StringUtils.isNotBlank(chargeType)){
|
|
|
if("all".equals(chargeType)){
|
|
|
//查询全部号源
|
|
|
}else{
|
|
|
sql+=" AND d.charge_type ='"+chargeType+"'";
|
|
|
}
|
|
|
}else{
|
|
|
sql+=" AND d.charge_type is not null ";
|
|
|
}
|
|
|
|
|
|
sql += " AND r.role_code ='specialist'";
|
|
|
|
|
|
logger.info("findDoctorByName :"+sql);
|
|
|
|
|
|
List<Map<String,Object>> list = hibenateUtils.createSQLQuery(sql);
|
|
|
if(list!=null&&list.size()>0){
|
|
|
for(int i=0;i<list.size();i++){
|
|
|
Map<String,Object> d = list.get(i);
|
|
|
List<BaseDoctorHospitalDO> depts = baseDoctorHospitalDao.findByDoctorCode(d.get("id").toString());
|
|
|
d.put("depts",depts);
|
|
|
}
|
|
|
}
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
public void followOrgByPatient(String patientid, String doctorid, String type) {
|
|
|
List<BaseDoctorPatientFollowDO> list =baseOrgPatientDao.findByDoctorAndPatient(patientid,doctorid);
|
|
|
if("1".equals(type)){//关注
|
|
|
if(list.isEmpty()){
|
|
|
BaseDoctorPatientFollowDO baseOrgPatientFollowDO = new BaseDoctorPatientFollowDO();
|
|
|
baseOrgPatientFollowDO.setDoctor(doctorid);
|
|
|
baseOrgPatientFollowDO.setPatient(patientid);
|
|
|
baseOrgPatientDao.save(baseOrgPatientFollowDO);
|
|
|
}
|
|
|
}else if("0".equals(type)){//取消关注
|
|
|
if(!list.isEmpty()){
|
|
|
for (BaseDoctorPatientFollowDO baseOrgPatientFollowDO:list){
|
|
|
baseOrgPatientDao.delete(baseOrgPatientFollowDO.getId());
|
|
|
}
|
|
|
}
|
|
|
}else{}
|
|
|
}
|
|
|
|
|
|
public List<Map<String,Object>> findDeptByKeyWord(String keyWord,Integer page,Integer pagesize) {
|
|
|
|
|
|
String sql ="SELECT " +
|
|
|
"dept.code AS \"deptCode\"," +
|
|
|
"dept.name AS \"deptName\"," +
|
|
|
"org.CODE AS \"orgCode\", " +
|
|
|
"org.NAME AS \"orgName\" " +
|
|
|
"FROM " +
|
|
|
"dict_hospital_dept dept," +
|
|
|
"base_org org " +
|
|
|
"WHERE org.CODE=dept.org_code " +
|
|
|
"AND org.del=1 ";
|
|
|
|
|
|
if(StringUtils.isNoneBlank(keyWord)){
|
|
|
sql = sql + "AND dept.NAME LIKE '%"+keyWord+"%' ";
|
|
|
}
|
|
|
List<Map<String,Object>> list = hibenateUtils.createSQLQuery(sql,page,pagesize);
|
|
|
logger.info("sql:"+sql);
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
public List<Map<String,Object>> findDeptWithDoctorWorkTime(String hospital,String keyWord,Integer page,Integer pagesize ){
|
|
|
|
|
|
String now = DateUtil.dateToStr(new Date(),"yyyy-MM-dd");
|
|
|
// Date startDate = DateUtil.stringToDate(now+" 00:00:00","yyyy-MM-dd HH:mm:ss");
|
|
|
// Date endDate = DateUtil.stringToDate(now+" 23:59:59","yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
|
String sql ="SELECT " +
|
|
|
" DISTINCT " +
|
|
|
" h.dept_code AS \"deptCode\", " +
|
|
|
" h.dept_name AS \"deptName\"," +
|
|
|
" h.org_code AS \"orgCode\"," +
|
|
|
" h.org_name AS \"orgName\"" +
|
|
|
" FROM " +
|
|
|
" base_doctor_hospital h " +
|
|
|
" JOIN base_doctor d ON h.doctor_code = d.id" +
|
|
|
" WHERE " +
|
|
|
" ( EXISTS ( " +
|
|
|
" SELECT " +
|
|
|
" w.doctor " +
|
|
|
" FROM " +
|
|
|
" wlyy_doctor_work_time w " +
|
|
|
" WHERE " +
|
|
|
" w.doctor = h.doctor_code " +
|
|
|
" AND start_time <=:startTime " +
|
|
|
" AND end_time >=:endDate " +
|
|
|
" ) OR d.consult_status ='1') " +
|
|
|
" AND h.dept_code IS NOT NULL " +
|
|
|
" AND h.dept_code !=''";
|
|
|
Map<String,Object> params = new HashedMap();
|
|
|
params.put("startTime",new Date());
|
|
|
params.put("endDate",new Date());
|
|
|
if(StringUtils.isNotBlank(hospital)){
|
|
|
sql +=" AND h.org_code =:hospital";
|
|
|
params.put("hospital",hospital);
|
|
|
}
|
|
|
if(StringUtils.isNotBlank(keyWord)){
|
|
|
sql +=" AND h.dept_name like:keyWord";
|
|
|
params.put("keyWord","%"+keyWord+"%");
|
|
|
}
|
|
|
logger.info(sql);
|
|
|
return hibenateUtils.createSQLQuery(sql,params,page,pagesize);
|
|
|
}
|
|
|
}
|