Browse Source

Merge branch 'dev' of yeshijie/patient-co-management into dev

chenweida 8 years ago
parent
commit
13f7c37b0a

+ 5 - 0
patient-co/patient-co-wlyy/pom.xml

@ -213,6 +213,11 @@
        </dependency>
        <!-- aspectjrt end -->
        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.4</version>
        </dependency>
        <!-- jdbc driver -->
        <dependency>

+ 6 - 6
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/repository/consult/ConsultTeamDao.java

@ -25,7 +25,7 @@ public interface ConsultTeamDao extends PagingAndSortingRepository<ConsultTeam,
	@Query("select a from ConsultTeam a where a.patient = ?1 and a.del = '1' and a.status = 0")
	List<ConsultTeam> findUnfinishedConsult(String patient);
	@Query("select a from ConsultTeam a,ConsultTeamDoctor b where a.consult = b.consult and a.patient = ?1 and b.to = ?2 and a.del = '1' and a.status = 0")
	@Query("select a from ConsultTeam a,ConsultTeamDoctor b where a.consult = b.consult and a.patient = ?1 and b.to = ?2 and a.del = '1' and a.type<>8 and a.status = 0")
	List<ConsultTeam> findUnfinishedConsultType(String patient,String doctor);
	// 统计未完成的数量
@ -101,21 +101,21 @@ public interface ConsultTeamDao extends PagingAndSortingRepository<ConsultTeam,
	@Query("select a from ConsultTeam a where a.patient = ?1 and a.status=0 and del = '1'")
	Page<ConsultTeam> findNotFinishedBypatient(String patient, Pageable pageRequest);
	@Query("select a from ConsultTeam a where a.patient = ?1 and a.id < ?2 and a.status=0 and del = '1'")
	@Query("select a from ConsultTeam a where a.patient = ?1 and a.id < ?2 and a.status=0 and del = '1' and a.type<>8")
	Page<ConsultTeam> findNotFinishedBypatient(String patient, long id, Pageable pageRequest);
	// 患者咨询列表(已结束)
	@Query("select a from ConsultTeam a where a.patient=?1 and a.status=1 and del = '1'")
	@Query("select a from ConsultTeam a where a.patient=?1 and a.status=1 and del = '1' and a.type<>8")
	Page<ConsultTeam> findFinishedBypatient(String patient, Pageable pageRequest);
	@Query("select a from ConsultTeam a where a.patient=?1 and a.id < ?2 and a.status=1 and del = '1'")
	@Query("select a from ConsultTeam a where a.patient=?1 and a.id < ?2 and a.status=1 and del = '1' and a.type<>8")
	Page<ConsultTeam> findFinishedBypatient(String patient, long id, Pageable pageRequest);
	// 患者咨询列表(已取消)
	@Query("select a from ConsultTeam a where a.patient=?1 and a.status=-1 and del = '1'")
	@Query("select a from ConsultTeam a where a.patient=?1 and a.status=-1 and del = '1' and a.type<>8")
	Page<ConsultTeam> findCancelBypatient(String patient, Pageable pageRequest);
	@Query("select a from ConsultTeam a where a.patient=?1 and a.id < ?2 and a.status=-1 and del = '1'")
	@Query("select a from ConsultTeam a where a.patient=?1 and a.id < ?2 and a.status=-1 and del = '1' and a.type<>8")
	Page<ConsultTeam> findCancelBypatient(String patient, long id, Pageable pageRequest);
	// 医生未读数量+1

+ 84 - 22
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/consult/ConsultTeamService.java

