From ac1e4b41b3bdf2a4e9aef5f53424b3642ce7ade7 Mon Sep 17 00:00:00 2001 From: gongbiao Date: Thu, 15 Nov 2018 10:21:18 +0800 Subject: [PATCH] =?UTF-8?q?[=E5=AE=A2=E6=B5=81=E6=95=B0=E6=8D=AE][?= =?UTF-8?q?=E4=BF=AE=E6=94=B9][=E8=8E=B7=E5=8F=96=E8=BF=88=E5=A4=96?= =?UTF-8?q?=E8=BF=AA=E7=9A=84TOKEN]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../schedule/WiwideTokenSchedule.java | 55 ++++++ .../java/com/iformall/domain/po/WxMall.java | 25 ++- .../com/iformall/mapper/WxMallMapper.java | 8 +- .../service/impl/DataTowerServiceImpl.java | 160 ++++++++---------- .../java/com/iformall/utils/WiwideUtil.java | 58 ++++++- .../main/resources/mapper/WxMallMapper.xml | 10 +- 6 files changed, 216 insertions(+), 100 deletions(-) create mode 100644 mallinkSchedule/src/main/java/com/iformall/schedule/WiwideTokenSchedule.java diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/WiwideTokenSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/WiwideTokenSchedule.java new file mode 100644 index 000000000..d23814eb3 --- /dev/null +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/WiwideTokenSchedule.java @@ -0,0 +1,55 @@ +package com.iformall.schedule; + +import com.alibaba.fastjson.JSONObject; +import com.iformall.domain.po.WxMall; +import com.iformall.exception.MallinkException; +import com.iformall.mapper.WxMallMapper; +import com.iformall.utils.WiwideUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.util.Calendar; +import java.util.List; + +/** + * @author gongbiao + */ +@Component +public class WiwideTokenSchedule { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private WxMallMapper wxMallMapper; + + @Scheduled(cron = "0 0/45 * * * ?") + public void requestToken() { + List list = wxMallMapper.findList(null); + for (int i = 0, size = list.size(); i < size; i++) { + WxMall wxMall = list.get(i); + String data = WiwideUtil.queryToken(wxMall); + String token = (String) JSONObject.parseObject(data).get("data"); + updateToken(wxMall, token); + } + + } + + private void updateToken(WxMall wxMall, String token) { + Calendar instance = Calendar.getInstance(); + instance.add(Calendar.MINUTE, 45); + WxMall record = new WxMall(); + record.setId(wxMall.getId()); + record.setToken(token); + record.setExpiredTime(instance.getTime()); + try { + wxMallMapper.updateToken(record); + } catch (MallinkException e) { + logger.info("更新TOKEN失败:商场" + wxMall.getName()); + } + } + + +} \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxMall.java b/mallinkService/src/main/java/com/iformall/domain/po/WxMall.java index 879fdff96..4f3939a78 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxMall.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxMall.java @@ -5,6 +5,7 @@ import javax.persistence.Table; import javax.persistence.Transient; import java.io.Serializable; import java.math.BigDecimal; +import java.util.Date; import java.util.List; @Table(name = "wx_mall") @@ -96,6 +97,12 @@ public class WxMall implements Serializable { @io.swagger.annotations.ApiModelProperty(value="小程序提示",name="weapNote") private String weapNote; + @io.swagger.annotations.ApiModelProperty(value="token",name="token") + private String token; + + @io.swagger.annotations.ApiModelProperty(value="expiredTime",name="expiredTime") + private Date expiredTime; + public String getTenantId() { return tenantId; @@ -224,7 +231,23 @@ public class WxMall implements Serializable { this.weapNote = weapNote; } - public static enum Field + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } + + public Date getExpiredTime() { + return expiredTime; + } + + public void setExpiredTime(Date expiredTime) { + this.expiredTime = expiredTime; + } + + public static enum Field { Id_ASC("`id` ASC"),Id_DESC("`id` DESC") ,TenantId_ASC("`tenant_id` ASC"),TenantId_DESC("`tenant_id` DESC") diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxMallMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxMallMapper.java index 71ad9cff3..4786c8064 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxMallMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxMallMapper.java @@ -1,13 +1,15 @@ package com.iformall.mapper; -import java.util.*; import com.iformall.common.CommonMapper; import com.iformall.domain.po.WxMall; +import java.util.List; + public interface WxMallMapper extends CommonMapper { List findList(WxMall wxMall); - - + + void updateToken(WxMall wxMall); + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/DataTowerServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/DataTowerServiceImpl.java index 795f79d1d..0e3bee548 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/DataTowerServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/DataTowerServiceImpl.java @@ -6,12 +6,15 @@ import com.iformall.common.ResultData; import com.iformall.domain.po.*; import com.iformall.domain.vo.WxBillAll; import com.iformall.enums.*; +import com.iformall.exception.MallinkException; import com.iformall.mapper.*; import com.iformall.service.DataTowerService; import com.iformall.service.WxRentContractService; import com.iformall.utils.DateUtils; import com.iformall.utils.HashUtil; import com.iformall.utils.HttpUtil; +import com.iformall.utils.WiwideUtil; +import org.apache.commons.lang3.StringUtils; import org.apache.shiro.codec.Base64; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -72,7 +75,7 @@ public class DataTowerServiceImpl implements DataTowerService { //出租与未出租*********************************************** - private Map shopRunning(String tenantId){ + private Map shopRunning(String tenantId) { WxShop wxShop = new WxShop(); wxShop.setTenantId(tenantId); @@ -109,15 +112,15 @@ public class DataTowerServiceImpl implements DataTowerService { params.put("tenantId", tenantId); Calendar instance = Calendar.getInstance(); - instance.set(Calendar.DAY_OF_YEAR,1); - instance.set(Calendar.HOUR_OF_DAY,0); - instance.set(Calendar.MINUTE,0); - instance.set(Calendar.SECOND,0); + instance.set(Calendar.DAY_OF_YEAR, 1); + instance.set(Calendar.HOUR_OF_DAY, 0); + instance.set(Calendar.MINUTE, 0); + instance.set(Calendar.SECOND, 0); String startdate = DateUtils.date2String(instance); instance.clear(); String enddate = DateUtils.getSystemTime("yyyy-MM-dd HH:mm:ss"); - params.put("startdate",startdate); - params.put("enddate",enddate); + params.put("startdate", startdate); + params.put("enddate", enddate); Map payinfo = wxBillRentMapper.queryPayInfo(params); if (payinfo != null) { BigDecimal receivableAmount = (BigDecimal) payinfo.get("receivepay"); @@ -246,8 +249,8 @@ public class DataTowerServiceImpl implements DataTowerService { cal.add(Calendar.DAY_OF_YEAR, 1); Date endTime = cal.getTime(); - long verifiedCount = wxCouponOrderMapper.findVerifiedCount(tenantId,startTime,endTime); - long orderedCount = wxCouponOrderMapper.findOrderedCount(tenantId,startTime,endTime); + long verifiedCount = wxCouponOrderMapper.findVerifiedCount(tenantId, startTime, endTime); + long orderedCount = wxCouponOrderMapper.findOrderedCount(tenantId, startTime, endTime); couponMap.put("verifiedCount", verifiedCount); couponMap.put("orderedCount", orderedCount); WxCouponChannel wxCouponChannel = new WxCouponChannel(); @@ -316,9 +319,9 @@ public class DataTowerServiceImpl implements DataTowerService { usedCount = totalCount - remainsCount; } - messageMap.put("usedCount",usedCount); - messageMap.put("totalCount",totalCount); - messageMap.put("remainsCount",remainsCount); + messageMap.put("usedCount", usedCount); + messageMap.put("totalCount", totalCount); + messageMap.put("remainsCount", remainsCount); return messageMap; } @@ -329,10 +332,10 @@ public class DataTowerServiceImpl implements DataTowerService { WxBillAll record = new WxBillAll(); record.setTenantId(tenantId); Calendar instance = Calendar.getInstance(); - instance.set(Calendar.DAY_OF_YEAR,1); - instance.set(Calendar.HOUR_OF_DAY,0); - instance.set(Calendar.MINUTE,0); - instance.set(Calendar.SECOND,0); + instance.set(Calendar.DAY_OF_YEAR, 1); + instance.set(Calendar.HOUR_OF_DAY, 0); + instance.set(Calendar.MINUTE, 0); + instance.set(Calendar.SECOND, 0); String startdate = DateUtils.date2String(instance); instance.clear(); String enddate = DateUtils.getSystemTime("yyyy-MM-dd HH:mm:ss"); @@ -353,12 +356,12 @@ public class DataTowerServiceImpl implements DataTowerService { public Map queryRunningMobile(String tenantId) { HashMap dataMap = new HashMap<>(); - dataMap.put("shop",shopRunning(tenantId)); - dataMap.put("rent",rentRunning(tenantId)); - dataMap.put("report",reportRunning(tenantId)); - dataMap.put("car",carRunning(tenantId)); - dataMap.put("coupon",couponRunning(tenantId)); - dataMap.put("visitor",visitorRunning(tenantId)); + dataMap.put("shop", shopRunning(tenantId)); + dataMap.put("rent", rentRunning(tenantId)); + dataMap.put("report", reportRunning(tenantId)); + dataMap.put("car", carRunning(tenantId)); + dataMap.put("coupon", couponRunning(tenantId)); + dataMap.put("visitor", visitorRunning(tenantId)); return dataMap; } @@ -368,20 +371,20 @@ public class DataTowerServiceImpl implements DataTowerService { public Map queryRunningPotal(String tenantId) { HashMap dataMap = new HashMap<>(); - dataMap.put("shop",shopRunning(tenantId)); - dataMap.put("rent",rentRunning(tenantId)); - dataMap.put("report",reportRunning(tenantId)); - dataMap.put("car",carRunning(tenantId)); - dataMap.put("coupon",couponRunning(tenantId)); - dataMap.put("visitor",visitorRunning(tenantId)); - dataMap.put("contract",contractRunning(tenantId)); - dataMap.put("message",messageRunning(tenantId)); - dataMap.put("bill",billRunning(tenantId)); + dataMap.put("shop", shopRunning(tenantId)); + dataMap.put("rent", rentRunning(tenantId)); + dataMap.put("report", reportRunning(tenantId)); + dataMap.put("car", carRunning(tenantId)); + dataMap.put("coupon", couponRunning(tenantId)); + dataMap.put("visitor", visitorRunning(tenantId)); + dataMap.put("contract", contractRunning(tenantId)); + dataMap.put("message", messageRunning(tenantId)); + dataMap.put("bill", billRunning(tenantId)); return dataMap; } - + @Override public Map queryRunning(String tenantId) { WxShop wxShop = new WxShop(); @@ -416,15 +419,15 @@ public class DataTowerServiceImpl implements DataTowerService { Map params = new HashMap<>(); params.put("tenantId", tenantId); Calendar instance = Calendar.getInstance(); - instance.set(Calendar.DAY_OF_YEAR,1); - instance.set(Calendar.HOUR_OF_DAY,0); - instance.set(Calendar.MINUTE,0); - instance.set(Calendar.SECOND,0); + instance.set(Calendar.DAY_OF_YEAR, 1); + instance.set(Calendar.HOUR_OF_DAY, 0); + instance.set(Calendar.MINUTE, 0); + instance.set(Calendar.SECOND, 0); String startdate = DateUtils.date2String(instance); instance.clear(); String enddate = DateUtils.getSystemTime("yyyy-MM-dd HH:mm:ss"); - params.put("startdate",startdate); - params.put("enddate",enddate); + params.put("startdate", startdate); + params.put("enddate", enddate); Map payinfo = wxBillRentMapper.queryPayInfo(params); if (payinfo != null) { BigDecimal receivepay = (BigDecimal) payinfo.get("receivepay"); @@ -609,18 +612,18 @@ public class DataTowerServiceImpl implements DataTowerService { //绑定车牌 - Map carParams=new HashMap<>(); - carParams.put("tenantId",tenantId); - carParams.put("startdate",DateUtils.getSystemTime("yyyy-MM-dd 00:00:00")); - carParams.put("enddate",DateUtils.getSystemTime("yyyy-MM-dd HH:mm:ss")); + Map carParams = new HashMap<>(); + carParams.put("tenantId", tenantId); + carParams.put("startdate", DateUtils.getSystemTime("yyyy-MM-dd 00:00:00")); + carParams.put("enddate", DateUtils.getSystemTime("yyyy-MM-dd HH:mm:ss")); long todaybindcar = wxCUserCarMapper.queryCarCount(carParams); - carParams.put("startdate",yesterday+" 00:00:00"); - carParams.put("enddate",yesterday+" 23:59:59"); + carParams.put("startdate", yesterday + " 00:00:00"); + carParams.put("enddate", yesterday + " 23:59:59"); long yesterdaybindcar = wxCUserCarMapper.queryCarCount(carParams); - carParams.put("startdate",lastweek+" 00:00:00"); - carParams.put("enddate",lastweek+" 23:59:59"); + carParams.put("startdate", lastweek + " 00:00:00"); + carParams.put("enddate", lastweek + " 23:59:59"); long lastweekbindcar = wxCUserCarMapper.queryCarCount(carParams); - datamap.put("todaybindcar",todaybindcar); + datamap.put("todaybindcar", todaybindcar); //datamap.put("yesterdaybindcar",yesterdaybindcar); //datamap.put("lastweekbindcar",lastweekbindcar); @@ -651,57 +654,36 @@ public class DataTowerServiceImpl implements DataTowerService { wxMall.setTenantId(tenantId); List list = wxMallMapper.findList(wxMall); wxMall = list.get(0); - String username = wxMall.getWiwideId(); - String authVal = encrypt(wxMall.getWiwideKey()); - Map params = new HashMap<>(); - params.put("username", username); - params.put("authVal", authVal); String wiwideUrl = wxMall.getWiwideUrl(); - String token = HttpUtil.doPost(wiwideUrl + "/login/auth", params); - - - Map datamap = new HashMap<>(); - datamap.put("token", JSONObject.parseObject(token).get("data")); + Map datamap = new HashMap<>(2); + Date expiredTime = wxMall.getExpiredTime(); + String token = wxMall.getToken(); + if (token != null && expiredTime != null && expiredTime.after(new Date())) { + datamap.put("token", wxMall.getToken()); + } else { + String data = WiwideUtil.queryToken(wxMall); + token = (String) JSONObject.parseObject(data).get("data"); + datamap.put("token", token); + updateToken(wxMall, token); + } datamap.put("url", wiwideUrl); - return datamap; } - - public String encrypt(String key) { - String data = System.currentTimeMillis() / 1000 + 30 + ""; - String md5 = HashUtil.md5(key); - int x = 0; - int len = data.length(); - int l = md5.length(); - char[] datachar = new char[len]; - for (int i = 0; i < len; i++) { - if (x == l) { - x = 0; - } - datachar[i] = md5.charAt(x); - x++; - } - - StringBuilder chars = new StringBuilder(); - for (int i = 0; i < len; i++) { - int a = data.charAt(i); - int b = (datachar[i] % 256); - char v = (char) (a + b); - chars.append(v); - } - - byte[] bytes = null; + private void updateToken(WxMall wxMall, String token) { + Calendar instance = Calendar.getInstance(); + instance.add(Calendar.MINUTE, 45); + WxMall record = new WxMall(); + record.setId(wxMall.getId()); + record.setToken(token); + record.setExpiredTime(instance.getTime()); try { - bytes = chars.toString().getBytes("ISO-8859-1"); - } catch (Exception e) { - e.printStackTrace(); + wxMallMapper.updateToken(record); + } catch (MallinkException e) { + logger.info("更新TOKEN失败:商场" + wxMall.getName()); } - return Base64.encodeToString(bytes); - } - public TreeMap getTimeTreeMap() { TreeMap timemap = new TreeMap(); timemap.put("06:00", 0); diff --git a/mallinkService/src/main/java/com/iformall/utils/WiwideUtil.java b/mallinkService/src/main/java/com/iformall/utils/WiwideUtil.java index 4b8d4842d..bbb9fb0c5 100644 --- a/mallinkService/src/main/java/com/iformall/utils/WiwideUtil.java +++ b/mallinkService/src/main/java/com/iformall/utils/WiwideUtil.java @@ -2,7 +2,9 @@ package com.iformall.utils; import com.alibaba.fastjson.JSONObject; import com.iformall.common.ErrorCode; +import com.iformall.domain.po.WxMall; import com.iformall.exception.MallinkException; +import org.apache.shiro.codec.Base64; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -17,14 +19,14 @@ public class WiwideUtil { private static final String addTemplateUrl = "https://webapp.wiwide.com/apisms/addtemplate"; private static final String smsSendUrl = "https://webapp.wiwide.com/apisms/send"; - public static String addTemplate(String secret, String bid, String publickey, String signature, String content, String notifyUrl,String verifysms) { + public static String addTemplate(String secret, String bid, String publickey, String signature, String content, String notifyUrl, String verifysms) { //请求api数据排序 TreeMap message = new TreeMap<>(); message.put("bid", bid); message.put("signature", signature); message.put("content", content); - message.put("notify_url",notifyUrl); - message.put("verifysms",verifysms); + message.put("notify_url", notifyUrl); + message.put("verifysms", verifysms); StringBuilder sb = new StringBuilder(); Set> entries = message.entrySet(); @@ -56,14 +58,14 @@ public class WiwideUtil { } public static String sendMsg(String secret, String bid, String publickey, - String phone, String signature, String msg, String notifyUrl,String verifysms) { + String phone, String signature, String msg, String notifyUrl, String verifysms) { TreeMap message = new TreeMap<>(); message.put("bid", bid); message.put("phone", phone); message.put("signature", signature); message.put("msg", msg); message.put("notify_url", notifyUrl); - message.put("verifysms",verifysms); + message.put("verifysms", verifysms); StringBuilder sb = new StringBuilder(); Set> entries = message.entrySet(); @@ -94,4 +96,50 @@ public class WiwideUtil { String requestUrl = smsSendUrl; return HttpUtil.doPost(requestUrl, params); } + + public static String encrypt(String key) { + String data = System.currentTimeMillis() / 1000 + 30 + ""; + String md5 = HashUtil.md5(key); + int x = 0; + int len = data.length(); + int l = md5.length(); + char[] datachar = new char[len]; + for (int i = 0; i < len; i++) { + if (x == l) { + x = 0; + } + datachar[i] = md5.charAt(x); + x++; + } + + StringBuilder chars = new StringBuilder(); + for (int i = 0; i < len; i++) { + int a = data.charAt(i); + int b = (datachar[i] % 256); + char v = (char) (a + b); + chars.append(v); + } + + byte[] bytes = null; + try { + bytes = chars.toString().getBytes("ISO-8859-1"); + } catch (Exception e) { + e.printStackTrace(); + } + return Base64.encodeToString(bytes); + + } + + public static String queryToken(WxMall wxMall) { + logger.info("获取TOKEN"); + String username = wxMall.getWiwideId(); + String authVal = WiwideUtil.encrypt(wxMall.getWiwideKey()); + Map params = new HashMap<>(); + params.put("username", username); + params.put("authVal", authVal); + String wiwideUrl = wxMall.getWiwideUrl(); + String token = HttpUtil.doPost(wiwideUrl + "/login/auth", params); + logger.info("商场:" + wxMall.getName() + ",返回TOKEN" + token); + return token; + } } diff --git a/mallinkService/src/main/resources/mapper/WxMallMapper.xml b/mallinkService/src/main/resources/mapper/WxMallMapper.xml index cb0f40c89..7b0cedd82 100644 --- a/mallinkService/src/main/resources/mapper/WxMallMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxMallMapper.xml @@ -22,11 +22,15 @@ + + - `id`,`tenant_id`,`name`,`group`,`country`,`province`,`city`,`addr`,`wiwide_id`,`total_area`,`operating_area`,`park_area`,`park_place_number`,`pay_id`,`service_phone`,`img_url`,`img_url_h`,`wiwide_key`,`wiwide_url`, `weap_note` + `id`,`tenant_id`,`name`,`group`,`country`,`province`,`city`,`addr`,`wiwide_id`, + `total_area`,`operating_area`,`park_area`,`park_place_number`,`pay_id`,`service_phone`, + `img_url`,`img_url_h`,`wiwide_key`,`wiwide_url`, `weap_note`,`token`,`expired_time` @@ -125,7 +129,9 @@ - + + update wx_mall set token=#{token},expired_time=#{expiredTime} where id=#{id} +