UserManagerController.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409
  1. package com.uas.sso.controller;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.uas.account.entity.UserDetail;
  5. import com.uas.account.exception.AccountException;
  6. import com.uas.account.support.Page;
  7. import com.uas.account.util.AccountUtils;
  8. import com.uas.sso.common.util.HttpUtil;
  9. import com.uas.sso.core.Const;
  10. import com.uas.sso.core.Status;
  11. import com.uas.sso.entity.*;
  12. import com.uas.sso.service.ApplyUserSpaceService;
  13. import com.uas.sso.service.UserService;
  14. import com.uas.sso.service.UserspaceService;
  15. import org.apache.commons.codec.binary.Base64;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.ui.ModelMap;
  18. import org.springframework.util.StringUtils;
  19. import org.springframework.web.bind.annotation.*;
  20. import java.io.*;
  21. import java.sql.Timestamp;
  22. import java.text.SimpleDateFormat;
  23. import java.util.ArrayList;
  24. import java.util.Date;
  25. import java.util.List;
  26. import java.util.Set;
  27. /**
  28. * 用户信息管理controller
  29. *
  30. * @author wangmh
  31. * @date 2018/1/2
  32. */
  33. @RestController
  34. @RequestMapping("/api/user")
  35. public class UserManagerController extends BaseController {
  36. @Autowired
  37. private UserService userService;
  38. @Autowired
  39. private UserspaceService userspaceService;
  40. @Autowired
  41. private ApplyUserSpaceService applyUserSpaceService;
  42. /**
  43. * 用户信息新增、修改
  44. *
  45. * @param userView
  46. * @return
  47. */
  48. @RequestMapping(method = RequestMethod.POST)
  49. @ResponseBody
  50. public ModelMap apiSave(@RequestBody User userView, String appId) {
  51. if (userView == null || appId == null) {
  52. throw new AccountException("参数错误");
  53. }
  54. User user = new User();
  55. if (userView.getUserUU() != null) {
  56. user = userService.findOne(userView.getUserUU());
  57. }
  58. if (user == null && userView.getMobile() != null) {
  59. user = userService.findByMobile(userView.getMobile());
  60. }
  61. if (user == null) {
  62. user = userService.register(userView);
  63. } else {
  64. user = userService.updateUser(userView.getUserUU(), userView);
  65. }
  66. return success(user);
  67. }
  68. /**
  69. * 校验手机号是否被注册
  70. *
  71. * @param mobile 手机号
  72. * @return
  73. */
  74. @RequestMapping(value = "/checkMobile", method = RequestMethod.GET)
  75. public ModelMap checkMobile(String mobile) {
  76. return new ModelMap("hasRegister", userService.mobileHasRegistered(mobile));
  77. }
  78. /**
  79. * 校验手机号是否被注册
  80. *
  81. * @param email 手机号
  82. * @return
  83. */
  84. @RequestMapping(value = "/checkEmail", method = RequestMethod.GET)
  85. public ModelMap checkEmail(String email) {
  86. return new ModelMap("hasRegister", userService.emailHasRegistered(email));
  87. }
  88. /**
  89. * 校验真实姓名是否被认证
  90. *
  91. * @author wangmh
  92. * @date 2018/1/11 15:05
  93. * @param realName 真实姓名
  94. * @return
  95. */
  96. @RequestMapping(value = "/realName/valid", method = RequestMethod.GET)
  97. public ModelMap realNameIsValid(String realName) {
  98. return success(new ModelMap("isValid", userService.realNameIsValid(realName)));
  99. }
  100. /**
  101. * 校验身份证号是否被认证
  102. *
  103. * @author wangmh
  104. * @date 2018/1/11 15:06
  105. * @param idCard 身份证号
  106. * @return {"isValid", b} b为true说明已认证
  107. */
  108. @RequestMapping(value = "/idCard/valid", method = RequestMethod.GET)
  109. public ModelMap idCardIsValid(String idCard) {
  110. return success(new ModelMap("isValid", userService.idCardIsValid(idCard)));
  111. }
  112. /**
  113. * 根据企业uu号查询企业下所有用户信息
  114. * @author wangmh
  115. * @date 2018/1/26 14:43
  116. * @param page 当前页数
  117. * @param size 每页大小
  118. * @param spaceUU 企业uu号
  119. * @return org.springframework.data.domain.Page, content 为用户信息集合
  120. */
  121. @RequestMapping(value = "/find/member", method = RequestMethod.GET)
  122. public ModelMap findMember(@RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "20") int size, Long spaceUU) {
  123. return success(userService.findMemberBySpaceUU(page, size, spaceUU));
  124. }
  125. /**
  126. * 根据用户uu号查询用户信息
  127. * @author wangmh
  128. * @date 2018/1/26 14:46
  129. * @param userUU 用户uu号
  130. * @return 用户信息
  131. */
  132. @RequestMapping(value = "/info", method = RequestMethod.GET)
  133. public ModelMap findOne(@RequestParam Long userUU) {
  134. return success(userService.findOne(userUU));
  135. }
  136. /**
  137. * 根据用户手机号查询用户信息
  138. * @author wangmh
  139. * @date 2018/1/26 14:46
  140. * @param mobile 用户手机号
  141. * @return 用户信息
  142. */
  143. @RequestMapping(value = "/info/mobile", method = RequestMethod.GET)
  144. public ModelMap findByMobile(@RequestParam String mobile) {
  145. return success(userService.findByMobile(mobile));
  146. }
  147. /**
  148. * 用户申请绑定企业
  149. *
  150. * @author wangmh
  151. * @date 2018/1/31 18:22
  152. * @param userUU 用户uu号
  153. * @param spaceUU 企业uu号
  154. * @return 用户信息
  155. */
  156. @RequestMapping(value = "/apply/bind", method = RequestMethod.POST)
  157. public ModelMap bindUserSpace(@RequestParam Long userUU, Long spaceUU) {
  158. applyUserSpaceService.applyBindUserSpace(userUU, spaceUU);
  159. User user = userService.findOne(userUU);
  160. Userspace userspace = userspaceService.findOne(spaceUU);
  161. // 发送邮箱通知管理员
  162. SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日");
  163. ModelMap data = new ModelMap();
  164. data.put("username", user.getVipName());
  165. data.put("time", format.format(new Date()));
  166. data.put("enName", userspace.getSpaceName());
  167. sendEmail("templateForSendMailWhenApplyUserSpace", userspace.getAdmin().getEmail(), data);
  168. // 发送短信通知管理员
  169. sendSms("templateForSendSmsWhenApplyUserSpace", userspace.getAdmin().getMobile(), user.getVipName(), format.format(new Date()), userspace.getSpaceName());
  170. return success();
  171. }
  172. /**
  173. * 根据用户uu号查询分页查询申请信息
  174. * @param userUU 用户uu号
  175. * @param page 当前页,默认值为1
  176. * @param size 每页大小,默认值为20
  177. * @return org.springframework.data.domain.Page,content为ApplyUserSpace集合
  178. */
  179. @RequestMapping(value = "/apply/info", method = RequestMethod.GET)
  180. public ModelMap findApplyInfo(Long userUU, @RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "20") int size) {
  181. return success(applyUserSpaceService.findApplyByUserUU(userUU, page, size));
  182. }
  183. /**
  184. * 用户解除绑定企业
  185. * @param userUU 用户uu号
  186. * @param spaceUU 企业uu号
  187. * @return
  188. */
  189. @RequestMapping(params = "_operate=unbind", method = RequestMethod.POST)
  190. public ModelMap unbindUserSpace(Long userUU, Long spaceUU) {
  191. userService.unbindUserspace(userUU, spaceUU);
  192. return success();
  193. }
  194. /**
  195. * 企业添加已注册用户
  196. * @param appId 应用id
  197. * @param userUU 用户uu号
  198. * @param spaceUU 企业uu号
  199. * @return
  200. */
  201. @RequestMapping(params = "_operate=bind", method = RequestMethod.POST)
  202. public ModelMap addUser(String appId, Long userUU, Long spaceUU) {
  203. userService.bindUserspace(appId, userUU, spaceUU);
  204. return success();
  205. }
  206. /**
  207. * 企业添加未注册用户
  208. * @param appId 应用id
  209. * @param user 用户信息
  210. * @param spaceUU 企业uu号
  211. * @return
  212. */
  213. @RequestMapping(params = "_operate=add", method = RequestMethod.POST)
  214. public ModelMap addUser(String appId, User user, Long spaceUU) {
  215. // 参数判断
  216. if (user == null || user.getUserUU() != null || spaceUU == null) {
  217. return error("参数错误");
  218. }
  219. // 根据手机号判断用户是否为新用户,新用户注册,旧用户绑定
  220. User oldUser = userService.findByMobile(user.getMobile());
  221. if (oldUser == null) {
  222. // 注册新用户,无密码则使用默认密码
  223. if (StringUtils.isEmpty(user.getPassword())) {
  224. user.setPassword("111111");
  225. }
  226. user = userService.register(user);
  227. } else {
  228. user = oldUser;
  229. }
  230. // 绑定企业
  231. userService.bindUserspace(appId, user.getUserUU(), spaceUU);
  232. return success(user);
  233. }
  234. /**
  235. * 接口调用验证密码登录
  236. *
  237. * <pre>
  238. * 这个比较特殊,指定应用可能密码为空,需要借用其他应用的密码来校验
  239. * </pre>
  240. *
  241. * @return
  242. */
  243. @RequestMapping(params = "_operate=fuzzyCheck")
  244. public ModelMap apiFuzzyLogin(User user) {
  245. if (null == user || null == user.getPassword()) {
  246. return error("参数错误");
  247. }
  248. if (!StringUtils.isEmpty(user.getMobile())) {
  249. User userInfo = userService.findByMobile(user.getMobile());
  250. if (userInfo == null) {
  251. return error("未找到用户");
  252. }
  253. // 允许应用在调用该接口前,已经将用户输入的明文加密为密文
  254. String encryPwd = user.getPassword().length() >= 32 ? user.getPassword() : userService.getEncryPassword(
  255. Const.ENCRY_FORMAT, user.getPassword(), userInfo.getSalt());
  256. if (encryPwd.equals(userInfo.getPassword())) {
  257. return success();
  258. }
  259. return error("密码错误");
  260. }
  261. return error("请填写手机号");
  262. }
  263. /**
  264. * erp修改用户信息 如果type为password则修改密码,为mobile则修改手机号,为email则修改邮箱
  265. * @param type 修改类型
  266. * @param userUU 用户uu号
  267. * @param spaceUU 企业uu号
  268. * @param password 密码
  269. * @param data 其他数据
  270. * @return
  271. */
  272. @RequestMapping(value = "/update/{type}/{userUU}/{spaceUU}", method = RequestMethod.POST)
  273. public ModelMap updatePassword(@PathVariable String type, @PathVariable Long userUU, @PathVariable Long spaceUU, String password, String data) {
  274. // 获取企业密钥
  275. Userspace userspace = userspaceService.findOne(spaceUU);
  276. // 校验请求
  277. checkRequest(userspace.getAccessSecret());
  278. // 修改密码
  279. switch (type) {
  280. case "password":
  281. userService.updatePassword(userUU, password);
  282. break;
  283. case "mobile":
  284. userService.updateMobile(userUU, data);
  285. break;
  286. case "email":
  287. userService.updateEmail(userUU, data);
  288. break;
  289. default:
  290. return error("404", "请求错误");
  291. }
  292. return success();
  293. }
  294. /**
  295. * 众创商机导入注册
  296. * @param user 用户信息(主要是用户名,手机号,邮箱和密码,密码base64加密)
  297. * @return
  298. */
  299. @RequestMapping(value = "/sysUserdata/uuzc", method = RequestMethod.POST)
  300. public ModelMap uuzcRegister(User user) {
  301. // 校验手机号
  302. checkMobile(user.getMobile(), null);
  303. // 用户名不能为空
  304. if (StringUtils.isEmpty(user.getVipName())) {
  305. return error("用户名不能为空");
  306. }
  307. // 获取密码
  308. try {
  309. String pwd = new String(Base64.decodeBase64(user.getPassword().getBytes("utf-8")), "utf-8");
  310. user.setPassword(pwd);
  311. } catch (UnsupportedEncodingException e) {
  312. e.printStackTrace();
  313. }
  314. // 传来的值可能带有uu号,去除uu号
  315. user.setUserUU(null);
  316. user = userService.register(user);
  317. return success(user.getUserUU());
  318. }
  319. /**
  320. * erp根据token获取用户信息
  321. * @param token tokenId
  322. * @return
  323. */
  324. @RequestMapping(value = "/getUserByToken", method = RequestMethod.GET)
  325. public ModelMap findUserByToken(String token) {
  326. Token existToken = tokenService.findOne(token);
  327. if (existToken == null) {
  328. return error("验证过期");
  329. }
  330. if (!(existToken.getBind() instanceof ModelMap)) {
  331. return error("验证信息错误");
  332. }
  333. ModelMap data = (ModelMap) existToken.getBind();
  334. User user = userService.findOne((Long) data.get("userUU"));
  335. return success(user);
  336. }
  337. /**
  338. * 根据手机号获取所在企业信息
  339. * @param mobile 用户手机号
  340. * @return
  341. */
  342. @RequestMapping(value = "/getSpace", method = RequestMethod.GET)
  343. @Deprecated
  344. public ModelMap getSpace(String mobile) {
  345. User user = userService.findByMobile(mobile);
  346. Set<Userspace> userSpaces = user.getUserSpaces();
  347. ModelMap data = new ModelMap(user);
  348. data.put("spaces", userSpaces);
  349. return data;
  350. }
  351. @RequestMapping(value = "/getToken", method = RequestMethod.GET)
  352. @ResponseBody
  353. public ModelMap getToken(Long userUU, Long spaceUU) {
  354. ModelMap data = new ModelMap();
  355. data.put("userUU", userUU);
  356. data.put("spaceUU", spaceUU);
  357. Token token = new Token(data);
  358. tokenService.save(token);
  359. return success(token.getId());
  360. }
  361. @RequestMapping("/getTokenData")
  362. public ModelMap getTokenData(String token) {
  363. return success(tokenService.findOne(token).getBind());
  364. }
  365. }