浏览代码

Merge branch 'dev' of http://192.168.1.220:10080/Amoy2/wlyy2.0 into dev

 Conflicts:
	svr/svr-visit-behind/src/main/java/com/yihu/jw/hospital/utils/CommonUtil.java
wangzhinan 1 年之前
父节点
当前提交
911d527b46

+ 947 - 931
business/im-service/src/main/java/com/yihu/jw/im/util/ImUtil.java

@ -17,958 +17,974 @@ import java.util.List;
/**
/**
 * IM工具类
 * IM工具类
 *
 * @author huangwenjie
 * @author huangwenjie
 */
 */
@Component
@Component
public class ImUtil {
public class ImUtil {
	
	@Autowired
	private HttpClientUtil httpClientUtil;
	
	@Value("${im.im_list_get}")
	private String im_host;
	
	
	public enum ContentType {
		plainText("信息", "1"),
		image("图片信息", "2"),
		audio("创建处方", "3"),
		article("文章信息", "4"),
		goTo("跳转信息,求组其他医生或者邀请其他医生发送的推送消息", "5"),
		topicBegin("议题开始", "6"),
		topicEnd("议题结束", "7"),
		personalCard("个人名片", "18"),
		messageForward("消息转发", "19"),
		topicInto("进入议题", "14"),
		video("视频", "12"),
		system("系统消息", "13"),
		prescriptionCheck("续方审核消息消息", "15"),
		prescriptionBloodStatus("续方咨询血糖血压咨询消息", "16"),
		prescriptionFollowupContent("续方咨询随访问卷消息", "17"),
		Rehabilitation("康复计划发送","20"),
		Reservation("转诊预约发送","21"),
		Know("已知悉","22");
		
		private String name;
		private String value;
		ContentType(String name, String value) {
			this.name = name;
			this.value = value;
		}
		
		public String getName() {
			return name;
		}
		
		public void setName(String name) {
			this.name = name;
		}
		
		public String getValue() {
			return value;
		}
		
		public void setValue(String value) {
			this.value = value;
		}
	}
	public String sendMDTSocketMessageToDoctor(String targetUserId, String message) {
		String imAddr = im_host + "api/v2/message/doctorSystemMessage";
		JSONObject params = new JSONObject();
		params.put("targetUserId", targetUserId);
		params.put("message", message);
		String response = HttpClientUtil.postBody(imAddr,params);
		return response;
	}
	public String sendPcManageMessageToPc(String clientType, String message) {
		String imAddr = im_host + "api/v2/message/cloudCarePcManageMessage";
		JSONObject params = new JSONObject();
		params.put("clientType", clientType);
		params.put("message", message);
		String response = HttpClientUtil.postBody(imAddr,params);
		return response;
	}
	public String sendPatientSystemMessage(String targetUserId, String message) {
		String imAddr = im_host + "api/v2/message/patientSystemMessage";
		JSONObject params = new JSONObject();
		params.put("targetUserId", targetUserId);
		params.put("message", message);
		String response = HttpClientUtil.postBody(imAddr,params);
		return response;
	}
	/**
	 * 发送消息
	 * @param senderId 发送者的code
	 * @param receiverId 接受者code
	 * @param contentType 消息类型 1二维码内容
	 * @param content 消息内容
	 * @return
	 */
	public String sendMessage(String senderId,String receiverId,String contentType,String content){
		String imAddr = im_host + "api/v2/message/send";
		JSONObject params = new JSONObject();
		params.put("sender_id", senderId);
		params.put("sender_name", receiverId);
		params.put("content_type", contentType);
		params.put("content", content);
		String response = HttpClientUtil.postBody(imAddr, params);
		return response;
	}
	
	/**
	 * 获取医生统计数据
	 * status reply 为空值是是该医生总咨询量
	 *
	 * @param user          团队就把团队的医生合并起来用,隔开(医生编码)
	 * @param adminTeamCode
	 * @param status
	 * @param reply
	 * @return
	 */
	public String getConsultData(String user, Integer adminTeamCode, Integer status, Integer reply) {
		String imAddr = im_host + "api/v2/sessions/topics/count/reply";
		imAddr = imAddr + "?user=" + user;
		if (status != null) {
			imAddr += ("&status=" + status);
		}
		if (adminTeamCode != null) {
			imAddr += ("&adminTeamCode=" + adminTeamCode);
		}
		if (reply != null) {
			imAddr += ("&reply=" + reply);
		}
		String response = httpClientUtil.get(imAddr, "UTF-8");
		return response;
	}
	
	public void updateTopics(String topicId, String jsonValue) {
		String imAddr = im_host + "api/v2/sessions/" + topicId + "/topics";
		JSONObject params = new JSONObject();
		params.put("topic_id", topicId);
		params.put("data", jsonValue);
		httpClientUtil.putBody(imAddr, params);
	}
	
	/**
	 * 当前医生下当前团队列表接口
	 * 获取团队内医生的健康咨询状况
	 * status = 10 已结束的咨询,status=0,reply = 1 已回复 ,status=0,reply=0未回复
	 *
	 * @param user          团队就把团队的医生合并起来用,隔开(医生编码)
	 * @param adminTeamCode 行政团队code
	 * @param page
	 * @param pagesize
	 * @param status
	 * @param reply
	 * @return
	 */
	public String getTeamConsultByStatus(String user, Integer adminTeamCode, Integer status, Integer reply, int page, int pagesize) {
		String imAddr = im_host + "api/v2/sessions/healthTeamTopics";
		imAddr = imAddr + "?user=" + user + "&page=" + page + "&pagesize=" + pagesize;
		if (adminTeamCode != null) {
			imAddr += ("&adminTeamCode=" + adminTeamCode);
		}
		if (status != null) {
			imAddr += ("&status=" + status);
		}
		if (reply != null) {
			imAddr += ("&reply=" + reply);
		}
		String response = httpClientUtil.get(imAddr, "UTF-8");
		return response;
	}
	
	/**
	 * 列表接口
	 * 获取团队内医生的健康咨询状况
	 * status = 10 已结束的咨询,status=0,reply = 1 已回复 ,status=0,reply=0未回复
	 *
	 * @param user     团队就把团队的医生合并起来用,隔开(医生编码)
	 * @param page
	 * @param pagesize
	 * @param status
	 * @param reply
	 * @return
	 */
	public String getConsultByStatus(String user, Integer status, Integer reply, int page, int pagesize) {
		String imAddr = im_host + "api/v2/sessions/healthTopics";
		imAddr = imAddr + "?user=" + user + "&page=" + page + "&pagesize=" + pagesize;
		if (status != null) {
			imAddr += ("&status=" + status);
		}
		if (reply != null) {
			imAddr += ("&reply=" + reply);
		}
		String response = httpClientUtil.get(imAddr, "UTF-8");
		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,String patientName,String startTime,String endTime,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);
		}
		if (patientName != null) {
			imAddr += ("&patientName=" + patientName);
		}
		if (startTime != null) {
			imAddr += ("&startTime=" + startTime);
		}
		if (endTime != null) {
			imAddr += ("&endTime=" + endTime);
		}
		String response = httpClientUtil.get(imAddr, "UTF-8");
		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医生发起的求助
	 * @return
	 */
	public String getConsultCountByStatusAndType(String user,Integer status,Integer reply,Integer type,String patientName,String startTime,String endTime){
		String imAddr = im_host + "api/v2/sessions/topicListCountByType";
		imAddr = imAddr + "?user="+user;
		if (status != null) {
			imAddr += ("&status=" + status);
		}
		if (reply != null) {
			imAddr += ("&reply=" + reply);
		}
		if (type != null) {
			imAddr += ("&type=" + type);
		}
		if (patientName != null) {
			imAddr += ("&patientName=" + patientName);
		}
		if (startTime != null) {
			imAddr += ("&startTime=" + startTime);
		}
		if (endTime != null) {
			imAddr += ("&endTime=" + endTime);
		}
		String response = httpClientUtil.get(imAddr, "UTF-8");
		return response;
	}
	
