UserEndPoint.java 59 KB

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