UserEndPoint.java 59 KB

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