瀏覽代碼

互联网医院

Trick 5 年之前
父節點
當前提交
55cdf531d4

+ 3 - 0
business/base-service/src/main/java/com/yihu/jw/hospital/doctor/dao/DoctorWorkTimeDao.java

@ -16,4 +16,7 @@ public interface DoctorWorkTimeDao extends PagingAndSortingRepository<WlyyDoctor
    @Query("from WlyyDoctorWorkTimeDO a where a.doctor = ?1 and a.endTime > ?2 and a.endTime < ?3 order by a.startTime asc")
    @Query("from WlyyDoctorWorkTimeDO a where a.doctor = ?1 and a.endTime > ?2 and a.endTime < ?3 order by a.startTime asc")
    List<WlyyDoctorWorkTimeDO> findDoctorWorkTime(String doctor, Date startTime, Date endTime);
    List<WlyyDoctorWorkTimeDO> findDoctorWorkTime(String doctor, Date startTime, Date endTime);
    @Query("from WlyyDoctorWorkTimeDO a where a.doctor = ?1 and a.date like ?2 order by a.startTime asc")
    List<WlyyDoctorWorkTimeDO> findDoctorWorkTimeByMonth(String doctor, String date);
}
}

+ 227 - 3
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/PrescriptionService.java

@ -34,6 +34,7 @@ import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.patient.dao.BasePatientMedicareCardDao;
import com.yihu.jw.patient.dao.BasePatientMedicareCardDao;
import com.yihu.jw.restmodel.base.dict.DictHospitalDeptVO;
import com.yihu.jw.restmodel.base.dict.DictHospitalDeptVO;
import com.yihu.jw.restmodel.base.org.BaseOrgVO;
import com.yihu.jw.restmodel.base.org.BaseOrgVO;
import com.yihu.jw.restmodel.hospital.consult.WlyyHospitalSysDictVO;
import com.yihu.jw.restmodel.hospital.doctor.WlyyDoctorWorkTimeVO;
import com.yihu.jw.restmodel.hospital.doctor.WlyyDoctorWorkTimeVO;
import com.yihu.jw.restmodel.hospital.prescription.*;
import com.yihu.jw.restmodel.hospital.prescription.*;
import com.yihu.jw.restmodel.web.MixEnvelop;
import com.yihu.jw.restmodel.web.MixEnvelop;
@ -547,7 +548,6 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
        waitingRoom.setHospital(outpatientDO.getHospital());
        waitingRoom.setHospital(outpatientDO.getHospital());
        waitingRoom.setHospitalName(outpatientDO.getHospitalName());
        waitingRoom.setHospitalName(outpatientDO.getHospitalName());
        waitingRoom.setConsultType(1);
        waitingRoom.setPatientId(outpatientDO.getPatient());
        waitingRoom.setPatientId(outpatientDO.getPatient());
        waitingRoom.setPatientName(outpatientDO.getPatientName());
        waitingRoom.setPatientName(outpatientDO.getPatientName());
        waitingRoom.setReservationTime(reservationTime);
        waitingRoom.setReservationTime(reservationTime);
