Browse Source

feat 0 支付工程

devlop
yang_shj 4 years ago
parent
commit
1e726c183a
  1. 12
      payment-base-app/payment-base-app.iml
  2. 50
      payment-base-app/pom.xml
  3. 11
      payment-base-app/src/main/java/com/base/springcloud/aspect/annotation/LoginRequired.java
  4. 32
      payment-base-app/src/main/java/com/base/springcloud/aspect/aspect/WebMvcConfiguration.java
  5. 25
      payment-base-app/src/main/java/com/base/springcloud/aspect/config/PayConfigurer.java
  6. 3
      payment-base-app/src/main/java/com/base/springcloud/aspect/config/RedisConfig.java
  7. 52
      payment-base-app/src/main/java/com/base/springcloud/aspect/interceptor/PayInterceptor.java
  8. 15
      payment-base-app/src/main/java/com/base/springcloud/bo/RefundBO.java
  9. 15
      payment-base-app/src/main/java/com/base/springcloud/constant/ErrorConstant.java
  10. 25
      payment-base-app/src/main/java/com/base/springcloud/constant/PaymentConstant.java
  11. 22
      payment-base-app/src/main/java/com/base/springcloud/controller/PaymentController.java
  12. 22
      payment-base-app/src/main/java/com/base/springcloud/dao/UserMapper.java
  13. 62
      payment-base-app/src/main/java/com/base/springcloud/entity/User.java
  14. 12
      payment-base-app/src/main/java/com/base/springcloud/service/RefundService.java
  15. 19
      payment-base-app/src/main/java/com/base/springcloud/service/UserService.java
  16. 8
      payment-base-app/src/main/java/com/base/springcloud/service/WecPaymentService.java
  17. 2
      payment-base-app/src/main/java/com/base/springcloud/service/imp/MerchantServiceImp.java
  18. 14
      payment-base-app/src/main/java/com/base/springcloud/service/imp/RefundServiceImp.java
  19. 64
      payment-base-app/src/main/java/com/base/springcloud/service/imp/UserServiceImp.java
  20. 105
      payment-base-app/src/main/java/com/base/springcloud/service/imp/WecPaymentServiceImp.java
  21. 101
      payment-base-app/src/main/java/com/base/springcloud/util/JwtUtil.java
  22. 16
      payment-base-app/src/main/java/com/base/springcloud/util/ParameterUtil.java
  23. 568
      payment-base-app/src/main/java/com/base/springcloud/util/RedisUtil.java
  24. 57
      payment-base-app/src/main/java/com/base/springcloud/util/TokenUtils.java
  25. 12
      payment-base-app/src/main/resources/application.yml
  26. 360
      payment-base-app/src/main/resources/com/base/payment/mapper/UserMapper.xml
  27. 68
      payment-base-app/src/main/resources/generatorConfig.xml

12
payment-base-app/payment-base-app.iml

@ -141,6 +141,8 @@
<orderEntry type="library" name="Maven: org.jodd:jodd-core:5.1.6" level="project" /> <orderEntry type="library" name="Maven: org.jodd:jodd-core:5.1.6" level="project" />
<orderEntry type="library" name="Maven: org.redisson:redisson-spring-data-24:3.15.1" level="project" /> <orderEntry type="library" name="Maven: org.redisson:redisson-spring-data-24:3.15.1" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.47" level="project" /> <orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.47" level="project" />
<orderEntry type="library" name="Maven: com.auth0:java-jwt:3.7.0" level="project" />
<orderEntry type="library" name="Maven: commons-codec:commons-codec:1.11" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-feign:1.4.7.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-feign:1.4.7.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-openfeign:2.1.1.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-openfeign:2.1.1.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter:2.1.1.RELEASE" level="project" /> <orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter:2.1.1.RELEASE" level="project" />
@ -168,17 +170,9 @@
<orderEntry type="library" name="Maven: io.github.openfeign.form:feign-form:3.2.2" level="project" /> <orderEntry type="library" name="Maven: io.github.openfeign.form:feign-form:3.2.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.12" level="project" /> <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.12" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.11" level="project" /> <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.11" level="project" />
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
<orderEntry type="library" name="Maven: commons-httpclient:commons-httpclient:3.1" level="project" /> <orderEntry type="library" name="Maven: commons-httpclient:commons-httpclient:3.1" level="project" />
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.1" level="project" />
<orderEntry type="library" name="Maven: log4j:log4j:1.2.17" level="project" />
<orderEntry type="library" name="Maven: logkit:logkit:1.0.1" level="project" />
<orderEntry type="library" name="Maven: avalon-framework:avalon-framework:4.1.3" level="project" />
<orderEntry type="library" name="Maven: javax.servlet:servlet-api:2.3" level="project" />
<orderEntry type="library" name="Maven: commons-codec:commons-codec:1.3" level="project" />
<orderEntry type="library" name="Maven: commons-lang:commons-lang:2.3" level="project" /> <orderEntry type="library" name="Maven: commons-lang:commons-lang:2.3" level="project" />
<orderEntry type="library" name="Maven: bcprov-ext-jdk15on:bcprov-ext-jdk15on:1.4.6" level="project" />
<orderEntry type="library" name="Maven: hiiposm_engine_simple:hiiposm_engine_simple:2.3.4" level="project" />
<orderEntry type="library" name="Maven: securityAPI-client:securityAPI-client:1.0.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.maven.plugins:maven-assembly-plugin:3.0.0" level="project" /> <orderEntry type="library" name="Maven: org.apache.maven.plugins:maven-assembly-plugin:3.0.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.maven:maven-plugin-api:3.0" level="project" /> <orderEntry type="library" name="Maven: org.apache.maven:maven-plugin-api:3.0" level="project" />
<orderEntry type="library" name="Maven: org.sonatype.sisu:sisu-inject-plexus:1.4.2" level="project" /> <orderEntry type="library" name="Maven: org.sonatype.sisu:sisu-inject-plexus:1.4.2" level="project" />

50
payment-base-app/pom.xml

@ -151,42 +151,17 @@
</exclusions> </exclusions>
</dependency> </dependency>
<!-- 和包支付使用 jar --> <!-- 使用 jar -->
<dependency> <dependency>
<groupId>commons-httpclient</groupId> <groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId> <artifactId>commons-httpclient</artifactId>
<version>3.1</version> <version>3.1</version>
</dependency> </dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.3</version>
</dependency>
<dependency> <dependency>
<groupId>commons-lang</groupId> <groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId> <artifactId>commons-lang</artifactId>
<version>2.3</version> <version>2.3</version>
</dependency> </dependency>
<dependency>
<groupId>bcprov-ext-jdk15on</groupId>
<artifactId>bcprov-ext-jdk15on</artifactId>
<version>1.4.6</version>
</dependency>
<dependency>
<groupId>hiiposm_engine_simple</groupId>
<artifactId>hiiposm_engine_simple</artifactId>
<version>2.3.4</version>
</dependency>
<dependency>
<groupId>securityAPI-client</groupId>
<artifactId>securityAPI-client</artifactId>
<version>1.0.0</version>
</dependency>
<!-- maven plugins --> <!-- maven plugins -->
<dependency> <dependency>
@ -252,27 +227,4 @@
</plugin> </plugin>
</plugins> </plugins>
</build> </build>
<repositories>
<repository>
<id>maven-public</id>
<name>maven-public</name>
<url>http://maven.hnrr.com.cn/repository/maven-public/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<distributionManagement>
<repository>
<id>nexus-releases</id>
<name>maven-releases</name>
<url>http://maven.hnrr.com.cn/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<name>maven-snapshots</name>
<url>http://maven.hnrr.com.cn/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
</project> </project>

11
payment-base-app/src/main/java/com/base/springcloud/aspect/annotation/LoginRequired.java

@ -0,0 +1,11 @@
package com.base.springcloud.aspect.annotation;
import java.lang.annotation.*;
@Target(ElementType.METHOD)
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface LoginRequired {
// 部门 ture - 获取部门信息
boolean department() default false;
}

32
payment-base-app/src/main/java/com/base/springcloud/aspect/aspect/WebMvcConfiguration.java

