xhxu 5 лет назад
Родитель
Сommit
9a46c0fad3
10 измененных файлов: 411 добавлений и 0 удалений
  1. +41
    -0
      mallinkAdmin/src/main/java/com/iformall/controller/rent/WxGooagooController.java
  2. +16
    -0
      mallinkAdmin/src/main/resources/db/migration/V202104090001__for_wx_third_party_config.sql
  3. +6
    -0
      mallinkService/src/main/java/com/iformall/common/ErrorCode.java
  4. +47
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxThirdPartyConfig.java
  5. +36
    -0
      mallinkService/src/main/java/com/iformall/enums/EnumThirdPartyConfigType.java
  6. +12
    -0
      mallinkService/src/main/java/com/iformall/mapper/WxThirdPartyConfigMapper.java
  7. +12
    -0
      mallinkService/src/main/java/com/iformall/service/WxGooagooService.java
  8. +92
    -0
      mallinkService/src/main/java/com/iformall/service/impl/WxGooagooServiceImpl.java
  9. +78
    -0
      mallinkService/src/main/java/com/iformall/utils/gooagoo/SignUtils.java
  10. +71
    -0
      mallinkService/src/main/resources/mapper/WxThirdPartyConfigMapper.xml

+ 41
- 0
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<String,Object> 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);
}

}

+ 16
- 0
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;

+ 6
- 0
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,"数衍信息请求失败"),


;



+ 47
- 0
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;
}

+ 36
- 0
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;
}
}

+ 12
- 0
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<WxThirdPartyConfig, Long> {

List<WxThirdPartyConfig> findList(WxThirdPartyConfig config);

}

+ 12
- 0
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<String, Object> params);

}

+ 92
- 0
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<String, Object> 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<String,String> 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<String,String> getParamMap(WxThirdPartyConfig config){

Map<String,String> 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;
}



}

+ 78
- 0
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<String, String> form) {
return getSign(appSecret, form, (String)form.get("signMethod"));
}

public static String getSign(String appSecret, Map<String, String> 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;
}

}

+ 71
- 0
mallinkService/src/main/resources/mapper/WxThirdPartyConfigMapper.xml Просмотреть файл

@@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.iformall.mapper.WxThirdPartyConfigMapper">
<resultMap id="BaseResultMap" type="com.iformall.domain.po.WxThirdPartyConfig">
<id column="id" jdbcType="BIGINT" property="id"/>
<result column="tenant_id" jdbcType="VARCHAR" property="tenantId"/>
<result column="parent_tenant_id" jdbcType="VARCHAR" property="parentTenantId" />
<result column="type" jdbcType="INTEGER" property="type"/>
<result column="app_id" jdbcType="VARCHAR" property="appId"/>
<result column="app_key" jdbcType="VARCHAR" property="appKey"/>
<result column="sign_key" jdbcType="VARCHAR" property="signKey"/>
<result column="api_url" jdbcType="VARCHAR" property="apiUrl"/>
<result column="token" jdbcType="VARCHAR" property="token"/>
<result column="token_expired_time" jdbcType="TIMESTAMP" property="tokenExpiredTime"/>
<result column="user_name" jdbcType="VARCHAR" property="userName"/>
<result column="password" jdbcType="VARCHAR" property="password"/>
<result column="version" jdbcType="VARCHAR" property="version"/>
</resultMap>

<sql id="allColumns">
`id`,`tenant_id`,`parent_tenant_id`,`type`,`app_id`,`app_key`,`sign_key`,`api_url`, `token`,`token_expired_time`,`user_name`,`password`,`version`
</sql>

<sql id="dynamicWhereConditions">
where 1 = 1

<if test=" null != id ">
and `id` = #{id}
</if>

<if test=" null != tenantId and '' != tenantId">
and `tenant_id` = #{tenantId}
</if>
<if test=" null != parentTenantId and '' != parentTenantId">
and `parent_tenant_id` = #{parentTenantId}
</if>

<if test=" null != type ">
and `type` = #{type}
</if>
<if test=" null != version and '' != version">
and `version` = #{version}
</if>
<if test=" null != ids ">
and id in
<foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")">
#{idItem}
</foreach>
</if>
<if test=" null != sortColumns">order by ${sortColumns}</if>
</sql>

<select id="findList" parameterType="com.iformall.domain.po.WxThirdPartyConfig" resultMap="BaseResultMap">
select
<include refid="allColumns"/>
from wx_third_party_config
<include refid="dynamicWhereConditions"/>
</select>

<update id="updateToken" parameterType="com.iformall.domain.po.WxThirdPartyConfig">
update wx_third_party_config set token=#{token},token_expired_time=#{tokenExpiredTime} where id=#{id}
</update>
<update id="updateSercret" parameterType="com.iformall.domain.po.WxThirdPartyConfig">
update wx_third_party_config set app_id=#{appId},app_key=#{appKey} where id=#{id}
</update>


</mapper>

Загрузка…
Отмена
Сохранить