测试下单功能后,bug修复

This commit is contained in:
jieyuu 2024-10-14 21:47:13 +08:00
parent 95f5db067c
commit 2a1c93a934
14 changed files with 73 additions and 65 deletions

View File

@ -7,5 +7,5 @@ public class TimeConstant {
* 订单超时 毫秒 默认30分钟 * 订单超时 毫秒 默认30分钟
*/ */
// todo 测试时将时间改为了5分钟 记得改回30分钟 // todo 测试时将时间改为了5分钟 记得改回30分钟
public static final long ORDER_PAY_TIMEOUT_MILLS = 1000 * 60 * 5; public static final long ORDER_PAY_TIMEOUT_MILLS = 1000 * 60 * 30;
} }

View File

@ -53,7 +53,7 @@ public class CouponRecordController {
public JsonData lockCouponRecords(@ApiParam("锁定优惠券请求对象") @RequestBody LockCouponRecordRequest request) { public JsonData lockCouponRecords(@ApiParam("锁定优惠券请求对象") @RequestBody LockCouponRecordRequest request) {
JsonData jsonData = couponRecordService.lockCouponRecords(request); JsonData jsonData = couponRecordService.lockCouponRecords(request);
return JsonData.buildSuccess(); return jsonData;
} }
} }

View File

@ -73,5 +73,4 @@ mqconfig:
coupon_release_routing_key: coupon.release.routing.key coupon_release_routing_key: coupon.release.routing.key
#消息过期时间,毫秒,测试改为15秒 #消息过期时间,毫秒,测试改为15秒
#为了测试修改时间 todo 记得修改回1500 ttl: 15000
ttl: 360000

View File

@ -30,7 +30,7 @@
set use_state =#{useState} where user_id = #{userId} and use_state = 'NEW' set use_state =#{useState} where user_id = #{userId} and use_state = 'NEW'
and id in and id in
<foreach collection="lockCouponRecordIds" <foreach collection="lockCouponRecordIds"
index="index" item="i" separator="," open="(" close=")">#{id} index="index" item="id" separator="," open="(" close=")">#{id}
</foreach> </foreach>
</update> </update>

View File

