WechatScanLoginServiceImpl.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322
  1. package com.template.services.impl;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import com.github.pagehelper.PageInfo;
  5. import com.template.common.constanst.Constanst;
  6. import com.template.common.utils.*;
  7. import com.template.mapper.SmartUserMapper;
  8. import com.template.mapper.WechatScanLoginMapper;
  9. import com.template.model.enumModel.eIdentityStatu;
  10. import com.template.model.pojo.SmartUser;
  11. import com.template.model.tongji.*;
  12. import com.template.model.weixin.AccessToken;
  13. import com.template.model.weixin.HttpParame;
  14. import com.template.model.weixin.PhoneAccessToken;
  15. import com.template.model.weixin.WechatUserUnionID;
  16. import com.template.services.WechatScanLoginService;
  17. import org.apache.ibatis.annotations.Param;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.stereotype.Service;
  20. import java.io.UnsupportedEncodingException;
  21. import java.net.URLEncoder;
  22. import java.text.ParseException;
  23. import java.util.ArrayList;
  24. import java.util.HashMap;
  25. import java.util.List;
  26. import java.util.Map;
  27. /**
  28. * <p>Title: WechatScanLoginServiceImpl</p>
  29. * <p>Description: 业务接口实现 </p>
  30. * @author fengyong
  31. * @date 2018年9月7日
  32. */
  33. @Service
  34. public class WechatScanLoginServiceImpl implements WechatScanLoginService {
  35. @Autowired
  36. public SmartUserMapper smartUserMapper;
  37. @Autowired
  38. public WechatScanLoginMapper wechatScanLoginMapper;
  39. /**
  40. * <p>Title: wechatLoginUrl</p>
  41. * <p>Description: 网页授权回调地址处理</p>
  42. * @return
  43. * @throws UnsupportedEncodingException
  44. */
  45. @Override
  46. public Map<String, String> wechatLoginUrl() {
  47. String content = Constanst.PWD_MD5+DateUtils.getYYYYMMdd();
  48. byte[] encrypt = AesUtil.encrypt(content, AesUtil.PASSWORD_SECRET_KEY, 16);
  49. String parseByte2HexStr = AesUtil.parseByte2HexStr(encrypt);
  50. Map<String,String> map = new HashMap<String,String>();
  51. String url = HttpParame.AUTHORIZATION_URL;
  52. url = url.replaceAll("APPID", PropertiesUtil.getValue(HttpParame.APPID));
  53. try {
  54. url = url.replaceAll("REDIRECT_URI", URLEncoder.encode(
  55. PropertiesUtil.getValue(HttpParame.REDIRECT_URI),"UTF-8"));
  56. } catch (UnsupportedEncodingException e) {
  57. e.printStackTrace();
  58. }
  59. url = url.replaceAll("SCOPE", "snsapi_login");
  60. url = url.replace("STATE", parseByte2HexStr); //加密state进行验证 回调地址当天有效 防止恶意攻击
  61. map.put("url", url);
  62. return map;
  63. }
  64. @Override
  65. public Map<String, String> wechatBindUrl(String phone,String messageCode) {
  66. String content = Constanst.PWD_MD5+ DateUtils.getYYYYMMdd();
  67. byte[] encrypt = AesUtil.encrypt(content, AesUtil.PASSWORD_SECRET_KEY, 16);
  68. String parseByte2HexStr = AesUtil.parseByte2HexStr(encrypt);
  69. Map<String,String> map = new HashMap<String,String>();
  70. String url = HttpParame.BIND_URL;
  71. url = url.replaceAll("APPID", PropertiesUtil.getValue(HttpParame.APPID));
  72. try {
  73. url = url.replaceAll("REDIRECT_URI", URLEncoder.encode(
  74. PropertiesUtil.getValue(HttpParame.BIND_URI)+"?phone="+phone+"&messageCode="+messageCode,"UTF-8"));
  75. } catch (UnsupportedEncodingException e) {
  76. e.printStackTrace();
  77. }
  78. //url = url.replaceAll("SCOPE", "snsapi_login");
  79. url = url.replaceAll("SCOPE", "snsapi_login");
  80. url = url.replace("STATE", parseByte2HexStr); //加密state进行验证 回调地址当天有效 防止恶意攻击
  81. map.put("url", url);
  82. return map;
  83. }
  84. /**
  85. * <p>Title: getAccessToken</p>
  86. * <p>Description: 用户授权后获取用户唯一标识 </p>
  87. * @param code
  88. * @return
  89. */
  90. @Override
  91. public AccessToken getAccessToken(String code) {
  92. String accessTokenUrl = HttpParame.ACCESS_TOKEN_URL;
  93. accessTokenUrl = accessTokenUrl.replaceAll("APPID", PropertiesUtil.getValue(HttpParame.APPID));
  94. accessTokenUrl = accessTokenUrl.replaceAll("SECRET", PropertiesUtil.getValue(HttpParame.SECRET));
  95. accessTokenUrl = accessTokenUrl.replaceAll("CODE", code);
  96. String responseContent = HttpClientUtils.getInstance().sendHttpGet(accessTokenUrl);
  97. if (responseContent == null || responseContent == "") {
  98. return null;
  99. }
  100. JSONObject parseObject = JSONObject.parseObject(responseContent);
  101. AccessToken accessToken = JSONObject.toJavaObject(parseObject, AccessToken.class);
  102. return accessToken;
  103. }
  104. /**
  105. * <p>Title: getAccessToken</p>
  106. * <p>Description: 用户授权后获取用户唯一标识 </p>
  107. * @return
  108. */
  109. @Override
  110. public PhoneAccessToken getPhoneAccessToken() {
  111. String accessTokenUrl = HttpParame.PHONE_TOKEN_URL;
  112. accessTokenUrl = accessTokenUrl.replaceAll("XAPPID", PropertiesUtil.getValue(HttpParame.APPIDX));
  113. accessTokenUrl = accessTokenUrl.replaceAll("XSECRET", PropertiesUtil.getValue(HttpParame.SECRETX));
  114. String responseContent = HttpClientUtils.getInstance().sendHttpGet(accessTokenUrl);
  115. if (responseContent == null || responseContent == "") {
  116. return null;
  117. }
  118. JSONObject parseObject = JSONObject.parseObject(responseContent);
  119. PhoneAccessToken accessToken = JSONObject.toJavaObject(parseObject, PhoneAccessToken.class);
  120. return accessToken;
  121. }
  122. /**
  123. * <p>Title: getUserUnionID</p>
  124. * <p>Description: 获取用户统一标识。针对一个微信开放平台帐号下的应用,
  125. * 同一用户的unionid在多个应用中是唯一的。
  126. * 此方法不牵扯到多个应用时候可以不用。
  127. *
  128. * 此处用到只是为了获取微信扫码用户的省份城市(此信息获取的只是微信用户所填的城市省份,
  129. * 并不是用户的实时位置信息,如果用户未填写是获取不到的。)
  130. * </p>
  131. * @return
  132. */
  133. @Override
  134. public WechatUserUnionID getUserUnionID() {
  135. String unionIDUrl = HttpParame.GET_UNIONID_URL;
  136. unionIDUrl = unionIDUrl.replace("ACCESS_TOKEN", PropertiesUtil.getValue(HttpParame.ACCESS_TOKEN));
  137. unionIDUrl = unionIDUrl.replace("OPENID", PropertiesUtil.getValue(HttpParame.OPENID));
  138. String responseContent = HttpClientUtils.getInstance().sendHttpGet(unionIDUrl);
  139. if (responseContent == null || responseContent == "") {
  140. return null;
  141. }
  142. JSONObject parseObject = JSONObject.parseObject(responseContent);
  143. WechatUserUnionID userUnionID = JSONObject.toJavaObject(parseObject, WechatUserUnionID.class);
  144. return userUnionID;
  145. }
  146. @Override
  147. public SmartUser selectByOpenid(String openid){
  148. QueryWrapper<SmartUser> queryWrapper = new QueryWrapper<>();
  149. queryWrapper.eq( "open_id", openid);
  150. List<SmartUser> users = smartUserMapper.selectList(queryWrapper);
  151. if (users==null || users.size()<=0){
  152. return null;
  153. }
  154. return users.get(0);
  155. }
  156. @Override
  157. public SmartUser selectTeacherByOpenid(String openid){
  158. QueryWrapper<SmartUser> queryWrapper = new QueryWrapper<>();
  159. queryWrapper.eq( "open_id", openid);
  160. queryWrapper.eq( "identity_id", eIdentityStatu.Teacher.getValue());
  161. List<SmartUser> users = smartUserMapper.selectList(queryWrapper);
  162. if (users==null || users.size()<=0){
  163. return null;
  164. }
  165. return users.get(0);
  166. }
  167. @Override
  168. public SmartUser selectByCardNo(String CardNo){
  169. QueryWrapper<SmartUser> queryWrapper = new QueryWrapper<>();
  170. queryWrapper.eq( "card_no", CardNo);
  171. List<SmartUser> users = smartUserMapper.selectList(queryWrapper);
  172. if (users==null || users.size()<=0){
  173. return null;
  174. }
  175. return users.get(0);
  176. }
  177. @Override
  178. public int updateSmartUser(SmartUser sa) {
  179. int result = smartUserMapper.updateById(sa);
  180. return result;
  181. }
  182. // 用户类别统计
  183. @Override
  184. public List<Tj> getUserIdTj(){
  185. return wechatScanLoginMapper.getUserIdTj();
  186. }
  187. // 用户总数
  188. @Override
  189. public All getUserIdTjt(){
  190. return wechatScanLoginMapper.getUserIdTjt();
  191. }
  192. // 水表总计
  193. @Override
  194. public DAll getWaterTj(){
  195. return wechatScanLoginMapper.getWaterTj();
  196. }
  197. // 电表总计
  198. @Override
  199. public DAll getElcTj(){
  200. return wechatScanLoginMapper.getElcTj();
  201. }
  202. @Override
  203. public void insertMonthMeter(String month){
  204. List<EnergyTj> waterl = wechatScanLoginMapper.getWaterTjByMonAndBuild(month);
  205. List<EnergyTj> elcl = wechatScanLoginMapper.getElcTjByMonAndBuild(month);
  206. for (int i = 0; i < waterl.size(); i++) {
  207. EnergyTj e = wechatScanLoginMapper.getTjByMon(waterl.get(i).getName(),waterl.get(i).getMeterName(),month,"0");
  208. if (e==null){
  209. waterl.get(i).setType(0);
  210. waterl.get(i).setDate(month);
  211. wechatScanLoginMapper.insertMonthMeter(waterl.get(i));
  212. } else {
  213. waterl.get(i).setId(e.getId());
  214. wechatScanLoginMapper.updateMonthMeter(waterl.get(i));
  215. }
  216. }
  217. for (int j = 0; j < elcl.size(); j++) {
  218. EnergyTj w = wechatScanLoginMapper.getTjByMon(elcl.get(j).getName(),elcl.get(j).getMeterName(),month,"1");
  219. if (w==null){
  220. elcl.get(j).setType(1);
  221. elcl.get(j).setDate(month);
  222. wechatScanLoginMapper.insertMonthMeter(elcl.get(j));
  223. } else {
  224. elcl.get(j).setId(w.getId());
  225. wechatScanLoginMapper.updateMonthMeter(elcl.get(j));
  226. }
  227. }
  228. }
  229. @Override
  230. public void insertDayMeter(String day){
  231. List<EnergyTj> waterl = wechatScanLoginMapper.getWaterTjByDayAndBuild(day);
  232. List<EnergyTj> elcl = wechatScanLoginMapper.getElcTjByDayAndBuild(day);
  233. for (int i = 0; i < waterl.size(); i++) {
  234. EnergyTj w = wechatScanLoginMapper.getTjByDay(waterl.get(i).getName(),waterl.get(i).getMeterName(),day,"0");
  235. if (w==null){
  236. waterl.get(i).setType(0);
  237. waterl.get(i).setDate(day);
  238. wechatScanLoginMapper.insertDayMeter(waterl.get(i));
  239. } else {
  240. waterl.get(i).setId(w.getId());
  241. wechatScanLoginMapper.updateDayMeter(waterl.get(i));
  242. }
  243. }
  244. for (int j = 0; j < elcl.size(); j++) {
  245. EnergyTj e = wechatScanLoginMapper.getTjByDay(elcl.get(j).getName(),elcl.get(j).getMeterName(),day,"1");
  246. if (e==null){
  247. elcl.get(j).setType(1);
  248. elcl.get(j).setDate(day);
  249. wechatScanLoginMapper.insertDayMeter(elcl.get(j));
  250. } else {
  251. elcl.get(j).setId(e.getId());
  252. wechatScanLoginMapper.updateDayMeter(elcl.get(j));
  253. }
  254. }
  255. }
  256. // 每个月各水表数据
  257. @Override
  258. public List<MonthMeterDetail> getMonWater() throws ParseException {
  259. List<String> dates = TimeExchange2.getLastSevenMonth();
  260. List<MonthMeterDetail> lm = new ArrayList<>();
  261. for (int i = 0; i < dates.size(); i++) {
  262. MonthMeterDetail mm = new MonthMeterDetail();
  263. List<Tj> list = wechatScanLoginMapper.getMonWater(dates.get(i));
  264. mm.setDate(TimeExchange2.ToSimpleMonth(TimeExchange2.StringToDate(dates.get(i),"yyyy-MM"))+"月");
  265. mm.setLt(list);
  266. lm.add(mm);
  267. }
  268. return lm;
  269. }
  270. // 每个月各电表数据
  271. @Override
  272. public List<MonthMeterDetail> getMonElc() throws ParseException {
  273. List<String> dates = TimeExchange2.getLastSevenMonth();
  274. List<MonthMeterDetail> lm = new ArrayList<>();
  275. for (int i = 0; i < dates.size(); i++) {
  276. MonthMeterDetail mm = new MonthMeterDetail();
  277. List<Tj> list = wechatScanLoginMapper.getMonElc(dates.get(i));
  278. mm.setDate(TimeExchange2.ToSimpleMonth(TimeExchange2.StringToDate(dates.get(i),"yyyy-MM"))+"月");
  279. mm.setLt(list);
  280. lm.add(mm);
  281. }
  282. return lm;
  283. }
  284. // 区域能耗统计
  285. @Override
  286. public PageInfo<MeterMonthData> getMeterMonthPage(@Param("meterMonthData")MeterMonthData meterMonthData){
  287. List<MeterMonthData> list = wechatScanLoginMapper.getMeterMonthPage(meterMonthData);
  288. PageInfo<MeterMonthData> meterPageInfo = new PageInfo<>(list);
  289. return meterPageInfo;
  290. }
  291. // 实时抄表
  292. @Override
  293. public PageInfo<MeterMonthDataVo> getMeterDayPage(@Param("meterMonthData")MeterMonthData meterMonthData){
  294. List<MeterMonthDataVo> list = wechatScanLoginMapper.getMeterDayPage(meterMonthData);
  295. PageInfo<MeterMonthDataVo> meterPageInfo = new PageInfo<>(list);
  296. return meterPageInfo;
  297. }
  298. }