UserEndPoint.java 61 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314
  1. package com.yihu.ehr.basic.user.controller;
  2. import com.alibaba.fastjson.JSON;
  3. import com.fasterxml.jackson.databind.node.ObjectNode;
  4. import com.yihu.ehr.basic.dict.service.SystemDictEntryService;
  5. import com.yihu.ehr.basic.fileresource.service.FileResource;
  6. import com.yihu.ehr.basic.fileresource.service.XFileResourceRepository;
  7. import com.yihu.ehr.basic.getui.ConstantUtil;
  8. import com.yihu.ehr.basic.org.model.OrgMemberRelation;
  9. import com.yihu.ehr.basic.org.service.OrgMemberRelationService;
  10. import com.yihu.ehr.basic.patient.service.DemographicService;
  11. import com.yihu.ehr.basic.security.service.UserSecurityService;
  12. import com.yihu.ehr.basic.user.dao.XUserTypeRepository;
  13. import com.yihu.ehr.basic.user.dao.XUserTypeRolesRepository;
  14. import com.yihu.ehr.basic.user.entity.*;
  15. import com.yihu.ehr.basic.user.service.*;
  16. import com.yihu.ehr.commons.constants.BasicServiceApi;
  17. import com.yihu.ehr.constants.ServiceApi;
  18. import com.yihu.ehr.constants.ApiVersion;
  19. import com.yihu.ehr.controller.EnvelopRestEndPoint;
  20. import com.yihu.ehr.entity.dict.SystemDictEntry;
  21. import com.yihu.ehr.entity.patient.DemographicInfo;
  22. import com.yihu.ehr.entity.security.UserKey;
  23. import com.yihu.ehr.entity.security.UserSecurity;
  24. import com.yihu.ehr.fastdfs.FastDFSUtil;
  25. import com.yihu.ehr.model.org.MJkzlOrgMemberRelation;
  26. import com.yihu.ehr.model.user.MH5Handshake;
  27. import com.yihu.ehr.model.user.MRoleUser;
  28. import com.yihu.ehr.model.user.MUser;
  29. import com.yihu.ehr.util.datetime.DateUtil;
  30. import com.yihu.ehr.util.id.BizObject;
  31. import com.yihu.ehr.util.log.LogService;
  32. import com.yihu.ehr.util.phonics.PinyinUtil;
  33. import com.yihu.ehr.util.rest.Envelop;
  34. import io.swagger.annotations.Api;
  35. import io.swagger.annotations.ApiOperation;
  36. import io.swagger.annotations.ApiParam;
  37. import org.apache.commons.codec.digest.DigestUtils;
  38. import org.apache.commons.lang.time.DateFormatUtils;
  39. import org.csource.common.MyException;
  40. import org.springframework.beans.factory.annotation.Autowired;
  41. import org.springframework.beans.factory.annotation.Value;
  42. import org.springframework.http.MediaType;
  43. import org.springframework.transaction.annotation.Propagation;
  44. import org.springframework.transaction.annotation.Transactional;
  45. import org.springframework.util.StringUtils;
  46. import org.springframework.web.bind.annotation.*;
  47. import javax.activation.MimetypesFileTypeMap;
  48. import javax.servlet.http.HttpServletRequest;
  49. import javax.servlet.http.HttpServletResponse;
  50. import java.io.*;
  51. import java.net.URLDecoder;
  52. import java.net.URLEncoder;
  53. import java.text.ParseException;
  54. import java.util.*;
  55. /**
  56. * @author zlf
  57. * @version 1.0
  58. * @created 2015.08.10 17:57
  59. */
  60. @RestController
  61. @RequestMapping(ApiVersion.Version1_0)
  62. @Api(value = "user", description = "用户管理", tags = {"用户管理"})
  63. public class UserEndPoint extends EnvelopRestEndPoint {
  64. @Value("${default.password}")
  65. private String default_password = "12345678";
  66. @Value("${h5.secret}")
  67. private String secret;
  68. @Value("${h5.appId}")
  69. private String appId;
  70. @Value("${jksr-app.orgcode}")
  71. private String orgcode;
  72. @Value("${jksr-app.registerRoleClientId}")
  73. public String registerRoleClientId;
  74. @Value("${fast-dfs.public-server}")
  75. private String fastDfsPublicServers;
  76. @Autowired
  77. private UserService userService;
  78. @Autowired
  79. private RoleUserService roleUserService;
  80. @Autowired
  81. private RolesService rolesService;
  82. @Autowired
  83. private UserSecurityService userSecurityService;
  84. @Autowired
  85. private SystemDictEntryService dictEntryService;
  86. @Autowired
  87. private FastDFSUtil fastDFSUtil;
  88. @Autowired
  89. private DoctorService doctorService;
  90. @Autowired
  91. private DemographicService demographicService;
  92. @Autowired
  93. private OrgMemberRelationService orgMemberRelationService;
  94. @Autowired
  95. private OrgMemberRelationService relationService;
  96. @Autowired
  97. private XUserTypeRolesRepository xUserTypeRolesRepository;
  98. @Autowired
  99. private XFileResourceRepository resourceRepository;
  100. @Autowired
  101. private XUserTypeRepository xUserTypeRepository;
  102. @Autowired
  103. private UserTypeService userTypeService;
  104. @RequestMapping(value = ServiceApi.Users.Users, method = RequestMethod.GET)
  105. @ApiOperation(value = "获取用户列表", notes = "根据查询条件获取用户列表在前端表格展示")
  106. public List<MUser> searchUsers(
  107. @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段", defaultValue = "")
  108. @RequestParam(value = "fields", required = false) String fields,
  109. @ApiParam(name = "filters", value = "过滤器,为空检索所有条件", defaultValue = "")
  110. @RequestParam(value = "filters", required = false) String filters,
  111. @ApiParam(name = "sorts", value = "排序,规则参见说明文档", defaultValue = "")
  112. @RequestParam(value = "sorts", required = false) String sorts,
  113. @ApiParam(name = "size", value = "分页大小", defaultValue = "15")
  114. @RequestParam(value = "size", required = false) int size,
  115. @ApiParam(name = "page", value = "页码", defaultValue = "1")
  116. @RequestParam(value = "page", required = false) int page,
  117. @ApiParam(name = "orgCode", value = "机构编码", defaultValue = "")
  118. @RequestParam(value = "orgCode", required = false) String orgCode,
  119. HttpServletRequest request,
  120. HttpServletResponse response) throws ParseException {
  121. List<User> userList = new ArrayList<>();
  122. if (!StringUtils.isEmpty(orgCode)) {
  123. String[] orgCodes = orgCode.split(",");
  124. String realName = "";
  125. String userType = "";
  126. if (!StringUtils.isEmpty(filters)) {
  127. boolean nameFlag = filters.contains("realName?");
  128. boolean typeFlag = filters.contains("userType=");
  129. if (nameFlag && typeFlag) {
  130. realName = filters.substring(filters.indexOf("?") + 1, filters.indexOf(";"));
  131. userType = filters.substring(filters.lastIndexOf("=") + 1, filters.lastIndexOf(";"));
  132. } else if (nameFlag) {
  133. realName = filters.substring(filters.indexOf("?") + 1, filters.indexOf(";"));
  134. } else if (typeFlag) {
  135. userType = filters.substring(filters.lastIndexOf("=") + 1, filters.lastIndexOf(";"));
  136. }
  137. }
  138. userList = userService.searchUsers(orgCodes, realName, userType, page, size);
  139. Long totalCount = userService.searchUsersCount(orgCodes, realName, userType);
  140. pagedResponse(request, response, totalCount, page, size);
  141. } else {
  142. userList = userService.search(fields, filters, sorts, page, size);
  143. pagedResponse(request, response, userService.getCount(filters), page, size);
  144. }
  145. return (List<MUser>) convertToModels(userList, new ArrayList<MUser>(userList.size()), MUser.class, fields);
  146. }
  147. @RequestMapping(value = ServiceApi.Users.Users, method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
  148. @ApiOperation(value = "创建用户", notes = "重新绑定用户信息")
  149. public MUser createUser(
  150. @ApiParam(name = "user_json_data", value = "", defaultValue = "")
  151. @RequestBody String userJsonData) throws Exception {
  152. User user = toEntity(userJsonData, User.class);
  153. user.setId(getObjectId(BizObject.User));
  154. user.setCreateDate(new Date());
  155. if (!StringUtils.isEmpty(user.getPassword())) {
  156. user.setPassword(DigestUtils.md5Hex(user.getPassword()));
  157. } else {
  158. user.setPassword(DigestUtils.md5Hex(default_password));
  159. }
  160. String userType = user.getUserType();
  161. SystemDictEntry dict = dictEntryService.getDictEntry(15, userType);
  162. if (dict != null) {
  163. user.setDType(userType);
  164. }
  165. user.setActivated(true);
  166. user = userService.saveUser(user);
  167. return convertToModel(user, MUser.class, null);
  168. }
  169. @RequestMapping(value = ServiceApi.Users.Users, method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
  170. @ApiOperation(value = "修改用户", notes = "重新绑定用户信息")
  171. public MUser updateUser(
  172. @ApiParam(name = "user_json_data", value = "", defaultValue = "")
  173. @RequestBody String userJsonData) throws Exception {
  174. User user = toEntity(userJsonData, User.class);
  175. String userType = user.getUserType();
  176. SystemDictEntry dict = dictEntryService.getDictEntry(15, userType);
  177. if (dict != null) {
  178. user.setDType(userType);
  179. }
  180. String imgPath = user.getImgRemotePath();
  181. if (!StringUtils.isEmpty(imgPath) && imageCheck(imgPath)) {
  182. //公众健康-个人设置传的是路径
  183. user.setImgRemotePath(saveImgFileSource(imgPath));
  184. }
  185. userService.saveUser(user);
  186. //同时修改医生表及用户表信息
  187. Doctors doctors = doctorService.getByIdCardNo(user.getIdCardNo());
  188. if (!StringUtils.isEmpty(doctors)) {
  189. doctors.setName(user.getRealName());
  190. doctors.setPyCode(PinyinUtil.getPinYinHeadChar(user.getRealName(), false));
  191. doctors.setSex(user.getGender());
  192. doctors.setPhone(user.getTelephone());
  193. doctors.setPhoto(user.getImgRemotePath());
  194. doctorService.save(doctors);
  195. }
  196. DemographicInfo demographicInfo = demographicService.getDemographicInfoByIdCardNo(user.getIdCardNo());
  197. if (!StringUtils.isEmpty(demographicInfo)) {
  198. demographicInfo.setName(user.getRealName());
  199. demographicInfo.setTelephoneNo("{\"联系电话\":\"" + user.getTelephone() + "\"}");
  200. demographicInfo.setGender(user.getGender());
  201. demographicInfo.setMartialStatus(user.getMartialStatus());
  202. demographicInfo.setBirthday(DateUtil.strToDate(user.getBirthday()));
  203. demographicService.save(demographicInfo);
  204. }
  205. MUser mUser =convertToModel(user, MUser.class);
  206. mUser.setImgRemotePath(imgPath);
  207. return mUser;
  208. }
  209. @RequestMapping(value = ServiceApi.Users.UserAdmin, method = RequestMethod.GET)
  210. @ApiOperation(value = "根据id获取获取用户信息")
  211. public MUser getUser(
  212. @ApiParam(name = "user_id", value = "", defaultValue = "")
  213. @PathVariable(value = "user_id") String userId) {
  214. User user = userService.getUser(userId);
  215. MUser userModel = convertToModel(user, MUser.class);
  216. return userModel;
  217. }
  218. @RequestMapping(value = ServiceApi.Users.UserAdmin, method = RequestMethod.DELETE)
  219. @ApiOperation(value = "删除用户", notes = "根据id删除用户")
  220. public boolean deleteUser(
  221. @ApiParam(name = "user_id", value = "用户编号", defaultValue = "")
  222. @PathVariable(value = "user_id") String userId) throws Exception {
  223. userService.deleteUser(userId);
  224. return true;
  225. }
  226. @RequestMapping(value = ServiceApi.Users.UserAdmin, method = RequestMethod.PUT)
  227. @ApiOperation(value = "改变用户状态", notes = "根据id更新用户")
  228. public boolean activityUser(
  229. @ApiParam(name = "user_id", value = "id", defaultValue = "")
  230. @PathVariable(value = "user_id") String userId,
  231. @ApiParam(name = "activity", value = "激活状态", defaultValue = "")
  232. @RequestParam(value = "activity") boolean activity) throws Exception {
  233. userService.activityUser(userId, activity);
  234. return true;
  235. }
  236. @RequestMapping(value = ServiceApi.Users.User, method = RequestMethod.GET)
  237. @ApiOperation(value = "根据登录账号获取当前用户", notes = "根据登陆用户名及密码验证用户")
  238. public MUser getUserByLoginCode(
  239. @ApiParam(name = "user_name", value = "登录账号", defaultValue = "")
  240. @PathVariable(value = "user_name") String userName) {
  241. // 帐户:手机号,身份证号,登录账号
  242. List<User> users = userService.getUserForLogin(userName);
  243. if (users != null) {
  244. if (users.size() == 1) {
  245. MUser mUser = new MUser();
  246. List<OrgMemberRelation> memberRelations = orgMemberRelationService.findByField("userId", users.get(0).getId());
  247. mUser = convertToModel(users.get(0), MUser.class);
  248. if (memberRelations != null && memberRelations.size() > 0) {
  249. mUser.setPosition(memberRelations.get(0).getDutyName());
  250. mUser.setDepartment(memberRelations.get(0).getDeptName());
  251. }
  252. return mUser;
  253. }
  254. }
  255. return null;
  256. }
  257. @RequestMapping(value = ServiceApi.Users.UserAdminPassword, method = RequestMethod.PUT)
  258. @ApiOperation(value = "重设密码", notes = "用户忘记密码管理员帮助重新还原密码,初始密码12345678")
  259. public boolean resetPass(
  260. @ApiParam(name = "user_id", value = "id", defaultValue = "")
  261. @PathVariable(value = "user_id") String userId) throws Exception {
  262. userService.resetPass(userId);
  263. return true;
  264. }
  265. @RequestMapping(value = ServiceApi.Users.UserAdminPasswordReset, method = RequestMethod.PUT)
  266. @ApiOperation(value = "修改密码", notes = "根基传入的用户id和新的密码修改用户的密码")
  267. public boolean changePassWord(
  268. @ApiParam(name = "user_id", value = "user_id", defaultValue = "")
  269. @PathVariable(value = "user_id") String userId,
  270. @ApiParam(name = "password", value = "密码", defaultValue = "")
  271. @RequestParam(value = "password") String password) throws Exception {
  272. String hashPassWord = DigestUtils.md5Hex(password);
  273. userService.changePassWord(userId, hashPassWord);
  274. return true;
  275. }
  276. @RequestMapping(value = ServiceApi.Users.UserAdminKey, method = RequestMethod.PUT)
  277. @ApiOperation(value = "重新分配密钥", notes = "重新分配密钥")
  278. public Map<String, String> distributeKey(
  279. @ApiParam(name = "user_id", value = "登录帐号", defaultValue = "")
  280. @PathVariable(value = "user_id") String userId) throws Exception {
  281. User user = userService.getUser(userId);
  282. if (null == user) {
  283. return null;
  284. }
  285. UserSecurity userSecurity = userSecurityService.getKeyByUserId(userId, false);
  286. Map<String, String> keyMap = new HashMap<>();
  287. if (userSecurity != null) {
  288. // 删除原有的公私钥重新分配
  289. List<UserKey> userKeyList = userSecurityService.getKeyMapByUserId(userId);
  290. userSecurityService.deleteKey(userKeyList);
  291. }
  292. userSecurity = userSecurityService.createKeyByUserId(userId);
  293. String validTime = DateFormatUtils.format(userSecurity.getFromDate(), "yyyy-MM-dd")
  294. + "~" + DateFormatUtils.format(userSecurity.getExpiryDate(), "yyyy-MM-dd");
  295. keyMap.put("publicKey", userSecurity.getPublicKey());
  296. keyMap.put("validTime", validTime);
  297. keyMap.put("startTime", DateFormatUtils.format(userSecurity.getFromDate(), "yyyy-MM-dd"));
  298. return keyMap;
  299. }
  300. @RequestMapping(value = ServiceApi.Users.UserAdminKey, method = RequestMethod.GET)
  301. @ApiOperation(value = "查询用户公钥", notes = "查询用户公钥")
  302. public Envelop getKey(
  303. @ApiParam(name = "user_id", value = "登录帐号", defaultValue = "")
  304. @PathVariable(value = "user_id") String userId) throws Exception {
  305. Envelop envelop = new Envelop();
  306. User user = userService.getUser(userId);
  307. if (null == user) {
  308. envelop.setSuccessFlg(false);
  309. envelop.setErrorMsg("用户不存在");
  310. return envelop;
  311. }
  312. UserSecurity userSecurity = userSecurityService.getKeyByUserId(userId, false);
  313. if (null == userSecurity) {
  314. envelop.setSuccessFlg(false);
  315. envelop.setErrorMsg("请先获取公钥");
  316. return envelop;
  317. }
  318. Map<String, String> keyMap = new HashMap<>();
  319. String validTime = DateFormatUtils.format(userSecurity.getFromDate(), "yyyy-MM-dd")
  320. + "~" + DateFormatUtils.format(userSecurity.getExpiryDate(), "yyyy-MM-dd");
  321. keyMap.put("publicKey", userSecurity.getPublicKey());
  322. keyMap.put("validTime", validTime);
  323. keyMap.put("startTime", DateFormatUtils.format(userSecurity.getFromDate(), "yyyy-MM-dd"));
  324. envelop.setSuccessFlg(true);
  325. envelop.setObj(keyMap);
  326. return envelop;
  327. }
  328. /**
  329. * 根据登陆用户名及密码验证用户.
  330. *
  331. * @param userName
  332. * @param password
  333. */
  334. @RequestMapping(value = ServiceApi.Users.UserVerification, method = RequestMethod.GET)
  335. @ApiOperation(value = "根据登陆用户名及密码验证用户", notes = "根据登陆用户名及密码验证用户")
  336. public MUser getUserByNameAndPassword(
  337. @ApiParam(name = "user_name", value = "登录账号", defaultValue = "")
  338. @RequestParam(value = "user_name") String userName,
  339. @ApiParam(name = "password", value = "密码", defaultValue = "")
  340. @RequestParam(value = "password") String password) {
  341. User user = userService.loginVerification(userName, password);
  342. return convertToModel(user, MUser.class);
  343. }
  344. @RequestMapping(value = ServiceApi.Users.UserExistence, method = RequestMethod.GET)
  345. @ApiOperation(value = "判断登陆账户(用户名)是否存在")
  346. public boolean isUserNameExists(
  347. @ApiParam(name = "user_name", value = "user_name", defaultValue = "")
  348. @PathVariable(value = "user_name") String userName) {
  349. return userService.getUserByUserName(userName) != null;
  350. }
  351. @RequestMapping(value = ServiceApi.Users.UserIdCardNoExistence, method = RequestMethod.GET)
  352. @ApiOperation(value = "判断用户身份证号是否存在")
  353. public boolean isIdCardExists(
  354. @ApiParam(name = "id_card_no", value = "id_card_no", defaultValue = "")
  355. @RequestParam(value = "id_card_no") String idCardNo) {
  356. return userService.getUserByIdCardNo(idCardNo) != null;
  357. }
  358. // @RequestMapping(value = ServiceApi.Users.UserAdminContact, method = RequestMethod.DELETE)
  359. // @ApiOperation(value = "用户联系方式解绑", notes = "将用户电话或邮件地址设置为空")
  360. // public boolean delteContact(
  361. // @ApiParam(name = "user_id", value = "", defaultValue = "")
  362. // @PathVariable(value = "user_id") String userId,
  363. // @ApiParam(name = "type", value = "", defaultValue = "")
  364. // @RequestParam(value = "type") String type) {
  365. // User user = userManager.getUser(userId);
  366. // if (type.equals("tel")) {
  367. // user.setTelephone("");
  368. // } else {
  369. // user.setEmail("");
  370. // }
  371. //
  372. // userManager.saveUser(user);
  373. // return true;
  374. // }
  375. @RequestMapping(value = ServiceApi.Users.UserEmailNoExistence, method = RequestMethod.GET)
  376. @ApiOperation(value = "判断用户邮件是否存在")
  377. public boolean isEmailExists(@RequestParam(value = "email") String email) {
  378. return userService.getUserByEmail(email) != null;
  379. }
  380. @RequestMapping(value = ServiceApi.Users.UserTelephoneNoExistence, method = RequestMethod.GET)
  381. @ApiOperation(value = "判断用户电话号码是否存在")
  382. public boolean isTelephoneExists(@RequestParam(value = "telephone") String telephone) {
  383. return userService.getUserByTelephone(telephone) != null;
  384. }
  385. /**
  386. * 用户头像图片上传
  387. *
  388. * @return
  389. * @throws IOException
  390. */
  391. @RequestMapping(value = "/user/picture", method = RequestMethod.POST)
  392. @ApiOperation(value = "上传头像,把图片转成流的方式发送")
  393. public String uploadPicture(
  394. @ApiParam(name = "jsonData", value = "头像转化后的输入流")
  395. @RequestBody String jsonData) throws IOException {
  396. if (jsonData == null) {
  397. return null;
  398. }
  399. String date = URLDecoder.decode(jsonData, "UTF-8");
  400. String[] fileStreams = date.split(",");
  401. String is = URLDecoder.decode(fileStreams[0], "UTF-8").replace(" ", "+");
  402. byte[] in = Base64.getDecoder().decode(is);
  403. String pictureName = fileStreams[1].substring(0, fileStreams[1].length() - 1);
  404. String fileExtension = pictureName.substring(pictureName.lastIndexOf(".") + 1).toLowerCase();
  405. String description = null;
  406. if ((pictureName != null) && (pictureName.length() > 0)) {
  407. int dot = pictureName.lastIndexOf('.');
  408. if ((dot > -1) && (dot < (pictureName.length()))) {
  409. description = pictureName.substring(0, dot);
  410. }
  411. }
  412. String path = null;
  413. try {
  414. InputStream inputStream = new ByteArrayInputStream(in);
  415. ObjectNode objectNode = fastDFSUtil.upload(inputStream, fileExtension, description);
  416. String groupName = objectNode.get("groupName").toString();
  417. String remoteFileName = objectNode.get("remoteFileName").toString();
  418. // path = "{\"groupName\":" + groupName + ",\"remoteFileName\":" + remoteFileName + "}";
  419. path = groupName.substring(1, groupName.length() - 1) + ":" + remoteFileName.substring(1, remoteFileName.length() - 1);
  420. } catch (Exception e) {
  421. LogService.getLogger(User.class).error("人口头像图片上传失败;错误代码:" + e);
  422. }
  423. //返回文件路径
  424. return path;
  425. }
  426. /**
  427. * 用户头像图片下载
  428. *
  429. * @return
  430. * @throws IOException
  431. * @throws MyException
  432. */
  433. @RequestMapping(value = "/user/picture", method = RequestMethod.GET)
  434. @ApiOperation(value = "下载头像")
  435. public String downloadPicture(
  436. @ApiParam(name = "group_name", value = "分组", defaultValue = "")
  437. @RequestParam(value = "group_name") String groupName,
  438. @ApiParam(name = "remote_file_name", value = "服务器头像名称", defaultValue = "")
  439. @RequestParam(value = "remote_file_name") String remoteFileName) throws Exception {
  440. String imageStream = null;
  441. try {
  442. byte[] bytes = fastDFSUtil.download(groupName, remoteFileName);
  443. String fileStream = new String(Base64.getEncoder().encode(bytes));
  444. imageStream = URLEncoder.encode(fileStream, "UTF-8");
  445. } catch (IOException e) {
  446. e.printStackTrace();
  447. } catch (MyException e) {
  448. LogService.getLogger(User.class).error("人口头像图片下载失败;错误代码:" + e);
  449. }
  450. return imageStream;
  451. }
  452. @RequestMapping(value = ServiceApi.Users.UserPhoneExistence, method = RequestMethod.POST)
  453. @ApiOperation("获取已存在电话号码")
  454. public List idExistence(
  455. @ApiParam(name = "phones", value = "phones", defaultValue = "")
  456. @RequestBody String phones) throws Exception {
  457. List existPhones = userService.idExist(toEntity(phones, String[].class));
  458. return existPhones;
  459. }
  460. @RequestMapping(value = ServiceApi.Users.UserOnePhoneExistence, method = RequestMethod.GET)
  461. @ApiOperation("根据过滤条件判断是否存在")
  462. public boolean isExistence(
  463. @ApiParam(name = "filters", value = "filters", defaultValue = "")
  464. @RequestParam(value = "filters") String filters) throws Exception {
  465. List<User> user = userService.search("", filters, "", 1, 1);
  466. return user != null && user.size() > 0;
  467. }
  468. @RequestMapping(value = ServiceApi.Users.UserEmailExistence, method = RequestMethod.POST)
  469. @ApiOperation("获取已存在邮箱")
  470. public List emailsExistence(
  471. @ApiParam(name = "emails", value = "emails", defaultValue = "")
  472. @RequestBody String emails) throws Exception {
  473. List existPhones = userService.emailsExistence(toEntity(emails, String[].class));
  474. return existPhones;
  475. }
  476. @RequestMapping(value = ServiceApi.Users.UseridCardNoExistence, method = RequestMethod.POST)
  477. @ApiOperation("获取已存在身份证号码")
  478. public List idCardNoExistence(
  479. @ApiParam(name = "idCardNos", value = "idCardNos", defaultValue = "")
  480. @RequestBody String idCardNos) throws Exception {
  481. List existidCardNos = userService.idCardNosExist(toEntity(idCardNos, String[].class));
  482. return existidCardNos;
  483. }
  484. @RequestMapping(value = ServiceApi.Users.UserByIdCardNo, method = RequestMethod.GET)
  485. @ApiOperation("根据身份证号码获取用户id")
  486. public String getUserIdByIdCardNo(String idCardNo) {
  487. User user = userService.getUserByIdCardNo(idCardNo);
  488. return StringUtils.isEmpty(user) ? "" : user.getId();
  489. }
  490. @RequestMapping(value = ServiceApi.Users.UpdateSystemUser, method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
  491. @ApiOperation(value = "修改用户", notes = "账户体系-修改用户信息")
  492. public MUser UpdateSystemUser(
  493. @ApiParam(name = "user_json_data", value = "用户信息json", defaultValue = "")
  494. @RequestBody String userJsonData) throws Exception {
  495. User user = toEntity(userJsonData, User.class);
  496. String userType = user.getUserType();
  497. if (!StringUtils.isEmpty(userType)) {
  498. SystemDictEntry dict = dictEntryService.getDictEntry(15, userType);
  499. if (dict != null) {
  500. user.setDType(userType);
  501. }
  502. }
  503. userService.saveUser(user);
  504. //将基础信息同步到医生表
  505. Doctors doctors = doctorService.getByIdCardNo(user.getIdCardNo());
  506. if (!StringUtils.isEmpty(doctors)) {
  507. doctors.setName(user.getRealName());
  508. doctors.setPyCode(PinyinUtil.getPinYinHeadChar(user.getRealName(), false));
  509. doctors.setSex(user.getGender());
  510. doctors.setPhone(user.getTelephone());
  511. doctors.setPhoto(user.getImgRemotePath());
  512. doctorService.save(doctors);
  513. }
  514. return convertToModel(user, MUser.class);
  515. }
  516. @RequestMapping(value = ServiceApi.Users.UsersByTel, method = RequestMethod.GET, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
  517. @ApiOperation(value = "根据手机号码查询用户信息", notes = "根据手机号码查询用户信息")
  518. public MUser getUserByTel(
  519. @ApiParam(name = "tel", value = "手机号码", defaultValue = "")
  520. @RequestParam(value = "tel") String tel) throws Exception {
  521. User user = userService.getUserByTelephone(tel);
  522. if (user == null) {
  523. return null;
  524. }
  525. MUser mUser = convertToModel(user, MUser.class);
  526. return mUser;
  527. }
  528. @RequestMapping(value = ServiceApi.Users.H5Handshake, method = RequestMethod.GET)
  529. @ApiOperation(value = "医疗服务:提供二次握手的URL", notes = "医疗服务:提供二次握手的URL")
  530. public MH5Handshake getH5Handshake(
  531. @ApiParam(name = "thirdPartyUserId", value = "第三方登录账号ID", defaultValue = "")
  532. @RequestParam(name = "thirdPartyUserId") String thirdPartyUserId,
  533. @ApiParam(name = "ts", value = "时间戳(相对于1970-1-1的毫秒数)", defaultValue = "")
  534. @RequestParam(name = "ts") String ts,
  535. @ApiParam(name = "sign", value = "签名串", defaultValue = "")
  536. @RequestParam(name = "sign") String sign) {
  537. MH5Handshake handshake = new MH5Handshake();
  538. //校验合法性
  539. if (!validSign(thirdPartyUserId, ts, sign)) {
  540. handshake.setCode("-100001");
  541. handshake.setMessage("签名校验失败");
  542. return handshake;
  543. }
  544. User user = userService.getUser(thirdPartyUserId);
  545. if (user == null) {
  546. handshake.setCode("-10000");
  547. handshake.setMessage("账号不存在");
  548. return handshake;
  549. }
  550. handshake.setCode("10000");
  551. handshake.setMessage("Yes");
  552. handshake.setUserName(user.getRealName());
  553. handshake.setCardNo(user.getIdCardNo());
  554. if (!StringUtils.isEmpty(user.getGender())) {
  555. handshake.setSex(Integer.parseInt(user.getGender()));
  556. }
  557. handshake.setTel(user.getTelephone());
  558. return handshake;
  559. }
  560. /**
  561. * 校验sign签名的合法性
  562. * 算法为:thirdPartyUserId的值+ts的值+appId+secret(健康之路分配给第三方的秘钥) 字符串串起来的做SHA1签名,
  563. * 最后将签名值转换为小写(其中加号表示字符串拼接,不代表实际字符)
  564. *
  565. * @param thirdPartyUserId 第三方登录账号ID
  566. * @param ts 时间戳
  567. * @param sign 签名串
  568. * @return 如果通过返回 <code>true</code>
  569. */
  570. private boolean validSign(String thirdPartyUserId, String ts, String sign) {
  571. String tempStr = new StringBuilder(thirdPartyUserId)
  572. .append(ts)
  573. .append(appId)
  574. .append(secret).toString();
  575. tempStr = DigestUtils.sha1Hex(tempStr).toLowerCase();
  576. if (tempStr.equals(sign)) {
  577. return true;
  578. }
  579. return false;
  580. }
  581. // ---------------------------- 适配zuul新代码 start -----------------------------------
  582. @RequestMapping(value = ServiceApi.Users.Save, method = RequestMethod.POST)
  583. @ApiOperation("保存")
  584. public Envelop save(
  585. @ApiParam(name = "user", value = "Json串")
  586. @RequestParam(value = "user") String user) throws Exception {
  587. User user1 = objectMapper.readValue(user, User.class);
  588. DemographicInfo demographicInfo = objectMapper.readValue(user, DemographicInfo.class);
  589. String msg = this.basicVerify(user1, false);
  590. if (!StringUtils.isEmpty(msg)) {
  591. return failed(msg);
  592. }
  593. //设置默认密码为身份证后八位
  594. if (!StringUtils.isEmpty(user1.getIdCardNo()) && user1.getIdCardNo().length() > 9) {
  595. String defaultPassword = user1.getIdCardNo().substring(user1.getIdCardNo().length() - 8);
  596. user1.setPassword(DigestUtils.md5Hex(defaultPassword));
  597. } else {
  598. user1.setPassword(DigestUtils.md5Hex(default_password));
  599. }
  600. //更新居民demographics表中居民信息(无则创建,有则更新)
  601. String telephone = "{\"联系电话\":\"telephone\"}";
  602. telephone = telephone.replace("telephone", user1.getTelephone());
  603. demographicInfo.setTelephoneNo(telephone);
  604. demographicInfo.setName(user1.getRealName());
  605. //新增家庭地址信息
  606. String homeAddress = "";
  607. if (!StringUtils.isEmpty(user1.getProvinceName())) {
  608. homeAddress += user1.getProvinceName();
  609. }
  610. if (!StringUtils.isEmpty(user1.getCityName())) {
  611. homeAddress += user1.getCityName();
  612. }
  613. if (!StringUtils.isEmpty(user1.getAreaName())) {
  614. homeAddress += user1.getAreaName();
  615. }
  616. if (!StringUtils.isEmpty(homeAddress)) {
  617. demographicInfo.setHomeAddress(homeAddress);
  618. }
  619. user1.setId(getObjectId(BizObject.User));
  620. user1.setCreateDate(new Date());
  621. String userType = user1.getUserType();
  622. SystemDictEntry dict = dictEntryService.getDictEntry(15, userType);
  623. if (dict != null) {
  624. user1.setUserType(userType);
  625. }
  626. user1.setActivated(true);
  627. User user2 = userService.save(user1, demographicInfo);
  628. return success(user2);
  629. }
  630. @RequestMapping(value = ServiceApi.Users.Update, method = RequestMethod.POST)
  631. @ApiOperation("更新")
  632. public Envelop update(
  633. @ApiParam(name = "user", value = "Json串")
  634. @RequestParam(value = "user") String user) throws Exception {
  635. User detailModel = toEntity(user, User.class);
  636. String msg = this.basicVerify(detailModel, true);
  637. if (!StringUtils.isEmpty(msg)) {
  638. return failed(msg);
  639. }
  640. //修改时先修改所属角色组再修改用户,修改角色组失败(修改失败)、修改用户失败 (回显角色组)
  641. String userType = detailModel.getUserType();
  642. SystemDictEntry dict = dictEntryService.getDictEntry(15, userType);
  643. if (dict != null) {
  644. detailModel.setUserType(userType);
  645. }
  646. //同时修改医生表及用户表信息
  647. Doctors doctor = doctorService.getByIdCardNo(detailModel.getIdCardNo());
  648. if (doctor != null) {
  649. doctor.setName(detailModel.getRealName());
  650. doctor.setPyCode(PinyinUtil.getPinYinHeadChar(detailModel.getRealName(), false));
  651. doctor.setSex(detailModel.getGender());
  652. doctor.setPhone(detailModel.getTelephone());
  653. doctor.setPhoto(detailModel.getImgRemotePath());
  654. }
  655. DemographicInfo demographicInfo = demographicService.getDemographicInfoByIdCardNo(detailModel.getIdCardNo());
  656. if (demographicInfo != null) {
  657. demographicInfo.setName(detailModel.getRealName());
  658. demographicInfo.setTelephoneNo("{\"联系电话\":\"" + detailModel.getTelephone() + "\"}");
  659. demographicInfo.setGender(detailModel.getGender());
  660. demographicInfo.setMartialStatus(detailModel.getMartialStatus());
  661. demographicInfo.setBirthday(DateUtil.strToDate(detailModel.getBirthday()));
  662. } else {
  663. demographicInfo = objectMapper.readValue(user, DemographicInfo.class);
  664. demographicInfo.setName(detailModel.getRealName());
  665. demographicInfo.setTelephoneNo("{\"联系电话\":\"" + detailModel.getTelephone() + "\"}");
  666. String homeAddress = "";
  667. if (!StringUtils.isEmpty(detailModel.getProvinceName())) {
  668. homeAddress += detailModel.getProvinceName();
  669. }
  670. if (!StringUtils.isEmpty(detailModel.getCityName())) {
  671. homeAddress += detailModel.getCityName();
  672. }
  673. if (!StringUtils.isEmpty(detailModel.getAreaName())) {
  674. homeAddress += detailModel.getAreaName();
  675. }
  676. if (!StringUtils.isEmpty(homeAddress)) {
  677. demographicInfo.setHomeAddress(homeAddress);
  678. }
  679. }
  680. User user1 = userService.update(detailModel, doctor, demographicInfo);
  681. return success(user1);
  682. }
  683. @RequestMapping(value = ServiceApi.Users.Check, method = RequestMethod.GET)
  684. @ApiOperation(value = "检查字段是否重复")
  685. public Boolean check(
  686. @ApiParam(name = "field", value = "检查字段", required = true)
  687. @RequestParam(value = "field") String field,
  688. @ApiParam(name = "value", value = "检查值", required = true)
  689. @RequestParam(value = "value") String value) {
  690. if (userService.findByField(field, value).size() <= 0) {
  691. return false;
  692. }
  693. return true;
  694. }
  695. @RequestMapping(value = ServiceApi.Users.ChangePassword, method = RequestMethod.POST)
  696. @ApiOperation(value = "修改密码")
  697. public Boolean passwordChange(
  698. @ApiParam(name = "userId", value = "用户ID", required = true)
  699. @RequestParam(value = "userId") String userId,
  700. @ApiParam(name = "password", value = "password", required = true)
  701. @RequestParam(value = "password") String password) {
  702. User user = userService.getUser(userId);
  703. if (null == user) {
  704. return false;
  705. }
  706. user.setPassword(DigestUtils.md5Hex(password));
  707. userService.save(user);
  708. return true;
  709. }
  710. @RequestMapping(value = ServiceApi.Users.DistributeSecurityKey, method = RequestMethod.POST)
  711. @ApiOperation(value = "分配密钥", notes = "重新分配密钥")
  712. public Map<String, String> distributeSecurityKey(
  713. @ApiParam(name = "userId", value = "用户ID")
  714. @RequestParam(value = "userId") String userId) throws Exception {
  715. User user = userService.getUser(userId);
  716. if (null == user) {
  717. return null;
  718. }
  719. UserSecurity userSecurity = userSecurityService.getKeyByUserId(userId, false);
  720. Map<String, String> keyMap = new HashMap<>();
  721. if (userSecurity != null) {
  722. // 删除原有的公私钥重新分配
  723. List<UserKey> userKeyList = userSecurityService.getKeyMapByUserId(userId);
  724. userSecurityService.deleteKey(userKeyList);
  725. }
  726. userSecurity = userSecurityService.createKeyByUserId(userId);
  727. String validTime = DateFormatUtils.format(userSecurity.getFromDate(), "yyyy-MM-dd")
  728. + "~" + DateFormatUtils.format(userSecurity.getExpiryDate(), "yyyy-MM-dd");
  729. keyMap.put("publicKey", userSecurity.getPublicKey());
  730. keyMap.put("validTime", validTime);
  731. keyMap.put("startTime", DateFormatUtils.format(userSecurity.getFromDate(), "yyyy-MM-dd"));
  732. return keyMap;
  733. }
  734. @RequestMapping(value = ServiceApi.Users.GetSecurityKey, method = RequestMethod.GET)
  735. @ApiOperation(value = "查询用户公钥", notes = "查询用户公钥")
  736. public Map<String, String> UserId(
  737. @ApiParam(name = "userId", value = "登录帐号")
  738. @RequestParam(value = "userId") String userId) throws Exception {
  739. User user = userService.getUser(userId);
  740. if (null == user) {
  741. return null;
  742. }
  743. UserSecurity userSecurity = userSecurityService.getKeyByUserId(userId, true);
  744. if (null == userSecurity) {
  745. return null;
  746. }
  747. Map<String, String> keyMap = new HashMap<>();
  748. String validTime = DateFormatUtils.format(userSecurity.getFromDate(), "yyyy-MM-dd")
  749. + "~" + DateFormatUtils.format(userSecurity.getExpiryDate(), "yyyy-MM-dd");
  750. keyMap.put("publicKey", userSecurity.getPublicKey());
  751. keyMap.put("validTime", validTime);
  752. keyMap.put("startTime", DateFormatUtils.format(userSecurity.getFromDate(), "yyyy-MM-dd"));
  753. return keyMap;
  754. }
  755. /**
  756. * 用户基本信息验证
  757. *
  758. * @param user
  759. * @return
  760. */
  761. private String basicVerify(User user, boolean update) {
  762. String errorMsg = "";
  763. if (StringUtils.isEmpty(user.getLoginCode())) {
  764. errorMsg += "账户不能为空!";
  765. }
  766. if (StringUtils.isEmpty(user.getRealName())) {
  767. errorMsg += "姓名不能为空!";
  768. }
  769. if (StringUtils.isEmpty(user.getIdCardNo())) {
  770. errorMsg += "身份证号不能为空!";
  771. }
  772. if (StringUtils.isEmpty(user.getEmail())) {
  773. errorMsg += "邮箱不能为空!";
  774. }
  775. if (StringUtils.isEmpty(user.getTelephone())) {
  776. errorMsg += "电话号码不能为空!";
  777. }
  778. if (StringUtils.isEmpty(user.getRole())) {
  779. errorMsg += "用户角色不能为空!";
  780. }
  781. if (!StringUtils.isEmpty(errorMsg)) {
  782. return errorMsg;
  783. }
  784. if (update) {
  785. List<User> oldUserList1 = userService.findByField("id", user.getId());
  786. if (oldUserList1.size() <= 0) {
  787. return "操作用户不存在";
  788. }
  789. User oldUser = oldUserList1.get(0);
  790. if (!user.getLoginCode().equals(oldUser.getLoginCode()) && userService.findByField("loginCode", user.getLoginCode()).size() > 0) {
  791. return "账户已存在";
  792. }
  793. if (!user.getIdCardNo().equals(oldUser.getIdCardNo()) && userService.findByField("idCardNo", user.getIdCardNo()).size() > 0) {
  794. return "身份证号已存在";
  795. }
  796. if (!user.getEmail().equals(oldUser.getEmail()) && userService.findByField("email", user.getEmail()).size() > 0) {
  797. return "邮箱已存在";
  798. }
  799. if (!user.getTelephone().equals(oldUser.getTelephone()) && userService.findByField("telephone", user.getTelephone()).size() > 0) {
  800. return "电话号码已存在";
  801. }
  802. } else {
  803. if (userService.findByField("loginCode", user.getLoginCode()).size() > 0) {
  804. return "账户已存在";
  805. }
  806. if (userService.findByField("idCardNo", user.getIdCardNo()).size() > 0) {
  807. return "身份证号已存在";
  808. }
  809. if (userService.findByField("email", user.getEmail()).size() > 0) {
  810. return "邮箱已存在";
  811. }
  812. if (userService.findByField("telephone", user.getTelephone()).size() > 0) {
  813. return "电话号码已存在";
  814. }
  815. }
  816. return errorMsg;
  817. }
  818. @RequestMapping(value = ServiceApi.Users.UsersOfApp, method = RequestMethod.POST)
  819. @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
  820. @ApiOperation(value = "App用户注册信息-创建用户", notes = "App用户注册信息")
  821. public Envelop appCreateUser(
  822. @ApiParam(name = "userJsonData", required = true, value = "用户json", defaultValue = "")
  823. @RequestParam(value = "userJsonData") String userJsonData,
  824. @ApiParam(name = "appId", value = "应用id-健康上饶appid", defaultValue = "WYo0l73F8e")
  825. @RequestParam(value = "appId") String appId) throws Exception {
  826. Envelop envelop = new Envelop();
  827. User user = toEntity(userJsonData, User.class);
  828. if (StringUtils.isEmpty(user.getDemographicId())) {
  829. envelop.setErrorMsg("身份证不能为空");
  830. return envelop;
  831. }
  832. if (StringUtils.isEmpty(user.getTelephone())) {
  833. envelop.setErrorMsg("手机号不能为空");
  834. return envelop;
  835. }
  836. if (StringUtils.isEmpty(user.getPassword())) {
  837. envelop.setErrorMsg("密码不能为空");
  838. return envelop;
  839. }
  840. String userId = getObjectId(BizObject.User);
  841. user.setId(userId);
  842. user.setCreateDate(new Date());
  843. user.setIdCardNo(user.getDemographicId());
  844. if (!StringUtils.isEmpty(user.getPassword())) {
  845. user.setPassword(DigestUtils.md5Hex(user.getPassword()));
  846. } else {
  847. user.setPassword(DigestUtils.md5Hex(default_password));
  848. }
  849. user.setLoginCode(user.getDemographicId());
  850. user.setDType("Patient");
  851. user.setUserType(ConstantUtil.PATIENTUSERTYPEID);
  852. user.setActivated(true);
  853. if (userService.findByField("loginCode", user.getDemographicId()).size() > 0) {
  854. envelop.setErrorMsg("账户已存在");
  855. return envelop;
  856. }
  857. if (userService.findByField("demographicId", user.getDemographicId()).size() > 0) {
  858. envelop.setErrorMsg("身份证号已存在");
  859. return envelop;
  860. }
  861. if (userService.findByField("telephone", user.getTelephone()).size() > 0) {
  862. envelop.setErrorMsg("电话号码已存在");
  863. return envelop;
  864. }
  865. user = userService.saveUser(user);
  866. String[] appIds = registerRoleClientId.split(",");
  867. for (String rgAppId : appIds) {
  868. //根据用户类型、应用id判断是否关联角色,
  869. List<UserTypeRoles> list = xUserTypeRolesRepository.ListUserTypeRolesByTypeIdAndClientId(Integer.valueOf(ConstantUtil.PATIENTUSERTYPEID), rgAppId);
  870. if (null != list && list.size() > 0) {
  871. //卫生人员初始化授权
  872. userService.initializationAuthorization(Integer.valueOf(ConstantUtil.PATIENTUSERTYPEID), userId);
  873. } else {
  874. // orgcode卫计委机构编码-PDY026797 添加居民的时候 默认 加到卫计委-居民角色中
  875. List<Roles> rolesList = rolesService.findByCodeAndAppIdAndOrgCode(Arrays.asList(new String[]{orgcode}), rgAppId, "Patient");
  876. Roles roles = new Roles();
  877. if (null != rolesList && rolesList.size() > 0) {
  878. roles = rolesList.get(0);
  879. } else {
  880. //如果角色不存在,为该应用创建居民角色
  881. roles.setAppId(appId);
  882. roles.setName("居民");
  883. roles.setCode("Patient");
  884. //上饶市卫计委机构
  885. roles.setOrgCode(orgcode);
  886. roles.setType("1");
  887. roles.setDescription("系统创建默认角色");
  888. roles = rolesService.save(roles);
  889. }
  890. //在org_member_relation 表里追加关联关系
  891. roleUserService.batchCreateRoleUsersRelation(userId, String.valueOf(roles.getId()));
  892. }
  893. }
  894. // 根据身份证号码查找居民,若不存在则创建居民。
  895. DemographicInfo demographicInfo = demographicService.getDemographicInfo(user.getDemographicId());
  896. if (null == demographicInfo) {
  897. demographicInfo = new DemographicInfo();
  898. demographicInfo.setIdCardNo(user.getIdCardNo());
  899. demographicInfo.setTelephoneNo("{\"联系电话\":\"" + user.getTelephone() + "\"}");
  900. demographicInfo.setName(user.getRealName());
  901. demographicInfo.setPassword(user.getPassword());
  902. demographicInfo.setRegisterTime(new Date());
  903. demographicService.savePatient(demographicInfo);
  904. }
  905. envelop.setObj(convertToModel(user, MUser.class, null));
  906. envelop.setSuccessFlg(true);
  907. return envelop;
  908. }
  909. @RequestMapping(value = ServiceApi.Users.changePasswordByTelephone, method = RequestMethod.POST)
  910. @ApiOperation(value = "手机号码-修改密码")
  911. public Envelop changePasswordByTelephone(
  912. @ApiParam(name = "telephone", value = "电话号码", required = true)
  913. @RequestParam(value = "telephone") String telephone,
  914. @ApiParam(name = "password", value = "password", required = true)
  915. @RequestParam(value = "password") String password) {
  916. Envelop envelop = new Envelop();
  917. User user = userService.getUserByTel(telephone);
  918. if (null == user) {
  919. envelop.setSuccessFlg(false);
  920. envelop.setErrorMsg("电话号码不存在!");
  921. return envelop;
  922. }
  923. user.setPassword(DigestUtils.md5Hex(password));
  924. user = userService.save(user);
  925. envelop.setSuccessFlg(true);
  926. envelop.setObj(user);
  927. return envelop;
  928. }
  929. @RequestMapping(value = ServiceApi.Users.changePasswordByOldPassword, method = RequestMethod.POST)
  930. @ApiOperation(value = "健康上饶-根据旧密码修改用户的密码", notes = "根据旧密码修改用户的密码信息")
  931. public Envelop updatePasswordByOldPwd(
  932. @ApiParam(name = "userId", value = "用户id", defaultValue = "")
  933. @RequestParam(value = "userId", required = false) String userId,
  934. @ApiParam(name = "passwordOld", value = "旧密码", defaultValue = "")
  935. @RequestParam(value = "passwordOld", required = false) String passwordOld,
  936. @ApiParam(name = "passwordNew", value = "新密码", defaultValue = "")
  937. @RequestParam(value = "passwordNew", required = false) String passwordNew) throws Exception {
  938. Envelop envelop = new Envelop();
  939. //获取用户信息,根据用户ID
  940. User user = userService.getUser(userId);
  941. if (user == null) {
  942. envelop.setSuccessFlg(false);
  943. envelop.setErrorMsg("对不起,该用户不存在,请确认!");
  944. return envelop;
  945. }
  946. //对旧密码进行MD5加密后,进行对比验证
  947. String hashPassWordOld = DigestUtils.md5Hex(passwordOld);
  948. if (org.apache.commons.lang3.StringUtils.equals(hashPassWordOld, user.getPassword().toString())) {
  949. //当验证通过后,进行新密码的更新在微服务中会将该密码信息进行MD5加密
  950. user.setPassword(DigestUtils.md5Hex(passwordNew));
  951. user = userService.save(user);
  952. if (null != user) {
  953. envelop.setSuccessFlg(true);
  954. envelop.setObj(user);
  955. } else {
  956. envelop.setSuccessFlg(false);
  957. envelop.setErrorMsg("密码修改失败,请联系管理员!");
  958. }
  959. } else {
  960. envelop.setSuccessFlg(false);
  961. envelop.setErrorMsg("对不起,原密码不正确,请确认!");
  962. }
  963. return envelop;
  964. }
  965. @RequestMapping(value = ServiceApi.Users.UsersOfAppPhoneExistence, method = RequestMethod.GET)
  966. @ApiOperation("根据过滤条件判断是否存在")
  967. public boolean UsersOfAppPhoneExistence(
  968. @ApiParam(name = "filters", value = "filters", defaultValue = "")
  969. @RequestParam(value = "filters") String filters) throws Exception {
  970. List<User> user = userService.search("", filters, "", 1, 1);
  971. return user != null && user.size() > 0;
  972. }
  973. @RequestMapping(value = ServiceApi.Users.updateUserTelePhone, method = RequestMethod.POST)
  974. @ApiOperation(value = "更换手机号码", notes = "更换手机号码")
  975. public Envelop updateUserTelePhone(
  976. @ApiParam(name = "userId", value = "用户id", defaultValue = "")
  977. @RequestParam(value = "userId", required = false) String userId,
  978. @ApiParam(name = "telePhoneNew", value = "新手机号码", defaultValue = "")
  979. @RequestParam(value = "telePhoneNew") String telePhoneNew) throws Exception {
  980. Envelop envelop = new Envelop();
  981. //获取用户信息,根据用户ID
  982. User user = userService.getUser(userId);
  983. if (user == null) {
  984. envelop.setSuccessFlg(false);
  985. envelop.setErrorMsg("对不起,该用户不存在,请确认!");
  986. return envelop;
  987. }
  988. //同时修改医生表及用户表信息
  989. Doctors doctor = doctorService.getByIdCardNo(user.getIdCardNo());
  990. if (doctor != null) {
  991. doctor.setPhone(telePhoneNew);
  992. }
  993. DemographicInfo demographicInfo = demographicService.getDemographicInfoByIdCardNo(user.getIdCardNo());
  994. if (demographicInfo != null) {
  995. demographicInfo.setTelephoneNo("{\"联系电话\":\"" + telePhoneNew + "\"}");
  996. } else {
  997. demographicInfo = objectMapper.readValue(JSON.toJSONString(user), DemographicInfo.class);
  998. demographicInfo.setTelephoneNo("{\"联系电话\":\"" + telePhoneNew + "\"}");
  999. }
  1000. User user1 = userService.update(user, doctor, demographicInfo);
  1001. envelop.setSuccessFlg(true);
  1002. envelop.setObj(user);
  1003. return envelop;
  1004. }
  1005. @RequestMapping(value = ServiceApi.Users.GetUserOfUsersOfApp, method = RequestMethod.GET)
  1006. @ApiOperation(value = "公众健康服务-根据用户身份证号码或者电话号码,获取用户")
  1007. public Envelop getUserOfUsersOfApp(
  1008. @ApiParam(name = "userName", value = "身份证号码或者电话号码", defaultValue = "")
  1009. @RequestParam(value = "userName") String userName) {
  1010. Envelop envelop = new Envelop();
  1011. List<User> userList = userService.getUserForLogin(userName);
  1012. if (null != userList && userList.size() > 0) {
  1013. User user = userList.get(0);
  1014. envelop.setSuccessFlg(true);
  1015. envelop.setObj(user);
  1016. } else {
  1017. envelop.setSuccessFlg(false);
  1018. envelop.setErrorMsg("用户不存在!");
  1019. }
  1020. return envelop;
  1021. }
  1022. @RequestMapping(value = ServiceApi.Users.GetUserInfoAndRolesByUserIdOrCode, method = RequestMethod.GET)
  1023. @ApiOperation(value = "用户id或者用户登录账号获取用户信息")
  1024. public Envelop getUserInfoAndRolesByUserIdOrCode(
  1025. @ApiParam(name = "userIdOrCode", value = "用户id或者用户登录账号")
  1026. @RequestParam(value = "userIdOrCode", required = false) String userIdOrCode,
  1027. @ApiParam(name = "appClientId", value = "应用id")
  1028. @RequestParam(value = "appClientId", required = true) String appClientId) throws Exception {
  1029. Envelop envelop = new Envelop();
  1030. User user;
  1031. MUser mUser = new MUser();
  1032. //获取用户信息
  1033. if (org.apache.commons.lang.StringUtils.isNotEmpty(userIdOrCode)) {
  1034. user = userService.getUser(userIdOrCode);
  1035. if (null == user) {
  1036. List<User> users = userService.getUserForLogin(userIdOrCode);
  1037. if (null != users && users.size() > 0) {
  1038. user = users.get(0);
  1039. } else {
  1040. envelop.setErrorMsg("用户不存在!");
  1041. envelop.setSuccessFlg(false);
  1042. return envelop;
  1043. }
  1044. }
  1045. } else {
  1046. envelop.setErrorMsg("用户id或者用户登录账号不能为空!");
  1047. envelop.setSuccessFlg(false);
  1048. return envelop;
  1049. }
  1050. //根据用户id和应用id获取角色
  1051. List<Map<String, Object>> roles = rolesService.findRolesByUserIdAndAppId(user.getId(), appClientId);
  1052. mUser = convertToModel(user, MUser.class, null);
  1053. //医生在总部库中的对应关系
  1054. MJkzlOrgMemberRelation mJkzlOrgMemberRelation = new MJkzlOrgMemberRelation();
  1055. List<OrgMemberRelation> memberRelationList = relationService.getByUserId(mUser.getId());
  1056. if (null != memberRelationList && memberRelationList.size() > 0) {
  1057. OrgMemberRelation orgMemberRelation = memberRelationList.get(0);
  1058. mJkzlOrgMemberRelation.setJkzlDoctorSn(orgMemberRelation.getJkzlDoctorSn());
  1059. mJkzlOrgMemberRelation.setJkzlDoctorUid(orgMemberRelation.getJkzlDoctorUid());
  1060. mJkzlOrgMemberRelation.setJkzlHosDeptId(orgMemberRelation.getJkzlHosDeptId());
  1061. mJkzlOrgMemberRelation.setJkzlUserId(orgMemberRelation.getJkzlUserId());
  1062. }
  1063. String jkzlOrgId = relationService.getJkzlOrgIds(mUser.getId());
  1064. mJkzlOrgMemberRelation.setJkzlHosId(jkzlOrgId);
  1065. mUser.setmJkzlOrgMemberRelation(mJkzlOrgMemberRelation);
  1066. envelop.setObj(mUser);
  1067. envelop.setDetailModelList(roles);
  1068. envelop.setSuccessFlg(true);
  1069. return envelop;
  1070. }
  1071. @RequestMapping(value = ServiceApi.Users.initializationAuthorization, method = RequestMethod.GET)
  1072. @ApiOperation(value = "根据用户类型id,用户id进行初始化授权")
  1073. public Envelop initializationAuthorization(
  1074. @ApiParam(name = "userTypeId", value = "用户类型id", defaultValue = "")
  1075. @RequestParam(value = "userTypeId", required = true) int userTypeId,
  1076. @ApiParam(name = "userId", value = "用户id", defaultValue = "")
  1077. @RequestParam(value = "userId", required = true) String userId) {
  1078. Envelop envelop = new Envelop();
  1079. boolean authorrizationFlag = userService.initializationAuthorization(userTypeId, userId);
  1080. if (authorrizationFlag) {
  1081. envelop.setSuccessFlg(true);
  1082. } else {
  1083. envelop.setSuccessFlg(false);
  1084. envelop.setErrorMsg("初始化授权失败!");
  1085. }
  1086. return envelop;
  1087. }
  1088. @RequestMapping(value = BasicServiceApi.Users.GetUserByLoginCode, method = RequestMethod.GET)
  1089. @ApiOperation(value = "政府服务平台-根据登录账号获取当前用户", notes = "政府服务平台-根据登陆用户名及密码验证用户(一个人可属于多个机构)")
  1090. public Envelop getUserInfoByLoginCode(
  1091. @ApiParam(name = "userName", value = "登录账号", defaultValue = "")
  1092. @PathVariable(value = "userName") String userName) {
  1093. Envelop envelop = new Envelop();
  1094. try {
  1095. // 帐户:手机号,身份证号,登录账号
  1096. List<User> users = userService.getUserForLogin(userName);
  1097. List<MUser> mUsers=new ArrayList<>();
  1098. if (users != null) {
  1099. User user = users.get(0);
  1100. String path = getImgPathByFileResource(users.get(0).getImgRemotePath());
  1101. user.setImgRemotePath(path);
  1102. if (users.size() == 1) {
  1103. List<OrgMemberRelation> memberRelations = orgMemberRelationService.findByField("userId", users.get(0).getId());
  1104. envelop.setSuccessFlg(true);
  1105. envelop.setDetailModelList(memberRelations);
  1106. } else {
  1107. envelop.setSuccessFlg(false);
  1108. envelop.setErrorMsg("账号重复,请联系管理员!");
  1109. }
  1110. MUser userModel = convertToModel(user, MUser.class);
  1111. //获取用户类型
  1112. String userType = user.getUserType().toString();
  1113. if (org.apache.commons.lang3.StringUtils.isNotEmpty(userType)) {
  1114. int userTypeInt = Integer.parseInt(user.getUserType().toString());
  1115. UserType userTypeObj = xUserTypeRepository.findById(userTypeInt);
  1116. if(userTypeObj != null){
  1117. userModel.setUserTypeName(userTypeObj.getName());
  1118. }
  1119. }
  1120. //获取用户角色
  1121. user.setRole("");
  1122. List<RoleUser> roleUserList = roleUserService.search("userId=" + user.getId());
  1123. if (null != roleUserList && roleUserList.size() > 0) {
  1124. StringBuffer buffer = new StringBuffer();
  1125. for (RoleUser m : roleUserList) {
  1126. buffer.append(m.getRoleId());
  1127. buffer.append(",");
  1128. }
  1129. userModel.setRole(buffer.substring(0, buffer.length() - 1));
  1130. }
  1131. mUsers.add(userModel);
  1132. envelop.setObj(mUsers);
  1133. } else {
  1134. envelop.setSuccessFlg(false);
  1135. envelop.setErrorMsg("该账号不存在,请确认或联系管理员!");
  1136. }
  1137. } catch (Exception e) {
  1138. envelop.setSuccessFlg(false);
  1139. envelop.setErrorMsg(e.getMessage());
  1140. e.printStackTrace();
  1141. }
  1142. return envelop;
  1143. }
  1144. @RequestMapping(value = BasicServiceApi.Users.UpdateUserByUsers, method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
  1145. @ApiOperation(value = "健康上饶app-修改用户", notes = "因为头像的获取方式与基础信息管理不同,基础信息管理在app-admin处理了图片路径")
  1146. public MUser updateUserByUsers(
  1147. @ApiParam(name = "user_json_data", value = "", defaultValue = "")
  1148. @RequestBody String userJsonData) throws Exception {
  1149. User user = toEntity(userJsonData, User.class);
  1150. String userType = user.getUserType();
  1151. SystemDictEntry dict = dictEntryService.getDictEntry(15, userType);
  1152. if (dict != null) {
  1153. user.setDType(userType);
  1154. }
  1155. //获取用户头像,保存至file_resource
  1156. if (null != user.getImgRemotePath() && !StringUtils.isEmpty(user.getImgRemotePath())) {
  1157. user.setImgRemotePath(saveImgFileSource(user.getImgRemotePath()));
  1158. }
  1159. userService.saveUser(user);
  1160. //同时修改医生表及用户表信息
  1161. Doctors doctors = doctorService.getByIdCardNo(user.getIdCardNo());
  1162. if (!StringUtils.isEmpty(doctors)) {
  1163. doctors.setName(user.getRealName());
  1164. doctors.setPyCode(PinyinUtil.getPinYinHeadChar(user.getRealName(), false));
  1165. doctors.setSex(user.getGender());
  1166. doctors.setPhone(user.getTelephone());
  1167. doctors.setPhoto(user.getImgRemotePath());
  1168. doctorService.save(doctors);
  1169. }
  1170. DemographicInfo demographicInfo = demographicService.getDemographicInfoByIdCardNo(user.getIdCardNo());
  1171. if (!StringUtils.isEmpty(demographicInfo)) {
  1172. demographicInfo.setName(user.getRealName());
  1173. demographicInfo.setTelephoneNo("{\"联系电话\":\"" + user.getTelephone() + "\"}");
  1174. demographicInfo.setGender(user.getGender());
  1175. demographicInfo.setMartialStatus(user.getMartialStatus());
  1176. demographicInfo.setBirthday(DateUtil.strToDate(user.getBirthday()));
  1177. demographicService.save(demographicInfo);
  1178. }
  1179. return convertToModel(user, MUser.class);
  1180. }
  1181. /**
  1182. * 健康上饶app,前端单独调用头像上传接口,将头像的路径传到后端。后端需要将路径保存到fileResource表中,再将id存到用户表
  1183. * http://172.19.103.52:80/group1/M00/26/AF/rBFuWFr5BkWAZfYmAAAeqtdiKIY039.png
  1184. *
  1185. * @param path
  1186. * @return
  1187. */
  1188. public String saveImgFileSource(String path) throws Exception {
  1189. //获取用户头像,保存至file_resource
  1190. FileResource fileResource = new FileResource();
  1191. fileResource.setId(getObjectId(BizObject.FileResource));
  1192. //获取groupName
  1193. String[] str = path.split("/");
  1194. String groupName = str[3];
  1195. String remoteFileName = path.substring(path.indexOf(groupName)+ groupName.length()+1);
  1196. //保存到resource表中
  1197. fileResource.setStoragePath(groupName + ":" + remoteFileName);
  1198. fileResource.setCreateDate(new Date());
  1199. fileResource.setMime("user");
  1200. fileResource.setObjectId("");
  1201. return resourceRepository.save(fileResource).getId();
  1202. }
  1203. /**
  1204. * 健康上饶app,根据fileResourceId获取图片路径
  1205. *
  1206. * @param fileResourceId
  1207. * @return
  1208. */
  1209. public String getImgPathByFileResource(String fileResourceId) throws Exception {
  1210. FileResource fileResource = resourceRepository.findById(fileResourceId);
  1211. String path = null == fileResource ? "" : fileResource.getStoragePath();
  1212. if (!StringUtils.isEmpty(path)) {
  1213. return fastDfsPublicServers + "/" + path.replace(":", "/");
  1214. }
  1215. return "";
  1216. }
  1217. /**
  1218. * 判断是否为图片
  1219. * @param imgPath
  1220. * @return
  1221. */
  1222. public boolean imageCheck(String imgPath) throws Exception {
  1223. MimetypesFileTypeMap mtftp = new MimetypesFileTypeMap();
  1224. mtftp.addMimeTypes("image png tif jpg jpeg bmp");
  1225. String mimetype= mtftp.getContentType(imgPath);
  1226. String type = mimetype.split("/")[0];
  1227. return type.equals("image");
  1228. }
  1229. }