@ -2,6 +2,7 @@ package net.jieyuu.component;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayApiException;
import com.alipay.api.domain.AlipayTradeQueryModel;
import com.alipay.api.request.AlipayTradePagePayRequest; import com.alipay.api.request.AlipayTradePagePayRequest;
import com.alipay.api.request.AlipayTradeQueryRequest; import com.alipay.api.request.AlipayTradeQueryRequest;
import com.alipay.api.request.AlipayTradeWapPayRequest; import com.alipay.api.request.AlipayTradeWapPayRequest;
@ -33,9 +34,9 @@ public class AlipayStrategy implements PayStrategy {
public String unifiedorder(PayInfoVO payInfoVO) { public String unifiedorder(PayInfoVO payInfoVO) {
HashMap<String, String> content = new HashMap<>(); HashMap<String, String> content = new HashMap<>();
//商户订单号,64个字符以内可包含字母数字下划线需保证在商户端不重复 //商户订单号,64个字符以内可包含字母数字下划线需保证在商户端不重复
String no = UUID.randomUUID().toString();
log.info("订单号:{}", no); log.info("订单号:{}", payInfoVO.getOutTradeNo());
content.put("out_trade_no", no); content.put("out_trade_no", payInfoVO.getOutTradeNo());
content.put("product_code", "FAST_INSTANT_TRADE_PAY"); content.put("product_code", "FAST_INSTANT_TRADE_PAY");
//订单总金额单位为元精确到小数点后两位 //订单总金额单位为元精确到小数点后两位
content.put("total_amount", payInfoVO.getPayFee().toString()); content.put("total_amount", payInfoVO.getPayFee().toString());
@ -52,7 +53,7 @@ public class AlipayStrategy implements PayStrategy {
} }
// 该笔订单允许的最晚付款时间逾期将关闭交易取值范围1m15dm-分钟h-小时d-1c-当天1c-当天的情况下无论交易何时创建都在0点关闭 该参数数值不接受小数点 1.5h可转换为 90m // 该笔订单允许的最晚付款时间逾期将关闭交易取值范围1m15dm-分钟h-小时d-1c-当天1c-当天的情况下无论交易何时创建都在0点关闭 该参数数值不接受小数点 1.5h可转换为 90m
content.put("timeout_express", Double.valueOf(timeout) + "m"); content.put("timeout_express", Double.valueOf(timeout).intValue() + "m");
String clientType = payInfoVO.getClientType(); String clientType = payInfoVO.getClientType();
String form = ""; String form = "";
@ -64,14 +65,13 @@ public class AlipayStrategy implements PayStrategy {
request.setBizContent(JSON.toJSONString(content)); request.setBizContent(JSON.toJSONString(content));
request.setNotifyUrl(payUrlConfig.getAlipayCallbackUrl()); request.setNotifyUrl(payUrlConfig.getAlipayCallbackUrl());
request.setReturnUrl(payUrlConfig.getAlipaySuccessReturnUrl()); request.setReturnUrl(payUrlConfig.getAlipaySuccessReturnUrl());
AlipayTradeWapPayResponse alipayResponse = AlipayConfig.getInstance().pageExecute(request); AlipayTradeWapPayResponse alipayResponse = AlipayConfig.getInstance().pageExecute(request);
log.info("日志响应:{}", alipayResponse); log.info("响应日志:alipayResponse={}", alipayResponse);
if (alipayResponse.isSuccess()) { if (alipayResponse.isSuccess()) {
form = alipayResponse.getBody(); form = alipayResponse.getBody();
} else { } else {
log.error("支付宝构建h5表单失败:request={},payInfo={}", alipayResponse, payInfoVO); log.error("支付宝构建H5表单失败:alipayResponse={},payInfo={}", alipayResponse, payInfoVO);
} }
} else if (ClientType.PC.name().equalsIgnoreCase(clientType)) { } else if (ClientType.PC.name().equalsIgnoreCase(clientType)) {
// PC支付 // PC支付
@ -81,7 +81,7 @@ public class AlipayStrategy implements PayStrategy {
request.setReturnUrl(payUrlConfig.getAlipaySuccessReturnUrl()); request.setReturnUrl(payUrlConfig.getAlipaySuccessReturnUrl());
AlipayTradePagePayResponse alipayResponse = AlipayConfig.getInstance().pageExecute(request); AlipayTradePagePayResponse alipayResponse = AlipayConfig.getInstance().pageExecute(request);
log.info("日志响应:{}", alipayResponse); log.info("响应日志:alipayResponse={}", alipayResponse);
if (alipayResponse.isSuccess()) { if (alipayResponse.isSuccess()) {
form = alipayResponse.getBody(); form = alipayResponse.getBody();
} else { } else {
@ -91,19 +91,24 @@ public class AlipayStrategy implements PayStrategy {
} catch (AlipayApiException e) { } catch (AlipayApiException e) {
log.error("支付宝构建表单异常:payInfo={},异常={}", payInfoVO, e); log.error("支付宝构建表单异常:payInfo={},异常={}", payInfoVO, e);
} }
return form; return form;
} }
@Override @Override
public String refund(PayInfoVO payInfoVO) { public String refund(PayInfoVO payInfoVO) {
return PayStrategy.super.refund(payInfoVO); return null;
} }
/** /**
* 查询订单状态 * 查询订单状态
* 成功返回非空 * 支付成功 返回非空
* 其他返回空 * 其他返回空
* <p>
* 未支付
* {"alipay_trade_query_response":{"code":"40004","msg":"Business Failed","sub_code":"ACQ.TRADE_NOT_EXIST","sub_msg":"交易不存在","buyer_pay_amount":"0.00","invoice_amount":"0.00","out_trade_no":"adbe8e8f-3b18-4c9e-b736-02c4c2e15eca","point_amount":"0.00","receipt_amount":"0.00"},"sign":"xxxxx"}
* <p>
* 已经支付
* {"alipay_trade_query_response":{"code":"10000","msg":"Success","buyer_logon_id":"mqv***@sandbox.com","buyer_pay_amount":"0.00","buyer_user_id":"2088102176996700","buyer_user_type":"PRIVATE","invoice_amount":"0.00","out_trade_no":"adbe8e8f-3b18-4c9e-b736-02c4c2e15eca","point_amount":"0.00","receipt_amount":"0.00","send_pay_date":"2020-12-04 17:06:47","total_amount":"111.99","trade_no":"2020120422001496700501648498","trade_status":"TRADE_SUCCESS"},"sign":"xxxx"}
* *
* @param payInfoVO * @param payInfoVO
* @return * @return
@ -112,11 +117,14 @@ public class AlipayStrategy implements PayStrategy {
public String queryPaySuccess(PayInfoVO payInfoVO) { public String queryPaySuccess(PayInfoVO payInfoVO) {
AlipayTradeQueryRequest request = new AlipayTradeQueryRequest(); AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
HashMap<String, String> content = new HashMap<>(); // HashMap<String, String> content = new HashMap<>();
// 订单商位号,64位 //订单商户号,64位
content.put("out_trade_no", payInfoVO.getOutTradeNo()); // content.put("out_trade_no", payInfoVO.getOutTradeNo());
request.setBizContent(JSON.toJSONString(content)); // request.setBizContent(JSON.toJSONString(content));
AlipayTradeQueryModel model = new AlipayTradeQueryModel();
model.setOutTradeNo(payInfoVO.getOutTradeNo());
request.setBizModel(model);
AlipayTradeQueryResponse response = null; AlipayTradeQueryResponse response = null;
try { try {
@ -125,7 +133,6 @@ public class AlipayStrategy implements PayStrategy {
} catch (AlipayApiException e) { } catch (AlipayApiException e) {
log.error("支付宝订单查询异常:{}", e); log.error("支付宝订单查询异常:{}", e);
} }
if (response.isSuccess()) { if (response.isSuccess()) {

View File

@ -33,7 +33,6 @@ public class PayFactory {
} else if (ProductOrderPayTypeEnum.WECHAT.name().equalsIgnoreCase(payType)) {// 微信支付 } else if (ProductOrderPayTypeEnum.WECHAT.name().equalsIgnoreCase(payType)) {// 微信支付
PayStrategyContext payStrategyContext = new PayStrategyContext(wechatPayStrategy); PayStrategyContext payStrategyContext = new PayStrategyContext(wechatPayStrategy);
return payStrategyContext.executeUnifiedorder(payInfoVO); return payStrategyContext.executeUnifiedorder(payInfoVO);
} }
return ""; return "";
} }
@ -41,21 +40,25 @@ public class PayFactory {
/** /**
* 查询订单支付状态 * 查询订单支付状态
* <p>
* 支付成功返回非空其他返回空
* *
* @param payInfoVO * @param payInfoVO
* @return * @return
*/ */
public String querySuccess(PayInfoVO payInfoVO) { public String queryPaySuccess(PayInfoVO payInfoVO) {
String payType = payInfoVO.getPayType(); String payType = payInfoVO.getPayType();
if (ProductOrderPayTypeEnum.ALIPAY.name().equalsIgnoreCase(payType)) {// 支付宝
if (ProductOrderPayTypeEnum.ALIPAY.name().equalsIgnoreCase(payType)) {
//支付宝支付
PayStrategyContext payStrategyContext = new PayStrategyContext(alipayStrategy); PayStrategyContext payStrategyContext = new PayStrategyContext(alipayStrategy);
return payStrategyContext.executeQueryPaySuccess(payInfoVO); return payStrategyContext.executeQueryPaySuccess(payInfoVO);
} else if (ProductOrderPayTypeEnum.WECHAT.name().equalsIgnoreCase(payType)) {// 微信支付 } else if (ProductOrderPayTypeEnum.WECHAT.name().equalsIgnoreCase(payType)) {
//微信支付 暂未实现
PayStrategyContext payStrategyContext = new PayStrategyContext(wechatPayStrategy); PayStrategyContext payStrategyContext = new PayStrategyContext(wechatPayStrategy);
return payStrategyContext.executeQueryPaySuccess(payInfoVO); return payStrategyContext.executeQueryPaySuccess(payInfoVO);
} }
return ""; return "";
} }

View File

@ -18,12 +18,11 @@ public class AlipayConfig {
/** /**
* 应用私钥 todo * 应用私钥 todo
*/ */
public static final String APP_PRI_KEY = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCXErw8mdLqhNbQqNBAC4mUYXpRb3hbTYCg+W+JJe5R7oid7yGI61h9DhdWPZIKelKIN3km7QX8wa7BygBLx0U8LVmxh1Y14kxluNqykqeZc/250L+Y2fTTWZBoeaQvajZnLgnMm8ym/Z0Ned6vvCp+2OY4xjpAxJQm3RW6EMdQDQ3did8pAX03KU7W3+TZ7t3I8Ml9JeNyh4wyM4KNVH0aKTGYYn0uR6Euh5On1hID86ENRuSg3Xu9cvUkH2px/6RX2HBG43/kKHniz3T2AB+Htx6r+1GMqKjx8f3dxkKYro2EmxBxdSxEJgOqh7JjGP0qqiWwaW8zgicwtmrccI7XAgMBAAECggEAGz/Q3ilsxspRKO/aKEMsfKwccQXnMqjHE8IKITXLR9H7qGkSpmy02FGrWe3fIq6vpkxDOQc1tkKFMAUsin6V+WXAsOnVXgDEgPCX2e/j9STb1iFV/c8Kfvi/uGiAeeDxkSjXsaVEg7ZpFp4t0YriK2EaHZF7vmT2yA/GtHoESWbYw/2bchW/6OUbmugIzR7GVAjvc7/ZmkZVCnG4xDdW2Nu5jHNLPvNTluB5CZUnjjXvdRtChTdktgQD1t8LSQ6I1NHJutw10/N1anwQ99uO+LMxDUnZZvZshP26ooO2Og/kWPEU2oUgdB37DGJ0OfSWrEF67fzCyKuBxKT1TnmikQKBgQD0R09FD6vo+H6gd4WhN/BfUHtoN5Lyz8kkvaDWDzyCC/t+utJ+hNXTSHgz+hA/OQxCk0iIlPnPfBJRhzhxB2yUVwD//nXB3lu3hnfnkXrg3iKKjqkO6SP9yDHi7XghDTdU2P1F1cj+gfH+nasMElesDBSjtfHYLBS0WiHUec6LLwKBgQCeUoBZAa5p5ILHflnFva4eFQdEtr5gAwH8oRqFCTZBQtWdCDUQ9MvciLK1Pe9hBhR8iOCtP15Qgpc867vld/ZF1VeW0TYtxBwfM+u3JdXllYtx6KIt1L83jWhcmHWdv73bCCUPw/m7FTPi3lrUAGRw0+jWYoLVpmEHrd9THHes2QKBgHh7g3mIlT2+8pWq3dn6gTBBvdxVLMFeAtOARAfQVAPAbTbAZnnIgr5HDCJ2v/Su6oEbq7bR47SWeWKE0y3Mf51anD+m/eW1Cn+mbxVkB7tJVLgKTQ/xpbLSPuiyP4HtxtCuhZ0gKJZ++SCgG3FEysEs5DEq2DHK7BtYKT9nJJw5AoGAQzRMDPwcuBBqvxnQK5LvlQ9iDXXw67p7HmyYYD5fzGX9XPH97Jus6YkRKsQGl83H5nEHxiKu+0fjwNVj5ez9GfmMe5WFBPpI4andddnWqOTI02pnZUL4hDE/Sobg7jxU7+POL5oFqLdAVh4CuhkMiaQ6Ir6gQOamK2dP8+ySlEkCgYEA1kBmBFtKFl4V+ZshqcjMWcMCAANWf3jKkBAf9Dvr632vcafQeXTZdnWLQkwuwz/r0aoSKcCIuhxPzKpalSoyItX5DYYNG5BiC/Wwo3ktTvv+2xdnkpgx/+2gvbJLtNsikCDWC6zWO7Q/4/v0LsrzEWNgMXUIepqPffI3NUGtWkU="; public static final String APP_PRI_KEY = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQD3h1fjm+ERZWep9X8MQSNL8fvFnVhki6JreUvaHTi1a9Kf05czNM9YP5WU9WeNZLBhlJalXTaLZcLxzS3Id3Ig6iQ6IEG0LQPN9DBL5RZG8TDGfD/vaZAmXQ8hOWjwzgAmjko/fMXXnLMW8WCGJF6qv9KhkgTFH5w9PdW4XgjcxKx6EmgYSf4Qi1cWzMQmZP/RpED6Tqwh5/U7Bqszsq0QeFWDHl40dh5J3czDUBxWeumu2qE24NxWMKrpYqigTfBGGQCJQMQ9l+hHNHnd49wYqnrUPSSnji30nKF8wMGTjfxvME2bVMrzCItKFIykazHrmGyAKsv9CV/joTlJZVHBAgMBAAECggEBAM3yzi2ShLD0rku69vo7OCL4M4M4Z1NA2uKRCYtwxL4t+BEC+8qfJeVHAi3uATqjjB2kg7MS208gXBLTpEQnHc5FAd9a90/yJDg38/cxpFdiVjLPLmMEcet5gh0ipy20OGvb9+ra5cF/n4J3UthJanqnH5lO5Kkeo+BQkoHTu4vydJuGB6vWrCxUL+gvpsG506EhcUqpR0MXZ+KUiRLurHfooWj5+/XwoFj99hZNjr9wIM583gkDmcpjfNbRYmcXoTd/NcyBgB1ijWkWrv/kkxXs3Rr94wZ6vYTp6EB57dnKqMJxIqJT/FSzdTcrlddIG0qk7fsTMC1Uup6szuEL1AECgYEA//86BRESx1thvdTN9IO3VDqNBYet52f9lW0ROY3pA1f3KovDJfspUKQo4r/tlj1lkDTuYo5WqTaGRBW6dzMldF0pmdMg+JOAXdx/92QC4pSOiTRCOzXDBETJVw3fm8E+tRyidA8yUd8meHQvi+cnWznI5dSPBLHLiOhjCVhCCj8CgYEA94gXUfe/0Iiw+lOTLD+rxGcRIucV3g7N7aeD9kUTR+MSeeg0SSAm1uqsITRYIkf2P/Fe0KiusY5ATVBI+d/3KwM5Z47NtUjgp4H451PtgVqlBNFuTS4MWI/KXXbU6VWmZxxZF/QkIcAg0zyASNaqD7IcLi6bk09s029W6ZEpo/8CgYB6xyZEl9Ox2ZofOZkt1J5wv0QzisdVXQK6T/0a5X0EJYRd23pVFQjTrGgPmI2SqQ+1Ai3zBuF5drUeom00DkvAa44wQJpnnhbK7Z5SQJ1Bno5eL7o0O6y0t2j5X6YHRb+VjY48q60upyAEVXUYXFz729MGp9OQJNXBa/NT4AiMcQKBgFfxbfedQfTg25/UWZF6/ZfF1nzEBSzjrZ4lyeiRGgyMTGArc4gXeDUbIxSY+EcVshN9ueYASDClDYtqXsMII1SQzLBSOBuUTNy2fKwTUWqHveE8VyfsmE5Op+MU+Qf9eiVgGPc9siibjg3+jMVUHw98hC6UOInZyhxEjmhlPpoZAoGAITeVYRulrUcGh7DqkNRYRDHxAbXmKG4qvzqwZXSyEtwiy2tA5zhzCoboHdPPdqnTdQxiszG3f5P7N0SLQzl3BKTQ4svc5lKlU/CG0JD11K1ReA41MxstFsIX1A605Uh7BtWK9eUyizDrxXN8fOxolM0XUxFpFK1WYrtxwfGjwu8=";
/** /**
* 支付宝公钥 todo * 支付宝公钥 todo
*/ */
public static final String ALIPAY_PUB_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAj4BMyZx16Xpfd00w25ub4ZcWzRiWCx1v6EScmq2ezu/W95FO70r6EawFGVh2nE+XqZFlf53bIBhwtxUCV2xJEy9qHuooVvqByoMRdSs4y1BlUR99WfYqc+67i41rp8hDDZ8s31/9gXbiVfsSFe3YqHq3WzCuYbqwpwt0vEFbX829DZP3BNJ/DTbx2mtFYEJYFRi8nKkHFjivjjMw9nbAQsFQT6Q7GpPR6cqUGX1YYzvsdo1U+XF3FG4SoPYZKh6KVdRJQ/RKzYnNgPN7d6UydUarFRCnyLQ9qa/gFTX373pM+IlD9WhW15ixGq/USgcOBLZ+1Ujc90OLym0mulCGRQIDAQAB"; public static final String ALIPAY_PUB_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAj4BMyZx16Xpfd00w25ub4ZcWzRiWCx1v6EScmq2ezu/W95FO70r6EawFGVh2nE+XqZFlf53bIBhwtxUCV2xJEy9qHuooVvqByoMRdSs4y1BlUR99WfYqc+67i41rp8hDDZ8s31/9gXbiVfsSFe3YqHq3WzCuYbqwpwt0vEFbX829DZP3BNJ/DTbx2mtFYEJYFRi8nKkHFjivjjMw9nbAQsFQT6Q7GpPR6cqUGX1YYzvsdo1U+XF3FG4SoPYZKh6KVdRJQ/RKzYnNgPN7d6UydUarFRCnyLQ9qa/gFTX373pM+IlD9WhW15ixGq/USgcOBLZ+1Ujc90OLym0mulCGRQIDAQAB";
/** /**
* 签名类型 * 签名类型
*/ */

View File

@ -27,5 +27,5 @@ public interface CouponFeignService {
* @return * @return
*/ */
@PostMapping("/api/coupon_record/v1/lock_records") @PostMapping("/api/coupon_record/v1/lock_records")
JsonData lockCouponRecords(@ApiParam("锁定优惠券请求对象") @RequestBody LockCouponRecordRequest lockCouponRecordRequest); JsonData lockCouponRecords(@RequestBody LockCouponRecordRequest lockCouponRecordRequest);
} }

View File

@ -143,7 +143,7 @@ public class ProductOrderServiceImpl extends ServiceImpl<ProductOrderMapper, Pro
String payResult = payFactory.pay(payInfoVO); String payResult = payFactory.pay(payInfoVO);
if (StringUtils.isNotBlank(payResult)) { if (StringUtils.isNotBlank(payResult)) {
log.error("创建支付订单成功:payInfo={},payResult={}", payInfoVO, payResult); log.info("创建支付订单成功:payInfo={},payResult={}", payInfoVO, payResult);
return JsonData.buildSuccess(payResult); return JsonData.buildSuccess(payResult);
} else { } else {
log.error("创建支付订单失败:payInfo={},payResult={}", payInfoVO, payResult); log.error("创建支付订单失败:payInfo={},payResult={}", payInfoVO, payResult);
@ -306,7 +306,7 @@ public class ProductOrderServiceImpl extends ServiceImpl<ProductOrderMapper, Pro
} }
// 验价 // 验价
if (realPayAmount.compareTo(orderRequest.getTotalAmount()) != 0) { if (realPayAmount.compareTo(orderRequest.getRealPayAmount()) != 0) {
log.error("订单验价失败:{}", orderRequest); log.error("订单验价失败:{}", orderRequest);
throw new BizException(BizCodeEnum.ORDER_CONFIRM_PRICE_FAIL); throw new BizException(BizCodeEnum.ORDER_CONFIRM_PRICE_FAIL);
} }
@ -411,7 +411,7 @@ public class ProductOrderServiceImpl extends ServiceImpl<ProductOrderMapper, Pro
PayInfoVO payInfoVO = new PayInfoVO(); PayInfoVO payInfoVO = new PayInfoVO();
payInfoVO.setPayType(productOrderDO.getPayType()); payInfoVO.setPayType(productOrderDO.getPayType());
payInfoVO.setOutTradeNo(orderMessage.getOutTradeNo()); payInfoVO.setOutTradeNo(orderMessage.getOutTradeNo());
String payResult = payFactory.querySuccess(payInfoVO); String payResult = payFactory.queryPaySuccess(payInfoVO);
// 订单结果为空支付不成功取消订单 // 订单结果为空支付不成功取消订单
if (StringUtils.isBlank(payResult)) { if (StringUtils.isBlank(payResult)) {

View File

@ -61,13 +61,12 @@ mqconfig:
order_close_routing_key: order.close.routing.key order_close_routing_key: order.close.routing.key
#消息过期时间,毫秒,测试改为15秒 #消息过期时间,毫秒,测试改为15秒
# 为了测试修改时间为300秒 todo 记得修改 ttl: 15000
ttl: 300000
# 支付宝配置 # 支付宝配置
alipay: alipay:
# 支付成功的跳转页面 # 支付成功的跳转页面
success_return_url: http://jieyuu.net success_return_url: http://jieyuu.net
# 支付宝通知回调接口 # 支付宝通知回调接口
callback_url: http://jieyuu.net callback_url: http://8.134.32.140:13001/api/callback/order/v1/alipay

View File

@ -4,42 +4,45 @@
<!-- 通用查询映射结果 --> <!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="net.jieyuu.model.ProductOrderItemDO"> <resultMap id="BaseResultMap" type="net.jieyuu.model.ProductOrderItemDO">
<id column="id" property="id" /> <id column="id" property="id"/>
<result column="product_order_id" property="productOrderId" /> <result column="product_order_id" property="productOrderId"/>
<result column="out_trade_no" property="outTradeNo" /> <result column="out_trade_no" property="outTradeNo"/>
<result column="product_id" property="productId" /> <result column="product_id" property="productId"/>
<result column="product_name" property="productName" /> <result column="product_name" property="productName"/>
<result column="product_img" property="productImg" /> <result column="product_img" property="productImg"/>
<result column="buy_num" property="buyNum" /> <result column="buy_num" property="buyNum"/>
<result column="create_time" property="createTime" /> <result column="create_time" property="createTime"/>
<result column="total_amount" property="totalAmount" /> <result column="total_amount" property="totalAmount"/>
<result column="amount" property="amount" /> <result column="amount" property="amount"/>
</resultMap> </resultMap>
<!-- 通用查询结果列 --> <!-- 通用查询结果列 -->
<sql id="Base_Column_List"> <sql id="Base_Column_List">
id, product_order_id, out_trade_no, product_id, product_name, product_img, buy_num, create_time, total_amount, amount id
, product_order_id, out_trade_no, product_id, product_name, product_img, buy_num, create_time, total_amount, amount
</sql> </sql>
<!-- 通用查询结果列 --> <!-- 通用查询结果列 -->
<sql id="Base_Column_NO_List"> <sql id="Base_Column_List_No_Id">
id, product_order_id, out_trade_no, product_id, product_name, product_img, buy_num, create_time, total_amount, amount product_order_id
, out_trade_no, product_id, product_name, product_img, buy_num, create_time, total_amount, amount
</sql> </sql>
<insert id="insertBatch"> <insert id="insertBatch">
insert into product_order_item insert into product_order_item
(<include refid="Base_Column_NO_List"/>) (<include refid="Base_Column_List_No_Id"/>)
values values
<foreach collection="orderItemList" item="item" index="index" separator=","> <foreach collection="orderItemList" item="item" index="index" separator=",">
( (
#{item.productOrderId} #{item.productOrderId},
#{item.outTradeNo} #{item.outTradeNo},
#{item.productId} #{item.productId},
#{item.productName} #{item.productName},
#{item.productImg} #{item.productImg},
#{item.buyNum} #{item.buyNum},
#{item.createTime} #{item.createTime},
#{item.totalAmount} #{item.totalAmount},
#{item.amount} #{item.amount}
) )
</foreach> </foreach>

View File

@ -90,7 +90,6 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, ProductDO> im
@Override @Override
public ProductVO findDetailById(long productId) { public ProductVO findDetailById(long productId) {
ProductDO productDO = productMapper.selectById(productId); ProductDO productDO = productMapper.selectById(productId);
return beanProcess(productDO); return beanProcess(productDO);
} }
@ -164,7 +163,7 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, ProductDO> im
log.info("商品库存锁定信息延迟消息发送成功:{}", productMessage); log.info("商品库存锁定信息延迟消息发送成功:{}", productMessage);
} }
} }
return null; return JsonData.buildSuccess();
} }
/** /**
@ -214,7 +213,7 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, ProductDO> im
productTaskMapper.update(taskDO, new QueryWrapper<ProductTaskDO>().eq("id", productMessage.getTaskId())); productTaskMapper.update(taskDO, new QueryWrapper<ProductTaskDO>().eq("id", productMessage.getTaskId()));
// 恢复商品库存 // 恢复商品库存
// 即锁定库存的值减去当前的buyNum // 即锁定库存的值减去当前的buyNum
productMapper.unlockProductStock(taskDO.getProductId(),taskDO.getBuyNum()); productMapper.unlockProductStock(taskDO.getProductId(), taskDO.getBuyNum());
return true; return true;
} else { } else {
@ -229,7 +228,7 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, ProductDO> im
private ProductVO beanProcess(ProductDO obj) { private ProductVO beanProcess(ProductDO obj) {
ProductVO productVO = new ProductVO(); ProductVO productVO = new ProductVO();
BeanUtils.copyProperties(obj, productVO); BeanUtils.copyProperties(obj, productVO);
productVO.setStock(obj.getStock() - obj.getLockStock());
return productVO; return productVO;
} }
} }

View File

@ -62,5 +62,4 @@ mqconfig:
stock_release_routing_key: stock.release.routing.key stock_release_routing_key: stock.release.routing.key
#消息过期时间,毫秒,测试改为15秒 #消息过期时间,毫秒,测试改为15秒
#为了测试修改时间 todo 记得修改回1500 ttl: 15000
ttl: 360000

View File

@ -26,7 +26,7 @@
update product update product
set lock_stock = lock_stock + #{buyNum} set lock_stock = lock_stock + #{buyNum}
where id = #{productId} where id = #{productId}
and stock - lock_stock >={buyNum} and stock - lock_stock >= #{buyNum}
</update> </update>
<!--解锁商品库存--> <!--解锁商品库存-->
<update id="unlockProductStock"> <update id="unlockProductStock">