diff --git a/.idea/libraries/bcprov_ext_jdk15on_1_46.xml b/.idea/libraries/bcprov_ext_jdk15on_1_46.xml
new file mode 100644
index 0000000..b13b5ac
--- /dev/null
+++ b/.idea/libraries/bcprov_ext_jdk15on_1_46.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/payment-base-app/pom.xml b/payment-base-app/pom.xml
index cc59b2a..97bada9 100644
--- a/payment-base-app/pom.xml
+++ b/payment-base-app/pom.xml
@@ -72,5 +72,25 @@
springfox-swagger-ui
2.9.2
+
+
+
+ com.github.wechatpay-apiv3
+ wechatpay-apache-httpclient
+ 0.4.2
+
+
+
+ org.apache.httpcomponents
+ httpclient
+ 4.5.11
+
+
+ commons-codec
+ commons-codec
+
+
+
+
\ No newline at end of file
diff --git a/payment-base-app/src/main/java/com/base/springcloud/PaymentBaseApplication.java b/payment-base-app/src/main/java/com/base/springcloud/PaymentBaseApplication.java
index c2727e4..41ccf3a 100644
--- a/payment-base-app/src/main/java/com/base/springcloud/PaymentBaseApplication.java
+++ b/payment-base-app/src/main/java/com/base/springcloud/PaymentBaseApplication.java
@@ -1,5 +1,6 @@
package com.base.springcloud;
+import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@@ -8,6 +9,7 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2;
@SpringBootApplication
@EnableEurekaClient
@EnableSwagger2
+@MapperScan("com.base.springcloud.dao")
public class PaymentBaseApplication {
public static void main(String[] args) {
diff --git a/payment-base-app/src/main/java/com/base/springcloud/base/BaseEntity.java b/payment-base-app/src/main/java/com/base/springcloud/base/BaseEntity.java
index bb5f57e..85e37c1 100644
--- a/payment-base-app/src/main/java/com/base/springcloud/base/BaseEntity.java
+++ b/payment-base-app/src/main/java/com/base/springcloud/base/BaseEntity.java
@@ -1,6 +1,8 @@
package com.base.springcloud.base;
+import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
@@ -8,5 +10,7 @@ import java.util.Date;
@Data
public class BaseEntity implements Serializable {
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date timeStamp;
}
diff --git a/payment-base-app/src/main/java/com/base/springcloud/constant/ErrorConstant.java b/payment-base-app/src/main/java/com/base/springcloud/constant/ErrorConstant.java
index cf68c70..0ecf6d1 100644
--- a/payment-base-app/src/main/java/com/base/springcloud/constant/ErrorConstant.java
+++ b/payment-base-app/src/main/java/com/base/springcloud/constant/ErrorConstant.java
@@ -2,6 +2,7 @@ package com.base.springcloud.constant;
public enum ErrorConstant {
+ SUECCESS("RBS00000","交易成功"),
NULL_OBJ("RBS00001","参数异常");
private String code;
diff --git a/payment-base-app/src/main/java/com/base/springcloud/constant/PaymentConstant.java b/payment-base-app/src/main/java/com/base/springcloud/constant/PaymentConstant.java
new file mode 100644
index 0000000..563f9aa
--- /dev/null
+++ b/payment-base-app/src/main/java/com/base/springcloud/constant/PaymentConstant.java
@@ -0,0 +1,23 @@
+package com.base.springcloud.constant;
+
+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 WAIT = "W"; // 等待付款
+ String SUECCESS = "S"; // 支付成功
+ String REFUND = "R"; // 退款成功
+ String CANCLE = "C"; // 撤销
+
+ String WEC = "WEC"; // 微信
+ String QRCWC = "QRCWC";
+
+ String AL = "AL"; // 支付宝
+ String QRCAL = "QRCAL";
+
+ String CP = "CP"; // 云闪付
+ String QRCCP = "QRCCP";
+}
diff --git a/payment-base-app/src/main/java/com/base/springcloud/controller/MerchantController.java b/payment-base-app/src/main/java/com/base/springcloud/controller/MerchantController.java
index 18f6968..bad87b3 100644
--- a/payment-base-app/src/main/java/com/base/springcloud/controller/MerchantController.java
+++ b/payment-base-app/src/main/java/com/base/springcloud/controller/MerchantController.java
@@ -2,7 +2,6 @@ package com.base.springcloud.controller;
import com.base.springcloud.base.CommonResult;
import com.base.springcloud.constant.ErrorConstant;
-import com.base.springcloud.entity.Merchant;
import com.base.springcloud.service.MerchantService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -22,11 +21,10 @@ public class MerchantController {
@Autowired
private MerchantService merchantService;
- @ApiOperation(value = "商户添加", notes = "商户信息添加接口")
- @PostMapping("/add")
- public CommonResult create(@RequestBody Merchant merchant) {
- // TODO 业务逻辑
- System.out.println("进来create方法了!");
+ @ApiOperation(value = "商户支付信息配置", notes = "商户信息配置接口")
+ @PostMapping("/merchantConfig")
+ public CommonResult create() {
+
return new CommonResult(ErrorConstant.NULL_OBJ.getCode(), ErrorConstant.NULL_OBJ.getMessage(), null);
}
}
diff --git a/payment-base-app/src/main/java/com/base/springcloud/controller/PaymentController.java b/payment-base-app/src/main/java/com/base/springcloud/controller/PaymentController.java
new file mode 100644
index 0000000..c9ba351
--- /dev/null
+++ b/payment-base-app/src/main/java/com/base/springcloud/controller/PaymentController.java
@@ -0,0 +1,31 @@
+package com.base.springcloud.controller;
+
+import com.base.springcloud.base.CommonResult;
+import com.base.springcloud.constant.ErrorConstant;
+import com.base.springcloud.entity.Order;
+import com.base.springcloud.service.PaymentService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@Slf4j
+@Api(tags="支付管理")
+@RequestMapping("/payment")
+public class PaymentController {
+
+ @Autowired
+ private PaymentService paymentService;
+
+ @ApiOperation(value = "native下单", notes = "微信native下单")
+ @PostMapping("/nativePlaceOrder")
+ public CommonResult nativePlaceOrder(@RequestBody Order order) {
+ String codeUrl = paymentService.placeOrder(order);
+ return new CommonResult(ErrorConstant.SUECCESS.getCode(), ErrorConstant.SUECCESS.getMessage(), codeUrl);
+ }
+}
diff --git a/payment-base-app/src/main/java/com/base/springcloud/dao/MerchantMapper.java b/payment-base-app/src/main/java/com/base/springcloud/dao/MerchantMapper.java
deleted file mode 100644
index 79c8390..0000000
--- a/payment-base-app/src/main/java/com/base/springcloud/dao/MerchantMapper.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.base.springcloud.dao;
-
-import com.base.springcloud.entity.Merchant;
-
-public interface MerchantMapper {
- int deleteByPrimaryKey(String id);
-
- int insert(Merchant record);
-
- int insertSelective(Merchant record);
-
- Merchant selectByPrimaryKey(String id);
-
- int updateByPrimaryKeySelective(Merchant record);
-
- int updateByPrimaryKey(Merchant record);
-}
\ No newline at end of file
diff --git a/payment-base-app/src/main/java/com/base/springcloud/dao/OrderMapper.java b/payment-base-app/src/main/java/com/base/springcloud/dao/OrderMapper.java
index 5ed1128..d98a513 100644
--- a/payment-base-app/src/main/java/com/base/springcloud/dao/OrderMapper.java
+++ b/payment-base-app/src/main/java/com/base/springcloud/dao/OrderMapper.java
@@ -1,8 +1,11 @@
package com.base.springcloud.dao;
import com.base.springcloud.entity.Order;
+import org.springframework.stereotype.Repository;
+@Repository
public interface OrderMapper {
+
int deleteByPrimaryKey(String id);
int insert(Order record);
diff --git a/payment-base-app/src/main/java/com/base/springcloud/entity/Merchant.java b/payment-base-app/src/main/java/com/base/springcloud/entity/Merchant.java
deleted file mode 100644
index 65dca08..0000000
--- a/payment-base-app/src/main/java/com/base/springcloud/entity/Merchant.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.base.springcloud.entity;
-
-import com.base.springcloud.base.BaseEntity;
-import lombok.Data;
-
-@Data
-public class Merchant extends BaseEntity {
-
- private String id;
-
- private String merchantId;
-
- private String merchantName;
-
- private String cityStoreName;
-
- private String storeBrandName;
-
- private String signType;
-
- private String privateKey;
-
- private String deviceInfo;
-
- private String spbillCreateIp;
-
- private String notifyUrl;
-}
\ No newline at end of file
diff --git a/payment-base-app/src/main/java/com/base/springcloud/entity/Order.java b/payment-base-app/src/main/java/com/base/springcloud/entity/Order.java
index af06c10..5ba0957 100644
--- a/payment-base-app/src/main/java/com/base/springcloud/entity/Order.java
+++ b/payment-base-app/src/main/java/com/base/springcloud/entity/Order.java
@@ -1,7 +1,9 @@
package com.base.springcloud.entity;
import com.base.springcloud.base.BaseEntity;
+import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.util.Date;
@@ -13,8 +15,14 @@ public class Order extends BaseEntity {
private String orderNo;
+
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
+
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date expireTime;
private String requestNo;
@@ -27,5 +35,7 @@ public class Order extends BaseEntity {
private String orderType;
+ private String orderState;
+
private String reserved;
}
\ No newline at end of file
diff --git a/payment-base-app/src/main/java/com/base/springcloud/service/MerchantService.java b/payment-base-app/src/main/java/com/base/springcloud/service/MerchantService.java
index 038775d..c8a6481 100644
--- a/payment-base-app/src/main/java/com/base/springcloud/service/MerchantService.java
+++ b/payment-base-app/src/main/java/com/base/springcloud/service/MerchantService.java
@@ -1,8 +1,5 @@
package com.base.springcloud.service;
-import com.base.springcloud.entity.Merchant;
-
public interface MerchantService {
- void merchantAdd(Merchant merchant);
}
diff --git a/payment-base-app/src/main/java/com/base/springcloud/service/PaymentService.java b/payment-base-app/src/main/java/com/base/springcloud/service/PaymentService.java
new file mode 100644
index 0000000..4ad4660
--- /dev/null
+++ b/payment-base-app/src/main/java/com/base/springcloud/service/PaymentService.java
@@ -0,0 +1,9 @@
+package com.base.springcloud.service;
+
+import com.base.springcloud.entity.Order;
+
+public interface PaymentService {
+
+ // 下单
+ String placeOrder(Order order);
+}
diff --git a/payment-base-app/src/main/java/com/base/springcloud/service/WecPaymentService.java b/payment-base-app/src/main/java/com/base/springcloud/service/WecPaymentService.java
new file mode 100644
index 0000000..19194f5
--- /dev/null
+++ b/payment-base-app/src/main/java/com/base/springcloud/service/WecPaymentService.java
@@ -0,0 +1,8 @@
+package com.base.springcloud.service;
+
+import com.base.springcloud.entity.Order;
+
+public interface WecPaymentService {
+
+ String nativePay(Order order);
+}
diff --git a/payment-base-app/src/main/java/com/base/springcloud/service/imp/MerchantServiceImp.java b/payment-base-app/src/main/java/com/base/springcloud/service/imp/MerchantServiceImp.java
index cd8ba01..af68c39 100644
--- a/payment-base-app/src/main/java/com/base/springcloud/service/imp/MerchantServiceImp.java
+++ b/payment-base-app/src/main/java/com/base/springcloud/service/imp/MerchantServiceImp.java
@@ -1,14 +1,9 @@
package com.base.springcloud.service.imp;
-import com.base.springcloud.entity.Merchant;
import com.base.springcloud.service.MerchantService;
import org.springframework.stereotype.Service;
@Service
public class MerchantServiceImp implements MerchantService {
- @Override
- public void merchantAdd(Merchant merchant) {
- // TODO 添加商户逻辑
- }
}
diff --git a/payment-base-app/src/main/java/com/base/springcloud/service/imp/OrderServiceImp.java b/payment-base-app/src/main/java/com/base/springcloud/service/imp/OrderServiceImp.java
new file mode 100644
index 0000000..0ae73bf
--- /dev/null
+++ b/payment-base-app/src/main/java/com/base/springcloud/service/imp/OrderServiceImp.java
@@ -0,0 +1,29 @@
+package com.base.springcloud.service.imp;
+
+import com.base.springcloud.constant.PaymentConstant;
+import com.base.springcloud.dao.OrderMapper;
+import com.base.springcloud.entity.Order;
+import com.base.springcloud.service.OrderService;
+import com.base.springcloud.util.DecimalUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.UUID;
+
+@Service
+public class OrderServiceImp implements OrderService {
+
+ @Autowired
+ private OrderMapper orderMapper;
+
+ @Override
+ public void registerOrder(Order order) {
+ order.setId(UUID.randomUUID().toString().replace("-", ""));
+ order.setTimeStamp(new Date());
+ order.setOrderState(PaymentConstant.WAIT);
+ order.setOrderAmount(DecimalUtils.divide(order.getOrderAmount(),new BigDecimal(100)));
+ orderMapper.insert(order);
+ }
+}
diff --git a/payment-base-app/src/main/java/com/base/springcloud/service/imp/PaymentServiceImp.java b/payment-base-app/src/main/java/com/base/springcloud/service/imp/PaymentServiceImp.java
new file mode 100644
index 0000000..0ae73da
--- /dev/null
+++ b/payment-base-app/src/main/java/com/base/springcloud/service/imp/PaymentServiceImp.java
@@ -0,0 +1,34 @@
+package com.base.springcloud.service.imp;
+
+import com.base.springcloud.entity.Order;
+import com.base.springcloud.service.OrderService;
+import com.base.springcloud.service.PaymentService;
+import com.base.springcloud.service.WecPaymentService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class PaymentServiceImp implements PaymentService {
+
+ @Autowired
+ private OrderService orderService;
+
+ @Autowired
+ private WecPaymentService wecPaymentService;
+
+ @Override
+ public String placeOrder(Order order){
+ // 参数检查
+ parameterCheck(order);
+ // 登记订单
+ orderService.registerOrder(order);
+ // 请求微信生成二维码
+ String codeUrl = wecPaymentService.nativePay(order);
+ return codeUrl;
+ }
+
+ // 参数检查
+ private void parameterCheck(Order order) {
+
+ }
+}
diff --git a/payment-base-app/src/main/java/com/base/springcloud/service/imp/WecPaymentServiceImp.java b/payment-base-app/src/main/java/com/base/springcloud/service/imp/WecPaymentServiceImp.java
new file mode 100644
index 0000000..63d2d5a
--- /dev/null
+++ b/payment-base-app/src/main/java/com/base/springcloud/service/imp/WecPaymentServiceImp.java
@@ -0,0 +1,95 @@
+package com.base.springcloud.service.imp;
+
+import com.base.springcloud.constant.PaymentConstant;
+import com.base.springcloud.entity.Order;
+import com.base.springcloud.service.WecPaymentService;
+import com.base.springcloud.util.DateUtil;
+import com.hisun.iposm.HiCASignUtil2;
+import com.hisun.iposm.HiiposmUtil;
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang.text.StrBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+@Service
+public class WecPaymentServiceImp implements WecPaymentService {
+
+ Logger logger = LoggerFactory.getLogger(WecPaymentServiceImp.class);
+
+ @Override
+ public String nativePay(Order order) {
+ String res = "";
+ HiiposmUtil util = new HiiposmUtil();
+ String merchantId = "888027018000004";
+ String privateKey = "308204bc020100300d06092a864886f70d0101010500048204a6308204a202010002820101008fe86bc46878d127d0bd59b8d0ed81b5dd4066a8af2729ade7df76d4022ee9535de274d0a786e654bea82c6a6450c64cc428a79326583accbcf7724d38b5895dcd9eb542a8078ba0d9d8d2a69bd5890966aacdb6daea387b52ed662c2fef8932bd0f69155d7c1729d9da004920508dd4be72e78a0c33cbf847d3c4bce0cf2e42190e5166fea223544c1c0d7dc0fda964adc1deffce527fb75c13c802c37dd6071f071c220a8f6036c72fae13bf78c02b7fdefdc771298f05b85e341ec7e521d9d7b2d535bc16bae35c6d7b8abc670c5da46b4404ea164915d6cdd102c170c542839b0a386ce9eb46a741a11678320271d53253087c5ca44ac7851507cef9787902030100010282010061d895eda55b005b22029cce9cbfe041d77dc24f4f48417e8cf9d3c1b2fa528aec7add1241d5e72617bc20f6f5de35f65c298846f4fb687f6cbc926b0ef3dfc277dc4142611d4042cddc2ede3976a7064d583526ef11f1f5681d222b492c850c8a9fbfc3571cd8630c4cbd84fb03ca6bac52543bf8afff2f8126ebcdc0cd1d95abc8bc00d310240b16a3afbc5d0ac88a60005a2a0f149246513a4b2375142f2f41d1f84db337e834d65c76ff54291e0d45051be37dceaa7468f4becf3547905dba823ee9b5b449e24c97ea2fd74387a121018e595592735ae7234563bf1c204cd5e523169fb80838f6154c046b01f847f22e348d09210ad737ba1a9b43fbf50102818100de15a6916a0244c461305c8d8f0bd1df1f82279f9b4ae70966f61fc25d310825ccef8305146500f16154674be702f3d5f4ec639e9e03fd040c925ea1df18b19c1255f996045cd5dcd68dc0782b7760f9ce3f4279972a1a49f3a4cb8f0e2d2f2f5698667004cfdeca84335665870d95c2ab625074b73afba33aab1481be5c04dd02818100a5e278390b618190c686e8bbe91a29c2e8e9cdbea419b2725f5f7e59378f6c25fada22ff1cec891d250b75511c866c54f93d3ca05bba9e65eff2f29aab14a7ea3e83c73d9c876eaf6fc11504c5093ada16de6dac3588369ffb11f8154582d4ce3310d5fefdd94a6f18090a4a68e0ef85d4a8898b6b26e020986d0fef81a2ea4d02818036dce65f39ef0189f9f0768cc9efc392f937b00e2fd0db2e696f17fd6e0434dd11b9818679b951f84f71086ba9d002e8b22ecb955db7e283638fad2d13ee07c2648d34b128b6be6665e272cfbcfd2ac9cb77b9364c6fac3ae4a3ab5dd5c4b7c95bfd1e21422f0ffcbb97eb19fdb90f6c1de695b59fa6448fd86877126e3251490281807934611d6518687fecdeb3fc60d49200ed07b022046b163c853d13e7823614122818ec8b348a0ba134e90b5e29967a5f18014b63ebc20e6c73073386194cad67f5277a13a5643b568a342cf460375f3dec89b6dea5fa91d710aecf725368c5aea8173c14e54bb81c36169ce343805ee28d405bc777925f1ed1e0964d2c8e69dd02818073bfa2ced7b2911b5c8f9534bc5b0de8c13afeaf6d60ce5f0e6d3f732eb23a0c98586cbade606181b6c78825605c5d4b600f89aa08624c65dd649ffb093a914afe55b39943d1e10f509c67f5e344c73deaa5a10f94154a0df705942f98d8193675addb33d841a5a09f20c388898fda30b974cb9a4a6a74d5212d11a1f394971d";
+ 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();
+
+
+ // 签名数据
+ 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(order.getOrderAmount());
+ signDate.append(createDate);
+ switch (order.getOrderType()){
+ 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("¬ifyUrl=").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(order.getOrderAmount());
+ requestParam.append("&orderDate=").append(createDate);
+ requestParam.append("&payWay=");
+ switch (order.getOrderType()){
+ 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);
+ logger.warn("requestParam:{}",requestParam.toString());
+ res = util.sendAndRecv(req_url, requestParam.toString(), PaymentConstant.CHARACTER_SET);
+ logger.warn(res);
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ return StringUtils.isNotBlank(res)?util.getValue(res, "sessionId"):"";
+ }
+
+
+
+}
diff --git a/payment-base-app/src/main/java/com/base/springcloud/service/orderService.java b/payment-base-app/src/main/java/com/base/springcloud/service/orderService.java
new file mode 100644
index 0000000..3a0856a
--- /dev/null
+++ b/payment-base-app/src/main/java/com/base/springcloud/service/orderService.java
@@ -0,0 +1,9 @@
+package com.base.springcloud.service;
+
+import com.base.springcloud.entity.Order;
+
+public interface OrderService {
+
+ // 订单登记
+ void registerOrder(Order order);
+}
diff --git a/payment-base-app/src/main/java/com/base/springcloud/util/DateUtil.java b/payment-base-app/src/main/java/com/base/springcloud/util/DateUtil.java
new file mode 100644
index 0000000..34dc3af
--- /dev/null
+++ b/payment-base-app/src/main/java/com/base/springcloud/util/DateUtil.java
@@ -0,0 +1,532 @@
+package com.base.springcloud.util;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+
+/**
+ * 基于SimpleDateFormat的日期工具类
+ * @author zql
+ *
+ * SimpleDateFormat 是线程不安全的类,一般不要定义为 static变量,如果定义为static,必须加锁,或者使用 DateUtils工具类。
+ * 正例:注意线程安全,使用 DateUtils。亦推荐如下处理:
+ * private static final ThreadLocal df = new ThreadLocal() {
+ * @Override
+ * protected DateFormat initialValue() {
+ * return new SimpleDateFormat("yyyy-MM-dd");
+ * }
+ * };
+ * 说明:如果是JDK8 的应用,可以使用Instant代替Date,LocalDateTime代替Calendar,
+ * DateTimeFormatter代替 SimpleDateFormat,官方给出的解释:simple beautiful strong immutable thread-safe。
+ *
+ */
+public class DateUtil {
+
+ /**
+ * 年,格式:yyyy
+ */
+ private final static SimpleDateFormat YEAR = new SimpleDateFormat("yyyy");
+ /**
+ * 月,格式:MM
+ */
+ private final static SimpleDateFormat MONTH = new SimpleDateFormat("MM");
+ /**
+ * 日,格式:dd
+ */
+ private final static SimpleDateFormat DAY = new SimpleDateFormat("dd");
+ /**
+ * 小时,格式:HH
+ */
+ private final static SimpleDateFormat HOUR = new SimpleDateFormat("HH");
+ /**
+ * 分钟,格式:mm
+ */
+ private final static SimpleDateFormat MINUTE = new SimpleDateFormat("mm");
+ /**
+ * 秒钟,格式:ss
+ */
+ private final static SimpleDateFormat SECOND = new SimpleDateFormat("ss");
+ /**
+ * 年月日,格式:yyyy-MM-dd
+ */
+ private final static SimpleDateFormat YEAR_MONTH_DAY = new SimpleDateFormat("yyyy-MM-dd");
+ /**
+ * 年月日,格式:yyyyMMdd
+ */
+ private final static SimpleDateFormat YEAR_MONTH_DAY2 = new SimpleDateFormat("yyyyMMdd");
+ /**
+ * 年月日时分秒,格式:yyyy-MM-dd HH:mm:ss
+ */
+ private final static SimpleDateFormat DATE = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+ /**
+ * 获取系统当前年份,yyyy格式
+ *
+ * @return
+ */
+ public static String getYear() {
+ return YEAR.format(new Date());
+ }
+
+ /**
+ * 获取系统当前月份,MM格式
+ *
+ * @return
+ */
+ public static String getMonth() {
+ return MONTH.format(new Date());
+ }
+
+ /**
+ * 获取系统当前日期,dd格式
+ *
+ * @return
+ */
+ public static String getDay() {
+ return DAY.format(new Date());
+ }
+
+ /**
+ * 获取系统当前小时,HH格式
+ *
+ * @return
+ */
+ public static String getHour() {
+ return HOUR.format(new Date());
+ }
+
+ /**
+ * 获取系统当前分钟,mm格式
+ *
+ * @return
+ */
+ public static String getMinute() {
+ return MINUTE.format(new Date());
+ }
+
+ /**
+ * 获取系统当前秒钟,ss格式
+ *
+ * @return
+ */
+ public static String getSecond() {
+ return SECOND.format(new Date());
+ }
+
+ /**
+ * 获取系统当前年月日,yyyy-MM-dd格式
+ *
+ * @return
+ */
+ public static String getYearMonthDay() {
+ return YEAR_MONTH_DAY.format(new Date());
+ }
+
+ /**
+ * 获取系统当前年月日,yyyyMMdd格式
+ *
+ * @return
+ */
+ public static String getYearMonthDay2() {
+ return YEAR_MONTH_DAY2.format(new Date());
+ }
+
+ /**
+ * 获取系统当前日期时间,yyyy-MM-dd HH:mm:ss格式
+ *
+ * @return
+ */
+ public static String getDate() {
+ return DATE.format(new Date());
+ }
+
+ /**
+ * 根据传入的int数字获取系统当前时间
+ *
+ * @param format 格式类型
+ * 11 格式:yyyy-MM
+ * 12 格式:MM-dd
+ * 13 格式:yyyy-MM-dd
+ * 14 格式:yyyy-MM-dd HH:mm
+ * 15 格式:yyyy-MM-dd HH:mm:ss
+ * 21 格式:yyyyMM
+ * 22 格式:MMdd
+ * 23 格式:yyyyMMdd
+ * 24 格式:yyyyMMddHHmm
+ * 25 格式:yyyyMMddHHmmss
+ * 31 格式:yyyy/MM
+ * 32 格式:MM/dd
+ * 33 格式:yyyy/MM/dd
+ * 34 格式:yyyy/MM/dd HH:mm
+ * 35 格式:yyyy/MM/dd HH:mm:ss
+ * 41 格式:yyyy年MM月
+ * 42 格式:MM月dd日
+ * 43 格式:yyyy年MM月dd日
+ * 44 格式:yyyy年MM月dd日 HH时mm分
+ * 45 格式:yyyy年MM月dd日 HH时mm分ss秒
+ * 51 格式:HH:mm
+ * 52 格式:HH:mm:ss
+ * 53 格式:HH时mm分
+ * 54 格式:HH时mm分ss秒
+ * 默认格式yyyy-MM-dd
+ * @return 自定义的日期格式,共有24种
+ */
+ public static String getDateString(int format){
+ return getDefinedFormat(getYear(), getMonth(), getMonth(), getHour(), getMinute(), getSecond(),format);
+ }
+
+ /**
+ * 时间戳转换为日期格式,根据传入的int数字获取确定要转换成的格式
+ *
+ * @param times 时间戳
+ * @param format 格式类型
+ * 11 格式:yyyy-MM
+ * 12 格式:MM-dd
+ * 13 格式:yyyy-MM-dd
+ * 14 格式:yyyy-MM-dd HH:mm
+ * 15 格式:yyyy-MM-dd HH:mm:ss
+ * 21 格式:yyyyMM
+ * 22 格式:MMdd
+ * 23 格式:yyyyMMdd
+ * 24 格式:yyyyMMddHHmm
+ * 25 格式:yyyyMMddHHmmss
+ * 31 格式:yyyy/MM
+ * 32 格式:MM/dd
+ * 33 格式:yyyy/MM/dd
+ * 34 格式:yyyy/MM/dd HH:mm
+ * 35 格式:yyyy/MM/dd HH:mm:ss
+ * 41 格式:yyyy年MM月
+ * 42 格式:MM月dd日
+ * 43 格式:yyyy年MM月dd日
+ * 44 格式:yyyy年MM月dd日 HH时mm分
+ * 45 格式:yyyy年MM月dd日 HH时mm分ss秒
+ * 51 格式:HH:mm
+ * 52 格式:HH:mm:ss
+ * 53 格式:HH时mm分
+ * 54 格式:HH时mm分ss秒
+ * 默认格式yyyy-MM-dd
+ * @return 自定义的日期格式,共有24种
+ */
+ public static String getDateString(String times, int format){
+ long lt = new Long(times);
+ Date date = new Date(lt);
+ String year = YEAR.format(date);
+ String month = MONTH.format(date);
+ String day = DAY.format(date);
+ String hour = HOUR.format(date);
+ String minute = MINUTE.format(date);
+ String second = SECOND.format(date);
+ return getDefinedFormat(year, month, day, hour, minute, second, format);
+ }
+
+ /**
+ * 把日期类型转换成字符串形式,根据传入的int数字获取确定要转换成的格式
+ *
+ * @param date Date类型的日期
+ * @param format 格式类型
+ * 11 格式:yyyy-MM
+ * 12 格式:MM-dd
+ * 13 格式:yyyy-MM-dd
+ * 14 格式:yyyy-MM-dd HH:mm
+ * 15 格式:yyyy-MM-dd HH:mm:ss
+ * 21 格式:yyyyMM
+ * 22 格式:MMdd
+ * 23 格式:yyyyMMdd
+ * 24 格式:yyyyMMddHHmm
+ * 25 格式:yyyyMMddHHmmss
+ * 31 格式:yyyy/MM
+ * 32 格式:MM/dd
+ * 33 格式:yyyy/MM/dd
+ * 34 格式:yyyy/MM/dd HH:mm
+ * 35 格式:yyyy/MM/dd HH:mm:ss
+ * 41 格式:yyyy年MM月
+ * 42 格式:MM月dd日
+ * 43 格式:yyyy年MM月dd日
+ * 44 格式:yyyy年MM月dd日 HH时mm分
+ * 45 格式:yyyy年MM月dd日 HH时mm分ss秒
+ * 51 格式:HH:mm
+ * 52 格式:HH:mm:ss
+ * 53 格式:HH时mm分
+ * 54 格式:HH时mm分ss秒
+ * 默认格式yyyy-MM-dd
+ * @return 自定义的日期格式,共有24种
+ */
+ public static String getDateString(Date date, int format){
+ String year = YEAR.format(date);
+ String month = MONTH.format(date);
+ String day = DAY.format(date);
+ String hour = HOUR.format(date);
+ String minute = MINUTE.format(date);
+ String second = SECOND.format(date);
+ return getDefinedFormat(year, month, day, hour, minute, second, format);
+ }
+
+ /**
+ * 自定义日期字符串
+ *
+ * @param year 年
+ * @param month 月
+ * @param day 日
+ * @param hour 时
+ * @param minute 分
+ * @param second 秒
+ * @param format 格式类型
+ * 11 格式:yyyy-MM
+ * 12 格式:MM-dd
+ * 13 格式:yyyy-MM-dd
+ * 14 格式:yyyy-MM-dd HH:mm
+ * 15 格式:yyyy-MM-dd HH:mm:ss
+ * 21 格式:yyyyMM
+ * 22 格式:MMdd
+ * 23 格式:yyyyMMdd
+ * 24 格式:yyyyMMddHHmm
+ * 25 格式:yyyyMMddHHmmss
+ * 31 格式:yyyy/MM
+ * 32 格式:MM/dd
+ * 33 格式:yyyy/MM/dd
+ * 34 格式:yyyy/MM/dd HH:mm
+ * 35 格式:yyyy/MM/dd HH:mm:ss
+ * 41 格式:yyyy年MM月
+ * 42 格式:MM月dd日
+ * 43 格式:yyyy年MM月dd日
+ * 44 格式:yyyy年MM月dd日 HH时mm分
+ * 45 格式:yyyy年MM月dd日 HH时mm分ss秒
+ * 51 格式:HH:mm
+ * 52 格式:HH:mm:ss
+ * 53 格式:HH时mm分
+ * 54 格式:HH时mm分ss秒
+ * 默认格式yyyy-MM-dd
+ * @return
+ */
+ public static String getDefinedFormat(String year, String month, String day, String hour, String minute, String second, int format){
+ String dateStr = null;
+ switch (format) {
+ case 11:
+ dateStr = year + "-" + month;
+ break;
+ case 12:
+ dateStr = month + "-" +day;
+ break;
+ case 13:
+ dateStr = year + "-" + month + "-" +day;
+ break;
+ case 14:
+ dateStr = year + "-" + month + "-" +day + " " + hour +":"+minute;
+ break;
+ case 15:
+ dateStr = year + "-" + month + "-" +day + " " + hour +":" + minute + ":" + second;
+ break;
+ case 21:
+ dateStr = year + month;
+ break;
+ case 22:
+ dateStr = month + day;
+ break;
+ case 23:
+ dateStr = year + month + day;
+ break;
+ case 24:
+ dateStr = year + month +day + hour + minute;
+ break;
+ case 25:
+ dateStr = year + month + day + hour + minute + second;
+ break;
+ case 31:
+ dateStr = year + "/" + month;
+ break;
+ case 32:
+ dateStr = month + "/" +day;
+ break;
+ case 33:
+ dateStr = year + "/" + month + "/" +day;
+ break;
+ case 34:
+ dateStr = year + "/" + month + "/" +day + " " + hour +":"+minute;
+ break;
+ case 35:
+ dateStr = year + "/" + month + "/" +day + " " + hour +":" + minute + ":" + second;
+ break;
+ case 41:
+ dateStr = year + "年" + month + "月";
+ break;
+ case 42:
+ dateStr = month + "月" +day + "日";
+ break;
+ case 43:
+ dateStr = year + "年" + month + "月" +day + "日";
+ break;
+ case 44:
+ dateStr = year + "年" + month + "月" +day + "日" +" "+ hour + "时" + minute +"分";
+ break;
+ case 45:
+ dateStr = year + "年" + month + "月" +day + "日" +" "+ hour + "时" + minute + "分" +second+ "秒";
+ break;
+ case 51:
+ dateStr = hour + ":" + minute;
+ break;
+ case 52:
+ dateStr = hour + ":" + minute + ":" +second;
+ break;
+ case 53:
+ dateStr = hour + "时" + minute + "分";
+ break;
+ case 54:
+ dateStr = hour + "时" + minute + "分" +second + "秒";
+ break;
+ default:
+ dateStr = year + "-" +month+ "-" + day;
+ }
+ return dateStr;
+ }
+
+ /**
+ * 获取SimpleDateFormat的日期
+ *
+ * @param date 传入的日期
+ * @param format 自定义格式,例:yyyy-MM-dd
+ * @return
+ */
+ public static String getSimpleDateFormat(Date date, String format){
+ SimpleDateFormat sdf = new SimpleDateFormat(format);
+ return sdf.format(date);
+ }
+
+ /**
+ * 日期比较
+ *
+ * @param startDate 开始日期,格式yyyy-MM-dd
+ * @param endDate 结束日期,格式yyyy-MM-dd
+ * @return 如果startDate>endDate,返回1,startDate=endDate返回0,startDate fomatDate(endDate).getTime()) {
+ r = 1;
+ }
+ if (fomatDate(startDate).getTime() < fomatDate(endDate).getTime()) {
+ r = -1;
+ }
+ return r;
+ }
+
+ /**
+ * 格式化日期
+ *
+ * @param dateStr日期字符串,格式:yyyy-MM-dd
+ * @return 返回null说明格式错误
+ */
+ public static Date fomatDate(String dateStr) {
+ try {
+ return YEAR_MONTH_DAY.parse(dateStr);
+ } catch (ParseException e) {
+ return null;
+ }
+ }
+
+ /**
+ * 校验日期是否合法,格式:yyyy-MM-dd
+ *
+ * @param dateStr日期字符串
+ * @return
+ */
+ public static boolean isValidDate(String dateStr) {
+ try {
+ YEAR_MONTH_DAY.parse(dateStr);
+ return true;
+ } catch (Exception e) {
+ return false;
+ }
+ }
+
+ /**
+ * 校验日期是否合法
+ *
+ * @param dateStr 日期字符串
+ * @param format 格式,例:yyyy-MM-dd
+ * @return
+ */
+ public static boolean isValidDateFormat(String dateStr, String format) {
+ DateFormat fmt = new SimpleDateFormat(format);
+ try {
+ fmt.parse(dateStr);
+ return true;
+ } catch (Exception e) {
+ // 如果throw java.text.ParseException或者NullPointerException,就说明格式不对
+ return false;
+ }
+ }
+
+ /**
+ * 时间相减得到年份,不够365天算0年
+ *
+ * @param startDate 开始日期,格式yyyy-MM-dd
+ * @param endDate 结束日期,格式yyyy-MM-dd
+ * @return 返回相隔的年数,null表示格式不正确出现异常
+ */
+ public static Integer getDiffYear(String startDate, String endDate) {
+ try {
+ int years = (int) (((fomatDate(endDate).getTime() - fomatDate(startDate).getTime()) / (1000 * 60 * 60 * 24)) / 365);
+ return years;
+ } catch (Exception e) {
+ // 如果throw,就说明格式不对
+ return null;
+ }
+ }
+
+ /**
+ * 时间相减得到天数
+ *
+ * @param startDate 开始日期,格式yyyy-MM-dd
+ * @param endDate 结束日期,格式yyyy-MM-dd
+ * @return 返回相隔的天数,null表示格式不正确出现异常
+ */
+ public static Integer getDaySub(String startDate, String endDate){
+ try {
+ int days = (int) (((fomatDate(endDate).getTime() - fomatDate(startDate).getTime()) / (1000 * 60 * 60 * 24)));
+ return days;
+ } catch (Exception e) {
+ // 如果throw,就说明格式不对
+ return null;
+ }
+ }
+
+ /**
+ * 得到n天之后的日期
+ *
+ * @param days
+ * @return
+ */
+ public static String getAfterDayDate(int days) {
+ // java.util包
+ Calendar canlendar = Calendar.getInstance();
+ // 日期相减,如果不够减将会向月变动
+ canlendar.add(Calendar.DATE, days);
+ Date date = canlendar.getTime();
+
+ return DATE.format(date);
+ }
+
+ /**
+ * 得到n天之后是周几
+ *
+ * @param days
+ * @return
+ */
+ public static String getAfterDayWeek(int days) {
+ // java.util包
+ Calendar canlendar = Calendar.getInstance();
+ // 日期相减,如果不够减将会向月变动
+ canlendar.add(Calendar.DATE, days);
+ Date date = canlendar.getTime();
+
+ SimpleDateFormat sdf = new SimpleDateFormat("E");
+
+ return sdf.format(date);
+ }
+
+}
\ No newline at end of file
diff --git a/payment-base-app/src/main/java/com/base/springcloud/util/DecimalUtils.java b/payment-base-app/src/main/java/com/base/springcloud/util/DecimalUtils.java
new file mode 100644
index 0000000..c9e2fe4
--- /dev/null
+++ b/payment-base-app/src/main/java/com/base/springcloud/util/DecimalUtils.java
@@ -0,0 +1,251 @@
+package com.base.springcloud.util;
+
+import java.math.BigDecimal;
+
+public class DecimalUtils {
+
+ /**
+ * 加法计算(result = x + y)
+ *
+ * @param x 被加数(可为null)
+ * @param y 加数 (可为null)
+ * @return 和 (可为null)
+ * @author dengcs
+ */
+ public static BigDecimal add(BigDecimal x, BigDecimal y) {
+ if (x == null) {
+ return y;
+ }
+ if (y == null) {
+ return x;
+ }
+ return x.add(y);
+ }
+
+ /**
+ * 加法计算(result = a + b + c + d)
+ *
+ * @param a 被加数(可为null)
+ * @param b 加数(可为null)
+ * @param c 加数(可为null)
+ * @param d 加数(可为null)
+ * @return BigDecimal (可为null)
+ * @author dengcs
+ */
+ public static BigDecimal add(BigDecimal a, BigDecimal b, BigDecimal c, BigDecimal d) {
+ BigDecimal ab = add(a, b);
+ BigDecimal cd = add(c, d);
+ return add(ab, cd);
+ }
+
+ /**
+ * 累加计算(result=x + result)
+ *
+ * @param x 被加数(可为null)
+ * @param result 和 (可为null,若被加数不为为null,result默认值为0)
+ * @return result 和 (可为null)
+ * @author dengcs
+ */
+ public static BigDecimal accumulate(BigDecimal x, BigDecimal result) {
+ if (x == null) {
+ return result;
+ }
+ if (result == null) {
+ result = new BigDecimal("0");
+ }
+ return result.add(x);
+ }
+
+ /**
+ * 减法计算(result = x - y)
+ *
+ * @param x 被减数(可为null)
+ * @param y 减数(可为null)
+ * @return BigDecimal 差 (可为null)
+ * @author dengcs
+ */
+ public static BigDecimal subtract(BigDecimal x, BigDecimal y) {
+ if (x == null || y == null) {
+ return null;
+ }
+ return x.subtract(y);
+ }
+
+ /**
+ * 乘法计算(result = x × y)
+ *
+ * @param x 乘数(可为null)
+ * @param y 乘数(可为null)
+ * @return BigDecimal 积
+ * @author dengcs
+ */
+ public static BigDecimal multiply(BigDecimal x, BigDecimal y) {
+ if (x == null || y == null) {
+ return null;
+ }
+ return x.multiply(y);
+ }
+
+ /**
+ * 除法计算(result = x ÷ y)
+ *
+ * @param x 被除数(可为null)
+ * @param y 除数(可为null)
+ * @return 商 (可为null,四舍五入,默认保留20位小数)
+ * @author dengcs
+ */
+ public static BigDecimal divide(BigDecimal x, BigDecimal y) {
+ if (x == null || y == null || y.compareTo(BigDecimal.ZERO) == 0) {
+ return null;
+ }
+ // 结果为0.000..时,不用科学计数法展示
+ return stripTrailingZeros(x.divide(y, 20, BigDecimal.ROUND_HALF_UP));
+ }
+
+ /**
+ * 转为字符串(防止返回可续计数法表达式)
+ *
+ * @param x 要转字符串的小数
+ * @return String
+ * @author dengcs
+ */
+ public static String toPlainString(BigDecimal x) {
+ if (x == null) {
+ return null;
+ }
+ return x.toPlainString();
+ }
+
+ /**
+ * 保留小数位数
+ *
+ * @param x 目标小数
+ * @param scale 要保留小数位数
+ * @return BigDecimal 结果四舍五入
+ * @author dengcs
+ */
+ public static BigDecimal scale(BigDecimal x, int scale) {
+ if (x == null) {
+ return null;
+ }
+ return x.setScale(scale, BigDecimal.ROUND_HALF_UP);
+ }
+
+ /**
+ * 整型转为BigDecimal
+ *
+ * @param x(可为null)
+ * @return BigDecimal (可为null)
+ * @author dengcs
+ */
+ public static BigDecimal toBigDecimal(Integer x) {
+ if (x == null) {
+ return null;
+ }
+ return new BigDecimal(x.toString());
+ }
+
+ /**
+ * 长整型转为BigDecimal
+ *
+ * @param x(可为null)
+ * @return BigDecimal (可为null)
+ * @author dengcs
+ */
+ public static BigDecimal toBigDecimal(Long x) {
+ if (x == null) {
+ return null;
+ }
+ return new BigDecimal(x.toString());
+ }
+
+ /**
+ * 双精度型转为BigDecimal
+ *
+ * @param x(可为null)
+ * @return BigDecimal (可为null)
+ * @author dengcs
+ */
+ public static BigDecimal toBigDecimal(Double x) {
+ if (x == null) {
+ return null;
+ }
+ return new BigDecimal(x.toString());
+ }
+
+ /**
+ * 单精度型转为BigDecimal
+ *
+ * @param x(可为null)
+ * @return BigDecimal (可为null)
+ * @author dengcs
+ */
+ public static BigDecimal toBigDecimal(Float x) {
+ if (x == null) {
+ return null;
+ }
+ return new BigDecimal(x.toString());
+ }
+
+ /**
+ * 字符串型转为BigDecimal
+ *
+ * @param x(可为null)
+ * @return BigDecimal (可为null)
+ * @author dengcs
+ */
+ public static BigDecimal toBigDecimal(String x) {
+ if (x == null) {
+ return null;
+ }
+ return new BigDecimal(x);
+ }
+
+ /**
+ * 对象类型转为BigDecimal
+ *
+ * @param x(可为null)
+ * @return BigDecimal (可为null)
+ * @author dengcs
+ */
+ public static BigDecimal toBigDecimal(Object x) {
+ if (x == null) {
+ return null;
+ }
+ BigDecimal result = null;
+ try {
+ result = new BigDecimal(x.toString());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return result;
+ }
+
+ /**
+ * 倍数计算,用于单位换算
+ *
+ * @param x 目标数(可为null)
+ * @param multiple 倍数 (可为null)
+ * @return BigDecimal (可为null)
+ * @author dengcs
+ */
+ public static BigDecimal multiple(BigDecimal x, Integer multiple) {
+ if (x == null || multiple == null) {
+ return null;
+ }
+ return DecimalUtils.multiply(x, toBigDecimal(multiple));
+ }
+
+ /**
+ * 去除小数点后的0(如: 输入1.000返回1)
+ *
+ * @param x 目标数(可为null)
+ * @return
+ */
+ public static BigDecimal stripTrailingZeros(BigDecimal x) {
+ if (x == null) {
+ return null;
+ }
+ return x.stripTrailingZeros();
+ }
+}
\ No newline at end of file
diff --git a/payment-base-app/src/main/resources/application.yml b/payment-base-app/src/main/resources/application.yml
index 4eb8767..f8cfdd3 100644
--- a/payment-base-app/src/main/resources/application.yml
+++ b/payment-base-app/src/main/resources/application.yml
@@ -27,5 +27,5 @@ spring:
password: hnrr%%360
#mybatis:配置
mybatis:
- mapperLocations: classpath:dao/*.xml
- type-aliases-package: com.rbs.springcloud.pojo
\ No newline at end of file
+ type-aliases-package: com.base.springcloud.dao #实体类包路径
+ mapper-locations: classpath*:com/base/payment/mapper/*.xml #mapper.xml路径
\ No newline at end of file
diff --git a/payment-base-app/src/main/resources/com/base/payment/mapper/MerchantMapper.xml b/payment-base-app/src/main/resources/com/base/payment/mapper/MerchantMapper.xml
deleted file mode 100644
index f1c7298..0000000
--- a/payment-base-app/src/main/resources/com/base/payment/mapper/MerchantMapper.xml
+++ /dev/null
@@ -1,472 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- id, merchant_id, merchant_name, city_store_name, store_brand_name, sign_type, private_key,
- device_info, spbill_create_ip, notify_url, time_stamp
-
-
-
- delete from pay_merchant
- where id = #{id,jdbcType=VARCHAR}
-
-
- insert into pay_merchant (id, merchant_id, merchant_name,
- city_store_name, store_brand_name, sign_type,
- private_key, device_info, spbill_create_ip,
- notify_url, time_stamp)
- values (#{id,jdbcType=VARCHAR}, #{merchantId,jdbcType=VARCHAR}, #{merchantName,jdbcType=VARCHAR},
- #{cityStoreName,jdbcType=VARCHAR}, #{storeBrandName,jdbcType=VARCHAR}, #{signType,jdbcType=VARCHAR},
- #{privateKey,jdbcType=VARCHAR}, #{deviceInfo,jdbcType=VARCHAR}, #{spbillCreateIp,jdbcType=VARCHAR},
- #{notifyUrl,jdbcType=VARCHAR}, #{timeStamp,jdbcType=TIMESTAMP})
-
-
- insert into pay_merchant
-
-
- id,
-
-
- merchant_id,
-
-
- merchant_name,
-
-
- city_store_name,
-
-
- store_brand_name,
-
-
- sign_type,
-
-
- private_key,
-
-
- device_info,
-
-
- spbill_create_ip,
-
-
- notify_url,
-
-
- time_stamp,
-
-
-
-
- #{id,jdbcType=VARCHAR},
-
-
- #{merchantId,jdbcType=VARCHAR},
-
-
- #{merchantName,jdbcType=VARCHAR},
-
-
- #{cityStoreName,jdbcType=VARCHAR},
-
-
- #{storeBrandName,jdbcType=VARCHAR},
-
-
- #{signType,jdbcType=VARCHAR},
-
-
- #{privateKey,jdbcType=VARCHAR},
-
-
- #{deviceInfo,jdbcType=VARCHAR},
-
-
- #{spbillCreateIp,jdbcType=VARCHAR},
-
-
- #{notifyUrl,jdbcType=VARCHAR},
-
-
- #{timeStamp,jdbcType=TIMESTAMP},
-
-
-
-
- update pay_merchant
-
-
- merchant_id = #{merchantId,jdbcType=VARCHAR},
-
-
- merchant_name = #{merchantName,jdbcType=VARCHAR},
-
-
- city_store_name = #{cityStoreName,jdbcType=VARCHAR},
-
-
- store_brand_name = #{storeBrandName,jdbcType=VARCHAR},
-
-
- sign_type = #{signType,jdbcType=VARCHAR},
-
-
- private_key = #{privateKey,jdbcType=VARCHAR},
-
-
- device_info = #{deviceInfo,jdbcType=VARCHAR},
-
-
- spbill_create_ip = #{spbillCreateIp,jdbcType=VARCHAR},
-
-
- notify_url = #{notifyUrl,jdbcType=VARCHAR},
-
-
- time_stamp = #{timeStamp,jdbcType=TIMESTAMP},
-
-
- where id = #{id,jdbcType=VARCHAR}
-
-
- update pay_merchant
- set merchant_id = #{merchantId,jdbcType=VARCHAR},
- merchant_name = #{merchantName,jdbcType=VARCHAR},
- city_store_name = #{cityStoreName,jdbcType=VARCHAR},
- store_brand_name = #{storeBrandName,jdbcType=VARCHAR},
- sign_type = #{signType,jdbcType=VARCHAR},
- private_key = #{privateKey,jdbcType=VARCHAR},
- device_info = #{deviceInfo,jdbcType=VARCHAR},
- spbill_create_ip = #{spbillCreateIp,jdbcType=VARCHAR},
- notify_url = #{notifyUrl,jdbcType=VARCHAR},
- time_stamp = #{timeStamp,jdbcType=TIMESTAMP}
- where id = #{id,jdbcType=VARCHAR}
-
-
-
-
-
-
-
-
-
-
-
-
- id, merchant_id, merchant_name, city_store_name, store_brand_name, time_stamp
-
-
-
- delete from pay_merchant
- where id = #{id,jdbcType=VARCHAR}
-
-
- insert into pay_merchant (id, merchant_id, merchant_name,
- city_store_name, store_brand_name, time_stamp
- )
- values (#{id,jdbcType=VARCHAR}, #{merchantId,jdbcType=VARCHAR}, #{merchantName,jdbcType=VARCHAR},
- #{cityStoreName,jdbcType=VARCHAR}, #{storeBrandName,jdbcType=VARCHAR}, #{timeStamp,jdbcType=TIMESTAMP}
- )
-
-
- insert into pay_merchant
-
-
- id,
-
-
- merchant_id,
-
-
- merchant_name,
-
-
- city_store_name,
-
-
- store_brand_name,
-
-
- time_stamp,
-
-
-
-
- #{id,jdbcType=VARCHAR},
-
-
- #{merchantId,jdbcType=VARCHAR},
-
-
- #{merchantName,jdbcType=VARCHAR},
-
-
- #{cityStoreName,jdbcType=VARCHAR},
-
-
- #{storeBrandName,jdbcType=VARCHAR},
-
-
- #{timeStamp,jdbcType=TIMESTAMP},
-
-
-
-
- update pay_merchant
-
-
- merchant_id = #{merchantId,jdbcType=VARCHAR},
-
-
- merchant_name = #{merchantName,jdbcType=VARCHAR},
-
-
- city_store_name = #{cityStoreName,jdbcType=VARCHAR},
-
-
- store_brand_name = #{storeBrandName,jdbcType=VARCHAR},
-
-
- time_stamp = #{timeStamp,jdbcType=TIMESTAMP},
-
-
- where id = #{id,jdbcType=VARCHAR}
-
-
- update pay_merchant
- set merchant_id = #{merchantId,jdbcType=VARCHAR},
- merchant_name = #{merchantName,jdbcType=VARCHAR},
- city_store_name = #{cityStoreName,jdbcType=VARCHAR},
- store_brand_name = #{storeBrandName,jdbcType=VARCHAR},
- time_stamp = #{timeStamp,jdbcType=TIMESTAMP}
- where id = #{id,jdbcType=VARCHAR}
-
-
-
-
-
-
-
-
-
-
- id, merchant_id, merchant_name, city_store_name, store_brand_name, time_stamp
-
-
-
- delete from pay_merchant
- where id = #{id,jdbcType=VARCHAR}
-
-
- insert into pay_merchant (id, merchant_id, merchant_name,
- city_store_name, store_brand_name, time_stamp
- )
- values (#{id,jdbcType=VARCHAR}, #{merchantId,jdbcType=VARCHAR}, #{merchantName,jdbcType=VARCHAR},
- #{cityStoreName,jdbcType=VARCHAR}, #{storeBrandName,jdbcType=VARCHAR}, #{timeStamp,jdbcType=TIMESTAMP}
- )
-
-
- insert into pay_merchant
-
-
- id,
-
-
- merchant_id,
-
-
- merchant_name,
-
-
- city_store_name,
-
-
- store_brand_name,
-
-
- time_stamp,
-
-
-
-
- #{id,jdbcType=VARCHAR},
-
-
- #{merchantId,jdbcType=VARCHAR},
-
-
- #{merchantName,jdbcType=VARCHAR},
-
-
- #{cityStoreName,jdbcType=VARCHAR},
-
-
- #{storeBrandName,jdbcType=VARCHAR},
-
-
- #{timeStamp,jdbcType=TIMESTAMP},
-
-
-
-
- update pay_merchant
-
-
- merchant_id = #{merchantId,jdbcType=VARCHAR},
-
-
- merchant_name = #{merchantName,jdbcType=VARCHAR},
-
-
- city_store_name = #{cityStoreName,jdbcType=VARCHAR},
-
-
- store_brand_name = #{storeBrandName,jdbcType=VARCHAR},
-
-
- time_stamp = #{timeStamp,jdbcType=TIMESTAMP},
-
-
- where id = #{id,jdbcType=VARCHAR}
-
-
- update pay_merchant
- set merchant_id = #{merchantId,jdbcType=VARCHAR},
- merchant_name = #{merchantName,jdbcType=VARCHAR},
- city_store_name = #{cityStoreName,jdbcType=VARCHAR},
- store_brand_name = #{storeBrandName,jdbcType=VARCHAR},
- time_stamp = #{timeStamp,jdbcType=TIMESTAMP}
- where id = #{id,jdbcType=VARCHAR}
-
-
-
-
-
-
-
-
-
-
- id, merchant_id, merchant_name, city_store_name, store_brand_name, time_stamp
-
-
-
- delete from pay_merchant
- where id = #{id,jdbcType=VARCHAR}
-
-
- insert into pay_merchant (id, merchant_id, merchant_name,
- city_store_name, store_brand_name, time_stamp
- )
- values (#{id,jdbcType=VARCHAR}, #{merchantId,jdbcType=VARCHAR}, #{merchantName,jdbcType=VARCHAR},
- #{cityStoreName,jdbcType=VARCHAR}, #{storeBrandName,jdbcType=VARCHAR}, #{timeStamp,jdbcType=TIMESTAMP}
- )
-
-
- insert into pay_merchant
-
-
- id,
-
-
- merchant_id,
-
-
- merchant_name,
-
-
- city_store_name,
-
-
- store_brand_name,
-
-
- time_stamp,
-
-
-
-
- #{id,jdbcType=VARCHAR},
-
-
- #{merchantId,jdbcType=VARCHAR},
-
-
- #{merchantName,jdbcType=VARCHAR},
-
-
- #{cityStoreName,jdbcType=VARCHAR},
-
-
- #{storeBrandName,jdbcType=VARCHAR},
-
-
- #{timeStamp,jdbcType=TIMESTAMP},
-
-
-
-
- update pay_merchant
-
-
- merchant_id = #{merchantId,jdbcType=VARCHAR},
-
-
- merchant_name = #{merchantName,jdbcType=VARCHAR},
-
-
- city_store_name = #{cityStoreName,jdbcType=VARCHAR},
-
-
- store_brand_name = #{storeBrandName,jdbcType=VARCHAR},
-
-
- time_stamp = #{timeStamp,jdbcType=TIMESTAMP},
-
-
- where id = #{id,jdbcType=VARCHAR}
-
-
- update pay_merchant
- set merchant_id = #{merchantId,jdbcType=VARCHAR},
- merchant_name = #{merchantName,jdbcType=VARCHAR},
- city_store_name = #{cityStoreName,jdbcType=VARCHAR},
- store_brand_name = #{storeBrandName,jdbcType=VARCHAR},
- time_stamp = #{timeStamp,jdbcType=TIMESTAMP}
- where id = #{id,jdbcType=VARCHAR}
-
-
\ No newline at end of file
diff --git a/payment-base-app/src/main/resources/com/base/payment/mapper/OrderMapper.xml b/payment-base-app/src/main/resources/com/base/payment/mapper/OrderMapper.xml
index d22e0e3..fca2758 100644
--- a/payment-base-app/src/main/resources/com/base/payment/mapper/OrderMapper.xml
+++ b/payment-base-app/src/main/resources/com/base/payment/mapper/OrderMapper.xml
@@ -29,12 +29,12 @@
insert into pay_order (id, order_no, create_time,
- expire_time, request_no, order_amount,
+ expire_time, request_no, order_amount, order_state
good_name, good_id, order_type,
reserved)
values (#{id,jdbcType=VARCHAR}, #{orderNo,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP},
#{expireTime,jdbcType=TIMESTAMP}, #{requestNo,jdbcType=VARCHAR}, #{orderAmount,jdbcType=VARCHAR},
- #{goodName,jdbcType=VARCHAR}, #{goodId,jdbcType=VARCHAR}, #{orderType,jdbcType=VARCHAR},
+ #{orderState,jdbcType=VARCHAR},#{goodName,jdbcType=VARCHAR}, #{goodId,jdbcType=VARCHAR}, #{orderType,jdbcType=VARCHAR},
#{reserved,jdbcType=VARCHAR})
diff --git a/payment-base-app/src/main/resources/generatorConfig.xml b/payment-base-app/src/main/resources/generatorConfig.xml
index 9b134c4..42994de 100644
--- a/payment-base-app/src/main/resources/generatorConfig.xml
+++ b/payment-base-app/src/main/resources/generatorConfig.xml
@@ -60,12 +60,12 @@
-
+
+
@@ -75,8 +75,8 @@
- <!– –>
- -->
+
+
diff --git a/payment-base-app/target/classes/application.yml b/payment-base-app/target/classes/application.yml
index 3f24cf3..f8cfdd3 100644
--- a/payment-base-app/target/classes/application.yml
+++ b/payment-base-app/target/classes/application.yml
@@ -1,7 +1,6 @@
server:
port: 8001 #服务端口
#eureka配置
-#eureka配置
eureka:
client:
#表示是否将自己注册进eureka 默认为true
@@ -28,5 +27,5 @@ spring:
password: hnrr%%360
#mybatis:配置
mybatis:
- mapperLocations: classpath:dao/*.xml
- type-aliases-package: com.rbs.springcloud.pojo
\ No newline at end of file
+ type-aliases-package: com.base.springcloud.dao #实体类包路径
+ mapper-locations: classpath*:com/base/payment/mapper/*.xml #mapper.xml路径
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index a8278ae..f76cb41 100644
--- a/pom.xml
+++ b/pom.xml
@@ -99,6 +99,12 @@
mybatis-generator-maven-plugin
1.3.4
+
+
+ org.apache.httpcomponents
+ httpclient
+ 4.5.11
+