TalkGroupService.java 14 KB

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