	/**
	 * 发送消息给IM
	 *
	 * @param from        来自
	 * @param contentType 1文字 2图片消息
	 * @param content     内容
	 */
	public static String sendImMsg(String from, String fromName, String sessionId, String contentType, String content, String businessType,String extend) {
    @Autowired
    private HttpClientUtil httpClientUtil;
    @Value("${im.im_list_get}")
    private String im_host;
    public enum ContentType {
        plainText("信息", "1"),
        image("图片信息", "2"),
        audio("创建处方", "3"),
        article("文章信息", "4"),
        goTo("跳转信息,求组其他医生或者邀请其他医生发送的推送消息", "5"),
        topicBegin("议题开始", "6"),
        topicEnd("议题结束", "7"),
        personalCard("个人名片", "18"),
        messageForward("消息转发", "19"),
        topicInto("进入议题", "14"),
        video("视频", "12"),
        system("系统消息", "13"),
        prescriptionCheck("续方审核消息消息", "15"),
        prescriptionBloodStatus("续方咨询血糖血压咨询消息", "16"),
        prescriptionFollowupContent("续方咨询随访问卷消息", "17"),
        Rehabilitation("康复计划发送", "20"),
        Reservation("转诊预约发送", "21"),
        Know("已知悉", "22");
        private String name;
        private String value;
        ContentType(String name, String value) {
            this.name = name;
            this.value = value;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getValue() {
            return value;
        }
        public void setValue(String value) {
            this.value = value;
        }
    }
    public String sendMDTSocketMessageToDoctor(String targetUserId, String message) {
        String imAddr = im_host + "api/v2/message/doctorSystemMessage";
        JSONObject params = new JSONObject();
        params.put("targetUserId", targetUserId);
        params.put("message", message);
        String response = HttpClientUtil.postBody(imAddr, params);
        return response;
    }
    public String sendPcManageMessageToPc(String clientType, String message) {
        String imAddr = im_host + "api/v2/message/cloudCarePcManageMessage";
        JSONObject params = new JSONObject();
        params.put("clientType", clientType);
        params.put("message", message);
        String response = HttpClientUtil.postBody(imAddr, params);
        return response;
    }
    public String sendPatientSystemMessage(String targetUserId, String message) {
        String imAddr = im_host + "api/v2/message/patientSystemMessage";
        JSONObject params = new JSONObject();
        params.put("targetUserId", targetUserId);
        params.put("message", message);
        String response = HttpClientUtil.postBody(imAddr, params);
        return response;
    }
    /**
     * 发送消息
     *
     * @param senderId    发送者的code
     * @param receiverId  接受者code
     * @param contentType 消息类型 1二维码内容
     * @param content     消息内容
     * @return
     */
    public String sendMessage(String senderId, String receiverId, String contentType, String content) {
        String imAddr = im_host + "api/v2/message/send";
        JSONObject params = new JSONObject();
        params.put("sender_id", senderId);
        params.put("sender_name", receiverId);
        params.put("content_type", contentType);
        params.put("content", content);
        String response = HttpClientUtil.postBody(imAddr, params);
        return response;
    }
    /**
     * 获取医生统计数据
     * status reply 为空值是是该医生总咨询量
     *
     * @param user          团队就把团队的医生合并起来用,隔开(医生编码)
     * @param adminTeamCode
     * @param status
     * @param reply
     * @return
     */
    public String getConsultData(String user, Integer adminTeamCode, Integer status, Integer reply) {
        String imAddr = im_host + "api/v2/sessions/topics/count/reply";
        imAddr = imAddr + "?user=" + user;
        if (status != null) {
            imAddr += ("&status=" + status);
        }
        if (adminTeamCode != null) {
            imAddr += ("&adminTeamCode=" + adminTeamCode);
        }
        if (reply != null) {
            imAddr += ("&reply=" + reply);
        }
        String response = httpClientUtil.get(imAddr, "UTF-8");
        return response;
    }
    public void updateTopics(String topicId, String jsonValue) {
        String imAddr = im_host + "api/v2/sessions/" + topicId + "/topics";
        JSONObject params = new JSONObject();
        params.put("topic_id", topicId);
        params.put("data", jsonValue);
        httpClientUtil.putBody(imAddr, params);
    }
    /**
     * 当前医生下当前团队列表接口
     * 获取团队内医生的健康咨询状况
     * status = 10 已结束的咨询,status=0,reply = 1 已回复 ,status=0,reply=0未回复
     *
     * @param user          团队就把团队的医生合并起来用,隔开(医生编码)
     * @param adminTeamCode 行政团队code
     * @param page
     * @param pagesize
     * @param status
     * @param reply
     * @return
     */
    public String getTeamConsultByStatus(String user, Integer adminTeamCode, Integer status, Integer reply, int page, int pagesize) {
        String imAddr = im_host + "api/v2/sessions/healthTeamTopics";
        imAddr = imAddr + "?user=" + user + "&page=" + page + "&pagesize=" + pagesize;
        if (adminTeamCode != null) {
            imAddr += ("&adminTeamCode=" + adminTeamCode);
        }
        if (status != null) {
            imAddr += ("&status=" + status);
        }
        if (reply != null) {
            imAddr += ("&reply=" + reply);
        }
        String response = httpClientUtil.get(imAddr, "UTF-8");
        return response;
    }
    /**
     * 列表接口
     * 获取团队内医生的健康咨询状况
     * status = 10 已结束的咨询,status=0,reply = 1 已回复 ,status=0,reply=0未回复
     *
     * @param user     团队就把团队的医生合并起来用,隔开(医生编码)
     * @param page
     * @param pagesize
     * @param status
     * @param reply
     * @return
     */
    public String getConsultByStatus(String user, Integer status, Integer reply, int page, int pagesize) {
        String imAddr = im_host + "api/v2/sessions/healthTopics";
        imAddr = imAddr + "?user=" + user + "&page=" + page + "&pagesize=" + pagesize;
        if (status != null) {
            imAddr += ("&status=" + status);
        }
        if (reply != null) {
            imAddr += ("&reply=" + reply);
        }
        String response = httpClientUtil.get(imAddr, "UTF-8");
        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, String patientName, String startTime, String endTime, 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);
        }
        if (patientName != null) {
            imAddr += ("&patientName=" + patientName);
        }
        if (startTime != null) {
            imAddr += ("&startTime=" + startTime);
        }
        if (endTime != null) {
            imAddr += ("&endTime=" + endTime);
        }
        String response = httpClientUtil.get(imAddr, "UTF-8");
        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医生发起的求助
     * @return
     */
    public String getConsultCountByStatusAndType(String user, Integer status, Integer reply, Integer type, String patientName, String startTime, String endTime) {
        String imAddr = im_host + "api/v2/sessions/topicListCountByType";
        imAddr = imAddr + "?user=" + user;
        if (status != null) {
            imAddr += ("&status=" + status);
        }
        if (reply != null) {
            imAddr += ("&reply=" + reply);
        }
        if (type != null) {
            imAddr += ("&type=" + type);
        }
        if (patientName != null) {
            imAddr += ("&patientName=" + patientName);
        }
        if (startTime != null) {
            imAddr += ("&startTime=" + startTime);
        }
        if (endTime != null) {
            imAddr += ("&endTime=" + endTime);
        }
        String response = httpClientUtil.get(imAddr, "UTF-8");
        return response;
    }
    /**
     * 发送消息给IM
     *
     * @param from        来自
     * @param contentType 1文字 2图片消息
     * @param content     内容
     */
    public static String sendImMsg(String from, String fromName, String sessionId, String contentType, String content, String businessType, String extend) {
//		String imAddr = im_host + "api/v2/sessions/" + sessionId + "/messages";
//		String imAddr = im_host + "api/v2/sessions/" + sessionId + "/messages";
		String host = ImService.im_host;
		String imAddr = host + "api/v2/sessions/" + sessionId + "/messages";
		System.out.println("im地址"+imAddr);
		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("session_id", sessionId);
		params.put("business_type", businessType);
		params.put("extend",extend);
		String response = HttpClientUtil.postBody(imAddr, params);
		return response;
	}
	/**
	 * 发送消息给IM
	 *
	 * @param from        来自
	 * @param contentType 1文字 2图片消息
	 * @param content     内容
	 */
	public String sendImMsgAgent(String from, String fromName, String sessionId, String contentType, String content, String businessType,String extend,String agent) {
		String imAddr = im_host + "api/v2/sessions/" + sessionId + "/messages";
		System.out.println("im地址"+imAddr);
		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("session_id", sessionId);
		params.put("business_type", businessType);
		params.put("extend",extend);
		params.put("agent",agent);
		String response = HttpClientUtil.postBody(imAddr, params);
		return response;
	}
	/**
	 * 发送消息给IM
	 *
	 * @param from        来自
	 * @param contentType 1文字 2图片消息
	 * @param content     内容
	 */
	public static String sendImMsg(String from, String fromName, String sessionId, String contentType, String content, String businessType) {
        String host = ImService.im_host;
        String imAddr = host + "api/v2/sessions/" + sessionId + "/messages";
        System.out.println("im地址" + imAddr);
        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("session_id", sessionId);
        params.put("business_type", businessType);
        params.put("extend", extend);
        String response = HttpClientUtil.postBody(imAddr, params);
        return response;
    }
    /**
     * 发送消息给IM
     *
     * @param from        来自
     * @param contentType 1文字 2图片消息
     * @param content     内容
     */
    public String sendImMsgAgent(String from, String fromName, String sessionId, String contentType, String content, String businessType, String extend, String agent) {
        String imAddr = im_host + "api/v2/sessions/" + sessionId + "/messages";
        System.out.println("im地址" + imAddr);
        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("session_id", sessionId);
        params.put("business_type", businessType);
        params.put("extend", extend);
        params.put("agent", agent);
        String response = HttpClientUtil.postBody(imAddr, params);
        return response;
    }
    /**
     * 发送消息给IM
     *
     * @param from        来自
     * @param contentType 1文字 2图片消息
     * @param content     内容
     */
    public static String sendImMsg(String from, String fromName, String sessionId, String contentType, String content, String businessType) {
//		String imAddr = im_host + "api/v2/sessions/" + sessionId + "/messages";//原本的
//		String imAddr = im_host + "api/v2/sessions/" + sessionId + "/messages";//原本的
		String host = ImService.im_host;
		String imAddr = host + "api/v2/sessions/" + sessionId + "/messages";
		System.out.println("im地址" + imAddr);
		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("session_id", sessionId);
		params.put("business_type", businessType);
		params.put("extend", null);
        String host = ImService.im_host;
        String imAddr = host + "api/v2/sessions/" + sessionId + "/messages";
        System.out.println("im地址" + imAddr);
        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("session_id", sessionId);
        params.put("business_type", businessType);
        params.put("extend", null);
//		String response = httpClientUtil.postBody(imAddr, params);
//		String response = httpClientUtil.postBody(imAddr, params);
		String response = HttpClientUtil.postBodyStatic(imAddr, params);
		return response;
	}
	/**
	 * 更新会话状态
	 *
	 * @param sessionId 会话ID
	 * @param status    状态
	 */
	public String updateSessionStatus(String sessionId, String status) {
		String imAddr = im_host + "api/v2/sessions/" + sessionId + "/status?status=" + status + "&sessionId=" + sessionId;
		JSONObject params = new JSONObject();
		String response = HttpClientUtil.postBody(imAddr, params);
		return response;
	}
	
	/**
	 * 更新会话状态
	 *
	 * @param sessionId 会话ID
	 * @param status    状态
	 */
	public String updateTopicEvaluate(String sessionId, String status) {
		String imAddr = im_host + "api/v2/sessions/" + sessionId + "/status?status=" + status + "&sessionId=" + sessionId;
		JSONObject params = new JSONObject();
		String response = HttpClientUtil.postBody(imAddr, params);
		return response;
	}
	/**
	 * 发送消息给IM
	 *
	 * @param from        来自
	 * @param contentType 1文字 2图片消息
	 * @param content     内容
	 */
	public String sendTopicIM(String from, String fromName, String topicId, String contentType, String content, String agent) {
		String url = im_host + "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);
		params.put("agent", agent);
		String response = HttpClientUtil.postBody(url, params);
		return response;
	}
	
	/**
	 * 发送消息给IM
	 *
	 * @param from        来自
	 * @param contentType 1文字 2图片消息
	 * @param content     内容
	 */
	public String sendTopicIM(String from, String fromName, String topicId, String contentType, String content, String agent,String patient_name,int patient_sex,int patient_age) {
		String url = im_host + "api/v2/sessions/topic/" + topicId + "/messages";
		JSONObject params = new JSONObject();
		params.put("sender_id", from);
		params.put("sender_name", fromName);
		params.put("patient_name", patient_name);
		params.put("patient_sex", patient_sex);
		params.put("patient_age", patient_age);
		params.put("content_type", contentType);
		params.put("content", content);
		params.put("topic_id", topicId);
		params.put("agent", agent);
		String response = HttpClientUtil.postBody(url, params);
		return response;
	}
	
	/**
	 * 发送进入im消息
	 * IM: ParticipantUpdate:'/:session_id/participant/update'
	 *
	 * @param from
	 * @param sessionId
	 * @param topicId
	 * @return
	 */
	public String sendIntoTopicIM(String from, String sessionId, String topicId, String content, String intoUser, String intoUserName) {
		String url = im_host + "api/v2/sessions/" + sessionId + "/topics/" + topicId + "/into";
		JSONObject params = new JSONObject();
		params.put("sender_id", from);
		params.put("topic_id", topicId);
		params.put("into_user", intoUser);
		params.put("into_user_name", intoUserName);
		params.put("content", content);
		String response = HttpClientUtil.postBody(url, params);
		return response;
	}
	
	
	/**
	 * 更新会话成员(新增或删除)
	 * @param sessionId 会话id
	 * @param user 新增的成员id
	 * @param oldUserId  删除的成员id
	 */
	public String updateParticipant(String sessionId, String user,String oldUserId) {
		String imAddr = im_host + "api/v2/sessions/" + sessionId + "/participant/update";
		JSONObject params = new JSONObject();
		params.put("session_id", sessionId );
		params.put("user_id", user );
		if(!StringUtils.isEmpty(oldUserId)){
			params.put("old_user_id", oldUserId);
		}
		return HttpClientUtil.postBody(imAddr, params);
	}
	/**
	 * 更新会话成员(新增或删除) 活跃成员
	 * @param sessionId 会话id
	 * @param user 新增的成员id
	 * @param oldUserId  删除的成员id
	 */
	public String updateParticipantNew(String sessionId, String user,String oldUserId) {
		String imAddr = im_host + "api/v2/sessions/" + sessionId + "/participant/updateNew";
		JSONObject params = new JSONObject();
		params.put("session_id", sessionId );
		params.put("user_id", user );
		if(!StringUtils.isEmpty(oldUserId)){
			params.put("old_user_id", oldUserId);
		}
		return HttpClientUtil.postBody(imAddr, params);
	}
	
	/**
	 * 更新消息内容
	 * @param sessionId 会话id
	 * @param sessionType 会话类型
	 * @param msgId  消息id
	 * @param content  消息内容
	 */
	public String updateMessage(String sessionId, String sessionType,String msgId,String content) {
		String imAddr = im_host + "api/v2/sessions/" + sessionId + "/messages/"+ msgId +"/update";
		JSONObject params = new JSONObject();
		params.put("session_id", sessionId );
		params.put("session_type", sessionType );
		params.put("message_id", msgId );
		params.put("content", content );
		return HttpClientUtil.postBody(imAddr, params);
	}
	
	/**
	 * 结束议题
	 *
	 * @param topicId     议题ID
	 * @param endUser     结束人
	 * @param endUserName 结束人名字
	 * @param sessionId   会话ID
	 */
	public JSONObject endTopics(String sessionId, String endUser, String endUserName, String topicId) {
		String imAddr = im_host + "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 = JSON.parseObject(ret);
		} catch (Exception e) {
			return null;
		}
		return obj;
	}
	
	
	/**
	 * 议题邀请人员
	 *
	 * @param user      结束人名字
	 * @param sessionId 会话ID
	 */
	public void updateTopicUser(String sessionId, String user) {
		String imAddr = im_host + "api/v2/sessions/" + sessionId + "/participants/" + user;
		JSONObject params = new JSONObject();
		params.put("user", user + ":" + 0);
		httpClientUtil.putBody(imAddr, params);
	}
	
