Trick 5 lat temu
rodzic
commit
a8b9461c9e

+ 15 - 0
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/dao/WlyyHospitalWorkRuleDao.java

@ -0,0 +1,15 @@
package com.yihu.jw.hospital.prescription.dao;
import com.yihu.jw.entity.hospital.prescription.WlyyHospitalWorkRuleDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
/**
 * Created by Trick on 2020/3/24.
 */
public interface WlyyHospitalWorkRuleDao extends PagingAndSortingRepository<WlyyHospitalWorkRuleDO, String>, JpaSpecificationExecutor<WlyyHospitalWorkRuleDO> {
    List<WlyyHospitalWorkRuleDO> findByHospital(String hospital);
}

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

@ -162,6 +162,8 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
    private HibenateUtils hibenateUtils;
    @Autowired
    private BaseDoctorPatientFollowDao baseOrgPatientDao;
    @Autowired
    private WlyyHospitalWorkRuleDao wlyyHospitalWorkRuleDao;
    @Value("${demo.flag}")
@ -169,6 +171,7 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
    /**
     * 获取居民就诊记录接口
     *
     * @param patient
     * @param startTime
     * @param endTime
@ -176,35 +179,36 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
     * @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)){
    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);
        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)){
    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);
        logger.info("findOutpatientList patNo:" + patNo);
        List<WlyyOutpatientVO> list = entranceService.BS30025(patNo, conNo, null, null, demoFlag);
        if(list!=null&&list.size()>0){
        if (list != null && list.size() > 0) {
            WlyyOutpatientVO outpatientVO = list.get(0);
            BasePatientDO patientDO = basePatientDao.findById(patient);
            outpatientVO.setSex(patientDO.getSex()+"");
            outpatientVO.setSex(patientDO.getSex() + "");
            outpatientVO.setBirthday(patientDO.getBirthday());
            return outpatientVO;
        }
@ -214,18 +218,19 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
    /**
     *
     */
    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)){
    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);
        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
@ -234,13 +239,13 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
     * @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)){
    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){
        List<WlyyPrescriptionVO> rs = entranceService.BS16017(registerSn, realOrder, patNo, admNo, demoFlag);
        if (rs != null && rs.size() > 0) {
            return rs.get(0);
        }
        return null;
@ -248,13 +253,14 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
    /**
     * 获取复诊记录列表
     *
     * @param patient
     * @param status
     * @param page
     * @param size
     * @return
     */
    public MixEnvelop findReOutpatientList(String patient,Integer status,String startTime,String endTime,Integer page,Integer size){
    public MixEnvelop findReOutpatientList(String patient, Integer status, String startTime, String endTime, Integer page, Integer size) {
        String totalSql = "SELECT " +
                " COUNT(1) AS total " +
                " FROM " +
@ -263,24 +269,24 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
                " o.patient = ? AND o.outpatient_type != '2' ";
        List<Object> totalParams = new ArrayList<>();
        totalParams.add(patient);
        if(status!=null){
            totalSql +=  " AND o.status = ? ";
        if (status != null) {
            totalSql += " AND o.status = ? ";
            totalParams.add(status);
        }
        if(StringUtils.isNotBlank(startTime)){
        if (StringUtils.isNotBlank(startTime)) {
            totalSql += " AND create_time >= ? ";
            totalParams.add(startTime+" 00:00:00");
            totalParams.add(startTime + " 00:00:00");
        }
        if(StringUtils.isNotBlank(endTime)){
        if (StringUtils.isNotBlank(endTime)) {
            totalSql += " AND create_time <= ? ";
            totalParams.add(endTime+" 23:59:59");
            totalParams.add(endTime + " 23:59:59");
        }
        List<Map<String, Object>> rstotal = jdbcTemplate.queryForList(totalSql,totalParams.toArray());
        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 " +
        String sql = "SELECT " +
                " o.id, " +
                " o.adm_no AS admNo, " +
                " o.origin_adm_no AS originAdmNo, " +
@ -317,101 +323,102 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
                " o.patient = ? ";
        List<Object> params = new ArrayList<>();
        params.add(patient);
        if(status!=null){
            sql +=  " AND o.status = ? ";
        if (status != null) {
            sql += " AND o.status = ? ";
            params.add(status);
        }
        if(StringUtils.isNotBlank(startTime)){
        if (StringUtils.isNotBlank(startTime)) {
            sql += " AND o.create_time >= ? ";
            params.add(startTime+" 00:00:00");
            params.add(startTime + " 00:00:00");
        }
        if(StringUtils.isNotBlank(endTime)){
        if (StringUtils.isNotBlank(endTime)) {
            sql += " AND o.create_time <= ? ";
            params.add(endTime+" 23:59:59");
            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());
        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){
    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));
        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("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"));
        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)){
        if (StringUtils.isNotBlank(prescriptionId)) {
            prescriptionDOs = prescriptionDao.findById(prescriptionId);
        }else{
        } 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){
        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));
                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));
                vo.setInspectionVOs(convertToModels(wlyyInspectionDao.findByPrescriptionId(vo.getId()), inspectionVOs, WlyyInspectionVO.class));
            }
        }
        rs.put("prescriptions",prescriptionVOs);
        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);
        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<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);
        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);
        if (timeDOs != null && timeDOs.size() > 0) {
            rs.put("register", timeDOs.get(0));
        } else {
            rs.put("register", null);
        }
        return rs;
