WechatScanLoginServiceImpl.java 10 KB

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