	/**
	 * 创建议题
	 *
	 * @param topicId      议题ID
	 * @param topicName    议题名称
	 * @param participants 成员
	 */
	public JSONObject createTopics(String sessionId, String topicId, String topicName, JSONObject participants, JSONObject messages, String sessionType) {
		String imAddr = im_host + "api/v2/sessions/" + topicId + "/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 = JSON.parseObject(ret);
		} catch (Exception e) {
			return null;
		}
		return obj;
	}
	
	/**
	 * 判断会话是否存在
	 */
	public Boolean sessionIsExist(String sessionId) {
		Boolean re = false;
		String url = im_host + "api/v2/sessions/isExist?session_id="+sessionId;
		JSONObject params = new JSONObject();
		String ret = httpClientUtil.get(url, "UTF-8");
		JSONObject obj = null;
		try {
			obj = JSON.parseObject(ret);
			if(obj.getInteger("status") ==200&&sessionId.equals(obj.getString("sessionId"))){
				String sessionStatus = obj.getString("sessionId");
				if (StringUtils.isNoneBlank(sessionStatus)){
					String sessionStatusUrl = im_host + "api/v2/sessions/"+sessionId+"/status?status=0&sessionId="+sessionId;
					JSONObject object = new JSONObject();
					String rs = HttpClientUtil.postBody(sessionStatusUrl, object);
				}
				re = true;
			}
		} catch (Exception e) {
			return null;
		}
		return re;
	}
	
	/**
	 * 创建会话(system)
	 */
	public static JSONObject createSession(JSONObject participants, String sessionType, String sessionName, String sessionId) {
        String response = HttpClientUtil.postBodyStatic(imAddr, params);
        return response;
    }
    /**
     * 更新会话状态
     *
     * @param sessionId 会话ID
     * @param status    状态
     */
    public String updateSessionStatus(String sessionId, String status) {
        String imAddr = im_host + "api/v2/sessions/" + sessionId + "/status?status=" + status + "&sessionId=" + sessionId;
        JSONObject params = new JSONObject();
        String response = HttpClientUtil.postBody(imAddr, params);
        return response;
    }
    /**
     * 更新会话状态
     *
     * @param sessionId 会话ID
     * @param status    状态
     */
    public String updateTopicEvaluate(String sessionId, String status) {
        String imAddr = im_host + "api/v2/sessions/" + sessionId + "/status?status=" + status + "&sessionId=" + sessionId;
        JSONObject params = new JSONObject();
        String response = HttpClientUtil.postBody(imAddr, params);
        return response;
    }
    /**
     * 发送消息给IM
     *
     * @param from        来自
     * @param contentType 1文字 2图片消息
     * @param content     内容
     */
    public String sendTopicIM(String from, String fromName, String topicId, String contentType, String content, String agent) {
        String url = im_host + "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);
        params.put("agent", agent);
        String response = HttpClientUtil.postBody(url, params);
        return response;
    }
    /**
     * 发送消息给IM
     *
     * @param from        来自
     * @param contentType 1文字 2图片消息
     * @param content     内容
     */
    public String sendTopicIM(String from, String fromName, String topicId, String contentType, String content, String agent, String patient_name, int patient_sex, int patient_age) {
        String url = im_host + "api/v2/sessions/topic/" + topicId + "/messages";
        JSONObject params = new JSONObject();
        params.put("sender_id", from);
        params.put("sender_name", fromName);
        params.put("patient_name", patient_name);
        params.put("patient_sex", patient_sex);
        params.put("patient_age", patient_age);
        params.put("content_type", contentType);
        params.put("content", content);
        params.put("topic_id", topicId);
        params.put("agent", agent);
        String response = HttpClientUtil.postBody(url, params);
        return response;
    }
    /**
     * 发送进入im消息
     * IM: ParticipantUpdate:'/:session_id/participant/update'
     *
     * @param from
     * @param sessionId
     * @param topicId
     * @return
     */
    public String sendIntoTopicIM(String from, String sessionId, String topicId, String content, String intoUser, String intoUserName) {
        String url = im_host + "api/v2/sessions/" + sessionId + "/topics/" + topicId + "/into";
        JSONObject params = new JSONObject();
        params.put("sender_id", from);
        params.put("topic_id", topicId);
        params.put("into_user", intoUser);
        params.put("into_user_name", intoUserName);
        params.put("content", content);
        String response = HttpClientUtil.postBody(url, params);
        return response;
    }
    /**
     * 更新会话成员(新增或删除)
     *
     * @param sessionId 会话id
     * @param user      新增的成员id
     * @param oldUserId 删除的成员id
     */
    public String updateParticipant(String sessionId, String user, String oldUserId) {
        String imAddr = im_host + "api/v2/sessions/" + sessionId + "/participant/update";
        JSONObject params = new JSONObject();
        params.put("session_id", sessionId);
        params.put("user_id", user);
        if (!StringUtils.isEmpty(oldUserId)) {
            params.put("old_user_id", oldUserId);
        }
        return HttpClientUtil.postBody(imAddr, params);
    }
    /**
     * 更新会话成员(新增或删除) 活跃成员
     *
     * @param sessionId 会话id
     * @param user      新增的成员id
     * @param oldUserId 删除的成员id
     */
    public String updateParticipantNew(String sessionId, String user, String oldUserId) {
        String imAddr = im_host + "api/v2/sessions/" + sessionId + "/participant/updateNew";
        JSONObject params = new JSONObject();
        params.put("session_id", sessionId);
        params.put("user_id", user);
        if (!StringUtils.isEmpty(oldUserId)) {
            params.put("old_user_id", oldUserId);
        }
        return HttpClientUtil.postBody(imAddr, params);
    }
    /**
     * 更新消息内容
     *
     * @param sessionId   会话id
     * @param sessionType 会话类型
     * @param msgId       消息id
     * @param content     消息内容
     */
    public String updateMessage(String sessionId, String sessionType, String msgId, String content) {
        String imAddr = im_host + "api/v2/sessions/" + sessionId + "/messages/" + msgId + "/update";
        JSONObject params = new JSONObject();
        params.put("session_id", sessionId);
        params.put("session_type", sessionType);
        params.put("message_id", msgId);
        params.put("content", content);
        return HttpClientUtil.postBody(imAddr, params);
    }
    /**
     * 结束议题
     *
     * @param topicId     议题ID
     * @param endUser     结束人
     * @param endUserName 结束人名字
     * @param sessionId   会话ID
     */
    public JSONObject endTopics(String sessionId, String endUser, String endUserName, String topicId) {
        String imAddr = im_host + "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 = JSON.parseObject(ret);
        } catch (Exception e) {
            return null;
        }
        return obj;
    }
    /**
     * 议题邀请人员
     *
     * @param user      结束人名字
     * @param sessionId 会话ID
     */
    public void updateTopicUser(String sessionId, String user) {
        String imAddr = im_host + "api/v2/sessions/" + sessionId + "/participants/" + user;
        JSONObject params = new JSONObject();
        params.put("user", user + ":" + 0);
        httpClientUtil.putBody(imAddr, params);
    }
    /**
     * 创建议题
     *
     * @param topicId      议题ID
     * @param topicName    议题名称
     * @param participants 成员
     */
    public JSONObject createTopics(String sessionId, String topicId, String topicName, JSONObject participants, JSONObject messages, String sessionType) {
        JSONObject obj = null;
        try {
            String imAddr = im_host + "api/v2/sessions/" + topicId + "/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);
            obj = JSON.parseObject(ret);
        } catch (Exception e) {
			System.out.println("创建议题失败:topicId=>" + topicId);
            return null;
        }
        return obj;
    }
    /**
     * 判断会话是否存在
     */
    public Boolean sessionIsExist(String sessionId) {
        Boolean re = false;
        String url = im_host + "api/v2/sessions/isExist?session_id=" + sessionId;
        JSONObject params = new JSONObject();
        String ret = httpClientUtil.get(url, "UTF-8");
        JSONObject obj = null;
        try {
            obj = JSON.parseObject(ret);
            if (obj.getInteger("status") == 200 && sessionId.equals(obj.getString("sessionId"))) {
                String sessionStatus = obj.getString("sessionId");
                if (StringUtils.isNoneBlank(sessionStatus)) {
                    String sessionStatusUrl = im_host + "api/v2/sessions/" + sessionId + "/status?status=0&sessionId=" + sessionId;
                    JSONObject object = new JSONObject();
                    String rs = HttpClientUtil.postBody(sessionStatusUrl, object);
                }
                re = true;
            }
        } catch (Exception e) {
            return null;
        }
        return re;
    }
    /**
     * 创建会话(system)
     */
    public static JSONObject createSession(JSONObject participants, String sessionType, String sessionName, String sessionId) {
//		String imAddr = im_host + "api/v2/sessions";
//		String imAddr = im_host + "api/v2/sessions";
		String imAddr = ImService.im_host + "/sessions";
		JSONObject params = new JSONObject();
		params.put("participants", participants.toString());
		params.put("session_name", sessionName);
		params.put("session_type", sessionType);
		params.put("session_id", sessionId);
		String ret = HttpClientUtil.postBody(imAddr, params);
		JSONObject obj = null;
		try {
			obj = JSON.parseObject(ret);
		} catch (Exception e) {
			return null;
		}
		return obj;
	}
	
	/**
	 * 获取会话实例的消息对象
	 *
	 * @param senderId
	 * @param senderName
	 * @param title
	 * @param description
	 * @param images
	 * @param agent
	 * @return
	 */
	public JSONObject getCreateTopicMessage(String senderId, String senderName, String title, String description, String images, String agent) {
		JSONObject messages = new JSONObject();
		messages.put("description", description);
		messages.put("title", title);
		messages.put("img", images);
		messages.put("sender_id", senderId);
		messages.put("sender_name", senderName);
		messages.put("agent", agent);
		return messages;
	}
	
	public JSONObject getTopicMessage(String topicId, String startMsgId, String endMsgId, int page, int pagesize, String uid) {
		String url = im_host
				+ "api/v2/sessions/topic/" + topicId + "/messages?topic_id=" + topicId + "&end=" + startMsgId
				+ "&start=" + (endMsgId == null ? "" : endMsgId) + "&page=" + page + "&pagesize=" + pagesize + "&user=" + uid;
		try {
			String ret = httpClientUtil.get(url, "UTF-8");
			JSONObject obj = JSON.parseObject(ret);
			if (obj.getInteger("status") == -1) {
				throw new RuntimeException(obj.getString("message"));
			} else {
				return obj.getJSONObject("data");
			}
		} catch (Exception e) {
			return null;
		}
		
	}
	
	public JSONArray getSessionMessage(String sessionId, String startMsgId, String endMsgId, int page, int pagesize, String uid) {
		String url = im_host + "api/v2/sessions/" + sessionId + "/messages?session_id=" + sessionId + "&user=" + uid + "&start_message_id=" + startMsgId + "&end_message_id=" + endMsgId + "&page=" + page + "&pagesize=" + pagesize;
		try {
			String ret = httpClientUtil.get(url, "UTF-8");
			JSONArray obj = JSON.parseArray(ret);
			return obj;
		} catch (Exception e) {
			return null;
		}
	}
	
	/**
	 * 删除对应的成员信息在MUC模式中
	 *
	 * @param userId
	 * @param oldUserId
	 * @param sessionId
	 * @return
	 */
	public JSONObject deleteMucUser(String userId, String oldUserId, String sessionId) throws Exception {
		String url = im_host + "api/v2/sessions/" + sessionId + "/participant/update";
		try {
			JSONObject params = new JSONObject();
			params.put("user_id", userId);
			params.put("old_user_id", oldUserId);
			params.put("session_id", sessionId);
			String ret = HttpClientUtil.postBody(url, params);
			JSONObject obj = JSON.parseObject(ret);
			if (obj.getInteger("status") == -1) {
				throw new RuntimeException("人员更换失败!");
			} else {
				return obj;
			}
		} catch (Exception e) {
			throw new RuntimeException("人员更换失败!");
		}
	}
	/**
	 * 删除会话人员
	 * @param sessionId
	 * @param participants
	 * @return
	 */
	public JSONObject deleteParticipants(String sessionId,String participants){
		String url  = im_host+"api/v2/sessions/"+sessionId+"/participants/"+participants;
		String rs = HttpClientUtil.doDelete(url,null,null);
		JSONObject obj = JSONObject.parseObject(rs);
		if (obj.getInteger("status")==-1){
			throw new RuntimeException("删除会话人员失败!");
		}else {
			return obj;
		}
	}
	
	
	/**
	 * 获取议题
	 *
	 * @param topicId
	 * @return
	 */
	public JSONObject getTopic(String topicId) throws Exception {
		String url = im_host + "api/v2/sessions/topics/" + topicId + "?topic_id=" + topicId;
		try {
			String ret = httpClientUtil.get(url, "utf-8");
			JSONObject obj = JSON.parseObject(ret);
			if (obj.getInteger("status") == -1) {
				throw new RuntimeException("获取议题失败!");
			} else {
				return obj;
			}
		} catch (Exception e) {
			throw new RuntimeException("获取议题失败!");
		}
	}
	
	/**
	 * 获取会话成员
	 *
	 * @param sessionId
	 * @return
	 * @throws Exception
	 */
	public JSONArray getParticipants(String sessionId) {
		String url = im_host + "api/v2/sessions/" + sessionId + "/participants?session_id=" + sessionId;
		try {
			String ret = httpClientUtil.get(url, "utf-8");
			return JSON.parseArray(ret);
		} catch (Exception e) {
			throw new RuntimeException("获取会话成员!sessionId =" + sessionId);
		}
	}
	
	/**
	 * 获取会话成员
	 *
	 * @param sessionId
	 * @return
	 * @throws Exception
	 */
	public JSONArray getSessions(String sessionId) {
		String url = im_host + "api/v2/sessions/" + sessionId + "/participants?session_id=" + sessionId;
		try {
			String ret = httpClientUtil.get(url, "utf-8");
			return JSON.parseArray(ret);
		} catch (Exception e) {
			throw new RuntimeException("获取议题失败!");
		}
	}
	
	public JSONObject cleanMessageToRedis(String sessionId){
		String url = im_host + "api/v2/message/dataMessage?sessionId="+sessionId;
		try {
			String ret = httpClientUtil.get(url,"utf-8");
			return JSON.parseObject(ret);
		} catch (Exception e) {
			throw new RuntimeException("操作失败!");
		}
	}
	
	public JSONObject cleanMessageLastFetchTime(String sessionId,String userId){
		String url = im_host + "api/v2/message/cleanMessageLastFetchTimeToRedis?sessionId="+sessionId+"&userId="+userId;
		try {
			String ret = httpClientUtil.get(url,"utf-8");
			return JSON.parseObject(ret);
		} catch (Exception e) {
			throw new RuntimeException("操作失败!");
		}
	}
	
	
	/**
	 * 根据session和userid获取单个会话
	 * @param sessionId
	 * @param userId
	 * @return
	 */
	public JSONObject getSingleSessionInfo(String sessionId,String userId){
		String url = im_host + "api/v2/sessions/" + sessionId + "/session?user_id=" + userId;
		try {
			String ret = httpClientUtil.get(url,"utf-8");
			return JSON.parseObject(ret);
		} catch (Exception e) {
			throw new RuntimeException("操作失败!");
		}
	}
	
	/**
	 * 发送消息给IM
	 *
	 * @param from        来自
	 * @param to
	 * @param contentType 1文字 2图片消息
	 * @param content     内容
	 */
	public String sendIM(String from, String to, String contentType, String content) {
		String imAddr = im_host + "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;
	}
	
	
	public static final String SESSION_TYPE_MUC = "1";
	public static final String SESSION_TYPE_P2P = "2";
	public static final String SESSION_TYPE_GROUP = "3";
	public static final String SESSION_TYPE_SYSTEM = "0";
	public static final String SESSION_TYPE_PRESCRIPTION = "8";//续方
	public static final String SESSION_TYPE_KANGFU = "18";//续方
	public static final String SESSION_TYPE_EXAMINATION = "9";//在线复诊-图文
	public static final String SESSION_TYPE_ONDOOR_NURSING = "11";//上门护理
	public static final String SESSION_TYPE_COLLABORATION_HOSPITAL = "12";///互联网医院协同门诊
	public static final String SESSION_TYPE_GUIDANCE_HOSPITAL = "14";//互联网医院居民导诊聊天
	public static final String SESSION_TYPE_GENERAL_EXPERT = "15";//全科医生发起求助专科医生的专家咨询
	public static final String SESSION_TYPE_EXAMINATION_VIDEO = "16";//在线复诊-视频
	public static final String SESSION_TYPE_MUC_VIDEO = "17";//专家-视频
	public static final String SESSION_TYPE_GUIDANCE_ASSISTANT = "18";//导诊助手
	public static final String SESSION_STATUS_PROCEEDINGS = "0";
	public static final String SESSION_STATUS_END = "1";
	public static final String SESSION_TYPE_EMERGENCY_ASSISTANCE = "20";//紧急救助
	public static final String SESSION_TYPE_DOOR_COACH = "21";//上门辅导(上门预约)
	public static final String SESSION_TYPE_SECURITY_WARN = "22";//安防咨询
	public static final String SESSION_TYPE_ONLINE = "23";//新生儿在线咨询
	public static final String SESSION_TYPE_ONLINEAged = "24";//老人在线咨询
	public static final String SESSION_TYPE_HealthConsult = "25";//老人在线咨询
	public static final String CONTENT_TYPE_TEXT = "1";
	
	
	/**
	 *按会话类型获取会话总数
	 * @param userid
	 * @param type
	 * @param status
	 * @return
	 */
	public Integer sessionCountByType(String userid,Integer type,Integer status){
		String url = im_host + "api/v2/sessions/sessionCountByType?user_id="+userid+"&type="+type+"&status="+status;
		String ret = httpClientUtil.get(url,"utf-8");
		JSONObject obj = JSON.parseObject(ret);
		if(obj.getInteger("status") ==200){
			return obj.getInteger("count");
		}else{
			return 0;
		}
	}
	public Integer SessionsUnreadMessageCountByUserId(String userid){
		String url = im_host + "api/v2/sessions/unread_message_count?user_id="+userid;
        String imAddr = ImService.im_host + "/sessions";
        JSONObject params = new JSONObject();
        params.put("participants", participants.toString());
        params.put("session_name", sessionName);
        params.put("session_type", sessionType);
        params.put("session_id", sessionId);
        String ret = HttpClientUtil.postBody(imAddr, params);
        JSONObject obj = null;
        try {
            obj = JSON.parseObject(ret);
        } catch (Exception e) {
            return null;
        }
        return obj;
    }
    /**
     * 获取会话实例的消息对象
     *
     * @param senderId
     * @param senderName
     * @param title
     * @param description
     * @param images
     * @param agent
     * @return
     */
    public JSONObject getCreateTopicMessage(String senderId, String senderName, String title, String description, String images, String agent) {
        JSONObject messages = new JSONObject();
        messages.put("description", description);
        messages.put("title", title);
        messages.put("img", images);
        messages.put("sender_id", senderId);
        messages.put("sender_name", senderName);
        messages.put("agent", agent);
        return messages;
    }
    public JSONObject getTopicMessage(String topicId, String startMsgId, String endMsgId, int page, int pagesize, String uid) {
        String url = im_host
                + "api/v2/sessions/topic/" + topicId + "/messages?topic_id=" + topicId + "&end=" + startMsgId
                + "&start=" + (endMsgId == null ? "" : endMsgId) + "&page=" + page + "&pagesize=" + pagesize + "&user=" + uid;
        try {
            String ret = httpClientUtil.get(url, "UTF-8");
            JSONObject obj = JSON.parseObject(ret);
            if (obj.getInteger("status") == -1) {
                throw new RuntimeException(obj.getString("message"));
            } else {
                return obj.getJSONObject("data");
            }
        } catch (Exception e) {
            return null;
        }
    }
    public JSONArray getSessionMessage(String sessionId, String startMsgId, String endMsgId, int page, int pagesize, String uid) {
        String url = im_host + "api/v2/sessions/" + sessionId + "/messages?session_id=" + sessionId + "&user=" + uid + "&start_message_id=" + startMsgId + "&end_message_id=" + endMsgId + "&page=" + page + "&pagesize=" + pagesize;
        try {
            String ret = httpClientUtil.get(url, "UTF-8");
            JSONArray obj = JSON.parseArray(ret);
            return obj;
        } catch (Exception e) {
            return null;
        }
    }
    /**
     * 删除对应的成员信息在MUC模式中
     *
     * @param userId
     * @param oldUserId
     * @param sessionId
     * @return
     */
    public JSONObject deleteMucUser(String userId, String oldUserId, String sessionId) throws Exception {
        String url = im_host + "api/v2/sessions/" + sessionId + "/participant/update";
        try {
            JSONObject params = new JSONObject();
            params.put("user_id", userId);
            params.put("old_user_id", oldUserId);
            params.put("session_id", sessionId);
            String ret = HttpClientUtil.postBody(url, params);
            JSONObject obj = JSON.parseObject(ret);
            if (obj.getInteger("status") == -1) {
                throw new RuntimeException("人员更换失败!");
            } else {
                return obj;
            }
        } catch (Exception e) {
            throw new RuntimeException("人员更换失败!");
        }
    }
    /**
     * 删除会话人员
     *
     * @param sessionId
     * @param participants
     * @return
     */
    public JSONObject deleteParticipants(String sessionId, String participants) {
        String url = im_host + "api/v2/sessions/" + sessionId + "/participants/" + participants;
        String rs = HttpClientUtil.doDelete(url, null, null);
        JSONObject obj = JSONObject.parseObject(rs);
        if (obj.getInteger("status") == -1) {
            throw new RuntimeException("删除会话人员失败!");
        } else {
            return obj;
        }
    }
    /**
     * 获取议题
     *
     * @param topicId
     * @return
     */
    public JSONObject getTopic(String topicId) throws Exception {
        String url = im_host + "api/v2/sessions/topics/" + topicId + "?topic_id=" + topicId;
        try {
            String ret = httpClientUtil.get(url, "utf-8");
            JSONObject obj = JSON.parseObject(ret);
            if (obj.getInteger("status") == -1) {
                throw new RuntimeException("获取议题失败!");
            } else {
                return obj;
            }
        } catch (Exception e) {
            throw new RuntimeException("获取议题失败!");
        }
    }
    /**
     * 获取会话成员
     *
     * @param sessionId
     * @return
     * @throws Exception
     */
    public JSONArray getParticipants(String sessionId) {
        String url = im_host + "api/v2/sessions/" + sessionId + "/participants?session_id=" + sessionId;
        try {
            String ret = httpClientUtil.get(url, "utf-8");
            return JSON.parseArray(ret);
        } catch (Exception e) {
            throw new RuntimeException("获取会话成员!sessionId =" + sessionId);
        }
    }
    /**
     * 获取会话成员
     *
     * @param sessionId
     * @return
     * @throws Exception
     */
    public JSONArray getSessions(String sessionId) {
        String url = im_host + "api/v2/sessions/" + sessionId + "/participants?session_id=" + sessionId;
        try {
            String ret = httpClientUtil.get(url, "utf-8");
            return JSON.parseArray(ret);
        } catch (Exception e) {
            throw new RuntimeException("获取议题失败!");
        }
    }
    public JSONObject cleanMessageToRedis(String sessionId) {
        String url = im_host + "api/v2/message/dataMessage?sessionId=" + sessionId;
        try {
            String ret = httpClientUtil.get(url, "utf-8");
            return JSON.parseObject(ret);
        } catch (Exception e) {
            throw new RuntimeException("操作失败!");
        }
    }
    public JSONObject cleanMessageLastFetchTime(String sessionId, String userId) {
        String url = im_host + "api/v2/message/cleanMessageLastFetchTimeToRedis?sessionId=" + sessionId + "&userId=" + userId;
        try {
            String ret = httpClientUtil.get(url, "utf-8");
            return JSON.parseObject(ret);
        } catch (Exception e) {
            throw new RuntimeException("操作失败!");
        }
    }
    /**
     * 根据session和userid获取单个会话
     *
     * @param sessionId
     * @param userId
     * @return
     */
    public JSONObject getSingleSessionInfo(String sessionId, String userId) {
        String url = im_host + "api/v2/sessions/" + sessionId + "/session?user_id=" + userId;
        try {
            String ret = httpClientUtil.get(url, "utf-8");
            return JSON.parseObject(ret);
        } catch (Exception e) {
            throw new RuntimeException("操作失败!");
        }
    }
    /**
     * 发送消息给IM
     *
     * @param from        来自
     * @param to
     * @param contentType 1文字 2图片消息
     * @param content     内容
     */
    public String sendIM(String from, String to, String contentType, String content) {
        String imAddr = im_host + "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;
    }
    public static final String SESSION_TYPE_MUC = "1";
    public static final String SESSION_TYPE_P2P = "2";
    public static final String SESSION_TYPE_GROUP = "3";
    public static final String SESSION_TYPE_SYSTEM = "0";
    public static final String SESSION_TYPE_PRESCRIPTION = "8";//续方
    public static final String SESSION_TYPE_KANGFU = "18";//续方
    public static final String SESSION_TYPE_EXAMINATION = "9";//在线复诊-图文
    public static final String SESSION_TYPE_ONDOOR_NURSING = "11";//上门护理
    public static final String SESSION_TYPE_COLLABORATION_HOSPITAL = "12";///互联网医院协同门诊
    public static final String SESSION_TYPE_GUIDANCE_HOSPITAL = "14";//互联网医院居民导诊聊天
    public static final String SESSION_TYPE_GENERAL_EXPERT = "15";//全科医生发起求助专科医生的专家咨询
    public static final String SESSION_TYPE_EXAMINATION_VIDEO = "16";//在线复诊-视频
    public static final String SESSION_TYPE_MUC_VIDEO = "17";//专家-视频
    public static final String SESSION_TYPE_GUIDANCE_ASSISTANT = "18";//导诊助手
    public static final String SESSION_STATUS_PROCEEDINGS = "0";
    public static final String SESSION_STATUS_END = "1";
    public static final String SESSION_TYPE_EMERGENCY_ASSISTANCE = "20";//紧急救助
    public static final String SESSION_TYPE_DOOR_COACH = "21";//上门辅导(上门预约)
    public static final String SESSION_TYPE_SECURITY_WARN = "22";//安防咨询
    public static final String SESSION_TYPE_ONLINE = "23";//新生儿在线咨询
    public static final String SESSION_TYPE_ONLINEAged = "24";//老人在线咨询
    public static final String SESSION_TYPE_HealthConsult = "25";//老人在线咨询
    public static final String CONTENT_TYPE_TEXT = "1";
    /**
     * 按会话类型获取会话总数
     *
     * @param userid
     * @param type
     * @param status
     * @return
     */
    public Integer sessionCountByType(String userid, Integer type, Integer status) {
        String url = im_host + "api/v2/sessions/sessionCountByType?user_id=" + userid + "&type=" + type + "&status=" + status;
        String ret = httpClientUtil.get(url, "utf-8");
        JSONObject obj = JSON.parseObject(ret);
        if (obj.getInteger("status") == 200) {
            return obj.getInteger("count");
        } else {
            return 0;
        }
    }
    public Integer SessionsUnreadMessageCountByUserId(String userid) {
        String url = im_host + "api/v2/sessions/unread_message_count?user_id=" + userid;
//		String url = "http://ehr.yihu.com/api/v2/sessions/unread_message_count?user_id="+userid;
//		String url = "http://ehr.yihu.com/api/v2/sessions/unread_message_count?user_id="+userid;
		String ret = httpClientUtil.get(url,"utf-8");
		JSONObject obj = JSON.parseObject(ret);
        String ret = httpClientUtil.get(url, "utf-8");
        JSONObject obj = JSON.parseObject(ret);
//		if(obj.getInteger("count") ==200){
//		if(obj.getInteger("count") ==200){
		return obj.getInteger("count");
        return obj.getInteger("count");
//		}else{
//		}else{
//			return 0;
//			return 0;
//		}
//		}
	}
	/**
	 *获取所有会话未读消息数。
	 * @param userid
	 * @param type
	 * @return
	 */
	public Integer SessionsUnreadMessageCount(String userid,String type,String senderId){
		String url = im_host + "api/v2/sessions/unread_message_count?user_id="+userid+"&type="+type;
		if (StringUtils.isNotBlank(senderId)){
			url+="&senderId="+senderId;
		}
		String ret = httpClientUtil.get(url,"utf-8");
		JSONObject obj = JSON.parseObject(ret);
    }
    /**
     * 获取所有会话未读消息数。
     *
     * @param userid
     * @param type
     * @return
     */
    public Integer SessionsUnreadMessageCount(String userid, String type, String senderId) {
        String url = im_host + "api/v2/sessions/unread_message_count?user_id=" + userid + "&type=" + type;
        if (StringUtils.isNotBlank(senderId)) {
            url += "&senderId=" + senderId;
        }
        String ret = httpClientUtil.get(url, "utf-8");
        JSONObject obj = JSON.parseObject(ret);
//		if(obj.getInteger("count") ==200){
//		if(obj.getInteger("count") ==200){
		return obj.getInteger("count");
        return obj.getInteger("count");
//		}else{
//		}else{
//			return 0;
//			return 0;
//		}
//		}
	}
	/**
	 *获取某个会话某个对象的未读消息数。
	 * @param
	 * @return
	 */
	public Integer UserSessionsUnreadMessageCount(String session,String userid){
		String url = im_host + "api/v2/sessions/"+session+"/unread_message_count?user_id="+userid;
		String ret = httpClientUtil.get(url,"utf-8");
		JSONObject obj = JSON.parseObject(ret);
    }
    /**
     * 获取某个会话某个对象的未读消息数。
     *
     * @param
     * @return
     */
    public Integer UserSessionsUnreadMessageCount(String session, String userid) {
        String url = im_host + "api/v2/sessions/" + session + "/unread_message_count?user_id=" + userid;
        String ret = httpClientUtil.get(url, "utf-8");
        JSONObject obj = JSON.parseObject(ret);
//		if(obj.getInteger("count") ==200){
//		if(obj.getInteger("count") ==200){
		return obj.getInteger("count");
        return obj.getInteger("count");
//		}else{
//		}else{
//			return 0;
//			return 0;
//		}
//		}
	}
	/**
	 * 获取会话未读消息数量
	 * @param sessionId
	 * @param userId
	 * @return
	 */
	public JSONObject getSessionUnreadMessageCount(String sessionId, String userId) {
		String url = im_host + "api/v2/sessions/" + sessionId + "/unread_message_count?user_id=" + userId;
		try {
			String ret = httpClientUtil.get(url, "utf-8");
			return  JSONObject.parseObject(ret);
		} catch (Exception e) {
			throw new RuntimeException("获取会话成员!sessionId =" + sessionId);
		}
	}
	/**
	 * 获取在线人数
	 * helper 社工,teacher 教师,child 幼儿,olderWx 老人公众号,olderPad 老人平板
	 */
	public String getOnlineCountByType(String type) {
		String url = im_host + "api/v2/sessions/getOnlineCountByType?type="+type;
		String ret = httpClientUtil.get(url, "UTF-8");
		return ret;
	}
	/**
	 * 获取在线人数列表
	 * helper 社工,teacher 教师,child 幼儿,olderWx 老人公众号,olderPad 老人平板
	 */
	public String getOnlineListByType(String type) {
		String url = im_host + "api/v2/sessions/getOnlineListByType?type="+type;
		String ret = httpClientUtil.get(url, "UTF-8");
		return ret;
	}
	/**
	 * 获取在线状态
	 * helper 社工,teacher 教师,child 幼儿,older 老人
	 * 返回 {"status":200,"data":1} data>0 说明在线 data =0 不在线
	 */
	public String findByUserIdAndType(String userId,String type) {
		String url = im_host + "api/v2/sessions/findByUserIdAndType?userId="+userId+"&type="+type;
		String ret = httpClientUtil.get(url, "UTF-8");
		return ret;
	}
	/**
	 *按会话类型、会话状态获取会话列表
	 * @param user_id
	 * @param page
	 * @param size
	 * @param type
	 * @param status 不传为获取所有状态
	 * @param name
	 * @param search_type 仅当type为2时有效 1与医生p2p会话 2与患者p2p
	 * @return
	 */
	public String getSessionListByType(String user_id, String page, String size, String type, String status, String name,String search_type){
		String url = im_host + "api/v2/sessions/sessionListByType?user_id="+user_id+"&page="+page+"&size="+size+"&type="+type+"&status="+(status==null?"":status)+"&name="+(name==null?"":name)+"&search_type="+(search_type==null?"":search_type);
		String ret = httpClientUtil.get(url, "utf-8");
		return ret;
	}
    }
    /**
     * 获取会话未读消息数量
     *
     * @param sessionId
     * @param userId
     * @return
     */
    public JSONObject getSessionUnreadMessageCount(String sessionId, String userId) {
        String url = im_host + "api/v2/sessions/" + sessionId + "/unread_message_count?user_id=" + userId;
        try {
            String ret = httpClientUtil.get(url, "utf-8");
            return JSONObject.parseObject(ret);
        } catch (Exception e) {
            throw new RuntimeException("获取会话成员!sessionId =" + sessionId);
        }
    }
    /**
     * 获取在线人数
     * helper 社工,teacher 教师,child 幼儿,olderWx 老人公众号,olderPad 老人平板
     */
    public String getOnlineCountByType(String type) {
        String url = im_host + "api/v2/sessions/getOnlineCountByType?type=" + type;
        String ret = httpClientUtil.get(url, "UTF-8");
        return ret;
    }
    /**
     * 获取在线人数列表
     * helper 社工,teacher 教师,child 幼儿,olderWx 老人公众号,olderPad 老人平板
     */
    public String getOnlineListByType(String type) {
        String url = im_host + "api/v2/sessions/getOnlineListByType?type=" + type;
        String ret = httpClientUtil.get(url, "UTF-8");
        return ret;
    }
    /**
     * 获取在线状态
     * helper 社工,teacher 教师,child 幼儿,older 老人
     * 返回 {"status":200,"data":1} data>0 说明在线 data =0 不在线
     */
    public String findByUserIdAndType(String userId, String type) {
        String url = im_host + "api/v2/sessions/findByUserIdAndType?userId=" + userId + "&type=" + type;
        String ret = httpClientUtil.get(url, "UTF-8");
        return ret;
    }
    /**
     * 按会话类型、会话状态获取会话列表
     *
     * @param user_id
     * @param page
     * @param size
     * @param type
     * @param status      不传为获取所有状态
     * @param name
     * @param search_type 仅当type为2时有效 1与医生p2p会话 2与患者p2p
     * @return
     */
    public String getSessionListByType(String user_id, String page, String size, String type, String status, String name, String search_type) {
        String url = im_host + "api/v2/sessions/sessionListByType?user_id=" + user_id + "&page=" + page + "&size=" + size + "&type=" + type + "&status=" + (status == null ? "" : status) + "&name=" + (name == null ? "" : name) + "&search_type=" + (search_type == null ? "" : search_type);
        String ret = httpClientUtil.get(url, "utf-8");
        return ret;
    }
}
}