@ -420,6 +427,7 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
    /**
     * 查询历史
     *
     * @param patient
     * @param status
     * @param startTime
@ -428,24 +436,24 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
     * @param size
     * @return
     */
    public MixEnvelop findPrescriptionList(String patient, String status,String startTime, String endTime, Integer page, Integer size){
    public MixEnvelop findPrescriptionList(String patient, String status, String startTime, String endTime, Integer page, Integer size) {
        String totalSql ="SELECT " +
        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(patient)) {
            totalSql += " AND p.patient_code ='" + patient + "'";
        }
        if(StringUtils.isNotBlank(status)){
            totalSql+=" AND p.status IN ("+status+")";
        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(startTime)) {
            totalSql += " AND create_time >='" + startTime + " 00:00:00'";
        }
        if(StringUtils.isNotBlank(endTime)){
            totalSql += " AND create_time <='"+endTime+" 23:59:59'";
        if (StringUtils.isNotBlank(endTime)) {
            totalSql += " AND create_time <='" + endTime + " 23:59:59'";
        }
        List<Map<String, Object>> rstotal = jdbcTemplate.queryForList(totalSql);
@ -454,7 +462,7 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
            count = (Long) rstotal.get(0).get("total");
        }
        String sql ="SELECT " +
        String sql = "SELECT " +
                " p.id, " +
                " p.real_order AS realOrder," +
                " p.origin_real_order AS originRealOrder," +
@ -500,70 +508,70 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
                " FROM " +
                " wlyy_prescription p " +
                " WHERE 1=1 ";
        if(StringUtils.isNotBlank(patient)){
            sql+=" AND p.patient_code ='"+patient+"'";
        if (StringUtils.isNotBlank(patient)) {
            sql += " AND p.patient_code ='" + patient + "'";
        }
        if(StringUtils.isNotBlank(status)){
            sql+=" AND p.status IN ("+status+")";
        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(startTime)) {
            sql += " AND create_time >='" + startTime + " 00:00:00'";
        }
        if(StringUtils.isNotBlank(endTime)){
            sql += " AND create_time <='"+endTime+" 23:59:59'";
        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){
        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));
                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){
    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);
        if (list != null && list.size() > 0) {
            return convertToModels(list, rs, WlyyPrescriptionDiagnosisVO.class);
        }
        return rs;
    }
    public Map<String,Object> findPrescriptionInfo(String prescriptionId){
    public Map<String, Object> findPrescriptionInfo(String prescriptionId) {
        //续方信息
        Map<String,Object> rs = new HashedMap();
        Map<String, Object> rs = new HashedMap();
        WlyyPrescriptionDO wlyyPrescriptionDO = prescriptionDao.findOne(prescriptionId);
        rs.put("prescription",convertToModel(wlyyPrescriptionDO,WlyyPrescriptionVO.class));
        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("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()));
        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("diagnosis", findDiagnosisById(wlyyPrescriptionDO.getId()));
        //药品信息
        rs.put("infos",prescriptionInfoDao.findByPrescriptionId(wlyyPrescriptionDO.getId()));
        rs.put("infos", prescriptionInfoDao.findByPrescriptionId(wlyyPrescriptionDO.getId()));
        return rs;
    }
    public Boolean checkPrescription(String patient){
    public Boolean checkPrescription(String patient) {
        List<WlyyPrescriptionDO> list = prescriptionDao.findByPatientCode(patient);
        if(list!=null&&list.size()>0){
        if (list != null && list.size() > 0) {
            return false;
        }
        return true;
@ -572,15 +580,16 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
    /**
     * 发起图文和视频复诊
     *
     * @param outpatientJson
     * @param expressageJson
     * @return
     * @throws Exception
     */
    public WlyyOutpatientDO appointmentRevisit(String outpatientJson,String expressageJson,String registerJson,String chargeType)throws Exception{
    public WlyyOutpatientDO appointmentRevisit(String outpatientJson, String expressageJson, String registerJson, String chargeType) throws Exception {
        //1.保存就诊实体
        WlyyOutpatientDO outpatientDO = objectMapper.readValue(outpatientJson,WlyyOutpatientDO.class);
        WlyyOutpatientDO outpatientDO = objectMapper.readValue(outpatientJson, WlyyOutpatientDO.class);
        BasePatientDO patientDO = basePatientDao.findById(outpatientDO.getPatient());
        outpatientDO.setMjz("mz");
@ -590,7 +599,7 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
        outpatientDO.setOutpatientType("1");
        outpatientDO.setCreateTime(new Date());
        if(outpatientDO.getRegisterDate()==null){
        if (outpatientDO.getRegisterDate() == null) {
            outpatientDO.setRegisterDate(new Date());
        }
@ -600,25 +609,25 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
        try {
            //如果是视频预约咨询
            if(StringUtils.isNotBlank(registerJson)){
                registerTimeDO = objectMapper.readValue(registerJson,WlyyPatientRegisterTimeDO.class);
            if (StringUtils.isNotBlank(registerJson)) {
                registerTimeDO = objectMapper.readValue(registerJson, WlyyPatientRegisterTimeDO.class);
                registerTimeDO.setOutpatientId(outpatient.getId());
                registerTimeDO.setCreateTime(new Date());
                patientRegisterTimeDao.save(registerTimeDO);
            }
        }catch (Exception e){
        } catch (Exception e) {
            throw new RuntimeException("号源已经被预约,请选择其他号源");
        }
        //2.物流信息
        WlyyPrescriptionExpressageDO expressageDO = objectMapper.readValue(expressageJson,WlyyPrescriptionExpressageDO.class);
        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);
        createRoom(outpatient, chargeType);
        return outpatient;
    }
@ -626,10 +635,11 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
    /**
     * 创建候诊室
     *
     * @param outpatientDO
     * @return
     */
    public Boolean createRoom(WlyyOutpatientDO outpatientDO,String chargeType){
    public Boolean createRoom(WlyyOutpatientDO outpatientDO, String chargeType) {
        WlyyHospitalWaitingRoomDO waitingRoom = new WlyyHospitalWaitingRoomDO();
@ -639,7 +649,7 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
        waitingRoom.setHospitalName(outpatientDO.getHospitalName());
        //是否是有协同门诊医生
        if(StringUtils.isNotBlank(outpatientDO.getGeneralDoctor())){
        if (StringUtils.isNotBlank(outpatientDO.getGeneralDoctor())) {
            waitingRoom.setGeneralDoctor(outpatientDO.getGeneralDoctor());
            waitingRoom.setGeneralDoctorName(outpatientDO.getGeneralDoctorName());
        }
@ -649,18 +659,18 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
        waitingRoom.setReservationTime(outpatientDO.getRegisterDate());
        waitingRoom.setVisitStatus(0);
        //设置复诊类型
        waitingRoom.setReservationType(StringUtils.isNotBlank(outpatientDO.getOutpatientType())?Integer.parseInt(outpatientDO.getOutpatientType()):1);
        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())){
        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)){
        if (StringUtils.isNotBlank(chargeType)) {
            waitingRoom.setChargeType(chargeType);
        }
@ -670,7 +680,7 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
    }
    public Boolean cancelPrescription(String prescriptionId){
    public Boolean cancelPrescription(String prescriptionId) {
        WlyyPrescriptionDO prescriptionDO = prescriptionDao.findOne(prescriptionId);
        prescriptionDO.setStatus(-2);
        return true;
@ -678,18 +688,18 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
    /**
     *@param admNo 门诊唯一号
     * @param admNo     门诊唯一号
     * @param realOrder 处方号
     *  @param status 处方状态 1审方失败,2审核完成,3结算完成
     * @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();
    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="";
        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);
@ -699,7 +709,7 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
            //开方成功时候,先用处方号获取本地处方状态是否为开方失败,如果是则需要更新本地的处方
            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 + "'";
            outPatientSql = "UPDATE base.wlyy_outpatient p SET p.`status`='2' WHERE p.adm_no='" + admNo + "'";
            jdbcTemplate.execute(outPatientSql);
            jdbcTemplate.execute(sql);
@ -713,7 +723,7 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
                wlyyPrescriptionDO.setPayStatus(1);
                wlyyPrescriptionDO.setStatus(100);
                prescriptionLogService.addPrescriptionLog(wlyyPrescriptionDO.getId(),100,2,outpatientDO.getDoctor(),outpatientDO.getDoctorName(),"",new Date());
                prescriptionLogService.addPrescriptionLog(wlyyPrescriptionDO.getId(), 100, 2, outpatientDO.getDoctor(), outpatientDO.getDoctorName(), "", new Date());
                prescriptionDao.save(wlyyPrescriptionDO);
            } else {
@ -721,30 +731,30 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
                wlyyPrescriptionDO.setPayStatus(1);
                wlyyPrescriptionDO.setStatus(32);
                try{
                    WlyyPrescriptionVO vo = findOriginPrescription(outpatientDO.getRegisterNo(),outpatientDO.getPatient(),admNo,realOrder,demoFlag);
                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());
                    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);
            SystemMessageDO systemMessageDO = sendPatientGetDrugMes(outpatientDO, wlyyPrescriptionDO);
            rs.put("mes",systemMessageDO);
            rs.put("mes", systemMessageDO);
        }
        rs.put("flag",true);
        rs.put("flag", true);
        return rs;
    }
    public SystemMessageDO sendPatientGetDrugMes(WlyyOutpatientDO outpatient,WlyyPrescriptionDO prescriptionDO){
    public SystemMessageDO sendPatientGetDrugMes(WlyyOutpatientDO outpatient, WlyyPrescriptionDO prescriptionDO) {
        SystemMessageDO systemMessageDO = new SystemMessageDO();
        try{
        try {
            systemMessageDO.setTitle("患者取药");
            systemMessageDO.setType("7");
@ -756,37 +766,38 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
            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","患者已完成取药");
            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());
        } catch (Exception e) {
            logger.error("sendPatientGetDrugMes :" + e.toString());
        }
        return systemMessageDO;
    }
    /**
     * 获取卡记录
     *
     * @param patient
     * @return
     * @throws Exception
     */
    public JSONArray findPatientCard(String patient)throws Exception{
    public JSONArray findPatientCard(String patient) throws Exception {
        BasePatientDO patientDO = basePatientDao.findById(patient);
        JSONArray res = entranceService.BS15018(patientDO.getIdcard(),null,demoFlag);
        JSONArray res = entranceService.BS15018(patientDO.getIdcard(), null, demoFlag);
        JSONArray rs = new JSONArray();
        if(res !=null){
            for (int i =0;i<res.size();i++){
        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)){
                if ("激活".equals(cardStat)) {
                    rs.add(card);
                }
            }
@ -795,53 +806,54 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
    }
    public Map<String,Object> checkOutpatient(String patient)throws Exception{
    public Map<String, Object> checkOutpatient(String patient) throws Exception {
        //-1卡余额不足,,-2 存在未结束的诊断热 1成功
        Map<String,Object> rs = new HashedMap();
        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","存在未结束的诊断");
        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","验证通过");
        rs.put("code", 1);
        rs.put("mes", "验证通过");
        return rs;
    }
    /**
     * 获取所有医院列表
     *
     * @return
     */
    public List<BaseOrgVO> findAllHospital(Integer level,String keyWord){
    
    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);
            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);
                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);
                return convertToModels(list, rs, BaseOrgVO.class);
            }
        }else{
    
            if(level!=null){
                List<BaseOrgDO> list = baseOrgDao.findByLevelAndDel(level,"1");
        } else {
            if (level != null) {
                List<BaseOrgDO> list = baseOrgDao.findByLevelAndDel(level, "1");
                List<BaseOrgVO> rs = new ArrayList<>();
                return convertToModels(list,rs,BaseOrgVO.class);
            }else {
                return convertToModels(list, rs, BaseOrgVO.class);
            } else {
                List<BaseOrgDO> list = baseOrgDao.findByDel("1");
                List<BaseOrgVO> rs = new ArrayList<>();
                return convertToModels(list,rs,BaseOrgVO.class);
                return convertToModels(list, rs, BaseOrgVO.class);
            }
        }
@ -849,24 +861,25 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
    /**
     * 获取机构下部门信息
     *
     * @param orgCode
     * @return
     */
    public List<DictHospitalDeptVO> findDeptByHospital(String orgCode,String dept,String consultDeptFlag){
    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);
        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)){
        convertToModels(list, rs, DictHospitalDeptVO.class);
        if (rs != null && rs.size() > 0 && StringUtils.isNotBlank(dept)) {
            //排序
            for(int i=0;i<rs.size();i++){
            for (int i = 0; i < rs.size(); i++) {
                String id = rs.get(i).getCode();
                if(dept.equals(id)){
                    Collections.swap(rs,0,i);
                if (dept.equals(id)) {
                    Collections.swap(rs, 0, i);
                }
            }
        }
@ -875,12 +888,13 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
    /**
     * 获取医生列表.
     *
     * @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 " +
    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, " +
                " d.photo, " +
                " d.`name`, " +
@ -896,59 +910,59 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
                " 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(dept)) {
            sql += " AND h.dept_code = '" + dept + "'";
        }
        if(StringUtils.isNotBlank(orgCode)){
            sql+= " AND h.org_code = '"+orgCode+"'";
        if (StringUtils.isNotBlank(orgCode)) {
            sql += " AND h.org_code = '" + orgCode + "'";
        }
        if(StringUtils.isNotBlank(chargeType)){
            if("all".equals(chargeType)){
        if (StringUtils.isNotBlank(chargeType)) {
            if ("all".equals(chargeType)) {
                //查询全部号源
            }else{
                sql+=" AND d.charge_type ='"+chargeType+"'";
            } else {
                sql += " AND d.charge_type ='" + chargeType + "'";
            }
        }else{
            sql+=" AND d.charge_type is not null ";
        } else {
            sql += " AND d.charge_type is not null ";
        }
        if(StringUtils.isNotBlank(outpatientType)){
            if("all".equals(outpatientType)){
        if (StringUtils.isNotBlank(outpatientType)) {
            if ("all".equals(outpatientType)) {
                //查询全部权限
            }else{
                sql+=" AND d.outpatient_type like'%"+outpatientType+"%'";
            } else {
                sql += " AND d.outpatient_type like'%" + outpatientType + "%'";
            }
        }else{
            sql+=" AND d.outpatient_type is not null ";
        } 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(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(consultStatus)) {
            sql += " AND d.consult_status = '" + consultStatus + "'";
        }
        if(StringUtils.isNotBlank(endDate)&&StringUtils.isNotBlank(startDate)){
            sql+=" AND EXISTS ( " +
        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+"'"+
                    " AND t.start_time >='" + startDate + "'" +
                    " AND t.start_time <='" + endDate + "'" +
                    " )";
        }
        logger.info("findDoctorByHospitalAndDept sql:"+sql);
        logger.info("findDoctorByHospitalAndDept sql:" + sql);
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
        if(list!=null&&list.size()>0&&StringUtils.isNotBlank(doctorCode)){
        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);
            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);
                }
            }
        }
@ -958,64 +972,65 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
    /**
     * 获取医生列表带排班
     *
     * @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){
    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 " +
        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 ";
        if(StringUtils.isNotBlank(dept)){
            totalSql+= " AND h.dept_code = '"+dept+"'";
        if (StringUtils.isNotBlank(dept)) {
            totalSql += " AND h.dept_code = '" + dept + "'";
        }
        if(StringUtils.isNotBlank(orgCode)){
            totalSql+= " AND h.org_code = '"+orgCode+"'";
        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(chargeType)) {
            totalSql += " AND d.charge_type ='" + chargeType + "'";
        } else {
            totalSql += " AND d.charge_type is not null ";
        }
        if(StringUtils.isNotBlank(outpatientType)){
            if(outpatientType.contains("or")){
        if (StringUtils.isNotBlank(outpatientType)) {
            if (outpatientType.contains("or")) {
                String[] outpatientTypeArray = outpatientType.split("or");
                totalSql+= " AND ( ";
    
                totalSql += " AND ( ";
                for (int i = 0; i < outpatientTypeArray.length; i++) {
                    totalSql +=" d.outpatient_type like'%"+outpatientTypeArray[i]+"%'";
                    if(i != outpatientTypeArray.length -1){
                    totalSql += " d.outpatient_type like'%" + outpatientTypeArray[i] + "%'";
                    if (i != outpatientTypeArray.length - 1) {
                        totalSql += " or ";
                    }
                }
                totalSql+= "  ) ";
            }else{
                totalSql+= " AND d.outpatient_type like'%"+outpatientType+"%'";
                totalSql += "  ) ";
            } else {
                totalSql += " AND d.outpatient_type like'%" + outpatientType + "%'";
            }
        }else{
            totalSql+=" AND d.outpatient_type is not null ";
        } 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(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(consultStatus)) {
            totalSql += " AND d.consult_status = '" + consultStatus + "'";
        }
        if(StringUtils.isNotBlank(endDate)&&StringUtils.isNotBlank(startDate)){
            totalSql+=" AND EXISTS ( " +
        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+"'"+
                    " AND t.start_time >='" + startDate + "'" +
                    " AND t.start_time <='" + endDate + "'" +
                    " )";
        }
        List<Map<String, Object>> rstotal = jdbcTemplate.queryForList(totalSql);
@ -1025,7 +1040,7 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
            count = (Long) rstotal.get(0).get("total");
        }
        String sql ="SELECT " +
        String sql = "SELECT " +
                " d.id, " +
                " d.photo, " +
                " d.`name`, " +
@ -1042,72 +1057,72 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
                " 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+"'";
                " 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(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(chargeType)) {
            sql += " AND d.charge_type ='" + chargeType + "'";
        } else {
            sql += " AND d.charge_type is not null";
        }
        
        if(StringUtils.isNotBlank(outpatientType)){
            if(outpatientType.contains("or")){
        if (StringUtils.isNotBlank(outpatientType)) {
            if (outpatientType.contains("or")) {
                String[] outpatientTypeArray = outpatientType.split("or");
                sql+= " AND ( ";
            
                sql += " AND ( ";
                for (int i = 0; i < outpatientTypeArray.length; i++) {
                    sql +=" d.outpatient_type like'%"+outpatientTypeArray[i]+"%'";
                    if(i != outpatientTypeArray.length -1){
                    sql += " d.outpatient_type like'%" + outpatientTypeArray[i] + "%'";
                    if (i != outpatientTypeArray.length - 1) {
                        sql += " or ";
                    }
                }
                sql+= " ) ";
            }else{
                sql+= " AND d.outpatient_type like'%"+outpatientType+"%'";
                sql += " ) ";
            } else {
                sql += " AND d.outpatient_type like'%" + outpatientType + "%'";
            }
        }else{
            sql+=" AND d.outpatient_type is not null ";
        } 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(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(consultStatus)) {
            sql += " AND d.consult_status = '" + consultStatus + "'";
        }
        if(StringUtils.isNotBlank(endDate)&&StringUtils.isNotBlank(startDate)){
            sql+=" AND EXISTS ( " +
        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+"'"+
                    " AND t.start_time >='" + startDate + "'" +
                    " AND t.start_time <='" + endDate + "'" +
                    " )";
        }
        sql += " AND d.del='1' AND d.outpatient_type is not null LIMIT " + (page - 1) * size + "," + size + "";
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        if(list!=null&&list.size()>0){
        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<WlyyDoctorWorkTimeVO> times = findDoctorWorkTime(id);
                doctor.put("workTime",times);
            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)){
            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);
                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);
                    }
                }
            }
@ -1115,8 +1130,29 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
        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);
            Date openTime = DateUtil.strToDate(DateUtil.dateToStr(new Date(), "yyyy-MM-dd") + " " + rule.getMaxDayOpenTime() + ":00", "yyyy-MM-dd HH:mm:ss");
            Integer openDay = rule.getMaxDay();
            if (openTime.before(new Date())) {
                openDay = openDay - 1;
            }
            Date endDate = DateUtil.stringToDate(DateUtil.dateToStr(DateUtil.getPreDays(new Date(), openDay), "yyyy-MM-dd") + "23:59:59", "yyyy-MM-dd HH:mm:ss");
            List<WlyyDoctorWorkTimeVO> timeVOs = new ArrayList<>();
            List<WlyyDoctorWorkTimeDO> timeDOs = doctorWorkTimeDao.findDoctorWorkTime(doctor, new Date(), endDate);
            convertToModels(timeDOs, timeVOs, WlyyDoctorWorkTimeVO.class);
            return timeVOs;
        }
        return null;
    }
    /**
     * 查询医生列表带月份排班状态
     *
     * @param orgCode
     * @param dept
     * @param chargeType
@ -1125,33 +1161,33 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
     * @param size
     * @return
     */
    public MixEnvelop findDoctorWithMouthWork(String orgCode,String dept,String chargeType,String date,String nameKey,Integer page,Integer size){
    public MixEnvelop findDoctorWithMouthWork(String orgCode, String dept, String chargeType, String date, String nameKey, Integer page, Integer size) {
        String totalSql ="SELECT " +
        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+"'" +
                " h.org_code = '" + orgCode + "'" +
                " AND r.role_code ='specialist'";
        if(StringUtils.isNotBlank(chargeType)){
            if("all".equals(chargeType)){
        if (StringUtils.isNotBlank(chargeType)) {
            if ("all".equals(chargeType)) {
                //不过滤号别
            }else{
                totalSql+=" AND d.charge_type ='"+chargeType+"'";
            } else {
                totalSql += " AND d.charge_type ='" + chargeType + "'";
            }
        }else{
        } else {
            //不传号别过滤不为为空
            totalSql+=" AND d.charge_type is not null ";
            totalSql += " AND d.charge_type is not null ";
        }
        if(StringUtils.isNotBlank(dept)){
            totalSql+= " AND h.dept_code = '"+dept+"' " ;
        if (StringUtils.isNotBlank(dept)) {
            totalSql += " AND h.dept_code = '" + dept + "' ";
        }
        if(StringUtils.isNotBlank(nameKey)){
            totalSql+= " AND d.name like '%"+nameKey+"%' " ;
        if (StringUtils.isNotBlank(nameKey)) {
            totalSql += " AND d.name like '%" + nameKey + "%' ";
        }
        List<Map<String, Object>> rstotal = jdbcTemplate.queryForList(totalSql);
@ -1160,7 +1196,7 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
            count = (Long) rstotal.get(0).get("total");
        }
        String sql ="SELECT " +
        String sql = "SELECT " +
                " d.id, " +
                " d.photo, " +
                " d.`name`, " +
@ -1176,72 +1212,72 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
                " 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+"'"+
                " h.org_code = '" + orgCode + "'" +
                " AND r.role_code ='specialist'";
        if(StringUtils.isNotBlank(chargeType)){
            if("all".equals(chargeType)){
        if (StringUtils.isNotBlank(chargeType)) {
            if ("all".equals(chargeType)) {
                //不过滤号别
            }else{
                sql+=" AND d.charge_type ='"+chargeType+"'";
            } else {
                sql += " AND d.charge_type ='" + chargeType + "'";
            }
        }else{
        } else {
            //不传号别过滤不为为空
            sql+=" AND d.charge_type is not null ";
            sql += " AND d.charge_type is not null ";
        }
        if(StringUtils.isNotBlank(dept)){
            sql+= " AND h.dept_code = '"+dept+"' " ;
        if (StringUtils.isNotBlank(dept)) {
            sql += " AND h.dept_code = '" + dept + "' ";
        }
        if(StringUtils.isNotBlank(nameKey)){
            sql+= " AND d.name like '%"+nameKey+"%' " ;
        if (StringUtils.isNotBlank(nameKey)) {
            sql += " AND d.name like '%" + nameKey + "%' ";
        }
        sql += " LIMIT " + (page - 1) * size + "," + size + "";
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        if(list!=null&&list.size()>0){
        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);
            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);
        logger.info("findDoctorWithMouthWork :" + sql);
        return MixEnvelop.getSuccessListWithPage(BaseHospitalRequestMapping.Prescription.api_success, list, page, size, count);
    }
    /**
     * 挂号
     *
     * @return
     */
    public net.sf.json.JSONObject registerOutPatient(String outPatientId,String doctor)throws Exception{
    public net.sf.json.JSONObject registerOutPatient(String outPatientId, String doctor) throws Exception {
        WlyyOutpatientDO outpatientDO = outpatientDao.findOne(outPatientId);
        
        
        DoctorMappingDO doctorMappingDO = doctorMappingService.findMappingCode(doctor,outpatientDO.getHospital());
        if(doctorMappingDO==null){
        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){
        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())){
            if (StringUtils.isNotBlank(registerDO.getConNo()) && StringUtils.isNotBlank(registerDO.getRegisterNo())) {
                net.sf.json.JSONObject res = new JSONObject();
                res.put("@RESULT","0");
                logger.info("已经挂号 res: " +res.toString());
                res.put("@RESULT", "0");
                logger.info("已经挂号 res: " + res.toString());
                //更新挂号流水号
                outpatientDO.setConNo(registerDO.getConNo());
@ -1249,27 +1285,27 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
                outpatientDO.setAdmDate(registerDO.getCreateTime());
                outpatientDao.save(outpatientDO);
                //调用电子病历注册
                manageType =2;
                registDianziBingli(outpatientDO,basePatientDO,manageType,registerDO.getRegisterNo(),registerDO.getConNo());
                manageType = 2;
                registDianziBingli(outpatientDO, basePatientDO, manageType, registerDO.getRegisterNo(), registerDO.getConNo());
                return res;
            }
        }
        net.sf.json.JSONObject rs = entranceService.BS10111(outpatientDO.getCardNo(),doctorMappingDO.getMappingCode(),outpatientDO.getDept(),null,outpatientDO.getWinNo(),demoFlag);
        net.sf.json.JSONObject rs = entranceService.BS10111(outpatientDO.getCardNo(), doctorMappingDO.getMappingCode(), outpatientDO.getDept(), null, outpatientDO.getWinNo(), demoFlag);
        net.sf.json.JSONObject res = rs.getJSONObject("resquest");
        logger.info("挂号结果 res: " +res.toString());
        logger.info("挂号结果 res: " + res.toString());
        String rsCode = res.getString("@RESULT");
        
        if("0".equals(rsCode)){
        if ("0".equals(rsCode)) {
            //存储挂号号
            // {"resquest":{"@RESULT":"0","@MSG":"完成","@serial_no":"47770476","@times":"28"}}
            String serialNo = (String)res.get("@serial_no");
            String serialNo = (String) res.get("@serial_no");
            outpatientDO.setRegisterNo(serialNo);
            String conNo = (String)res.get("@times");
            String conNo = (String) res.get("@times");
            outpatientDO.setConNo(conNo);
            outpatientDO.setAdmDate(new Date());
            logger.info("挂号流水 @serial_no: " +serialNo+" @times: "+conNo);
            logger.info("挂号流水 @serial_no: " + serialNo + " @times: " + conNo);
            outpatientDao.save(outpatientDO);
            //存储就诊记录
@ -1286,21 +1322,21 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
            registerDO.setRegisterNo(serialNo);
            registerDO.setConNo(conNo);
            registerDO.setCreateTime(new Date());
            registerDO.setDate(DateUtil.dateToStr(new Date(),"yyyy-MM-dd"));
            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)){
            registDianziBingli(outpatientDO, basePatientDO, manageType, registerDO.getRegisterNo(), registerDO.getConNo());
            String serialNo = (String)res.get("@serial_no");
        } else if ("-2".equals(rsCode)) {
            String serialNo = (String) res.get("@serial_no");
            outpatientDO.setRegisterNo(serialNo);
            String conNo = (String)res.get("@times");
            String conNo = (String) res.get("@times");
            outpatientDO.setConNo(conNo);
            outpatientDO.setAdmDate(new Date());
            logger.info("挂号流水 @serial_no: " +serialNo+" @times: "+conNo);
            logger.info("挂号流水 @serial_no: " + serialNo + " @times: " + conNo);
            outpatientDao.save(outpatientDO);
            //存储就诊记录
@ -1316,112 +1352,111 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
            registerDO.setRegisterNo(serialNo);
            registerDO.setConNo(conNo);
            registerDO.setCreateTime(new Date());
            registerDO.setDate(DateUtil.dateToStr(new Date(),"yyyy-MM-dd"));
            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());
            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.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 {
    
    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 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>" +
@ -1501,134 +1536,142 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
//                    "<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;
        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);
    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 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);
    public JSONArray getDrugUse(String drugNo, String pyKey) throws Exception {
        return entranceService.BS10110(drugNo, pyKey, demoFlag);
    }
    /**
     * 医院频次
     *
     * @return
     */
    public JSONArray getDrugFrequency()throws Exception{
    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);
    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);
    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);
    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);
    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);
    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){
    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());
            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);
            for (int i = 0; i < rs.size(); i++) {
                JSONObject dict = (JSONObject) rs.get(i);
                String dept = dict.getString("exec_unit");
                if(StringUtils.isNotBlank(dept)){
                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","");
                    if (StringUtils.isNotBlank(deptName)) {
                        dict.put("exec_unit_name", deptName);
                    } else {
                        dict.put("exec_unit_name", "");
                    }
                }
            }
@ -1638,16 +1681,17 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
    /**
     * 下诊断,线上开方
     *
     * @param outPatientId
     * @param advice
     * @param type 1带处方,2不带处方
     * @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{
    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();
        Map<String, Object> result = new HashedMap();
        //获取门诊记录
        WlyyOutpatientDO outpatientDO = outpatientDao.findOne(outPatientId);
@ -1658,9 +1702,9 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
        //创建处方记录
        List<WlyyPrescriptionDO> prescriptionDOs = prescriptionDao.findByOutpatientId(outPatientId);
        WlyyPrescriptionDO prescriptionDO = null;
        if(prescriptionDOs!=null&&prescriptionDOs.size()>0){
        if (prescriptionDOs != null && prescriptionDOs.size() > 0) {
            prescriptionDO = prescriptionDOs.get(0);
        }else{
        } else {
            prescriptionDO = new WlyyPrescriptionDO();
            prescriptionDO.setOutpatientId(outPatientId);
        }
@ -1675,44 +1719,44 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
        //========================处方操作结束=============================================================
        //加入处方状态变更流水日志
        prescriptionLogService.addPrescriptionLog(prescription.getId(),10,2,outpatientDO.getDoctor(),outpatientDO.getDoctorName(),"",new Date());
        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){
        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()+",";
        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);
        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)){
        if ("1".equals(type)) {
            //doctor转换为his医生
            DoctorMappingDO doctorMappingDO = doctorMappingService.findMappingCode(outpatientDO.getDoctor(),outpatientDO.getHospital());
            if(doctorMappingDO==null){
            DoctorMappingDO doctorMappingDO = doctorMappingService.findMappingCode(outpatientDO.getDoctor(), outpatientDO.getHospital());
            if (doctorMappingDO == null) {
                throw new RuntimeException("未找到医生映射信息");
            }
@ -1722,22 +1766,22 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
            //===================药品操作======================================================
            // 删除原有药品信息
            List<WlyyPrescriptionInfoDO> oldInfos = prescriptionInfoDao.findByPrescriptionId(prescription.getId());
            if(oldInfos!=null&&oldInfos.size()>0){
            if (oldInfos != null && oldInfos.size() > 0) {
                prescriptionInfoDao.delete(oldInfos);
            }
            //存储药品,构建his开方入参
            if(StringUtils.isNotBlank(infoJsons)){
            if (StringUtils.isNotBlank(infoJsons)) {
                //药品
                List<WlyyPrescriptionInfoDO> infoDOs = (List<WlyyPrescriptionInfoDO>) com.alibaba.fastjson.JSONArray.parseArray(infoJsons, WlyyPrescriptionInfoDO.class);
                for(WlyyPrescriptionInfoDO info:infoDOs){
                for (WlyyPrescriptionInfoDO info : infoDOs) {
                    info.setDel(1);
                    info.setPrescriptionId(prescription.getId());
                    //设置his药品查询条件
                    setInfoJsonParam(jsonData,doctorMappingDO,outpatientDO,prescriptionDO,info,Icd10);
                    setInfoJsonParam(jsonData, doctorMappingDO, outpatientDO, prescriptionDO, info, Icd10);
                }
                //保存药品信息
                prescriptionInfoDao.save(infoDOs);
@ -1752,20 +1796,20 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
            //存储检查检验,构建his开方入参
            //删除之前检查检验
            List<WlyyInspectionDO> inspectionDels = wlyyInspectionDao.findByOutpatientId(outPatientId);
            if(inspectionDels!=null&&inspectionDels.size()>0){
            if (inspectionDels != null && inspectionDels.size() > 0) {
                wlyyInspectionDao.delete(inspectionDels);
            }
            if(StringUtils.isNotBlank(inspectionJson)){
            if (StringUtils.isNotBlank(inspectionJson)) {
                List<WlyyInspectionDO> inspections = (List<WlyyInspectionDO>) com.alibaba.fastjson.JSONArray.parseArray(inspectionJson, WlyyInspectionDO.class);
                for(WlyyInspectionDO ins:inspections){
                for (WlyyInspectionDO ins : inspections) {
                    ins.setCreateTime(new Date());
                    ins.setPrescriptionId(prescription.getId());
                    ins.setOutpatientId(outPatientId);
                    //设置his药品查询条件
                    setInspectionParam(jsonData,doctorMappingDO,outpatientDO,prescriptionDO,ins,Icd10);
                    setInspectionParam(jsonData, doctorMappingDO, outpatientDO, prescriptionDO, ins, Icd10);
                }
                //保存检查检验。
                wlyyInspectionDao.save(inspections);
@ -1781,14 +1825,14 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
            prescriptionDao.save(prescription);
            //上传his开方
            return sendHisDiagnosis(jsonData,outpatientDO,prescription);
            return sendHisDiagnosis(jsonData, outpatientDO, prescription);
        }else{
        } else {
            outpatientDO.setStatus("2");
            outpatientDao.save(outpatientDO);
            result.put("code",1);
            result.put("mes","诊断完成");
            result.put("code", 1);
            result.put("mes", "诊断完成");
            return result;
        }
@ -1796,57 +1840,60 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
    /**
     * 计算药品费用
     *
     * @param infoDOs
     * @return
     */
    public Double getInfoFee(List<WlyyPrescriptionInfoDO> infoDOs){
    public Double getInfoFee(List<WlyyPrescriptionInfoDO> infoDOs) {
        Double fee = 0D;
        try {
            if(infoDOs!=null&&infoDOs.size()>0){
                for(WlyyPrescriptionInfoDO info:infoDOs){
            if (infoDOs != null && infoDOs.size() > 0) {
                for (WlyyPrescriptionInfoDO info : infoDOs) {
                    Integer quantity = Integer.parseInt(info.getQuantity());
                    fee += info.getPackRetprice()*quantity;
                    fee += info.getPackRetprice() * quantity;
                }
            }
        }catch (Exception e){
            logger.error("getInfoFee:"+e.toString());
        } catch (Exception e) {
            logger.error("getInfoFee:" + e.toString());
        }
        return fee;
    }
    /**
     * 计算检查检验费用
     *
     * @param inspections
     * @return
     */
    public Double getInsFee(List<WlyyInspectionDO> inspections){
    public Double getInsFee(List<WlyyInspectionDO> inspections) {
        Double fee = 0D;
        try {
            if(inspections!=null&&inspections.size()>0){
                for(WlyyInspectionDO ins:inspections){
            if (inspections != null && inspections.size() > 0) {
                for (WlyyInspectionDO ins : inspections) {
                    Double chargeAmount = Double.parseDouble(ins.getChargeAmount());
                    fee += chargeAmount*ins.getQuantity();
                    fee += chargeAmount * ins.getQuantity();
                }
            }
        }catch (Exception e){
            logger.error("getInsFee:"+e.toString());
        } catch (Exception e) {
            logger.error("getInsFee:" + e.toString());
        }
        return fee;
    }
    /**
     * 计算挂号费用
     *
     * @param doctor
     * @return
     */
    public Double getChargeFee(String doctor){
    public Double getChargeFee(String doctor) {
        Double fee = 0D;
        try{
        try {
            BaseDoctorDO doctorDO = baseDoctorDao.findById(doctor);
            WlyyChargeDictDO chargeDictDO = wlyyChargeDictDao.findByChargeTypeAndDeptTypeCode(doctorDO.getChargeType(),"6");
            WlyyChargeDictDO chargeDictDO = wlyyChargeDictDao.findByChargeTypeAndDeptTypeCode(doctorDO.getChargeType(), "6");
            return chargeDictDO.getReqFee();
        }catch (Exception e){
            logger.error("getChargeFee:"+e.toString());
        } catch (Exception e) {
            logger.error("getChargeFee:" + e.toString());
        }
        return fee;
@ -1854,18 +1901,19 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
    /**
     * 上传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();
    public Map<String, Object> sendHisDiagnosis(com.alibaba.fastjson.JSONArray jsonData, WlyyOutpatientDO outpatientDO, WlyyPrescriptionDO prescription) throws Exception {
        Map<String, Object> result = new HashedMap();
        //调用his开方接口
        net.sf.json.JSONObject jsonObject = entranceService.BS10112(jsonData.toJSONString(),demoFlag);
        net.sf.json.JSONObject jsonObject = entranceService.BS10112(jsonData.toJSONString(), demoFlag);
        //如果无法解析his系统报文,his系统报错
        if(jsonObject==null){
        if (jsonObject == null) {
            //记录http日志
            WlyyHttpLogDO log = new WlyyHttpLogDO();
            log.setCode("makeDiagnosis");
@ -1882,15 +1930,15 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
            prescription.setStatus(13);
            prescriptionDao.save(prescription);
            //记录开发失败日志
            prescriptionLogService.addPrescriptionLog(prescription.getId(),13,2,outpatientDO.getDoctor(),outpatientDO.getDoctorName(),"",new Date());
            prescriptionLogService.addPrescriptionLog(prescription.getId(), 13, 2, outpatientDO.getDoctor(), outpatientDO.getDoctorName(), "", new Date());
            //开方失败返回值
            result.put("code",-1);
            result.put("mes","开方失败,his系统异常");
            result.put("code", -1);
            result.put("mes", "开方失败,his系统异常");
            return result;
        }
        logger.info("调用his开方接口: "+jsonObject.toString());
        logger.info("调用his开方接口: " + jsonObject.toString());
        //判断返回结果
        String rs = jsonObject.getString("@RESULT");
        //保存日志
@ -1905,7 +1953,7 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
        log.setCreateTime(new Date());
        wlyyHttpLogDao.save(log);
        if("0".equals(rs)){
        if ("0".equals(rs)) {
            String admNo = jsonObject.getString("@ADM_NO");
            String realOrder = jsonObject.getString("@real_order");
@ -1915,19 +1963,19 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
            outpatientDO.setAdmNo(admNo);
            outpatientDao.save(outpatientDO);
            result.put("code",1);
            result.put("mes","开方提交成功");
            result.put("code", 1);
            result.put("mes", "开方提交成功");
            return result;
        }else{
        } else {
            //开方失败
            result.put("code",-1);
            result.put("mes",jsonObject.getString("@MSG"));
            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());
            prescriptionLogService.addPrescriptionLog(prescription.getId(), 13, 2, outpatientDO.getDoctor(), outpatientDO.getDoctorName(), "", new Date());
            return result;
        }
@ -1935,132 +1983,135 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
    /**
     * 设置检查检验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){
    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());
        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("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("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检验检查
        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;//固定液
         *  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());
        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);
        setIcd10(json, Icd10);
        jsonData.add(json);
        logger.info("json:" +json.toString());
        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){
    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{
        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("days", StringUtils.isNotBlank(info.getPostCount()) ? info.getPostCount() : "1");
        }
        json.put("frequency",info.getFrequency());
        json.put("comm",info.getComm());
        json.put("frequency", info.getFrequency());
        json.put("comm", info.getComm());
        //设置诊断
        setIcd10(json,Icd10);
        setIcd10(json, Icd10);
        jsonData.add(json);
        logger.info("json:" +json.toString());
        logger.info("json:" + json.toString());
    }
    public void setIcd10(com.alibaba.fastjson.JSONObject json,String Icd10){
    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]);
        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
@ -2070,8 +2121,8 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
     * @param size
     * @return
     */
    public MixEnvelop findExpressageList(String status,String oneselfPickupFlg,String nameKey,String startTime,String endTime,Integer page,Integer size){
        String totalSql="SELECT " +
    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 " +
@ -2079,20 +2130,20 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
                " 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(status)) {
            totalSql += " AND p.status in(" + status + ")";
        }
        if(StringUtils.isNotBlank(oneselfPickupFlg)){
            totalSql+=" AND e.oneself_pickup_flg ="+oneselfPickupFlg;
        if (StringUtils.isNotBlank(oneselfPickupFlg)) {
            totalSql += " AND e.oneself_pickup_flg =" + oneselfPickupFlg;
        }
        if(StringUtils.isNotBlank(nameKey)){
            totalSql+=" AND e.name like '%"+nameKey+"%'";
        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(startTime)) {
            totalSql += " AND e.create_time >='" + startTime + " 00:00:00'";
        }
        if(StringUtils.isNotBlank(endTime)){
            totalSql+=" AND e.create_time <='"+endTime+" 23:59:59'";
        if (StringUtils.isNotBlank(endTime)) {
            totalSql += " AND e.create_time <='" + endTime + " 23:59:59'";
        }
        List<Map<String, Object>> rstotal = jdbcTemplate.queryForList(totalSql);
@ -2100,7 +2151,7 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
        if (rstotal != null && rstotal.size() > 0) {
            count = (Long) rstotal.get(0).get("total");
        }
        String sql ="SELECT " +
        String sql = "SELECT " +
                " e.create_time AS createTime, " +
                " e.`name`, " +
                " e.oneself_pickup_flg AS oneselfPickupFlg, " +
@ -2115,44 +2166,44 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
                " 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(status)) {
            sql += " AND p.status in(" + status + ")";
        }
        if(StringUtils.isNotBlank(oneselfPickupFlg)){
            sql+=" AND e.oneself_pickup_flg ="+oneselfPickupFlg;
        if (StringUtils.isNotBlank(oneselfPickupFlg)) {
            sql += " AND e.oneself_pickup_flg =" + oneselfPickupFlg;
        }
        if(StringUtils.isNotBlank(nameKey)){
            sql+=" AND e.name like '%"+nameKey+"%'";
        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(startTime)) {
            sql += " AND e.create_time >='" + startTime + " 00:00:00'";
        }
        if(StringUtils.isNotBlank(endTime)){
            sql+=" AND e.create_time <='"+endTime+" 23:59:59'";
        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);
        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);
    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{
    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);
            ws = wwb.createSheet("sheet", 1);
            String[] header = {"订单日期","收货人","诊断结果","配送方式", "订单状态"};
            String[] header = {"订单日期", "收货人", "诊断结果", "配送方式", "订单状态"};
            int k = 0;
            for (String h : header) {
                addCell(ws, 0, k, h);//表名,行,列,header
@ -2160,12 +2211,12 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
            }
            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")),"");
            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();
@ -2178,45 +2229,44 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
    }
    /**
     *
     * @return
     */
    public String getOneselfPickupFlgString(Integer oneselfPickupFlg){
        if(1 == oneselfPickupFlg){
    public String getOneselfPickupFlgString(Integer oneselfPickupFlg) {
        if (1 == oneselfPickupFlg) {
            return "自取";
        }else if(0 == oneselfPickupFlg){
        } else if (0 == oneselfPickupFlg) {
            return "快递";
        }else{
        } else {
            return "其他";
        }
    }
    /**
     *
     * @param status
     * @return
     */
    public String getStatusName(Integer status){
        if(31==status){
    public String getStatusName(Integer status) {
        if (31 == status) {
            return "待配送";
        }else if(32==status){
        } else if (32 == status) {
            return "配送中";
        }else if(100==status){
        } else if (100 == status) {
            return "已完成";
        }else{
        } else {
            return "其他";
        }
    }
    //添加单元格内容
    public void addCell(WritableSheet ws, int row, int column,  String data) throws WriteException {
        Label label = new Label(column ,row, data);
    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)){
        Label label = new Label(column, row, data);
        if (!org.springframework.util.StringUtils.isEmpty(memo)) {
            WritableCellFeatures cellFeatures = new WritableCellFeatures();
            cellFeatures.setComment(memo);
            label.setCellFeatures(cellFeatures);
@ -2224,14 +2274,14 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
        ws.addCell(label);
    }
    public List<WlyyChargeDictVO> findByDeptTypeCode(String deptTypeCode){
    public List<WlyyChargeDictVO> findByDeptTypeCode(String deptTypeCode) {
        List<WlyyChargeDictDO> dictDOs = wlyyChargeDictDao.findByDeptTypeCode(deptTypeCode);
        List<WlyyChargeDictVO> dictVOs = new ArrayList<>();
        return convertToModels(dictDOs,dictVOs,WlyyChargeDictVO.class);
        return convertToModels(dictDOs, dictVOs, WlyyChargeDictVO.class);
    }
    public List<WlyyDoctorWorkTimeVO> findDoctorWorkTime(String doctor){
    public List<WlyyDoctorWorkTimeVO> findDoctorWorkTime(String doctor) {
        //获取医生排班规则
        List<WlyyHospitalSysDictDO> list = sysDictDao.findByDictName("Scheduling");
@ -2245,93 +2295,93 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
        ecTime.setTime(new Date());
        //设置几天号源,及最后天号源的开放时间
        int days =Integer.parseInt(findHospitalSysDictValue(list,"OpenDays"));
        String closeTime = findHospitalSysDictValue(list,"CloseTime");
        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))){
        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);
            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);
            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());
        List<WlyyDoctorWorkTimeDO> times = doctorWorkTimeDao.findDoctorWorkTime(doctor, scTime.getTime(), ecTime.getTime());
        workTimeFilter(list,times);
        workTimeFilter(list, times);
        List<WlyyDoctorWorkTimeVO> timeVOs = new ArrayList<>();
        convertToModels(times,timeVOs,WlyyDoctorWorkTimeVO.class);
        convertToModels(times, timeVOs, WlyyDoctorWorkTimeVO.class);
        if(timeVOs!=null&&timeVOs.size()>0){
            for(WlyyDoctorWorkTimeVO timeVO : timeVOs){
        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){
    public List<WlyyDoctorWorkTimeDO> workTimeFilter(List<WlyyHospitalSysDictDO> sys, List<WlyyDoctorWorkTimeDO> times) {
        if(times!=null&&times.size()>0){
        if (times != null && times.size() > 0) {
            //上午号源开放的最早天数
            int AMCloseDays =Integer.parseInt(findHospitalSysDictValue(sys,"AMCloseDays"));
            int AMCloseDays = Integer.parseInt(findHospitalSysDictValue(sys, "AMCloseDays"));
            //每一天上午的最早预约的过号时间
            String AMCloseTime = findHospitalSysDictValue(sys,"AMCloseTime");
            String AMCloseTime = findHospitalSysDictValue(sys, "AMCloseTime");
            //下午号源开放的最早天数
            int PMCloseDays =Integer.parseInt(findHospitalSysDictValue(sys,"PMCloseDays"));
            int PMCloseDays = Integer.parseInt(findHospitalSysDictValue(sys, "PMCloseDays"));
            //每一天下午的最早预约的过号时间
            String PMCloseTime = findHospitalSysDictValue(sys,"PMCloseTime");
            String PMCloseTime = findHospitalSysDictValue(sys, "PMCloseTime");
            Iterator it = times.iterator();
            while (it.hasNext()){
            while (it.hasNext()) {
                //设置上午过号时间
                Calendar scAMTime = Calendar.getInstance();
                scAMTime.setTime(new Date());
                scAMTime.add(Calendar.DAY_OF_MONTH,AMCloseDays);
                scAMTime.add(Calendar.DAY_OF_MONTH, AMCloseDays);
                //设置下午午过号时间
                Calendar scPMTime = Calendar.getInstance();
                scPMTime.setTime(new Date());
                scPMTime.add(Calendar.DAY_OF_MONTH,PMCloseDays);
                scPMTime.add(Calendar.DAY_OF_MONTH, PMCloseDays);
                WlyyDoctorWorkTimeDO time = (WlyyDoctorWorkTimeDO)it.next();
                WlyyDoctorWorkTimeDO time = (WlyyDoctorWorkTimeDO) it.next();
                Boolean filter = true;
                //1.【上午的排班中】 且 【排班结束时间】如果在【开放时间】前,则移除
                if(filter&&"1".equals(time.getTimeType())&&time.getEndTime().before(scAMTime.getTime())){
                if (filter && "1".equals(time.getTimeType()) && time.getEndTime().before(scAMTime.getTime())) {
                    it.remove();
                    filter=false;
                    filter = false;
                }
                //2.【下午午的排班中】 且 【排班结束时间】如果在【开放时间】前,则移除该排班
                if(filter&&"2".equals(time.getTimeType())&&time.getEndTime().before(scPMTime.getTime())){
                if (filter && "2".equals(time.getTimeType()) && time.getEndTime().before(scPMTime.getTime())) {
                    it.remove();
                    filter=false;
                    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 (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())){
                    if (time.getEndTime().before(scAMTime.getTime())) {
                        it.remove();
                        filter=false;
                        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 (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())){
                    if (time.getEndTime().before(scPMTime.getTime())) {
                        it.remove();
                    }
                }
@ -2341,11 +2391,11 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
    }
    public String findHospitalSysDictValue(List<WlyyHospitalSysDictDO> list,String dictCode){
    public String findHospitalSysDictValue(List<WlyyHospitalSysDictDO> list, String dictCode) {
        if(list!=null&&list.size()>0){
            for(WlyyHospitalSysDictDO sysDictDO : list){
                if(dictCode.equals(sysDictDO.getDictCode())){
        if (list != null && list.size() > 0) {
            for (WlyyHospitalSysDictDO sysDictDO : list) {
                if (dictCode.equals(sysDictDO.getDictCode())) {
                    return sysDictDO.getDictValue();
                }
            }
@ -2355,17 +2405,80 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
    /**
     * 获取卡信息
     *
     * @param cardNo
     * @param demoFlag
     * @return
     * @throws Exception
     */
    public net.sf.json.JSONObject getCardInfo(String cardNo, boolean demoFlag) throws Exception {
        return entranceService.qutpatientBalance(cardNo,demoFlag);
        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);
//            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&&registerTimeDOs.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;
    }
    @Deprecated
    public List<Map<String,Object>> findWorkTimeInfoOld(String id){
        WlyyDoctorWorkTimeDO timeDO = doctorWorkTimeDao.findOne(id);
        Calendar sc = Calendar.getInstance();
        sc.setTime(timeDO.getStartTime());
@ -3409,6 +3522,7 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
                    t.setEndTime(time.getEndTime());
                    t.setDate(time.getDate());
                    t.setTimeInterval(time.getTimeInterval());
                    t.setSourceNumber(time.getSourceNumber());
                    rs.add(t);
                }
                logger.info(rs.size()+"");

+ 71 - 0
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/WorkTimeService.java

@ -0,0 +1,71 @@
package com.yihu.jw.hospital.prescription.service;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.jw.entity.hospital.prescription.WlyyHospitalWorkRuleDO;
import com.yihu.jw.hospital.prescription.dao.WlyyHospitalWorkRuleDao;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
 * Created by Trick on 2020/3/24.
 */
@Service
@Transactional
public class WorkTimeService {
    private static final Logger logger = LoggerFactory.getLogger(WorkTimeService.class);
    @Autowired
    private WlyyHospitalWorkRuleDao wlyyHospitalWorkRuleDao;
    @Autowired
    private ObjectMapper objectMapper;
    /**
     * 保存排班规则
     * @param workTimeRuleJson
     * @return
     * @throws Exception
     */
    public WlyyHospitalWorkRuleDO saveWorkTimeRule(String workTimeRuleJson)throws Exception{
        WlyyHospitalWorkRuleDO ruleDO = objectMapper.readValue(workTimeRuleJson,WlyyHospitalWorkRuleDO.class);
        List<WlyyHospitalWorkRuleDO> orgRules = wlyyHospitalWorkRuleDao.findByHospital(ruleDO.getHospital());
        if(orgRules!=null&&orgRules.size()>0){
            wlyyHospitalWorkRuleDao.delete(orgRules);
        }
        wlyyHospitalWorkRuleDao.save(ruleDO);
        return ruleDO;
    }
    /**
     * 获取医院排班规则
     * @param hospital
     * @return
     */
    public WlyyHospitalWorkRuleDO findWorkTimeRule(String hospital){
        List<WlyyHospitalWorkRuleDO> orgRules = wlyyHospitalWorkRuleDao.findByHospital(hospital);
        return orgRules.get(0);
    }
//    public static void main(String ag[]){
//
//        Date start = DateUtil.stringToDate("2020-03-24 08:00:00","yyyy-MM-dd HH:mm:ss");
//
//        Date end = DateUtil.stringToDate("2020-03-24 12:00:00","yyyy-MM-dd HH:mm:ss");
//
//        Long total =end.getTime()-start.getTime();
//
//        Long jg = total/100;
//
//        start.setTime(start.getTime()+jg);
//
//        System.out.println(DateUtil.dateToStr(start,"yyyy-MM-dd HH:mm:ss"));
//    }
}

+ 2 - 2
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/entrance/EntranceService.java

@ -1319,8 +1319,8 @@ public class EntranceService {
//        Object errorCode = ((net.sf.json.JSONObject) json).get("error_code");
        //由于新建档的居民没有银医通,数据没办法同步。调用接口,暂时不判断返回结果,由诊间支付统一推送消息让居民支付
        JSON json2 = xmlSerializer.read(((net.sf.json.JSONObject) json).get("response").toString());
        System.out.println("银医通下载response:" + json2.toString(1));
//        JSON json2 = xmlSerializer.read(((net.sf.json.JSONObject) json).get("response").toString());
//        System.out.println("银医通下载response:" + json2.toString(1));
        jsonObject.element("code", "1");
        jsonObject.element("obj", json);
//        if ("ok".equals(errorCode)) {

+ 528 - 1
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/entrance/XzzxEntranceService.java

@ -1,8 +1,11 @@
package com.yihu.jw.hospital.prescription.service.entrance;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.entity.hospital.consult.WlyyHospitalSysDictDO;
import com.yihu.jw.hospital.dict.WlyyHospitalSysDictDao;
import com.yihu.jw.utils.WebserviceUtil;
import net.sf.json.xml.XMLSerializer;
import org.apache.commons.collections.map.HashedMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -64,8 +67,532 @@ public class XzzxEntranceService {
        params.put("msgHeader",msgHeader);
        params.put("msgBody",msgBody);
        logger.info("getDeptInfo params:"+params.toString());
        return getXzzxWebServiceInfo("CallInterface",params);
        String xml = getXzzxWebServiceInfo("CallInterface",params);
        return "";
    }
    public static void main(String ag[]){
        String xml ="<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<root>" +
                "    <returnContents>" +
                "        <returnContent>" +
                "            <code>20100</code>" +
                "            <name>后勤部</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>20200</code>" +
                "            <name>消毒中转站</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>30100</code>" +
                "            <name>心内科门诊</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>30200</code>" +
                "            <name>心外科门诊</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>30300</code>" +
                "            <name>客户服务部</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>30400</code>" +
                "            <name>超声科门诊</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>3140000</code>" +
                "            <name>计算机中心</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>31500</code>" +
                "            <name>人事部</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>31600</code>" +
                "            <name>护理部</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>31700</code>" +
                "            <name>医保办</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>31800</code>" +
                "            <name>财务科</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>3180001</code>" +
                "            <name>门诊收费处</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>3180002</code>" +
                "            <name>住院收费处</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>31900</code>" +
                "            <name>医务科</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>32000</code>" +
                "            <name>院长室</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>32100</code>" +
                "            <name>中心办公室</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>32200</code>" +
                "            <name>院感科</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>32300</code>" +
                "            <name>保障保卫部</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>32400</code>" +
                "            <name>全院</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>32500</code>" +
                "            <name>综合办公室</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>32600</code>" +
                "            <name>科教部</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>4010001</code>" +
                "            <name>心内一区</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>4010002</code>" +
                "            <name>心内二区</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>4010003</code>" +
                "            <name>CCU</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>4010004</code>" +
                "            <name>心内三区</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>4010005</code>" +
                "            <name>心内四区</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>4010006</code>" +
                "            <name>特需病区</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>40200</code>" +
                "            <name>心内三区病房</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>4020001</code>" +
                "            <name>心外病区</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>4020002</code>" +
                "            <name>ICU</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>40300</code>" +
                "            <name>心外手术室</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>4030001</code>" +
                "            <name>小儿心脏科/综合科</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>40400</code>" +
                "            <name>心内导管室</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>4040001</code>" +
                "            <name>急诊科</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>40500</code>" +
                "            <name>CCU病房</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>40600</code>" +
                "            <name>ICU病房</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>40700</code>" +
                "            <name>心内一区病房</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>40800</code>" +
                "            <name>心内二区病房</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>40900</code>" +
                "            <name>心外病房</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>41000</code>" +
                "            <name>胸痛中心</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>41100</code>" +
                "            <name>起搏器门诊</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>41200</code>" +
                "            <name>麻醉科</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>41300</code>" +
                "            <name>急诊门诊</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>41400</code>" +
                "            <name>心内四区病房</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>41500</code>" +
                "            <name>小儿心脏科/综合科病房</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>41600</code>" +
                "            <name>急诊科病房</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>41700</code>" +
                "            <name>心脏康复门诊</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>41800</code>" +
                "            <name>先天性心脏病门诊</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>41900</code>" +
                "            <name>心衰专病门诊</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>42000</code>" +
                "            <name>特需病房</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>42100</code>" +
                "            <name>体检门诊</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>50100</code>" +
                "            <name>药房</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>50200</code>" +
                "            <name>药库</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>50300</code>" +
                "            <name>静配药房</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>60100</code>" +
                "            <name>影像科</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>60200</code>" +
                "            <name>检验科</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>60300</code>" +
                "            <name>心脏彩超室</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>60400</code>" +
                "            <name>心功能室(心脏中心)</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>60500</code>" +
                "            <name>输血科</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>60600</code>" +
                "            <name>内窥镜室</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>60700</code>" +
                "            <name>肺功能室</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>60800</code>" +
                "            <name>血透室</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>60900</code>" +
                "            <name>检验科(总院)</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>61000</code>" +
                "            <name>高压氧室</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>61100</code>" +
                "            <name>脑电图室</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>61200</code>" +
                "            <name>核医学科</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>61300</code>" +
                "            <name>放射科</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>61400</code>" +
                "            <name>CT室</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>61500</code>" +
                "            <name>核磁共振科</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>61600</code>" +
                "            <name>病理科</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>61700</code>" +
                "            <name>心功能室(总院)</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>61800</code>" +
                "            <name>B超室</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>61900</code>" +
                "            <name>药学部(总院)</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>62000</code>" +
                "            <name>急诊ICU(总院)</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>62100</code>" +
                "            <name>中心ICU(总院)</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>62200</code>" +
                "            <name>心电图室</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>62300</code>" +
                "            <name>心脏彩超室(心脏中心)</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>62400</code>" +
                "            <name>检验部</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>62500</code>" +
                "            <name>体检部</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>62600</code>" +
                "            <name>心功能室(新)</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>62700</code>" +
                "            <name>心脏彩超室(新)</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>62800</code>" +
                "            <name>输血科(新)</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>62900</code>" +
                "            <name>院外诊疗</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>63000</code>" +
                "            <name>血透(新)</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>63100</code>" +
                "            <name>放射科(新)</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>63200</code>" +
                "            <name>运动心肺室(新)</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>63300</code>" +
                "            <name>核医学科(新)</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>63400</code>" +
                "            <name>CT(新)</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>63500</code>" +
                "            <name>MR(新)</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>70100</code>" +
                "            <name>病案室</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>70200</code>" +
                "            <name>离职人员</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>80100</code>" +
                "            <name>心内实验室</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>80200</code>" +
                "            <name>临床试验组</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>90100</code>" +
                "            <name>设备科仓库</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>90200</code>" +
                "            <name>总务仓库</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>90300</code>" +
                "            <name>高值仓库</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>90400</code>" +
                "            <name>科研仓库</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>90500</code>" +
                "            <name>软件仓库</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>90600</code>" +
                "            <name>五金仓库</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>90700</code>" +
                "            <name>信息科仓库</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>90800</code>" +
                "            <name>报废仓库</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "        <returnContent>" +
                "            <code>90900</code>" +
                "            <name>报损仓库</name>" +
                "            <consultDeptFlag/>" +
                "        </returnContent>" +
                "    </returnContents>" +
                "</root>";
        XMLSerializer xmlSerializer = new XMLSerializer();
        String json = xmlSerializer.read(xml).toString();
        JSONObject jsonObject = JSON.parseObject(json);
    }
}

+ 9 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/hospital/doctor/WlyyDoctorWorkTimeDO.java

@ -29,6 +29,7 @@ public class WlyyDoctorWorkTimeDO extends UuidIdentityEntity {
    private Date endTime;//结束时间',
    private String date;//排班日期',
    private Integer timeInterval;//号源间隔
    private Integer sourceNumber;//号源数目
    private Date createTime;//创建时间',
    public String getDoctor() {
@ -162,4 +163,12 @@ public class WlyyDoctorWorkTimeDO extends UuidIdentityEntity {
    public void setTimeInterval(Integer timeInterval) {
        this.timeInterval = timeInterval;
    }
    public Integer getSourceNumber() {
        return sourceNumber;
    }
    public void setSourceNumber(Integer sourceNumber) {
        this.sourceNumber = sourceNumber;
    }
}

+ 141 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/hospital/prescription/WlyyHospitalWorkRuleDO.java

@ -0,0 +1,141 @@
package com.yihu.jw.entity.hospital.prescription;
import com.yihu.jw.entity.UuidIdentityEntity;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
 * Created by Trick on 2020/3/24.
 */
@Entity
@Table(name = "wlyy_hospital_work_rule")
public class WlyyHospitalWorkRuleDO extends UuidIdentityEntity {
    private String hospital;//医院编码',
    private String openVideo;//1.开放视频预约 ; 0,不开放视频预约',
    private String onlyDuty;//1.仅在班时接受问诊 ; 0 随时可以接受问诊',
    private Integer maxDay;//开放几天号源天数',
    private String maxDayOpenTime;//最后一天号源开放时间',
    private String swStartTime;//上午开始时间',
    private String swEndTime;//上午结束时间',
    private Integer swSourceNum;//上午号源数目',
    private String xwStartTime;//下午开始时间',
    private String xwEndTime;//下午结束时间',
    private Integer xwSourceNum;//下午数目',
    private String wsStartTime;//晚上开始时间',
    private String wsEndTime;//网上结束时间',
    private Integer wsSourceNum;//晚上号源数',
    public String getHospital() {
        return hospital;
    }
    public void setHospital(String hospital) {
        this.hospital = hospital;
    }
    public String getOpenVideo() {
        return openVideo;
    }
    public void setOpenVideo(String openVideo) {
        this.openVideo = openVideo;
    }
    public String getOnlyDuty() {
        return onlyDuty;
    }
    public void setOnlyDuty(String onlyDuty) {
        this.onlyDuty = onlyDuty;
    }
    public Integer getMaxDay() {
        return maxDay;
    }
    public void setMaxDay(Integer maxDay) {
        this.maxDay = maxDay;
    }
    public String getMaxDayOpenTime() {
        return maxDayOpenTime;
    }
    public void setMaxDayOpenTime(String maxDayOpenTime) {
        this.maxDayOpenTime = maxDayOpenTime;
    }
    public String getSwStartTime() {
        return swStartTime;
    }
    public void setSwStartTime(String swStartTime) {
        this.swStartTime = swStartTime;
    }
    public String getSwEndTime() {
        return swEndTime;
    }
    public void setSwEndTime(String swEndTime) {
        this.swEndTime = swEndTime;
    }
    public Integer getSwSourceNum() {
        return swSourceNum;
    }
    public void setSwSourceNum(Integer swSourceNum) {
        this.swSourceNum = swSourceNum;
    }
    public String getXwStartTime() {
        return xwStartTime;
    }
    public void setXwStartTime(String xwStartTime) {
        this.xwStartTime = xwStartTime;
    }
    public String getXwEndTime() {
        return xwEndTime;
    }
    public void setXwEndTime(String xwEndTime) {
        this.xwEndTime = xwEndTime;
    }
    public Integer getXwSourceNum() {
        return xwSourceNum;
    }
    public void setXwSourceNum(Integer xwSourceNum) {
        this.xwSourceNum = xwSourceNum;
    }
    public String getWsStartTime() {
        return wsStartTime;
    }
    public void setWsStartTime(String wsStartTime) {
        this.wsStartTime = wsStartTime;
    }
    public String getWsEndTime() {
        return wsEndTime;
    }
    public void setWsEndTime(String wsEndTime) {
        this.wsEndTime = wsEndTime;
    }
    public Integer getWsSourceNum() {
        return wsSourceNum;
    }
    public void setWsSourceNum(Integer wsSourceNum) {
        this.wsSourceNum = wsSourceNum;
    }
}

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

@ -359,6 +359,9 @@ public class BaseHospitalRequestMapping {
        public static final String findDeptWithDoctorWorkTime = "/findDeptWithDoctorWorkTime";
        public static final String findWorkTimeRule = "/findWorkTimeRule";
        public static final String saveWorkTimeRule = "/saveWorkTimeRule";
    }

+ 10 - 0
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/hospital/doctor/WlyyDoctorWorkTimeVO.java

@ -43,6 +43,8 @@ public class WlyyDoctorWorkTimeVO {
    private String date;//排班日期',
    @ApiModelProperty(value = "号源间隔", example = "模块1")
    private Integer timeInterval;//号源间隔
    @ApiModelProperty(value = "号源数目", example = "模块1")
    private Integer sourceNumber;//号源间隔
    @ApiModelProperty(value = "创建时间", example = "模块1")
    private Date createTime;//创建时间',
    @ApiModelProperty(value = "当前号源数目", example = "模块1")
@ -191,4 +193,12 @@ public class WlyyDoctorWorkTimeVO {
    public void setCount(Integer count) {
        this.count = count;
    }
    public Integer getSourceNumber() {
        return sourceNumber;
    }
    public void setSourceNumber(Integer sourceNumber) {
        this.sourceNumber = sourceNumber;
    }
}

+ 21 - 14
server/svr-authentication/src/main/java/com/yihu/jw/security/service/TEST.java

@ -1,16 +1,18 @@
//package com.yihu.jw.security.service;
//
//import com.alibaba.fastjson.JSONObject;
//import com.yihu.jw.security.utils.RSAEncrypt;
//
//import java.net.URLDecoder;
//import java.net.URLEncoder;
//
///**
// * Created by Trick on 2020/3/19.
// */
//public class TEST {
//
package com.yihu.jw.security.service;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.security.utils.DateUtil;
import com.yihu.jw.security.utils.RSAEncrypt;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Date;
/**
 * Created by Trick on 2020/3/19.
 */
public class TEST {
//    public static void main(String ag[])throws Exception{
//
//        String key ="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCBW5nRkb1RsLGd47rjrI33X0ZHssXV5qjH/S/18SmAHf2ek61bv+Ht23J1FUNcmda7iQesS8Uqn+WoC/jK/ecicp7jKRdGIIyMX+GIEJVlLJHXVZJnJO0QqU+l9BBk1xJBODXBvnDIwN8DmLsXrMBhDbVgPmHi8Vn+PsC0F6llBQIDAQAB";
@ -42,4 +44,9 @@
//        String str = RSAEncrypt.decrypt(decode,privateKey);
//        System.out.println("decrypt : "+str);
//    }
//}
//    public static void main(String ag[]){
//        System.out.println(DateUtil.dateToStr(new Date(),"yyyy-MM"));
//    }
}

+ 24 - 1
svr/svr-internet-hospital-entrance/src/main/java/com/yihu/jw/entrance/controller/XzzxCotroller.java

@ -1,7 +1,30 @@
package com.yihu.jw.entrance.controller;
import com.yihu.jw.hospital.prescription.service.entrance.XzzxEntranceService;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * Created by Trick on 2020/3/18.
 */
public class XzzxCotroller {
@RestController
@RequestMapping(value ="/xzzx")
@Api(value = "心脏中心平台服务", description = "心脏中心平台服务", tags = {"心脏中心平台服务"})
public class XzzxCotroller extends EnvelopRestEndpoint {
    @Autowired
    private XzzxEntranceService xzzxEntranceService;
    @GetMapping(value = "/getDeptInfo")
    @ApiOperation(value = "获取部门信息", notes = "获取部门信息")
    public ObjEnvelop getDeptInfo()throws Exception{
        return ObjEnvelop.getSuccess("ok",xzzxEntranceService.getDeptInfo());
    }
}

+ 33 - 1
svr/svr-internet-hospital-entrance/src/main/resources/application.yml

@ -183,4 +183,36 @@ fastDFS:
testPattern:
  sign: 0
wlyy:
  url: http://www.xmtyw.cn/wlyytest/
  url: http://www.xmtyw.cn/wlyytest/
---
#心脏中心前置机配置
spring:
  profiles: xzprod_in
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://192.168.103.155:7306/base?useUnicode:true&characterEncoding=utf-8&autoReconnect=true&useSSL=false
    username: jkzl
    password: jkzl@2020
# mq 是否获取his数据,flag代表获取演示数据,false代表获取his真实数据
demo:
  flag: false
hospital:
  url: https://172.16.1.34
  mqUser: JKZL
  mqPwd: 123456
  SourceSysCode: S60
  TargetSysCode: S01
im:
  im_list_get: http://172.16.1.42:3000/
  data_base_name: im
fastDFS:
  fastdfs_file_url: http://192.168.103.159:8888/
#是否开启i健康接口 0关闭,1开启
testPattern:
  sign: 0
wlyy:
  url: http://www.xmtyw.cn/wlyytest/
wechat:
  id: d24d1367-7f4f-43af-910e-a0a43799e040  # base库中,wx_wechat 的id字段  # todo 待配置

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

@ -6,6 +6,7 @@ import com.yihu.jw.entity.hospital.prescription.WlyyOutpatientDO;
import com.yihu.jw.hospital.prescription.service.InspectionService;
import com.yihu.jw.hospital.prescription.service.PrescriptionLogService;
import com.yihu.jw.hospital.prescription.service.PrescriptionService;
import com.yihu.jw.hospital.prescription.service.WorkTimeService;
import com.yihu.jw.hospital.prescription.service.entrance.DoctorPreSignService;
import com.yihu.jw.hospital.service.SystemMessage.HospitalSystemMessageService;
import com.yihu.jw.im.service.ImService;
@ -29,6 +30,7 @@ import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import oracle.jdbc.proxy.annotation.Post;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@ -64,6 +66,9 @@ public class PrescriptionEndpoint extends EnvelopRestEndpoint {
    
    @Autowired
    private HospitalSystemMessageService hospitalSystemMessageService;
    @Autowired
    private WorkTimeService workTimeService;
    
    @Autowired
    private ImService imService;
@ -968,4 +973,18 @@ public class PrescriptionEndpoint extends EnvelopRestEndpoint {
                                                  @RequestParam(value = "pagesize",required = false)Integer pagesize) {
        return success(prescriptionService.findDeptWithDoctorWorkTime(hospital,keyWord,page,pagesize));
    }
    @PostMapping(value= BaseHospitalRequestMapping.Prescription.findWorkTimeRule)
    @ApiOperation(value = "查询排班规则")
    public ObjEnvelop findWorkTimeRule(@ApiParam(name = "hospital", value = "医院code")
                                       @RequestParam(value = "hospital",required = false)String hospital) {
        return success(workTimeService.findWorkTimeRule(hospital));
    }
    @PostMapping(value= BaseHospitalRequestMapping.Prescription.saveWorkTimeRule)
    @ApiOperation(value = "保存排班规则")
    public ObjEnvelop saveWorkTimeRule(@ApiParam(name = "workTimeRuleJson", value = "保存排班规则")
                                       @RequestParam(value = "workTimeRuleJson",required = false)String workTimeRuleJson) throws Exception{
        return success(workTimeService.saveWorkTimeRule(workTimeRuleJson));
    }
}