@ -14,6 +14,8 @@ import com.yihu.wlyy.entity.patient.Patient;
import com.yihu.wlyy.entity.patient.PatientFamilyMember;
import com.yihu.wlyy.entity.patient.SignFamily;
import com.yihu.wlyy.entity.patient.prescription.Prescription;
import com.yihu.wlyy.entity.patient.prescription.PrescriptionDiagnosis;
import com.yihu.wlyy.entity.patient.prescription.PrescriptionInfo;
import com.yihu.wlyy.repository.consult.ConsultTeamDao;
import com.yihu.wlyy.repository.consult.ConsultTeamDoctorDao;
import com.yihu.wlyy.repository.consult.ConsultTeamLogDao;
@ -25,6 +27,8 @@ import com.yihu.wlyy.repository.patient.PatientDeviceDao;
import com.yihu.wlyy.repository.patient.PatientFamilyMemberDao;
import com.yihu.wlyy.repository.patient.SignFamilyDao;
import com.yihu.wlyy.repository.prescription.PrescriptionDao;
import com.yihu.wlyy.repository.prescription.PrescriptionDiagnosisDao;
import com.yihu.wlyy.repository.prescription.PrescriptionInfoDao;
import com.yihu.wlyy.service.app.health.HealthEduArticleService;
import com.yihu.wlyy.service.app.health.PatientHealthGuidanceService;
import com.yihu.wlyy.service.app.prescription.PrescriptionLogService;
@ -109,6 +113,10 @@ public class ConsultTeamService extends ConsultService {
    @Autowired
    private PrescriptionLogService prescriptionLogService;
    @Autowired
    private PrescriptionInfoDao prescriptionInfoDao;
    @Autowired
    private PrescriptionDiagnosisDao prescriptionDiagnosisDao;
    @Autowired
    private ImUtill ImUtill;
    @Autowired
    private HttpClientUtil HttpClientUtil;
@ -872,21 +880,7 @@ public class ConsultTeamService extends ConsultService {
            //获取基位处方详情
            Prescription prescription = new Prescription();
            prescription.setCode(getCode());
            prescription.setHospitalName(doctor.getHospitalName());
            prescription.setHospital(doctor.getHospital());
            prescription.setAdminTeamId(ct.getAdminTeamId());
            prescription.setCreateTime(new Date());
            prescription.setDept(doctor.getDept());
            prescription.setDeptName(doctor.getDeptName());
            prescription.setDoctor(doctor.getCode());
            prescription.setDoctorName(doctor.getName());
            prescription.setJwCode(jwCode);
            prescription.setPatient(p.getCode());
            prescription.setPatientName(p.getName());
            prescription.setReason(reason);
            prescription.setType(2);
            prescription.setStatus(0);
            savePrescription(prescription,jwCode,doctor,p,ct,reason);
            String symptoms = p.getName()+"申请续方\n体征信息:";
@ -962,21 +956,72 @@ public class ConsultTeamService extends ConsultService {
            cd.setTo(doctorCode);
            consultTeamDoctorDao.save(cd);
            //3、保存续方记录
            prescription.setConsult(ct.getConsult());
            prescriptionDao.save(prescription);
            // 保存医生咨询信息
            // 添加咨询转发记录
            // 添加医生咨询日志
            String content = addLogs(ct);
            prescriptionLogService.addLog(prescription,3,1,1);
            return 1;
        }
    }
    /**
     * 保存续方信息
     * @param prescription
     * @param jwCode
     * @param doctor
     * @param p
     * @param ct
     * @param reason
     * @return
     */
    public Prescription savePrescription(Prescription prescription,String jwCode,Doctor doctor,Patient p,ConsultTeam ct,String reason){
        prescription.setCode(getCode());
        prescription.setParentCode(jwCode);
        prescription.setHospitalName(doctor.getHospitalName());
        prescription.setHospital(doctor.getHospital());
        prescription.setAdminTeamId(ct.getAdminTeamId());
        prescription.setCreateTime(new Date());
        prescription.setDept(doctor.getDept());
        prescription.setDeptName(doctor.getDeptName());
        prescription.setDoctor(doctor.getCode());
        prescription.setDoctorName(doctor.getName());
        prescription.setJwCode(jwCode);
        prescription.setPatient(p.getCode());
        prescription.setPatientName(p.getName());
        prescription.setReason(reason);
        prescription.setType(2);
        prescription.setStatus(0);
        prescription.setConsult(ct.getConsult());
        prescriptionDao.save(prescription);
        //保存续方疾病类型和药品(处方)信息
        PrescriptionInfo prescriptionInfo = new PrescriptionInfo();
        prescriptionInfo.setPrescriptionCode(prescription.getCode());
        prescriptionInfo.setCode(getCode());
        prescriptionInfo.setDel(1);
        prescriptionInfo.setDirection("口服");//药品用法
        prescriptionInfo.setDrugCode("药品code");//药品code
        prescriptionInfo.setDrugName("药品名称");//药品名称
        prescriptionInfo.setDrugRate("每次1.25mg    q.d.");//吃药频率
        prescriptionInfo.setDrugFormat("2.5mg*80片/盒");//药品规格
        prescriptionInfo.setNum(10);//药品数目
        prescriptionInfo.setIsRefrigerate(0);//是否冷藏 1是 0否
        prescriptionInfoDao.save(prescriptionInfo);
        PrescriptionDiagnosis diagnosis = new PrescriptionDiagnosis();
        diagnosis.setCode("1");
        diagnosis.setPrescriptionCode(prescription.getCode());
        diagnosis.setCreateTime(new Date());
        diagnosis.setName("高血压");
        diagnosis.setUpdateTime(new Date());
        prescriptionDiagnosisDao.save(diagnosis);
        prescriptionLogService.addLog(prescription,3,1,1);
        return prescription;
    }
    /**
     * 发送消息给IM
     *
@ -1244,7 +1289,7 @@ public class ConsultTeamService extends ConsultService {
    }
    /**
     * 医生关闭三师咨询
     * 医生关闭三师咨询(续方咨询)
     *
     * @param consult 三师咨询标识
     * @return
@ -1252,6 +1297,15 @@ public class ConsultTeamService extends ConsultService {
    public int finish(String consult, String endOperator, int endType) throws Exception {
        ConsultTeam consultTeam = consultTeamDao.findByConsult(consult);
        //新增续方咨询结束判断 (续方未审核时不可由医生或居民关闭)
        if(consultTeam.getType()==8){
            Prescription prescription = prescriptionDao.findByCode(consultTeam.getRelationCode());
            if(prescription.getStatus()==0){
                return -2;
            }
        }
        String name = "";
        String returnJson = "";
        //推送给IM文字消息
@ -1944,6 +1998,14 @@ public class ConsultTeamService extends ConsultService {
            return -1;
        }
        //新增续方咨询结束判断 (续方未审核时不可由医生或居民关闭)
        if(consultTeam.getType()==8){
            Prescription prescription = prescriptionDao.findByCode(consultTeam.getRelationCode());
            if(prescription.getStatus()==0){
                return -2;
            }
        }
        String endName = "";
        String endId = "";
        //推送给IM文字消息

+ 30 - 17
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/prescription/PrescriptionDiagnosisService.java

@ -5,8 +5,9 @@ import com.yihu.wlyy.entity.patient.prescription.PrescriptionInfo;
import com.yihu.wlyy.repository.prescription.PrescriptionDiagnosisDao;
import com.yihu.wlyy.repository.prescription.PrescriptionInfoDao;
import com.yihu.wlyy.service.BaseService;
import net.sf.json.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
import net.sf.json.JSONArray;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
@ -34,8 +35,9 @@ public class PrescriptionDiagnosisService extends BaseService{
     * @param prescriptionCode
     * @return
     */
    public String getPrescriptionDiagnosis(String prescriptionCode){
    public JSONArray getPrescriptionDiagnosis(String prescriptionCode){
        String re = "";
        JSONArray jsonArray = new JSONArray();
        try {
            if(!StringUtils.isEmpty(prescriptionCode))
            {
@ -46,21 +48,25 @@ public class PrescriptionDiagnosisService extends BaseService{
                {
                    List<PrescriptionDiagnosis> list = prescriptionDiagnosisDao.findByPrescriptionCode(prescriptionCode);
                    if(list!=null&&list.size()>0){
                        re = new JSONArray(list).toString();
                        for (PrescriptionDiagnosis diagnosis:list){
                            JSONObject json = new JSONObject();
                            json.put("code",diagnosis.getCode());//疾病代码
                            json.put("name",diagnosis.getName());//疾病名称
                            jsonArray.add(json);
                        }
                        re = jsonArray.toString();
                        redisTemplate.opsForValue().set(key,re,2, TimeUnit.HOURS);
                    }
                }else {
                    jsonArray = JSONArray.fromObject(re);
                }
            }
        }
        catch (Exception ex) {
            ex.printStackTrace();
            return new JSONArray().toString();
        }
        if(StringUtils.isEmpty(re)){
           re = new JSONArray().toString();
        }
        return re;
        return jsonArray;
    }
    /**
@ -68,8 +74,9 @@ public class PrescriptionDiagnosisService extends BaseService{
     * @param prescriptionCode
     * @return
     */
    public String getPrescriptionInfo(String prescriptionCode){
    public JSONArray getPrescriptionInfo(String prescriptionCode){
        String re = "";
        JSONArray jsonArray = new JSONArray();
        try {
            if(!StringUtils.isEmpty(prescriptionCode))
            {
@ -80,21 +87,20 @@ public class PrescriptionDiagnosisService extends BaseService{
                {
                    List<PrescriptionInfo> list = prescriptionInfoDao.findByPrescriptionCode(prescriptionCode);
                    if(list!=null&&list.size()>0){
                        re = new JSONArray(list).toString();
                        jsonArray = JSONArray.fromObject(list);
                        re = jsonArray.toString();
                        redisTemplate.opsForValue().set(key,re,2, TimeUnit.HOURS);
                    }
                }else {
                    jsonArray = JSONArray.fromObject(re);
                }
            }
        }
        catch (Exception ex) {
            ex.printStackTrace();
            return new JSONArray().toString();
        }
        if(StringUtils.isEmpty(re)){
            re = new JSONArray().toString();
        }
        return re;
        return jsonArray;
    }
    /**
@ -110,7 +116,14 @@ public class PrescriptionDiagnosisService extends BaseService{
                String key = "prescription:"+prescriptionCode+":diseaseTypes";
                List<PrescriptionDiagnosis> list = prescriptionDiagnosisDao.findByPrescriptionCode(prescriptionCode);
                if(list!=null&&list.size()>0){
                    String re = new JSONArray(list).toString();
                    JSONArray jsonArray = new JSONArray();
                    for (PrescriptionDiagnosis diagnosis:list){
                        JSONObject json = new JSONObject();
                        json.put("code",diagnosis.getCode());//疾病代码
                        json.put("name",diagnosis.getName());//疾病名称
                        jsonArray.add(json);
                    }
                    String re = jsonArray.toString();
                    redisTemplate.opsForValue().set(key,re,2, TimeUnit.HOURS);
                }
            }
@ -135,7 +148,7 @@ public class PrescriptionDiagnosisService extends BaseService{
                String key = "prescription:"+prescriptionCode+":drugInfo";
                List<PrescriptionInfo> list = prescriptionInfoDao.findByPrescriptionCode(prescriptionCode);
                if(list!=null&&list.size()>0){
                    String re = new JSONArray(list).toString();
                    String re = JSONArray.fromObject(list).toString();
                    redisTemplate.opsForValue().set(key,re,2, TimeUnit.HOURS);
                }
            }

+ 0 - 6
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/task/PushMsgTask.java

@ -4,7 +4,6 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.wlyy.entity.wechat.WechatTemplate;
import com.yihu.wlyy.entity.wechat.WechatTemplateData;
import com.yihu.wlyy.util.HttpUtil;
import io.swagger.annotations.Api;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
import org.json.JSONObject;
@ -12,12 +11,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.PostConstruct;
import java.util.HashMap;

+ 26 - 0
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/util/ImUtill.java

@ -105,6 +105,32 @@ public class ImUtill {
        return response;
    }
    /**
     * 咨询列表
     * @param user
     * @param status status = 10 已结束的咨询,status=0,reply = 1 已回复 ,status=0,reply=0未回复
     * @param reply
     * @param type 1、三师咨询,2、家庭医生咨询,6、患者名医咨询 7医生名医咨询 8续方咨询 10医生发起的求助
     * @param page
     * @param pagesize
     * @return
     */
    public String getConsultByStatusAndType(String user,Integer status,Integer reply,Integer type,int page,int pagesize){
        String imAddr = im_host + "api/v2/sessions/topicListByType";
        imAddr = imAddr + "?user="+user + "&page=" + page + "&pagesize=" + pagesize;
        if (status != null) {
            imAddr += ("&status=" + status);
        }
        if (reply != null) {
            imAddr += ("&reply=" + reply);
        }
        if (type != null) {
            imAddr += ("&type=" + type);
        }
        String response = HttpClientUtil.get(imAddr, "UTF-8");
        return response;
    }
    /**
     * 发送消息给IM
     *

+ 8 - 5
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/common/im/imController.java

@ -7,8 +7,8 @@ import com.yihu.wlyy.repository.consult.ConsultDao;
import com.yihu.wlyy.repository.doctor.DoctorDao;
import com.yihu.wlyy.repository.patient.SignFamilyDao;
import com.yihu.wlyy.util.ImUtill;
import com.yihu.wlyy.web.BaseController;
import io.swagger.annotations.Api;
import io.swagger.models.auth.In;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
import org.json.JSONObject;
@ -17,9 +17,6 @@ import org.springframework.http.MediaType;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.*;
import com.yihu.wlyy.util.HttpUtil;
import com.yihu.wlyy.web.BaseController;
import java.text.SimpleDateFormat;
import java.util.*;
@ -135,13 +132,19 @@ public class imController extends BaseController {
            @RequestParam(required = false) String doctor,
            @RequestParam Integer status,
            @RequestParam(required = false) Integer reply,
            @RequestParam(required = false) Integer type,
            @RequestParam int page,
            @RequestParam int pagesize) {
        try {
            if (StringUtils.isEmpty(doctor)) {
                doctor = getUID();
            }
            String consult = ImUtill.getConsultByStatus(doctor, status, reply, page, pagesize);
            String consult = null;
            if(type==null){
                consult = ImUtill.getConsultByStatus(doctor, status, reply, page, pagesize);
            }else {
                consult = ImUtill.getConsultByStatusAndType(doctor, status, reply,type, page, pagesize);
            }
            JSONArray jsonArray = new JSONArray(consult);
            Iterator<Object> it = jsonArray.iterator();
            List list = new ArrayList();

+ 61 - 2
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/doctor/consult/DoctorConsultController.java

@ -1,17 +1,24 @@
package com.yihu.wlyy.web.doctor.consult;
import com.yihu.wlyy.aop.ObserverRequired;
import com.yihu.wlyy.entity.consult.Consult;
import com.yihu.wlyy.entity.consult.ConsultTeam;
import com.yihu.wlyy.entity.consult.ConsultTeamLog;
import com.yihu.wlyy.entity.discussion.WlyyTalkGroup;
import com.yihu.wlyy.entity.discussion.WlyyTalkGroupMember;
import com.yihu.wlyy.entity.doctor.profile.Doctor;
import com.yihu.wlyy.entity.patient.Patient;
import com.yihu.wlyy.entity.patient.SignFamilyServer;
import com.yihu.wlyy.entity.patient.prescription.Prescription;
import com.yihu.wlyy.repository.consult.ConsultDao;
import com.yihu.wlyy.repository.patient.SignFamilyServerDao;
import com.yihu.wlyy.repository.prescription.PrescriptionDao;
import com.yihu.wlyy.service.app.account.DoctorInfoService;
import com.yihu.wlyy.service.app.account.PatientInfoService;
import com.yihu.wlyy.service.app.consult.ConsultService;
import com.yihu.wlyy.service.app.consult.ConsultTeamService;
import com.yihu.wlyy.service.app.health.PatientHealthGuidanceService;
import com.yihu.wlyy.service.app.prescription.PrescriptionDiagnosisService;
import com.yihu.wlyy.service.app.scheduling.DoctorWorkTimeService;
import com.yihu.wlyy.service.app.talk.TalkGroupService;
import com.yihu.wlyy.service.common.account.DoctorService;
@ -68,6 +75,14 @@ public class DoctorConsultController extends WeixinBaseController {
    private ImUtill ImUtill;
    @Autowired
    private PushMsgTask pushMsgTask;
    @Autowired
    private PrescriptionDao prescriptionDao;
    @Autowired
    private SignFamilyServerDao signFamilyServerDao;
    @Autowired
    private ConsultDao consultDao;
    @Autowired
    private PrescriptionDiagnosisService prescriptionDiagnosisService;
    /**
     * 三师咨询列表查询
@ -382,7 +397,9 @@ public class DoctorConsultController extends WeixinBaseController {
            int flag = consultTeamService.finish(consult, getUID(), 2);
            if (flag > 0) {
                return success("咨询已关闭");
            } else {
            }else if(flag==-2){
                return error(-1, "续方未审核,不能结束续方咨询!");
            }  else {
                return error(-1, "关闭失败!");
            }
        } catch (Exception e) {
@ -1013,7 +1030,9 @@ public class DoctorConsultController extends WeixinBaseController {
                return success("咨询已关闭");
            } else if(flag == -1) {
                return error(-1, "该咨询已经关闭,不需重复关闭!");
            } else {
            } else if(flag == -2) {
                return error(-1, "续方未审核,不能结束续方咨询!");
            }  else {
                return error(-1, "关闭失败!");
            }
        } catch (Exception e) {
@ -1045,4 +1064,44 @@ public class DoctorConsultController extends WeixinBaseController {
            return invalidUserException(e, -1, "查询失败!");
        }
    }
    /*********************************************续方咨询**************************************************************/
    @RequestMapping(value = "prescriptionDetail",method = RequestMethod.GET)
    @ResponseBody
    @ApiOperation("获取续方信息")
    public String prescriptionDetail(@RequestParam(required = true) String consult){
        try {
            JSONObject json = new JSONObject();
            Consult consult1 = consultDao.findByCode(consult);
            String prescriptionCode = consult1.getRelationCode();
            Prescription prescription = prescriptionDao.findByCode(prescriptionCode);
            json.put("status",prescription.getStatus());//状态 (-1 审核不通过 , 0 审核中, 10 审核通过/待支付 ,21支付失败  20 配药中/支付成功, 21 等待领药 ,30 配送中 ,100配送成功/已完成)
            json.put("prescriptionDt",prescriptionDiagnosisService.getPrescriptionDiagnosis(prescriptionCode));//续方疾病类型
            json.put("prescriptionInfo",prescriptionDiagnosisService.getPrescriptionInfo(prescriptionCode));//续方药品信息
            //服务类型
            List<SignFamilyServer> list = signFamilyServerDao.findBySignCodeAndType(consult1.getSignCode());
            JSONArray jsonArray = new JSONArray();
            if(list!=null&&list.size()>0){
                for(SignFamilyServer server:list){
                    JSONObject jsonObject = new JSONObject();
                    jsonObject.put("serverType",server.getServerType());
                    jsonObject.put("serverTypeName",server.getServerTypeName());
                    jsonArray.put(jsonObject);
                }
            }
            json.put("signFamilyServer",jsonArray);
            return write(200, "查询成功!", "list", json);
        }catch (Exception e){
            error(e);
            return error(-1, "查询失败!");
        }
    }
}

+ 164 - 116
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/patient/consult/ConsultController.java

@ -1,14 +1,20 @@
package com.yihu.wlyy.web.patient.consult;
import com.yihu.wlyy.entity.consult.Consult;
import com.yihu.wlyy.entity.consult.ConsultTeam;
import com.yihu.wlyy.entity.consult.ConsultTeamLog;
import com.yihu.wlyy.entity.doctor.profile.Doctor;
import com.yihu.wlyy.entity.patient.Patient;
import com.yihu.wlyy.entity.patient.SignFamily;
import com.yihu.wlyy.entity.patient.prescription.Prescription;
import com.yihu.wlyy.logs.BusinessLogs;
import com.yihu.wlyy.repository.consult.ConsultDao;
import com.yihu.wlyy.repository.consult.ConsultTeamDao;
import com.yihu.wlyy.repository.doctor.DoctorDao;
import com.yihu.wlyy.repository.patient.PatientDao;
import com.yihu.wlyy.repository.patient.SignFamilyDao;
import com.yihu.wlyy.repository.patient.SignFamilyServerDao;
import com.yihu.wlyy.repository.prescription.PrescriptionDao;
import com.yihu.wlyy.service.app.consult.ConsultTeamService;
import com.yihu.wlyy.service.app.consult.DoctorCommentService;
import com.yihu.wlyy.service.app.prescription.PrescriptionDiagnosisService;
@ -77,6 +83,12 @@ public class ConsultController extends WeixinBaseController {
    private HttpUtil httpUtil;
    @Autowired
    private PushMsgTask pushMsgTask;
    @Autowired
    private ConsultTeamDao consultTeamDao;
    @Autowired
    private PrescriptionDao prescriptionDao;
    @Autowired
    private ConsultDao consultDao;
    /**
     * 患者咨询记录查询
@ -134,52 +146,7 @@ public class ConsultController extends WeixinBaseController {
            return error(-1, "查询失败!");
        }
    }
    @RequestMapping(value = "getPreConsultList",method = RequestMethod.GET)
    @ResponseBody
    @ApiOperation("获取续方咨询列表")
    public String getPreConsultList(@RequestParam(required = false) String title,
                                    @RequestParam(required = true) long id,@RequestParam(required = true) int pagesize){
        try {
            JSONArray array = new JSONArray();
//            Page<Object> data = consultTeamService.findConsultRecordByType("a663d0cf7f8c4d38a8327cedc921e65f", id, pagesize,8, title);//8表示续方咨询
            Page<Object> data = consultTeamService.findConsultRecordByType(getRepUID(), id, pagesize,8, title);//8表示续方咨询
            if (data != null) {
                for (Object consult : data.getContent()) {
                    if (consult == null) {
                        continue;
                    }
                    Object[] result = (Object[]) consult;
                    JSONObject json = new JSONObject();
                    json.put("id", result[0]);
                    // 设置咨询类型:1三师咨询,2视频咨询,3图文咨询,4公共咨询,5病友圈,8 续方咨询
                    json.put("type", result[1]);
                    // 设置咨询标识
                    json.put("code", result[2]);
                    // 设置显示标题
                    json.put("title", result[3]);
                    // 设置主诉
                    json.put("symptoms", result[4]);
                    // 咨询状态
                    json.put("status", result[6]);
                    // 设置咨询日期
                    json.put("czrq", DateUtil.dateToStrLong((Date) result[5]));
                    // 咨询状态
                    json.put("doctorCode", result[7]);
                    json.put("evaluate", result[8]);
                    String relationCode = result[9]==null?"":result[9].toString();
                    json.put("prescriptionCode",relationCode);//续方code
                    json.put("prescriptionDt",prescriptionDiagnosisService.getPrescriptionDiagnosis(relationCode));//续方疾病类型
                    json.put("prescriptionInfo",prescriptionDiagnosisService.getPrescriptionInfo(relationCode));//续方药品信息
                    array.put(json);
                }
            }
            return write(200, "查询成功!", "list", array);
        } catch (Exception e) {
            error(e);
            return error(-1, "查询失败!");
        }
    }
    /**
     * 获取医生的排班时间
     *
@ -316,73 +283,6 @@ public class ConsultController extends WeixinBaseController {
        }
    }
    @RequestMapping(value = "isPrescriptionConsult",method = RequestMethod.GET)
    @ResponseBody
    @ApiOperation("是否可以续方咨询")
    public String isPrescriptConsult(String patient){
        try{
            SignFamily signFamily = signFamilyDao.findByPatient(patient);
            if(signFamily==null){
                return error(-1,"您还未签约,不能发起续方咨询!");
            }
            //点击后判断,如果用户当前存在可申请续方的处方记录,则进入续方申请流程,若不存在可续方记录,alert“当前没有可以申请续方的处方记录”
            Doctor doctor = doctorDao.findByAdminTeamId(signFamily.getAdminTeamId());
            JSONObject json = new JSONObject();
            json.put("doctor",doctor.getCode());
            json.put("doctorName",doctor.getName());
            json.put("adminTeamId",signFamily.getAdminTeamId());
            json.put("hospital",doctor.getHospital());
            json.put("hospitalName",doctor.getHospitalName());
            return write(200, "查询成功!", "data", json);
        }catch (Exception e){
            error(e);
            return error(-1,"查询失败");
        }
    }
    @RequestMapping(value = "addPrescriptionConsult",method = RequestMethod.POST)
    @ResponseBody
    @ApiOperation("添加续方咨询")
    public String addPrescriptionConsult(@ApiParam(name = "jwCode", value = "基位处方code", defaultValue = "10")
                                         @RequestParam(value = "jwCode", required = true) String jwCode,
                                         @ApiParam(name = "doctor", value = "咨询医生(开方医生、审核医生)", defaultValue = "86225d1365e711e69f7c005056850d66")
                                         @RequestParam(value = "doctor", required = true) String doctor,
                                         @ApiParam(name = "adminTeamId", value = "签约行政团队id", defaultValue = "224")
                                         @RequestParam(value = "adminTeamId", required = true) Long adminTeamId,
                                         @ApiParam(name = "reason", value = "续方说明", defaultValue = "续方申请")
                                         @RequestParam(value = "reason", required = false) String reason){
        try{
            ConsultTeam consult = new ConsultTeam();
            consult.setType(8);//续方咨询
            consult.setAdminTeamId(adminTeamId);
            // 保存到数据库
//            int res = consultTeamService.addPrescriptionConsult(jwCode, "a663d0cf7f8c4d38a8327cedc921e65f","a663d0cf7f8c4d38a8327cedc921e65f",doctor,consult,reason);
            int res = consultTeamService.addPrescriptionConsult(jwCode, getRepUID(),getUID(),doctor,consult,reason);
            if (res == -1) {
                return error(-1, "该处方存在未审核的续方,无法进行续方咨询!");
            }
//            Doctor doctor = doctorService.findDoctorByCode(consult.getDoctor());
//            // 添加到统计队列
//            if (consult.getType() == 2) {
//                DoctorStatisticsTask.getInstance(doctorStatisticsService).put(consult.getDoctor(), 1, 1, 0);
//            }
            // 推送消息给医生
           pushMsgTask.put(doctor, MessageType.MESSAGE_TYPE_DOCTOR_NEW_CONSULT_TEAM.D_CT_01.name(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_FAMOUS_CONSULT_TEAM_PRESCRIPTION.续方咨询.name(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_FAMOUS_CONSULT_TEAM_PRESCRIPTION.您有新的续方咨询.name(), consult.getConsult());
            BusinessLogs.info(BusinessLogs.BusinessType.consult, getRepUID(), getUID(), new JSONObject(consult));
            return write(200, "提交成功", "data", consult);
        }catch (Exception e){
            error(e);
            return error(-1,"添加失败");
        }
    }
    /**
     * 三师咨询添加接口
@ -470,7 +370,7 @@ public class ConsultController extends WeixinBaseController {
            }
            // 推送消息给医生
           pushMsgTask.put(consult.getDoctor(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_CONSULT_TEAM.D_CT_01.name(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_CONSULT_TEAM.指定咨询.name(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_CONSULT_TEAM.您有新的指定咨询.name(), consult.getConsult());
            pushMsgTask.put(consult.getDoctor(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_CONSULT_TEAM.D_CT_01.name(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_CONSULT_TEAM.指定咨询.name(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_CONSULT_TEAM.您有新的指定咨询.name(), consult.getConsult());
            BusinessLogs.info(BusinessLogs.BusinessType.consult, getRepUID(), getUID(), new JSONObject(consult));
            return write(200, "提交成功", "data", consult);
        } catch (Exception ex) {
@ -564,7 +464,7 @@ public class ConsultController extends WeixinBaseController {
            //名医咨询次数减一
            doctorWorkTimeService.setDoctorCurrentConsultTimesRemain(doctorCode);
            // 推送消息给医生
           pushMsgTask.put(consult.getDoctor(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_FAMOUS_CONSULT_TEAM.D_CT_03.name(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_FAMOUS_CONSULT_TEAM.名医咨询.name(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_FAMOUS_CONSULT_TEAM.您有新的名医咨询.name(), consult.getConsult());
            pushMsgTask.put(consult.getDoctor(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_FAMOUS_CONSULT_TEAM.D_CT_03.name(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_FAMOUS_CONSULT_TEAM.名医咨询.name(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_FAMOUS_CONSULT_TEAM.您有新的名医咨询.name(), consult.getConsult());
            BusinessLogs.info(BusinessLogs.BusinessType.consult, getRepUID(), getUID(), new JSONObject(consult));
            return write(200, "提交成功", "data", resultConsult);
        } catch (Exception ex) {
@ -739,7 +639,9 @@ public class ConsultController extends WeixinBaseController {
            int row = consultTeamService.finishConsult(code, getRepUID(), 1);
            if (row > 0) {
                return success("操作成功!");
            } else {
            }else if(row == -2) {
                return error(-1, "续方未审核,不能结束续方咨询!");
            }  else {
                return error(-1, "操作失败!");
            }
        } catch (Exception e) {
@ -989,7 +891,12 @@ public class ConsultController extends WeixinBaseController {
            JSONArray array = doctorCommentService.consultComment(getRepUID(), consult, content, star, 2);
            // 添加到统计队列
            if (array != null) {
                DoctorStatisticsTask.getInstance(doctorStatisticsService).put(array);
                //新增判断 续方咨询暂不统计
                ConsultTeam consultTeam = consultTeamDao.findByConsult(consult);
                if(consultTeam.getType()!=8){
                    DoctorStatisticsTask.getInstance(doctorStatisticsService).put(array);
                }
//                DoctorStatisticsTask.getInstance(doctorStatisticsService).put(array);
            }
            // 添加评价记录
            ConsultTeamLog log = new ConsultTeamLog();
@ -1026,4 +933,145 @@ public class ConsultController extends WeixinBaseController {
            return error(-1,e.getMessage());
        }
    }
    /*===========================================续方咨询==============================================================*/
    @RequestMapping(value = "isPrescriptionConsult",method = RequestMethod.GET)
    @ResponseBody
    @ApiOperation("是否可以续方咨询")
    public String isPrescriptConsult(String patient){
        try{
            SignFamily signFamily = signFamilyDao.findByPatient(patient);
            if(signFamily==null){
                return error(-1,"您还未签约,不能发起续方咨询!");
            }
            //点击后判断,如果用户当前存在可申请续方的处方记录,则进入续方申请流程,若不存在可续方记录,alert“当前没有可以申请续方的处方记录”
            Doctor doctor = doctorDao.findByAdminTeamId(signFamily.getAdminTeamId());
            JSONObject json = new JSONObject();
            json.put("doctor",doctor.getCode());
            json.put("doctorName",doctor.getName());
            json.put("adminTeamId",signFamily.getAdminTeamId());
            json.put("hospital",doctor.getHospital());
            json.put("hospitalName",doctor.getHospitalName());
            return write(200, "查询成功!", "data", json);
        }catch (Exception e){
            error(e);
            return error(-1,"查询失败");
        }
    }
    @RequestMapping(value = "addPrescriptionConsult",method = RequestMethod.POST)
    @ResponseBody
    @ApiOperation("添加续方咨询")
    public String addPrescriptionConsult(@ApiParam(name = "jwCode", value = "基位处方code", defaultValue = "10")
                                         @RequestParam(value = "jwCode", required = true) String jwCode,
                                         @ApiParam(name = "doctor", value = "咨询医生(开方医生、审核医生)", defaultValue = "86225d1365e711e69f7c005056850d66")
                                         @RequestParam(value = "doctor", required = true) String doctor,
                                         @ApiParam(name = "adminTeamId", value = "签约行政团队id", defaultValue = "224")
                                         @RequestParam(value = "adminTeamId", required = true) Long adminTeamId,
                                         @ApiParam(name = "reason", value = "续方说明", defaultValue = "续方申请")
                                         @RequestParam(value = "reason", required = false) String reason){
        try{
            ConsultTeam consult = new ConsultTeam();
            consult.setType(8);//续方咨询
            consult.setAdminTeamId(adminTeamId);
            // 保存到数据库
            int res = consultTeamService.addPrescriptionConsult(jwCode, "a663d0cf7f8c4d38a8327cedc921e65f","a663d0cf7f8c4d38a8327cedc921e65f",doctor,consult,reason);
//            int res = consultTeamService.addPrescriptionConsult(jwCode, getRepUID(),getUID(),doctor,consult,reason);
            if (res == -1) {
                return error(-1, "该处方存在未审核的续方,无法进行续方咨询!");
            }
//            Doctor doctor = doctorService.findDoctorByCode(consult.getDoctor());
//            // 添加到统计队列
//            if (consult.getType() == 2) {
//                DoctorStatisticsTask.getInstance(doctorStatisticsService).put(consult.getDoctor(), 1, 1, 0);
//            }
            // 推送消息给医生
            pushMsgTask.put(doctor, MessageType.MESSAGE_TYPE_DOCTOR_NEW_CONSULT_TEAM.D_CT_01.name(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_FAMOUS_CONSULT_TEAM_PRESCRIPTION.续方咨询.name(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_FAMOUS_CONSULT_TEAM_PRESCRIPTION.您有新的续方咨询.name(), consult.getConsult());
            BusinessLogs.info(BusinessLogs.BusinessType.consult, getRepUID(), getUID(), new JSONObject(consult));
            return write(200, "提交成功", "data", consult);
        }catch (Exception e){
            error(e);
            return error(-1,"添加失败");
        }
    }
    @RequestMapping(value = "getPreConsultList",method = RequestMethod.GET)
    @ResponseBody
    @ApiOperation("获取续方咨询列表")
    public String getPreConsultList(@RequestParam(required = false) String title,
                                    @RequestParam(required = true) long id,@RequestParam(required = true) int pagesize){
        try {
            JSONArray array = new JSONArray();
            Page<Object> data = consultTeamService.findConsultRecordByType("a663d0cf7f8c4d38a8327cedc921e65f", id, pagesize,8, title);//8表示续方咨询
//            Page<Object> data = consultTeamService.findConsultRecordByType(getRepUID(), id, pagesize,8, title);//8表示续方咨询
            if (data != null) {
                for (Object consult : data.getContent()) {
                    if (consult == null) {
                        continue;
                    }
                    Object[] result = (Object[]) consult;
                    JSONObject json = new JSONObject();
                    json.put("id", result[0]);
                    // 设置咨询类型:1三师咨询,2视频咨询,3图文咨询,4公共咨询,5病友圈,8 续方咨询
                    json.put("type", result[1]);
                    // 设置咨询标识
                    json.put("code", result[2]);
                    // 设置显示标题
                    json.put("title", result[3]);
                    // 设置主诉
                    json.put("symptoms", result[4]);
                    // 咨询状态
                    json.put("status", result[6]);
                    // 设置咨询日期
                    json.put("czrq", DateUtil.dateToStrLong((Date) result[5]));
                    // 咨询状态
                    json.put("doctorCode", result[7]);
                    json.put("evaluate", result[8]);
                    String relationCode = result[9]==null?"":result[9].toString();
                    json.put("prescriptionCode",relationCode);//续方code
                    json.put("prescriptionDt",prescriptionDiagnosisService.getPrescriptionDiagnosis(relationCode));//续方疾病类型
                    json.put("prescriptionInfo",prescriptionDiagnosisService.getPrescriptionInfo(relationCode));//续方药品信息
                    array.put(json);
                }
            }
            return write(200, "查询成功!", "list", array);
        } catch (Exception e) {
            error(e);
            return error(-1, "查询失败!");
        }
    }
    @RequestMapping(value = "prescriptionDetail",method = RequestMethod.GET)
    @ResponseBody
    @ApiOperation("获取续方信息")
    public String prescriptionDetail(@RequestParam(required = true) String consult){
        try {
            JSONObject json = new JSONObject();
            Consult consult1 = consultDao.findByCode(consult);
            String prescriptionCode = consult1.getRelationCode();
            Prescription prescription = prescriptionDao.findByCode(prescriptionCode);
            json.put("status",prescription.getStatus());//状态 (-1 审核不通过 , 0 审核中, 10 审核通过/待支付 ,21支付失败  20 配药中/支付成功, 21 等待领药 ,30 配送中 ,100配送成功/已完成)
            json.put("prescriptionDt",prescriptionDiagnosisService.getPrescriptionDiagnosis(prescriptionCode));//续方疾病类型
            json.put("prescriptionInfo",prescriptionDiagnosisService.getPrescriptionInfo(prescriptionCode));//续方药品信息
            return write(200, "查询成功!", "list", json);
        }catch (Exception e){
            error(e);
            return error(-1, "查询失败!");
        }
    }
}