@ -1,32 +0,0 @@
package com.base.springcloud.aspect.aspect;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* Spring Boot 2.0 解决跨域问题
*
* @Author qinfeng
*
*/
@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry){
// 设置允许跨域的路由
registry.addMapping("/**")
// 设置允许跨域请求的域名------------修改此行
.allowedOrigins("*")
// 是否允许证书(cookies)
.allowCredentials(true)
// 设置允许的方法
.allowedMethods("*")
// 跨域允许时间
.maxAge(3600);
}
}

25
payment-base-app/src/main/java/com/base/springcloud/aspect/config/PayConfigurer.java

@ -0,0 +1,25 @@
package com.base.springcloud.aspect.config;
import com.base.springcloud.aspect.interceptor.PayInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
public class PayConfigurer implements WebMvcConfigurer {
@Autowired
private PayInterceptor payInterceptor;
// 拦截器请求 :'/merchant/**','/payment/**'
@Override
public void addInterceptors(InterceptorRegistry registry){
registry.addInterceptor(payInterceptor).addPathPatterns("/merchant/**","/payment/**");
}
// 跨域配置
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowCredentials(true).allowedOrigins("*").allowedMethods("GET", "PUT", "DELETE", "POST", "OPTIONS").maxAge(3600);
}
}

3
payment-base-app/src/main/java/com/base/springcloud/constant/RedisConfig.java → payment-base-app/src/main/java/com/base/springcloud/aspect/config/RedisConfig.java

@ -1,6 +1,7 @@
package com.base.springcloud.constant; package com.base.springcloud.aspect.config;
import com.base.springcloud.constant.FastJson2JsonRedisSerializer;
import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;

52
payment-base-app/src/main/java/com/base/springcloud/aspect/interceptor/PayInterceptor.java

@ -0,0 +1,52 @@
package com.base.springcloud.aspect.interceptor;
import com.base.springcloud.aspect.annotation.LoginRequired;
import com.base.springcloud.util.TokenUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class PayInterceptor implements HandlerInterceptor {
@Autowired
private TokenUtils tokenUtils;
// 在业务处理器处理请求之前被调用
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
LoginRequired loginRequired;
// 根据注解拦截请求
if (handler instanceof HandlerMethod) {
loginRequired = ((HandlerMethod)handler).getMethodAnnotation(LoginRequired.class);
} else {
return true;
}
// 说明此方法没有LoginRequired注解
if (loginRequired == null)
return true;
// token数据验证
tokenUtils.verifyToken(request);
// 部门信息获取
if(loginRequired.department())
tokenUtils.departmentInfo(request);
return true;
}
// 在业务处理器处理请求执行完成后
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView){
};
// 在DispatcherServlet完全处理完请求后被调用
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex){
}
}

15
payment-base-app/src/main/java/com/base/springcloud/bo/RefundBO.java

@ -9,24 +9,21 @@ import java.math.BigDecimal;
@Data @Data
public class RefundBO extends MchConfigEntity implements Serializable { public class RefundBO extends MchConfigEntity implements Serializable {
// 销售退款单据号 // 退款单据
private String billRefundNo; private String billId;
// 原交易订单号即支付订单 // 原订单编
private String origOrderNo; private String origOrderNo;
// 原订单金额
private BigDecimal orderAmount;
// 退款订单号 // 退款订单号
private String refundNo; private String refundNo;
// 退款原因
private String reason;
// 退款金额 // 退款金额
private BigDecimal refundAmount; private BigDecimal refundAmount;
// 退款通知地址 // 退款通知地址
private String notifyUrl; private String notifyUrl;
// 退款原因
private String reason;
} }

15
payment-base-app/src/main/java/com/base/springcloud/constant/ErrorConstant.java