+ 15 - 0
common/common-entity/sql/2023.sql

@ -105,3 +105,18 @@ ALTER TABLE `base`.`base_service_package_item`
===========================20231024上门服务开始====================================
ALTER TABLE `base`.`wlyy_door_service_order`
ADD COLUMN `fee_after` varchar(10) NULL COMMENT '服务后收费标识(1是0否)' AFTER `nursing_staff_type`,
ADD COLUMN `package_id` varchar(50) NULL COMMENT '服务包id' AFTER `fee_after`;
ALTER TABLE `base`.`wlyy_door_order_item`
ADD COLUMN `order_id` varchar(50) NULL COMMENT '订单id' AFTER `create_time`;
ALTER TABLE `base`.`base_service_package_item`
ADD COLUMN `assign_status` varchar(10) NULL COMMENT '是否分配服务者【1是0否】' AFTER `template_code`,
ADD COLUMN `server_user_id` varchar(50) NULL COMMENT '服务者id' AFTER `assign_status`,
ADD COLUMN `server_user_name` varchar(50) NULL COMMENT '服务者name' AFTER `server_user_id`,
ADD COLUMN `server_user_type` varchar(10) NULL COMMENT '服务者类型' AFTER `server_user_name`;
===========================20231024上门服务结束====================================

+ 39 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/base/servicePackage/ServicePackageItemDO.java

