package com.template.services.impl; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.pagehelper.PageInfo; import com.template.common.constanst.Constanst; import com.template.common.utils.*; import com.template.mapper.SmartUserMapper; import com.template.mapper.WechatScanLoginMapper; import com.template.model.pojo.SmartUser; import com.template.model.tongji.*; import com.template.model.weixin.AccessToken; import com.template.model.weixin.HttpParame; import com.template.model.weixin.PhoneAccessToken; import com.template.model.weixin.WechatUserUnionID; import com.template.services.WechatScanLoginService; import org.apache.ibatis.annotations.Param; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.text.ParseException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** *

Title: WechatScanLoginServiceImpl

*

Description: 业务接口实现

* @author fengyong * @date 2018年9月7日 */ @Service public class WechatScanLoginServiceImpl implements WechatScanLoginService { @Autowired public SmartUserMapper smartUserMapper; @Autowired public WechatScanLoginMapper wechatScanLoginMapper; /** *

Title: wechatLoginUrl

*

Description: 网页授权回调地址处理

* @return * @throws UnsupportedEncodingException */ @Override public Map wechatLoginUrl() { String content = Constanst.PWD_MD5+DateUtils.getYYYYMMdd(); byte[] encrypt = AesUtil.encrypt(content, AesUtil.PASSWORD_SECRET_KEY, 16); String parseByte2HexStr = AesUtil.parseByte2HexStr(encrypt); Map map = new HashMap(); String url = HttpParame.AUTHORIZATION_URL; url = url.replaceAll("APPID", PropertiesUtil.getValue(HttpParame.APPID)); try { url = url.replaceAll("REDIRECT_URI", URLEncoder.encode( PropertiesUtil.getValue(HttpParame.REDIRECT_URI),"UTF-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } url = url.replaceAll("SCOPE", "snsapi_login"); url = url.replace("STATE", parseByte2HexStr); //加密state进行验证 回调地址当天有效 防止恶意攻击 map.put("url", url); return map; } @Override public Map wechatBindUrl(String phone,String messageCode) { String content = Constanst.PWD_MD5+ DateUtils.getYYYYMMdd(); byte[] encrypt = AesUtil.encrypt(content, AesUtil.PASSWORD_SECRET_KEY, 16); String parseByte2HexStr = AesUtil.parseByte2HexStr(encrypt); Map map = new HashMap(); String url = HttpParame.BIND_URL; url = url.replaceAll("APPID", PropertiesUtil.getValue(HttpParame.APPID)); try { url = url.replaceAll("REDIRECT_URI", URLEncoder.encode( PropertiesUtil.getValue(HttpParame.BIND_URI)+"?phone="+phone+"&messageCode="+messageCode,"UTF-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } //url = url.replaceAll("SCOPE", "snsapi_login"); url = url.replaceAll("SCOPE", "snsapi_login"); url = url.replace("STATE", parseByte2HexStr); //加密state进行验证 回调地址当天有效 防止恶意攻击 map.put("url", url); return map; } /** *

Title: getAccessToken

*

Description: 用户授权后获取用户唯一标识

* @param code * @return */ @Override public AccessToken getAccessToken(String code) { String accessTokenUrl = HttpParame.ACCESS_TOKEN_URL; accessTokenUrl = accessTokenUrl.replaceAll("APPID", PropertiesUtil.getValue(HttpParame.APPID)); accessTokenUrl = accessTokenUrl.replaceAll("SECRET", PropertiesUtil.getValue(HttpParame.SECRET)); accessTokenUrl = accessTokenUrl.replaceAll("CODE", code); String responseContent = HttpClientUtils.getInstance().sendHttpGet(accessTokenUrl); if (responseContent == null || responseContent == "") { return null; } JSONObject parseObject = JSONObject.parseObject(responseContent); AccessToken accessToken = JSONObject.toJavaObject(parseObject, AccessToken.class); return accessToken; } /** *

Title: getAccessToken

*

Description: 用户授权后获取用户唯一标识

* @return */ @Override public PhoneAccessToken getPhoneAccessToken() { String accessTokenUrl = HttpParame.PHONE_TOKEN_URL; accessTokenUrl = accessTokenUrl.replaceAll("XAPPID", PropertiesUtil.getValue(HttpParame.APPIDX)); accessTokenUrl = accessTokenUrl.replaceAll("XSECRET", PropertiesUtil.getValue(HttpParame.SECRETX)); String responseContent = HttpClientUtils.getInstance().sendHttpGet(accessTokenUrl); if (responseContent == null || responseContent == "") { return null; } JSONObject parseObject = JSONObject.parseObject(responseContent); PhoneAccessToken accessToken = JSONObject.toJavaObject(parseObject, PhoneAccessToken.class); return accessToken; } /** *

Title: getUserUnionID

*

Description: 获取用户统一标识。针对一个微信开放平台帐号下的应用, * 同一用户的unionid在多个应用中是唯一的。 * 此方法不牵扯到多个应用时候可以不用。 * * 此处用到只是为了获取微信扫码用户的省份城市(此信息获取的只是微信用户所填的城市省份, * 并不是用户的实时位置信息,如果用户未填写是获取不到的。) *

* @return */ @Override public WechatUserUnionID getUserUnionID() { String unionIDUrl = HttpParame.GET_UNIONID_URL; unionIDUrl = unionIDUrl.replace("ACCESS_TOKEN", PropertiesUtil.getValue(HttpParame.ACCESS_TOKEN)); unionIDUrl = unionIDUrl.replace("OPENID", PropertiesUtil.getValue(HttpParame.OPENID)); String responseContent = HttpClientUtils.getInstance().sendHttpGet(unionIDUrl); if (responseContent == null || responseContent == "") { return null; } JSONObject parseObject = JSONObject.parseObject(responseContent); WechatUserUnionID userUnionID = JSONObject.toJavaObject(parseObject, WechatUserUnionID.class); return userUnionID; } @Override public SmartUser selectByOpenid(String openid){ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq( "open_id", openid); List users = smartUserMapper.selectList(queryWrapper); if (users==null || users.size()<=0){ return null; } return users.get(0); } @Override public SmartUser selectByCardNo(String CardNo){ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq( "card_no", CardNo); List users = smartUserMapper.selectList(queryWrapper); if (users==null || users.size()<=0){ return null; } return users.get(0); } @Override public int updateSmartUser(SmartUser sa) { int result = smartUserMapper.updateById(sa); return result; } // 用户类别统计 @Override public List getUserIdTj(){ return wechatScanLoginMapper.getUserIdTj(); } // 用户总数 @Override public All getUserIdTjt(){ return wechatScanLoginMapper.getUserIdTjt(); } // 水表总计 @Override public DAll getWaterTj(){ return wechatScanLoginMapper.getWaterTj(); } // 电表总计 @Override public DAll getElcTj(){ return wechatScanLoginMapper.getElcTj(); } @Override public void insertMonthMeter(String month){ List waterl = wechatScanLoginMapper.getWaterTjByMonAndBuild(month); List elcl = wechatScanLoginMapper.getElcTjByMonAndBuild(month); for (int i = 0; i < waterl.size(); i++) { EnergyTj e = wechatScanLoginMapper.getTjByMon(waterl.get(i).getName(),waterl.get(i).getMeterName(),month,"0"); if (e==null){ waterl.get(i).setType(0); waterl.get(i).setDate(month); wechatScanLoginMapper.insertMonthMeter(waterl.get(i)); } else { waterl.get(i).setId(e.getId()); wechatScanLoginMapper.updateMonthMeter(waterl.get(i)); } } for (int j = 0; j < elcl.size(); j++) { EnergyTj w = wechatScanLoginMapper.getTjByMon(elcl.get(j).getName(),elcl.get(j).getMeterName(),month,"1"); if (w==null){ elcl.get(j).setType(1); elcl.get(j).setDate(month); wechatScanLoginMapper.insertMonthMeter(elcl.get(j)); } else { elcl.get(j).setId(w.getId()); wechatScanLoginMapper.updateMonthMeter(elcl.get(j)); } } } @Override public void insertDayMeter(String day){ List waterl = wechatScanLoginMapper.getWaterTjByDayAndBuild(day); List elcl = wechatScanLoginMapper.getElcTjByDayAndBuild(day); for (int i = 0; i < waterl.size(); i++) { EnergyTj w = wechatScanLoginMapper.getTjByDay(waterl.get(i).getName(),waterl.get(i).getMeterName(),day,"0"); if (w==null){ waterl.get(i).setType(0); waterl.get(i).setDate(day); wechatScanLoginMapper.insertDayMeter(waterl.get(i)); } else { waterl.get(i).setId(w.getId()); wechatScanLoginMapper.updateDayMeter(waterl.get(i)); } } for (int j = 0; j < elcl.size(); j++) { EnergyTj e = wechatScanLoginMapper.getTjByDay(elcl.get(j).getName(),elcl.get(j).getMeterName(),day,"1"); if (e==null){ elcl.get(j).setType(1); elcl.get(j).setDate(day); wechatScanLoginMapper.insertDayMeter(elcl.get(j)); } else { elcl.get(j).setId(e.getId()); wechatScanLoginMapper.updateDayMeter(elcl.get(j)); } } } // 每个月各水表数据 @Override public List getMonWater() throws ParseException { List dates = TimeExchange2.getLastSevenMonth(); List lm = new ArrayList<>(); for (int i = 0; i < dates.size(); i++) { MonthMeterDetail mm = new MonthMeterDetail(); List list = wechatScanLoginMapper.getMonWater(dates.get(i)); mm.setDate(TimeExchange2.ToSimpleMonth(TimeExchange2.StringToDate(dates.get(i),"yyyy-MM"))+"月"); mm.setLt(list); lm.add(mm); } return lm; } // 每个月各电表数据 @Override public List getMonElc() throws ParseException { List dates = TimeExchange2.getLastSevenMonth(); List lm = new ArrayList<>(); for (int i = 0; i < dates.size(); i++) { MonthMeterDetail mm = new MonthMeterDetail(); List list = wechatScanLoginMapper.getMonElc(dates.get(i)); mm.setDate(TimeExchange2.ToSimpleMonth(TimeExchange2.StringToDate(dates.get(i),"yyyy-MM"))+"月"); mm.setLt(list); lm.add(mm); } return lm; } // 区域能耗统计 @Override public PageInfo getMeterMonthPage(@Param("meterMonthData")MeterMonthData meterMonthData){ List list = wechatScanLoginMapper.getMeterMonthPage(meterMonthData); PageInfo meterPageInfo = new PageInfo<>(list); return meterPageInfo; } // 实时抄表 @Override public PageInfo getMeterDayPage(@Param("meterMonthData")MeterMonthData meterMonthData){ List list = wechatScanLoginMapper.getMeterDayPage(meterMonthData); PageInfo meterPageInfo = new PageInfo<>(list); return meterPageInfo; } }