Commit f42c1fca authored by shiyu's avatar shiyu

预支付接口

parent d9b574a0
package com.wwdz.ch.core.api.wxpay;
import com.wechat.pay.java.core.RSAAutoCertificateConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
import org.springframework.core.io.ClassPathResource;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
@Configuration
public class WxPayAutoCertificateConfig {
private static final Logger logger = LoggerFactory.getLogger(WxPayAutoCertificateConfig.class);
@Autowired
WxPayParamConfig wxPayParamConfig;
......@@ -21,10 +31,28 @@ public class WxPayAutoCertificateConfig {
public RSAAutoCertificateConfig rsaAutoCertificateConfig() {
RSAAutoCertificateConfig config = new RSAAutoCertificateConfig.Builder()
.merchantId(wxPayParamConfig.getMerchantId())
.privateKey(wxPayParamConfig.getPrivateKey())
.privateKey(getPrivateKey())
.merchantSerialNumber(wxPayParamConfig.getMerchantSerialNumber())
.apiV3Key(wxPayParamConfig.getApiV3Key())
.build();
return config;
}
public String getPrivateKey() {
try {
String path = this.getClass().getResource("/apiclient_key.pem").getPath();
String fileContent = new String(Files.readAllBytes(Paths.get(path)), "utf-8");
String privateKey = fileContent.replace("-----BEGIN PRIVATE KEY-----", "")
.replace("-----END PRIVATE KEY-----", "")
.replaceAll("\\s+", "");
return privateKey;
} catch (Exception e) {
logger.error("加载私钥错误 error :{}", e);
}
return null;
}
public static void main(String[] args) throws IOException {
new WxPayAutoCertificateConfig().getPrivateKey();
}
}
\ No newline at end of file
......@@ -47,7 +47,6 @@ public class WxPayServiceApi {
.config(rsaAutoCertificateConfig)
.signType("RSA") // 不填默认为RSA
.build();
PrepayWithRequestPaymentResponse response = new PrepayWithRequestPaymentResponse();
try {
PrepayRequest request = new PrepayRequest();
request.setAppid(wxPayParamConfig.getAppId());
......@@ -67,9 +66,13 @@ public class WxPayServiceApi {
request.setPayer(payer);
logger.info("请求预支付下单,请求参数:{}", JsonUtils.from(request));
// 调用预下单接口
response = service.prepayWithRequestPayment(request);
PrepayWithRequestPaymentResponse response = service.prepayWithRequestPayment(request);
logger.info("订单【{}】发起预支付成功,返回信息:{}", dto.getDistributionOrderId(), response);
return Result.success();
String prepayStr = response.getPackageVal();
if (StringUtils.hasLength(prepayStr)) {
String prepayId = prepayStr.split("=")[1];
return Result.success(prepayId);
}
} catch (HttpException e) { // 发送HTTP请求失败
logger.error("微信下单发送HTTP请求失败,错误信息:{}", e.getHttpRequest());
} catch (ServiceException e) { // 服务返回状态小于200或大于等于300,例如500
......
......@@ -21,17 +21,24 @@ public class PriceUtil {
public static Long convertPriceFromStr(String price){
BigDecimal bigDecimal = new BigDecimal(price);
bigDecimal = bigDecimal.multiply(new BigDecimal(100));
return bigDecimal.longValue();
return bigDecimal.longValue();
}
public static String convertDoubleToString(Double price){
BigDecimal bigDecimal = new BigDecimal(String.valueOf( price / 100));
DecimalFormat df = new DecimalFormat("#0.00");
return df.format(bigDecimal);
}
public static Long convertPriceUnit(Long price){
BigDecimal bigDecimal = new BigDecimal(price);
bigDecimal = bigDecimal.multiply(new BigDecimal(100));
return bigDecimal.longValue();
return bigDecimal.longValue();
}
public static void main(String[] args) {
System.out.println(convertPrice(3980L));
System.out.println(UUID.fastUUID().toString(true));
}
}
-----BEGIN CERTIFICATE-----
MIIEITCCAwmgAwIBAgIUQRaLhu3MJgsR0rDd6GhN8Uj7FvIwDQYJKoZIhvcNAQEL
BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
Q0EwHhcNMjQwMTMwMDYxMjQwWhcNMjkwMTI4MDYxMjQwWjB7MRMwEQYDVQQDDAox
NjU5NzAxOTU3MRswGQYDVQQKDBLlvq7kv6HllYbmiLfns7vnu58xJzAlBgNVBAsM
HuadreW3nuiXj+iChuaLjeWNluaciemZkOWFrOWPuDELMAkGA1UEBhMCQ04xETAP
BgNVBAcMCFNoZW5aaGVuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
uBKMPOC+Ljm4hH+s3T3SB4W30fJua4+xX2OvQPY8wRA1gA6iAnlSWzh1cUj6jxlK
8+oSAKWypj8OkNN31pi2w+1TIAYiUGpvtEwgQGnymEijbCVA1rnuB8iKMKlIECB7
Z9GT7JbHkSoDO2K2tIw6RIqs4/gT0ZqKMB57AirVNlPzsf+y19Mz5unrpGHE9bOa
Vw58K8g0eQ9/yf+To5ELhbv489CUb0ODonyoRhPBe62zQZwpVqsubE1vTLgsJXuS
XIsQDKt2JMj6hoVJAf5GF6G/+RVjgJHh2SKTiEeC6WM4n6Skl/bAnJBCVfjXogFJ
ZmjkzJa2bCL2g5E7raUMUwIDAQABo4G5MIG2MAkGA1UdEwQCMAAwCwYDVR0PBAQD
AgP4MIGbBgNVHR8EgZMwgZAwgY2ggYqggYeGgYRodHRwOi8vZXZjYS5pdHJ1cy5j
b20uY24vcHVibGljL2l0cnVzY3JsP0NBPTFCRDQyMjBFNTBEQkMwNEIwNkFEMzk3
NTQ5ODQ2QzAxQzNFOEVCRDImc2c9SEFDQzQ3MUI2NTQyMkUxMkIyN0E5RDMzQTg3
QUQxQ0RGNTkyNkUxNDAzNzEwDQYJKoZIhvcNAQELBQADggEBADGjHznO6I4X+dmI
K54jke/22oGcwExZBldONO9+RJZh4Yq6yFTI+MsdETAVudiSdo5OyUrgXKCH+0wb
4QGKY/R9slzdCfjHIbcF2AfjRr/qM3bMcFWWd73bektTbXq+SBAp7iwoaWOE4OUO
PEdTVocdfiaQSuY7iGXwKuJB3EepQEF0zCDx5wcVpmYzvqfKpBpPxI6fMtyNd9OM
1XUTB9daDzp7E5wz8RNNpNwxF5JW6svs0fuxZATSI0YqCEY0Gp12GaM6u8sYWA4h
YWqsAK001ILisGMi0GDGDkLcbE8ZC++wyMOuQDelrGFce9iAHojqdX2ciZy5gtev
FSe2n3o=
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC4Eow84L4uObiE
f6zdPdIHhbfR8m5rj7FfY69A9jzBEDWADqICeVJbOHVxSPqPGUrz6hIApbKmPw6Q
03fWmLbD7VMgBiJQam+0TCBAafKYSKNsJUDWue4HyIowqUgQIHtn0ZPslseRKgM7
Yra0jDpEiqzj+BPRmoowHnsCKtU2U/Ox/7LX0zPm6eukYcT1s5pXDnwryDR5D3/J
/5OjkQuFu/jz0JRvQ4OifKhGE8F7rbNBnClWqy5sTW9MuCwle5JcixAMq3YkyPqG
hUkB/kYXob/5FWOAkeHZIpOIR4LpYzifpKSX9sCckEJV+NeiAUlmaOTMlrZsIvaD
kTutpQxTAgMBAAECggEBAIgnUAwHwSS4FUAMoHTVsXFW+20UAZEWLID+XzeR68Zy
kuAx8qwZyU0oKdatwIfwkXxx+vb3mXlW0xNVGCNnumiaNw5M+zy4PgAC/ygmNgdm
U1s/AwLRbLvdHjp4PJGRNTbJ0r0BmoRJqzJWBgbuYnsoiFHnweEcinKlWR91R1hy
5jfoKBGgFRveI8q87oWovKn70KUoQX+r++K+mCZXtCq+eTp28MzT18fauF4JrRxW
NDp7CpCUEk0+y5hxrbKXaNIQTyEvYK5yEaPHdzwxm8wTPs6crQRz2/8ox1j28Azf
Coirks3HZMy4paRyus+7zrBGokN+C7DGnqLFCYpMvkECgYEA7Voc1Oy092l5uHvL
GsynYcUb3Aa0kTIA8XVQ+qD0slP6PqLe50iS6T6G8F5qbZuppJCj17q9NQ+RsPXJ
a4zViAdTkhYnpjTgFHA8dMoZ6YP5FNWcqxIt2YTluyjhNQFLbvnPLEfy4/JaiQUF
OVfZl6erQfbuYU9RXpX1uP06shkCgYEAxojRUCWWkH/0u5Jfe4a8ZxzbDv9oenIO
pI9PCgn71gtnK4OTuKo0HfORVi6VpQsctLie5V9ag6yeNTqJEmhVHjPgmnN90whg
tnw47YwxYRahvuv7X5l1KV83zfMLFg5fx+rKyLlTt7f5l8lwrOpdnFie/jnuTIri
B+tkJKubt0sCgYBserAMvPbk0Uc5gxLL99dUfyMBh+sFJWZ69RSCyAeubWVFNWlN
KcVDZzmDKJPZ7rg1J4pKseWCF9CNoXhieGarmjWe4hNTCn2TucxX0HrRWGkCFbNa
GJ/t96iLxt5PPH0+hlwir+uaNQ0d7LZ7g+RGRPKn3nUK8paM9VruJoaqGQKBgDcx
2l9Z094gdL2hGAKTltVj5FLrFvTTuNZvMR4tYGJFkU07q1nvl8Wr7X/0O45C5Jwp
p6NFOzjYSLOrrmf7sY5QBeVqrlR5Q8n4Byujiibfz9/wY1ZUp4n0+uK66x4aqO4/
jFj5jRjKgQ1952FrVtMcoDc1i9aj1es1ugWn4Aa5AoGBALwKTuNr6/K9ExqpuN+o
xcNhC8LnXKBHQsRiaJ8ii0OLwa1M7itrF04iDNwiZEI/fXUWcTQUYhA2ogp2o0ZS
bQVSxQU2orOrRZ3TSY9FPwUo78YQkvBPHHxkh8HcLpu5xLDZvf8HaFfVjFcXUurU
GUtYgM4km/PmiGNEdsw+MIu9
-----END PRIVATE KEY-----
......@@ -33,12 +33,12 @@ dts:
#微信支付配置
wx-pay:
appId: wx5b4409448bf2c72b
merchantId: 123
merchantId: 1659701957
privatekey: 123
merchantSerialNumber: 123
apiV3Key: 123123
payNotifyUrl: 123
privateKeyPath: 123
merchantSerialNumber: 41168B86EDCC260B11D2B0DDE8684DF148FB16F2
apiV3Key: 7e9504fd8a5c458ab7466b8aaae462a9
payNotifyUrl: https://cjxc-applet-dev.wanwudezhi.com/wxPayCallback/getPayNotify
privateKeyPath: apiclient_key.pem
#腾讯IM配置
......
......@@ -22,6 +22,15 @@ dts:
get-officialaccount-accesstoken-url: https://api.weixin.qq.com/cgi-bin/stable_token
officialaccount-templetId: WJkhzyY0_7AYqh19_ujK9yZhj4HohF8ETJvG5NYA9A8
#微信支付配置
wx-pay:
appId: wx5b4409448bf2c72b
merchantId: 1659701957
privatekey: 123
merchantSerialNumber: 41168B86EDCC260B11D2B0DDE8684DF148FB16F2
apiV3Key: 7e9504fd8a5c458ab7466b8aaae462a9
payNotifyUrl: https://cjxc-applet.wanwudezhi.com/wxPayCallback/getPayNotify
privateKeyPath: apiclient_key.pem
#腾讯IM配置
im:
......
package com.wwdz.ch.db.domain.distribution;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import com.xxdxxs.entity.Entity;
import lombok.Data;
/**
* @author shiyu
* @date 2024/01/26
* @date 2024/01/30
*/
@Data
public class DistributionOrder implements Entity {
private Integer id;
/**
......@@ -21,6 +20,16 @@ public class DistributionOrder implements Entity {
*/
private String distributionOrderId;
/**
* 预支付id
*/
private String prepayId;
/**
* 微信支付订单号
*/
private String transactionId;
/**
* 商品id
*/
......@@ -36,6 +45,11 @@ public class DistributionOrder implements Entity {
*/
private Long buyerId;
/**
* 买方openid
*/
private String buyerOpenid;
/**
* 店铺id
*/
......@@ -116,9 +130,12 @@ public class DistributionOrder implements Entity {
sb.append("Hash = ").append(hashCode());
sb.append(", id=").append(id);
sb.append(", distributionOrderId=").append(distributionOrderId);
sb.append(", prepayId=").append(prepayId);
sb.append(", transactionId=").append(transactionId);
sb.append(", itemId=").append(itemId);
sb.append(", itemNum=").append(itemNum);
sb.append(", buyerId=").append(buyerId);
sb.append(", buyerOpenid=").append(buyerOpenid);
sb.append(", shopId=").append(shopId);
sb.append(", sellerId=").append(sellerId);
sb.append(", amount=").append(amount);
......@@ -152,9 +169,12 @@ public class DistributionOrder implements Entity {
DistributionOrder other = (DistributionOrder) that;
return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
&& (this.getDistributionOrderId() == null ? other.getDistributionOrderId() == null : this.getDistributionOrderId().equals(other.getDistributionOrderId()))
&& (this.getPrepayId() == null ? other.getPrepayId() == null : this.getPrepayId().equals(other.getPrepayId()))
&& (this.getTransactionId() == null ? other.getTransactionId() == null : this.getTransactionId().equals(other.getTransactionId()))
&& (this.getItemId() == null ? other.getItemId() == null : this.getItemId().equals(other.getItemId()))
&& (this.getItemNum() == null ? other.getItemNum() == null : this.getItemNum().equals(other.getItemNum()))
&& (this.getBuyerId() == null ? other.getBuyerId() == null : this.getBuyerId().equals(other.getBuyerId()))
&& (this.getBuyerOpenid() == null ? other.getBuyerOpenid() == null : this.getBuyerOpenid().equals(other.getBuyerOpenid()))
&& (this.getShopId() == null ? other.getShopId() == null : this.getShopId().equals(other.getShopId()))
&& (this.getSellerId() == null ? other.getSellerId() == null : this.getSellerId().equals(other.getSellerId()))
&& (this.getAmount() == null ? other.getAmount() == null : this.getAmount().equals(other.getAmount()))
......@@ -177,9 +197,12 @@ public class DistributionOrder implements Entity {
int result = 1;
result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
result = prime * result + ((getDistributionOrderId() == null) ? 0 : getDistributionOrderId().hashCode());
result = prime * result + ((getPrepayId() == null) ? 0 : getPrepayId().hashCode());
result = prime * result + ((getTransactionId() == null) ? 0 : getTransactionId().hashCode());
result = prime * result + ((getItemId() == null) ? 0 : getItemId().hashCode());
result = prime * result + ((getItemNum() == null) ? 0 : getItemNum().hashCode());
result = prime * result + ((getBuyerId() == null) ? 0 : getBuyerId().hashCode());
result = prime * result + ((getBuyerOpenid() == null) ? 0 : getBuyerOpenid().hashCode());
result = prime * result + ((getShopId() == null) ? 0 : getShopId().hashCode());
result = prime * result + ((getSellerId() == null) ? 0 : getSellerId().hashCode());
result = prime * result + ((getAmount() == null) ? 0 : getAmount().hashCode());
......@@ -207,9 +230,12 @@ public class DistributionOrder implements Entity {
public enum Column {
id("id", "id", "INTEGER", false),
distributionOrderId("distribution_order_id", "distributionOrderId", "VARCHAR", false),
prepayId("prepay_id", "prepayId", "VARCHAR", false),
transactionId("transaction_id", "transactionId", "VARCHAR", false),
itemId("item_id", "itemId", "BIGINT", false),
itemNum("item_num", "itemNum", "INTEGER", false),
buyerId("buyer_id", "buyerId", "BIGINT", false),
buyerOpenid("buyer_openid", "buyerOpenid", "VARCHAR", false),
shopId("shop_id", "shopId", "BIGINT", false),
sellerId("seller_id", "sellerId", "BIGINT", false),
amount("amount", "amount", "BIGINT", false),
......
......@@ -4,9 +4,12 @@
<resultMap id="BaseResultMap" type="com.wwdz.ch.db.domain.distribution.DistributionOrder">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="distribution_order_id" jdbcType="VARCHAR" property="distributionOrderId" />
<result column="prepay_id" jdbcType="VARCHAR" property="prepayId" />
<result column="transaction_id" jdbcType="VARCHAR" property="transactionId" />
<result column="item_id" jdbcType="BIGINT" property="itemId" />
<result column="item_num" jdbcType="INTEGER" property="itemNum" />
<result column="buyer_id" jdbcType="BIGINT" property="buyerId" />
<result column="buyer_openid" jdbcType="VARCHAR" property="buyerOpenid" />
<result column="shop_id" jdbcType="BIGINT" property="shopId" />
<result column="seller_id" jdbcType="BIGINT" property="sellerId" />
<result column="amount" jdbcType="BIGINT" property="amount" />
......@@ -81,9 +84,10 @@
</where>
</sql>
<sql id="Base_Column_List">
id, distribution_order_id, item_id, item_num, buyer_id, shop_id, seller_id, amount,
address_id, address, logistics_code, waybill, create_time, pay_time, delivery_time,
finish_time, update_time, share_record_id, `state`
id, distribution_order_id, prepay_id, transaction_id, item_id, item_num, buyer_id,
buyer_openid, shop_id, seller_id, amount, address_id, address, logistics_code, waybill,
create_time, pay_time, delivery_time, finish_time, update_time, share_record_id,
`state`
</sql>
<select id="selectByExample" parameterType="com.wwdz.ch.db.domain.distribution.DistributionOrderExample" resultMap="BaseResultMap">
select
......@@ -118,9 +122,10 @@
</foreach>
</when>
<otherwise>
id, distribution_order_id, item_id, item_num, buyer_id, shop_id, seller_id, amount,
address_id, address, logistics_code, waybill, create_time, pay_time, delivery_time,
finish_time, update_time, share_record_id, `state`
id, distribution_order_id, prepay_id, transaction_id, item_id, item_num, buyer_id,
buyer_openid, shop_id, seller_id, amount, address_id, address, logistics_code,
waybill, create_time, pay_time, delivery_time, finish_time, update_time, share_record_id,
`state`
</otherwise>
</choose>
from distribution_order
......@@ -151,9 +156,10 @@
</foreach>
</when>
<otherwise>
id, distribution_order_id, item_id, item_num, buyer_id, shop_id, seller_id, amount,
address_id, address, logistics_code, waybill, create_time, pay_time, delivery_time,
finish_time, update_time, share_record_id, `state`
id, distribution_order_id, prepay_id, transaction_id, item_id, item_num, buyer_id,
buyer_openid, shop_id, seller_id, amount, address_id, address, logistics_code,
waybill, create_time, pay_time, delivery_time, finish_time, update_time, share_record_id,
`state`
</otherwise>
</choose>
from distribution_order
......@@ -173,15 +179,17 @@
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey>
insert into distribution_order (distribution_order_id, item_id, item_num,
buyer_id, shop_id, seller_id,
insert into distribution_order (distribution_order_id, prepay_id, transaction_id,
item_id, item_num, buyer_id,
buyer_openid, shop_id, seller_id,
amount, address_id, address,
logistics_code, waybill, create_time,
pay_time, delivery_time, finish_time,
update_time, share_record_id, `state`
)
values (#{distributionOrderId,jdbcType=VARCHAR}, #{itemId,jdbcType=BIGINT}, #{itemNum,jdbcType=INTEGER},
#{buyerId,jdbcType=BIGINT}, #{shopId,jdbcType=BIGINT}, #{sellerId,jdbcType=BIGINT},
values (#{distributionOrderId,jdbcType=VARCHAR}, #{prepayId,jdbcType=VARCHAR}, #{transactionId,jdbcType=VARCHAR},
#{itemId,jdbcType=BIGINT}, #{itemNum,jdbcType=INTEGER}, #{buyerId,jdbcType=BIGINT},
#{buyerOpenid,jdbcType=VARCHAR}, #{shopId,jdbcType=BIGINT}, #{sellerId,jdbcType=BIGINT},
#{amount,jdbcType=BIGINT}, #{addressId,jdbcType=BIGINT}, #{address,jdbcType=VARCHAR},
#{logisticsCode,jdbcType=VARCHAR}, #{waybill,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP},
#{payTime,jdbcType=TIMESTAMP}, #{deliveryTime,jdbcType=TIMESTAMP}, #{finishTime,jdbcType=TIMESTAMP},
......@@ -197,6 +205,12 @@
<if test="distributionOrderId != null">
distribution_order_id,
</if>
<if test="prepayId != null">
prepay_id,
</if>
<if test="transactionId != null">
transaction_id,
</if>
<if test="itemId != null">
item_id,
</if>
......@@ -206,6 +220,9 @@
<if test="buyerId != null">
buyer_id,
</if>
<if test="buyerOpenid != null">
buyer_openid,
</if>
<if test="shopId != null">
shop_id,
</if>
......@@ -253,6 +270,12 @@
<if test="distributionOrderId != null">
#{distributionOrderId,jdbcType=VARCHAR},
</if>
<if test="prepayId != null">
#{prepayId,jdbcType=VARCHAR},
</if>
<if test="transactionId != null">
#{transactionId,jdbcType=VARCHAR},
</if>
<if test="itemId != null">
#{itemId,jdbcType=BIGINT},
</if>
......@@ -262,6 +285,9 @@
<if test="buyerId != null">
#{buyerId,jdbcType=BIGINT},
</if>
<if test="buyerOpenid != null">
#{buyerOpenid,jdbcType=VARCHAR},
</if>
<if test="shopId != null">
#{shopId,jdbcType=BIGINT},
</if>
......@@ -321,6 +347,12 @@
<if test="record.distributionOrderId != null">
distribution_order_id = #{record.distributionOrderId,jdbcType=VARCHAR},
</if>
<if test="record.prepayId != null">
prepay_id = #{record.prepayId,jdbcType=VARCHAR},
</if>
<if test="record.transactionId != null">
transaction_id = #{record.transactionId,jdbcType=VARCHAR},
</if>
<if test="record.itemId != null">
item_id = #{record.itemId,jdbcType=BIGINT},
</if>
......@@ -330,6 +362,9 @@
<if test="record.buyerId != null">
buyer_id = #{record.buyerId,jdbcType=BIGINT},
</if>
<if test="record.buyerOpenid != null">
buyer_openid = #{record.buyerOpenid,jdbcType=VARCHAR},
</if>
<if test="record.shopId != null">
shop_id = #{record.shopId,jdbcType=BIGINT},
</if>
......@@ -381,9 +416,12 @@
update distribution_order
set id = #{record.id,jdbcType=INTEGER},
distribution_order_id = #{record.distributionOrderId,jdbcType=VARCHAR},
prepay_id = #{record.prepayId,jdbcType=VARCHAR},
transaction_id = #{record.transactionId,jdbcType=VARCHAR},
item_id = #{record.itemId,jdbcType=BIGINT},
item_num = #{record.itemNum,jdbcType=INTEGER},
buyer_id = #{record.buyerId,jdbcType=BIGINT},
buyer_openid = #{record.buyerOpenid,jdbcType=VARCHAR},
shop_id = #{record.shopId,jdbcType=BIGINT},
seller_id = #{record.sellerId,jdbcType=BIGINT},
amount = #{record.amount,jdbcType=BIGINT},
......@@ -408,6 +446,12 @@
<if test="distributionOrderId != null">
distribution_order_id = #{distributionOrderId,jdbcType=VARCHAR},
</if>
<if test="prepayId != null">
prepay_id = #{prepayId,jdbcType=VARCHAR},
</if>
<if test="transactionId != null">
transaction_id = #{transactionId,jdbcType=VARCHAR},
</if>
<if test="itemId != null">
item_id = #{itemId,jdbcType=BIGINT},
</if>
......@@ -417,6 +461,9 @@
<if test="buyerId != null">
buyer_id = #{buyerId,jdbcType=BIGINT},
</if>
<if test="buyerOpenid != null">
buyer_openid = #{buyerOpenid,jdbcType=VARCHAR},
</if>
<if test="shopId != null">
shop_id = #{shopId,jdbcType=BIGINT},
</if>
......@@ -465,9 +512,12 @@
<update id="updateByPrimaryKey" parameterType="com.wwdz.ch.db.domain.distribution.DistributionOrder">
update distribution_order
set distribution_order_id = #{distributionOrderId,jdbcType=VARCHAR},
prepay_id = #{prepayId,jdbcType=VARCHAR},
transaction_id = #{transactionId,jdbcType=VARCHAR},
item_id = #{itemId,jdbcType=BIGINT},
item_num = #{itemNum,jdbcType=INTEGER},
buyer_id = #{buyerId,jdbcType=BIGINT},
buyer_openid = #{buyerOpenid,jdbcType=VARCHAR},
shop_id = #{shopId,jdbcType=BIGINT},
seller_id = #{sellerId,jdbcType=BIGINT},
amount = #{amount,jdbcType=BIGINT},
......@@ -517,9 +567,10 @@
</foreach>
</when>
<otherwise>
id, distribution_order_id, item_id, item_num, buyer_id, shop_id, seller_id, amount,
address_id, address, logistics_code, waybill, create_time, pay_time, delivery_time,
finish_time, update_time, share_record_id, `state`
id, distribution_order_id, prepay_id, transaction_id, item_id, item_num, buyer_id,
buyer_openid, shop_id, seller_id, amount, address_id, address, logistics_code,
waybill, create_time, pay_time, delivery_time, finish_time, update_time, share_record_id,
`state`
</otherwise>
</choose>
from distribution_order
......
......@@ -63,16 +63,16 @@
<!--生成Model类存放位置-->
<javaModelGenerator targetPackage="com.wwdz.ch.db.domain" targetProject="ch-dao/src/main/java">
<javaModelGenerator targetPackage="com.wwdz.ch.db.domain.distribution" targetProject="ch-dao/src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<sqlMapGenerator targetPackage="com.wwdz.ch.db.mapper" targetProject="ch-dao/src/main/resources"/>
<javaClientGenerator type="XMLMAPPER" targetPackage="com.wwdz.ch.db.mapper"
<sqlMapGenerator targetPackage="com.wwdz.ch.db.mapper.distribution" targetProject="ch-dao/src/main/resources"/>
<javaClientGenerator type="XMLMAPPER" targetPackage="com.wwdz.ch.db.mapper.distribution"
targetProject="ch-dao/src/main/java"/>
<table tableName="return_order" enableCountByExample="true" enableUpdateByExample="true" enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true">
<table tableName="distribution_order" enableCountByExample="true" enableUpdateByExample="true" enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true">
<generatedKey column="id" sqlStatement="Mysql" identity="true" />
</table>
......
......@@ -5,6 +5,7 @@ import com.wechat.pay.java.core.notification.NotificationParser;
import com.wechat.pay.java.core.notification.RequestParam;
import com.wechat.pay.java.service.payments.model.Transaction;
import com.wwdz.ch.core.util.RedisUtils;
import com.wwdz.ch.db.dao.distribution.DistributionOrderDao;
import com.xxdxxs.utils.JsonUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -35,6 +36,9 @@ public class WxPayCallbackController {
@Autowired
RSAAutoCertificateConfig rsaAutoCertificateConfig;
@Autowired
DistributionOrderDao distributionOrderDao;
@RequestMapping(value ="/getPayNotify")
public synchronized String payNotify(HttpServletRequest request) throws IOException {
logger.info("------------------ 收到微信支付回调通知 ------------------");
......
......@@ -2,6 +2,7 @@ package com.wwdz.ch.wx.impl.distribution;
import com.alibaba.dubbo.config.annotation.Reference;
import com.github.pagehelper.PageInfo;
import com.wwdz.ch.core.api.wxpay.WxPayServiceApi;
import com.wwdz.ch.core.consts.ConsignSaleEnum;
import com.wwdz.ch.core.consts.DistributionEnum;
import com.wwdz.ch.core.consts.LogisticsEnum;
......@@ -53,18 +54,35 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
@Autowired
SupplierItemDao supplierItemDao;
@Autowired
WxPayServiceApi wxPayServiceApi;
@Override
public Result createDistributionOrder(DistributionOrderRequestDto dto) {
try {
//调用微信接口,预支付下单,获取预付单号
String shareRecordId = dto.getShareRecordId();
//查询分享记录详细信息
DistributorShareRecord distributorShareRecord = distributorShareRecordDao.findById(shareRecordId);
DistributionOrder distributionOrder = new DistributionOrder();
String distributionOrderId = IdUtils.getOrderNumber(DISTRIBUTION_ORDER_PREFIX);
DistributionOrderRequestDto prePayDto = new DistributionOrderRequestDto();
prePayDto.setDistributionOrderId(distributionOrderId);
prePayDto.setAmount(String.valueOf(distributorShareRecord.getPrice() * dto.getItemNum()));
prePayDto.setBuyerOpenid(dto.getBuyerOpenid());
//查询商品信息
SupplierItem supplierItem = supplierItemDao.findById(distributorShareRecord.getItemId());
prePayDto.setItemName(supplierItem.getName());
Result prePayResult = wxPayServiceApi.createPrepareOrder(prePayDto);
if (!prePayResult.getSuccess()) {
return Result.failed("预下单失败");
}
String prepayId = (String) prePayResult.getData();
DistributionOrder distributionOrder = new DistributionOrder();
distributionOrder.setItemId(distributorShareRecord.getItemId());
distributionOrder.setItemNum(dto.getItemNum());
distributionOrder.setShareRecordId(distributorShareRecord.getShareId());
distributionOrder.setDistributionOrderId(distributionOrderId);
distributionOrder.setPrepayId(prepayId);
distributionOrder.setBuyerId(dto.getBuyerId());
distributionOrder.setShopId(distributorShareRecord.getShopId());
distributionOrder.setSellerId(distributorShareRecord.getDistributorId());
......@@ -79,7 +97,7 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
} catch (Exception e) {
logger.error("创建分销订单失败 error : {}", e);
}
return Result.failed();
return Result.failed("分销订单下单失败");
}
@Override
......@@ -88,11 +106,6 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
}
@Override
public Result getParamForPay(DistributionOrderRequestDto dto) {
return null;
}
@Override
public Result cancel(DistributionOrderRequestDto dto) {
try {
......@@ -161,16 +174,16 @@ public class DistributionOrderServiceImpl implements DistributionOrderService {
//供货价
Long distributionTotalPrice = supplierItem.getDistributionPrice() * distributionOrder.getItemNum();
distributionOrderDetailVo.setDistributionPrice(PriceUtil.convertPrice(distributionTotalPrice));
distributionOrderDetailVo.setChannelCost("千分之6");
distributionOrderDetailVo.setChannelCost("6‰");
//通道费
double channelCost = distributionOrder.getAmount().doubleValue() * 0.006;
double channelCost = distributionOrder.getAmount().doubleValue() * 0.006;
if (channelCost < 1) {
channelCost = 0;
}
distributionOrderDetailVo.setChannelCost(String.valueOf(channelCost));
distributionOrderDetailVo.setChannelCost(PriceUtil.convertDoubleToString(channelCost));
//利润
Double profit = distributionOrder.getAmount().doubleValue() - distributionTotalPrice.doubleValue() - channelCost;
distributionOrderDetailVo.setProfit(PriceUtil.convertPriceFromStr(profit.toString()).toString());
distributionOrderDetailVo.setProfit(PriceUtil.convertDoubleToString(profit));
return Result.success(distributionOrderDetailVo);
} catch (Exception e) {
logger.error("查询分销商订单详情失败 error : {}", e);
......
......@@ -13,14 +13,6 @@ public interface DistributionOrderService {
Result createDistributionOrder(DistributionOrderRequestDto dto);
/**
* 支付接口需要的参数:签名等
* @param dto
* @return
*/
Result getParamForPay(DistributionOrderRequestDto dto);
/**
* 完成支付后修改订单状态
* @param dto
......
......@@ -38,8 +38,7 @@ public class DistributionOrderController {
Validator validator = new Validator(FormHandler.ofEntity(dto));
validator.set("shareRecordId", "分销分享记录id").must().string()
.set("buyerId", "买方id").must().number()
.set("distributorId", "分销商id").must().number()
.set("shopId", "分销商店铺id").must().number()
.set("buyerOpenId", "买方微信openid").must().number()
.end();
if (!validator.isValid()) {
return Result.failed(validator.getErrorInfo());
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment