WeiXinOpenIdUtils.java 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. package com.yihu.wlyy.wechat.util;
  2. import com.yihu.wlyy.entity.patient.Patient;
  3. import com.yihu.wlyy.repository.patient.PatientDao;
  4. import com.yihu.wlyy.util.IdCardUtil;
  5. import org.apache.commons.lang3.StringUtils;
  6. import org.json.JSONArray;
  7. import org.json.JSONObject;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.jdbc.core.JdbcTemplate;
  10. import org.springframework.stereotype.Component;
  11. import javax.annotation.PostConstruct;
  12. import java.util.ArrayList;
  13. import java.util.HashMap;
  14. import java.util.List;
  15. import java.util.Map;
  16. /**
  17. * Created by Trick on 2017/4/20.
  18. */
  19. @Component
  20. public class WeiXinOpenIdUtils {
  21. @Autowired
  22. private JdbcTemplate jdbcTemplate;
  23. @Autowired
  24. PatientDao patientDao;
  25. private Map<Integer, String> relations = new HashMap<>();
  26. @PostConstruct
  27. public void init() {
  28. relations.put(0, "其他");
  29. relations.put(1, "父亲");
  30. relations.put(2, "母亲");
  31. relations.put(3, "老公");
  32. relations.put(4, "老婆");
  33. relations.put(5, "儿子");
  34. relations.put(6, "女儿");
  35. relations.put(7, "未知");
  36. }
  37. //关系翻译
  38. public String getRelation(int relation) {
  39. return relations.get(relation);
  40. }
  41. /**
  42. * 先按照家庭关系“父亲→母亲→老公→老婆→儿子→女儿→其他”的顺序,获取openid
  43. *
  44. * @param code 推送人
  45. * @return
  46. */
  47. public JSONObject getFamilyOpenId(String code) {
  48. /**
  49. * 按关系和时间排序
  50. */
  51. StringBuffer sql = new StringBuffer("SELECT * FROM wlyy_patient_family_member t WHERE t.patient = '" + code + "' ORDER BY t.family_relation ASC ,t.czrq DESC");
  52. JSONObject result = new JSONObject();
  53. List<Map<String, Object>> members = jdbcTemplate.queryForList(sql.toString());
  54. List<Map<String, Object>> others = new ArrayList<>();
  55. if (members != null && members.size() > 0) {
  56. for (Map<String, Object> member : members) {
  57. if ((int) member.get("family_relation") == 0) {
  58. others.add(member);
  59. } else {
  60. String memberCode = (String) member.get("family_member");
  61. if (StringUtils.isNotBlank(memberCode)) {
  62. Patient p = patientDao.findByCode(memberCode);
  63. if (StringUtils.isNotBlank(p.getOpenid())) {
  64. result.put("member", p);
  65. result.put("relation", (int) member.get("family_relation"));
  66. return result;
  67. }
  68. }
  69. }
  70. }
  71. }
  72. //查询为关系为其他的openid
  73. if (others != null && others.size() > 0) {
  74. for (Map<String, Object> other : others) {
  75. String memberCode = (String) other.get("family_member");
  76. if (StringUtils.isNotBlank(memberCode)) {
  77. Patient p = patientDao.findByCode(memberCode);
  78. if (StringUtils.isNotBlank(p.getOpenid())) {
  79. result.put("member", p);
  80. result.put("relation", (int) other.get("family_relation"));
  81. return result;
  82. }
  83. }
  84. }
  85. }
  86. result.put("member",new Patient());
  87. return result;
  88. }
  89. /**
  90. * 查找代理人的openId
  91. * @param code
  92. * @return
  93. */
  94. public JSONArray getAgentOpenId(String code) {
  95. JSONArray result = new JSONArray();
  96. StringBuffer sql = new StringBuffer("SELECT * FROM wlyy_patient_family_member t WHERE t.patient = '" + code + "' and t.is_authorize =1 ");
  97. List<Map<String, Object>> members = jdbcTemplate.queryForList(sql.toString());
  98. if (members != null && members.size() > 0) {
  99. for (Map<String, Object> member : members) {
  100. String memberCode = (String) member.get("family_member");
  101. if (StringUtils.isNotBlank(memberCode)) {
  102. Patient p = patientDao.findByCode(memberCode);
  103. if (StringUtils.isNotBlank(p.getOpenid())) {
  104. JSONObject json = new JSONObject();
  105. json.put("member", p);
  106. json.put("relation", (int) member.get("family_relation"));
  107. result.put(json);
  108. }
  109. }
  110. }
  111. }
  112. return result;
  113. }
  114. public String getTitleMes(Patient p, int ralation, String dealerName) throws Exception {
  115. return "因您是" + relations.get(familyRelationTrans(p, ralation)) + p.getName() + "的代理人,故请将该消息传达给" + dealerName + ":";
  116. }
  117. /**
  118. * 家庭关系转换
  119. *
  120. * @param patient 居民
  121. * @param relation 关系 1父亲 2母亲 3老公 4老婆 5儿子 6女儿 7其他
  122. * @return
  123. */
  124. public int familyRelationTrans(Patient patient, int relation) throws Exception {
  125. int relationTrans = 0;
  126. switch (relation) {
  127. case 1:
  128. case 2:
  129. if (patient.getSex() == 1) {
  130. relationTrans = 5;
  131. } else if (patient.getSex() == 2) {
  132. relationTrans = 6;
  133. } else {
  134. relationTrans = 0;
  135. }
  136. if (relationTrans == 0) {
  137. if (IdCardUtil.getSexForIdcard(StringUtils.isEmpty(patient.getIdcard()) ? "" : patient.getIdcard()).equals("1")) {
  138. relationTrans = 6;
  139. } else if (IdCardUtil.getSexForIdcard(StringUtils.isEmpty(patient.getIdcard()) ? "" : patient.getIdcard()).equals("2")) {
  140. relationTrans = 5;
  141. }
  142. }
  143. break;
  144. case 3:
  145. relationTrans = 4;
  146. break;
  147. case 4:
  148. relationTrans = 3;
  149. break;
  150. case 5:
  151. case 6:
  152. if (patient.getSex() == 1) {
  153. relationTrans = 1;
  154. } else if (patient.getSex() == 2) {
  155. relationTrans = 2;
  156. } else {
  157. relationTrans = 0;
  158. }
  159. if (relationTrans == 0) {
  160. if (IdCardUtil.getSexForIdcard(StringUtils.isEmpty(patient.getIdcard()) ? "" : patient.getIdcard()).equals("1")) {
  161. relationTrans = 2;
  162. } else if (IdCardUtil.getSexForIdcard(StringUtils.isEmpty(patient.getIdcard()) ? "" : patient.getIdcard()).equals("2")) {
  163. relationTrans = 1;
  164. }
  165. }
  166. break;
  167. }
  168. return relationTrans;
  169. }
  170. }