WechatScanLoginController.java 31 KB

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