TalkGroupService.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386
  1. package com.yihu.wlyy.service.app.talk;
  2. import java.io.UnsupportedEncodingException;
  3. import java.sql.ResultSet;
  4. import java.sql.SQLException;
  5. import java.text.SimpleDateFormat;
  6. import java.util.*;
  7. import javax.transaction.Transactional;
  8. import com.yihu.wlyy.entity.doctor.profile.Doctor;
  9. import com.yihu.wlyy.repository.doctor.DoctorDao;
  10. import com.yihu.wlyy.util.HttpUtil;
  11. import com.yihu.wlyy.util.SystemConf;
  12. import org.json.JSONArray;
  13. import org.json.JSONObject;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.jdbc.core.JdbcTemplate;
  16. import org.springframework.jdbc.core.RowMapper;
  17. import org.springframework.stereotype.Service;
  18. import com.yihu.wlyy.entity.discussion.WlyyTalkGroup;
  19. import com.yihu.wlyy.entity.discussion.WlyyTalkGroupMember;
  20. import com.yihu.wlyy.repository.discussion.DiscussionGroupDao;
  21. import com.yihu.wlyy.repository.discussion.DiscussionGroupMemberDao;
  22. import com.yihu.wlyy.service.BaseService;
  23. import org.springframework.util.StringUtils;
  24. @Service
  25. @Transactional
  26. public class TalkGroupService extends BaseService {
  27. // 讨论组DAO
  28. @Autowired
  29. DiscussionGroupDao discussionGroupDao;
  30. @Autowired
  31. // 讨论组成员DAO
  32. DiscussionGroupMemberDao discussionGroupMemberDao;
  33. @Autowired
  34. JdbcTemplate jdbcTemplate;
  35. @Autowired
  36. DoctorDao doctorDao;
  37. /**
  38. * 讨论组保存
  39. *
  40. * @param talkGroup
  41. * @return
  42. */
  43. public void saveTalkGroup(WlyyTalkGroup talkGroup, List<WlyyTalkGroupMember> members) {
  44. discussionGroupDao.save(talkGroup);
  45. discussionGroupMemberDao.save(members);
  46. }
  47. /**
  48. * 保存成员
  49. *
  50. * @param members
  51. */
  52. public void saveMembers(List<WlyyTalkGroupMember> members) {
  53. discussionGroupMemberDao.save(members);
  54. }
  55. /**
  56. * 讨论组成员添加
  57. *
  58. * @param member
  59. */
  60. public void saveTalkMember(WlyyTalkGroupMember member) {
  61. discussionGroupMemberDao.save(member);
  62. }
  63. /**
  64. * 移除讨论组成员
  65. *
  66. * @param groupCode 讨论组标识
  67. * @param memberCode 成员标识
  68. */
  69. public void deleteTalkMember(String groupCode, String memberCode) {
  70. WlyyTalkGroupMember member = discussionGroupMemberDao.findByGroupCodeAndMemberCode(groupCode, memberCode);
  71. member.setStatus(2);
  72. }
  73. /**
  74. * 创建咨询对应的讨论组
  75. *
  76. * @param doctor
  77. * @param doctorName
  78. * @param patient
  79. * @param patientName
  80. */
  81. public void createConsultTalkGroup(String doctor, String doctorName, String hospitalCode, String hospitalName,
  82. String patient, String patientName, String consult) {
  83. //讨论组建立
  84. WlyyTalkGroup talkGroup = new WlyyTalkGroup();
  85. SimpleDateFormat dateFormat = new SimpleDateFormat("yyy-MM-dd");
  86. String name = patientName + "—咨询(" + dateFormat.format(new Date()) + ")";
  87. talkGroup.setCode(getCode());
  88. talkGroup.setName(name);
  89. talkGroup.setType(1);
  90. talkGroup.setCreator(patient);
  91. talkGroup.setCreatorName(patientName);
  92. talkGroup.setPatient(patient);
  93. talkGroup.setPatientName(patientName);
  94. talkGroup.setHospitalCode(hospitalCode);
  95. talkGroup.setHospitalName(hospitalName);
  96. talkGroup.setConsultCode(consult);
  97. talkGroup.setCzrq(new Date());
  98. List<WlyyTalkGroupMember> members = new ArrayList<WlyyTalkGroupMember>();
  99. WlyyTalkGroupMember patientMember = new WlyyTalkGroupMember();
  100. patientMember.setMemberCode(patient);
  101. patientMember.setMemberName(patientName);
  102. patientMember.setGroupCode(talkGroup.getCode());
  103. patientMember.setGroupName(name);
  104. patientMember.setType(4);
  105. patientMember.setStatus(1);
  106. patientMember.setCzrq(new Date());
  107. members.add(patientMember);
  108. //当前医生加入讨论组
  109. WlyyTalkGroupMember doctorMember = new WlyyTalkGroupMember();
  110. doctorMember.setMemberCode(doctor);
  111. doctorMember.setMemberName(doctorName);
  112. doctorMember.setGroupCode(talkGroup.getCode());
  113. doctorMember.setGroupName(name);
  114. doctorMember.setType(3);
  115. doctorMember.setStatus(1);
  116. doctorMember.setCzrq(new Date());
  117. members.add(doctorMember);
  118. saveTalkGroup(talkGroup, members);
  119. }
  120. /**
  121. * 获取医生讨论组列表
  122. *
  123. * @param doctor
  124. * @return
  125. */
  126. public List<WlyyTalkGroup> findDoctorTalkGroups(String doctor) {
  127. return discussionGroupDao.findDoctorTalkGroups(doctor);
  128. }
  129. /**
  130. * 根据医生姓名搜索讨论组
  131. *
  132. * @param doctorName
  133. * @return
  134. */
  135. public List<WlyyTalkGroup> searchTalkGroupsByDoctorName(String doctor, String doctorName) {
  136. String doctorNameCon = "%" + doctorName + "%";
  137. List<String> argStrings = new ArrayList<String>();
  138. List<WlyyTalkGroup> groups = discussionGroupDao.findDoctorTalkGroups(doctor);
  139. //查询参数
  140. argStrings.add(doctorNameCon);
  141. argStrings.add(doctor);
  142. //查询语句
  143. String sb = "select DISTINCT tg.* from wlyy_talk_group tg,wlyy_talk_group_member tgm " +
  144. " where tg.code = tgm.group_code and tgm.member_name like ? and tg.code in ( select group_code from " +
  145. " wlyy_talk_group_member where member_code = ?)";
  146. List<WlyyTalkGroup> result = jdbcTemplate.query(sb, argStrings.toArray(), new RowMapper<WlyyTalkGroup>() {
  147. @Override
  148. public WlyyTalkGroup mapRow(ResultSet rs, int rowNum) throws SQLException {
  149. WlyyTalkGroup group = new WlyyTalkGroup();
  150. group.setId(rs.getLong("id"));
  151. group.setCode(rs.getString("code"));
  152. group.setName(rs.getString("name"));
  153. group.setType(rs.getInt("type"));
  154. group.setPatient(rs.getString("patient"));
  155. group.setPatientName(rs.getString("patient_name"));
  156. group.setConsultCode(rs.getString("consult_code"));
  157. group.setHospitalCode(rs.getString("hospital_code"));
  158. group.setHospitalName(rs.getString("hospital_name"));
  159. group.setCreator(rs.getString("creator"));
  160. group.setCreatorName(rs.getString("creator_name"));
  161. group.setCzrq(rs.getDate("czrq"));
  162. return group;
  163. }
  164. });
  165. if (result == null) {
  166. return new ArrayList<WlyyTalkGroup>();
  167. } else {
  168. return result;
  169. }
  170. }
  171. /**
  172. * 查询讨论组签约量
  173. *
  174. * @param groups
  175. * @return
  176. */
  177. public List<Map<String, Object>> getTalkGroupsSing(String[] groups) {
  178. String params = "";
  179. List<String> paramList = new ArrayList<>();
  180. for (int i = 0; i < groups.length; i++) {
  181. params += (i == 0 ? "?" : ",?");
  182. }
  183. paramList.addAll(Arrays.asList(groups));
  184. paramList.addAll(Arrays.asList(groups));
  185. String sqlgp = "select group_code,member_code from wlyy_talk_group_member where group_code in (" + params + ") and type = 2";
  186. String sqlgpm = "select member_code from wlyy_talk_group_member where group_code in (" + params + ") and type = 2";
  187. String sqlQu = "select * from wlyy_quota_result where qkdoctor_code in (" + sqlgpm + ") and quato_code = '1' and level1_type = '1'";
  188. String sqlQuSum = "select a.group_code,sum(ifnull(b.result,0)) sign from (" + sqlgp + ") a left join (" + sqlQu + ") b on a.member_code = b.qkdoctor_code group by a.group_code ";
  189. return jdbcTemplate.queryForList(sqlQuSum, paramList.toArray());
  190. }
  191. /**
  192. * 查询对应讨论组成员列表
  193. *
  194. * @param groupCode
  195. * @return
  196. */
  197. public List<WlyyTalkGroupMember> findTalkGroupMembers(String groupCode) {
  198. return discussionGroupMemberDao.findByGroupCode(groupCode);
  199. }
  200. /**
  201. * 查找讨论组
  202. *
  203. * @param groupCode
  204. * @return
  205. */
  206. public WlyyTalkGroup findTalkGroup(String groupCode) {
  207. return discussionGroupDao.findByCode(groupCode);
  208. }
  209. /**
  210. * 查询咨询对应讨论组
  211. *
  212. * @param consult
  213. * @return
  214. * @throws Exception
  215. */
  216. public JSONObject findConsultTalkGroup(String consult) throws Exception {
  217. WlyyTalkGroup talkGroup = discussionGroupDao.findByConsultCode(consult);
  218. if (talkGroup != null) {
  219. JSONObject result = new JSONObject(talkGroup);
  220. List<WlyyTalkGroupMember> members = discussionGroupMemberDao.findByGroupCode(talkGroup.getCode());
  221. if (members != null) {
  222. result.put("members", members);
  223. } else {
  224. result.put("members", "");
  225. }
  226. return result;
  227. } else {
  228. throw new Exception("没有对应咨询讨论组");
  229. }
  230. }
  231. /**
  232. * 获取医生对应病人的讨论组纪录
  233. *
  234. * @param doctor
  235. * @param patient
  236. * @return
  237. */
  238. public JSONArray getTalkGroupHistories(String doctor, String patient) {
  239. List<WlyyTalkGroup> groups = discussionGroupDao.findByDoctorAndPatient(doctor, patient);
  240. return new JSONArray(groups);
  241. }
  242. /**
  243. * 获取两个成员同在的讨论组
  244. *
  245. * @param memberFirst
  246. * @param memberSencond
  247. * @return
  248. */
  249. public List<WlyyTalkGroup> getTalkGroupRelated(String memberFirst, String memberSencond) {
  250. List<WlyyTalkGroup> result = new ArrayList<>();
  251. //查询语句
  252. String sqlIn = " select tg.* from wlyy_talk_group tg where tg.code in ("
  253. + " select tgm.group_code "
  254. + " from "
  255. + " (select * from wlyy_talk_group_member where member_code = ?) tgm "
  256. + " inner join "
  257. + " (select * from wlyy_talk_group_member where member_code = ?) tgmm "
  258. + " on tgm.group_code = tgmm.group_code )";
  259. //查询
  260. result = jdbcTemplate.query(sqlIn, new Object[]{memberFirst, memberSencond}, new RowMapper<WlyyTalkGroup>() {
  261. @Override
  262. public WlyyTalkGroup mapRow(ResultSet rs, int rowNum) throws SQLException {
  263. WlyyTalkGroup group = new WlyyTalkGroup();
  264. group.setId(rs.getLong("id"));
  265. group.setCode(rs.getString("code"));
  266. group.setName(rs.getString("name"));
  267. group.setType(rs.getInt("type"));
  268. group.setPatient(rs.getString("patient"));
  269. group.setPatientName(rs.getString("patient_name"));
  270. group.setConsultCode(rs.getString("consult_code"));
  271. group.setHospitalCode(rs.getString("hospital_code"));
  272. group.setHospitalName(rs.getString("hospital_name"));
  273. group.setCreator(rs.getString("creator"));
  274. group.setCreatorName(rs.getString("creator_name"));
  275. group.setCzrq(rs.getDate("czrq"));
  276. return group;
  277. }
  278. });
  279. return result;
  280. }
  281. /**
  282. * 获取医生的讨论组统计个数
  283. *
  284. * @param doctor
  285. * @return
  286. */
  287. public long getDoctorTalkGroupCount(String doctor) {
  288. return discussionGroupMemberDao.countByMemberCode(doctor);
  289. }
  290. /**
  291. * 获取以上一对一聊天
  292. *
  293. * @param doctor
  294. * @param doctorName
  295. * @return
  296. */
  297. public JSONArray getOneToOneIm(String doctor,String doctorName) throws UnsupportedEncodingException {
  298. JSONArray result = null;
  299. JSONArray resultArray = new JSONArray();
  300. String url = SystemConf.getInstance().getSystemProperties().getProperty("im_list_get")
  301. + "statistic/getchatlist.im";
  302. String json = HttpUtil.sendGet(url, "uid=" + doctor);
  303. if(!StringUtils.isEmpty(json)) {
  304. result = new JSONArray(json);
  305. }
  306. if (result != null && result.length() > 0) {
  307. for (int i = 0; i < result.length(); i++) {
  308. JSONObject obj = result.getJSONObject(i);
  309. if (obj.getInt("msg_type") == 1 && obj.get("peer_uid") != null) {
  310. JSONObject objRe = new JSONObject();
  311. Doctor fromDoctor = doctorDao.findByCode(obj.get("peer_uid").toString());
  312. if(fromDoctor == null){
  313. continue;
  314. }
  315. if(!StringUtils.isEmpty(doctorName)){
  316. if(!fromDoctor.getName().contains(doctorName)){
  317. continue;
  318. }
  319. }
  320. objRe.put("uid",obj.get("uid") != null ? obj.getString("uid") :"");
  321. objRe.put("fromUid",obj.get("peer_uid") != null ? obj.get("peer_uid").toString() : "");
  322. objRe.put("fromName",fromDoctor.getName());
  323. objRe.put("fromLevel",fromDoctor.getLevel());
  324. objRe.put("photo",StringUtils.isEmpty(fromDoctor.getPhoto())?"":fromDoctor.getPhoto());
  325. objRe.put("sex",fromDoctor.getSex());
  326. objRe.put("lastContentType",obj.getInt("last_content_type"));
  327. objRe.put("lastContent",obj.get("last_content") != null?new String(obj.getString("last_content").getBytes(),"utf-8"):"");
  328. objRe.put("newMsgCount",obj.getInt("new_msg_count"));
  329. objRe.put("lastMsgTime",obj.getLong("timestamp"));
  330. resultArray.put(objRe);
  331. }
  332. }
  333. }
  334. return resultArray;
  335. }
  336. }