@ -43,6 +43,45 @@ public class ServicePackageItemDO extends UuidIdentityEntity implements java.io.
    private String subItemId;
    private String subItemId;
    private String serverCount;//服务次数
    private String serverCount;//服务次数
    private String assignStatus;//是否分配服务者【1是0否】
    private String serverUserId;//服务者id
    private String serverUserName;//服务者name
    private String serverUserType;//服务者类型
    public String getAssignStatus() {
        return assignStatus;
    }
    public void setAssignStatus(String assignStatus) {
        this.assignStatus = assignStatus;
    }
    public String getServerUserId() {
        return serverUserId;
    }
    public void setServerUserId(String serverUserId) {
        this.serverUserId = serverUserId;
    }
    public String getServerUserName() {
        return serverUserName;
    }
    public void setServerUserName(String serverUserName) {
        this.serverUserName = serverUserName;
    }
    public String getServerUserType() {
        return serverUserType;
    }
    public void setServerUserType(String serverUserType) {
        this.serverUserType = serverUserType;
    }
    @Column(name = "service_package_item_id")
    @Column(name = "service_package_item_id")
    public String getServicePackageItemId() {
    public String getServicePackageItemId() {
        return servicePackageItemId;
        return servicePackageItemId;

+ 23 - 2
common/common-entity/src/main/java/com/yihu/jw/entity/door/WlyyDoorServiceOrderDO.java

@ -111,7 +111,6 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    }
    }
    /**
    /**
     * 化验检查报告补录方式
     * 化验检查报告补录方式
     */
     */
