PublicController.java 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770
  1. package com.goafanti.common.controller;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.io.OutputStream;
  7. import java.util.List;
  8. import java.util.UUID;
  9. import javax.annotation.Resource;
  10. import javax.servlet.http.HttpServletRequest;
  11. import javax.servlet.http.HttpServletResponse;
  12. import org.apache.commons.lang3.StringUtils;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.beans.factory.annotation.Value;
  15. import org.springframework.context.annotation.Scope;
  16. import org.springframework.stereotype.Controller;
  17. import org.springframework.web.bind.annotation.RequestMapping;
  18. import org.springframework.web.bind.annotation.RequestMethod;
  19. import org.springframework.web.bind.annotation.ResponseBody;
  20. import com.goafanti.achievement.service.AchievementService;
  21. import com.goafanti.business.bo.JtBusinessProjectResult;
  22. import com.goafanti.business.service.JtBusinessService;
  23. import com.goafanti.comment.bo.CommentInput;
  24. import com.goafanti.comment.bo.CommentResult;
  25. import com.goafanti.comment.controller.UserCommentController;
  26. import com.goafanti.comment.service.CommentService;
  27. import com.goafanti.common.bo.Result;
  28. import com.goafanti.common.constant.ErrorConstants;
  29. import com.goafanti.common.enums.UserType;
  30. import com.goafanti.common.model.User;
  31. import com.goafanti.common.service.DistrictGlossoryService;
  32. import com.goafanti.common.service.FieldGlossoryService;
  33. import com.goafanti.common.service.IndustryCategoryService;
  34. import com.goafanti.common.utils.LoggerUtils;
  35. import com.goafanti.common.utils.MobileMessageUtils;
  36. import com.goafanti.common.utils.PasswordUtil;
  37. import com.goafanti.common.utils.PictureUtils;
  38. import com.goafanti.common.utils.TimeUtils;
  39. import com.goafanti.common.utils.VerifyCodeUtils;
  40. import com.goafanti.core.mybatis.page.Pagination;
  41. import com.goafanti.core.shiro.token.TokenManager;
  42. import com.goafanti.demand.bo.DemandListBo;
  43. import com.goafanti.demand.service.DemandService;
  44. import com.goafanti.portal.bo.AchievementObject;
  45. import com.goafanti.user.service.UserIdentityService;
  46. import com.goafanti.user.service.UserService;
  47. @Controller
  48. @Scope(value = "prototype")
  49. @RequestMapping("/open")
  50. public class PublicController extends BaseController {
  51. @Value(value = "${accessKey}")
  52. private String accessKey = null;
  53. @Value(value = "${accessSecret}")
  54. private String accessSecret = null;
  55. @Value(value = "${upload.path}")
  56. private String uploadPath = null;
  57. @Value(value = "${upload.private.path}")
  58. private String uploadPrivatePath = null;
  59. @Value(value = "${static.host}")
  60. private String staticHost = null;
  61. @Value(value = "${mobileCodeTemplate}")
  62. private String mobileCodeTemplate = null;
  63. @Resource
  64. private UserService userService;
  65. @Resource
  66. private FieldGlossoryService fieldGlossoryService;
  67. @Resource
  68. private CommentService commentService;
  69. @Autowired
  70. private IndustryCategoryService industryCategoryService;
  71. @Autowired
  72. private DistrictGlossoryService districtGlossoryService;
  73. @Autowired
  74. private UserIdentityService userIdentityService;
  75. @Autowired
  76. private AchievementService achievementService;
  77. @Autowired
  78. private DemandService demandService;
  79. @Autowired
  80. private JtBusinessService jtBusinessService;
  81. @Value(value = "${patentTemplate}")
  82. private String patentTemplate = null;
  83. @Resource(name = "passwordUtil")
  84. private PasswordUtil passwordUtil;
  85. /**
  86. * 获取验证码
  87. *
  88. * @param response
  89. */
  90. @RequestMapping(value = "/getVCode", method = RequestMethod.GET)
  91. public void getVCode(HttpServletResponse response, HttpServletRequest request) {
  92. try {
  93. response.setHeader("Pragma", "No-cache");
  94. response.setHeader("Cache-Control", "no-cache");
  95. response.setDateHeader("Expires", 0);
  96. response.setContentType("image/jpg");
  97. // 生成随机字串
  98. String verifyCode = VerifyCodeUtils.generateVerifyCode(4);
  99. // 存入Shiro会话session
  100. TokenManager.setVal2Session(VerifyCodeUtils.V_CODE, verifyCode.toLowerCase());
  101. // 生成图片
  102. int w = 146, h = 33;
  103. VerifyCodeUtils.outputImage(w, h, response.getOutputStream(), verifyCode);
  104. } catch (Exception e) {
  105. LoggerUtils.fmtError(getClass(), e, "获取验证码异常:%s", e.getMessage());
  106. }
  107. }
  108. /**
  109. * 手机验证码
  110. *
  111. * @param mobile
  112. * @param sign
  113. * 是否用与找回密码
  114. * @param type
  115. * @return
  116. */
  117. @RequestMapping(value = "/getMCode", method = RequestMethod.GET)
  118. @ResponseBody
  119. public Result getMcode(String mobile, boolean sign, String verificationCode) {
  120. Result res = new Result();
  121. // 用于找回密码
  122. if (sign) {
  123. if (null == userService.selectByMobieAndType(mobile.trim(),null)) {
  124. res.getError().add(buildError(ErrorConstants.NON_REGISTER, "", "该用户未注册!"));
  125. return res;
  126. }
  127. }
  128. /*if (!sign) {
  129. if (StringUtils.isBlank(verificationCode)) {
  130. res.getError().add(buildError(ErrorConstants.VCODE_EMPTY_ERROR, "", "图像验证码不能为空!"));
  131. return res;
  132. }
  133. if (!VerifyCodeUtils.verifyCode(verificationCode)) {
  134. res.getError().add(buildError(ErrorConstants.VCODE_ERROR, "", "图形验证码输入错误!"));
  135. return res;
  136. }
  137. }
  138. */
  139. if (TokenManager.getSession().getAttribute(VerifyCodeUtils.M_CODE_TIME) == null
  140. || TokenManager.getSession().getAttribute(VerifyCodeUtils.M_CODE_TIME) == "") {
  141. sendMessage(mobile, res,VerifyCodeUtils.M_CODE);
  142. } else if (TimeUtils.checkOverTime("getMCode")) {
  143. VerifyCodeUtils.clearMobileCode();
  144. VerifyCodeUtils.clearMobileCodeTime();
  145. sendMessage(mobile, res,VerifyCodeUtils.M_CODE);
  146. } else {
  147. res.getError().add(buildError(ErrorConstants.MCODE_FREQUENCY_ERROR, "", "手机验证码发送频繁!"));
  148. }
  149. return res;
  150. }
  151. /**
  152. *
  153. * @param mobile
  154. * @param res
  155. * @return
  156. */
  157. private Result sendMessage(String mobile, Result res,String codeType) {
  158. String mobileVerifyCode = VerifyCodeUtils.generateMobileVerifyCode(6); // 生成随机字串
  159. if(VerifyCodeUtils.M_CODE.equals(codeType)){
  160. TokenManager.setVal2Session(VerifyCodeUtils.M_CODE, mobileVerifyCode);// 存入Shiro会话session
  161. TokenManager.setVal2Session(VerifyCodeUtils.M_CODE_TIME, System.currentTimeMillis());
  162. }else if(VerifyCodeUtils.RESET_CODE.equals(codeType)){
  163. TokenManager.setVal2Session(VerifyCodeUtils.RESET_CODE, mobileVerifyCode);// 存入Shiro会话session
  164. TokenManager.setVal2Session(VerifyCodeUtils.RESET_CODE_TIME, System.currentTimeMillis());
  165. }
  166. String paramString = "{\"code\":\"" + mobileVerifyCode + "\",\"product\":\"技淘网\"}";
  167. String ret = MobileMessageUtils.sendMessage(mobileCodeTemplate, paramString, mobile, accessKey, accessSecret);
  168. if (StringUtils.isNotBlank(ret)) {
  169. res.getError().add(buildError(ErrorConstants.M_CODE_ERROR));
  170. }
  171. return res;
  172. }
  173. /**
  174. * 下载图片
  175. *
  176. * @param response
  177. * @param path
  178. * @param request
  179. */
  180. @RequestMapping(value = "/downLoadPicture", method = RequestMethod.GET)
  181. public Result downLoadPicture(HttpServletResponse response, String path, HttpServletRequest request) {
  182. Result res = new Result();
  183. if (StringUtils.isBlank(path)) {
  184. res.getError().add(buildError(ErrorConstants.FILE_NON_EXISTENT));
  185. return res;
  186. }
  187. String filename = Long.toString(System.nanoTime()) + ".jpg";
  188. InputStream in = null;
  189. OutputStream out = null;
  190. byte[] buffer = new byte[8 * 1024];
  191. String fileSaveRootPath = "";
  192. try {
  193. fileSaveRootPath = uploadPrivatePath + path;
  194. File file = new File(fileSaveRootPath);
  195. in = new FileInputStream(file);
  196. out = response.getOutputStream();
  197. // 设置文件MIME类型
  198. response.setContentType("application/octet-stream");
  199. response.setHeader("Content-Disposition", "attachment; filename=" + filename);
  200. for (;;) {
  201. int bytes = in.read(buffer);
  202. if (bytes == -1) {
  203. break;
  204. }
  205. out.write(buffer, 0, bytes);
  206. }
  207. } catch (IOException e) {
  208. LoggerUtils.fmtError(getClass(), e, "IO错误:%s", e.getMessage());
  209. } finally {
  210. try {
  211. if (null != in) {
  212. in.close();
  213. }
  214. } catch (IOException e) {
  215. LoggerUtils.fmtError(getClass(), e, "IO错误:%s", e.getMessage());
  216. }
  217. try {
  218. if (null != out) {
  219. out.close();
  220. }
  221. } catch (IOException e) {
  222. LoggerUtils.fmtError(getClass(), e, "IO错误:%s", e.getMessage());
  223. }
  224. }
  225. return res;
  226. }
  227. /**
  228. * 删除图片文件(public图片)
  229. *
  230. * @param path
  231. * @return
  232. */
  233. @RequestMapping(value = "/deleteUploadPicture", method = RequestMethod.POST)
  234. public boolean deleteUploadPicture(String path) {
  235. boolean flag = false;
  236. path = uploadPath + path;
  237. File file = new File(path);
  238. // 判断目录或文件是否存在
  239. if (!file.exists() || !file.isFile()) { // 不存在返回 false
  240. return flag;
  241. } else {
  242. return file.delete();
  243. }
  244. }
  245. /**
  246. * 获取并输出private图片
  247. */
  248. @RequestMapping(value = "/writeImage", method = RequestMethod.GET)
  249. public void writeImage(HttpServletResponse response, HttpServletRequest request, String path) {
  250. try {
  251. String realPath = uploadPrivatePath + path;
  252. PictureUtils.outputImage(response, realPath);
  253. } catch (IOException e) {
  254. LoggerUtils.fmtError(getClass(), e, "获取图片异常:%s", e.getMessage());
  255. }
  256. }
  257. /**
  258. * 下载文件
  259. *
  260. * @param res
  261. * @param fileName
  262. * @param response
  263. * @param path
  264. * @param request
  265. * @return
  266. */
  267. @RequestMapping(value = "/downloadFile", method = RequestMethod.GET)
  268. public Result downloadFile(String fileName, HttpServletResponse response, String path) {
  269. Result res = new Result();
  270. return handleDownloadFile(response, fileName, path, res);
  271. }
  272. private Result handleDownloadFile(HttpServletResponse response, String fileName, String path, Result res) {
  273. String fileSaveRootPath = uploadPrivatePath + path;
  274. InputStream in = null;
  275. OutputStream out = null;
  276. byte[] buffer = new byte[8 * 1024];
  277. try {
  278. File file = new File(fileSaveRootPath);
  279. in = new FileInputStream(file);
  280. out = response.getOutputStream();
  281. response.setContentType("multipart/form-data");
  282. fileName = java.net.URLEncoder.encode(fileName, "UTF-8");
  283. response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
  284. for (;;) {
  285. int bytes = in.read(buffer);
  286. if (bytes == -1) {
  287. break;
  288. }
  289. out.write(buffer, 0, bytes);
  290. }
  291. } catch (IOException e) {
  292. LoggerUtils.fmtError(getClass(), e, "IO错误:%s", e.getMessage());
  293. } finally {
  294. try {
  295. in.close();
  296. } catch (IOException e) {
  297. LoggerUtils.fmtError(getClass(), e, "IO错误:%s", e.getMessage());
  298. }
  299. try {
  300. out.close();
  301. } catch (IOException e) {
  302. LoggerUtils.fmtError(getClass(), e, "IO错误:%s", e.getMessage());
  303. }
  304. }
  305. return res;
  306. }
  307. @RequestMapping(value = "/findIndustryCategory", method = RequestMethod.GET)
  308. @ResponseBody
  309. public Result findIndustryCategory(String id, String noCache) {
  310. Integer pid = 0;
  311. if (StringUtils.isNumeric(id)) {
  312. try {
  313. pid = Integer.parseInt(id);
  314. } catch (Exception e) {
  315. pid = 0;
  316. }
  317. }
  318. if (StringUtils.isNotBlank(noCache)) {
  319. industryCategoryService.clear(pid);
  320. }
  321. return new Result().data(industryCategoryService.list(pid));
  322. }
  323. @RequestMapping(value = "/findDistrict", method = RequestMethod.GET)
  324. @ResponseBody
  325. public Result findDistrictGlossory(String id, String noCache) {
  326. Integer pid = 0;
  327. if (StringUtils.isNumeric(id)) {
  328. try {
  329. pid = Integer.parseInt(id);
  330. } catch (Exception e) {
  331. pid = 0;
  332. }
  333. }
  334. if (StringUtils.isNotBlank(noCache)) {
  335. districtGlossoryService.clear(pid);
  336. }
  337. return new Result().data(districtGlossoryService.list(pid));
  338. }
  339. /**
  340. *
  341. * @param mobileCode
  342. * @return
  343. */
  344. @RequestMapping(value = "/checkMCode", method = RequestMethod.POST)
  345. @ResponseBody
  346. public Result checkMCode(String mobileCode) {
  347. Result res = new Result();
  348. if (StringUtils.isBlank(mobileCode)) {
  349. res.getError().add(buildError(ErrorConstants.MCODE_EMPTY_ERROR, "", "手机验证码"));
  350. return res;
  351. }
  352. if (TimeUtils.checkOverTime(VerifyCodeUtils.M_CODE)) {
  353. res.getError().add(buildError(ErrorConstants.MCODE_OVERTIME_ERROR, "", "手机验证码超时失效!"));
  354. VerifyCodeUtils.clearMobileCode();
  355. VerifyCodeUtils.clearMobileCodeTime();
  356. return res;
  357. }
  358. if (!TokenManager.getSession().getAttribute(VerifyCodeUtils.M_CODE).equals(mobileCode)) {
  359. res.getError().add(buildError(ErrorConstants.MCODE_ERROR, "", "手机验证码错误"));
  360. return res;
  361. }
  362. // resetCode
  363. if (res.getError().isEmpty()) {
  364. String resetCode = UUID.randomUUID().toString();
  365. TokenManager.setVal2Session(VerifyCodeUtils.RESET_CODE, resetCode);
  366. TokenManager.setVal2Session(VerifyCodeUtils.RESET_CODE_TIME, System.currentTimeMillis());
  367. res.setData(resetCode);
  368. }
  369. return res;
  370. }
  371. /**
  372. * 重置密码
  373. *
  374. * @param resetCode
  375. * @param mobile
  376. * @param type
  377. * @param newPwd
  378. * @return
  379. */
  380. @RequestMapping(value = "/resetPwd", method = RequestMethod.POST)
  381. @ResponseBody
  382. public Result resetPwd(String resetCode, String mobile, Integer type, String newPwd) {
  383. Result res = new Result();
  384. if (TimeUtils.checkOverTime(VerifyCodeUtils.M_CODE)) {
  385. res.getError().add(buildError(ErrorConstants.RESET_CODE_OVERTIME, "", "页面超时失效,请重新获取验证码!"));
  386. cleanCodeSession();
  387. return res;
  388. }
  389. if(null == TokenManager.getSession().getAttribute(VerifyCodeUtils.RESET_CODE)){
  390. res.getError().add(buildError(ErrorConstants.RESET_CODE_OVERTIME, "", "页面超时失效,请重新获取验证码!"));
  391. cleanCodeSession();
  392. return res;
  393. }else if(!TokenManager.getSession().getAttribute(VerifyCodeUtils.RESET_CODE).equals(resetCode)){
  394. res.getError().add(buildError(ErrorConstants.RESET_CODE_ERROR, "", "验证码错误,请重新获取验证码!"));
  395. cleanCodeSession();
  396. return res;
  397. }
  398. if (StringUtils.isBlank(newPwd)) {
  399. res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "新密码"));
  400. return res;
  401. }
  402. if (StringUtils.isBlank(mobile)) {
  403. res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "mobile"));
  404. return res;
  405. }
  406. if (!UserType.ORGANIZATION.getCode().equals(type) && !UserType.PERSONAL.getCode().equals(type)) {
  407. res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "type"));
  408. return res;
  409. }
  410. User user = userService.selectByMobieAndType(mobile, type);
  411. if (null == user) {
  412. res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "mobile"));
  413. return res;
  414. }
  415. user.setPassword(newPwd);
  416. user.setPassword(passwordUtil.getEncryptPwd(user));
  417. userService.updateByPrimaryKeySelective(user);
  418. VerifyCodeUtils.clearResetCode();
  419. VerifyCodeUtils.clearResetCodeTime();
  420. return res;
  421. }
  422. @RequestMapping(value = "/resetPassword", method = RequestMethod.POST)
  423. @ResponseBody
  424. public Result resetPassword(String mobile,Integer type,String newPwd,String resetCode) {
  425. Result res=new Result();
  426. if (TimeUtils.checkOverTime(VerifyCodeUtils.M_CODE)) {
  427. res.getError().add(buildError(ErrorConstants.RESET_CODE_OVERTIME, "", "页面超时失效,请重新获取验证码!"));
  428. cleanCodeSession();
  429. return res;
  430. }
  431. if(null == TokenManager.getSession().getAttribute(VerifyCodeUtils.RESET_CODE)){
  432. res.getError().add(buildError(ErrorConstants.RESET_CODE_OVERTIME, "", "页面超时失效,请重新获取验证码!"));
  433. cleanCodeSession();
  434. return res;
  435. }else if(!TokenManager.getSession().getAttribute(VerifyCodeUtils.RESET_CODE).equals(resetCode)){
  436. res.getError().add(buildError(ErrorConstants.RESET_CODE_ERROR, "", "验证码错误,请重新获取验证码!"));
  437. cleanCodeSession();
  438. return res;
  439. }
  440. if (StringUtils.isBlank(newPwd)) {
  441. res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "新密码"));
  442. return res;
  443. }
  444. if (StringUtils.isBlank(mobile)) {
  445. res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "用户名"));
  446. return res;
  447. }
  448. User user=userService.selectByMobieAndType(mobile, type);
  449. if(user==null || user.getMobile()==null || !user.getMobile().equals(mobile))
  450. {
  451. res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "手机号或用户名错误"));
  452. return res;
  453. }
  454. user.setPassword(newPwd);
  455. user.setPassword(passwordUtil.getEncryptPwd(user));
  456. userService.updateByPrimaryKeySelective(user);
  457. return res;
  458. }
  459. /**
  460. *
  461. * @param mobileCode
  462. * @return
  463. */
  464. @RequestMapping(value = "/checkMNCode", method = RequestMethod.POST)
  465. @ResponseBody
  466. public Result checkMNCode(String mobileCode,Integer type,String mobile) {
  467. Result res = new Result();
  468. if (StringUtils.isBlank(mobileCode)) {
  469. res.getError().add(buildError(ErrorConstants.MCODE_EMPTY_ERROR, "", "手机验证码"));
  470. return res;
  471. }
  472. if (StringUtils.isBlank(mobile)) {
  473. res.getError().add(buildError(ErrorConstants.MCODE_EMPTY_ERROR, "", "手机号"));
  474. return res;
  475. }
  476. if (null==type) {
  477. res.getError().add(buildError(ErrorConstants.MCODE_EMPTY_ERROR, "", "帐号类型"));
  478. return res;
  479. }
  480. if (TimeUtils.checkOverTime(VerifyCodeUtils.M_CODE)) {
  481. res.getError().add(buildError(ErrorConstants.MCODE_OVERTIME_ERROR, "", "手机验证码超时失效!"));
  482. VerifyCodeUtils.clearMobileCode();
  483. VerifyCodeUtils.clearMobileCodeTime();
  484. return res;
  485. }
  486. if (!TokenManager.getSession().getAttribute(VerifyCodeUtils.M_CODE).equals(mobileCode)) {
  487. res.getError().add(buildError(ErrorConstants.MCODE_ERROR, "", "手机验证码错误"));
  488. return res;
  489. }
  490. User user=userService.selectByMobieAndType(mobile, type);
  491. if(user==null || user.getMobile()==null || !user.getMobile().equals(mobile))
  492. {
  493. res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "手机号或用户名错误"));
  494. return res;
  495. }
  496. // resetCode
  497. if (res.getError().isEmpty()) {
  498. String resetCode = UUID.randomUUID().toString();
  499. TokenManager.setVal2Session(VerifyCodeUtils.RESET_CODE, resetCode);
  500. TokenManager.setVal2Session(VerifyCodeUtils.RESET_CODE_TIME, System.currentTimeMillis());
  501. res.setData(resetCode);
  502. }
  503. return res;
  504. }
  505. private void cleanCodeSession() {
  506. VerifyCodeUtils.clearResetCode();
  507. VerifyCodeUtils.clearResetCodeTime();
  508. VerifyCodeUtils.clearMobileCode();
  509. VerifyCodeUtils.clearMobileCodeTime();
  510. }
  511. @RequestMapping(value = "/getRegisterMCode", method = RequestMethod.GET )
  512. @ResponseBody
  513. public Result getRegisterMCode(String mobile){
  514. Result res = new Result();
  515. if (TokenManager.getSession().getAttribute(VerifyCodeUtils.M_CODE_TIME) == null
  516. || TokenManager.getSession().getAttribute(VerifyCodeUtils.M_CODE_TIME) == "") {
  517. sendMessage(mobile, res,VerifyCodeUtils.M_CODE);
  518. } else if (TimeUtils.checkOverTime("getMCode")) {
  519. VerifyCodeUtils.clearMobileCode();
  520. VerifyCodeUtils.clearMobileCodeTime();
  521. sendMessage(mobile, res,VerifyCodeUtils.M_CODE);
  522. } else {
  523. res.getError().add(buildError(ErrorConstants.MCODE_FREQUENCY_ERROR, "", "手机验证码发送频繁!"));
  524. }
  525. return res;
  526. }
  527. @RequestMapping(value = "/getResetMCode", method = RequestMethod.GET )
  528. @ResponseBody
  529. public Result getResetMCode(String mobile) {
  530. Result res = new Result();
  531. if (userService.selectByMobieAndTypeCount(mobile.trim())<1) {
  532. res.getError().add(buildError(ErrorConstants.NON_REGISTER, "", "该用户未注册!"));
  533. return res;
  534. }
  535. if (TokenManager.getSession().getAttribute(VerifyCodeUtils.RESET_CODE_TIME) == null
  536. || TokenManager.getSession().getAttribute(VerifyCodeUtils.RESET_CODE_TIME) == "") {
  537. sendMessage(mobile, res,VerifyCodeUtils.RESET_CODE);
  538. } else if (TimeUtils.checkOverTime("resetCode")) {
  539. VerifyCodeUtils.clearMobileCode();
  540. VerifyCodeUtils.clearMobileCodeTime();
  541. sendMessage(mobile, res,VerifyCodeUtils.RESET_CODE);
  542. } else {
  543. res.getError().add(buildError(ErrorConstants.MCODE_FREQUENCY_ERROR, "", "手机验证码发送频繁!"));
  544. }
  545. return res;
  546. }
  547. /** 省市区查询 **/
  548. @RequestMapping(value = "/listAllProvince" , method = RequestMethod.POST)
  549. @ResponseBody
  550. public Result listAllProvince(){
  551. Result res = new Result();
  552. res.setData(districtGlossoryService.getProvince());
  553. return res;
  554. }
  555. @RequestMapping(value="/industryList", method = RequestMethod.GET)
  556. @ResponseBody
  557. public Result getIndustryList() {
  558. Result result=new Result();
  559. result.setData(userIdentityService.selectIndustryReletively());
  560. return result;
  561. }
  562. @RequestMapping(value="/achievementList", method = RequestMethod.GET)
  563. @ResponseBody
  564. public Result getAchievements(AchievementObject achievementObject,Integer pageNo,Integer pageSize) {
  565. Result result=new Result();
  566. result.setData(achievementService.getAchievementObjects(achievementObject, pageNo, pageSize));
  567. return result;
  568. }
  569. @RequestMapping(value="/demandList", method = RequestMethod.GET)
  570. @ResponseBody
  571. public Result getDemands(DemandListBo demandListBo,Integer pageNo,Integer pageSize) {
  572. Result result=new Result();
  573. result.setData(demandService.getDemandObjects(demandListBo, pageNo, pageSize));
  574. return result;
  575. }
  576. @RequestMapping(value = "/comment/list", method = RequestMethod.GET)
  577. @ResponseBody
  578. public Result listComment(String commodityId,Integer pageNo,Integer pageSize) {
  579. Result result=new Result();
  580. if(StringUtils.isBlank(commodityId)) {
  581. result.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR,"","商品id"));
  582. }
  583. CommentResult commentResult=new CommentResult();
  584. commentResult.setPositiveCommentCount(commentService.getCommentCount(0, commodityId));
  585. commentResult.setOrdinaryCommentCount(commentService.getCommentCount(1, commodityId));
  586. commentResult.setNegativeCommentCount(commentService.getCommentCount(2, commodityId));
  587. commentResult.setComments(commentService.searchComment(commodityId, pageNo, pageSize));
  588. result.setData(commentResult);
  589. return result;
  590. }
  591. /**
  592. * APP重置密码
  593. */
  594. @RequestMapping(value = "/appResetPwd", method = RequestMethod.POST)
  595. @ResponseBody
  596. public Result resetPwd(String resetCode, String username,String mobile, Integer type, String newPwd) {
  597. Result res = new Result();
  598. if (TimeUtils.checkOverTime(VerifyCodeUtils.M_CODE)) {
  599. res.getError().add(buildError(ErrorConstants.RESET_CODE_OVERTIME, "", "页面超时失效,请重新获取验证码!"));
  600. cleanCodeSession();
  601. return res;
  602. }
  603. if(null == TokenManager.getSession().getAttribute(VerifyCodeUtils.RESET_CODE)){
  604. res.getError().add(buildError(ErrorConstants.RESET_CODE_OVERTIME, "", "页面超时失效,请重新获取验证码!"));
  605. cleanCodeSession();
  606. return res;
  607. }else if(!TokenManager.getSession().getAttribute(VerifyCodeUtils.RESET_CODE).equals(resetCode)){
  608. res.getError().add(buildError(ErrorConstants.RESET_CODE_ERROR, "", "验证码错误,请重新获取验证码!"));
  609. cleanCodeSession();
  610. return res;
  611. }
  612. if (StringUtils.isBlank(newPwd)) {
  613. res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "新密码"));
  614. return res;
  615. }
  616. if (StringUtils.isBlank(mobile)) {
  617. res.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR, "", "mobile"));
  618. return res;
  619. }
  620. /*if (!UserType.ORGANIZATION.getCode().equals(type) && !UserType.PERSONAL.getCode().equals(type)) {
  621. res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "type"));
  622. return res;
  623. }*/
  624. User user = userService.selectByMobieAndType(mobile, type);
  625. if (null == user) {
  626. res.getError().add(buildError( "用户未注册", "用户未注册"));
  627. return res;
  628. }
  629. if (null!=user.getMobile()&&!user.getMobile().equals(mobile)) {
  630. res.getError().add(buildError(ErrorConstants.PARAM_ERROR, "", "手机号码"));
  631. return res;
  632. }
  633. user.setPassword(newPwd);
  634. user.setPassword(passwordUtil.getEncryptPwd(user));
  635. userService.updateByPrimaryKeySelective(user);
  636. VerifyCodeUtils.clearResetCode();
  637. VerifyCodeUtils.clearResetCodeTime();
  638. return res;
  639. }
  640. /**
  641. * 新增评价
  642. */
  643. @RequestMapping(value = "/addComment", method = RequestMethod.POST)
  644. @ResponseBody
  645. public Result addNewComment(HttpServletRequest request,CommentInput commentInput) {
  646. Result result=new Result();
  647. String ip=UserCommentController.getClientIp(request);
  648. if(StringUtils.isBlank(commentInput.getCommodityId())) {
  649. result.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR,"商品id为空","商品id"));return result;
  650. }
  651. if(null == commentInput.getStar() || commentInput.getStar()<0 || commentInput.getStar()>5) {
  652. result.getError().add(buildError(ErrorConstants.PARAM_ERROR,"","评分"));return result;
  653. }
  654. if(StringUtils.isBlank(commentInput.getContent()) || commentInput.getContent().length()>512) {
  655. result.getError().add(buildError(ErrorConstants.PARAM_ERROR,"","内容限制1-512字符"));return result;
  656. }
  657. if(null == commentInput.getCommodityType() || commentInput.getCommodityType()<0 || commentInput.getCommodityType() > 4) {
  658. result.getError().add(buildError(ErrorConstants.PARAM_ERROR,"","产品类型"));return result;
  659. }
  660. int res=commentService.addNewComment(commentInput,ip);
  661. if(res ==-1) {
  662. result.getError().add(buildError(ErrorConstants.PARAM_ERROR,"","提交失败"));return result;
  663. }
  664. result.setData(res);
  665. return result;
  666. }
  667. /**
  668. *
  669. * @param commodityId
  670. * @param pageNo
  671. * @param pageSize
  672. * @return
  673. */
  674. @RequestMapping(value = "unlanded/comment/list", method = RequestMethod.GET)
  675. @ResponseBody
  676. public Result unlandedCommentList(String commodityId,Integer pageNo,Integer pageSize) {
  677. Result result=new Result();
  678. if(StringUtils.isBlank(commodityId)) {
  679. result.getError().add(buildError(ErrorConstants.PARAM_EMPTY_ERROR,"","商品id"));
  680. }
  681. CommentResult commentResult=new CommentResult();
  682. commentResult.setPositiveCommentCount(commentService.getCommentCount(0, commodityId));
  683. commentResult.setOrdinaryCommentCount(commentService.getCommentCount(1, commodityId));
  684. commentResult.setNegativeCommentCount(commentService.getCommentCount(2, commodityId));
  685. commentResult.setComments(commentService.searchUnlandedCommentList(commodityId, pageNo, pageSize));
  686. result.setData(commentResult);
  687. return result;
  688. }
  689. /**
  690. * 服务商项目列表
  691. */
  692. @SuppressWarnings("unchecked")
  693. @RequestMapping(value = "/user/projectList", method = RequestMethod.GET)
  694. @ResponseBody
  695. public Result userProjectList(String uid, Integer pageSize, Integer pageNo) {
  696. Result res = new Result();
  697. Pagination<JtBusinessProjectResult> pagination=jtBusinessService.getProjects(null,null, null, null, pageSize, pageNo, 0, 2, null, null, 0, 0, uid);
  698. List<JtBusinessProjectResult> list=(List<JtBusinessProjectResult>) pagination.getList();
  699. for (JtBusinessProjectResult j : list) {
  700. j.setIntroduce(j.getIntroduce().replaceAll("\\<.*?>", ""));
  701. }
  702. res.setData(pagination);
  703. return res;
  704. }
  705. }