HomeRefactorController.java 34 KB

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