Commit de3de82d authored by dingzhiwei's avatar dingzhiwei
Browse files

初始化Jeepay项目

parent 40dcaf4a
<?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.jeequan.jeepay.service.mapper.SysUserRoleRelaMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.jeequan.jeepay.core.entity.SysUserRoleRela">
<id column="user_id" property="userId" />
<result column="role_id" property="roleId" />
</resultMap>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <!-- POM模型版本 -->
<groupId>com.jeequan</groupId> <!-- 组织名, 类似于包名 -->
<artifactId>jeepay-z-codegen</artifactId> <!-- 项目名称 -->
<packaging>jar</packaging> <!-- 项目的最终打包类型/发布形式, 可选[jar, war, pom, maven-plugin]等 -->
<version>1.0-SNAPSHOT</version> <!-- 项目当前版本号 -->
<description>Jeepay计全支付系统 [代码生成工具]</description> <!-- 项目描述 -->
<url>https://www.jeequan.com</url>
<!-- 配置属性声明, 支持自定义参数 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- 项目构建输出编码 -->
<java.version>1.8</java.version> <!-- 指定java版本号 -->
<!-- 自定义属性 -->
<junit.version>4.12</junit.version> <!-- junit版本号 -->
</properties>
<!-- 项目依赖声明 -->
<dependencies>
<!-- jUnit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
package com.gen;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import java.io.File;
/*
* 代码生成器
*
* @author terrfly
* @site https://www.jeepay.vip
* @date 2021/6/8 17:47
*/
public class MainGen {
public static final String THIS_MODULE_NAME = "jeepay-z-codegen"; //当前项目名称
public static final String DB_URL = "jdbc:mysql://127.0.0.1:3306/jeepay?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8";
public static final String DB_USERNAME = "root";
public static final String DB_PASSWORD = "root";
// 多个用, 拼接
//public static final String TABLE_NAMES= "t_sys_entitlement,t_sys_role,t_sys_user,t_sys_user_auth";
public static final String TABLE_NAMES= "t_pay_way";
public static void main(String[] args) {
// 代码生成器
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir"); //获取当前项目的 文件夹地址
if(!projectPath.endsWith(THIS_MODULE_NAME)){ //解决IDEA中 项目目录问题
projectPath += File.separator + THIS_MODULE_NAME;
}
gc.setOutputDir(projectPath + "/src/main/java");
gc.setAuthor("[mybatis plus generator]");
gc.setOpen(false);
gc.setBaseResultMap(true);
gc.setDateType(DateType.ONLY_DATE);
gc.setServiceImplName("%sService"); //不生成 service接口;
mpg.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl(DB_URL);
dsc.setDriverName("com.mysql.jdbc.Driver");
dsc.setUsername(DB_USERNAME);
dsc.setPassword(DB_PASSWORD);
dsc.setTypeConvert(new MySqlTypeConvert() {
@Override
public DbColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
System.out.println("转换类型:" + fieldType);
//tinyint转换成Boolean
if (fieldType.toLowerCase().contains("tinyint")) {
return DbColumnType.BYTE;
}
return (DbColumnType) super.processTypeConvert(globalConfig, fieldType);
}
});
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent("com.jeequan.jeepay"); //根目录
pc.setEntity("core.entity"); //实体目录
pc.setMapper("service.mapper"); //Mapper接口目录
pc.setXml("service.mapper"); //xml目录
pc.setService("delete_delete"); //service目录 不需要,暂时删除
pc.setServiceImpl("service"); //serviceImpl 目录
mpg.setPackageInfo(pc);
// 配置模板
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setController(null); //不生成controller
templateConfig.setService(null); //不生成services
mpg.setTemplate(templateConfig);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel); //no_change原样输出
strategy.setColumnNaming(NamingStrategy.underline_to_camel); //no_change原样输出
strategy.setEntityLombokModel(true);
strategy.setInclude(TABLE_NAMES.split(","));
strategy.setTablePrefix("t_");
// strategy.setEntityTableFieldAnnotationEnable(true); //自动添加 field注解
mpg.setStrategy(strategy);
mpg.execute();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <!-- POM模型版本 -->
<groupId>org.xxpay</groupId>
<artifactId>xxpay-master</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<name>xxpay-master</name>
<description>xxpay-master</description>
<groupId>com.jeequan</groupId> <!-- 组织名, 类似于包名 -->
<artifactId>jeepay</artifactId> <!-- 项目名称 -->
<packaging>pom</packaging> <!-- 项目的最终打包类型/发布形式, 可选[jar, war, pom, maven-plugin]等 -->
<name>jeepay</name>
<version>1.0.0</version> <!-- pom版本号/项目总版本号, 每个子项目引入的版本号必须一致。 -->
<description>Jeepay计全支付系统</description> <!-- 项目描述 -->
<url>https://www.jeequan.com</url>
<!-- 继承:Spring Boot Parent -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.5</version>
</parent>
<!-- 声明子项目 -->
<modules>
<module>xxpay-common</module>
<module>xxpay-dal</module>
<module>xxpay-mgr</module>
<module>xxpay-shop</module>
<module>xxpay4spring-cloud</module>
<module>xxpay4dubbo</module>
<module>xxpay4spring-boot</module>
<module>jeepay-z-codegen</module> <!-- 代码生成器 -->
<module>jeepay-core</module> <!-- 基础函数, 包含工具类等 -->
<module>jeepay-service</module> <!-- db service等 -->
<module>jeepay-manager</module> <!-- 运营平台管理端 -->
<module>jeepay-merchant</module> <!-- 商户平台管理端 -->
<module>jeepay-payment</module> <!-- 支付统一网关 -->
</modules>
<!-- 配置属性声明, 支持自定义参数 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<java.version>1.8</java.version> <!-- 指定java版本号 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- 项目构建输出编码 -->
<isys.version>1.0.0</isys.version> <!-- 指定当前[项目]版本号 -->
<!-- 其他工具包 -->
<fastjson.version>1.2.76</fastjson.version> <!-- fastjson -->
<mybatis.plus.starter.version>3.4.2</mybatis.plus.starter.version> <!-- mybatis plus -->
<hutool.util.version>5.6.6</hutool.util.version> <!-- hutool -->
<spring.security.version>5.4.6</spring.security.version> <!-- 用于core的scope依赖 -->
<jjwt.version>0.9.1</jjwt.version>
<binarywang.weixin.java.version>4.1.0</binarywang.weixin.java.version>
</properties>
<!-- 依赖包管理, 按需添加 -->
<dependencyManagement>
<dependencies>
<!-- alibaba FastJSON -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<!-- Spring Security -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>${spring.security.version}</version>
</dependency>
<!-- JWT -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>${jjwt.version}</version>
</dependency>
<!--wx_pay https://github.com/wechat-group/WxJava -->
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-pay</artifactId>
<version>${binarywang.weixin.java.version}</version>
</dependency>
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-mp</artifactId>
<version>${binarywang.weixin.java.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis.plus.starter.version}</version>
</dependency>
<!-- 生成二维码依赖 -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.1.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java -->
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.13.50.ALL</version>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 所有项目 项目依赖声明 -->
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
<scope>provided</scope> <!-- 编译阶段生效,不需要打入包中 -->
</dependency>
<!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.util.version}</version>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<!--引入插件-->
</plugins>
</pluginManagement>
</build>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.xxpay</groupId>
<artifactId>xxpay-common</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<name>xxpay-common</name>
<description>xxpay-common</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<fastjson.version>1.2.54</fastjson.version>
<logback-classic.version>1.1.7</logback-classic.version>
<slf4j-api.version>1.7.7</slf4j-api.version>
<commons-lang3.version>3.5</commons-lang3.version>
<commons.beanutils.version>1.7.0</commons.beanutils.version>
<commons.collections.version>3.2.2</commons.collections.version>
</properties>
<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>${logback-classic.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback-classic.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j-api.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3.version}</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>${commons.beanutils.version}</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>${commons.collections.version}</version>
</dependency>
</dependencies>
<build>
<finalName>xxpay-common</finalName>
</build>
</project>
\ No newline at end of file
package org.xxpay.common.constant;
/**
* Created by admin on 2016/4/27.
*/
public class Constant {
// 账户业务模块流水号前缀(account)
public static final String AC_BIZ_SEQUENCE_NO_PREFIX = "ac";
// 账户业务模块流水号前缀(config)
public static final String CF_BIZ_SEQUENCE_NO_PREFIX = "cf";
// 账户业务模块流水号前缀(metadata)
public static final String MD_BIZ_SEQUENCE_NO_PREFIX = "md";
public static final String ME_BIZ_SEQUENCE_NO_PREFIX = "me";
// 认证业务模块流水号前缀(auth)
public static final String AU_BIZ_SEQUENCE_NO_PREFIX = "au";
// 交易业务模块流水号前缀(trans)
public static final String TRANS_BIZ_SEQUENCE_NO_PREFIX = "tn";
// 日志业务模块流水号前缀(log)
public static final String LG_BIZ_SEQUENCE_NO_PREFIX = "lg";
// zookeeper监控业务模块流水号前缀(zk)
public static final String ZK_BIZ_SEQUENCE_NO_PREFIX = "zk";
// 朋友圈流水号前缀(moments)
public static final String MM_BIZ_SEQUENCE_NO_PREFIX = "mm";
// 背包流水号前缀(pack)
public static final String PK_BIZ_SEQUENCE_NO_PREFIX = "pk";
// 随机通讯码不重复的时间间隔(ms)
public static final long RPC_SEQ_NO_NOT_REPEAT_INTERVAL = 5 * 1000;
// 服务端返回map中业务数据结果对应的key名称
public static final String BIZ_RESULT_KEY = "bizResult";
}
package org.xxpay.common.constant;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
/**
* @Description: 支付常量类
* @author dingzhiwei jmdhappy@126.com
* @date 2017-07-05
* @version V1.0
* @Copyright: www.xxpay.org
*/
public class PayConstant {
public final static String PAY_CHANNEL_WX_JSAPI = "WX_JSAPI"; // 微信公众号支付
public final static String PAY_CHANNEL_WX_NATIVE = "WX_NATIVE"; // 微信原生扫码支付
public final static String PAY_CHANNEL_WX_APP = "WX_APP"; // 微信APP支付
public final static String PAY_CHANNEL_WX_MWEB = "WX_MWEB"; // 微信H5支付
public final static String PAY_CHANNEL_IAP = "IAP"; // 苹果应用内支付
public final static String PAY_CHANNEL_ALIPAY_MOBILE = "ALIPAY_MOBILE"; // 支付宝移动支付
public final static String PAY_CHANNEL_ALIPAY_PC = "ALIPAY_PC"; // 支付宝PC支付
public final static String PAY_CHANNEL_ALIPAY_WAP = "ALIPAY_WAP"; // 支付宝WAP支付
public final static String PAY_CHANNEL_ALIPAY_QR = "ALIPAY_QR"; // 支付宝当面付之扫码支付
public final static String CHANNEL_NAME_WX = "WX"; // 渠道名称:微信
public final static String CHANNEL_NAME_ALIPAY = "ALIPAY"; // 渠道名称:支付宝
public final static byte PAY_STATUS_EXPIRED = -2; // 订单过期
public final static byte PAY_STATUS_FAILED = -1; // 支付失败
public final static byte PAY_STATUS_INIT = 0; // 初始态
public final static byte PAY_STATUS_PAYING = 1; // 支付中
public final static byte PAY_STATUS_SUCCESS = 2; // 支付成功
public final static byte PAY_STATUS_COMPLETE = 3; // 业务完成
public final static byte TRANS_STATUS_INIT = 0; // 初始态
public final static byte TRANS_STATUS_TRANING = 1; // 转账中
public final static byte TRANS_STATUS_SUCCESS = 2; // 成功
public final static byte TRANS_STATUS_FAIL = 3; // 失败
public final static byte TRANS_STATUS_COMPLETE = 4; // 业务完成
public final static byte TRANS_RESULT_INIT = 0; // 不确认结果
public final static byte TRANS_RESULT_REFUNDING = 1; // 等待手动处理
public final static byte TRANS_RESULT_SUCCESS = 2; // 确认成功
public final static byte TRANS_RESULT_FAIL = 3; // 确认失败
public final static byte REFUND_STATUS_INIT = 0; // 初始态
public final static byte REFUND_STATUS_REFUNDING = 1; // 转账中
public final static byte REFUND_STATUS_SUCCESS = 2; // 成功
public final static byte REFUND_STATUS_FAIL = 3; // 失败
public final static byte REFUND_STATUS_COMPLETE = 4; // 业务完成
public final static byte REFUND_RESULT_INIT = 0; // 不确认结果
public final static byte REFUND_RESULT_REFUNDING = 1; // 等待手动处理
public final static byte REFUND_RESULT_SUCCESS = 2; // 确认成功
public final static byte REFUND_RESULT_FAIL = 3; // 确认失败
public final static String MCH_NOTIFY_TYPE_PAY = "1"; // 商户通知类型:支付订单
public final static String MCH_NOTIFY_TYPE_TRANS = "2"; // 商户通知类型:转账订单
public final static String MCH_NOTIFY_TYPE_REFUND = "3"; // 商户通知类型:退款订单
public final static byte MCH_NOTIFY_STATUS_NOTIFYING = 1; // 通知中
public final static byte MCH_NOTIFY_STATUS_SUCCESS = 2; // 通知成功
public final static byte MCH_NOTIFY_STATUS_FAIL = 3; // 通知失败
public final static String RESP_UTF8 = "UTF-8"; // 通知业务系统使用的编码
public static final String RETURN_PARAM_RETCODE = "retCode";
public static final String RETURN_PARAM_RETMSG = "retMsg";
public static final String RESULT_PARAM_RESCODE = "resCode";
public static final String RESULT_PARAM_ERRCODE = "errCode";
public static final String RESULT_PARAM_ERRCODEDES = "errCodeDes";
public static final String RESULT_PARAM_SIGN = "sign";
public static final String RETURN_VALUE_SUCCESS = "SUCCESS";
public static final String RETURN_VALUE_FAIL = "FAIL";
public static final String RETURN_ALIPAY_VALUE_SUCCESS = "success";
public static final String RETURN_ALIPAY_VALUE_FAIL = "fail";
public static class JdConstant {
public final static String CONFIG_PATH = "jd" + File.separator + "jd"; // 京东支付配置文件路径
}
public static class WxConstant {
public final static String TRADE_TYPE_APP = "APP"; // APP支付
public final static String TRADE_TYPE_JSPAI = "JSAPI"; // 公众号支付或小程序支付
public final static String TRADE_TYPE_NATIVE = "NATIVE"; // 原生扫码支付
public final static String TRADE_TYPE_MWEB = "MWEB"; // H5支付
}
public static class IapConstant {
public final static String CONFIG_PATH = "iap" + File.separator + "iap"; // 苹果应用内支付
}
public static class AlipayConstant {
public final static String CONFIG_PATH = "alipay" + File.separator + "alipay"; // 支付宝移动支付
public final static String TRADE_STATUS_WAIT = "WAIT_BUYER_PAY"; // 交易创建,等待买家付款
public final static String TRADE_STATUS_CLOSED = "TRADE_CLOSED"; // 交易关闭
public final static String TRADE_STATUS_SUCCESS = "TRADE_SUCCESS"; // 交易成功
public final static String TRADE_STATUS_FINISHED = "TRADE_FINISHED"; // 交易成功且结束
}
public static final String NOTIFY_BUSI_PAY = "NOTIFY_VV_PAY_RES";
public static final String NOTIFY_BUSI_TRANS = "NOTIFY_VV_TRANS_RES";
}
package org.xxpay.common.constant;
/**
* @Description: 支付返回码定义
* @author dingzhiwei jmdhappy@126.com
* @date 2017-07-05
* @version V1.0
* @Copyright: www.xxpay.org
*/
public enum PayEnum {
/*
0010|系统错误 |系统超时或异常|系统异常,请用相同参数重新调用
0011|请使用post方法 |未使用post传递参数|请检查请求参数是否通过post方法提交
0012|post数据为空 |post数据不能为空|请检查post数据是否为空
0013|签名错误 |参数签名结果不正确|请检查签名参数和方法是否都符合签名算法要求
0014|参数错误 |缺少参数或参数格式不正确|请根据具体的原因检查参数
0015|商户不存在 |传入的商户ID在支付中心不存在|请检查mchID参数是否正确
0110|第三方超时 |调用第三方支付系统超时|请重新调用
0111|第三方异常 |调用第三方支付系统异常|根据提示错误信息检查
0112|订单不存在 |商户订单不存在|请检查商户订单payOrderId参数
0113|订单已支付 |商户订单已支付,无需重复操作|商户订单已支付,无需重复操作
*/
ERR_0001("0001", "商户签名异常"),
ERR_0010("0010", "系统错误"),
ERR_0011("0011", "请使用post方法"),
ERR_0012("0012", "post数据为空"),
ERR_0013("0013", "签名错误"),
ERR_0014("0014", "参数错误"),
ERR_0015("0015", "商户不存在"),
ERR_0110("0110", "第三方超时"),
ERR_0111("0111", "第三方异常"),
ERR_0112("0112", "订单不存在"),
ERR_0113("0113", "订单已支付"),
ERR_0114("0114", "商品不存在"),
ERR_0115("0115", "价格不对"),
ERR_0116("0116", "物品数量不对"),
ERR_0117("0117", "过程返回255"),
ERR_0118("0118", "DB错误");
private String code;
private String message;
PayEnum(String code, String message) {
this.code = code;
this.message = message;
}
public String getCode()
{
return this.code;
}
public String getMessage() {
return this.message;
}
}
package org.xxpay.common.domain;
import org.apache.commons.lang3.StringUtils;
import org.xxpay.common.enumm.RpcSignTypeEnum;
import org.xxpay.common.util.*;
import java.util.*;
/**
* Created by admin on 2016/7/11.
*/
public class BaseParam extends RpcBaseParam {
private Map<String, Object> bizParamMap;
public BaseParam() {}
/**
* 不需要业务签名的构造器
* @param rpcSrcSysId
* @param rpcSignKey
* @param bizSeqNoPrefix
*/
public BaseParam(String rpcSrcSysId, String rpcSignKey, String bizSeqNoPrefix) {
super.rpcSrcSysId = rpcSrcSysId;
super.rpcDateTime = DateUtils.getCurrentTimeStrDefault();
super.rpcSeqNo = RandomStrUtils.getInstance().getRandomString();
super.rpcSignType = RpcSignTypeEnum.SHA1_SIGN.getCode();
super.bizSeqNo = BizSequenceUtils.getInstance().generateBizSeqNo(bizSeqNoPrefix);
StringBuffer decriptBuffer = new StringBuffer();
decriptBuffer.append(rpcSignKey)
.append(super.rpcSrcSysId)
.append(super.rpcDateTime)
.append(super.rpcSignType)
.append(super.bizSeqNo);
super.rpcSign = RpcSignUtils.sha1(decriptBuffer.toString());
this.bizParamMap = new HashMap<String, Object>();
}
/**
* 需要业务签名的构造器
* @param rpcSrcSysId
* @param rpcSignKey
* @param bizSeqNoPrefix
* @param bizSign
*/
public BaseParam(String rpcSrcSysId, String rpcSignKey, String bizSeqNoPrefix, String bizSign) {
super.rpcSrcSysId = rpcSrcSysId;
super.rpcDateTime = DateUtils.getCurrentTimeStrDefault();
super.rpcSeqNo = RandomStrUtils.getInstance().getRandomString();
super.rpcSignType = RpcSignTypeEnum.SHA1_SIGN.getCode();
super.bizSeqNo = BizSequenceUtils.getInstance().generateBizSeqNo(bizSeqNoPrefix);
super.bizSign = bizSign;
StringBuffer decriptBuffer = new StringBuffer();
decriptBuffer.append(rpcSignKey)
.append(super.rpcSrcSysId)
.append(super.rpcDateTime)
.append(super.rpcSignType)
.append(super.bizSeqNo)
.append(super.bizSign);
super.rpcSign = RpcSignUtils.sha1(decriptBuffer.toString());
this.bizParamMap = new HashMap<String, Object>();
}
public Map<String, Object> getBizParamMap() {
return bizParamMap;
}
public void setBizParamMap(Map<String, Object> bizParamMap) {
this.bizParamMap = bizParamMap;
}
public String toJson() {
return JsonUtil.object2Json(this);
}
@Override
public String toString() {
final StringBuffer sb = new StringBuffer("BaseParam{");
sb.append("rpcSrcSysId='").append(rpcSrcSysId).append('\'');
sb.append(", rpcDateTime='").append(rpcDateTime).append('\'');
sb.append(", rpcSeqNo='").append(rpcSeqNo).append('\'');
sb.append(", rpcSignType=").append(rpcSignType);
sb.append(", rpcSign='").append(rpcSign).append('\'');
sb.append(", bizSeqNo='").append(bizSeqNo).append('\'');
sb.append(", bizSign='").append(bizSign).append('\'');
sb.append(", bizParamMap=").append(bizParamMap);
sb.append('}');
return sb.toString();
}
public boolean isNullValue(String key) {
Object objValue = this.bizParamMap.get(key);
return objValue == null || StringUtils.isBlank(objValue.toString());
}
/**
* 判断bizParamMap中的参数是否全部为空,是则返回true,否则返回false
* @param excludeKeys
* @return
*/
public boolean isInvalidMapValue(Object... excludeKeys) {
if (this.bizParamMap == null || this.bizParamMap.isEmpty()) {
return true;
}
List<Object> list = Arrays.asList(excludeKeys);
for (Map.Entry<String, Object> entry : this.bizParamMap.entrySet()) {
if (list.contains(entry.getKey())) {
continue;
}
Object value = entry.getValue();
if (value != null ) {
if (value instanceof String) {
if (StringUtils.isNotBlank(value.toString())) {
return false;
}
} else {
return false;
}
}
}
return true;
}
/**
* 获取long类型参数
* @param name
* @return
*/
public Long getLongBizParam(String name) {
if (isNullValue(name)) {
return null;
}
return Long.valueOf(bizParamMap.get(name).toString());
}
/**
* 获取int类型参数
* @param name
* @return
*/
public Integer getIntBizParam(String name) {
if (isNullValue(name)) {
return null;
}
return Integer.valueOf(bizParamMap.get(name).toString());
}
/**
* 获取int类型参数,如果为空返回defaultValue
* @param name
* @param defaultValue
* @return
*/
public Integer getIntBizParam(String name, int defaultValue) {
if (isNullValue(name)) {
return defaultValue;
}
return Integer.valueOf(bizParamMap.get(name).toString());
}
/**
* 获取short类型参数
* @param name
* @return
*/
public Short getShortBizParam(String name) {
if (isNullValue(name)) {
return null;
}
return Short.valueOf(bizParamMap.get(name).toString());
}
/**
* 获取string类型参数,如果为空返回defaultValue
* @param name
* @param
* @return
*/
public String getStringBizParam(String name, String defaultValue){
if (isNullValue(name)) {
return defaultValue;
}
return bizParamMap.get(name).toString();
}
/**
* 获取string类型参数
* @param name
* @param
* @return
*/
public String getStringBizParam(String name){
if (isNullValue(name)) {
return null;
}
return bizParamMap.get(name).toString();
}
public List<Short> getShortListBizParam(String name) {
if (isNullValue(name)) {
return null;
}
List<Number> numberList = (List<Number>) bizParamMap.get(name);
if (numberList == null) {
return null;
}
List<Short> shortList = new ArrayList<Short>(numberList.size());
for (Number number : numberList) {
Short value = number.shortValue();
shortList.add(value);
}
return shortList;
}
public List<Integer> getIntegerListBizParam(String name) {
if (isNullValue(name)) {
return null;
}
List<Number> numberList = (List<Number>) bizParamMap.get(name);
if (numberList == null) {
return null;
}
List<Integer> integerList = new ArrayList<Integer>(numberList.size());
for (Number number : numberList) {
Integer value = number.intValue();
integerList.add(value);
}
return integerList;
}
public List<Long> getLongListBizParam(String name) {
if (isNullValue(name)) {
return null;
}
List<Number> numberList = (List<Number>) bizParamMap.get(name);
if (numberList == null) {
return null;
}
List<Long> longList = new ArrayList<Long>(numberList.size());
for (Number number : numberList) {
Long value = number.longValue();
longList.add(value);
}
return longList;
}
public static void main(String[] args) {
BaseParam baseParam = new BaseParam();
Map<String, Object> map = new HashMap<String, Object>();
map.put("a", null);
map.put("b", "");
baseParam.setBizParamMap(map);
System.out.println(baseParam.isInvalidMapValue(""));
}
}
package org.xxpay.common.domain;
import org.xxpay.common.enumm.RpcSignTypeEnum;
import org.xxpay.common.util.*;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
/**
* 服务接口调用入参基类
* Created by admin on 2016/4/27.
*/
public class RpcBaseParam implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 调用方ID(由RPC服务端分配)
*/
protected String rpcSrcSysId;
/**
* 业务调用当前时间(格式:yyyyMMddHHmmssSSS)
*/
protected String rpcDateTime;
/**
* 随机通讯码(要求一定时间段内不重复)
*/
protected String rpcSeqNo;
/**
* 签名计算方法
* 参见RpcSignTypeEnum
* 0: 明文
* 1: SHA-1
*/
protected Integer rpcSignType;
/**
* 签名(用于验证调用方的合法性)
* 签名计算方法: 签名方法(key(由RPC服务端分配,不在通讯中传递)+scrSysId+rpcDateTime(yyyyMMddHHmmssSSS)+rpcSignType+bizSeqNo+bizSign),如果字段为null则不参与
* eg. sha1(key+srcSysId+curDateTime+rpcSignType+bizSeqNo+bizSign)
*/
protected String rpcSign;
/**
* 业务流水号(唯一标示一笔业务)
* 由业务前缀(2字符,参见Constant.MP_BIZ_SEQUENCE_NO_PREFIX)+日期时间(yyyyMMddHHmmss)+流水号(6位数字)组成
* eg. Constant.MP_BIZ_SEQUENCE_NO_PREFIX)+DateUtils.getCurrentTimeStr("yyyyMMddHHmmss")
* +BizSequenceUtils.getInstance().generateBizSeqNo()
*/
protected String bizSeqNo;
/**
* 业务签名(计算由各业务系统定义)
*/
protected String bizSign;
public RpcBaseParam() {}
/**
* 不需要业务签名的构造器
* @param rpcSrcSysId
* @param rpcSignKey
* @param bizSeqNoPrefix
*/
public RpcBaseParam(String rpcSrcSysId, String rpcSignKey, String bizSeqNoPrefix) {
this.rpcSrcSysId = rpcSrcSysId;
this.rpcDateTime = DateUtils.getCurrentTimeStrDefault();
this.rpcSeqNo = RandomStrUtils.getInstance().getRandomString();
this.rpcSignType = RpcSignTypeEnum.SHA1_SIGN.getCode();
this.bizSeqNo = BizSequenceUtils.getInstance().generateBizSeqNo(bizSeqNoPrefix);
StringBuffer decriptBuffer = new StringBuffer();
decriptBuffer.append(rpcSignKey)
.append(this.rpcSrcSysId)
.append(this.rpcDateTime)
.append(this.rpcSignType)
.append(this.bizSeqNo);
this.rpcSign = RpcSignUtils.sha1(decriptBuffer.toString());
}
/**
* 需要业务签名的构造器
* @param rpcSrcSysId
* @param rpcSignKey
* @param bizSeqNoPrefix
* @param bizSign
*/
public RpcBaseParam(String rpcSrcSysId, String rpcSignKey, String bizSeqNoPrefix, String bizSign) {
this.rpcSrcSysId = rpcSrcSysId;
this.rpcDateTime = DateUtils.getCurrentTimeStrDefault();
this.rpcSeqNo = RandomStrUtils.getInstance().getRandomString();
this.rpcSignType = RpcSignTypeEnum.SHA1_SIGN.getCode();
this.bizSeqNo = BizSequenceUtils.getInstance().generateBizSeqNo(bizSeqNoPrefix);
this.bizSign = bizSign;
StringBuffer decriptBuffer = new StringBuffer();
decriptBuffer.append(rpcSignKey)
.append(this.rpcSrcSysId)
.append(this.rpcDateTime)
.append(this.rpcSignType)
.append(this.bizSeqNo)
.append(this.bizSign);
this.rpcSign = RpcSignUtils.sha1(decriptBuffer.toString());
}
public String getRpcSrcSysId() {
return rpcSrcSysId;
}
public void setRpcSrcSysId(String rpcSrcSysId) {
this.rpcSrcSysId = rpcSrcSysId;
}
public String getRpcDateTime() {
return rpcDateTime;
}
public void setRpcDateTime(String rpcDateTime) {
this.rpcDateTime = rpcDateTime;
}
public String getRpcSeqNo() {
return rpcSeqNo;
}
public void setRpcSeqNo(String rpcSeqNo) {
this.rpcSeqNo = rpcSeqNo;
}
public Integer getRpcSignType() {
return rpcSignType;
}
public void setRpcSignType(Integer rpcSignType) {
this.rpcSignType = rpcSignType;
}
public String getBizSeqNo() {
return bizSeqNo;
}
public void setBizSeqNo(String bizSeqNo) {
this.bizSeqNo = bizSeqNo;
}
public String getBizSign() {
return bizSign;
}
public void setBizSign(String bizSign) {
this.bizSign = bizSign;
}
public String getRpcSign() {
return rpcSign;
}
public void setRpcSign(String rpcSign) {
this.rpcSign = rpcSign;
}
/*public Map<String, Object> convert2Map() {
if (this == null) {
return null;
}
return BeanConvertUtils.bean2Map(this);
}*/
public static RpcBaseParam convert2Bean(Map<String, Object> map) {
return BeanConvertUtils.map2Bean(map, RpcBaseParam.class);
}
@Override
public String toString() {
final StringBuffer sb = new StringBuffer("RpcBaseParam{");
sb.append("rpcSrcSysId='").append(rpcSrcSysId).append('\'');
sb.append(", rpcDateTime='").append(rpcDateTime).append('\'');
sb.append(", rpcSeqNo='").append(rpcSeqNo).append('\'');
sb.append(", rpcSignType=").append(rpcSignType);
sb.append(", rpcSign='").append(rpcSign).append('\'');
sb.append(", bizSeqNo='").append(bizSeqNo).append('\'');
sb.append(", bizSign='").append(bizSign).append('\'');
sb.append('}');
return sb.toString();
}
public Map<String, Object> convert2Map() {
Map<String, Object> rpcMap = new HashMap<String, Object>();
rpcMap.put("rpcSrcSysId", rpcSrcSysId);
rpcMap.put("rpcDateTime", rpcDateTime);
rpcMap.put("rpcSeqNo", rpcSeqNo);
rpcMap.put("rpcSignType", rpcSignType);
rpcMap.put("rpcSign", rpcSign);
rpcMap.put("bizSeqNo", bizSeqNo);
rpcMap.put("bizSign", bizSign);
return rpcMap;
}
}
package org.xxpay.common.domain;
import java.util.HashMap;
import java.util.Map;
/**
* 服务接口调用返回值基类
* Created by admin on 2016/4/27.
*/
public class RpcBaseResult extends RpcBaseParam {
/**
* RPC调用返回码
* 0000: 成功
* 其他: 失败(00开始标示通讯层相关错误码)
*/
protected String rpcRetCode;
/**
* RPC调用返回错误描述
*/
protected String rpcRetMsg;
/**
* DB返回的错误码
*/
protected String dbErrorCode;
/**
* DB返回的错误信息
*/
protected String dbErrorMsg;
public String getRpcRetCode() {
return rpcRetCode;
}
public void setRpcRetCode(String rpcRetCode) {
this.rpcRetCode = rpcRetCode;
}
public String getRpcRetMsg() {
return rpcRetMsg;
}
public void setRpcRetMsg(String rpcRetMsg) {
this.rpcRetMsg = rpcRetMsg;
}
@Override
public String toString() {
final StringBuffer sb = new StringBuffer("RpcBaseResult{");
sb.append("rpcSrcSysId='").append(rpcSrcSysId).append('\'');
sb.append(", rpcDateTime='").append(rpcDateTime).append('\'');
sb.append(", rpcSeqNo='").append(rpcSeqNo).append('\'');
sb.append(", rpcSignType=").append(rpcSignType);
sb.append(", rpcSign='").append(rpcSign).append('\'');
sb.append(", bizSeqNo='").append(bizSeqNo).append('\'');
sb.append(", bizSign='").append(bizSign).append('\'');
sb.append(", rpcRetCode='").append(rpcRetCode).append('\'');
sb.append(", rpcRetMsg='").append(rpcRetMsg).append('\'');
sb.append(", dbErrorCode='").append(dbErrorCode).append('\'');
sb.append(", dbErrorMsg='").append(dbErrorMsg).append('\'');
sb.append('}');
return sb.toString();
}
public Map<String, Object> convert2Map() {
Map<String, Object> rpcMap = new HashMap<String, Object>();
rpcMap.put("rpcSrcSysId", rpcSrcSysId);
rpcMap.put("rpcDateTime", rpcDateTime);
rpcMap.put("rpcSeqNo", rpcSeqNo);
rpcMap.put("rpcSignType", rpcSignType);
rpcMap.put("rpcSign", rpcSign);
rpcMap.put("bizSeqNo", bizSeqNo);
rpcMap.put("bizSign", bizSign);
rpcMap.put("rpcRetCode", rpcRetCode);
rpcMap.put("rpcRetMsg", rpcRetMsg);
rpcMap.put("dbErrorCode", dbErrorCode);
rpcMap.put("dbErrorMsg", dbErrorMsg);
return rpcMap;
}
}
package org.xxpay.common.enumm;
/**
* RPC调用返回码枚举类
* 对应方法调用返回值中的rpcRetCode和rpcRetMsg
* Created by admin on 2016/4/27.
*/
public enum RetEnum {
// 0000: 成功
RET_SUCCESS("0000", ""),
// 失败(00开始标示通讯层相关错误码)
RET_REMOTE_UNUSABLE("0001", "远程服务不可用"),
RET_REMOTE_INVALID("0002", "客户端非法调用"),
RET_NO_BIZ_SEQUENCE_NO("0003", "远程服务调用业务流水号不存在"),
RET_REMOTE_CHECK_SIGN_FAIL("0004", "远程服务调用签名验证失败"),
RET_REMOTE_RPC_SEQ_NO_REPEATED("0005", "随机通讯码在指定时间内重复"),
RET_REMOTE_SIGN_INVALID("0006", "远程服务调用签名计算方式错误"),
RET_REMOTE_DEAL_EXCEPTION("0007", "远程服务调用处理异常"),
RET_REMOTE_PROTOCOL_INVALID("0008", "客户端调用协议非法"),
RET_REMOTE_HTTP_METHOD_INVALID("0009", "客户端请求方式非法"),
// 失败(01开始标示参数校验相关错误码)
RET_PARAM_NOT_FOUND("0101", "参数不存在"),
RET_PARAM_INVALID("0102", "无效的参数"),
RET_PARAM_TOO_LARGE_LIST("0103", "列表超长"),
RET_PARAM_TYPE_INVALID("0104", "参数类型错误"),
RET_CURRENT_PAGE_INVALID("0105", "当前页码非法"),
RET_VIEW_NUMBER_INVALID("0106", "分页显示数目非法"),
RET_VIEW_LIMIT_INVALID("0107", "数据排列显示数目非法"),
// 失败(02开始标示DB操作相关错误码)
RET_DB_FAIL("0201", "数据库操作失败"),
// 业务相关
RET_BIZ_DATA_NOT_EXISTS("1001", "数据不存在"),
RET_BIZ_SING_DATA_FAIL("1002", "商户签名数据不正确"),
RET_BIZ_WX_PAY_CREATE_FAIL("1003", "微信支付下单失败"),
RET_BIZ_ALI_PAY_CREATE_FAIL("1004", "支付宝支付下单失败"),
RET_BIZ_PAY_NOTIFY_VERIFY_FAIL("1005", "支付通知数据验证不正确"),
// 未知错误
RET_UNKNOWN_ERROR("9999", "未知错误");
private String code;
private String message;
private RetEnum(String code, String message) { this.code = code;
this.message = message; }
public String getCode()
{
return this.code;
}
public String getMessage() {
return this.message;
}
public static RetEnum getRetEnum(String code) {
if (code == null) {
return null;
}
RetEnum[] values = RetEnum.values();
for (RetEnum e : values) {
if (e.getCode().equals(code)) {
return e;
}
}
return null;
}
}
package org.xxpay.common.enumm;
/**
* RPC通讯层签名计算方法枚举类
* Created by admin on 2016/5/4.
*/
public enum RpcSignTypeEnum {
NOT_SIGN(0),// 明文
SHA1_SIGN(1);// SHA-1签名
private Integer code;
private RpcSignTypeEnum(Integer code) {
this.code = code;
}
public Integer getCode()
{
return this.code;
}
public static RpcSignTypeEnum getRpcSignTypeEnum(Integer code) {
if (code == null) {
return null;
}
RpcSignTypeEnum[] values =RpcSignTypeEnum.values();
for (RpcSignTypeEnum e : values) {
if (e.getCode().equals(code)) {
return e;
}
}
return null;
}
}
package org.xxpay.common.util;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.converters.*;
import java.lang.reflect.InvocationTargetException;
import java.math.BigDecimal;
import java.util.Date;
import java.util.Map;
/**
* Created by admin on 2016/5/4.
*/
public class BeanConvertUtils {
static {
// 在封装之前 注册转换器
ConvertUtils.register(new DateTimeConverter(), Date.class);
ConvertUtils.register(new DateTimeConverter(), java.sql.Date.class);
ConvertUtils.register(new LongConverter(null), Long.class);
ConvertUtils.register(new ShortConverter(null), Short.class);
ConvertUtils.register(new IntegerConverter(null), Integer.class);
ConvertUtils.register(new DoubleConverter(null), Double.class);
ConvertUtils.register(new BigDecimalConverter(null), BigDecimal.class);
}
/**
* 将javabean转换为Map
* @param obj
* @return
*/
public static Map<String, Object> bean2Map(Object obj) {
try {
Map<String, Object> map = BeanUtils.describe(obj);
map.remove("class");
return map;
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
return null;
}
/**
* 将Map转换为javabean
* @param map
* @param clazz
* @param <T>
* @return
*/
public static <T> T map2Bean(Map<String, Object> map, Class<T> clazz) {
if (map == null || clazz == null) {
return null;
}
T bean = null;
try {
bean = clazz.newInstance();
BeanUtils.populate(bean, map);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return bean;
}
/**
* 对象间的属性值拷贝
*
* @param dest 目标对象
* @param src 源对象
*/
public static void copyProperties(Object dest, Object src) {
if (src == null || dest == null) {
return;
}
try {
BeanUtils.copyProperties(dest, src);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
}
package org.xxpay.common.util;
import java.text.DecimalFormat;
import java.text.FieldPosition;
import java.text.NumberFormat;
import java.util.concurrent.atomic.AtomicInteger;
/**
* 业务流水号工具类
* Created by admin on 2016/4/28.
*/
public class BizSequenceUtils {
private static Object lock = new Object();
private static BizSequenceUtils instance;
/**
* The FieldPosition.
*/
private static final FieldPosition HELPER_POSITION = new FieldPosition(0);
/**
* This Format for format the number to special format.
*/
private final static NumberFormat numberFormat = new DecimalFormat("00000000");
/**
* This int is the sequence number ,the default value is 1.
*/
private static AtomicInteger seq = new AtomicInteger(1);
private static final int MAX = 99999999;
private BizSequenceUtils() {
}
public static BizSequenceUtils getInstance() {
if (instance == null) {
synchronized (lock) {
if (instance == null) {
instance = new BizSequenceUtils();
}
}
}
return instance;
}
/**
* 生成业务流水号(唯一标示一笔业务)
*
* @param bizSeqNoPrefix 业务前缀(2字符,参见Constant.**_BIZ_SEQUENCE_NO_PREFIX)
* @return
*/
public String generateBizSeqNo(String bizSeqNoPrefix) {
StringBuffer bizSeqNo = new StringBuffer();
bizSeqNo.append(bizSeqNoPrefix)
.append(DateUtils.getCurrentTimeStr("yyMMddHHmmss"))
.append(getSeq());
return bizSeqNo.toString();
}
private String getSeq() {
StringBuffer sb = new StringBuffer();
numberFormat.format(seq, sb, HELPER_POSITION);
if (!seq.compareAndSet(MAX, 0)) {
seq.incrementAndGet();
}
return sb.toString();
}
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment