WechatScanLoginController.java 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695
  1. package com.template.controller;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import com.github.pagehelper.PageHelper;
  5. import com.github.pagehelper.PageInfo;
  6. import com.github.pagehelper.util.StringUtil;
  7. import com.google.gson.Gson;
  8. import com.google.gson.reflect.TypeToken;
  9. import com.template.annotation.DESRespondSecret;
  10. import com.template.annotation.PassToken;
  11. import com.template.api.WechatScanLoginControllerAPI;
  12. import com.template.common.constanst.Constanst;
  13. import com.template.common.result.ResponseStatusEnum;
  14. import com.template.common.utils.*;
  15. import com.template.model.enumModel.eIdentityStatu;
  16. import com.template.model.evaluate.student.SmartEvaluateStudent;
  17. import com.template.model.evaluate.student.SmartSubjectManage;
  18. import com.template.model.phoneBook.BookUser;
  19. import com.template.model.phoneBook.ClassBook;
  20. import com.template.model.phoneBook.GradeBook;
  21. import com.template.model.pojo.*;
  22. import com.template.model.result.CommonResult;
  23. import com.template.model.result.PageUtils;
  24. import com.template.model.tongji.*;
  25. import com.template.model.vo.AffiliateParentVo;
  26. import com.template.model.vo.LoginVO;
  27. import com.template.model.vo.WechatUserVo;
  28. import com.template.model.weixin.AccessToken;
  29. import com.template.model.weixin.AuthorAndGroup;
  30. import com.template.model.weixin.HttpParame;
  31. import com.template.model.weixin.WechatUserUnionID;
  32. import com.template.services.*;
  33. import org.apache.commons.lang3.StringUtils;
  34. import org.springframework.beans.factory.annotation.Autowired;
  35. import org.springframework.scheduling.annotation.Async;
  36. import org.springframework.scheduling.annotation.Scheduled;
  37. import org.springframework.stereotype.Controller;
  38. import org.springframework.transaction.annotation.Transactional;
  39. import org.springframework.ui.Model;
  40. import org.springframework.web.bind.annotation.GetMapping;
  41. import org.springframework.web.bind.annotation.RequestBody;
  42. import org.springframework.web.bind.annotation.RequestMapping;
  43. import org.springframework.web.bind.annotation.RestController;
  44. import java.io.UnsupportedEncodingException;
  45. import java.math.BigDecimal;
  46. import java.net.URLEncoder;
  47. import java.text.ParseException;
  48. import java.util.*;
  49. import java.util.stream.Collectors;
  50. /**
  51. * Title: WechatScanLoginController
  52. * Description: 微信扫码登录controller
  53. *
  54. * @author fengyong
  55. * @date 2018年9月7日
  56. */
  57. @Controller
  58. public class WechatScanLoginController implements WechatScanLoginControllerAPI {
  59. @Autowired
  60. private WechatScanLoginService wechatScanLoginService;
  61. @Autowired
  62. public SmartUserService smartUserService;
  63. @Autowired
  64. public SmartAuthorityService smartAuthorityService;
  65. @Autowired
  66. public SmartAuthorGroupService smartAuthorGroupService;
  67. @Autowired
  68. public SmartDepartmentService smartDepartmentService;
  69. @Autowired
  70. public SmsCodeService smsCodeService;
  71. @Autowired
  72. public SmartGradeService smartGradeService;
  73. @Autowired
  74. public SmartClassService smartClassService;
  75. @Autowired
  76. public SmartMeterService smartMeterService;
  77. @Autowired
  78. public SmartMeterDetailService smartMeterDetailService;
  79. /**
  80. * Title: list
  81. * Description: 重定向到微信扫码登录二维码页面
  82. * 此处显示要微信要扫描的二维码
  83. *
  84. * @param model
  85. * @return
  86. * @throws UnsupportedEncodingException
  87. */
  88. @Override
  89. @PassToken
  90. public String login(Model model) throws UnsupportedEncodingException {
  91. Map<String, String> wechatLoginUrl = wechatScanLoginService.wechatLoginUrl();
  92. String url = wechatLoginUrl.get("url");
  93. logger.info(url);
  94. return "redirect:" + url;
  95. }
  96. /**
  97. * Title: callback
  98. * Description: 回调地址处理
  99. *
  100. * @param code
  101. * @param state
  102. * @return
  103. */
  104. @Override
  105. @PassToken
  106. public String callback(String code, String state) throws UnsupportedEncodingException {
  107. logger.info(code + "=====" + state);
  108. if (code != null && state != null) {
  109. // 验证state为了用于防止跨站请求伪造攻击
  110. String decrypt = AesUtil.decrypt(AesUtil.parseHexStr2Byte(state), AesUtil.PASSWORD_SECRET_KEY, 16);
  111. if (!decrypt.equals(Constanst.PWD_MD5 + DateUtils.getYYYYMMdd())) {
  112. return "redirect:" + HttpParame.FRONT_URI + "/#/login?message=" + URLEncoder.encode("请勿非法进入", "UTF-8");
  113. }
  114. AccessToken access = wechatScanLoginService.getAccessToken(code);
  115. logger.info("access:" + access);
  116. if (access != null) {
  117. String openid = access.getOpenid();
  118. logger.info("openid: " + openid);
  119. SmartUser user = wechatScanLoginService.selectByOpenid(openid);
  120. if (user == null) { /*不存在*/
  121. return "redirect:" + HttpParame.FRONT_URI + "/#/login?message=" + URLEncoder.encode("请绑定信息", "UTF-8");
  122. } else {
  123. String token = JWTUtil.getToken(user, null);
  124. String userhead = AesUtils.encrypt(String.valueOf(user.getId()));
  125. QueryWrapper<SmartAuthority> queryWrapper1 = new QueryWrapper<>();
  126. queryWrapper1.eq("deleted", 0);
  127. queryWrapper1.eq("user_id", user.getId());
  128. List<SmartAuthority> query = smartAuthorityService.getAuthorByKey(queryWrapper1);
  129. if (query.size() > 0) {
  130. return "redirect:" + HttpParame.FRONT_URI + "/#/wanzai/home?token=" + token+"&userhead="+userhead;
  131. } else {
  132. return "redirect:" + HttpParame.FRONT_URI + "/#/login?message=" + URLEncoder.encode("无登录权限", "UTF-8");
  133. }
  134. }
  135. }
  136. }
  137. return null;
  138. }
  139. /**
  140. * Title: bindingUserMac2
  141. * Description: 跳转到绑定用户系统帐号页面
  142. *
  143. * @return
  144. */
  145. @Override
  146. @PassToken
  147. public String bindUserMac(String phone, String messageCode) throws UnsupportedEncodingException {
  148. if (StringUtils.isBlank(phone) || StringUtils.isBlank(messageCode)) {
  149. return "redirect:" + HttpParame.FRONT_URI + "/#/login?message=" + URLEncoder.encode("请输入信息", "UTF-8");
  150. }
  151. Map<String, String> wechatLoginUrl = wechatScanLoginService.wechatBindUrl(phone, messageCode);
  152. String url = wechatLoginUrl.get("url");
  153. logger.info(url);
  154. return "redirect:" + url;
  155. }
  156. @Override
  157. @PassToken
  158. public String bindcallback(String code, String state, String phone, String messageCode) throws UnsupportedEncodingException {
  159. logger.info(code + "===" + state + "==" + messageCode);
  160. if (code != null && state != null) {
  161. // 验证state为了用于防止跨站请求伪造攻击
  162. String decrypt = AesUtil.decrypt(AesUtil.parseHexStr2Byte(state), AesUtil.PASSWORD_SECRET_KEY, 16);
  163. if (!decrypt.equals(Constanst.PWD_MD5 + DateUtils.getYYYYMMdd())) {
  164. return "redirect:" + HttpParame.FRONT_URI + "/#/login?message=" + URLEncoder.encode("请勿非法进入", "UTF-8");
  165. }
  166. AccessToken access = wechatScanLoginService.getAccessToken(code);
  167. if (access != null) {
  168. String openid = access.getOpenid();
  169. QueryWrapper<SmsCode> queryWrapper1 = new QueryWrapper<>();
  170. queryWrapper1.eq("deleted", 0);
  171. queryWrapper1.eq("is_verify", 0);
  172. queryWrapper1.eq("phone_number", phone);
  173. queryWrapper1.eq("code", messageCode);
  174. queryWrapper1.ge("expiration_time", new Date());
  175. List<SmsCode> listc = smsCodeService.getSmsCodeByKey(queryWrapper1);
  176. if (listc.isEmpty()) {
  177. return "redirect:" + HttpParame.FRONT_URI + "/#/login?message=" + URLEncoder.encode("验证码已失效", "UTF-8");
  178. }
  179. QueryWrapper<SmartUser> queryWrapper2 = new QueryWrapper<>();
  180. queryWrapper2.eq("deleted", 0);
  181. queryWrapper2.eq("phone", phone);
  182. List<SmartUser> userc = smartUserService.list(queryWrapper2);
  183. if (userc.isEmpty()) {
  184. return "redirect:" + HttpParame.FRONT_URI + "/#/login?message=" + URLEncoder.encode("用户不存在", "UTF-8");
  185. }
  186. userc.get(0).setOpenId(openid);
  187. int m = wechatScanLoginService.updateSmartUser(userc.get(0));
  188. if (m > 0) {
  189. String token = JWTUtil.getToken(userc.get(0), null);
  190. QueryWrapper<SmartAuthority> queryWrapper3 = new QueryWrapper<>();
  191. queryWrapper3.eq("deleted", 0);
  192. queryWrapper3.eq("user_id", userc.get(0).getId());
  193. List<SmartAuthority> query = smartAuthorityService.getAuthorByKey(queryWrapper3);
  194. if (query.size() > 0) {
  195. String userhead = AesUtils.encrypt(String.valueOf(userc.get(0).getId()));
  196. return "redirect:" + HttpParame.FRONT_URI + "/#/wanzai/home?token=" + token+"&userhead="+userhead;
  197. } else {
  198. return "redirect:" + HttpParame.FRONT_URI + "/#/login?message=" + URLEncoder.encode("无登录权限", "UTF-8");
  199. }
  200. }
  201. }
  202. }
  203. return "redirect:" + HttpParame.FRONT_URI + "/#/login?message=" + URLEncoder.encode("系统异常", "UTF-8");
  204. }
  205. /**===============================水电管理=================================**/
  206. @Override
  207. @PassToken
  208. public String insertElecMeterDetail() throws Exception {
  209. QueryWrapper<SmartMeter> queryWrapper1 = new QueryWrapper<>();
  210. queryWrapper1.eq("deleted", 0);
  211. queryWrapper1.eq("meter_type", 1);
  212. List<SmartMeter> list = smartMeterService.list(queryWrapper1);
  213. if (!list.isEmpty()){
  214. for (int i = 0; i < list.size(); i++) {
  215. String msg = HttpsClient.get("http://iot.czrxdzonline.cn/api/dtu/find?deviceNum="+list.get(i).getMeterNo());
  216. JSONObject result = JSONObject.parseObject(msg);
  217. Integer state = result.getInteger("Status");
  218. if (state==1){
  219. Double lastRecord = 0.00;
  220. QueryWrapper<SmartMeterDetail> queryWrapper2 = new QueryWrapper<>();
  221. queryWrapper2.eq("deleted", 0);
  222. queryWrapper2.eq("meter_type", 1);
  223. queryWrapper2.eq("meter_id", list.get(i).getId());
  224. queryWrapper2.orderByDesc("id");
  225. List<SmartMeterDetail> detailList = smartMeterDetailService.list(queryWrapper2);
  226. if (!detailList.isEmpty()){
  227. lastRecord = detailList.get(0).getMeterPowerRecord();
  228. }
  229. JSONObject data = result.getJSONObject("Data");
  230. ElecData elecData = JSONObject.parseObject(data.toString(), ElecData.class);
  231. SmartMeterDetail smartMeterDetail = new SmartMeterDetail();
  232. smartMeterDetail.setMeterId(list.get(i).getId());
  233. smartMeterDetail.setMeterType(1);
  234. String display = elecData.getDisplay();
  235. smartMeterDetail.setMeterPowerRecord(Double.parseDouble(display)/Double.parseDouble("100"));
  236. smartMeterDetail.setMeterPower(Double.parseDouble(display)/Double.parseDouble("100")-lastRecord);
  237. smartMeterDetail.setCreateTime(TimeExchange.StringToDate(elecData.getCommunication(), "yyyy-MM-dd HH:mm:ss"));
  238. logger.info("====="+smartMeterDetail.getMeterPowerRecord());
  239. smartMeterDetailService.insertSmartMeterDetail(smartMeterDetail);
  240. }
  241. }
  242. }
  243. return "插入完毕";
  244. }
  245. @Override
  246. @PassToken
  247. public String insertWatMeterDetail() throws Exception {
  248. QueryWrapper<SmartMeter> queryWrapper1 = new QueryWrapper<>();
  249. queryWrapper1.eq("deleted", 0);
  250. queryWrapper1.eq("meter_type", 0);
  251. List<SmartMeter> list = smartMeterService.list(queryWrapper1);
  252. if (!list.isEmpty()){
  253. for (int i = 0; i < list.size(); i++) {
  254. JSONObject jsonObject = new JSONObject();
  255. jsonObject.put("type", "5");
  256. jsonObject.put("address", list.get(i).getMeterNo());
  257. String msg = HttpsClient.sendJson("http://iot.czrxdzonline.cn/api/wat/find", jsonObject);
  258. JSONObject result = JSONObject.parseObject(msg);
  259. Integer state = result.getInteger("Status");
  260. if (state==1){
  261. Double lastRecord = 0.00;
  262. QueryWrapper<SmartMeterDetail> queryWrapper2 = new QueryWrapper<>();
  263. queryWrapper2.eq("deleted", 0);
  264. queryWrapper2.eq("meter_type", 0);
  265. queryWrapper2.eq("meter_id", list.get(i).getId());
  266. queryWrapper2.orderByDesc("id");
  267. List<SmartMeterDetail> detailList = smartMeterDetailService.list(queryWrapper2);
  268. if (!detailList.isEmpty()){
  269. lastRecord = detailList.get(0).getMeterPowerRecord();
  270. }
  271. JSONObject data = result.getJSONObject("Data");
  272. WatData watData = JSONObject.parseObject(data.toString(), WatData.class);
  273. SmartMeterDetail smartMeterDetail = new SmartMeterDetail();
  274. smartMeterDetail.setMeterId(list.get(i).getId());
  275. smartMeterDetail.setMeterType(0);
  276. String display = watData.getQuantity();
  277. smartMeterDetail.setMeterPowerRecord(Double.parseDouble(display)/Double.parseDouble("100"));
  278. smartMeterDetail.setMeterPower(Double.parseDouble(display)/Double.parseDouble("100")-lastRecord);
  279. smartMeterDetail.setCreateTime(TimeExchange.StringToDate(watData.getLastUpdate(), "yyyy-MM-dd HH:mm:ss"));
  280. logger.info("====="+smartMeterDetail.getMeterPowerRecord());
  281. smartMeterDetailService.insertSmartMeterDetail(smartMeterDetail);
  282. }
  283. }
  284. }
  285. return "插入完毕";
  286. }
  287. @Override
  288. @PassToken
  289. public String insertMonthMeter(String month) {
  290. if (month == null) {
  291. month = TimeExchange2.getMonth();
  292. }
  293. wechatScanLoginService.insertMonthMeter(month);
  294. return "插入完毕";
  295. }
  296. @Override
  297. @PassToken
  298. public String insertDayMeter(String day) {
  299. if (day == null) {
  300. day = TimeExchange2.getDateStr();
  301. }
  302. wechatScanLoginService.insertDayMeter(day);
  303. return "插入完毕";
  304. }
  305. /**
  306. * Description: 用户类别统计
  307. */
  308. @Override
  309. @PassToken
  310. @DESRespondSecret(validated = true)
  311. public CommonResult getUserIdTj() {
  312. List<Tj> list = wechatScanLoginService.getUserIdTj();
  313. return CommonResult.ok(list);
  314. }
  315. /**
  316. * Description: 用户总数
  317. */
  318. @Override
  319. @PassToken
  320. @DESRespondSecret(validated = true)
  321. public CommonResult getUserIdTjt() {
  322. All list = wechatScanLoginService.getUserIdTjt();
  323. return CommonResult.ok(list);
  324. }
  325. /**
  326. * Description: 水表总计
  327. */
  328. @Override
  329. @PassToken
  330. @DESRespondSecret(validated = true)
  331. public CommonResult getWaterTj() {
  332. DAll list = wechatScanLoginService.getWaterTj();
  333. return CommonResult.ok(list);
  334. }
  335. /**
  336. * Description: 电表总计
  337. */
  338. @Override
  339. @PassToken
  340. @DESRespondSecret(validated = true)
  341. public CommonResult getElcTj() {
  342. DAll list = wechatScanLoginService.getElcTj();
  343. return CommonResult.ok(list);
  344. }
  345. /**
  346. * Description: 每月水费查询
  347. */
  348. @Override
  349. @PassToken
  350. @DESRespondSecret(validated = true)
  351. public CommonResult getMonWater() throws ParseException {
  352. List<MonthMeterDetail> list = wechatScanLoginService.getMonWater();
  353. return CommonResult.ok(list);
  354. }
  355. /**
  356. * Description: 每月电费查询
  357. */
  358. @Override
  359. @PassToken
  360. @DESRespondSecret(validated = true)
  361. public CommonResult getMonElc() throws ParseException {
  362. List<MonthMeterDetail> list = wechatScanLoginService.getMonElc();
  363. return CommonResult.ok(list);
  364. }
  365. /**
  366. * Description: 区域能耗统计
  367. */
  368. @Override
  369. @PassToken
  370. @DESRespondSecret(validated = true)
  371. public CommonResult getMeterMonthPage(@RequestBody MeterMonthData meterMonthData, int currentPage, int pageCount) {
  372. PageHelper.startPage(currentPage, pageCount);
  373. PageInfo<MeterMonthData> list = wechatScanLoginService.getMeterMonthPage(meterMonthData);
  374. return CommonResult.ok(list);
  375. }
  376. /**
  377. * Description: 实时抄表
  378. */
  379. @Override
  380. @PassToken
  381. @DESRespondSecret(validated = true)
  382. public CommonResult getMeterDayPage(@RequestBody MeterMonthData meterMonthData, int currentPage, int pageCount) {
  383. PageHelper.startPage(currentPage, pageCount);
  384. PageInfo<MeterMonthData> list = wechatScanLoginService.getMeterDayPage(meterMonthData);
  385. return CommonResult.ok(list);
  386. }
  387. /**
  388. * Description: 查轨迹
  389. */
  390. @Override
  391. @PassToken
  392. @DESRespondSecret(validated = true)
  393. public CommonResult getPosition() {
  394. List<List<BigDecimal>> ld = RandomTrackAlgorithm.getPosition();
  395. return CommonResult.ok(ld);
  396. }
  397. @Override
  398. @PassToken
  399. @DESRespondSecret(validated = true)
  400. public CommonResult vertify(String code) {
  401. if (StringUtils.isBlank(code)) {
  402. return CommonResult.fail("请传入code");
  403. }
  404. String url = "https://api.weixin.qq.com/sns/jscode2session?" +
  405. "appid=" + PropertiesUtil.getValue(HttpParame.APPIDX) +
  406. "&secret=" + PropertiesUtil.getValue(HttpParame.SECRETX) +
  407. "&js_code=" + code +
  408. "&grant_type=authorization_code";
  409. String json = HttpClientUtils.getInstance().sendHttpGet(url);
  410. Gson gson = new Gson();
  411. HashMap<String, String> userMap = gson.fromJson(json.toString(), new TypeToken<HashMap<String, String>>() {
  412. }.getType());
  413. String openid = "";
  414. try {
  415. openid = userMap.get("openid").toString();
  416. } catch (Exception e) {
  417. return CommonResult.fail("code异常");
  418. }
  419. QueryWrapper<SmartUser> queryWrapper1 = new QueryWrapper<>();
  420. queryWrapper1.eq("deleted", 0);
  421. queryWrapper1.eq("is_cancel", 0);
  422. queryWrapper1.eq("x_open_id", openid);
  423. List<SmartUser> user = smartUserService.list(queryWrapper1);
  424. if (user.isEmpty()) {
  425. return CommonResult.fail("请绑定后再进入");
  426. }
  427. //部门数据集合
  428. List<SmartDepartment> departments = smartDepartmentService.list(null);
  429. long expired = 1000 * 60 * 60 * 24 * 365;
  430. String token = JWTUtil.getToken(user.get(0), expired);
  431. JSONObject jsonObject = new JSONObject();
  432. jsonObject.put("token", token);
  433. List<WechatUserVo> userDatas = new ArrayList<>();
  434. for (SmartUser su : user) {
  435. WechatUserVo userData = new WechatUserVo();
  436. userData.setId(su.getId());
  437. userData.setCardNo(su.getCardNo());
  438. userData.setTimeGroupId(su.getTimeGroupId());
  439. userData.setName(su.getName());
  440. userData.setIdentityId(su.getIdentityId());
  441. userData.setIdCard(su.getIdCard());
  442. userData.setSexId(su.getSexId());
  443. userData.setDepartmentId(su.getDepartmentId());
  444. Optional<SmartDepartment> department = departments.stream().filter(e -> e.getId().equals(su.getDepartmentId())).findFirst();
  445. if (department != null && department.isPresent()) {
  446. String departmentName = QueryParentDepartments(department.get().getParentId(), departments, null);
  447. userData.setDepartmentName(departmentName == null ? "" : departmentName + "/" + department.get().getName());
  448. }
  449. userData.setHeadImage(su.getHeadImage());
  450. userData.setGrade(su.getGrade());
  451. userData.setCollege(su.getCollege());
  452. userData.setSpeciality(su.getSpeciality());
  453. userData.setSchoolClass(su.getSchoolClass());
  454. userData.setCampus(su.getCampus());
  455. userData.setDormitoryNumber(su.getDormitoryNumber());
  456. userData.setPhone(su.getPhone());
  457. userData.setAffiliate(su.getAffiliate());
  458. //查找关联人
  459. if (su.getIdentityId().intValue() == eIdentityStatu.Student.getValue()) {//学生
  460. List<AffiliateParentVo> parents = smartUserService.queryAffiliateParents(su.getId());
  461. if (parents != null && parents.size() > 0) {
  462. String affiliateStr = StringUtils.join(parents.stream().map(AffiliateParentVo::getName).collect(Collectors.toList()), ",");
  463. userData.setAffiliateName(affiliateStr);
  464. }
  465. } else if (su.getIdentityId().intValue() == eIdentityStatu.Parent.getValue()) {//家长
  466. if (su.getAffiliate() != null) {
  467. List<String> affiliates = Arrays.asList(su.getAffiliate().split(","));
  468. List<SmartUser> childs = smartUserService.getSmartUserIds(affiliates);
  469. String affiliateStr = StringUtils.join(childs.stream().map(SmartUser::getName).collect(Collectors.toList()), ",");
  470. userData.setAffiliateName(affiliateStr);
  471. }
  472. }
  473. //关联人名称用逗号隔开
  474. userData.setTitle(su.getTitle());
  475. userData.setAddress(su.getAddress());
  476. userData.setNation(su.getNation());
  477. userData.setOfStudent(su.getOfStudent());
  478. userData.setGraduate(su.getGraduate());
  479. userData.setDuties(su.getDuties());
  480. userData.setIsPush(su.getIsPush());
  481. userData.setIsCancel(su.getIsCancel());
  482. userData.setOpenId(su.getOpenId());
  483. userData.setXOpenId(su.getXOpenId());
  484. userData.setGzhOpenId(su.getGzhOpenId());
  485. userData.setXwStudentUid(su.getXwStudentUid());
  486. userData.setBsStudentNo(su.getBsStudentNo());
  487. userData.setXwTeacherCode(su.getXwTeacherCode());
  488. userData.setBsStaffCode(su.getBsStaffCode());
  489. userDatas.add(userData);
  490. }
  491. jsonObject.put("user", userDatas);
  492. jsonObject.put("userhead", AesUtils.encrypt(String.valueOf(user.get(0).getId())));
  493. return CommonResult.ok(jsonObject.toString());
  494. }
  495. /**
  496. * 根据父级ID获取父级数据
  497. *
  498. * @param parentID 子级ID
  499. * @param lists 数据集合
  500. * @return
  501. */
  502. private static String QueryParentDepartments(Integer parentID, List<SmartDepartment> lists, String departmentStr) {
  503. Optional<SmartDepartment> data = lists.stream().filter(e -> e.getId().equals(parentID)).findFirst();
  504. if (data != null && data.isPresent()) {
  505. departmentStr = departmentStr == null ? data.get().getName() : data.get().getName() + "/" + departmentStr;
  506. departmentStr = QueryParentDepartments(data.get().getParentId(), lists, departmentStr);
  507. }
  508. return departmentStr;
  509. }
  510. @Override
  511. @PassToken
  512. @DESRespondSecret(validated = true)
  513. public CommonResult sendMessage(String phone) {
  514. QueryWrapper<SmartUser> queryWrapper1 = new QueryWrapper<>();
  515. queryWrapper1.eq("deleted", 0);
  516. queryWrapper1.eq("phone", phone);
  517. queryWrapper1.eq("is_cancel", 0);
  518. List<SmartUser> list = smartUserService.list(queryWrapper1);
  519. if (list.isEmpty()) {
  520. return CommonResult.fail("该手机无权限登录");
  521. }
  522. QueryWrapper<SmsCode> queryWrapper2 = new QueryWrapper<>();
  523. queryWrapper2.eq("deleted", 0);
  524. queryWrapper2.eq("is_verify", 0);
  525. queryWrapper2.eq("phone_number", phone);
  526. queryWrapper2.ge("expiration_time", new Date());
  527. List<SmsCode> listc = smsCodeService.getSmsCodeByKey(queryWrapper2);
  528. if (!listc.isEmpty()) {
  529. return CommonResult.fail("操作频繁,请稍后再试");
  530. }
  531. String code = GetVertifyCode.getRandomNumCode(6);
  532. SmsCode smsCode = new SmsCode();
  533. smsCode.setId(UUIDUtil.generateID());
  534. smsCode.setPhoneNumber(phone);
  535. smsCode.setCode(code);
  536. long time = new Date().getTime() + 300000L;
  537. smsCode.setExpirationTime(new Date(time));
  538. smsCode.setIsVerify("0");
  539. smsCode.setDeleted(0);
  540. int m = smsCodeService.insertSmsCode(smsCode);
  541. if (m > 0) {
  542. String message = SendSms.sendSms(phone, code);
  543. if (message.contains("success")) {
  544. return CommonResult.ok("发送成功");
  545. }
  546. }
  547. return CommonResult.fail("操作失败");
  548. }
  549. @Override
  550. @PassToken
  551. @DESRespondSecret(validated = true)
  552. public CommonResult vertifyMessage(String phone, String code, String wxcode) {
  553. QueryWrapper<SmsCode> queryWrapper1 = new QueryWrapper<>();
  554. queryWrapper1.eq("deleted", 0);
  555. queryWrapper1.eq("is_verify", 0);
  556. queryWrapper1.eq("phone_number", phone);
  557. queryWrapper1.eq("code", code);
  558. queryWrapper1.ge("expiration_time", new Date());
  559. List<SmsCode> listc = smsCodeService.getSmsCodeByKey(queryWrapper1);
  560. if (listc.isEmpty()) {
  561. return CommonResult.ok("验证码已失效");
  562. }
  563. if (StringUtils.isBlank(wxcode)) {
  564. return CommonResult.fail("请传入wxcode");
  565. }
  566. String url = "https://api.weixin.qq.com/sns/jscode2session?" +
  567. "appid=" + PropertiesUtil.getValue(HttpParame.APPIDX) +
  568. "&secret=" + PropertiesUtil.getValue(HttpParame.SECRETX) +
  569. "&js_code=" + wxcode +
  570. "&grant_type=authorization_code";
  571. String json = HttpClientUtils.getInstance().sendHttpGet(url);
  572. logger.info(json);
  573. Gson gson = new Gson();
  574. HashMap<String, String> userMap = gson.fromJson(json.toString(), new TypeToken<HashMap<String, String>>() {
  575. }.getType());
  576. String openid = "";
  577. try {
  578. openid = userMap.get("openid").toString();
  579. } catch (Exception e) {
  580. return CommonResult.fail("wxcode异常");
  581. }
  582. QueryWrapper<SmartUser> queryWrapper2 = new QueryWrapper<>();
  583. queryWrapper2.eq("deleted", 0);
  584. queryWrapper2.eq("phone", phone);
  585. List<SmartUser> user = smartUserService.list(queryWrapper2);
  586. if (user.isEmpty()) {
  587. return CommonResult.fail("该用户不存在");
  588. }
  589. user.get(0).setXOpenId(openid);
  590. smartUserService.updateSmartUser(user.get(0));
  591. long expired = 1000 * 60 * 60 * 24 * 365;
  592. String token = JWTUtil.getToken(user.get(0), expired);
  593. JSONObject jsonObject = new JSONObject();
  594. jsonObject.put("token", token);
  595. jsonObject.put("user", user.get(0));
  596. jsonObject.put("userhead", AesUtils.encrypt(String.valueOf(user.get(0).getId())));
  597. return CommonResult.ok(jsonObject);
  598. }
  599. @Override
  600. @PassToken
  601. @DESRespondSecret(validated = true)
  602. public CommonResult queryPhoneBook(Integer id) {
  603. if (id == null) {
  604. return CommonResult.fail("请传入id");
  605. }
  606. SmartUser user = smartUserService.getSmartById(id);
  607. if (user == null) {
  608. return CommonResult.fail("未查到用户信息");
  609. }
  610. if (user.getId() < 3) {
  611. return CommonResult.fail("无权限查询");
  612. }
  613. QueryWrapper<SmartGrade> queryWrapper1 = new QueryWrapper<>();
  614. queryWrapper1.eq("deleted", 0);
  615. List<SmartGrade> grades = smartGradeService.list(queryWrapper1);
  616. List<GradeBook> gradeBookList = new ArrayList<>();
  617. for (int i = 0; i < grades.size(); i++) {
  618. GradeBook gradeBook = new GradeBook();
  619. gradeBook.setGradeName(grades.get(i).getName());
  620. QueryWrapper<SmartClass> queryWrapper2 = new QueryWrapper<>();
  621. queryWrapper2.eq("deleted", 0);
  622. queryWrapper2.eq("grade_id", grades.get(i).getId());
  623. List<SmartClass> classes = smartClassService.list(queryWrapper2);
  624. List<ClassBook> classBookList = new ArrayList<>();
  625. for (int j = 0; j < classes.size(); j++) {
  626. ClassBook classBook = new ClassBook();
  627. classBook.setClassName(classes.get(j).getName());
  628. QueryWrapper<SmartUser> queryWrapper3 = new QueryWrapper<>();
  629. queryWrapper3.eq("deleted", 0);
  630. queryWrapper3.eq("is_cancel", 0);
  631. queryWrapper3.eq("school_class", classes.get(j).getId());
  632. queryWrapper3.eq("identity_id", 2);
  633. List<SmartUser> users = smartUserService.list(queryWrapper3);
  634. List<BookUser> bookUserList = new ArrayList<>();
  635. for (int k = 0; k < users.size(); k++) {
  636. if (Objects.equals(users.get(k).getSchoolClass(), user.getSchoolClass())) {
  637. String ob = JSONObject.toJSONString(users.get(k));
  638. BookUser bookUser = JSONObject.parseObject(ob, BookUser.class);
  639. ;
  640. QueryWrapper<SmartUser> queryWrapper4 = new QueryWrapper<>();
  641. queryWrapper4.eq("deleted", 0);
  642. queryWrapper4.eq("is_cancel", 0);
  643. queryWrapper4.eq("affiliate", users.get(k).getId());
  644. queryWrapper4.eq("identity_id", 1);
  645. List<SmartUser> usersPrarent = smartUserService.list(queryWrapper4);
  646. bookUser.setUserParents(usersPrarent);
  647. bookUserList.add(bookUser);
  648. }
  649. }
  650. classBook.setBookUserList(bookUserList);
  651. classBookList.add(classBook);
  652. }
  653. gradeBook.setClassBookList(classBookList);
  654. gradeBookList.add(gradeBook);
  655. }
  656. return CommonResult.ok(gradeBookList);
  657. }
  658. }