@ -188,7 +187,9 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
            this.type = type;
            this.type = type;
        }
        }
    }  /**
    }
    /**
     * 居民对工单需要服务情况是否已确认
     * 居民对工单需要服务情况是否已确认
     */
     */
    public enum IsTransOtherOrg {
    public enum IsTransOtherOrg {
@ -214,6 +215,10 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    }
    }
    private String packageId;//服务包的id
    private String feeAfter;//服务后收费标识(1是0否)
    /**
    /**
     * 服务编号
     * 服务编号
     */
     */
@ -1264,4 +1269,20 @@ public class WlyyDoorServiceOrderDO extends UuidIdentityEntityWithOperator {
    public void setNursingStaffType(String nursingStaffType) {
    public void setNursingStaffType(String nursingStaffType) {
        this.nursingStaffType = nursingStaffType;
        this.nursingStaffType = nursingStaffType;
    }
    }
    public String getPackageId() {
        return packageId;
    }
    public void setPackageId(String packageId) {
        this.packageId = packageId;
    }
    public String getFeeAfter() {
        return feeAfter;
    }
    public void setFeeAfter(String feeAfter) {
        this.feeAfter = feeAfter;
    }
}
}

+ 0 - 15
svr/svr-visit-behind/src/main/java/com/yihu/jw/hospital/config/SpringSecurityAuditorAware.java

@ -1,15 +0,0 @@
package com.yihu.jw.hospital.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.domain.AuditorAware;
import java.util.Optional;
@Configuration
public class SpringSecurityAuditorAware implements AuditorAware {
    @Override
    public Optional getCurrentAuditor() {
        return Optional.empty();
    }
}

+ 1 - 1
svr/svr-visit-behind/src/main/java/com/yihu/jw/hospital/module/consult/controller/ConsultController.java

@ -19,7 +19,7 @@ import com.yihu.jw.im.util.ImUtil;
import com.yihu.jw.message.service.MessageService;
import com.yihu.jw.message.service.MessageService;
import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import com.yihu.jw.util.common.CommonUtil;
import com.yihu.jw.hospital.utils.CommonUtil;
import com.yihu.jw.util.http.HttpClientUtil;
import com.yihu.jw.util.http.HttpClientUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiOperation;

+ 110 - 122
svr/svr-visit-behind/src/main/java/com/yihu/jw/hospital/module/door/service/WlyyDoorServiceOrderService.java

@ -646,140 +646,128 @@ public class WlyyDoorServiceOrderService extends BaseJpaService<WlyyDoorServiceO
     * @param jsonData
     * @param jsonData
     * @return
     * @return
     */
     */
