HomeRefactorController.java 41 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996
  1. package platform.modules.home.web;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.aliyuncs.exceptions.ClientException;
  4. import com.github.pagehelper.PageInfo;
  5. import com.google.common.base.Preconditions;
  6. import com.xiaoleilu.hutool.crypto.SecureUtil;
  7. import com.xiaoleilu.hutool.util.StrUtil;
  8. import io.jsonwebtoken.Claims;
  9. import org.apache.commons.lang3.StringUtils;
  10. import org.apache.shiro.authc.*;
  11. import org.apache.shiro.authc.pam.UnsupportedTokenException;
  12. import org.apache.shiro.subject.Subject;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.beans.factory.annotation.Value;
  15. import org.springframework.data.redis.core.HashOperations;
  16. import org.springframework.data.redis.core.RedisTemplate;
  17. import org.springframework.ui.ModelMap;
  18. import org.springframework.web.bind.annotation.*;
  19. import platform.common.Constant;
  20. import platform.common.annotation.OperationLog;
  21. import platform.common.base.controller.BaseController;
  22. import platform.common.base.model.CheckResult;
  23. import platform.common.base.model.DictionaryItem;
  24. import platform.common.base.service.DictionaryItemService;
  25. import platform.common.util.*;
  26. import platform.config.access.limit.AccessLimit;
  27. import platform.config.redis.RedisService;
  28. import platform.modules.api.dto.SyncUserDto;
  29. import platform.modules.api.response.epoint.EpointTokenDto;
  30. import platform.modules.api.service.SkyImageApiService;
  31. import platform.modules.api.service.SyncThridFacade;
  32. import platform.modules.build.entity.Company;
  33. import platform.modules.build.entity.CompanyContact;
  34. import platform.modules.build.entity.CompanyMaterial;
  35. import platform.modules.build.service.BuildInfoService;
  36. import platform.modules.build.service.CompanyContactService;
  37. import platform.modules.build.service.CompanyMaterialService;
  38. import platform.modules.build.service.CompanyService;
  39. import platform.modules.company.service.CompanyInfoManageService;
  40. import platform.modules.company.service.StockLandService;
  41. import platform.modules.government.dto.ActivitySearchCondition;
  42. import platform.modules.government.dto.FeedbackQuery;
  43. import platform.modules.government.dto.QueryCondition;
  44. import platform.modules.government.entity.*;
  45. import platform.modules.government.service.*;
  46. import platform.modules.home.dto.HomeRefactorDto;
  47. import platform.modules.home.dto.LoginDto;
  48. import platform.modules.home.dto.ThirdLoginDto;
  49. import platform.modules.home.request.FindRequest;
  50. import platform.modules.home.request.GlobalSearchBean;
  51. import platform.modules.home.response.FindResponseProject;
  52. import platform.modules.home.service.HomeRefactorService;
  53. import platform.modules.sys.entity.*;
  54. import platform.modules.sys.service.*;
  55. import platform.modules.sys.shiro.UsernamePasswordToken;
  56. import platform.modules.sys.web.ResponseMessage;
  57. import java.util.Base64;
  58. import javax.servlet.http.HttpServletRequest;
  59. import javax.servlet.http.HttpServletResponse;
  60. import java.text.ParseException;
  61. import java.text.SimpleDateFormat;
  62. import java.time.LocalDate;
  63. import java.time.format.DateTimeFormatter;
  64. import java.util.*;
  65. import java.util.concurrent.CompletableFuture;
  66. import static platform.common.Constant.HEAD_SESSION_STATUS_KEY;
  67. import static platform.common.Constant.HEAD_SESSION_STATUS_VALUE;
  68. /**
  69. * @author kevin
  70. * @since 2019/5/21 3:39 PM
  71. */
  72. @RestController
  73. @RequestMapping("refactor/home")
  74. public class HomeRefactorController extends BaseController {
  75. @Autowired
  76. private HomeRefactorService homeRefactorService;
  77. @Autowired
  78. private ActivityService activityService;
  79. @Autowired
  80. private ProjectDeclarationService projectDeclarationService;
  81. @Autowired
  82. private ActivityFeedbackService activityFeedbackService;
  83. @Autowired
  84. private ActivityReviewService activityReviewService;
  85. @Autowired
  86. private StreetService streetService;
  87. @Autowired
  88. private DictionaryItemService dictionaryItemService;
  89. private static String profiles;
  90. @Value("${spring.profiles}")
  91. public void setProfiles(String param) {
  92. this.profiles = param;
  93. }
  94. @Autowired
  95. private VerificationCodeUtil verificationCodeUtil;
  96. @Autowired
  97. UserService userService;
  98. @Autowired
  99. private WaitToDoService waitToDoService;
  100. @Autowired
  101. private CompanyService companyService;
  102. @Autowired
  103. private AttachmentService attachmentService;
  104. @Autowired
  105. private SkyImageApiService skyImageApiService;
  106. @Autowired
  107. private SyncThridFacade syncThridFacade;
  108. @Autowired
  109. CompanyInfoManageService companyInfoManageService;
  110. @Autowired
  111. CompanyContactService companyContactService;
  112. @Autowired
  113. StockLandService stockLandService;
  114. @Autowired
  115. ApprovalService approvalService;
  116. @Autowired
  117. private CompanyMaterialService companyMaterialService;
  118. @Autowired
  119. private NavigationService navigationService;
  120. @Autowired
  121. private FriendLinkService friendLinkService;
  122. @Autowired
  123. private LogoService logoService;
  124. @Autowired
  125. private ContentService contentService;
  126. @Autowired
  127. private RedisTemplate redisTemplate;
  128. @Autowired
  129. private RedisService redisService;
  130. @Autowired
  131. private RedisUtil redisUtil;
  132. @Autowired
  133. private MenuService menuService;
  134. @Value("${carrier_hash_key}")
  135. private String carrier_hash_key;
  136. /**
  137. * 门户首页
  138. *
  139. * @return
  140. */
  141. @GetMapping("")
  142. public Object index() {
  143. HomeRefactorDto refactor = homeRefactorService.findHomeIndex();
  144. refactor.setFile_url(setFileUrl());
  145. return ResponseMessage.success("success", refactor);
  146. }
  147. /**
  148. * content列表
  149. *
  150. * @param request
  151. * @return
  152. */
  153. @PostMapping("/contentList")
  154. @AccessLimit
  155. public Object contentList(@RequestBody FindRequest request) {
  156. PageInfo<Content> info = homeRefactorService.findContentList(request);
  157. return ResponseMessage.success("success", info);
  158. }
  159. /**
  160. * content详情
  161. *
  162. * @param id
  163. * @return
  164. */
  165. @GetMapping("/contentDetail/{id}")
  166. public Object contentDetail(@PathVariable Integer id) {
  167. Content content = homeRefactorService.contentDeatil(id);
  168. content.getFileDown().setDownload_uri(setFileUrl());
  169. return ResponseMessage.success("success", content);
  170. }
  171. /**
  172. * 专题活动列表
  173. *
  174. * @param request
  175. * @return
  176. */
  177. @PostMapping(value = "/activityList")
  178. public ResponseMessage findActivity(@RequestBody FindRequest request) {
  179. request.setFile_url(setFileUrl());
  180. PageInfo<ActivityDetail> pageInfo = activityService.findContentList(request);
  181. return ResponseMessage.success("查询成功", pageInfo);
  182. }
  183. /**
  184. * 活动回顾列表
  185. *
  186. * @param request
  187. * @return
  188. */
  189. @PostMapping(value = "/reviewList")
  190. public ResponseMessage findReviewList(@RequestBody QueryCondition request) {
  191. request.setFile_url(setFileUrl());
  192. PageInfo<ActivityReview> pageInfo = activityReviewService.findActivityReviewList(request);
  193. return ResponseMessage.success("查询成功", pageInfo);
  194. }
  195. /**
  196. * 专题活动详情
  197. *
  198. * @param id
  199. * @return
  200. */
  201. @GetMapping("/activityDetail/{id}")
  202. public Object activityDetail(@PathVariable("id") Integer id, Integer user_id) {
  203. if (user_id == null) {
  204. User user = ShiroUtils.getUserEntity();
  205. user_id = user.getId();
  206. }
  207. ActivityDetail activityDetail = homeRefactorService.findByActivityId(id, user_id);
  208. activityDetail.setFile_url(setFileUrl());
  209. return ResponseMessage.success("查询成功", activityDetail);
  210. }
  211. /**
  212. * 门户评论列表
  213. *
  214. * @param id
  215. * @return
  216. */
  217. @GetMapping("/feedbacks/{id}")
  218. public Object frontFeedbackList(@PathVariable Integer id, FeedbackQuery query) {
  219. //活动反馈与评论
  220. query.setActivity_id(id);
  221. PageInfo<ActivityFeedback> pageInfo = activityFeedbackService.findFeedbackList(query);
  222. return ResponseMessage.success("success", pageInfo);
  223. }
  224. /**
  225. * 项目申报列表
  226. *
  227. * @param request
  228. * @return
  229. */
  230. @PostMapping(value = "/projectList")
  231. public ResponseMessage findProject(@RequestBody FindRequest request) {
  232. PageInfo<ProjectDeclaration> pageInfo = projectDeclarationService.findProjectList(request);
  233. return ResponseMessage.success("查询成功", pageInfo);
  234. }
  235. /**
  236. * 项目申报详情
  237. *
  238. * @param id
  239. * @return
  240. */
  241. @GetMapping("/projectDetail/{id}/{isFilling}")
  242. public Object projectDetail(@PathVariable Integer id, @PathVariable Integer isFilling) {
  243. return ResponseMessage.success("查询成功", homeRefactorService.findProjectDetail(id, isFilling));
  244. }
  245. @PostMapping(value = "/getDayEventList")
  246. public Object getDayEventList(@RequestBody ActivityDetail activityDetail) {
  247. log.info("获取一天内的所有活动");
  248. String startTime = activityDetail.getActivity_starttime();
  249. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  250. try {
  251. Date parse = sdf.parse(startTime);
  252. startTime = sdf.format(parse);
  253. } catch (ParseException e) {
  254. e.printStackTrace();
  255. }
  256. List<ActivityDetail> dates = activityService.getEventList(startTime);
  257. return ResponseMessage.success("success", dates);
  258. }
  259. @GetMapping(value = "/activityList/time")
  260. @ResponseBody
  261. public ResponseMessage list(String startTime, String endTime) {
  262. ActivitySearchCondition param = new ActivitySearchCondition();
  263. param.setStartTime(startTime);
  264. param.setEndTime(endTime);
  265. List<ActivityDetail> list = activityService.findAvtivityListByTime(param);
  266. return ResponseMessage.success("success", list);
  267. }
  268. /**
  269. * 新首页查询 通知公告(其实是content内容管理) 和 活动
  270. */
  271. @PostMapping("/search/global")
  272. public Object searchGlobal(
  273. @RequestBody GlobalSearchBean globalSearchBean
  274. ) {
  275. return ResponseMessage.success("success", homeRefactorService.searchGlobal(globalSearchBean.getPageNum(), globalSearchBean.getPageSize(), globalSearchBean.getKeyword()));
  276. }
  277. @GetMapping("/search/latest")
  278. public Object searchLatest(@RequestParam(value = "size", defaultValue = "10", required = false) Integer size) {
  279. return ResponseMessage.success("success", homeRefactorService.searchLatest(size));
  280. }
  281. @GetMapping(value = "/param/register")
  282. @ResponseBody
  283. public ResponseMessage registerParam(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) {
  284. log.info("注册页面参数!");
  285. //Ajax登录超时校验,如果超时,进行前台响应提示
  286. if (WebUtil.isAjaxRequest(request)) {
  287. response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
  288. response.setHeader(HEAD_SESSION_STATUS_KEY, HEAD_SESSION_STATUS_VALUE);
  289. response.setContentType("text/html;charset=utf-8");
  290. }
  291. List<Street> streetList = streetService.findList();
  292. Iterator<Street> it = streetList.iterator();
  293. while (it.hasNext()) {
  294. Street street = it.next();
  295. if (!street.getIs_start()) {
  296. it.remove();
  297. }
  298. }
  299. modelMap.addAttribute("streetList", streetList);
  300. //查询企业性质
  301. List<DictionaryItem> companyTypeList = dictionaryItemService.findListByTypeName(Constant.DictionaryType.COMPANY_TYPE);
  302. modelMap.put("companyTypeList", companyTypeList);
  303. //modelMap.put("companyTypeList", buildTypeService.findList(Constant.DictType.COMPANY));
  304. //查询币种单位数据
  305. List<DictionaryItem> itemList = dictionaryItemService.findListByTypeName(Constant.DictionaryType.CURRENCY_UNIT);
  306. modelMap.put("itemList", itemList);
  307. //查询行业类型
  308. List<DictionaryItem> industryTypeList = dictionaryItemService.findListByTypeName(Constant.DictionaryType.INDUSTRY_TYPE);
  309. modelMap.put("industryTypeList", industryTypeList);
  310. return ResponseMessage.success("success", modelMap);
  311. }
  312. /**
  313. * 个人注册
  314. * 20200514 新门户使用
  315. *
  316. * 这里密码需要格式更多一些
  317. *
  318. * @param userInfo
  319. * @return
  320. */
  321. @PostMapping("/personalRegister")
  322. @ResponseBody
  323. public ResponseMessage personalRegister(@RequestBody User userInfo) {
  324. if (IsTooFrequently()) {
  325. ResponseMessage.error("操作过于频繁,请稍后再试!");
  326. }
  327. try {
  328. // if (!Constant.Environment.PROD_TEST.equals(profiles) && !Constant.Environment.TEST.equals(profiles)) {
  329. if (!verificationCodeUtil.validateVerificationCode(userInfo.getPhone(), userInfo.getValidateNum())) {
  330. return ResponseMessage.error("验证码错误!");
  331. }
  332. // }
  333. String pwd = userInfo.getPassword().trim();
  334. Preconditions.checkNotNull(pwd);
  335. if (!PwdCheckUtil.checkPasswordLength(pwd, "8", null)
  336. || !PwdCheckUtil.checkContainCase(pwd)
  337. || !PwdCheckUtil.checkContainDigit(pwd)
  338. || !PwdCheckUtil.checkContainSpecialChar(pwd)
  339. ) {
  340. return ResponseMessage.error("密码必须包含数字、字母、特殊符号且大于8位");
  341. }
  342. User user = new User();
  343. user.setUser_name(userInfo.getUser_name());
  344. user.setNick_name(userInfo.getNick_name().trim());
  345. user.setPassword(SecureUtil.md5().digestHex(userInfo.getPassword().trim()));
  346. user.setPhone(userInfo.getPhone());
  347. user.setUser_type(Constant.UserType.PERSONAL);
  348. user.setIs_register(1);
  349. user.setFist_login(1);
  350. user.setIs_start(true);
  351. user.setIs_admin(false);
  352. user.setCreate_name(userInfo.getUser_name());
  353. user.setCreate_time(DateUtil.getTimeString(new Date()));
  354. userService.insertAndGetId(user);
  355. } catch (Exception e) {
  356. e.printStackTrace();
  357. return ResponseMessage.error("注册失败" + e.getMessage());
  358. }
  359. return ResponseMessage.success("注册成功");
  360. }
  361. /**
  362. * 企业注册
  363. * 20200514 新门户使用
  364. *
  365. * @param information
  366. * @return
  367. * @throws Exception
  368. */
  369. @PostMapping("/register")
  370. @ResponseBody
  371. public ResponseMessage register(@RequestBody Company information) {
  372. if (IsTooFrequently()) {
  373. ResponseMessage.error("操作过于频繁,请稍后再试!");
  374. }
  375. try {
  376. Approval approval = new Approval();
  377. // if (!Constant.Environment.PROD_TEST.equals(profiles) && !Constant.Environment.TEST.equals(profiles)) {
  378. if (!verificationCodeUtil.validateVerificationCode(information.getPhone(), information.getValidateNum())) {
  379. return ResponseMessage.error("验证码错误!");
  380. }
  381. // }
  382. information.setConfirm_password(null);
  383. Street street = new Street();
  384. if (null != information.getStreet_id()) {
  385. street = streetService.findById(information.getStreet_id());
  386. }
  387. /*
  388. if (StringUtils.isNotBlank(stockLandService.getCompanyRegister(information.getStreet_id()))) {
  389. approval.setNextchecker(stockLandService.getCompanyRegister(information.getStreet_id()));
  390. }
  391. //20180418-yl- 街道没有审批人也可以注册,分菜单给某角色,某个角色的人就可以审批
  392. else {
  393. return ResponseMessage.error("注册失败,本公司所属街道企业注册审核组没有配置人员,请联系街道管理员配置!");
  394. }*/
  395. approval.setOper_type(Constant.OperType.SUBMIT);
  396. approval.setType(Constant.DictionaryType.COMPANY_REGISTER);
  397. information.setIs_start(false);
  398. information.setIs_register(0);
  399. //查看是否已经存在企业
  400. // Company company = companyService.findByParkIdAndCompanyName(information.getCompany_name(), information.getBuild_id());
  401. Company company = companyService.findByCompanyName(information.getCompany_name());
  402. if (company != null) {
  403. information.setId(company.getId());
  404. information.setIs_register(0);
  405. companyService.updateSelective(information);
  406. } else {
  407. information.setStreet_name(street.getName());
  408. companyService.insertAndGetId(information);
  409. }
  410. approval.setApply_id(information.getId());
  411. approval.setDeal_time(DateUtil.getTimeString(new Date()));
  412. approval.setDel_flag(false);
  413. approval.setBefore_approvalstatus("0");
  414. approval.setCreate_name(information.getUser_name());
  415. //approvalService.insertAndGetId(approval);
  416. /*List<CompanyContact> companyContactList = information.getCompanyContacts();
  417. if (companyContactList != null && companyContactList.size() > 0) {
  418. for (CompanyContact companyContacts : companyContactList) {
  419. companyContacts.setCompany_id(information.getId());
  420. companyContactService.saveSelective(companyContacts);
  421. }
  422. }*/
  423. CompanyContact contact = new CompanyContact();
  424. contact.setCompany_id(information.getId());
  425. contact.setContact(information.getUser_name());
  426. contact.setPhone(information.getPhone());
  427. contact.setDel_flag(false);
  428. companyContactService.saveSelective(contact);
  429. List<CompanyContact> companyContactList = information.getContactList();
  430. if (companyContactList != null && companyContactList.size() > 0) {
  431. for (CompanyContact companyContacts : companyContactList) {
  432. if (companyContacts != null) {
  433. companyContacts.setCompany_id(information.getId());
  434. companyContactService.saveSelective(companyContacts);
  435. }
  436. }
  437. }
  438. List<FileDown> files = information.getFileDownList();
  439. if (files != null && files.size() > 0) {
  440. for (FileDown file : files) {
  441. if (file != null) {
  442. //attachmentDao.deleteByBusiness(Constant.Attachment.COMPANY_MATERIAL, information.getId());
  443. attachmentService.updateAttachment(Constant.Attachment.COMPANY_MATERIAL, information.getId(), file.getFile_id());
  444. CompanyMaterial companyMaterial = new CompanyMaterial();
  445. companyMaterial.setAttachment_id(file.getFile_id());
  446. companyMaterial.setCompany_id(information.getId());
  447. companyMaterial.setFile_name(file.getFile_name());
  448. companyMaterialService.insertAndGetId(companyMaterial);
  449. }
  450. }
  451. }
  452. User user = new User();
  453. user.setUser_name(information.getUser_name());
  454. user.setNick_name(information.getNick_name().trim());
  455. user.setPassword(SecureUtil.md5().digestHex(information.getPassword().trim()));
  456. user.setPhone(information.getPhone());
  457. user.setUser_type(Constant.UserType.COMPANY);
  458. user.setIs_register(0);
  459. user.setFist_login(1);
  460. user.setIs_start(false);
  461. user.setIs_admin(true);
  462. user.setCompany_id(information.getId());
  463. user.setCompany_name(information.getCompany_name());
  464. if (null != information.getBuild_id()) {
  465. user.setBuild_id(information.getBuild_id());
  466. user.setBuild_name(information.getBuild_name());
  467. }
  468. user.setStreet_id(information.getStreet_id());
  469. user.setStreet_name(information.getStreet_name());
  470. user.setCreate_name(information.getUser_name());
  471. userService.insertAndGetId(user);
  472. approval.setCreate_by(user.getId());
  473. approvalService.insertAndGetId(approval);
  474. information.setCreate_by(user.getId());
  475. information.setCreate_name(user.getUser_name());
  476. companyService.updateSelective(information);
  477. Street finalStreet = street;
  478. CompletableFuture.runAsync(() -> {
  479. SyncUserDto dto = new SyncUserDto();
  480. dto.setAction(Constant.METHOD_STATUS.INSERT);
  481. dto.setOldUserName("");
  482. dto.setUserName(user.getUser_name());
  483. dto.setUserLoginName(user.getNick_name());
  484. dto.setPassword(information.getPassword().trim());
  485. dto.setCompanyName(information.getCompany_name());
  486. if (null != information.getStreet_id()) {
  487. dto.setStreetName(finalStreet.getName());
  488. }
  489. dto.setToken(skyImageApiService.accessToken());
  490. syncThridFacade.syncUser(dto, null);
  491. }, ThreadPoolUtil.getInstance());
  492. //发送短信
  493. Map<String, String> params = new HashMap<>();
  494. params.put("user", user.getNick_name());
  495. params.put("street", information.getStreet_name());
  496. String templatCode = Constant.SMS_TemplateCode.REGISTER_REMIND;
  497. String templateParam = JSONObject.toJSONString(params);
  498. AlibabaSMSUtil.sendSMS(information.getPhone(), templatCode, Constant.SINGNAMW, templateParam);
  499. //新增街道待办
  500. addWaitToDo(information);
  501. } catch (Exception e) {
  502. e.printStackTrace();
  503. return ResponseMessage.error("注册失败" + e.getMessage());
  504. }
  505. return ResponseMessage.success("您的申请正在属地审核中,审核通过后,您将收到消息提醒。");
  506. }
  507. /**
  508. * 企业重置密码
  509. *
  510. * @param information
  511. * @return
  512. * @throws Exception
  513. */
  514. @PutMapping("/reset")
  515. @ResponseBody
  516. public ResponseMessage reset(@RequestBody Company information) {
  517. try {
  518. if (!verificationCodeUtil.validateVerificationCode(information.getPhone(), information.getValidateNum())) {
  519. return ResponseMessage.error("验证码错误!");
  520. }
  521. User user = userService.getUserByNickname(information.getNick_name());
  522. user.setPassword(SecureUtil.md5().digestHex(information.getPassword()));
  523. userService.updateSelective(user);
  524. CompletableFuture.runAsync(() -> {
  525. // 同步密码到天启
  526. SyncUserDto dto = new SyncUserDto();
  527. dto.setAction(Constant.METHOD_STATUS.UPDATE);
  528. dto.setOldUserName(user.getNick_name());
  529. dto.setUserName(user.getUser_name());
  530. dto.setUserLoginName(user.getNick_name());
  531. dto.setPassword(information.getPassword());
  532. dto.setToken(skyImageApiService.accessToken());
  533. skyImageApiService.syncUserInfo(dto);
  534. }, ThreadPoolUtil.getInstance());
  535. } catch (Exception e) {
  536. e.printStackTrace();
  537. return ResponseMessage.error("修改失败" + e.getMessage());
  538. }
  539. return ResponseMessage.success("密码修改成功!系统将跳转到登陆页进行登录");
  540. }
  541. @Value("${jszypt.url.login}")
  542. private String JszyptLoginUrl;
  543. @OperationLog(value = "获取积分平台登录信息")
  544. @GetMapping(value = "/jszyptLoginInfo")
  545. @ResponseBody
  546. public ResponseMessage getJszyptLoginInfo() {
  547. User user = ShiroUtils.getUserEntity();
  548. Map map = new HashMap();
  549. //地址
  550. map.put("url", JszyptLoginUrl);
  551. //账号
  552. map.put("userName ", user.getNick_name());
  553. //联系电话
  554. map.put("phone", user.getPhone());
  555. //用户类型(1代表个人用户,2代表企业用户,3代表政府用户)
  556. Integer userType = user.getUser_type();
  557. if(Objects.equals(Constant.UserType.PERSONAL,userType)){
  558. map.put("userType", 1);
  559. }else if(Objects.equals(Constant.UserType.COMPANY,userType)){
  560. map.put("userType", 2);
  561. }else if(Objects.equals(Constant.UserType.GOVERNMENT,userType)){
  562. map.put("userType", 3);
  563. }
  564. if(Objects.equals(Constant.UserType.COMPANY,userType)){
  565. Company company = companyService.findById(user.getCompany_id());
  566. if(company!=null){
  567. //统一社会信用代码
  568. map.put("paperNo", company.getUscc());
  569. //公司名称
  570. map.put("companyName", company.getCompany_name());
  571. }
  572. }
  573. return ResponseMessage.success("获取积分平台登录信息", map);
  574. }
  575. /**
  576. * 用户登陆
  577. * 先根据用户名查询出一条用户记录再对比密码是否正确可以防止sql注入
  578. * 20200514 新门户使用
  579. *
  580. * @param login
  581. * @return
  582. */
  583. @OperationLog(value = "用户登录")
  584. @PostMapping(value = "/login")
  585. @ResponseBody
  586. public ResponseMessage login(@RequestBody LoginDto login) {
  587. String username = login.getUsername();
  588. String password = login.getPassword();
  589. Boolean isMobile = login.getIsMobile();
  590. try {
  591. //changeNewSession(request);
  592. Base64.Decoder decoder = Base64.getDecoder();
  593. username = new String(decoder.decode(username), "UTF-8");
  594. password = new String(decoder.decode(password), "UTF-8");
  595. //获取当前的Subject
  596. Subject currentUser = ShiroUtils.getSubject();
  597. UsernamePasswordToken token = new UsernamePasswordToken(username, password, isMobile, false);
  598. //在调用了login方法后,SecurityManager会收到AuthenticationToken,并将其发送给已配置的Realm执行必须的认证检查
  599. //每个Realm都能在必要时对提交的AuthenticationTokens作出反应
  600. //所以这一步在调用login(token)方法时,它会走到MyRealm.doGetAuthenticationInfo()方法中,具体验证方式详见此方法
  601. log.info("对用户进行登录验证..验证开始! username = {}", username);
  602. // if (checkUserLock(username)) {
  603. // return ResponseMessage.error(Constant.USER_HAS_LOCK);
  604. // }
  605. currentUser.login(token);
  606. //验证是否登录成功
  607. if (currentUser.isAuthenticated()) {
  608. log.info("对用户进行登录验证..验证通过! username = {}", username);
  609. ModelMap modelMap = new ModelMap();
  610. this.commonObject(modelMap, false);
  611. User user = userService.getUser(ShiroUtils.getUserId());
  612. if ((user.getPhone() == null || "".equals(user.getPhone()))) {
  613. return ResponseMessage.success(Constant.USER_PHONE_EMPTY, user);
  614. }
  615. //获取token
  616. modelMap.put("token", userService.createToken());
  617. return ResponseMessage.success(Constant.USER_LOGIN_IN, modelMap);
  618. }
  619. } catch (UnknownAccountException e) { //账号不存在
  620. log.info("! username = {}", username);
  621. // recordLoginFail(username);
  622. return ResponseMessage.error(Constant.USER_NOT_FIND);
  623. } catch (IncorrectCredentialsException e) {
  624. log.info("对用户进行登录验证..验证未通过,错误的凭证! username = {}", username);
  625. return ResponseMessage.error(Constant.USER_INVALID);
  626. } catch (LockedAccountException e) {
  627. log.info("对用户进行登录验证..验证未通过,账户已锁定! username = {}", username);
  628. return ResponseMessage.error(Constant.USER_HAS_REGISTERING);
  629. } catch (ExcessiveAttemptsException eae) {
  630. log.info("对用户进行登录验证..验证未通过,错误次数过多! username = {}", username);
  631. return ResponseMessage.error(Constant.USER_ERROR_MANY);
  632. } catch (AuthenticationException e) {
  633. return ResponseMessage.error(Constant.SYSTEM_ERRORS);
  634. } catch (Exception e) {
  635. log.error("对用户进行登录验证失败! username = {} e = {}", username, e);
  636. }
  637. return ResponseMessage.error(Constant.SYSTEM_ERRORS);
  638. }
  639. @OperationLog(value = "第三方用户使用Code登录")
  640. @PostMapping(value = "/loginByCode")
  641. @ResponseBody
  642. public ResponseMessage loginByCode(@RequestBody ThirdLoginDto login) {
  643. String code = login.getCode();
  644. try {
  645. //根据code拿到token
  646. EpointTokenDto epointTokenDto = homeRefactorService.getTokenByCode(code);
  647. String accessToken = epointTokenDto.getAccess_token();
  648. if (StrUtil.isBlank(accessToken)) {
  649. return ResponseMessage.error(Constant.USER_CODE_INVALIAD);
  650. }
  651. //根据token与库里对比拿用户
  652. User user = homeRefactorService.getCurrentLoginUser(accessToken);
  653. if (user != null) {
  654. String username = user.getNick_name();
  655. //获取当前的Subject
  656. Subject currentUser = ShiroUtils.getSubject();
  657. UsernamePasswordToken token = new UsernamePasswordToken(username, null, false, true);
  658. //在调用了login方法后,SecurityManager会收到AuthenticationToken,并将其发送给已配置的Realm执行必须的认证检查
  659. //每个Realm都能在必要时对提交的AuthenticationTokens作出反应
  660. //所以这一步在调用login(token)方法时,它会走到MyRealm.doGetAuthenticationInfo()方法中,具体验证方式详见此方法
  661. log.info("对用户进行登录验证..验证开始! username = {}", username);
  662. currentUser.login(token);
  663. //验证是否登录成功
  664. if (currentUser.isAuthenticated()) {
  665. log.info("对用户进行登录验证..验证通过! username = {}", username);
  666. ModelMap modelMap = new ModelMap();
  667. this.commonObject(modelMap, false);
  668. //User user = userService.getUser(ShiroUtils.getUserId());
  669. if ((user.getPhone() == null || "".equals(user.getPhone()))) {
  670. return ResponseMessage.success(Constant.USER_PHONE_EMPTY, user);
  671. }
  672. //获取token
  673. modelMap.put("token", userService.createToken());
  674. return ResponseMessage.success(Constant.USER_LOGIN_IN, modelMap);
  675. }
  676. } else {
  677. return ResponseMessage.error(Constant.USER_NOT_FIND);
  678. }
  679. } catch (UnknownAccountException e) { //账号不存在
  680. //log.info("! username = {}", username);
  681. return ResponseMessage.error(Constant.USER_NOT_FIND);
  682. } catch (IncorrectCredentialsException e) {
  683. //log.info("对用户进行登录验证..验证未通过,错误的凭证! username = {}", username);
  684. return ResponseMessage.error(Constant.USER_INVALID);
  685. } catch (LockedAccountException e) {
  686. //log.info("对用户进行登录验证..验证未通过,账户已锁定! username = {}", username);
  687. return ResponseMessage.error(Constant.USER_HAS_REGISTERING);
  688. } catch (ExcessiveAttemptsException eae) {
  689. //log.info("对用户进行登录验证..验证未通过,错误次数过多! username = {}", username);
  690. return ResponseMessage.error(Constant.USER_ERROR_MANY);
  691. } catch (AuthenticationException e) {
  692. return ResponseMessage.error(Constant.SYSTEM_ERRORS);
  693. } catch (Exception e) {
  694. System.out.println(e.getMessage());
  695. }
  696. return ResponseMessage.error(Constant.SYSTEM_ERRORS);
  697. }
  698. /**
  699. * 用户登出
  700. * 20200514 新门户使用
  701. */
  702. @OperationLog(value = "用户登出")
  703. @GetMapping(value = "/logout")
  704. @ResponseBody
  705. public ResponseMessage logout() {
  706. ShiroUtils.logout();
  707. CompletableFuture.runAsync(() -> {
  708. //todo 远程调用登出逻辑
  709. }, ThreadPoolUtil.getInstance());
  710. return ResponseMessage.success("登出成功!");
  711. }
  712. /**
  713. * 账号名是否存在
  714. */
  715. @ResponseBody
  716. @GetMapping(value = "/existNickName")
  717. public ResponseMessage getNickName(@RequestParam("nick_name") String nickName) {
  718. boolean flag = false;
  719. log.debug("检验账号名是否存在! id= {}, nickName= {}", nickName);
  720. User record = userService.findByNickName(nickName);
  721. if (null != record) {
  722. flag = true;
  723. }
  724. log.info("检验账号名是否存在! flag = {}", flag);
  725. return ResponseMessage.success("success", flag);
  726. }
  727. /**
  728. * 企业名是否存在
  729. */
  730. @ResponseBody
  731. @GetMapping(value = "/existCompanyName")
  732. public ResponseMessage getCompanyName(@RequestParam("company_name") String companyName) {
  733. boolean flag = false;
  734. log.debug("检验企业名是否存在! id= {}, companyName= {}", companyName);
  735. User user = new User();
  736. user.setDel_flag(false);
  737. user.setCompany_name(companyName);
  738. List<User> list = userService.findListByWhere(user);
  739. if (CommonUtils.isNotNull(list)) {
  740. flag = true;
  741. }
  742. log.info("检验企业名是否存在! flag = {}", flag);
  743. return ResponseMessage.success("success", flag);
  744. }
  745. //企业注册审核待办
  746. private void addWaitToDo(Company information) {
  747. if (null != information.getStreet_id()) {
  748. List<User> users = userService.findUsersByStreetId(information.getStreet_id());
  749. List<User> pusers = userService.findUsersByPermission("REGISTER_APPROVE");
  750. for (User user : users) {
  751. for (User puser : pusers) {
  752. if (Objects.equals(user.getId(), puser.getId())) {
  753. waitToDoService.newTODO("企业注册审核", "/register/approval?id=" + information.getId(), Constant.WaitToDo_OperType.AUDIT, information.getId(),
  754. Constant.DictionaryType.COMPANY_REGISTER, "", user.getId().toString(), Constant.WaitToDo_IsSerial.IS_SERIAL, false);
  755. //发送短信提醒
  756. Map<String, String> params = new HashMap<>();
  757. params.put("companyName", information.getCompany_name());
  758. String templatCode = Constant.SMS_TemplateCode.S_REGISTER_REMIND;
  759. String templateParam = JSONObject.toJSONString(params);
  760. try {
  761. AlibabaSMSUtil.sendSMS(puser.getPhone(), templatCode, Constant.SINGNAMW, templateParam);
  762. } catch (ClientException | InterruptedException e) {
  763. e.printStackTrace();
  764. }
  765. }
  766. }
  767. }
  768. }
  769. }
  770. @PutMapping("/complete")
  771. @OperationLog("完善手机号")
  772. @ResponseBody
  773. public ResponseMessage complete(@RequestBody User userInfo) throws Exception {
  774. try {
  775. if (!verificationCodeUtil.validateVerificationCode(userInfo.getPhone(), userInfo.getValidateNum())) {
  776. return ResponseMessage.error("验证码错误!");
  777. }
  778. User user = new User();
  779. user.setId(userInfo.getId());
  780. /*user.setUser_name(userInfo.getUser_name());
  781. user.setNick_name(userInfo.getNick_name());*/
  782. user.setPhone(userInfo.getPhone());
  783. userService.updateSelective(user);
  784. } catch (Exception e) {
  785. e.printStackTrace();
  786. return ResponseMessage.error("注册失败" + e.getMessage());
  787. }
  788. return ResponseMessage.success("完善信息成功!请重新登录!");
  789. }
  790. public void commonObject(ModelMap modelMap, Boolean isNav) throws Exception {
  791. Logo logo = logoService.findLogo();
  792. modelMap.put("fileUrl", setFileUrl());
  793. modelMap.put("logo", logo);
  794. modelMap.put("isLogin", ShiroUtils.isLogin());
  795. modelMap.put("userType", ShiroUtils.getUserType());
  796. modelMap.put("userName", ShiroUtils.getNickName());
  797. modelMap.put("userId", ShiroUtils.getUserId());
  798. User user = ShiroUtils.getUserEntity();
  799. if (user != null) {
  800. modelMap.put("firstLogin", user.getFist_login());
  801. if (org.apache.commons.lang3.StringUtils.isBlank(user.getUser_name()) || org.apache.commons.lang3.StringUtils.isBlank(user.getNick_name()) || StringUtils.isBlank(user.getPhone())) {
  802. modelMap.put("isComplete", false);
  803. } else {
  804. modelMap.put("isComplete", true);
  805. }
  806. }
  807. //获取有亲链接
  808. List<FriendLink> friendLinks = friendLinkService.findList();
  809. modelMap.put("friendLinks", friendLinks);
  810. if (isNav) {
  811. // 获取导航
  812. List<Navigation> navigations = navigationService.findList();
  813. modelMap.put("navigations", navigations);
  814. }
  815. }
  816. /**
  817. * 随机获取n个有图片的通知
  818. */
  819. @OperationLog(value = "随机获取n个有图片的通知")
  820. @GetMapping(value = "/content/random/{num}")
  821. @ResponseBody
  822. public ResponseMessage random(@PathVariable("num") Integer num) {
  823. ModelMap modelMap = new ModelMap();
  824. List<Map> list = contentService.randomPic(num);
  825. String fileUrl = setFileUrl();
  826. fileUrl = fileUrl.replace("/uploads", "");
  827. modelMap.put("fileUrl", fileUrl);
  828. modelMap.put("contentList", list);
  829. return ResponseMessage.success("success", modelMap);
  830. }
  831. /**
  832. * 获取存量用地后台跳转链接
  833. */
  834. @OperationLog(value = "获取存量用地后台跳转链接")
  835. @GetMapping(value = "/stockland/url")
  836. @ResponseBody
  837. public ResponseMessage stocklandUrl(HttpServletRequest request) {
  838. String authorization = request.getHeader("Authorization");
  839. if (StringUtils.isEmpty(authorization)) {
  840. throw new NullPointerException("token不能为空");
  841. }
  842. if (!authorization.startsWith("Bearer")) {
  843. throw new UnsupportedTokenException("token不合法");
  844. }
  845. String verifyToken = authorization.substring(7, authorization.length());
  846. //验证JWT的签名,返回CheckResult对象
  847. CheckResult checkResult = JWTUtil.validateJWT(verifyToken);
  848. if (checkResult.getSuccess()) {
  849. Claims claims = checkResult.getClaims();
  850. String token_key = claims.getIssuer();
  851. String usertId = claims.getId();
  852. HashOperations<String, String, Object> hashOperations = redisTemplate.opsForHash();
  853. String token = (String) hashOperations.get(carrier_hash_key, token_key);
  854. if (token != null && !token.equals(authorization)) {
  855. return ResponseMessage.error("无效的token");
  856. }
  857. //获取用户权限
  858. //获取主身份信息
  859. User user = userService.findById(Integer.parseInt(usertId));
  860. if (user != null) {
  861. List<Menu> menus;
  862. if (user.getIs_admin()) {
  863. Menu menu = new Menu();
  864. menu.setUser_type(user.getUser_type());
  865. menus = menuService.findListByWhere(menu);
  866. } else {
  867. menus = menuService.findListMenuByUserId(user.getId(), user.getUser_type());
  868. }
  869. //单独定一个集合对象
  870. Map<String, String> map = new HashMap<>();
  871. if (menus != null) {
  872. for (Menu permission : menus) {
  873. if (Objects.equals(permission.getPermission(), "C_STOCKLAND_MANAGE")) {
  874. map.put("moudle", "C_SERVICE_MANAGE");
  875. map.put("menu", permission.getPermission());
  876. } else if (Objects.equals(permission.getPermission(), "S_AREA_APPROVE")) {
  877. map.put("moudle", "S_SERVICE_MANAGE");
  878. map.put("menu", permission.getPermission());
  879. } else if (Objects.equals(permission.getPermission(), "G_APPROVAL_PENDING")) {
  880. map.put("moudle", "G_SERVICE_MANAGE");
  881. map.put("menu", permission.getPermission());
  882. }
  883. }
  884. }
  885. return ResponseMessage.success("success", map);
  886. } else {
  887. return ResponseMessage.error(",用户不存在");
  888. }
  889. } else {
  890. return ResponseMessage.error(checkResult.getErrCode() + ",token校验失败");
  891. }
  892. }
  893. }