Bläddra i källkod

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

lyr 8 år sedan
förälder
incheckning
818e3a3adb

+ 6 - 6
patient-co-wlyy/src/main/java/com/yihu/wlyy/entity/consult/ConsultTeam.java

@ -44,9 +44,9 @@ public class ConsultTeam extends IdEntity {
	private Long guidance;   //关联指导
	private String doctorName;//醫生名字
	//起始消息id
	private String startMsgId;
	private Integer startMsgId;
	//结束消息id
	private String endMsgId;
	private Integer endMsgId;
	// 结束人
	private String endOperator;
	// 结束人类型
@ -256,19 +256,19 @@ public class ConsultTeam extends IdEntity {
	}
	public String getStartMsgId() {
	public Integer getStartMsgId() {
		return startMsgId;
	}
	public void setStartMsgId(String startMsgId) {
	public void setStartMsgId(Integer startMsgId) {
		this.startMsgId = startMsgId;
	}
	public String getEndMsgId() {
	public Integer getEndMsgId() {
		return endMsgId;
	}
	public void setEndMsgId(String endMsgId) {
	public void setEndMsgId(Integer endMsgId) {
		this.endMsgId = endMsgId;
	}

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

@ -35,23 +35,17 @@ import org.apache.commons.lang3.StringUtils;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.apache.poi.hssf.util.HSSFColor;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate;
import org.springside.modules.persistence.DynamicSpecifications;
import org.springside.modules.persistence.SearchFilter;
import org.springside.modules.persistence.SearchFilter.Operator;
@ -516,41 +510,6 @@ public class ConsultTeamService extends ConsultService {
        }
    }
    /**
     * 查询居民咨询记录
     *
     * @param patient
     * @param teamCode
     * @param page
     * @param pageSize
     * @return
     */
    public JSONArray findByPatientAndTeam(String patient, Long teamCode, int page, int pageSize) {
        PageRequest pageRequest = new PageRequest(page, pageSize);
        Patient p = patientDao.findByCode(patient);
        Page<Object> result = consultDao.findByPatientAndTeam(patient, teamCode, pageRequest);
        JSONArray array = new JSONArray();
        for (Object obj : result) {
            JSONObject consult = new JSONObject();
            Object[] objArr = (Object[]) obj;
            consult.put("id", objArr[0]);
            consult.put("code", objArr[2]);
            consult.put("type", objArr[1]);
            consult.put("title", objArr[3]);
            consult.put("symptoms", objArr[4]);
            consult.put("czrq", objArr[5]);
            consult.put("status", objArr[6]);
            consult.put("adminTeamCode", objArr[7]);
            consult.put("patient", patient);
            consult.put("patientName", p.getName());
            consult.put("patientPhoto", p.getPhoto());
            array.put(consult);
        }
        return array;
    }
    /**
     * 网络咨询咨询日志查询
     *
@ -594,18 +553,18 @@ public class ConsultTeamService extends ConsultService {
     * @return
     */
    public void reply(List<ConsultTeamLog> logs, String patient) throws Exception {
        //ConsultTeam consultTeam = consultTeamDao.findByConsult(logs.get(0).getConsult());
        //WlyyTalkGroup wlyyTalkGroup = talkGroupService.findConsultTalkGroupByType(logs.get(0).getConsult(), 2);
        //for (ConsultTeamLog log : logs) {
        //    reply(log, patient, null, log.getType());
        //    //判断当前咨询是否创建讨论租
        //    if (wlyyTalkGroup != null) {
        //        sendGroupIM(patient, wlyyTalkGroup.getCode(), log.getChatType() + "", log.getContent());
        //    } else {
        //        //推送给IM
        //        sendIM(patient, consultTeam.getDoctor(), log.getChatType() + "", log.getContent());
        //    }
        //}
        ConsultTeam consultTeam = consultTeamDao.findByConsult(logs.get(0).getConsult());
        WlyyTalkGroup wlyyTalkGroup = talkGroupService.findConsultTalkGroupByType(logs.get(0).getConsult(), 2);
        for (ConsultTeamLog log : logs) {
            reply(log, patient, null, log.getType());
            //判断当前咨询是否创建讨论租
            if (wlyyTalkGroup != null) {
                sendGroupIM(patient, wlyyTalkGroup.getCode(), log.getChatType() + "", log.getContent());
            } else {
                //推送给IM
                sendIM(patient, consultTeam.getDoctor(), log.getChatType() + "", log.getContent());
            }
        }
    }
    /**
@ -663,7 +622,6 @@ public class ConsultTeamService extends ConsultService {
     * @throws Exception
     */
    public int addTeamConsult(ConsultTeam ct, String patient) throws Exception {
        JSONObject users = new JSONObject();
        // 咨询三师
        if (ct.getType() == 1) {
            // 查询三师签约信息
@ -675,22 +633,15 @@ public class ConsultTeamService extends ConsultService {
            ct.setTeam(sc.getTeamCode());
            // 设置健康管理师,三师咨询默认给健康管理师处理
            //查找病人所在的团队
             DoctorTeam doctorTeam = doctorTeamDao.findBySanshiParientCode(patient);
            DoctorTeam doctorTeam = doctorTeamDao.findBySanshiParientCode(patient);
            //得到团队的健康管理师
            DoctorTeamMember doctorTeamMemberHealthy = doctorTeamDoctor.findDoctorSanshi2ByTeam(doctorTeam.getCode(), 3);
            DoctorTeamMember doctorTeamMember = doctorTeamDoctor.findDoctorSanshi2ByTeam(doctorTeam.getCode(), 2);
            if (doctorTeamMemberHealthy == null) {
                ct.setDoctor(doctorTeamMember.getMemberCode());
                users.put(doctorTeamMember.getMemberCode(),0);
            }else{
                users.put(doctorTeamMemberHealthy.getMemberCode(),0);
                if(doctorTeamMember!=null){
                    users.put(doctorTeamMember.getMemberCode(),1);
                }
                ct.setDoctor(doctorTeamMemberHealthy.getMemberCode());
            DoctorTeamMember doctorTeamMember = doctorTeamDoctor.findDoctorSanshi2ByTeam(doctorTeam.getCode(), 3);
            if (doctorTeamMember == null) {
                doctorTeamMember = doctorTeamDoctor.findDoctorSanshi2ByTeam(doctorTeam.getCode(), 2);
            }
            // 设置家庭医生
            ct.setDoctor(doctorTeamMember.getMemberCode());
            ct.setAdminTeamId(sc.getAdminTeamId());
        } else if (ct.getType() == 2) {
            // 咨询家庭医生
@ -703,19 +654,14 @@ public class ConsultTeamService extends ConsultService {
            //查找病人所在的团队
            DoctorTeam doctorTeam = doctorTeamDao.findByParientCode(patient);
            //得到团队的健康管理师
            DoctorTeamMember doctorTeamMemberHealthy = doctorTeamDoctor.findDoctorJiating2ByTeam(doctorTeam.getCode(), 3);
            DoctorTeamMember doctorTeamMember = doctorTeamDoctor.findDoctorJiating2ByTeam(doctorTeam.getCode(), 2);
            if (doctorTeamMemberHealthy == null) {
                ct.setDoctor(doctorTeamMember.getMemberCode());
                users.put(doctorTeamMemberHealthy.getMemberCode(),0);
            }else{
                users.put(doctorTeamMemberHealthy.getMemberCode(),0);
                if(doctorTeamMember!=null){
                    users.put(doctorTeamMember.getMemberCode(),1);
                }
                ct.setDoctor(doctorTeamMemberHealthy.getMemberCode());
            DoctorTeamMember doctorTeamMember = doctorTeamDoctor.findDoctorJiating2ByTeam(doctorTeam.getCode(), 3);
            if (doctorTeamMember == null) {
                doctorTeamMember = doctorTeamDoctor.findDoctorJiating2ByTeam(doctorTeam.getCode(), 2);
            }
            ct.setTeam(sf.getTeamCode());
            // 设置家庭医生
            ct.setDoctor(doctorTeamMember.getMemberCode());
            ct.setAdminTeamId(sf.getAdminTeamId());
        }
        // 设置患者信息
@ -751,113 +697,48 @@ public class ConsultTeamService extends ConsultService {
        cd.setTo(ct.getDoctor());
        // 添加医生咨询日志
        String content = addLogs(ct);
        //推送给IM去创建议题,取得成员消息
        DoctorTeam doctorTeam = doctorTeamDao.findByParientCode(patient);
        JSONObject messages = new JSONObject();
        messages.put("description",consult.getSymptoms());
        messages.put("title",consult.getTitle());
        messages.put("img",consult.getImages());
        messages.put("senderId",patient);
        messages.put("senderName",tempPatient.getName());
        users.put(patient,0);
        JSONObject obj  = createTopics(UUID.randomUUID().toString(),consult.getCode(),"咨询问题:"+consult.getSymptoms(),users,messages,"1");
        if(obj==null){
            throw new RuntimeException("IM消息结束异常!");
        //推送给IM文字消息
        String returnJson = sendIM(ct.getPatient(), ct.getDoctor(), "6", content);
        JSONObject jo = new JSONObject(returnJson);
        if (jo.has("startId")) {
            //设置消息ID
            ct.setStartMsgId(jo.getInt("startId"));
            //推送给IM图片
            if (StringUtils.isNotEmpty(ct.getImages())) {
                String[] images = ct.getImages().split(",");
                for (String image : images) {
                    if (StringUtils.isNoneEmpty(image)) {
                        sendIM(ct.getPatient(), ct.getDoctor(), "2", image);
                    }
                }
            }
        }
        ct.setStartMsgId(obj.get("id").toString());
        consultTeamDao.save(ct);
        consultDao.save(consult);
        consultTeamDoctorDao.save(cd);
        return 1;
    }
    /**
     * 发送消息给IM
     *
     * @param from        来自
     * @param to
     * @param contentType 1文字 2图片消息
     * @param content     内容
     */
    private String sendIM(String from,String fromName, String sessionId, String contentType, String content) {
        String imAddr = SystemConf.getInstance().getImListGet() + "/api/v2/sessions/"+sessionId+"/messages";
        JSONObject params = new JSONObject();
        params.put("sender_id", from);
        params.put("sender_name", fromName);
        params.put("content_type", contentType);
        params.put("content", content);
        params.put("sessionId", sessionId);;
        String response = HttpClientUtil.postBody(imAddr, params);
    private String sendIM(String from, String to, String contentType, String content) {
        String imAddr = SystemConf.getInstance().getImListGet() + "api/v1/chats/pm";
        List<NameValuePair> params = new ArrayList<>();
        params.add(new BasicNameValuePair("from", from));
        params.add(new BasicNameValuePair("to", to));
        params.add(new BasicNameValuePair("contentType", contentType));
        params.add(new BasicNameValuePair("content", content));
        String response = HttpClientUtil.post(imAddr, params, "UTF-8");
        return response;
    }
    /**
     * 创建议题
     *
     * @param topicId  议题ID
     * @param topicName  议题名称
     * @param participants 成员
     */
    private JSONObject createTopics(String sessionId, String topicId,String topicName, JSONObject participants,JSONObject messages,String sessionType) {
        String imAddr = SystemConf.getInstance().getImListGet() + "api/v2/sessions/"+sessionId+"/topics";
        JSONObject params = new JSONObject();
        params.put("topic_id", topicId);
        params.put("topic_name", topicName);
        params.put("participants", participants.toString());
        params.put("messages", messages.toString());
        params.put("session_id", sessionId);
        params.put("session_type", sessionType);
        String ret = HttpClientUtil.postBody(imAddr,params);
        JSONObject obj  = null;
        try{
            obj = new JSONObject(ret);
        }catch (Exception e){
            return null;
        }
        return obj;
    }
    /**
     * 结束议题
     *
     * @param topicId  议题ID
     * @param endUser  结束人
     * @param endUserName 结束人名字
     * @param sessionId 会话ID
     */
    private JSONObject endTopics(String sessionId,String endUser, String endUserName,String topicId) {
        String imAddr = SystemConf.getInstance().getImListGet() + "api/v2/sessions/"+sessionId+"/topics/"+topicId+"/ended";
        JSONObject params = new JSONObject();
        params.put("session_id", sessionId);
        params.put("end_user", endUser);
        params.put("end_user_name",endUserName);
        params.put("topic_id", topicId);
        String ret = HttpClientUtil.postBody(imAddr,params);
        JSONObject obj  = null;
        try{
            obj = new JSONObject(ret);
        }catch (Exception e){
            return null;
        }
        return obj;
    }
    /**
     * 议题邀请人员
     * @param user 结束人名字
     * @param sessionId 会话ID
     */
    private void updateTopicUser(String sessionId,String user) {
        String imAddr = SystemConf.getInstance().getImListGet() + "api/v2/sessions/"+sessionId+"/participants/"+user;
        JSONObject params = new JSONObject();
        params.put("user", user+":"+0);
        HttpClientUtil.putBody(imAddr,params);
    }
    /**
     * 发送消息给IM
     *
@ -1015,24 +896,38 @@ public class ConsultTeamService extends ConsultService {
    public int finish(String consult, String endOperator, int endType) throws Exception {
        ConsultTeam consultTeam = consultTeamDao.findByConsult(consult);
        String endName = "";
        String endId = "";
        String name = "";
        String returnJson = "";
        //推送给IM文字消息
        if (endType == 1) {
            Patient p = patientDao.findByCode(endOperator);
            endName = p.getName();
            endId = p.getCode();
            name = p.getName();
            returnJson = sendIM(consultTeam.getPatient(), consultTeam.getDoctor(), "7", name + "结束了本次咨询");
        } else {
            Doctor d = doctorDao.findByCode(endOperator);
            endId = d.getCode();
            endName = d.getName();
            name = d.getName();
            returnJson = sendIM(consultTeam.getDoctor(), consultTeam.getPatient(), "7", name + "结束了本次咨询");
        }
        JSONObject obj = endTopics(consultTeam.getPatient(),endId,endName,consultTeam.getConsult());
        if(obj==null){
            throw new RuntimeException("IM消息结束异常!");
        if (StringUtils.isEmpty(returnJson)) {
            throw new Exception("send consult finished IM message failed");
        } else {
            JSONObject jo = new JSONObject(returnJson);            //设置消息ID
            consultTeam.setEndMsgId(jo.getInt("startId"));
            consultTeam.setEndOperator(endOperator);
            consultTeam.setEndType(endType);
        }
        JSONObject group = talkGroupService.findConsultTalkGroup(consultTeam.getConsult());
        if (group != null) {
            String json = sendGroupIM(endOperator, group.getString("code"), "7", name + "结束了本次咨询");
            if (StringUtils.isEmpty(json)) {
                throw new Exception("send consult finished IM message failed");
            }
        }
        consultTeam.setType(endType);
        consultTeam.setEndMsgId(obj.get("id").toString());
        return consultTeamDao.updateStatusByConsult(consult);
    }
@ -1234,7 +1129,6 @@ public class ConsultTeamService extends ConsultService {
    public void addFamousTeamConsult(ConsultTeam ct, String uid, String type) throws Exception {
        // 设置患者信息
        ct.setPatient(uid);
        JSONObject messages = new JSONObject();
        if ("1".equals(type)) {
            // 查询患者信息
            Patient tempPatient = patientDao.findByCode(uid);
@ -1246,11 +1140,6 @@ public class ConsultTeamService extends ConsultService {
            ct.setSex(tempPatient.getSex());
            // 设置患者头像
            ct.setPhoto(tempPatient.getPhoto());
            messages.put("senderId",tempPatient.getCode());
            messages.put("senderName",tempPatient.getName());
        } else if ("2".equals(type)) {
            Doctor doctorTemp = doctorDao.findByCode(uid);
            // 设置医生姓名
@ -1283,19 +1172,20 @@ public class ConsultTeamService extends ConsultService {
        // 添加医生咨询日志
        String content = addLogs(ct);
        //推送给IM文字消息
        JSONObject jsonObject = new JSONObject();
        jsonObject.put(ct.getPatient(),0);
        jsonObject.put(ct.getDoctor(),0);
        messages.put("description",consult.getSymptoms());
        messages.put("title",consult.getTitle());
        messages.put("img",consult.getImages());
        JSONObject obj = createTopics(String.valueOf(jsonObject.hashCode()),consult.getCode(),consult.getSymptoms(),jsonObject,messages,"2");
        if(obj==null){
            throw new RuntimeException("im消息创建异常!");
        }
        String returnJson = sendIM(ct.getPatient(), ct.getDoctor(), "6", content);
        ;
        JSONObject jo = new JSONObject(returnJson);
        //设置消息ID
        ct.setStartMsgId(obj.get("id").toString());
        ct.setStartMsgId(jo.getInt("startId"));
        //推送给IM图片
        if (StringUtils.isNotEmpty(ct.getImages())) {
            String[] images = ct.getImages().split(",");
            for (String image : images) {
                if (StringUtils.isNoneEmpty(image)) {
                    sendIM(ct.getPatient(), ct.getDoctor(), "2", image);
                }
            }
        }
        consultTeamDao.save(ct);  // 保存医生咨询信息
        consultTeamDoctorDao.save(cd);
        consultDao.save(consult);
@ -1396,31 +1286,36 @@ public class ConsultTeamService extends ConsultService {
        // 添加医生咨询日志
        String content = addLogs(ct);
        //推送给IM文字消息
        JSONObject messages = new JSONObject();
        messages.put("description",content);
        messages.put("title",consult.getTitle());
        messages.put("img",consult.getImages());
        messages.put("senderId",doctorTemp.getCode());
        messages.put("senderName",doctorTemp.getName());
        JSONObject jsonObject = new JSONObject();
        jsonObject.put(ct.getPatient(),0);
        jsonObject.put(ct.getDoctor(),0);
        //设置消息ID
        JSONObject obj = createTopics(String.valueOf(jsonObject.hashCode()),consult.getCode(),"咨询求助:"+doctorTemp.getName(),jsonObject,messages,"2");
        if(obj==null){
            throw new RuntimeException("im消息创建异常!");
        }
        ct.setStartMsgId(obj.get("id").toString());
        //转发咨询问题
        if(StringUtils.isNotBlank(oldConsultCode)){
            Consult oldConsult = consultDao.findByCode(oldConsultCode);
        String returnJson = null;
        JSONObject jo;
        if(StringUtils.isNotEmpty(oldConsultCode)){
            ConsultTeam oldConsult =  consultTeamDao.findByConsult(oldConsultCode);
            if(oldConsult!=null){
                sendIM(doctorTemp.getCode(),doctorTemp.getName(),String.valueOf(jsonObject.hashCode()),"6",content);
                if(StringUtils.isNotBlank(oldConsult.getImages())){
                    String imgs[] = oldConsult.getImages().split(",");
                    for(String url :imgs)
                       sendIM(doctorTemp.getCode(),doctorTemp.getName(),String.valueOf(jsonObject.hashCode()),"2",url);
                returnJson = sendIM(ct.getPatient(), ct.getDoctor(), "6", "居民问题:" +oldConsult.getSymptoms());
                //推送给IM图片
                if (StringUtils.isNotEmpty(oldConsult.getImages())) {
                    String[] images = oldConsult.getImages().split(",");
                    for (String image : images) {
                        if (StringUtils.isNoneEmpty(image)) {
                            sendIM(ct.getPatient(), ct.getDoctor(), "2", image);
                        }
                    }
                }
            }
        }
        if(StringUtils.isEmpty(returnJson))
            returnJson = sendIM(ct.getPatient(), ct.getDoctor(), "6", content);
        else
            sendIM(ct.getPatient(), ct.getDoctor(), "6", content);
        jo = new JSONObject(returnJson);
        //设置消息ID
        ct.setStartMsgId(jo.getInt("startId"));
        //推送给IM图片
        if (StringUtils.isNotEmpty(ct.getImages())) {
            String[] images = ct.getImages().split(",");
            for (String image : images) {
                if (StringUtils.isNoneEmpty(image)) {
                    sendIM(ct.getPatient(), ct.getDoctor(), "2", image);
                }
            }
        }
@ -1430,12 +1325,38 @@ public class ConsultTeamService extends ConsultService {
    }
    /**
     * @param ct
     * @param uid
     * @throws Exception
     */
    public void sendForHelpMsg(String oldConsultCode,String userId) throws Exception {
        Consult consult = consultDao.findByCode(oldConsultCode);
    public void sendForHelpMsg(ConsultTeam ct, String uid, String oldConsultCode) throws Exception {
        ct.setPatient(uid);
        //推送给IM文字消息
        updateTopicUser(consult.getPatient(),userId);
        if(StringUtils.isNotEmpty(oldConsultCode)){
            ConsultTeam oldConsult =  consultTeamDao.findByConsult(oldConsultCode);
            if(oldConsult!=null){
                sendIM(ct.getPatient(), ct.getDoctor(), "6", "居民问题:" +oldConsult.getSymptoms());
                //推送给IM图片
                if (StringUtils.isNotEmpty(oldConsult.getImages())) {
                    String[] images = oldConsult.getImages().split(",");
                    for (String image : images) {
                        if (StringUtils.isNoneEmpty(image)) {
                            sendIM(ct.getPatient(), ct.getDoctor(), "2", image);
                        }
                    }
                }
            }
        }
        sendIM(ct.getPatient(), ct.getDoctor(), "6", "咨询问题:"+ ct.getSymptoms());
        //推送给IM图片
        if (StringUtils.isNotEmpty(ct.getImages())) {
            String[] images = ct.getImages().split(",");
            for (String image : images) {
                if (StringUtils.isNoneEmpty(image)) {
                    sendIM(ct.getPatient(), ct.getDoctor(), "2", image);
                }
            }
        }
    }
    /**
@ -1455,11 +1376,11 @@ public class ConsultTeamService extends ConsultService {
    public boolean isCommonTeam(String docCode1, String docCode2){
        String sqlQuSum =
                "SELECT c.team_id FROM " +
                    "(SELECT a.* FROM wlyy_admin_team_member a where a.doctor_code='"+ docCode1 +"' ) c " +
                    "LEFT JOIN " +
                    "(SELECT b.* FROM wlyy_admin_team_member b where b.doctor_code='"+ docCode2 +"' ) d " +
                    "on c.team_id=d.team_id " +
                    "WHERE d.team_id IS NOT NULL";
                        "(SELECT a.* FROM wlyy_admin_team_member a where a.doctor_code='"+ docCode1 +"' ) c " +
                        "LEFT JOIN " +
                        "(SELECT b.* FROM wlyy_admin_team_member b where b.doctor_code='"+ docCode2 +"' ) d " +
                        "on c.team_id=d.team_id " +
                        "WHERE d.team_id IS NOT NULL";
        List ls = jdbcTemplate.queryForList(sqlQuSum);
        return ls!=null && ls.size()>0;
    }
@ -1472,6 +1393,4 @@ public class ConsultTeamService extends ConsultService {
    public List findByTeam(String consult){
        return consultTeamDao.findByTeamAndType(consult, 10);
    }
}

+ 13 - 46
patient-co-wlyy/src/main/java/com/yihu/wlyy/util/HttpUtil.java

@ -132,11 +132,20 @@ public class HttpUtil {
	 * @param data 消息数据
	 */
	public static boolean pushMessage(String receiver, String msgType, String title, String msg, String data) {
//		JSONObject param = new JSONObject();
//		param.put("to_uid", receiver);
//		param.put("content", msg);
//		param.put("type", msgType);
//		param.put("title", title);
//		param.put("data", data);
		try{
			JSONObject sessionObj  = createSession(receiver);
			JSONObject params = new JSONObject();
			sendIM("system","系统",String.valueOf(sessionObj.get("id")),msgType, msg);
			List<NameValuePair> params = new ArrayList<>();
			params.add(new BasicNameValuePair("to", receiver));
			params.add(new BasicNameValuePair("content", msg));
			params.add(new BasicNameValuePair("contentType", msgType));
			params.add(new BasicNameValuePair("title", title));
			params.add(new BasicNameValuePair("summary", data));
			String response = HttpClientUtil.post(SystemConf.getInstance().getMsgPushServer(), params, "UTF-8");
			return true;
		}catch (Exception e){
			e.printStackTrace();
@ -144,48 +153,6 @@ public class HttpUtil {
		return false;
	}
	/**
	 * 发送消息给IM
	 *
	 * @param from        来自
	 * @param contentType 1文字 2图片消息
	 * @param content     内容
	 */
	private static String sendIM(String from,String fromName, String sessionId, String contentType, String content) {
		String imAddr = SystemConf.getInstance().getImListGet() + "/api/v2/sessions/"+sessionId+"/messages";
		JSONObject params = new JSONObject();
		params.put("sender_id", from);
		params.put("sender_name", fromName);
		params.put("business_type", contentType);
		params.put("content_type", 1);
		params.put("content", content);
		params.put("sessionId", sessionId);;
		String response = HttpClientUtil.postBody(imAddr, params);
		return response;
	}
	/**
	 * 创建会话(system)
	 *
	 */
	private static JSONObject createSession(String receiver) {
		String imAddr = SystemConf.getInstance().getImListGet() + "api/v2/sessions";
		String participants[]=new String[]{"system:0",receiver+":"+"0"};
		JSONObject params = new JSONObject();
		params.put("participants", participants);
		params.put("session_name", "系统消息");
		params.put("session_type", 0);
		String ret = HttpClientUtil.postBody(imAddr,params);
		JSONObject obj  = null;
		try{
			obj = new JSONObject(ret);
		}catch (Exception e){
			return null;
		}
		return obj;
	}
	/**
	 * 发送消息到websocket服务器,然后由websocket服务器中转给微信端
	 * @param userid 接收数据的患者id

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

@ -15,8 +15,6 @@ import com.yihu.wlyy.service.common.account.DoctorService;
import com.yihu.wlyy.util.IdCardUtil;
import com.yihu.wlyy.util.MessageType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
import org.json.JSONObject;
@ -166,28 +164,6 @@ public class DoctorConsultController extends WeixinBaseController {
        }
    }
    @RequestMapping(value = "list_by_team", method = {RequestMethod.GET, RequestMethod.POST})
    @ResponseBody
    @ApiOperation(value = "居民咨询列表查询")
    public String listByTeam(@RequestParam @ApiParam(value = "居民Code") String patient,
                             @RequestParam @ApiParam(value = "团队Code") Long teamCode,
                             @RequestParam @ApiParam(value = "第几页") int page,
                             @RequestParam @ApiParam(value = "页大小") int pagesize) {
        try {
            if (StringUtils.isEmpty(patient)) {
                return error(-1, "请输入需查询的居民");
            }
            if (teamCode == null || teamCode < 1) {
                return error(-1, "请输入需查询的居民的团队");
            }
            page = page > 0 ? page - 1 : 0;
            JSONArray jsonArray = consultTeamService.findByPatientAndTeam(patient, teamCode, page, pagesize);
            return write(200, "查询成功", "data", jsonArray);
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "查询失败!");
        }
    }
    /**
     * 获取三师家庭咨询
     *
@ -361,6 +337,7 @@ public class DoctorConsultController extends WeixinBaseController {
            List<Map<String, Object>> list = consultTeamService.getConsultSign(consults.split(","));
            return write(200, "查询成功", "data", new JSONArray(list));
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "查询失败");
        }
    }
@ -717,6 +694,7 @@ public class DoctorConsultController extends WeixinBaseController {
                return write(200, "查询成功", "data", "");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "查询失败");
        }
    }
@ -842,7 +820,7 @@ public class DoctorConsultController extends WeixinBaseController {
            consult.setDoctor(doctorCode);//设置专科医生
            // 保存到数据库
            if(consultTeamService.isCommonTeam( doctorCode, getUID() ))
                consultTeamService.sendForHelpMsg(oldConsultCode,doctorCode);
                consultTeamService.sendForHelpMsg( consult, getUID(), oldConsultCode );
            else
                consultTeamService.addForHelpTeamConsult( consult, getUID(), oldConsultCode );
@ -928,6 +906,7 @@ public class DoctorConsultController extends WeixinBaseController {
            ConsultTeam ct = consultTeamService.findByConsultCode(consult);
            return write(200, "查询咨询状态成功", "data", ct.getStatus());
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "查询咨询状态失败");
        }
    }

+ 162 - 26
patient-co-wlyy/src/main/java/com/yihu/wlyy/web/patient/consult/ConsultController.java

@ -124,6 +124,7 @@ public class ConsultController extends WeixinBaseController {
            return write(200, "查询成功!", "data", result);
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "查询失败!");
        }
    }
@ -160,6 +161,7 @@ public class ConsultController extends WeixinBaseController {
            JSONObject result = doctorWorkTimeService.isDoctorWorking(doctor);
            return write(200, result.getString("msg"), "data", result.getString("status"));
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "查询失败");
        }
    }
@ -195,6 +197,7 @@ public class ConsultController extends WeixinBaseController {
            int result = doctorWorkTimeService.getDoctorConsultTimesRemain(doctor);
            return write(200, "查询成功", "data", result);
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "查询失败");
        }
    }
@ -236,6 +239,7 @@ public class ConsultController extends WeixinBaseController {
                return write(200, "查询成功", "data", "");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "查询失败");
        }
    }
@ -599,7 +603,7 @@ public class ConsultController extends WeixinBaseController {
            if (consultModel.getEndMsgId() != null) {
                return error(-1, "咨询已结束");
            }
            Patient patient = patientDao.findByCode(getUID());
            String[] arr = null;
            if (type == 2) {
@ -651,36 +655,37 @@ public class ConsultController extends WeixinBaseController {
            List<String> failed = new ArrayList<>();
            for (ConsultTeamLog log : logs) {
                String response = sendTopicIM(getUID(),patient.getName(),consult,String.valueOf(log.getType()),log.getContent());
                if (StringUtils.isNotEmpty(response)) {
                    failed.add(response);
                String url = SystemConf.getInstance().getSystemProperties().getProperty("im_list_get")
                        + (group != null ? "api/v1/chats/gm" : "api/v1/chats/pm");
                List<NameValuePair> params = new ArrayList<>();
                if (group == null) {
                    params.add(new BasicNameValuePair("from", getUID()));
                    params.add(new BasicNameValuePair("to", consultModel.getDoctor()));
                    params.add(new BasicNameValuePair("content", log.getContent()));
                    params.add(new BasicNameValuePair("contentType", String.valueOf(log.getType())));
                } else {
                    params.add(new BasicNameValuePair("from", getUID()));
                    params.add(new BasicNameValuePair("at", ""));
                    params.add(new BasicNameValuePair("group", group.getString("code")));
                    params.add(new BasicNameValuePair("groupType", "2"));
                    params.add(new BasicNameValuePair("content", log.getContent()));
                    params.add(new BasicNameValuePair("contentType", String.valueOf(log.getType())));
                }
                String response = HttpClientUtil.post(url, params, "UTF-8");
                if (StringUtils.isEmpty(response)) {
                    failed.add(arr[i]);
                }
            }
            return write(200, "追问成功!", "data", failed);
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "追问失败!");
        }
    }
    /**
     * 发送消息给IM
     *
     * @param from        来自
     * @param contentType 1文字 2图片消息
     * @param content     内容
     */
    private String sendTopicIM(String from,String fromName, String topicId, String contentType, String content) {
        String url = SystemConf.getInstance().getSystemProperties().getProperty("im_list_get")
                + ("api/v2/sessions/topic/"+topicId+"/messages");
        JSONObject params = new JSONObject();
        params.put("sender_id", from);
        params.put("sender_name", fromName);
        params.put("content_type", contentType);
        params.put("content", content);
        params.put("topic_id", topicId);;
        String response = HttpClientUtil.postBody(url, params);
        return response;
    }
    /**
     * 网络咨询咨询日志查询
@ -694,14 +699,145 @@ public class ConsultController extends WeixinBaseController {
    public String loglist(@RequestParam String consult, @RequestParam long id, @RequestParam int pagesize) {
        try {
            ConsultTeam consultModel = consultTeamService.findByCode(consult);
            if (consultModel == null) {
                return error(-1, "咨询记录不存在!");
            }
            Patient p = patientDao.findByCode(getUID());
            Map<String, Doctor> map = new HashMap<>();
            List<JSONObject> jsonArray = new ArrayList<>();
            JSONObject group = talkGroupService.findConsultTalkGroup(consultModel.getConsult());
            if (group != null) {
                String urlG = SystemConf.getInstance().getSystemProperties().getProperty("im_list_get")
                        + "api/v1/chats/gm";
                String reG = HttpUtil.sendGet(urlG, "user_id=" + getUID() + "&group_id=" + group.getString("code"));
                JSONObject resultG = null;
                if (!org.springframework.util.StringUtils.isEmpty(reG)) {
                    resultG = new JSONObject(new String(reG.getBytes(), "utf-8"));
                }
                if (resultG != null && resultG.getInt("count") > 0) {
                    JSONArray list = resultG.getJSONArray("records");
                    for (int i = 0; i < list.length(); i++) {
                        JSONObject obj = list.getJSONObject(i);
                        if (obj.getInt("contentType") == 5 || obj.getInt("contentType") == 6) {
                            continue;
                        }
                        JSONObject json = new JSONObject();
                        json.put("id", obj.getInt("id"));
                        if (!obj.getString("from").equals(getUID())) {
                            Doctor doc = null;
                            if (map.containsKey(obj.getString("from"))) {
                                doc = map.get(obj.getString("from"));
                            } else {
                                doc = doctorService.findDoctorByCode(obj.getString("from"));
                            }
                            // 设置回复医生姓名
                            json.put("doctorName", doc.getName());
                            json.put("photo", doc.getPhoto());
                        } else {
                            // 设置回复医生姓名
                            json.put("doctorName", p.getName());
                            json.put("photo", p.getPhoto());
                        }
                        // 设置回复内容
                        json.put("content", obj.getString("content"));
                        // 设置咨询或回复时间
                        json.put("time", DateUtil.dateToStr(new Date(obj.getLong("timestamp")), DateUtil.YYYY_MM_DD_HH_MM_SS));
                        // 设置记录类型:1文字,2图片,3语音 4 文章
                        json.put("msgType", obj.getInt("contentType"));
                        // 设置类型:0患者问,1医生回复,2患者追问,3患者评价
                        if (!obj.getString("from").equals(getUID())) {
                            json.put("type", 1);
                        } else {
                            json.put("type", obj.getInt("contentType") == 6 ? 0 : 2);
                        }
                        jsonArray.add(json);
                    }
                }
            }
            JSONObject result = null;
            String url = SystemConf.getInstance().getSystemProperties().getProperty("im_list_get")
                    + "api/v2/sessions/topic/"+consultModel.getConsult()+"/messages?topic_id="+consultModel.getConsult();
            String re = HttpClientUtil.get(url, "UTF-8");
                    + "api/v1/chats/pm";
            String re = HttpUtil.sendGet(url, "closed_interval=true&user_id=" + getUID() + "&peer_id=" + consultModel.getDoctor()
                    + "&message_end_id=" + consultModel.getStartMsgId() + (consultModel.getEndMsgId() != null ? ("&message_start_id=" + consultModel.getEndMsgId()) : ""));
            if (!org.springframework.util.StringUtils.isEmpty(re)) {
                result = new JSONObject(new String(re.getBytes(), "utf-8"));
            }
            if (result != null && result.getInt("count") > 0) {
                JSONArray list = result.getJSONArray("records");
                for (int i = 0; i < list.length(); i++) {
                    JSONObject obj = list.getJSONObject(i);
                    if (obj.getInt("contentType") == 5) {
                        continue;
                    }
                    JSONObject json = new JSONObject();
                    json.put("id", obj.getInt("id"));
                    if (!obj.getString("from").equals(getUID())) {
                        Doctor doc = null;
                        if (map.containsKey(obj.getString("from"))) {
                            doc = map.get(obj.getString("from"));
                        } else {
                            doc = doctorService.findDoctorByCode(obj.getString("from"));
                        }
                        // 设置回复医生姓名
                        json.put("doctorName", doc.getName());
                        json.put("photo", doc.getPhoto());
                    } else {
                        // 设置回复医生姓名
                        json.put("doctorName", p.getName());
                        json.put("photo", p.getPhoto());
                    }
                    // 设置回复内容
                    json.put("content", obj.getString("content"));
                    // 设置咨询或回复时间
                    json.put("time", DateUtil.dateToStr(new Date(obj.getLong("timestamp")), DateUtil.YYYY_MM_DD_HH_MM_SS));
                    // 设置记录类型:1文字,2图片,3语音
                    json.put("msgType", obj.getInt("contentType"));
                    // 设置类型:0患者问,1医生回复,2患者追问,3患者评价
                    if (!obj.getString("from").equals(getUID())) {
                        json.put("type", 1);
                    } else {
                        json.put("type", obj.getInt("contentType") == 6 ? 0 : 2);
                    }
                    jsonArray.add(json);
                }
            }
            jsonArray.sort(new Comparator<JSONObject>() {
                @Override
                public int compare(JSONObject o1, JSONObject o2) {
                    if (o1.getString("time").compareTo(o2.getString("time")) > 0) {
                        return -1;
                    } else if (o1.getString("time").compareTo(o2.getString("time")) < 0) {
                        return 1;
                    } else {
                        return 0;
                    }
                }
            });
            // 返回结果
            return write(200, "查询成功", "list", new JSONArray(re));
            return write(200, "查询成功", "list", new JSONArray(jsonArray));
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "查询失败!");