HomeRefactorController.java 40 KB

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