From 9a46c0fad3aa5c7c21dc182b954a64e3acb17a70 Mon Sep 17 00:00:00 2001 From: xhxu Date: Fri, 9 Apr 2021 18:32:20 +0800 Subject: [PATCH] GOOAGOO --- .../controller/rent/WxGooagooController.java | 41 +++++++++ ...02104090001__for_wx_third_party_config.sql | 16 ++++ .../java/com/iformall/common/ErrorCode.java | 6 ++ .../domain/po/WxThirdPartyConfig.java | 47 ++++++++++ .../enums/EnumThirdPartyConfigType.java | 36 ++++++++ .../mapper/WxThirdPartyConfigMapper.java | 12 +++ .../iformall/service/WxGooagooService.java | 12 +++ .../service/impl/WxGooagooServiceImpl.java | 92 +++++++++++++++++++ .../com/iformall/utils/gooagoo/SignUtils.java | 78 ++++++++++++++++ .../mapper/WxThirdPartyConfigMapper.xml | 71 ++++++++++++++ 10 files changed, 411 insertions(+) create mode 100644 mallinkAdmin/src/main/java/com/iformall/controller/rent/WxGooagooController.java create mode 100644 mallinkAdmin/src/main/resources/db/migration/V202104090001__for_wx_third_party_config.sql create mode 100644 mallinkService/src/main/java/com/iformall/domain/po/WxThirdPartyConfig.java create mode 100644 mallinkService/src/main/java/com/iformall/enums/EnumThirdPartyConfigType.java create mode 100644 mallinkService/src/main/java/com/iformall/mapper/WxThirdPartyConfigMapper.java create mode 100644 mallinkService/src/main/java/com/iformall/service/WxGooagooService.java create mode 100644 mallinkService/src/main/java/com/iformall/service/impl/WxGooagooServiceImpl.java create mode 100644 mallinkService/src/main/java/com/iformall/utils/gooagoo/SignUtils.java create mode 100644 mallinkService/src/main/resources/mapper/WxThirdPartyConfigMapper.xml diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/rent/WxGooagooController.java b/mallinkAdmin/src/main/java/com/iformall/controller/rent/WxGooagooController.java new file mode 100644 index 000000000..1a23a74d2 --- /dev/null +++ b/mallinkAdmin/src/main/java/com/iformall/controller/rent/WxGooagooController.java @@ -0,0 +1,41 @@ +package com.iformall.controller.rent; + +import com.iformall.annotation.SystemControllerLog; +import com.iformall.common.ErrorCode; +import com.iformall.common.ResultData; +import com.iformall.controller.base.BaseController; +import com.iformall.service.WxGooagooService; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** + * + */ +@RestController +@RequestMapping("gooagoo") +public class WxGooagooController extends BaseController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + WxGooagooService wxGooagooService; + + @ApiOperation("调取接口数据") + @PostMapping("/queryData") + @SystemControllerLog(description = "数据塔台-查询客流") + public ResultData queryData(@RequestBody Map params) { + logger.debug("[" + getIpAddr() + "] WxGooagooController::queryData"); + Object lowerMethod = params.get("lowerMethod"); + if(lowerMethod == null){ + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL,"lowerMethod不能为空"); + } + String requrl = lowerMethod.toString(); + params.remove("lowerMethod"); + return wxGooagooService.queryDataUrl(getTenantInfo(),requrl,params); + } + +} diff --git a/mallinkAdmin/src/main/resources/db/migration/V202104090001__for_wx_third_party_config.sql b/mallinkAdmin/src/main/resources/db/migration/V202104090001__for_wx_third_party_config.sql new file mode 100644 index 000000000..30f01e706 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V202104090001__for_wx_third_party_config.sql @@ -0,0 +1,16 @@ +CREATE TABLE `wx_third_party_config` ( + `id` bigint(20) NOT NULL COMMENT '主键ID', + `tenant_id` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户ID', + `parent_tenant_id` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '父租户ID', + `type` tinyint(6) NOT NULL COMMENT '第三方类型,', + `app_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `app_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `sign_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '加密key,', + `api_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `token` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `token_expired_time` datetime(0) DEFAULT NULL COMMENT 'token过期时间', + `user_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '登陆账号', + `password` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '登陆密码', + `version` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '接口版本', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java index a6c4d35a5..120b325a1 100644 --- a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java +++ b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java @@ -598,6 +598,12 @@ public enum ErrorCode{ QUESTION_USER_NOT(61006, "答题参数错误!"), QUESTION_USER_LINE(61007, "已经参与!"), + /** + * 数衍信息 + */ + GOOAGOO_INFO_NOT_FOUND(62001,"数衍信息未找到"), + GOOAGOO_OPEN_FAIL(62002,"数衍信息请求失败"), + ; diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxThirdPartyConfig.java b/mallinkService/src/main/java/com/iformall/domain/po/WxThirdPartyConfig.java new file mode 100644 index 000000000..c5e6a1c45 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxThirdPartyConfig.java @@ -0,0 +1,47 @@ +package com.iformall.domain.po; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.iformall.domain.po.base.TenantEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +@TableName(value = "wx_third_party_config") +@Data +@EqualsAndHashCode(callSuper = true) +public class WxThirdPartyConfig extends TenantEntity { + + protected Long id; + + @io.swagger.annotations.ApiModelProperty(value="",name="type") + private Integer type; + + @io.swagger.annotations.ApiModelProperty(value="",name="appId") + private String appId; + + @io.swagger.annotations.ApiModelProperty(value="",name="appKey") + private String appKey; + + @io.swagger.annotations.ApiModelProperty(value="加密key",name="signKey") + private String signKey; + + @io.swagger.annotations.ApiModelProperty(value="",name="apiUrl") + private String apiUrl; + + @io.swagger.annotations.ApiModelProperty(value="token",name="token") + private String token; + + @io.swagger.annotations.ApiModelProperty(value="",name="tokenExpiredTime") + private Date tokenExpiredTime; + + @io.swagger.annotations.ApiModelProperty(value="登陆username",name="userName") + private String userName; + + @io.swagger.annotations.ApiModelProperty(value="登陆password",name="password") + private String password; + + @io.swagger.annotations.ApiModelProperty(value="",name="version") + private String version; + +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumThirdPartyConfigType.java b/mallinkService/src/main/java/com/iformall/enums/EnumThirdPartyConfigType.java new file mode 100644 index 000000000..79053bd22 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumThirdPartyConfigType.java @@ -0,0 +1,36 @@ +package com.iformall.enums; + + +/** + * @author gongbiao + */ +public enum EnumThirdPartyConfigType { + + GOOAGOO(5, "数衍科技"), + ; + + public static EnumThirdPartyConfigType getEnum(Integer code) { + for (EnumThirdPartyConfigType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumThirdPartyConfigType(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxThirdPartyConfigMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxThirdPartyConfigMapper.java new file mode 100644 index 000000000..4213ee841 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxThirdPartyConfigMapper.java @@ -0,0 +1,12 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxThirdPartyConfig; + +import java.util.List; + +public interface WxThirdPartyConfigMapper extends CommonMapper { + + List findList(WxThirdPartyConfig config); + +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxGooagooService.java b/mallinkService/src/main/java/com/iformall/service/WxGooagooService.java new file mode 100644 index 000000000..b954db8ed --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxGooagooService.java @@ -0,0 +1,12 @@ +package com.iformall.service; + +import com.iformall.common.ResultData; +import com.iformall.domain.po.base.TenantEntity; + +import java.util.Map; + +public interface WxGooagooService { + + ResultData queryDataUrl(TenantEntity tenantInfo, String url, Map params); + +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxGooagooServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxGooagooServiceImpl.java new file mode 100644 index 000000000..5b65851c9 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxGooagooServiceImpl.java @@ -0,0 +1,92 @@ +package com.iformall.service.impl; + +import com.alibaba.druid.support.json.JSONUtils; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.iformall.common.ErrorCode; +import com.iformall.common.Result; +import com.iformall.common.ResultData; +import com.iformall.domain.po.WxThirdPartyConfig; +import com.iformall.domain.po.base.TenantEntity; +import com.iformall.enums.EnumThirdPartyConfigType; +import com.iformall.mapper.WxThirdPartyConfigMapper; +import com.iformall.service.*; +import com.iformall.utils.DateUtils; +import com.iformall.utils.HttpUtil; +import com.iformall.utils.gooagoo.SignUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; + + +/** + */ +@Service +public class WxGooagooServiceImpl implements WxGooagooService { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + private final String method = "gogo.open.auto.routing"; + private final String v = "1.0"; + + @Autowired + WxThirdPartyConfigMapper wxThirdPartyConfigMapper; + + /** + * @param tenantEntity + * @param url + * @param params + * @return + */ + @Override + public ResultData queryDataUrl(TenantEntity tenantEntity, String url, Map params) { + WxThirdPartyConfig configQ = new WxThirdPartyConfig(); + configQ.updateTenantInfo(tenantEntity); + configQ.setType(EnumThirdPartyConfigType.GOOAGOO.getCode()); + configQ.setVersion(v); + WxThirdPartyConfig config = wxThirdPartyConfigMapper.selectOne(new QueryWrapper<>(configQ)); + if(config == null){ + return new ResultData(ErrorCode.GOOAGOO_INFO_NOT_FOUND); + } + Map paramMap = this.getParamMap(config); + paramMap.put("lowerMethod",url); + paramMap.put("data", JSONUtils.toJSONString(params)); + + String sign= SignUtils.sign(config.getSignKey(),paramMap); + + paramMap.put("sign",sign); + + String res = HttpUtil.doPost(config.getApiUrl(), paramMap); + + JSONObject result = JSONObject.parseObject(res); + if (result == null) + return new ResultData(ErrorCode.GOOAGOO_INFO_NOT_FOUND); + if ("OPEN_SUCCESS".equals(result.getString("rescode"))){ + return new ResultData(Result.SUCCESS,result.getString("resmsg"), + result.getJSONObject("data")); + } else{ + return new ResultData(ErrorCode.GOOAGOO_OPEN_FAIL,result.getString("resmsg")); + } + } + + private Map getParamMap(WxThirdPartyConfig config){ + + Map map = new HashMap<>(); + map.put("appId",config.getAppId()); + map.put("appKey",config.getAppKey()); + map.put("method",method); + map.put("timestamp", DateUtils.getSystemTime("yyyyMMDDHHmmss")); + map.put("messageFormat","json"); + map.put("v",v); + map.put("sign",config.getSignKey()); + map.put("signMethod","MD5"); + + return map; + } + + + +} diff --git a/mallinkService/src/main/java/com/iformall/utils/gooagoo/SignUtils.java b/mallinkService/src/main/java/com/iformall/utils/gooagoo/SignUtils.java new file mode 100644 index 000000000..dbcf11485 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/utils/gooagoo/SignUtils.java @@ -0,0 +1,78 @@ +package com.iformall.utils.gooagoo; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.security.MessageDigest; +import java.util.Arrays; +import java.util.Map; + +public class SignUtils { + + private final static Logger logger = LoggerFactory.getLogger(SignUtils.class); + + public SignUtils() { + } + + public static String sign(String appSecret, Map form) { + return getSign(appSecret, form, (String)form.get("signMethod")); + } + + public static String getSign(String appSecret, Map params, String signMethod) { + String[] keys = (String[])params.keySet().toArray(new String[0]); + Arrays.sort(keys); + StringBuilder signStr = new StringBuilder(); + String[] var5 = keys; + int var6 = keys.length; + + for(int var7 = 0; var7 < var6; ++var7) { + String key = var5[var7]; + String value = (String)params.get(key); + if (value != null && !"".equals(value)) { + signStr.append(key).append("=").append(value).append("&"); + } + } + + signStr.append("key=").append(appSecret); + logger.info("服务端的签名之前的字符串:" + signStr.toString()); + if ("MD5".equals(signMethod)) { + return getMD5(signStr.toString()); + } else { + return getSHA(signStr.toString()); + } + } + + public static String getSHA(String str) { + return encrypt(str, "SHA"); + } + + public static String getMD5(String str) { + return encrypt(str, "MD5"); + } + + private static String encrypt(String str, String algorithm) { + try { + MessageDigest md = MessageDigest.getInstance(algorithm); + md.update(str.getBytes("UTF-8")); + byte[] digest = md.digest(); + StringBuffer hexstr = new StringBuffer(); + String shaHex = ""; + + for(int i = 0; i < digest.length; ++i) { + shaHex = Integer.toHexString(digest[i] & 255); + if (shaHex.length() < 2) { + hexstr.append(0); + } + + hexstr.append(shaHex); + } + + return hexstr.toString().toUpperCase(); + } catch (Exception var7) { + var7.printStackTrace(); +// throw new Exception(var7); + } + return null; + } + +} diff --git a/mallinkService/src/main/resources/mapper/WxThirdPartyConfigMapper.xml b/mallinkService/src/main/resources/mapper/WxThirdPartyConfigMapper.xml new file mode 100644 index 000000000..67bd84533 --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxThirdPartyConfigMapper.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + `id`,`tenant_id`,`parent_tenant_id`,`type`,`app_id`,`app_key`,`sign_key`,`api_url`, `token`,`token_expired_time`,`user_name`,`password`,`version` + + + + where 1 = 1 + + + and `id` = #{id} + + + + and `tenant_id` = #{tenantId} + + + and `parent_tenant_id` = #{parentTenantId} + + + + and `type` = #{type} + + + + and `version` = #{version} + + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + update wx_third_party_config set token=#{token},token_expired_time=#{tokenExpiredTime} where id=#{id} + + + + update wx_third_party_config set app_id=#{appId},app_key=#{appKey} where id=#{id} + + + +