@ -3,11 +3,16 @@ package com.base.springcloud.constant;
public enum ErrorConstant { public enum ErrorConstant {
SUECCESS("RBS00000","交易成功!"), SUECCESS("RBS00000","交易成功!"),
NULL_OBJ("RBS00001","参数异常!"), INVALID_TOKEN("RBS00001","无效TOKEN!"),
MCH_ID_PARAM_ERR("RBS00002","商户支付配置异常!"), ILLEGAL_TOKEN("RBS00002","非法TOKEN!"),
BILL_AMOUNT_ERR("RBS00003","销售单合计结算金额异常!"), NULL_OBJ("RBS00003","参数异常!"),
BILL_INVALID("RBS00004","无效销售单据!"), MCH_ID_PARAM_ERR("RBS00004","商户支付配置异常!"),
BILL_WRITE_OFF_FAIL("RBS00005","销售单据核销失败!"); BILL_AMOUNT_ERR("RBS00005","销售单合计结算金额异常!"),
BILL_INVALID("RBS00006","无效销售单据!"),
BILL_WRITE_OFF_FAIL("RBS00007","销售单据核销失败!"),
USER_ERROR("RBS00008","请核对用户信息!"),
USER_LOCKING("RBS00009","账号已被锁定,请联系管理员!"),
TOKEN_EXPIRATION_DATE("RBS00010","TOKEN已失效,请重新登录!");
private String code; private String code;
private String message; private String message;

25
payment-base-app/src/main/java/com/base/springcloud/constant/PaymentConstant.java

@ -2,38 +2,19 @@ package com.base.springcloud.constant;
public interface PaymentConstant { public interface PaymentConstant {
String CHARACTER_SET = "00"; // 字符集默认 : 00 - GBK
String CALLBACK_URL = "www.baidu.com"; // 页面通知地址
String NOTIFY_URL = "www.baidu.com"; // 后台通知地址
String SIGN_TYPE = "RSA"; // 签名类型
String TOKEN_PREFIX = "prefix_user_token_"; // TOKEN前缀
String WAIT = "W"; // 等待付款 String WAIT = "W"; // 等待付款
String SUECCESS = "S"; // 支付成功
String WX_SUCCESS = "SUCCESS"; // 微信支付成功状态 String WX_SUCCESS = "SUCCESS"; // 微信支付成功状态
String REFUND = "R"; // 退款成功
String CANCLE = "C"; // 撤销
String WEC = "WEC"; // 微信
String QRCWC = "QRCWC";
String AL = "AL"; // 支付宝
String QRCAL = "QRCAL";
String CP = "CP"; // 云闪付
String QRCCP = "QRCCP";
String HB = "HB"; // 和包
String QRCHB = "QRCHB";
String NATIVE = "Native"; // Native支付 String NATIVE = "Native"; // Native支付
String H5 = "H5"; // H5支付 String H5 = "H5"; // H5支付
String JSAPI = "Jsapi"; // JSAPI支付 String JSAPI = "Jsapi"; // JSAPI支付
String ORDER_QUEUE = "order_queue"; // 订单队列
String ORDER_LOCK_PREFIX = "ORDER_KEY:"; // 订单锁前缀 String ORDER_LOCK_PREFIX = "ORDER_KEY:"; // 订单锁前缀
String DEFAULT_MCH_ID = "1537100771"; // 默认商户ID String DEFAULT_MCH_ID = "1537100771"; // 默认商户ID
String METHOD_GET = "GET"; // GET请求
String METHOD_POST = "POST"; // POST请求
String WX_ORDER_QUERY_URL = "https://api.mch.weixin.qq.com/v3/pay/transactions/out-trade-no/"; String WX_ORDER_QUERY_URL = "https://api.mch.weixin.qq.com/v3/pay/transactions/out-trade-no/";
} }

22
payment-base-app/src/main/java/com/base/springcloud/controller/PaymentController.java

@ -1,10 +1,13 @@
package com.base.springcloud.controller; package com.base.springcloud.controller;
import com.base.springcloud.aspect.annotation.LoginRequired;
import com.base.springcloud.base.CommonResult;
import com.base.springcloud.base.ReportResult; import com.base.springcloud.base.ReportResult;
import com.base.springcloud.bo.OrderBO; import com.base.springcloud.bo.OrderBO;
import com.base.springcloud.constant.PaymentConstant; import com.base.springcloud.bo.RefundBO;
import com.base.springcloud.dto.NativePlaceOrderDTO; import com.base.springcloud.constant.ErrorConstant;
import com.base.springcloud.service.PaymentService; import com.base.springcloud.service.PaymentService;
import com.base.springcloud.service.RefundService;
import com.base.springcloud.util.ParameterUtil; import com.base.springcloud.util.ParameterUtil;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@ -15,9 +18,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
@RestController @RestController
@Slf4j @Slf4j
@Api(tags="支付管理") @Api(tags="支付管理")
@ -30,11 +30,23 @@ public class PaymentController {
@Autowired @Autowired
private PaymentService paymentService; private PaymentService paymentService;
@Autowired
private RefundService refundService;
@ApiOperation(value = "native下单", notes = "微信native下单") @ApiOperation(value = "native下单", notes = "微信native下单")
@LoginRequired(department=true)
@GetMapping("/nativePlaceOrder") @GetMapping("/nativePlaceOrder")
public ReportResult nativePlaceOrder(@RequestParam String salesBillId) { public ReportResult nativePlaceOrder(@RequestParam String salesBillId) {
OrderBO orderBO = parameterUtil.nativePlaceOrderBefore(salesBillId); OrderBO orderBO = parameterUtil.nativePlaceOrderBefore(salesBillId);
String codeUrl = paymentService.placeOrder(orderBO); String codeUrl = paymentService.placeOrder(orderBO);
return new ReportResult(parameterUtil.nativePlaceOrderAfter(codeUrl)); return new ReportResult(parameterUtil.nativePlaceOrderAfter(codeUrl));
} }
@ApiOperation(value = "退款", notes = "微信退款")
@GetMapping("/refund")
public CommonResult refund(@RequestParam String billId) {
RefundBO refundBO = parameterUtil.refundBefore(billId);
refundService.refund(refundBO);
return new CommonResult(ErrorConstant.SUECCESS.getCode(), ErrorConstant.SUECCESS.getMessage(),null);
}
} }

22
payment-base-app/src/main/java/com/base/springcloud/dao/UserMapper.java

@ -0,0 +1,22 @@
package com.base.springcloud.dao;
import com.base.springcloud.entity.User;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
@Repository
public interface UserMapper {
int deleteByPrimaryKey(String id);
int insert(User record);
int insertSelective(User record);
User selectByPrimaryKey(String id);
int updateByPrimaryKeySelective(User record);
int updateByPrimaryKey(User record);
User getUser(@Param("userName") String userName);
}

62
payment-base-app/src/main/java/com/base/springcloud/entity/User.java

@ -0,0 +1,62 @@
package com.base.springcloud.entity;
import lombok.Data;
import java.util.Date;
@Data
public class User {
private String id;
private String userName;
private String realName;
private String password;
private String salt;
private String avatar;
private Date birthday;
private Integer sex;
private String email ;
private String phone;
private String orgCode;
private Integer status;
private Integer delFlag;
private String thirdId;
private String thirdType;
private Integer activitiSync;
private String workNo;
private String post;
private String telephone;
private String createBy;
private Date createTime;
private String updateBy;
private Date updateTime;
private Integer userIdentity;
private String departIds;
private String ctCompanyId;
private Integer accountType;
}

12
payment-base-app/src/main/java/com/base/springcloud/service/RefundService.java

@ -0,0 +1,12 @@
package com.base.springcloud.service;
import com.base.springcloud.bo.RefundBO;
public interface RefundService {
/**
* 退款
* @param refundBO
*/
void refund(RefundBO refundBO);
}

19
payment-base-app/src/main/java/com/base/springcloud/service/UserService.java

@ -0,0 +1,19 @@
package com.base.springcloud.service;
import com.base.springcloud.entity.User;
public interface UserService {
/**
* 获取用户信息
* @param userName
*/
User getUser(String userName);
/**
* TOKEN有效期校验
* @param token
* @param user
*/
void TokenValidity(String token, User user);
}

8
payment-base-app/src/main/java/com/base/springcloud/service/WecPaymentService.java

@ -3,17 +3,9 @@ package com.base.springcloud.service;
import com.base.springcloud.bo.CodePayBO; import com.base.springcloud.bo.CodePayBO;
import com.base.springcloud.bo.OrderBO; import com.base.springcloud.bo.OrderBO;
import com.base.springcloud.bo.RefundBO; import com.base.springcloud.bo.RefundBO;
import com.base.springcloud.entity.Order;
public interface WecPaymentService { public interface WecPaymentService {
/**
* Native支付
* @param orderBO
* @return
*/
String nativePay(OrderBO orderBO);
/** /**
* 微信Native支付 * 微信Native支付
* @param orderBO * @param orderBO

2
payment-base-app/src/main/java/com/base/springcloud/service/imp/MerchantServiceImp.java

@ -12,7 +12,7 @@ import com.base.springcloud.util.FtpUtil;
import com.base.springcloud.wxsdk.MyConfig; import com.base.springcloud.wxsdk.MyConfig;
import com.base.springcloud.wxsdk.WXPay; import com.base.springcloud.wxsdk.WXPay;
import com.base.springcloud.wxsdk.WXPayUtil; import com.base.springcloud.wxsdk.WXPayUtil;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;

14
payment-base-app/src/main/java/com/base/springcloud/service/imp/RefundServiceImp.java

@ -0,0 +1,14 @@
package com.base.springcloud.service.imp;
import com.base.springcloud.bo.RefundBO;
import com.base.springcloud.service.RefundService;
import org.springframework.stereotype.Service;
@Service
public class RefundServiceImp implements RefundService {
@Override
public void refund(RefundBO refundBO) {
}
}

64
payment-base-app/src/main/java/com/base/springcloud/service/imp/UserServiceImp.java

@ -0,0 +1,64 @@
package com.base.springcloud.service.imp;
import com.base.springcloud.aspect.annotation.BusinessException;
import com.base.springcloud.constant.ErrorConstant;
import com.base.springcloud.constant.PaymentConstant;
import com.base.springcloud.dao.UserMapper;
import com.base.springcloud.entity.User;
import com.base.springcloud.service.UserService;
import com.base.springcloud.util.JwtUtil;
import com.base.springcloud.util.RedisUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import java.util.Optional;
@Service
public class UserServiceImp implements UserService {
@Autowired
private UserMapper userMapper;
@Autowired
private RedisUtil redisService;
/**
* 获取用户信息
* @param userName
* @return
*/
@Override
@Cacheable(cacheNames="cache:pay:user", key="#userName")
public User getUser(String userName) {
User user = userMapper.getUser(userName);
if(!Optional.ofNullable(user).isPresent()){
throw new BusinessException(ErrorConstant.USER_ERROR);
}
// 判断用户状态
if (user.getStatus() != 1) {
throw new BusinessException(ErrorConstant.USER_LOCKING);
}
return user;
}
/**
* TOKEN有效期校验
* @param token
* @param user
*/
@Override
public void TokenValidity(String token, User user) {
String redisToken = String.valueOf(redisService.get(PaymentConstant.TOKEN_PREFIX + token));
if(StringUtils.isBlank(redisToken))
throw new BusinessException(ErrorConstant.TOKEN_EXPIRATION_DATE);
if(!JwtUtil.verify(redisToken, user.getUserName(), user.getPassword()))
throw new BusinessException(ErrorConstant.ILLEGAL_TOKEN);
String newAuthorization = JwtUtil.sign(user.getUserName(), user.getPassword());
// 设置Toekn缓存有效时间
redisService.set(PaymentConstant.TOKEN_PREFIX + token, newAuthorization);
redisService.expire(PaymentConstant.TOKEN_PREFIX + token, JwtUtil.EXPIRE_TIME * 2 / 1000);
}
}

105
payment-base-app/src/main/java/com/base/springcloud/service/imp/WecPaymentServiceImp.java

@ -13,13 +13,7 @@ import com.base.springcloud.service.WecPaymentService;
import com.base.springcloud.util.DateUtil; import com.base.springcloud.util.DateUtil;
import com.base.springcloud.util.DecimalUtil; import com.base.springcloud.util.DecimalUtil;
import com.base.springcloud.wxsdk.WxpayUtils; import com.base.springcloud.wxsdk.WxpayUtils;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.hisun.iposm.HiCASignUtil2;
import com.hisun.iposm.HiiposmUtil;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.text.StrBuilder;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -32,103 +26,6 @@ public class WecPaymentServiceImp implements WecPaymentService {
Logger logger = LoggerFactory.getLogger(WecPaymentServiceImp.class); Logger logger = LoggerFactory.getLogger(WecPaymentServiceImp.class);
/**
* Native支付
*
* @param orderBO
* @return
*/
@Override
public String nativePay(OrderBO orderBO) {
String res = "";
HiiposmUtil util = new HiiposmUtil();
String merchantId = orderBO.getMchId();
String privateKey = orderBO.getMchPrivateKey();
String req_url = "https://ipos.10086.cn/cps/cmpayService";
String type = "AggregPayAmt";
String version = "1.0.0";
String deviceInfo = "sb001";
String spbillCreateIp = "8.8.8.8";
String storeBrand = "RBS-MD";
String cityBranchNm = "RBS-PP";
String createDate = DateUtil.getYearMonthDay2();
String amount = DecimalUtil.multiple(orderBO.getSaleBill().getTotalAmount(),100).setScale(0, BigDecimal.ROUND_DOWN).toPlainString();
// 签名数据
Order order = orderBO.getOrder();
StringBuilder signDate = new StringBuilder();
signDate.append(PaymentConstant.CHARACTER_SET);
signDate.append(PaymentConstant.CALLBACK_URL);
signDate.append(PaymentConstant.NOTIFY_URL);
signDate.append(merchantId);
signDate.append(order.getRequestNo());
signDate.append(PaymentConstant.SIGN_TYPE);
signDate.append(type);
signDate.append(version);
signDate.append(amount);
signDate.append(createDate);
switch (order.getOrderType()) {
case PaymentConstant.HB:
signDate.append(PaymentConstant.QRCHB);
break;
case PaymentConstant.WEC:
signDate.append(PaymentConstant.QRCWC);
break;
case PaymentConstant.AL:
signDate.append(PaymentConstant.QRCAL);
break;
case PaymentConstant.CP:
signDate.append(PaymentConstant.QRCCP);
break;
}
signDate.append(order.getOrderNo());
signDate.append(order.getGoodName());
signDate.append(order.getReserved());
logger.warn("signData:{}", signDate.toString());
try {
HiCASignUtil2 rsa = new HiCASignUtil2(privateKey, "111");
StrBuilder requestParam = new StrBuilder();
requestParam.append("hmac=").append(rsa.sign(signDate.toString()));
requestParam.append("&characterSet=").append(PaymentConstant.CHARACTER_SET);
requestParam.append("&callbackUrl=").append(PaymentConstant.CALLBACK_URL);
requestParam.append("&notifyUrl=").append(PaymentConstant.NOTIFY_URL);
requestParam.append("&merchantId=").append(merchantId);
requestParam.append("&requestId=").append(order.getRequestNo());
requestParam.append("&signType=").append(PaymentConstant.SIGN_TYPE);
requestParam.append("&type=").append(type);
requestParam.append("&version=").append(version);
requestParam.append("&amount=").append(amount);
requestParam.append("&orderDate=").append(createDate);
requestParam.append("&payWay=");
switch (order.getOrderType()) {
case PaymentConstant.HB:
requestParam.append(PaymentConstant.QRCHB);
break;
case PaymentConstant.WEC:
requestParam.append(PaymentConstant.QRCWC);
break;
case PaymentConstant.AL:
requestParam.append(PaymentConstant.QRCAL);
break;
case PaymentConstant.CP:
requestParam.append(PaymentConstant.QRCCP);
break;
}
requestParam.append("&orderId=").append(order.getOrderNo());
requestParam.append("&productName=").append(order.getGoodName());
requestParam.append("&reserved1=").append(order.getReserved());
requestParam.append("&deviceInfo=").append(deviceInfo);
requestParam.append("&spbillCreateIp=").append(spbillCreateIp);
requestParam.append("&storeBrand=").append(storeBrand);
requestParam.append("&cityBranchNm=").append(cityBranchNm);
res = util.sendAndRecv(req_url, requestParam.toString(), PaymentConstant.CHARACTER_SET);
logger.info("Native支付下单参数响应: {}" , res);
} catch (Exception e) {
e.printStackTrace();
}
return StringUtils.isNotBlank(res) ? util.getValue(res, "sessionId") : "";
}
/** /**
* 微信Native支付 * 微信Native支付
* @param orderBO * @param orderBO
@ -167,7 +64,7 @@ public class WecPaymentServiceImp implements WecPaymentService {
wxpayRefundVo.setTransaction_id(refundBO.getOrigOrderNo()); wxpayRefundVo.setTransaction_id(refundBO.getOrigOrderNo());
wxpayRefundVo.setReason(refundBO.getReason()); wxpayRefundVo.setReason(refundBO.getReason());
WxpayRefundVo.WxRefundAmountVo wxRefundAmountVo = new WxpayRefundVo.WxRefundAmountVo(); WxpayRefundVo.WxRefundAmountVo wxRefundAmountVo = new WxpayRefundVo.WxRefundAmountVo();
wxRefundAmountVo.setTotal(refundBO.getOrderAmount()); wxRefundAmountVo.setTotal(refundBO.getRefundAmount());
wxRefundAmountVo.setRefund(refundBO.getRefundAmount()); wxRefundAmountVo.setRefund(refundBO.getRefundAmount());
wxpayRefundVo.setNotify_url(refundBO.getNotifyUrl()); wxpayRefundVo.setNotify_url(refundBO.getNotifyUrl());
wxpayRefundVo.setOut_refund_no(refundBO.getRefundNo()); wxpayRefundVo.setOut_refund_no(refundBO.getRefundNo());

101
payment-base-app/src/main/java/com/base/springcloud/util/JwtUtil.java

@ -0,0 +1,101 @@
package com.base.springcloud.util;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTDecodeException;
import com.auth0.jwt.interfaces.DecodedJWT;
import java.util.Date;
/**
* @Author Scott
* @Date 2018-07-12 14:23
* @Desc JWT工具类
**/
public class JwtUtil {
/**
* Token过期时间30分钟用户登录过期时间是此时间的两倍以token在reids缓存时间为准
*/
public static final long EXPIRE_TIME = 30 * 60 * 1000;
/**
* 校验token是否正确
*
* @param token 密钥
* @param secret 用户的密码
* @return 是否正确
*/
public static boolean verify(String token, String username, String secret) {
try {
// 根据密码生成JWT效验器
Algorithm algorithm = Algorithm.HMAC256(secret);
JWTVerifier verifier = JWT.require(algorithm).withClaim("username", username).build();
// 效验TOKEN
DecodedJWT jwt = verifier.verify(token);
return true;
} catch (Exception exception) {
return false;
}
}
/**
* 获得token中的信息无需secret解密也能获得
*
* @return token中包含的用户名
*/
public static String getUsername(String token) {
try {
DecodedJWT jwt = JWT.decode(token);
return jwt.getClaim("username").asString();
} catch (JWTDecodeException e) {
return null;
}
}
/**
* 获得token中的信息无需secret解密也能获得
*
* @return token中包含的用户名
*/
public static String getPlatform(String token) {
try {
DecodedJWT jwt = JWT.decode(token);
return jwt.getClaim("platform").asString();
} catch (JWTDecodeException e) {
return null;
}
}
/**
* 生成签名,5min后过期
*
* @param username 用户名
* @param secret 用户的密码
* @return 加密的token
*/
public static String sign(String username, String secret) {
Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME);
Algorithm algorithm = Algorithm.HMAC256(secret);
// 附带username信息
return JWT.create().withClaim("username", username).withExpiresAt(date).sign(algorithm);
}
/**
* 生成签名,5min后过期
*
* @param username 用户名
* @param secret 用户的密码
* @return 加密的token
*/
public static String sign(String username, String secret,String platform) {
Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME);
Algorithm algorithm = Algorithm.HMAC256(secret);
// 附带username信息
return JWT.create().withClaim("username", username).withClaim("platform",platform).withExpiresAt(date).sign(algorithm);
}
}

16
payment-base-app/src/main/java/com/base/springcloud/util/ParameterUtil.java

@ -1,9 +1,10 @@
package com.base.springcloud.util; package com.base.springcloud.util;
import com.base.springcloud.bo.OrderBO; import com.base.springcloud.bo.OrderBO;
import com.base.springcloud.bo.RefundBO;
import com.base.springcloud.constant.PaymentConstant; import com.base.springcloud.constant.PaymentConstant;
import com.base.springcloud.dto.NativePlaceOrderDTO; import com.base.springcloud.dto.NativePlaceOrderDTO;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.ArrayList; import java.util.ArrayList;
@ -13,7 +14,7 @@ import java.util.List;
public class ParameterUtil { public class ParameterUtil {
/** /**
* native下单入设置 * native下单入设置
* @param billId * @param billId
* @return * @return
*/ */
@ -39,4 +40,15 @@ public class ParameterUtil {
nativePlaceOrderDTOList.add(nativePlaceOrderDTO); nativePlaceOrderDTOList.add(nativePlaceOrderDTO);
return nativePlaceOrderDTOList; return nativePlaceOrderDTOList;
} }
/**
* 退款入参设置
* @param billId
* @return
*/
public RefundBO refundBefore(String billId) {
RefundBO refundBO = new RefundBO();
refundBO.setBillId(billId);
return refundBO;
}
} }

