UserspaceServiceImpl.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  1. package com.uas.sso.service.impl;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.uas.sso.common.util.HttpUtil;
  5. import com.uas.sso.core.ICallable;
  6. import com.uas.sso.core.Status;
  7. import com.uas.sso.dao.UserspaceDao;
  8. import com.uas.sso.entity.*;
  9. import com.uas.sso.exception.VisibleError;
  10. import com.uas.sso.logging.LoggerManager;
  11. import com.uas.sso.logging.SyncBufferedLogger;
  12. import com.uas.sso.service.AppService;
  13. import com.uas.sso.service.UserService;
  14. import com.uas.sso.service.UserspaceService;
  15. import com.uas.sso.service.UserspaceValidService;
  16. import com.uas.sso.util.ChineseUtils;
  17. import com.uas.sso.util.ExecuteUtils;
  18. import com.uas.sso.util.StringUtil;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.data.domain.Page;
  21. import org.springframework.data.domain.PageRequest;
  22. import org.springframework.data.domain.Pageable;
  23. import org.springframework.security.access.method.P;
  24. import org.springframework.stereotype.Service;
  25. import org.springframework.util.CollectionUtils;
  26. import org.springframework.util.StringUtils;
  27. import java.sql.Timestamp;
  28. import java.util.*;
  29. /**
  30. * 企业信息service层
  31. *
  32. * @author wangmh
  33. * @date 2018/1/5
  34. */
  35. @Service
  36. public class UserspaceServiceImpl implements UserspaceService {
  37. @Autowired
  38. private UserspaceDao userspaceDao;
  39. @Autowired
  40. private UserService userService;
  41. @Autowired
  42. private AppService appService;
  43. @Autowired
  44. private UserspaceValidService userspaceValidService;
  45. SyncBufferedLogger syncLog = LoggerManager.getLogger(SyncBufferedLogger.class);
  46. /**
  47. * 企业初始uu号
  48. */
  49. public static final Long SPACE_INIT_UU = 10000000L;
  50. @Override
  51. public Userspace register(Userspace userspace) {
  52. User admin = userspace.getAdmin();
  53. if (admin == null) {
  54. throw new VisibleError("管理员不能为空");
  55. }
  56. // 校验企业名是否重复
  57. checkSpaceName(userspace.getSpaceName());
  58. // 校验营业执照号是否重复
  59. checkBusinessCode(userspace.getBusinessCode());
  60. // 设置域名
  61. if (StringUtils.isEmpty(userspace.getDomain())) {
  62. generateDefaultDomain(userspace);
  63. }
  64. // 设置uu号
  65. Long maxUU = userspaceDao.findMaxUU();
  66. userspace.setSpaceUU(StringUtils.isEmpty(maxUU) ? SPACE_INIT_UU : (maxUU + 1));
  67. // 设置管理员信息
  68. if (StringUtils.isEmpty(admin.getUserUU())) {
  69. User oldUser = userService.findByMobile(admin.getMobile());
  70. if (oldUser == null) {
  71. admin = userService.register(admin);
  72. } else {
  73. admin = userService.save(admin);
  74. }
  75. // 给企业设置管理员
  76. userspace.setAdmin(admin);
  77. }
  78. userspace.setAdminUU(admin.getUserUU());
  79. // 将管理员设置在企业下
  80. List<User> users = new ArrayList<>();
  81. users.add(admin);
  82. userspace.setUsers(users);
  83. userspace.setValidCode((short) Status.TO_BE_CERTIFIED.getCode());
  84. userspace.setRegisterDate(new Timestamp(System.currentTimeMillis()));
  85. // 注册企业
  86. userspace.setApps(appService.findDefaultUseApp());
  87. userspace = userspaceDao.save(userspace);
  88. // 开通应用
  89. syncUserSpaceInfo(userspace.toView(), "企业注册");
  90. return userspace;
  91. }
  92. private void syncUserSpaceInfo(final UserSpaceView userSpaceView, final String msg) {
  93. List<String> apps = appService.findUid();
  94. ExecuteUtils.execute(new ICallable<Void, String>() {
  95. @Override
  96. public Void call(String appId) throws Exception {
  97. App tempApp = appService.findOne(appId);
  98. if (tempApp != null && StringUtils.isEmpty(tempApp.getUserControl())
  99. && !StringUtils.isEmpty(tempApp.getBackSpaceUrl())) {
  100. String url = tempApp.getBackUserUrl();
  101. JSONObject formData = JSON.parseObject(JSON.toJSONString(userSpaceView));
  102. HttpUtil.ResponseWrap res = null;
  103. try {
  104. res = HttpUtil.doPost(url, formData, 30000);
  105. if (!res.isSuccess()) {
  106. syncLog.error(appId, msg + ",同步企业信息失败", JSON.toJSONString(userSpaceView), res.getContent());
  107. } else {
  108. syncLog.info(appId, msg + ",同步企业信息成功", JSON.toJSONString(userSpaceView));
  109. }
  110. } catch (Exception e) {
  111. syncLog.error(appId, msg + ",同步企业信息失败", JSON.toJSONString(userSpaceView), e.getMessage());
  112. }
  113. }
  114. return null;
  115. }
  116. }, apps);
  117. }
  118. /**
  119. * 生成默认域名
  120. *
  121. * @return
  122. */
  123. private String generateDefaultDomain(Userspace userspace) {
  124. String domain = null;
  125. Userspace oldOne = null;
  126. /// 代码复制,以后可能用到这个
  127. // if (!StringUtils.isEmpty(userspace.getUrl())) {
  128. // Pattern p = Pattern.compile("http(s)*://(.+\\.)*(.+)\\..+", Pattern.CASE_INSENSITIVE);
  129. // Matcher m = p.matcher(userspace.getUrl());
  130. // if (m.find()) {
  131. // domain = m.group(3);
  132. // if ("1688".equals(domain) || "taobao".equals(domain) || "qq".equals(domain) || "baidu".equals(domain)) {
  133. // domain = m.group(2);
  134. // }
  135. // }
  136. // }
  137. if (domain == null) {
  138. domain = StringUtil.substr(ChineseUtils.converterToFirstSpell(StringUtils.trimAllWhitespace(userspace.getSpaceName())), 0, 16);
  139. } else {
  140. oldOne = findByDomain(domain);
  141. if (oldOne != null) {
  142. domain = StringUtil.substr(ChineseUtils.converterToFirstSpell(StringUtils.trimAllWhitespace(userspace.getSpaceName())), 0, 16);
  143. }
  144. }
  145. oldOne = findByDomain(domain);
  146. if (oldOne != null) {
  147. domain = StringUtil.substr(ChineseUtils.converterToSpell(StringUtils.trimAllWhitespace(userspace.getSpaceName())), 0, 16);
  148. oldOne = findByDomain(domain);
  149. if (oldOne != null) {
  150. domain = null;
  151. }
  152. }
  153. return domain;
  154. }
  155. @Override
  156. public void checkSpaceName(String spaceName) {
  157. Userspace userSpace = userspaceDao.findBySpaceName(spaceName);
  158. if (userSpace != null) {
  159. throw new VisibleError("企业已被注册,请确认无误后联系管理员("+userSpace.getAdmin().getVipName()+")处理");
  160. }
  161. }
  162. @Override
  163. public void checkBusinessCode(String businessCode) {
  164. Userspace userSpace = userspaceDao.findByBusinessCode(businessCode);
  165. if (userSpace != null) {
  166. throw new VisibleError("该企业营业执照已被注册,请确认");
  167. }
  168. }
  169. @Override
  170. public Userspace findByDomain(String domain) {
  171. return userspaceDao.findByDomain(domain);
  172. }
  173. @Override
  174. public boolean spaceNameIsValid(String spaceName) {
  175. Userspace userSpace = userspaceDao.findBySpaceName(spaceName);
  176. return userSpace == null ? false : userSpace.getValidCode() == Status.AUTHENTICATED.getCode();
  177. }
  178. @Override
  179. public boolean businessCodeIsValid(String businessCode) {
  180. Userspace userSpace = userspaceDao.findByBusinessCode(businessCode);
  181. return userSpace == null ? false : userSpace.getValidCode() == Status.AUTHENTICATED.getCode();
  182. }
  183. @Override
  184. public void submitValidInfo(Userspace validSpace, Userspace userspace, User submitter) {
  185. // 校验企业名和营业执照是否被认证
  186. boolean isValid = spaceNameIsValid(userspace.getSpaceName());
  187. if (isValid) {
  188. throw new VisibleError("该企业名已被认证,请确认");
  189. }
  190. isValid = businessCodeIsValid(userspace.getBusinessCode());
  191. if (isValid) {
  192. throw new VisibleError("该企业营业执照号已被认证,请确认");
  193. }
  194. // 添加提交申请日志
  195. userspace.setSpaceUU(validSpace.getSpaceUU());
  196. userspaceValidService.submitValid(userspace, submitter);
  197. }
  198. @Override
  199. public Userspace findOne(Long spaceUU) {
  200. return userspaceDao.findOne(spaceUU);
  201. }
  202. @Override
  203. public Page<String> searchName(String keyword, Integer number) {
  204. Pageable pageable = new PageRequest(0, number);
  205. Page<String> pUserSpaces = userspaceDao.findByPageInfo(keyword, pageable);
  206. return pUserSpaces;
  207. }
  208. @Override
  209. public Userspace findBySpaceName(String spaceName) {
  210. return userspaceDao.findBySpaceName(spaceName);
  211. }
  212. @Override
  213. public void unbindApp(Long spaceUU, String appId) {
  214. // 获取企业信息和应用信息,并校验
  215. Userspace userspace = userspaceDao.findOne(spaceUU);
  216. if (userspace == null) {
  217. throw new VisibleError("该企业不存在");
  218. }
  219. App app = appService.findOne(appId);
  220. if (app == null) {
  221. throw new VisibleError("该应用不存在");
  222. }
  223. // 解除绑定
  224. if (userspace.getApps().contains(app)) {
  225. userspace.getApps().remove(app);
  226. }
  227. userspaceDao.save(userspace);
  228. }
  229. @Override
  230. public void bindApp(Long spaceUU, String appId) {
  231. // 获取企业信息和应用信息,并校验
  232. Userspace userspace = userspaceDao.findOne(spaceUU);
  233. if (userspace == null) {
  234. throw new VisibleError("该企业不存在");
  235. }
  236. App app = appService.findOne(appId);
  237. if (app == null) {
  238. throw new VisibleError("该应用不存在");
  239. }
  240. // 开通应用
  241. if (userspace.getApps().contains(app)) {
  242. throw new VisibleError(String.format("该企业已开通%s应用", app.getUid()));
  243. }
  244. userspace.getApps().add(app);
  245. userspaceDao.save(userspace);
  246. }
  247. @Override
  248. public Userspace findByBusinessCode(String businessCode) {
  249. return userspaceDao.findByBusinessCode(businessCode);
  250. }
  251. @Override
  252. public void addUser(Userspace userspace, List<User> users) {
  253. userspace.getUsers().addAll(users);
  254. userspaceDao.save(userspace);
  255. }
  256. @Override
  257. public Userspace save(Userspace userspace) {
  258. return userspaceDao.save(userspace);
  259. }
  260. @Override
  261. public List<String> findRepeatName() {
  262. return userspaceDao.findRepeatName();
  263. }
  264. @Override
  265. public List<Userspace> findAllBySpaceName(String name) {
  266. return userspaceDao.findAllBySpaceName(name);
  267. }
  268. @Override
  269. public List<Userspace> findAll(String ids) {
  270. List<Long> idList = JSONObject.parseArray(ids, Long.class);
  271. if (!CollectionUtils.isEmpty(idList)) {
  272. return userspaceDao.findAll(idList);
  273. }
  274. return Collections.emptyList();
  275. }
  276. }