//    @Transactional(rollbackFor = Exception.class)
//    public JSONObject create(String jsonData) throws Exception {
//        logger.info("创建上门服务jsonData参数:" + jsonData);
//
//        JSONObject result = new JSONObject();
//        JSONObject jsonObjectParam = JSONObject.parseObject(jsonData);
//
//        WlyyDoorServiceOrderDO orderDO = EntityUtils.jsonToEntity(
//                jsonObjectParam.get("order").toString(), WlyyDoorServiceOrderDO.class);
//
//        orderDO.setNumber(getRandomIntStr());
//        orderDO.setCreateTime(new Date());
//        orderDO.setCreateUser(orderDO.getProxyPatient());
//        orderDO.setCreateUserName(orderDO.getProxyPatientName());
//        orderDO.setOrderInfo("0");
//
//        if (StringUtils.isEmpty(orderDO.getPatient())) {
//            throw new Exception("当前服务对象code为空,请联系管理员检查参数!patient = " + orderDO.getPatient());
//        }
//
//        if (StringUtils.isEmpty(orderDO.getProxyPatient())) {
//            String failMsg = "当前代理对象code为空,请联系管理员检查参数!proxyPatient = " + orderDO.getProxyPatient();
//            throw new Exception(failMsg);
//        }
//
//        //判断师傅存在为完成的上门服务订单
//        boolean bool = wlyyDoorServiceOrderDao.existsByPatientAndStatusIn(orderDO.getPatient(),
//                new Integer[]{WlyyDoorServiceOrderDO.Status.waitForSend.getType(),
//                        WlyyDoorServiceOrderDO.Status.waitForAccept.getType(),
//                        WlyyDoorServiceOrderDO.Status.waitForServe.getType(),
//                        WlyyDoorServiceOrderDO.Status.accept.getType(),
//                });
//
//        if (bool) {
//            String failMsg = "当前服务对象存在未完成的上门服务,请先完成该服务!";
//            throw new Exception(failMsg);
//        }
//
//        orderDO.setHospital(jsonObjectParam.getJSONObject("hospital").get("code").toString());
//        orderDO.setCreateTime(new Date());
//        //判断创建上门服务类型,发起类型(1本人发起 2家人待预约 3医生代预约)
//        if (orderDO.getProxyPatient().equals(orderDO.getPatient())) {
//            orderDO.setType(1);
//        } else if (!orderDO.getProxyPatient().equals(orderDO.getPatient())) {
//            orderDO.setType(2);
//        }
//        orderDO.setServiceStatus("1");
//        //保存服务订单
//        wlyyDoorServiceOrderDao.save(orderDO);
//
//        //创建咨询
//        JSONObject successOrNot = consultTeamService.addDoorServiceConsult(orderDO.getId());
//        ConsultTeamDo consultTeam = (ConsultTeamDo) successOrNot.get(ResponseContant.resultMsg);
//
//        //新增工单与服务项费用关联关系
//        if (orderWithPackageItemFeeAdd(result, jsonObjectParam, orderDO)) {
//            return result;
//        }
//        //获取机构的调度员
//        List<Map<String, Object>> dispatcherList = queryDispatcherInfoByPatient(jsonObjectParam.getJSONObject("hospital").get("code").toString());
//        //没有调度员的模式
////        if (dispatcherList.isEmpty()
////                && StringUtils.isEmpty(orderDO.getDoctor())
////                && StringUtils.isEmpty(orderDO.getExpectedDoctorName())) {
////            orderDO.setStatus(2);
////            //应该是康复模板的康复下转,才有签约--先注释
////            orderDO.setDoctor(signFamily.getDoctor());
////            orderDO.setDoctorName(signFamily.getDoctorName());
////            this.save(orderDO);
////            WlyyDoorServiceOrderDO wlyyDoorServiceOrder = wlyyDoorServiceOrderDao.findById(orderDO.getId());
////            //新增工单医生关联关系
////            if (orderWithDoctorAdd(result, jsonObjectParam, wlyyDoorServiceOrder)) {
////                return result;
////            }
////            // 给服务医生发接单消息--先注释
////            this.createMessage(orderDO.getId(), orderDO.getProxyPatient(), signFamily.getDoctor(), 407, "服务工单待接单", "您有新的服务工单,请前往处理");
////            //发送智能助手消息-微信消息先注释
////            sendWeixinMessage(4, signFamily.getDoctor(), orderDO.getPatient());
////            result.put(ResponseContant.resultFlag, ResponseContant.success);
////            result.put(ResponseContant.resultMsg, consultTeam);
////            return result;
////        }
//
//        //有调度员
//        if (!dispatcherList.isEmpty()) {
//            for (Map<String, Object> map : dispatcherList) {
//                String dispatcher = map.get("code").toString();
//                // 派单消息-首页
//                this.createMessage(orderDO.getId(), "system", dispatcher, 402, "新增居民预约服务申请", orderDO.getPatientName() + "提交了服务预约申请,请您前往处理");
//                // 派单-实时工单消息  430 居民提交工单申请-- 张三提交了服务工单12345678申请
//                this.createMessage(orderDO.getId(), "system", dispatcher, 430, "居民提交工单申请", orderDO.getPatientName() + "提交了服务工单" + orderDO.getNumber() + "申请");
//            }
//        }
//
//        //给机构调度员发送医生助手消息
//        for (Map<String, Object> map : dispatcherList) {
//            //这边还没有微信消息的功能呢。
//            sendWeixinMessage(3, map.get("user_code") + "", orderDO.getPatient());
//        }
//        result.put(ResponseContant.resultFlag, ResponseContant.success);
//        result.put(ResponseContant.resultMsg, consultTeam);
//
//        //发送 预约卡片信息(2101类型)
//        JSONObject orderInfoContent = this.queryOrderCardInfo(orderDO);
//        orderInfoContent.put("re_msg_type", 0);//居民预约
//        //发送消息
//        int i = qucikSendIM(orderDO.getId(), "system", "智能助手", "2101", orderInfoContent.toJSONString());
////        if (i != 1) {
////            throw new Exception("上门服务工单消息发送失败");
////        }
//
//        if (StringUtils.isNoneBlank(orderDO.getDoctor())) {
//            //服务医生修改,直接转派
//            BaseDoctorDO transDoctor = doctorDao.findById(orderDO.getDoctor());
//            sendOrderToDoctor(orderDO.getId(), null, "system", "系统", transDoctor.getId(), transDoctor.getName(), transDoctor.getJobTitleName());
//        }
//        return result;
//    }
    @Transactional(rollbackFor = Exception.class)
    public JSONObject create(String jsonData) throws Exception {
    public JSONObject create(String jsonData) throws Exception {
        logger.info("创建上门服务jsonData参数:" + jsonData);
        logger.info("创建上门服务jsonData参数:" + jsonData);
        JSONObject result = new JSONObject();
        JSONObject result = new JSONObject();
        JSONObject jsonObjectParam = JSONObject.parseObject(jsonData);
        JSONObject jsonObjectParam = JSONObject.parseObject(jsonData);
        WlyyDoorServiceOrderDO orderDO =new WlyyDoorServiceOrderDO();
        WlyyDoorServiceOrderDO orderDO = EntityUtils.jsonToEntity(
                jsonObjectParam.get("order").toString(), WlyyDoorServiceOrderDO.class);
        orderDO.setNumber(getRandomIntStr());
        orderDO.setCreateTime(new Date());
        orderDO.setCreateUser(orderDO.getProxyPatient());
        orderDO.setCreateUserName(orderDO.getProxyPatientName());
        orderDO.setOrderInfo("0");
        if (StringUtils.isEmpty(orderDO.getPatient())) {
            throw new Exception("当前服务对象code为空,请联系管理员检查参数!patient = " + orderDO.getPatient());
        }
        if (StringUtils.isEmpty(orderDO.getProxyPatient())) {
            String failMsg = "当前代理对象code为空,请联系管理员检查参数!proxyPatient = " + orderDO.getProxyPatient();
            throw new Exception(failMsg);
        }
        //判断师傅存在为完成的上门服务订单
        boolean bool = wlyyDoorServiceOrderDao.existsByPatientAndStatusIn(orderDO.getPatient(),
                new Integer[]{WlyyDoorServiceOrderDO.Status.waitForSend.getType(),
                        WlyyDoorServiceOrderDO.Status.waitForAccept.getType(),
                        WlyyDoorServiceOrderDO.Status.waitForServe.getType(),
                        WlyyDoorServiceOrderDO.Status.accept.getType(),
                });
        if (bool) {
            String failMsg = "当前服务对象存在未完成的上门服务,请先完成该服务!";
            throw new Exception(failMsg);
        }
        orderDO.setHospital(jsonObjectParam.getJSONObject("hospital").get("code").toString());
        orderDO.setCreateTime(new Date());
        //判断创建上门服务类型,发起类型(1本人发起 2家人待预约 3医生代预约)
        if (orderDO.getProxyPatient().equals(orderDO.getPatient())) {
            orderDO.setType(1);
        } else if (!orderDO.getProxyPatient().equals(orderDO.getPatient())) {
            orderDO.setType(2);
        }
        orderDO.setServiceStatus("1");
        //保存服务订单
        //保存服务订单
        wlyyDoorServiceOrderDao.save(orderDO);
        wlyyDoorServiceOrderDao.save(orderDO);
        //创建咨询
        JSONObject successOrNot = consultTeamService.addDoorServiceConsult(orderDO.getId());
        ConsultTeamDo consultTeam = (ConsultTeamDo) successOrNot.get(ResponseContant.resultMsg);
        //新增工单与服务项费用关联关系
        if (orderWithPackageItemFeeAdd(result, jsonObjectParam, orderDO)) {
            return result;
        }
        //判断其是否有分配执行人。如果有不用走调度平台
        if (StringUtils.isNotBlank(orderDO.getDoctor())) {
            orderDO.setStatus(2);
            //应该是康复模板的康复下转,才有签约--先注释
            orderDO.setDoctor(orderDO.getDoctor());
            orderDO.setDoctorName(orderDO.getDoctorName());
            this.save(orderDO);
            //新增工单医生关联关系
            if (orderWithDoctorAdd(result, jsonObjectParam, orderDO)) {
                return result;
            }
            // 给服务医生发接单消息--先注释
            this.createMessage(orderDO.getId(), orderDO.getProxyPatient(), orderDO.getDoctor(), 407, "服务工单待接单", "您有新的服务工单,请前往处理");
            //发送智能助手消息-微信消息先注释
            sendWeixinMessage(4, orderDO.getDoctor(), orderDO.getPatient());
            result.put(ResponseContant.resultFlag, ResponseContant.success);
            result.put(ResponseContant.resultMsg, consultTeam);
            return result;
        }
        //获取机构的调度员
        List<Map<String, Object>> dispatcherList = queryDispatcherInfoByPatient(jsonObjectParam.getJSONObject("hospital").get("code").toString());
        //有调度员
        if (!dispatcherList.isEmpty()) {
            for (Map<String, Object> map : dispatcherList) {
                String dispatcher = map.get("code").toString();
                // 派单消息-首页
                this.createMessage(orderDO.getId(), "system", dispatcher, 402, "新增居民预约服务申请", orderDO.getPatientName() + "提交了服务预约申请,请您前往处理");
                // 派单-实时工单消息  430 居民提交工单申请-- 张三提交了服务工单12345678申请
                this.createMessage(orderDO.getId(), "system", dispatcher, 430, "居民提交工单申请", orderDO.getPatientName() + "提交了服务工单" + orderDO.getNumber() + "申请");
            }
        }
        //给机构调度员发送医生助手消息
        for (Map<String, Object> map : dispatcherList) {
            //这边还没有微信消息的功能呢。
            sendWeixinMessage(3, map.get("user_code") + "", orderDO.getPatient());
        }
        result.put(ResponseContant.resultFlag, ResponseContant.success);
        result.put(ResponseContant.resultMsg, consultTeam);
        //发送 预约卡片信息(2101类型)
        JSONObject orderInfoContent = this.queryOrderCardInfo(orderDO);
        orderInfoContent.put("re_msg_type", 0);//居民预约
        //发送消息
        int i = qucikSendIM(orderDO.getId(), "system", "智能助手", "2101", orderInfoContent.toJSONString());
//        if (i != 1) {
//            throw new Exception("上门服务工单消息发送失败");
//        }
        //后面这个要修改下,加个字段判断下是否转派
        if (StringUtils.isNoneBlank(orderDO.getDoctor())) {
            //服务医生修改,直接转派
            BaseDoctorDO transDoctor = doctorDao.findById(orderDO.getDoctor());
            sendOrderToDoctor(orderDO.getId(), null, "system", "系统", transDoctor.getId(), transDoctor.getName(), transDoctor.getJobTitleName());
        }
        return result;
        return result;
    }
    }
    /**
    /**
     * 发送微信消息
     * 发送微信消息
     * 三院暂时没这个功能--没有签约这个动作
     * 三院暂时没这个功能--没有签约这个动作

+ 340 - 0
svr/svr-visit-behind/src/main/java/com/yihu/jw/hospital/utils/CommonUtil.java

@ -0,0 +1,340 @@
package com.yihu.jw.util.common;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.yihu.fastdfs.FastDFSUtil;
import com.yihu.jw.entity.util.SystemConfEntity;
import com.yihu.jw.util.http.HttpClientUtil;
import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLDecoder;
import java.nio.charset.Charset;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
 * Created by yeshijie on 2023/2/13.
 */