568
payment-base-app/src/main/java/com/base/springcloud/util/RedisUtil.java

@ -0,0 +1,568 @@
package com.base.springcloud.util;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
/**
* redis 工具类
* @Author Scott
*
*/
@Component
public class RedisUtil {
@Resource
private RedisTemplate<String, Object> redisTemplate;
/**
* 指定缓存失效时间
*
* @param key
* @param time 时间()
* @return
*/
public boolean expire(String key, long time) {
try {
if (time > 0) {
redisTemplate.expire(key, time, TimeUnit.SECONDS);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 根据key 获取过期时间
*
* @param key 不能为null
* @return 时间() 返回0代表为永久有效
*/
public long getExpire(String key) {
return redisTemplate.getExpire(key, TimeUnit.SECONDS);
}
/**
* 判断key是否存在
*
* @param key
* @return true 存在 false不存在
*/
public boolean hasKey(String key) {
try {
return redisTemplate.hasKey(key);
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 删除缓存
*
* @param key 可以传一个值 或多个
*/
@SuppressWarnings("unchecked")
public void del(String... key) {
if (key != null && key.length > 0) {
if (key.length == 1) {
redisTemplate.delete(key[0]);
} else {
redisTemplate.delete((Collection<String>) CollectionUtils.arrayToList(key));
}
}
}
// ============================String=============================
/**
* 普通缓存获取
*
* @param key
* @return
*/
public Object get(String key) {
return key == null ? null : redisTemplate.opsForValue().get(key);
}
/**
* 普通缓存放入
*
* @param key
* @param value
* @return true成功 false失败
*/
public boolean set(String key, Object value) {
try {
redisTemplate.opsForValue().set(key, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 普通缓存放入并设置时间
*
* @param key
* @param value
* @param time 时间() time要大于0 如果time小于等于0 将设置无限期
* @return true成功 false 失败
*/
public boolean set(String key, Object value, long time) {
try {
if (time > 0) {
redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
} else {
set(key, value);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 递增
*
* @param key
* @return
*/
public long incr(String key, long delta) {
if (delta < 0) {
throw new RuntimeException("递增因子必须大于0");
}
return redisTemplate.opsForValue().increment(key, delta);
}
/**
* 递减
*
* @param key
* @return
*/
public long decr(String key, long delta) {
if (delta < 0) {
throw new RuntimeException("递减因子必须大于0");
}
return redisTemplate.opsForValue().increment(key, -delta);
}
// ================================Map=================================
/**
* HashGet
*
* @param key 不能为null
* @param item 不能为null
* @return
*/
public Object hget(String key, String item) {
return redisTemplate.opsForHash().get(key, item);
}
/**
* 获取hashKey对应的所有键值
*
* @param key
* @return 对应的多个键值
*/
public Map<Object, Object> hmget(String key) {
return redisTemplate.opsForHash().entries(key);
}
/**
* HashSet
*
* @param key
* @param map 对应多个键值
* @return true 成功 false 失败
*/
public boolean hmset(String key, Map<String, Object> map) {
try {
redisTemplate.opsForHash().putAll(key, map);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* HashSet 并设置时间
*
* @param key
* @param map 对应多个键值
* @param time 时间()
* @return true成功 false失败
*/
public boolean hmset(String key, Map<String, Object> map, long time) {
try {
redisTemplate.opsForHash().putAll(key, map);
if (time > 0) {
expire(key, time);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 向一张hash表中放入数据,如果不存在将创建
*
* @param key
* @param item
* @param value
* @return true 成功 false失败
*/
public boolean hset(String key, String item, Object value) {
try {
redisTemplate.opsForHash().put(key, item, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 向一张hash表中放入数据,如果不存在将创建
*
* @param key
* @param item
* @param value
* @param time 时间() 注意:如果已存在的hash表有时间,这里将会替换原有的时间
* @return true 成功 false失败
*/
public boolean hset(String key, String item, Object value, long time) {
try {
redisTemplate.opsForHash().put(key, item, value);
if (time > 0) {
expire(key, time);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 删除hash表中的值
*
* @param key 不能为null
* @param item 可以使多个 不能为null
*/
public void hdel(String key, Object... item) {
redisTemplate.opsForHash().delete(key, item);
}
/**
* 判断hash表中是否有该项的值
*
* @param key 不能为null
* @param item 不能为null
* @return true 存在 false不存在
*/
public boolean hHasKey(String key, String item) {
return redisTemplate.opsForHash().hasKey(key, item);
}
/**
* hash递增 如果不存在,就会创建一个 并把新增后的值返回
*
* @param key
* @param item
* @param by 要增加几(大于0)
* @return
*/
public double hincr(String key, String item, double by) {
return redisTemplate.opsForHash().increment(key, item, by);
}
/**
* hash递减
*
* @param key
* @param item
* @param by 要减少记(小于0)
* @return
*/
public double hdecr(String key, String item, double by) {
return redisTemplate.opsForHash().increment(key, item, -by);
}
// ============================set=============================
/**
* 根据key获取Set中的所有值
*
* @param key
* @return
*/
public Set<Object> sGet(String key) {
try {
return redisTemplate.opsForSet().members(key);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 根据value从一个set中查询,是否存在
*
* @param key
* @param value
* @return true 存在 false不存在
*/
public boolean sHasKey(String key, Object value) {
try {
return redisTemplate.opsForSet().isMember(key, value);
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 将数据放入set缓存
*
* @param key
* @param values 可以是多个
* @return 成功个数
*/
public long sSet(String key, Object... values) {
try {
return redisTemplate.opsForSet().add(key, values);
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
/**
* 将set数据放入缓存
*
* @param key
* @param time 时间()
* @param values 可以是多个
* @return 成功个数
*/
public long sSetAndTime(String key, long time, Object... values) {
try {
Long count = redisTemplate.opsForSet().add(key, values);
if (time > 0) {
expire(key, time);
}
return count;
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
/**
* 获取set缓存的长度
*
* @param key
* @return
*/
public long sGetSetSize(String key) {
try {
return redisTemplate.opsForSet().size(key);
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
/**
* 移除值为value的
*
* @param key
* @param values 可以是多个
* @return 移除的个数
*/
public long setRemove(String key, Object... values) {
try {
Long count = redisTemplate.opsForSet().remove(key, values);
return count;
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
// ===============================list=================================
/**
* 获取list缓存的内容
*
* @param key
* @param start 开始
* @param end 结束 0 -1代表所有值
* @return
*/
public List<Object> lGet(String key, long start, long end) {
try {
return redisTemplate.opsForList().range(key, start, end);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 获取list缓存的长度
*
* @param key
* @return
*/
public long lGetListSize(String key) {
try {
return redisTemplate.opsForList().size(key);
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
/**
* 通过索引 获取list中的值
*
* @param key
* @param index 索引 index>=0时 0 表头1 第二个元素依次类推index<0时-1表尾-2倒数第二个元素依次类推
* @return
*/
public Object lGetIndex(String key, long index) {
try {
return redisTemplate.opsForList().index(key, index);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 将list放入缓存
*
* @param key
* @param value
* @return
*/
public boolean lSet(String key, Object value) {
try {
redisTemplate.opsForList().rightPush(key, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 将list放入缓存
*
* @param key
* @param value
* @param time 时间()
* @return
*/
public boolean lSet(String key, Object value, long time) {
try {
redisTemplate.opsForList().rightPush(key, value);
if (time > 0) {
expire(key, time);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 将list放入缓存
*
* @param key
* @param value
* @return
*/
public boolean lSet(String key, List<Object> value) {
try {
redisTemplate.opsForList().rightPushAll(key, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 将list放入缓存
*
* @param key
* @param value
* @param time 时间()
* @return
*/
public boolean lSet(String key, List<Object> value, long time) {
try {
redisTemplate.opsForList().rightPushAll(key, value);
if (time > 0) {
expire(key, time);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 根据索引修改list中的某条数据
*
* @param key
* @param index 索引
* @param value
* @return
*/
public boolean lUpdateIndex(String key, long index, Object value) {
try {
redisTemplate.opsForList().set(key, index, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 移除N个值为value
*
* @param key
* @param count 移除多少个
* @param value
* @return 移除的个数
*/
public long lRemove(String key, long count, Object value) {
try {
Long remove = redisTemplate.opsForList().remove(key, count, value);
return remove;
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
}

57
payment-base-app/src/main/java/com/base/springcloud/util/TokenUtils.java

@ -0,0 +1,57 @@
package com.base.springcloud.util;
import com.base.springcloud.aspect.annotation.BusinessException;
import com.base.springcloud.constant.ErrorConstant;
import com.base.springcloud.entity.User;
import com.base.springcloud.service.UserService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletRequest;
@Component
public class TokenUtils {
@Autowired
private UserService userService;
private static UserService service;
@PostConstruct
public void init() {
service= this.userService;
}
/**
* Token验证
*/
public static void verifyToken(HttpServletRequest request) {
// 从请求头获取token
String token = request.getHeader("X-Access-Token");
// 如果请求头没有token,则从请求参数中取
if (StringUtils.isBlank(token))
token = request.getParameter("token");
// 如果还是没有token,则抛异常
if (StringUtils.isBlank(token))
throw new BusinessException(ErrorConstant.INVALID_TOKEN);
// 从token里获取用户姓名
String username = JwtUtil.getUsername(token);
if (StringUtils.isEmpty(username))
throw new BusinessException(ErrorConstant.ILLEGAL_TOKEN);
// 查询用户信息
User user = service.getUser(username);
// 校验token是否超时失效 & 或者账号密码是否错误
service.TokenValidity(token,user);
}
public static void departmentInfo(HttpServletRequest request) {
}
}

12
payment-base-app/src/main/resources/application.yml

@ -1,7 +1,7 @@
server: server:
port: 5080 #服务端口 port: 5080 #服务端口
servlet: servlet:
context-path: / context-path: /rbs-pay
#spring相关配置 #spring相关配置
spring: spring:
application: application:
@ -9,9 +9,9 @@ spring:
datasource: datasource:
type: com.alibaba.druid.pool.DruidDataSource #当前数据源操作类型 type: com.alibaba.druid.pool.DruidDataSource #当前数据源操作类型
driver-class-name: org.gjt.mm.mysql.Driver #数据库驱动包 driver-class-name: org.gjt.mm.mysql.Driver #数据库驱动包
url: jdbc:mysql://rm-uf672osw4deemr4yt.mysql.rds.aliyuncs.com:3306/rbs_erp?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false url: jdbc:mysql://106.14.81.251:3306/rbs_erp_test?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false
username: hnrr username: root
password: hnrr@0b6759c29a8e password: hnrr%%360
#rabbitmq 配置 #rabbitmq 配置
#rabbitmq: #rabbitmq:
#host: localhost #host: localhost
@ -22,11 +22,11 @@ spring:
redis: redis:
database: 10 database: 10
# 地址 # 地址
host: r-uf643kmbsoz7ledq2j.redis.rds.aliyuncs.com host: 127.0.0.1
# 端口,默认为6379 # 端口,默认为6379
port: 6379 port: 6379
# 密码 # 密码
password: rds@53798a0fa6ce password: 123456
# 连接超时时间 # 连接超时时间
timeout: 10s timeout: 10s
lettuce: lettuce:

360
payment-base-app/src/main/resources/com/base/payment/mapper/UserMapper.xml

@ -0,0 +1,360 @@
<?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.base.springcloud.dao.UserMapper">
<resultMap id="BaseResultMap" type="com.base.springcloud.entity.User">
<id column="id" jdbcType="VARCHAR" property="id" />
<result column="username" jdbcType="VARCHAR" property="userName" />
<result column="realname" jdbcType="VARCHAR" property="realName" />
<result column="password" jdbcType="VARCHAR" property="password" />
<result column="salt" jdbcType="VARCHAR" property="salt" />
<result column="avatar" jdbcType="VARCHAR" property="avatar" />
<result column="birthday" jdbcType="TIMESTAMP" property="birthday" />
<result column="sex" jdbcType="INTEGER" property="sex" />
<result column="email" jdbcType="VARCHAR" property="email " />
<result column="phone" jdbcType="VARCHAR" property="phone" />
<result column="org_code" jdbcType="VARCHAR" property="orgCode" />
<result column="status" jdbcType="INTEGER" property="status" />
<result column="del_flag" jdbcType="INTEGER" property="delFlag" />
<result column="third_id" jdbcType="VARCHAR" property="thirdId" />
<result column="third_type" jdbcType="VARCHAR" property="thirdType" />
<result column="activiti_sync" jdbcType="INTEGER" property="activitiSync" />
<result column="work_no" jdbcType="VARCHAR" property="workNo" />
<result column="post" jdbcType="VARCHAR" property="post" />
<result column="telephone" jdbcType="VARCHAR" property="telephone" />
<result column="create_by" jdbcType="VARCHAR" property="createBy" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
<result column="update_by" jdbcType="VARCHAR" property="updateBy" />
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
<result column="user_identity" jdbcType="INTEGER" property="userIdentity" />
<result column="depart_ids" jdbcType="VARCHAR" property="departIds" />
<result column="ct_company_id" jdbcType="TIMESTAMP" property="ctCompanyId" />
<result column="account_type" jdbcType="INTEGER" property="accountType" />
</resultMap>
<sql id="Base_Column_List">
id, username, realname, password, salt, avatar, birthday, sex, email, phone, org_code,
status, del_flag, third_id, third_type, activiti_sync, work_no, post, telephone,
create_by, create_time, update_by, update_time, user_identity, depart_ids, ct_company_id,
account_type
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from sys_user
where id = #{id,jdbcType=VARCHAR}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.String">
delete from sys_user
where id = #{id,jdbcType=VARCHAR}
</delete>
<insert id="insert" parameterType="com.base.springcloud.entity.User">
insert into sys_user (id, username, realname,
password, salt, avatar,
birthday, sex, email,
phone, org_code, status,
del_flag, third_id, third_type,
activiti_sync, work_no, post,
telephone, create_by, create_time,
update_by, update_time, user_identity,
depart_ids, ct_company_id, account_type
)
values (#{id,jdbcType=VARCHAR}, #{userName,jdbcType=VARCHAR}, #{realName,jdbcType=VARCHAR},
#{password,jdbcType=VARCHAR}, #{salt,jdbcType=VARCHAR}, #{avatar,jdbcType=VARCHAR},
#{birthday,jdbcType=TIMESTAMP}, #{sex,jdbcType=INTEGER}, #{email ,jdbcType=VARCHAR},
#{phone,jdbcType=VARCHAR}, #{orgCode,jdbcType=VARCHAR}, #{status,jdbcType=INTEGER},
#{delFlag,jdbcType=INTEGER}, #{thirdId,jdbcType=VARCHAR}, #{thirdType,jdbcType=VARCHAR},
#{activitiSync,jdbcType=INTEGER}, #{workNo,jdbcType=VARCHAR}, #{post,jdbcType=VARCHAR},
#{telephone,jdbcType=VARCHAR}, #{createBy,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP},
#{updateBy,jdbcType=VARCHAR}, #{updateTime,jdbcType=TIMESTAMP}, #{userIdentity,jdbcType=INTEGER},
#{departIds,jdbcType=VARCHAR}, #{ctCompanyId,jdbcType=TIMESTAMP}, #{accountType,jdbcType=INTEGER}
)
</insert>
<insert id="insertSelective" parameterType="com.base.springcloud.entity.User">
insert into sys_user
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="userName != null">
username,
</if>
<if test="realName != null">
realname,
</if>
<if test="password != null">
password,
</if>
<if test="salt != null">
salt,
</if>
<if test="avatar != null">
avatar,
</if>
<if test="birthday != null">
birthday,
</if>
<if test="sex != null">
sex,
</if>
<if test="email != null">
email,
</if>
<if test="phone != null">
phone,
</if>
<if test="orgCode != null">
org_code,
</if>
<if test="status != null">
status,
</if>
<if test="delFlag != null">
del_flag,
</if>
<if test="thirdId != null">
third_id,
</if>
<if test="thirdType != null">
third_type,
</if>
<if test="activitiSync != null">
activiti_sync,
</if>
<if test="workNo != null">
work_no,
</if>
<if test="post != null">
post,
</if>
<if test="telephone != null">
telephone,
</if>
<if test="createBy != null">
create_by,
</if>
<if test="createTime != null">
create_time,
</if>
<if test="updateBy != null">
update_by,
</if>
<if test="updateTime != null">
update_time,
</if>
<if test="userIdentity != null">
user_identity,
</if>
<if test="departIds != null">
depart_ids,
</if>
<if test="ctCompanyId != null">
ct_company_id,
</if>
<if test="accountType != null">
account_type,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id,jdbcType=VARCHAR},
</if>
<if test="userName != null">
#{userName,jdbcType=VARCHAR},
</if>
<if test="realName != null">
#{realName,jdbcType=VARCHAR},
</if>
<if test="password != null">
#{password,jdbcType=VARCHAR},
</if>
<if test="salt != null">
#{salt,jdbcType=VARCHAR},
</if>
<if test="avatar != null">
#{avatar,jdbcType=VARCHAR},
</if>
<if test="birthday != null">
#{birthday,jdbcType=TIMESTAMP},
</if>
<if test="sex != null">
#{sex,jdbcType=INTEGER},
</if>
<if test="email != null">
#{email ,jdbcType=VARCHAR},
</if>
<if test="phone != null">
#{phone,jdbcType=VARCHAR},
</if>
<if test="orgCode != null">
#{orgCode,jdbcType=VARCHAR},
</if>
<if test="status != null">
#{status,jdbcType=INTEGER},
</if>
<if test="delFlag != null">
#{delFlag,jdbcType=INTEGER},
</if>
<if test="thirdId != null">
#{thirdId,jdbcType=VARCHAR},
</if>
<if test="thirdType != null">
#{thirdType,jdbcType=VARCHAR},
</if>
<if test="activitiSync != null">
#{activitiSync,jdbcType=INTEGER},
</if>
<if test="workNo != null">
#{workNo,jdbcType=VARCHAR},
</if>
<if test="post != null">
#{post,jdbcType=VARCHAR},
</if>
<if test="telephone != null">
#{telephone,jdbcType=VARCHAR},
</if>
<if test="createBy != null">
#{createBy,jdbcType=VARCHAR},
</if>
<if test="createTime != null">
#{createTime,jdbcType=TIMESTAMP},
</if>
<if test="updateBy != null">
#{updateBy,jdbcType=VARCHAR},
</if>
<if test="updateTime != null">
#{updateTime,jdbcType=TIMESTAMP},
</if>
<if test="userIdentity != null">
#{userIdentity,jdbcType=INTEGER},
</if>
<if test="departIds != null">
#{departIds,jdbcType=VARCHAR},
</if>
<if test="ctCompanyId != null">
#{ctCompanyId,jdbcType=TIMESTAMP},
</if>
<if test="accountType != null">
#{accountType,jdbcType=INTEGER},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.base.springcloud.entity.User">
update sys_user
<set>
<if test="userName != null">
username = #{userName,jdbcType=VARCHAR},
</if>
<if test="realName != null">
realname = #{realName,jdbcType=VARCHAR},
</if>
<if test="password != null">
password = #{password,jdbcType=VARCHAR},
</if>
<if test="salt != null">
salt = #{salt,jdbcType=VARCHAR},
</if>
<if test="avatar != null">
avatar = #{avatar,jdbcType=VARCHAR},
</if>
<if test="birthday != null">
birthday = #{birthday,jdbcType=TIMESTAMP},
</if>
<if test="sex != null">
sex = #{sex,jdbcType=INTEGER},
</if>
<if test="email != null">
email = #{email ,jdbcType=VARCHAR},
</if>
<if test="phone != null">
phone = #{phone,jdbcType=VARCHAR},
</if>
<if test="orgCode != null">
org_code = #{orgCode,jdbcType=VARCHAR},
</if>
<if test="status != null">
status = #{status,jdbcType=INTEGER},
</if>
<if test="delFlag != null">
del_flag = #{delFlag,jdbcType=INTEGER},
</if>
<if test="thirdId != null">
third_id = #{thirdId,jdbcType=VARCHAR},
</if>
<if test="thirdType != null">
third_type = #{thirdType,jdbcType=VARCHAR},
</if>
<if test="activitiSync != null">
activiti_sync = #{activitiSync,jdbcType=INTEGER},
</if>
<if test="workNo != null">
work_no = #{workNo,jdbcType=VARCHAR},
</if>
<if test="post != null">
post = #{post,jdbcType=VARCHAR},
</if>
<if test="telephone != null">
telephone = #{telephone,jdbcType=VARCHAR},
</if>
<if test="createBy != null">
create_by = #{createBy,jdbcType=VARCHAR},
</if>
<if test="createTime != null">
create_time = #{createTime,jdbcType=TIMESTAMP},
</if>
<if test="updateBy != null">
update_by = #{updateBy,jdbcType=VARCHAR},
</if>
<if test="updateTime != null">
update_time = #{updateTime,jdbcType=TIMESTAMP},
</if>
<if test="userIdentity != null">
user_identity = #{userIdentity,jdbcType=INTEGER},
</if>
<if test="departIds != null">
depart_ids = #{departIds,jdbcType=VARCHAR},
</if>
<if test="ctCompanyId != null">
ct_company_id = #{ctCompanyId,jdbcType=TIMESTAMP},
</if>
<if test="accountType != null">
account_type = #{accountType,jdbcType=INTEGER},
</if>
</set>
where id = #{id,jdbcType=VARCHAR}
</update>
<update id="updateByPrimaryKey" parameterType="com.base.springcloud.entity.User">
update sys_user
set username = #{userName,jdbcType=VARCHAR},
realname = #{realName,jdbcType=VARCHAR},
password = #{password,jdbcType=VARCHAR},
salt = #{salt,jdbcType=VARCHAR},
avatar = #{avatar,jdbcType=VARCHAR},
birthday = #{birthday,jdbcType=TIMESTAMP},
sex = #{sex,jdbcType=INTEGER},
email = #{email ,jdbcType=VARCHAR},
phone = #{phone,jdbcType=VARCHAR},
org_code = #{orgCode,jdbcType=VARCHAR},
status = #{status,jdbcType=INTEGER},
del_flag = #{delFlag,jdbcType=INTEGER},
third_id = #{thirdId,jdbcType=VARCHAR},
third_type = #{thirdType,jdbcType=VARCHAR},
activiti_sync = #{activitiSync,jdbcType=INTEGER},
work_no = #{workNo,jdbcType=VARCHAR},
post = #{post,jdbcType=VARCHAR},
telephone = #{telephone,jdbcType=VARCHAR},
create_by = #{createBy,jdbcType=VARCHAR},
create_time = #{createTime,jdbcType=TIMESTAMP},
update_by = #{updateBy,jdbcType=VARCHAR},
update_time = #{updateTime,jdbcType=TIMESTAMP},
user_identity = #{userIdentity,jdbcType=INTEGER},
depart_ids = #{departIds,jdbcType=VARCHAR},
ct_company_id = #{ctCompanyId,jdbcType=TIMESTAMP},
account_type = #{accountType,jdbcType=INTEGER}
where id = #{id,jdbcType=VARCHAR}
</update>
<select id="getUser" parameterType="java.lang.String" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from sys_user
where username = #{userName,jdbcType=VARCHAR}
</select>
</mapper>

68
payment-base-app/src/main/resources/generatorConfig.xml

@ -27,7 +27,7 @@
<!-- targetPackage:指定生成的model生成所在的包名 --> <!-- targetPackage:指定生成的model生成所在的包名 -->
<!-- targetProject:指定在该项目下所在的路径 --> <!-- targetProject:指定在该项目下所在的路径 -->
<javaModelGenerator targetPackage="com.base.springcloud.entity" <javaModelGenerator targetPackage="com.base.springcloud.entity"
targetProject="src/main/java"> targetProject="payment-base-app/src/main/java">
<!-- 是否允许子包,即targetPackage.schemaName.tableName --> <!-- 是否允许子包,即targetPackage.schemaName.tableName -->
<property name="enableSubPackages" value="false"/> <property name="enableSubPackages" value="false"/>
<!-- 是否对model添加构造函数 --> <!-- 是否对model添加构造函数 -->
@ -40,7 +40,7 @@
<!-- 02 指定sql映射文件生成的位置 --> <!-- 02 指定sql映射文件生成的位置 -->
<sqlMapGenerator targetPackage="com.base.payment.mapper" <sqlMapGenerator targetPackage="com.base.payment.mapper"
targetProject="src/main/resources"> targetProject="payment-base-app/src/main/resources">
<!-- 是否允许子包,即targetPackage.schemaName.tableName --> <!-- 是否允许子包,即targetPackage.schemaName.tableName -->
<property name="enableSubPackages" value="false"/> <property name="enableSubPackages" value="false"/>
</sqlMapGenerator> </sqlMapGenerator>
@ -50,7 +50,7 @@
<!-- type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象 --> <!-- type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象 -->
<!-- type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口 --> <!-- type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口 -->
<javaClientGenerator targetPackage="com.base.springcloud.dao" <javaClientGenerator targetPackage="com.base.springcloud.dao"
targetProject="src/main/java" type="XMLMAPPER"> targetProject="payment-base-app/src/main/java" type="XMLMAPPER">
<!-- 是否在当前路径下新加一层schema,false路径com.oop.eksp.user.model, true:com.oop.eksp.user.model.[schemaName] --> <!-- 是否在当前路径下新加一层schema,false路径com.oop.eksp.user.model, true:com.oop.eksp.user.model.[schemaName] -->
<property name="enableSubPackages" value="false"/> <property name="enableSubPackages" value="false"/>
</javaClientGenerator> </javaClientGenerator>
@ -60,55 +60,39 @@
<!-- tableName为对应的数据库表 --> <!-- tableName为对应的数据库表 -->
<!-- domainObjectName是要生成的实体类 --> <!-- domainObjectName是要生成的实体类 -->
<!-- enable*ByExample是否生成 example类 --> <!-- enable*ByExample是否生成 example类 -->
<table tableName="stk_io_bill" domainObjectName="SaleBill" <table tableName="sys_user" domainObjectName="User"
enableCountByExample="false" enableDeleteByExample="false" enableCountByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" enableUpdateByExample="false"> enableSelectByExample="false" enableUpdateByExample="false">
<!-- 忽略列,不生成bean 字段 --> <!-- 忽略列,不生成bean 字段 -->
<!-- <ignoreColumn column="FRED" /> --> <!-- <ignoreColumn column="FRED" /> -->
<!-- 指定列的java数据类型 --> <!-- 指定列的java数据类型 -->
<columnOverride column="id" property="id" jdbcType="VARCHAR" /> <columnOverride column="id" property="id" jdbcType="VARCHAR" />
<columnOverride column="bill_no" property="billNo" jdbcType="VARCHAR" /> <columnOverride column="username" property="userName" jdbcType="VARCHAR" />
<columnOverride column="api_key" property="appKey" jdbcType="VARCHAR" /> <columnOverride column="realname" property="realName" jdbcType="VARCHAR" />
<columnOverride column="stock_io_type" property="stockIoType" jdbcType="VARCHAR" /> <columnOverride column="password" property="password" jdbcType="VARCHAR" />
<columnOverride column="is_rubric" property="isRubric" jdbcType="VARCHAR" /> <columnOverride column="salt" property="salt" jdbcType="VARCHAR" />
<columnOverride column="bill_date" property="billDate" jdbcType="TIMESTAMP" /> <columnOverride column="avatar" property="avatar" jdbcType="VARCHAR" />
<columnOverride column="source_id" property="sourceId" jdbcType="VARCHAR" /> <columnOverride column="birthday" property="birthday" jdbcType="TIMESTAMP" />
<columnOverride column="source_type" property="sourceType" jdbcType="VARCHAR" /> <columnOverride column="sex" property="sex" jdbcType="TINYINT" />
<columnOverride column="clerk_id" property="clerkId" jdbcType="VARCHAR" /> <columnOverride column="email" property="email " jdbcType="VARCHAR" />
<columnOverride column="handler_id" property="handlerId" jdbcType="VARCHAR" /> <columnOverride column="phone" property="phone" jdbcType="VARCHAR" />
<columnOverride column="has_rp" property="hasRp" jdbcType="INTEGER" /> <columnOverride column="org_code" property="orgCode" jdbcType="VARCHAR" />
<columnOverride column="supplier_id" property="supplierId" jdbcType="VARCHAR" /> <columnOverride column="status" property="status" jdbcType="TINYINT" />
<columnOverride column="customer_id" property="customerId" jdbcType="VARCHAR" /> <columnOverride column="del_flag" property="delFlag" jdbcType="TINYINT" />
<columnOverride column="remark" property="remark" jdbcType="VARCHAR" /> <columnOverride column="third_id" property="thirdId" jdbcType="VARCHAR" />
<columnOverride column="approver_id" property="approverId" jdbcType="VARCHAR" /> <columnOverride column="third_type" property="thirdType" jdbcType="VARCHAR" />
<columnOverride column="flow_id" property="flowId" jdbcType="VARCHAR" /> <columnOverride column="activiti_sync" property="activitiSync" jdbcType="TINYINT" />
<columnOverride column="is_approved" property="isApproved" jdbcType="INTEGER" /> <columnOverride column="work_no" property="workNo" jdbcType="VARCHAR" />
<columnOverride column="effective_time" property="effectiveTime" jdbcType="TIMESTAMP" /> <columnOverride column="post" property="post" jdbcType="VARCHAR" />
<columnOverride column="is_voided" property="isVoided" jdbcType="INTEGER" /> <columnOverride column="telephone" property="telephone" jdbcType="VARCHAR" />
<columnOverride column="is_closed" property="isClosed" jdbcType="INTEGER" />
<columnOverride column="sys_org_code" property="sysOrgCode" jdbcType="VARCHAR" />
<columnOverride column="create_by" property="createBy" jdbcType="VARCHAR" /> <columnOverride column="create_by" property="createBy" jdbcType="VARCHAR" />
<columnOverride column="create_time" property="createTime" jdbcType="TIMESTAMP" /> <columnOverride column="create_time" property="createTime" jdbcType="TIMESTAMP" />
<columnOverride column="update_by" property="updateBy" jdbcType="VARCHAR" /> <columnOverride column="update_by" property="updateBy" jdbcType="VARCHAR" />
<columnOverride column="update_time" property="updateTime" jdbcType="TIMESTAMP" /> <columnOverride column="update_time" property="updateTime" jdbcType="TIMESTAMP" />
<columnOverride column="version" property="version" jdbcType="INTEGER" /> <columnOverride column="user_identity" property="userIdentity" jdbcType="TINYINT" />
<columnOverride column="ct_company_id" property="ctCompanyId" jdbcType="VARCHAR" /> <columnOverride column="depart_ids" property="departIds" jdbcType="VARCHAR" />
<columnOverride column="attachment_id" property="attachmentId" jdbcType="VARCHAR" /> <columnOverride column="ct_company_id" property="ctCompanyId" jdbcType="TIMESTAMP" />
<columnOverride column="pay_amount" property="payAmount" jdbcType="DECIMAL" /> <columnOverride column="account_type" property="accountType" jdbcType="INTEGER" />
<columnOverride column="billStatus" property="billStatus" jdbcType="VARCHAR" />
<columnOverride column="totalAmount" property="totalAmount" jdbcType="DECIMAL" />
<columnOverride column="lock_amount" property="lockAmount" jdbcType="DECIMAL" />
<columnOverride column="source_no" property="sourceNo" jdbcType="VARCHAR" />
<columnOverride column="is_same_settle" property="isSameSettle" jdbcType="INTEGER" />
<columnOverride column="is_turn_sale" property="isTurnSale" jdbcType="VARCHAR" />
<columnOverride column="logistics_no" property="logisticsNo" jdbcType="VARCHAR" />
<columnOverride column="is_platform_supplier" property="isPlatformSupplier" jdbcType="INTEGER" />
<columnOverride column="sale_no" property="saleNo" jdbcType="VARCHAR" />
<columnOverride column="is_delivery" property="isDelivery" jdbcType="INTEGER" />
<columnOverride column="is_auto" property="isAuto" jdbcType="INTEGER" />
<columnOverride column="attachment" property="attachment" jdbcType="VARCHAR" />
<columnOverride column="bill_proc_status" property="billProcStatus" jdbcType="VARCHAR" />
<columnOverride column="is_ref_stk" property="isRefStk" jdbcType="INTEGER" />
</table> </table>
</context> </context>
</generatorConfiguration> </generatorConfiguration>
Loading…
Cancel
Save