@ -701,7 +701,7 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
    }
    }
    /**
    /**
     * 获取医生列表
     * 获取医生列表带排班
     * @param orgCode
     * @param orgCode
     * @param dept
     * @param dept
     * @return
     * @return
@ -734,7 +734,9 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
                " d.introduce," +
                " d.introduce," +
                " d.job_title_code AS jobTitleCode, " +
                " d.job_title_code AS jobTitleCode, " +
                " d.job_title_name AS jobTitleName," +
                " d.job_title_name AS jobTitleName," +
                " d.charge_type AS chargeType" +
                " d.charge_type AS chargeType," +
                " h.dept_code AS deptCode," +
                " h.dept_Name AS deptName" +
                " FROM " +
                " FROM " +
                " base_doctor d " +
                " base_doctor d " +
                " JOIN base_doctor_hospital h ON h.doctor_code = d.id " +
                " JOIN base_doctor_hospital h ON h.doctor_code = d.id " +
@ -766,6 +768,77 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
        return MixEnvelop.getSuccessListWithPage(BaseHospitalRequestMapping.Prescription.api_success, list, page, size, count);
        return MixEnvelop.getSuccessListWithPage(BaseHospitalRequestMapping.Prescription.api_success, list, page, size, count);
    }
    }
    /**
     * 查询医生列表带月份排班状态
     * @param orgCode
     * @param dept
     * @param chargeType
     * @param date
     * @param page
     * @param size
     * @return
     */
    public MixEnvelop findDoctorWithMouthWork(String orgCode,String dept,String chargeType,String date,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  " +
                " h.org_code = '"+orgCode+"'";
        if(StringUtils.isNotBlank(chargeType)){
            totalSql+=" AND d.charge_type ='"+chargeType+"'";
        }
        if(StringUtils.isNotBlank(dept)){
            totalSql+= " AND h.dept_code = '"+dept+"' " ;
        }
        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 " +
                " d.id, " +
                " d.photo, " +
                " d.`name`, " +
                " d.expertise," +
                " d.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 " +
                " WHERE  " +
                " h.org_code = '"+orgCode+"'";
        if(StringUtils.isNotBlank(chargeType)){
            sql+=" AND d.charge_type ='"+chargeType+"'";
        }
        if(StringUtils.isNotBlank(dept)){
            sql+= " AND h.dept_code = '"+dept+"' " ;
        }
        sql += " LIMIT " + (page - 1) * size + "," + size + "";
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        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);
                }
            }
        }
        return MixEnvelop.getSuccessListWithPage(BaseHospitalRequestMapping.Prescription.api_success, list, page, size, count);
    }
    /**
    /**
     * 挂号
     * 挂号
     * @return
     * @return
@ -1753,4 +1826,155 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
        return  list;
        return  list;
    }
    }
    /**
     * 查询排班规则
     * @return
     */
    public List<WlyyHospitalSysDictVO> findWorkRule(String dictName,String hospital){
        List<WlyyHospitalSysDictDO> list = sysDictDao.findByHospitalAndDictName(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.findByHospitalAndDictName(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)throws Exception{
        List<WlyyDoctorWorkTimeDO> wlyyDoctorWorkTimeDOs = (List<WlyyDoctorWorkTimeDO>) com.alibaba.fastjson.JSONArray.parseArray(workTimeJson, WlyyDoctorWorkTimeDO.class);
        //全院医生
        if("1".equals(type)){
            String sql ="SELECT " +
                    " DISTINCT " +
                    " d.id, " +
                    " d.`name`, " +
                    " h.org_code, " +
                    " h.org_name, " +
                    " h.dept_code, " +
                    " h.dept_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);
            //科室
        }else if("2".equals(type)){
            String sql ="SELECT " +
                    " DISTINCT " +
                    " d.id, " +
                    " d.`name`, " +
                    " h.org_code, " +
                    " h.org_name, " +
                    " h.dept_code, " +
                    " h.dept_name " +
                    " FROM " +
                    " base_doctor d " +
                    " JOIN base_doctor_hospital h ON d.id= h.doctor_code " +
                    " WHERE  " +
                    " h.dept_code in ("+codes+")";
            List<Map<String,Object>> doctors = jdbcTemplate.queryForList(sql);
            List<WlyyDoctorWorkTimeDO> workTimeDOs =makeDoctorWorkTimeDOList(doctors,wlyyDoctorWorkTimeDOs);
            saveDoctorWorkTime(workTimeDOs);
            //医生批量
        }else if("3".equals(type)){
            String sql ="SELECT " +
                    " DISTINCT " +
                    " d.id, " +
                    " d.`name`, " +
                    " h.org_code, " +
                    " h.org_name, " +
                    " h.dept_code, " +
                    " h.dept_name " +
                    " FROM " +
                    " base_doctor d " +
                    " JOIN base_doctor_hospital h ON d.id= h.doctor_code " +
                    " WHERE  " +
                    " d.id in ("+codes+")";
            List<Map<String,Object>> doctors = jdbcTemplate.queryForList(sql);
            List<WlyyDoctorWorkTimeDO> workTimeDOs =makeDoctorWorkTimeDOList(doctors,wlyyDoctorWorkTimeDOs);
            saveDoctorWorkTime(workTimeDOs);
        }
        return true;
    }
    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){
                    time.setDoctor((String)doctor.get("id"));
                    time.setDoctorName((String)doctor.get("name"));
                    time.setDept((String)doctor.get("dept_code"));
                    time.setDeptName((String)doctor.get("dept_name"));
                    time.setHospital((String)doctor.get("org_code"));
                    time.setHospitalName((String)doctor.get("org_name"));
                    time.setCreateTime(new Date());
                    rs.add(time);
                }
            }
        }
        return rs;
    }
    /**
     * 批量更新医生多月份排班数据
     * @param workTimeDOs
     * @return
     */
    public Boolean saveDoctorWorkTime(List<WlyyDoctorWorkTimeDO> workTimeDOs){
        if(workTimeDOs!=null&&workTimeDOs.size()>0){
            //按月按医生分组标记排班数据
            List<String> workMonths = new ArrayList<>();
            for(WlyyDoctorWorkTimeDO time : workTimeDOs){
                //医生工作月份
                String workMonth = time.getDoctor()+","+time.getDate().substring(0,6);
                //判断是否是首次插入医生月份数据,如果是首次,则删除该医生当前月份排班数据数据
                if(!workMonths.contains(workMonth)){
                    workMonths.add(workMonth);
                    List<WlyyDoctorWorkTimeDO> oldTimes = doctorWorkTimeDao.findDoctorWorkTimeByMonth(time.getDoctor(),"%"+time.getDate().substring(0,6)+"%");
                    doctorWorkTimeDao.delete(oldTimes);
                }
            }
            doctorWorkTimeDao.save(workTimeDOs);
        }
        return true;
    }
    /**
     * 查询某个医生某个月份排班记录
     * @param doctor
     * @param date
     * @return
     */
    public List<WlyyDoctorWorkTimeVO> findDoctorWorkTimeByMonth(String doctor,String date){
        List<WlyyDoctorWorkTimeDO> times = doctorWorkTimeDao.findDoctorWorkTimeByMonth(doctor,"%"+date+"%");
        List<WlyyDoctorWorkTimeVO> timeVOs = new ArrayList<>();
        return convertToModels(times,timeVOs,WlyyDoctorWorkTimeVO.class);
    }
}
}