@Component
public class CommonUtil {
    private Logger logger = LoggerFactory.getLogger(CommonUtil.class);
//    @Value("${neiwang.enable}")
    private Boolean isneiwang = false;  //如果不是内网项目要转到到内网wlyy在上传
//    @Value("${fastDFS.fastdfs_file_url}")
    private String fastdfs_file_url;
//    @Value("${neiwang.wlyy}")
    private String neiwangWlyy;  //内网的项目地址
    @Autowired
    private HttpClientUtil httpClientUtil;
    public static String getCode() {
        return UUID.randomUUID().toString().replaceAll("-", "");
    }
    /**
     * 传入身高体重,计算BMI值
     *
     * @param weightStr 体重
     * @param heightStr 身高
     * @return
     */
    public static double getBMIByWeightAndHeight(String weightStr, String heightStr) {
        DecimalFormat df2 = new DecimalFormat("###.00");
        double weight = Double.parseDouble(weightStr);
        Integer heightCM = Integer.parseInt(heightStr);
        heightStr = df2.format(heightCM / 100d);
        double height = Double.parseDouble(heightStr);
        double bmi = weight / (height * height);
        return bmi;
    }
    /**
     * 删除文件夹
     * @param folder
     */
    public static void deleteFolder(File folder){
        File[] files  = folder.listFiles();
        if (files != null){
            for(File f: files){
                if (f.isDirectory()){
                    deleteFolder(f);
                }else {
                    f.delete();
                }
            }
        }
        folder.delete();
    }
    /**
     * double转字符串,在转int
     * double*100转int 有bug 34.3会会变成3429
     * @param d
     * @return
     */
    public static Integer doubleToInt(Double d){
        if(d==null){
            return 0;
        }
        String currency = String.valueOf(d);
        int index = currency.indexOf(".");
        int length = currency.length();
        Integer amLong = 0;
        if(index == -1){
            amLong = Integer.valueOf(currency+"00");
        }else if(length - index >= 3){
            amLong = Integer.valueOf((currency.substring(0, index+3)).replace(".", ""));
            if(length-index>3){
                if(Integer.valueOf(currency.substring(index+3,index+4))>=5){
                    amLong++;
                }
            }
        }else if(length - index == 2){
            amLong = Integer.valueOf((currency.substring(0, index+2)).replace(".", "")+0);
        }else{
            amLong = Integer.valueOf((currency.substring(0, index+1)).replace(".", "")+"00");
        }
        return amLong;
    }
    public static List<String> getTagContent(String source, String regString) {
        List<String> result = new ArrayList<String>();
        Matcher m = Pattern.compile(regString).matcher(source);
        while (m.find()) {
            try {
                String r = StringEscapeUtils.unescapeHtml3(URLDecoder.decode(m.group(1),"utf-8"));
                result.add(r);
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }
        return result;
    }
    public String copyTempVoice(String voices) throws Exception {
        if (isneiwang) {
            // 文件保存的临时路径
            String serverUrl = fastdfs_file_url;
            FastDFSUtil fastDFSUtil = new FastDFSUtil();
            String fileUrls = "";
            File f = new File(voices);
            if (f.exists()) {
                String fileName = f.getName();
                InputStream in = new FileInputStream(f);
                ObjectNode result = fastDFSUtil.upload(in, fileName.substring(fileName.lastIndexOf(".") + 1), "");
                in.close();
                if (result != null) {
                    fileUrls += (StringUtils.isEmpty(fileUrls) ? "" : ",") + serverUrl
                            + result.get("groupName").toString().replaceAll("\"", "") + "/"
                            + result.get("remoteFileName").toString().replaceAll("\"", "");
                    f.delete();
                }
            }
            return fileUrls;
        } else {
            String fileUrls = toNeiWang(voices, "");
            return fileUrls;
        }
    }
    /**
     * 如果是外网那是发送到内网的服务器
     *
     * @param files
     * @return
     */
    public String toNeiWang(String files, String tempPath) throws FileNotFoundException {
        logger.info(" toNeiWang start files :" + tempPath + files);
        //转发到内网服务器
        String[] fileArray = files.split(",");
        String fileUrls = "";
        for (String file : fileArray) {
            HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
            HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
            File f = new File(tempPath + file);
            logger.info(" toNeiWang File exists :" + f.exists());
            if (f.exists()) {
                String fileName = f.getName();
                InputStream in = new FileInputStream(f);
                String returnStr = request(request, in, fileName);
                logger.info("returnStr :" + returnStr);
                logger.info("fileName :" + fileName);
                logger.info("result :" + returnStr.toString());
                if (returnStr != null) {
                    //1.3.7去掉前缀
                    fileUrls += returnStr+",";
                    f.delete();
                }
            } else {
                String path = tempPath + file;
                String returnStr = request(request, path);
                logger.info("result :" + returnStr.toString());
                if (returnStr != null) {
                    //1.3.7去掉前缀
                    fileUrls += returnStr+",";
                }
            }
        }
        logger.info(" toNeiWang end files :" + fileUrls);
        return fileUrls.substring(0,fileUrls.length()-1);
    }
    private String request(HttpServletRequest request, String path) {
        String url = neiwangWlyy + "/wlyy/upload/commonUpload";//uri请求路径
        String result = "";
        try {
            List<NameValuePair> params = new ArrayList<>();
            params.add(new BasicNameValuePair("filePaths", path));
            // 将响应内容转换为字符串
            result = httpClientUtil.post(url, params, "UTF-8");
        }  catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
    public String request(String remote_url, MultipartFile file, String type) {
        CloseableHttpClient httpClient = HttpClientBuilder.create().build();
        logger.info(file.getOriginalFilename());
        String result = "";
        try {
            String fileName = file.getOriginalFilename();
            HttpPost httpPost = new HttpPost(remote_url);
            MultipartEntityBuilder builder = MultipartEntityBuilder.create();
            builder.addBinaryBody("file", file.getInputStream(), ContentType.MULTIPART_FORM_DATA, fileName);// 文件流
            builder.addTextBody("filename", fileName);// 类似浏览器表单提交,对应input的name和value
            if (!org.springframework.util.StringUtils.isEmpty(type)) {
                builder.addTextBody("type", type); //发送类型
            }
            HttpEntity entity = builder.build();
            httpPost.setEntity(entity);
            HttpResponse response = httpClient.execute(httpPost);// 执行提交
            HttpEntity responseEntity = response.getEntity();
            if (responseEntity != null) {
                // 将响应内容转换为字符串
                result = EntityUtils.toString(responseEntity, Charset.forName("UTF-8"));
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                httpClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return result;
    }
    public String request(HttpServletRequest request, InputStream in, String fileName) {
        String url = neiwangWlyy + "/wlyy/upload/commonUpload";//uri请求路径
        CloseableHttpClient httpClient = HttpClientBuilder.create().build();
        String result = "";
        try {
            HttpPost httpPost = new HttpPost(url);
            MultipartEntityBuilder builder = MultipartEntityBuilder.create();
            builder.addBinaryBody("file", in, ContentType.MULTIPART_FORM_DATA, fileName);// 文件流
            builder.addTextBody("filename", fileName);// 类似浏览器表单提交,对应input的name和value
            if (!org.springframework.util.StringUtils.isEmpty(request.getParameter("type")) ||
                    !org.springframework.util.StringUtils.isEmpty(request.getAttribute("type"))) {
                builder.addTextBody("type",  null != request.getParameter("type") ? request.getParameter("type") : String.valueOf(request.getAttribute("type"))); //发送类型
            }
            HttpEntity entity = builder.build();
            httpPost.setEntity(entity);
            HttpResponse response = httpClient.execute(httpPost);// 执行提交
            HttpEntity responseEntity = response.getEntity();
            if (responseEntity != null) {
                // 将响应内容转换为字符串
                result = EntityUtils.toString(responseEntity, Charset.forName("UTF-8"));
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                httpClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return result;
    }
    public String copyTempImage(String files) throws Exception {
        String tempPath = SystemConfEntity.getInstance().getTempPath() + File.separator;
        if (isneiwang) {
            // 文件保存的临时路径
            String[] fileArray = files.split(",");
            FastDFSUtil fastDFSUtil = new FastDFSUtil();
            String fileUrls = "";
            for (String file : fileArray) {
                File f = new File(tempPath + file);
                File fs = new File(tempPath + file + "_small");
                if (f.exists()) {
                    String fileName = f.getName();
                    InputStream in = new FileInputStream(f);
                    ObjectNode result = fastDFSUtil.upload(in, fileName.substring(fileName.lastIndexOf(".") + 1), "");
                    in.close();
                    if (result != null) {
                        //1.3.7去掉前缀
                        fileUrls += (StringUtils.isEmpty(fileUrls) ? "" : ",")
                                + result.get("groupName").toString().replaceAll("\"", "") + "/"
                                + result.get("remoteFileName").toString().replaceAll("\"", "");
                        f.delete();
                        if (fs.exists()) {
                            fs.delete();
                        }
                    }
                }
            }
            return fileUrls;
        } else {
            String fileUrls = toNeiWang(files, tempPath);
            return fileUrls;
        }
    }
}