UserManagerController.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365
  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 UserView 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. return success(userService.save(user));
  59. }
  60. /**
  61. * 校验手机号是否被注册
  62. *
  63. * @param mobile 手机号
  64. * @return
  65. */
  66. @RequestMapping(value = "/checkMobile", method = RequestMethod.GET)
  67. public ModelMap checkMobile(String mobile) {
  68. return new ModelMap("hasRegister", userService.mobileHasRegistered(mobile));
  69. }
  70. /**
  71. * 校验手机号是否被注册
  72. *
  73. * @param email 手机号
  74. * @return
  75. */
  76. @RequestMapping(value = "/checkEmail", method = RequestMethod.GET)
  77. public ModelMap checkEmail(String email) {
  78. return new ModelMap("hasRegister", userService.emailHasRegistered(email));
  79. }
  80. /**
  81. * 校验真实姓名是否被认证
  82. *
  83. * @author wangmh
  84. * @date 2018/1/11 15:05
  85. * @param realName 真实姓名
  86. * @return
  87. */
  88. @RequestMapping(value = "/realName/valid", method = RequestMethod.GET)
  89. public ModelMap realNameIsValid(String realName) {
  90. return success(new ModelMap("isValid", userService.realNameIsValid(realName)));
  91. }
  92. /**
  93. * 校验身份证号是否被认证
  94. *
  95. * @author wangmh
  96. * @date 2018/1/11 15:06
  97. * @param idCard 身份证号
  98. * @return {"isValid", b} b为true说明已认证
  99. */
  100. @RequestMapping(value = "/idCard/valid", method = RequestMethod.GET)
  101. public ModelMap idCardIsValid(String idCard) {
  102. return success(new ModelMap("isValid", userService.idCardIsValid(idCard)));
  103. }
  104. /**
  105. * 根据企业uu号查询企业下所有用户信息
  106. * @author wangmh
  107. * @date 2018/1/26 14:43
  108. * @param page 当前页数
  109. * @param size 每页大小
  110. * @param spaceUU 企业uu号
  111. * @return org.springframework.data.domain.Page, content 为用户信息集合
  112. */
  113. @RequestMapping(value = "/find/member", method = RequestMethod.GET)
  114. public ModelMap findMember(@RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "20") int size, Long spaceUU) {
  115. return success(userService.findMemberBySpaceUU(page, size, spaceUU));
  116. }
  117. /**
  118. * 根据用户uu号查询用户信息
  119. * @author wangmh
  120. * @date 2018/1/26 14:46
  121. * @param userUU 用户uu号
  122. * @return 用户信息
  123. */
  124. @RequestMapping(value = "/info", method = RequestMethod.GET)
  125. public ModelMap findOne(@RequestParam Long userUU) {
  126. return success(userService.findOne(userUU));
  127. }
  128. /**
  129. * 用户申请绑定企业
  130. *
  131. * @author wangmh
  132. * @date 2018/1/31 18:22
  133. * @param userUU 用户uu号
  134. * @param spaceUU 企业uu奥
  135. * @return 用户信息
  136. */
  137. @RequestMapping(value = "/apply/bind", method = RequestMethod.POST)
  138. public ModelMap bindUserSpace(@RequestParam Long userUU, Long spaceUU) {
  139. applyUserSpaceService.applyBindUserSpace(userUU, spaceUU);
  140. User user = userService.findOne(userUU);
  141. Userspace userspace = userspaceService.findOne(spaceUU);
  142. // 发送邮箱通知管理员
  143. SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日");
  144. ModelMap data = new ModelMap();
  145. data.put("username", user.getVipName());
  146. data.put("time", format.format(new Date()));
  147. data.put("enName", userspace.getSpaceName());
  148. sendEmail("templateForSendMailWhenApplyUserSpace", userspace.getAdmin().getEmail(), data);
  149. // 发送短信通知管理员
  150. sendSms("templateForSendSmsWhenApplyUserSpace", userspace.getAdmin().getMobile(), user.getVipName(), format.format(new Date()), userspace.getSpaceName());
  151. return success();
  152. }
  153. /**
  154. * 根据用户uu号查询分页查询申请信息
  155. * @param userUU 用户uu号
  156. * @param page 当前页,默认值为1
  157. * @param size 每页大小,默认值为20
  158. * @return org.springframework.data.domain.Page,content为ApplyUserSpace集合
  159. */
  160. @RequestMapping(value = "/apply/info", method = RequestMethod.GET)
  161. public ModelMap findApplyInfo(Long userUU, @RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "20") int size) {
  162. return success(applyUserSpaceService.findApplyByUserUU(userUU, page, size));
  163. }
  164. /**
  165. * 用户解除绑定企业
  166. * @param userUU 企业uu号
  167. * @param spaceUU 企业uu号
  168. * @return
  169. */
  170. @RequestMapping(params = "_operate=unbind", method = RequestMethod.POST)
  171. public ModelMap unbindUserSpace(Long userUU, Long spaceUU) {
  172. if (StringUtils.isEmpty(userUU) || StringUtils.isEmpty(spaceUU)) {
  173. return error("参数错误");
  174. }
  175. userService.unbindUserspace(userUU, spaceUU);
  176. return success();
  177. }
  178. /**
  179. * 企业添加已注册用户
  180. * @param userUU 企业uu号
  181. * @param spaceUU 企业uu号
  182. * @return
  183. */
  184. @RequestMapping(params = "_operate=bind", method = RequestMethod.POST)
  185. public ModelMap addUser(String appId, Long userUU, Long spaceUU) {
  186. if (StringUtils.isEmpty(userUU) || StringUtils.isEmpty(spaceUU)) {
  187. return error("参数错误");
  188. }
  189. userService.bindUserspace(appId, userUU, spaceUU);
  190. return success();
  191. }
  192. /**
  193. * 企业添加已注册用户
  194. * @param user 用户信息
  195. * @param spaceUU 企业uu号
  196. * @return
  197. */
  198. @RequestMapping(params = "_operate=add", method = RequestMethod.POST)
  199. public ModelMap addUser(String appId, User user, Long spaceUU) {
  200. // 参数判断
  201. if (user == null || user.getUserUU() != null || spaceUU == null) {
  202. return error("参数错误");
  203. }
  204. // 根据手机号判断用户是否为新用户,新用户注册,旧用户绑定
  205. User oldUser = userService.findByMobile(user.getMobile());
  206. if (oldUser == null) {
  207. // 注册新用户,无密码则使用默认密码
  208. if (StringUtils.isEmpty(user.getPassword())) {
  209. user.setPassword("111111");
  210. }
  211. user = userService.register(user);
  212. } else {
  213. user = oldUser;
  214. }
  215. // 绑定企业
  216. userService.bindUserspace(appId, user.getUserUU(), spaceUU);
  217. // 同步到旧账户中心
  218. try {
  219. UserDetail userDetail = new UserDetail();
  220. userDetail.setName(user.getVipName());
  221. userDetail.setMobile(user.getMobile());
  222. userDetail.setEmail(user.getEmail());
  223. AccountUtils.addUser(user.getUserUU(), spaceUU, userDetail, user.getPassword());
  224. } catch (Exception e) {
  225. e.printStackTrace();
  226. }
  227. return success(user);
  228. }
  229. /**
  230. * 接口调用验证密码登录
  231. *
  232. * <pre>
  233. * 这个比较特殊,指定应用可能密码为空,需要借用其他应用的密码来校验
  234. * </pre>
  235. *
  236. * @return
  237. */
  238. @RequestMapping(params = "_operate=fuzzyCheck")
  239. public ModelMap apiFuzzyLogin(User user) {
  240. if (null == user || null == user.getPassword()) {
  241. return error("参数错误");
  242. }
  243. if (!StringUtils.isEmpty(user.getMobile())) {
  244. User userInfo = userService.findByMobile(user.getMobile());
  245. if (userInfo == null) {
  246. return error("未找到用户");
  247. }
  248. // 允许应用在调用该接口前,已经将用户输入的明文加密为密文
  249. String encryPwd = user.getPassword().length() >= 32 ? user.getPassword() : userService.getEncryPassword(
  250. Const.ENCRY_FORMAT, user.getPassword(), userInfo.getSalt());
  251. if (encryPwd.equals(userInfo.getPassword())) {
  252. return success();
  253. }
  254. return error("密码错误");
  255. }
  256. return error("请填写手机号");
  257. }
  258. @RequestMapping(value = "/update/password/{userUU}/{spaceUU}", method = RequestMethod.POST)
  259. public ModelMap updatePassword(@PathVariable Long userUU, @PathVariable Long spaceUU, String password) {
  260. // 获取企业密钥
  261. Userspace userspace = userspaceService.findOne(spaceUU);
  262. // 校验请求
  263. checkRequest(userspace.getAccessSecret());
  264. // 修改密码
  265. userService.updatePassword(userUU, password);
  266. return success();
  267. }
  268. /**
  269. * 众创商机导入注册
  270. * @param user 用户信息(主要是用户名,手机号,邮箱和密码,密码base64加密)
  271. * @return
  272. */
  273. @RequestMapping(value = "/sysUserdata/uuzc", method = RequestMethod.POST)
  274. public ModelMap uuzcRegister(User user) {
  275. // 校验手机号
  276. checkMobile(user.getMobile(), null);
  277. // 用户名不能为空
  278. if (StringUtils.isEmpty(user.getVipName())) {
  279. return error("用户名不能为空");
  280. }
  281. // 获取密码
  282. try {
  283. String pwd = new String(Base64.decodeBase64(user.getPassword().getBytes("utf-8")), "utf-8");
  284. user.setPassword(pwd);
  285. } catch (UnsupportedEncodingException e) {
  286. e.printStackTrace();
  287. }
  288. // 传来的值可能带有uu号,去除uu号
  289. user.setUserUU(null);
  290. user = userService.register(user);
  291. return success(user.getUserUU());
  292. }
  293. @RequestMapping(value = "/getUserByToken", method = RequestMethod.GET)
  294. public ModelMap findUserByToken(String token) {
  295. Token existToken = tokenService.findOne(token);
  296. if (existToken == null) {
  297. return error("验证过期");
  298. }
  299. ModelMap data = (ModelMap) existToken.getBind();
  300. User user = userService.findOne((Long) data.get("userUU"));
  301. return success(user);
  302. }
  303. /**
  304. * APP端
  305. * @return
  306. */
  307. @RequestMapping("/getSpace")
  308. public ModelMap getSpace(String mobile) {
  309. User user = userService.findByMobile(mobile);
  310. Set<Userspace> userSpaces = user.getUserSpaces();
  311. ModelMap data = new ModelMap(user);
  312. data.put("spaces", userSpaces);
  313. return data;
  314. }
  315. @RequestMapping(value = "/getToken", method = RequestMethod.GET)
  316. @ResponseBody
  317. public ModelMap getToken(Long userUU, Long spaceUU) {
  318. ModelMap data = new ModelMap();
  319. data.put("userUU", userUU);
  320. data.put("spaceUU", spaceUU);
  321. Token token = new Token(data);
  322. tokenService.save(token);
  323. return success(token.getId());
  324. }
  325. }