+ 27 - 0
common/common-request-mapping/src/main/java/com/yihu/jw/rm/hospital/BaseHospitalRequestMapping.java

@ -171,6 +171,33 @@ public class BaseHospitalRequestMapping {
         * 获取快速咨询时间分段
         * 获取快速咨询时间分段
         */
         */
        public static final String findByTimeSlot="/findByTimeSlot";
        public static final String findByTimeSlot="/findByTimeSlot";
        /**
         * 获取医生列表,带当月排班状态
         */
        public static final String findDoctorWithMouthWork="/findDoctorWithMouthWork";
        /**
         * 查询某个医生某个月份排班记录
         */
        public static final String findDoctorWorkTimeByMonth="/findDoctorWorkTimeByMonth";
        /**
         * 查询排班规则
         */
        public static final String findWorkRule="/findWorkRule";
        /**
         * 保存排班规则
         */
        public static final String updateWorkRule="/updateWorkRule";
        /**
         * 排班批量保存接口
         */
        public static final String saveDoctorWorkTimeJson="/saveDoctorWorkTimeJson";
        //=================end=======================================
        //=================end=======================================
        /**
        /**

+ 57 - 0
svr/svr-internet-hospital/src/main/java/com/yihu/jw/hospital/endpoint/prescription/PrescriptionEndpoint.java

@ -3,6 +3,8 @@ package com.yihu.jw.hospital.endpoint.prescription;
import com.yihu.jw.hospital.prescription.service.PrescriptionService;
import com.yihu.jw.hospital.prescription.service.PrescriptionService;
import com.yihu.jw.restmodel.base.dict.DictHospitalDeptVO;
import com.yihu.jw.restmodel.base.dict.DictHospitalDeptVO;
import com.yihu.jw.restmodel.base.org.BaseOrgVO;
import com.yihu.jw.restmodel.base.org.BaseOrgVO;
import com.yihu.jw.restmodel.hospital.consult.WlyyHospitalSysDictVO;
import com.yihu.jw.restmodel.hospital.doctor.WlyyDoctorWorkTimeVO;
import com.yihu.jw.restmodel.hospital.prescription.WlyyOutpatientVO;
import com.yihu.jw.restmodel.hospital.prescription.WlyyOutpatientVO;
import com.yihu.jw.restmodel.hospital.prescription.WlyyPrescriptionVO;
import com.yihu.jw.restmodel.hospital.prescription.WlyyPrescriptionVO;
import com.yihu.jw.restmodel.web.ListEnvelop;
import com.yihu.jw.restmodel.web.ListEnvelop;
@ -341,6 +343,25 @@ public class PrescriptionEndpoint extends EnvelopRestEndpoint {
        return success(prescriptionService.findDoctorWithWork(orgCode,dept,chargeType,doctorCode,page,size));
        return success(prescriptionService.findDoctorWithWork(orgCode,dept,chargeType,doctorCode,page,size));
    }
    }
    @GetMapping(value = BaseHospitalRequestMapping.Prescription.findDoctorWithMouthWork)
    @ApiOperation(value = "查询医生列表带月份排班状态", notes = "查询医生列表带月份排班状态")
    public ObjEnvelop findDoctorWithMouthWork(@ApiParam(name = "orgCode", value = "机构code")
                                         @RequestParam(value = "orgCode", required = true)String orgCode,
                                         @ApiParam(name = "dept", value = "部门code")
                                         @RequestParam(value = "dept", required = false)String dept,
                                         @ApiParam(name = "date", value = "yyyy-MM")
                                         @RequestParam(value = "date", required = true)String date,
                                         @ApiParam(name = "chargeType", value = "号别")
                                         @RequestParam(value = "chargeType", required = false)String chargeType,
                                         @ApiParam(name = "page", value = "第几页")
                                         @RequestParam(value = "page", required = true)Integer page,
                                         @ApiParam(name = "size", value = "每页大小")
                                         @RequestParam(value = "size", required = true)Integer size) {
        return success(prescriptionService.findDoctorWithMouthWork(orgCode,dept,chargeType,date,page,size));
    }
    @GetMapping(value = BaseHospitalRequestMapping.Prescription.findWorkTimeInfo)
    @GetMapping(value = BaseHospitalRequestMapping.Prescription.findWorkTimeInfo)
    @ApiOperation(value = "获取具体号源", notes = "获取具体号源")
    @ApiOperation(value = "获取具体号源", notes = "获取具体号源")
    public ListEnvelop findWorkTimeInfo(@ApiParam(name = "id", value = "排班id")
    public ListEnvelop findWorkTimeInfo(@ApiParam(name = "id", value = "排班id")
@ -388,6 +409,42 @@ public class PrescriptionEndpoint extends EnvelopRestEndpoint {
                                      @RequestParam(value = "endTime", required = false)String endTime) {
                                      @RequestParam(value = "endTime", required = false)String endTime) {
        return success(prescriptionService.findByTimeSlot(startTime,endTime));
        return success(prescriptionService.findByTimeSlot(startTime,endTime));
    }
    }
    @GetMapping(value = BaseHospitalRequestMapping.Prescription.findDoctorWorkTimeByMonth)
    @ApiOperation(value = "查询某个医生某个月份排班记录", notes = "查询某个医生某个月份排班记录")
    public ListEnvelop findDoctorWorkTimeByMonth(@ApiParam(name = "doctor", value = "医生code")
                                                 @RequestParam(value = "doctor", required = true)String doctor,
                                                 @ApiParam(name = "date", value = "年份和月份,yyyy-MM")
                                                 @RequestParam(value = "date", required = true)String date) {
        return success(prescriptionService.findDoctorWorkTimeByMonth(doctor,date));
    }
    @GetMapping(value = BaseHospitalRequestMapping.Prescription.findWorkRule)
    @ApiOperation(value = "查询排班规则", notes = "查询排班规则")
    public ListEnvelop findWorkRule(@ApiParam(name = "hospital", value = "医生code")
                                    @RequestParam(value = "hospital", required = true)String hospital) {
        return success(prescriptionService.findWorkRule("Scheduling",hospital));
    }
    @PostMapping(value = BaseHospitalRequestMapping.Prescription.updateWorkRule)
    @ApiOperation(value = "保存排班规则", notes = "保存排班规则")
    public ObjEnvelop updateWorkRule(@ApiParam(name = "workRoleJsons", value = "排班规则json")
                                     @RequestParam(value = "workRoleJsons", required = true)String workRoleJsons) {
        return success(prescriptionService.updateWorkRule(workRoleJsons));
    }
    @PostMapping(value = BaseHospitalRequestMapping.Prescription.saveDoctorWorkTimeJson)
    @ApiOperation(value = "排班批量保存接口", notes = "排班批量保存接口")
    public ObjEnvelop saveDoctorWorkTimeJson(@ApiParam(name = "type", value = "1.全医院,2.科室,3.医生")
                                             @RequestParam(value = "type", required = true)String type,
                                             @ApiParam(name = "codes", value = "1.医院code,2.科室code,‘,’分割,3.医生code,‘,’分割")
                                             @RequestParam(value = "codes", required = true)String codes,
                                             @ApiParam(name = "workTimeJson", value = "排班列表json")
                                             @RequestParam(value = "workTimeJson", required = true)String workTimeJson)throws Exception {
        return success(prescriptionService.saveDoctorWorkTimeJson(type,codes,workTimeJson));
    }
    //===========
    //===========