Commit d3712f23f04d9e41aacb78e9a4c1ad8b36b3a797
1 parent
65220cfe
扫码下单接口和分摊回调接口初步实现
Showing
14 changed files
with
1442 additions
and
292 deletions
cashier-mall/src/main/java/com/diligrp/cashier/mall/MallConfiguration.java
| 1 | package com.diligrp.cashier.mall; | 1 | package com.diligrp.cashier.mall; |
| 2 | 2 | ||
| 3 | +import com.diligrp.cashier.mall.client.RtMallHttpClient; | ||
| 4 | +import com.diligrp.cashier.mall.property.RtMallDynamicProperty; | ||
| 3 | import com.diligrp.cashier.shared.mybatis.MybatisMapperSupport; | 5 | import com.diligrp.cashier.shared.mybatis.MybatisMapperSupport; |
| 4 | import org.mybatis.spring.annotation.MapperScan; | 6 | import org.mybatis.spring.annotation.MapperScan; |
| 7 | +import org.springframework.beans.factory.annotation.Value; | ||
| 8 | +import org.springframework.context.annotation.Bean; | ||
| 5 | import org.springframework.context.annotation.ComponentScan; | 9 | import org.springframework.context.annotation.ComponentScan; |
| 6 | import org.springframework.context.annotation.Configuration; | 10 | import org.springframework.context.annotation.Configuration; |
| 7 | 11 | ||
| @@ -10,4 +14,14 @@ import org.springframework.context.annotation.Configuration; | @@ -10,4 +14,14 @@ import org.springframework.context.annotation.Configuration; | ||
| 10 | @MapperScan(basePackages = {"com.diligrp.cashier.mall.dao"}, markerInterface = MybatisMapperSupport.class) | 14 | @MapperScan(basePackages = {"com.diligrp.cashier.mall.dao"}, markerInterface = MybatisMapperSupport.class) |
| 11 | public class MallConfiguration { | 15 | public class MallConfiguration { |
| 12 | 16 | ||
| 17 | + /** | ||
| 18 | + * 创建大润发HTTP客户端 | ||
| 19 | + * 用于调用大润发订单详情接口 | ||
| 20 | + */ | ||
| 21 | + @Bean | ||
| 22 | + public RtMallHttpClient rtMallHttpClient(@Value("${rtmall.api.url:https://em-shop.feiniugo.com/api/externalapi/scanbuy/process}") String apiUrl, | ||
| 23 | + RtMallDynamicProperty rtMallDynamicProperty) { | ||
| 24 | + RtMallDynamicProperty.AppSecretDynamicProperty config = rtMallDynamicProperty.getAppSecrets().getFirst(); | ||
| 25 | + return new RtMallHttpClient(apiUrl, config.getAppKey(), config.getAppSecret()); | ||
| 26 | + } | ||
| 13 | } | 27 | } |
cashier-mall/src/main/java/com/diligrp/cashier/mall/api/RtMallOrderPaymentApi.java
0 → 100644
| 1 | +package com.diligrp.cashier.mall.api; | ||
| 2 | + | ||
| 3 | +import com.diligrp.cashier.mall.domain.rtmall.RtMarkMessage; | ||
| 4 | +import com.diligrp.cashier.mall.domain.rtmall.co.OrderPaymentCO; | ||
| 5 | +import com.diligrp.cashier.mall.domain.rtmall.co.PaymentAllocateCO; | ||
| 6 | +import com.diligrp.cashier.mall.domain.rtmall.vo.OrderSuccessVO; | ||
| 7 | +import com.diligrp.cashier.mall.service.biz.MallBizPaymentService; | ||
| 8 | +import com.diligrp.cashier.mall.sign.RtMallSign; | ||
| 9 | +import com.diligrp.cashier.mall.util.RtMallValidateUtils; | ||
| 10 | +import com.diligrp.cashier.shared.annotation.ParamLogPrint; | ||
| 11 | +import com.diligrp.cashier.shared.annotation.RepeatSubmit; | ||
| 12 | +import com.diligrp.cashier.shared.annotation.Sign; | ||
| 13 | +import com.diligrp.cashier.shared.handler.duplication.SpelDuplicationSubmit; | ||
| 14 | +import com.diligrp.cashier.shared.util.JsonUtils; | ||
| 15 | +import jakarta.annotation.Resource; | ||
| 16 | +import jakarta.validation.Valid; | ||
| 17 | +import org.springframework.validation.annotation.Validated; | ||
| 18 | +import org.springframework.web.bind.annotation.PostMapping; | ||
| 19 | +import org.springframework.web.bind.annotation.RequestBody; | ||
| 20 | +import org.springframework.web.bind.annotation.RequestMapping; | ||
| 21 | +import org.springframework.web.bind.annotation.RestController; | ||
| 22 | + | ||
| 23 | +/** | ||
| 24 | + * 扫码下单接口 | ||
| 25 | + * Pos扫支付码后,推送订单信息到商户,商户返回收银台链接 | ||
| 26 | + */ | ||
| 27 | +@RestController | ||
| 28 | +@RequestMapping(path = {"/api/rt/mall/scan", "/rt/mall/scan"}) | ||
| 29 | +@Validated | ||
| 30 | +public class RtMallOrderPaymentApi { | ||
| 31 | + | ||
| 32 | + @Resource | ||
| 33 | + private MallBizPaymentService mallBizPaymentService; | ||
| 34 | + | ||
| 35 | + /** | ||
| 36 | + * 扫码下单接口 | ||
| 37 | + * Pos扫支付码后,推送订单信息到商户,商户返回收银台链接 | ||
| 38 | + */ | ||
| 39 | + @PostMapping("/order/v1") | ||
| 40 | + @ParamLogPrint(outPrint = true) | ||
| 41 | + @Sign(sign = RtMallSign.class) | ||
| 42 | + @RepeatSubmit(prefix = "order_payment_sync:", value = "#req['trade_id']", duplicationSubmit = SpelDuplicationSubmit.class) | ||
| 43 | + public RtMarkMessage<OrderSuccessVO> createOrderPayment(@Valid @RequestBody Object req) { | ||
| 44 | + OrderPaymentCO orderPaymentCO = JsonUtils.convertValue(req, OrderPaymentCO.class); | ||
| 45 | + RtMallValidateUtils.valid(orderPaymentCO); | ||
| 46 | + return RtMarkMessage.success(mallBizPaymentService.createOrderPayment(orderPaymentCO)); | ||
| 47 | + } | ||
| 48 | + | ||
| 49 | + /** | ||
| 50 | + * 支付分摊回调接口 | ||
| 51 | + * POS完成支付分摊后,调用此接口通知商户商品信息已就绪 | ||
| 52 | + */ | ||
| 53 | + @PostMapping("/status/callback") | ||
| 54 | + @ParamLogPrint(outPrint = true) | ||
| 55 | + @Sign(sign = RtMallSign.class) | ||
| 56 | + @RepeatSubmit(prefix = "payment_allocate_callback:", value = { | ||
| 57 | + "#req['trade_list'].![trade_id].![#root + #this]",}, duplicationSubmit = SpelDuplicationSubmit.class) | ||
| 58 | + public RtMarkMessage<?> handlePaymentAllocate(@Valid @RequestBody Object req) { | ||
| 59 | + PaymentAllocateCO allocateCO = JsonUtils.convertValue(req, PaymentAllocateCO.class); | ||
| 60 | + RtMallValidateUtils.valid(allocateCO); | ||
| 61 | + mallBizPaymentService.handlePaymentAllocate(allocateCO); | ||
| 62 | + return RtMarkMessage.success(); | ||
| 63 | + } | ||
| 64 | +} |
cashier-mall/src/main/java/com/diligrp/cashier/mall/client/RtMallHttpClient.java
0 → 100644
| 1 | +package com.diligrp.cashier.mall.client; | ||
| 2 | + | ||
| 3 | +import com.diligrp.cashier.mall.domain.rtmall.vo.OrderDetailResponseVO; | ||
| 4 | +import com.diligrp.cashier.mall.exception.RtMartMallException; | ||
| 5 | +import com.diligrp.cashier.mall.util.HttpClientUtils; | ||
| 6 | +import com.diligrp.cashier.mall.util.RtMallSignMd5Utils; | ||
| 7 | +import com.diligrp.cashier.mall.type.RtMarkErrorCode; | ||
| 8 | +import com.diligrp.cashier.shared.util.JsonUtils; | ||
| 9 | +import org.slf4j.Logger; | ||
| 10 | +import org.slf4j.LoggerFactory; | ||
| 11 | + | ||
| 12 | +import java.util.HashMap; | ||
| 13 | +import java.util.Map; | ||
| 14 | + | ||
| 15 | +/** | ||
| 16 | + * 大润发HTTP客户端 | ||
| 17 | + * 调用大润发订单详情接口 | ||
| 18 | + */ | ||
| 19 | +public class RtMallHttpClient { | ||
| 20 | + private static final Logger log = LoggerFactory.getLogger(RtMallHttpClient.class); | ||
| 21 | + | ||
| 22 | + private final String apiUrl; | ||
| 23 | + private final String appKey; | ||
| 24 | + private final String appSecret; | ||
| 25 | + | ||
| 26 | + public RtMallHttpClient(String apiUrl, String appKey, String appSecret) { | ||
| 27 | + this.apiUrl = apiUrl; | ||
| 28 | + this.appKey = appKey; | ||
| 29 | + this.appSecret = appSecret; | ||
| 30 | + } | ||
| 31 | + | ||
| 32 | + /** | ||
| 33 | + * 查询订单详情 | ||
| 34 | + * | ||
| 35 | + * @param orderId 订单号 | ||
| 36 | + * @param tradeId 支付流水号 | ||
| 37 | + * @param userCode 会员编号 | ||
| 38 | + * @return 订单详情 | ||
| 39 | + */ | ||
| 40 | + public OrderDetailResponseVO getOrderDetail(String orderId, String tradeId, String userCode) { | ||
| 41 | + log.info("调用大润发订单详情接口: order_id={}, trade_id={}, user_code={}", orderId, tradeId, userCode); | ||
| 42 | + | ||
| 43 | + //构建请求参数 | ||
| 44 | + Map<String, Object> params = new HashMap<>(); | ||
| 45 | + params.put("app_key", appKey); | ||
| 46 | + params.put("version", "v1"); | ||
| 47 | + params.put("timestamp", System.currentTimeMillis() / 1000); | ||
| 48 | + params.put("method", "scanbuy.order.detail"); | ||
| 49 | + params.put("user_code", userCode); | ||
| 50 | + params.put("order_id", orderId); | ||
| 51 | + params.put("trade_id", tradeId); | ||
| 52 | + | ||
| 53 | + //生成签名 | ||
| 54 | + String sign = RtMallSignMd5Utils.generateSign(params, appSecret); | ||
| 55 | + params.put("sign", sign); | ||
| 56 | + | ||
| 57 | + //发送HTTP请求 | ||
| 58 | + String responseBody = HttpClientUtils.postJson(apiUrl, params, null, "大润发订单详情"); | ||
| 59 | + | ||
| 60 | + //解析响应 | ||
| 61 | + OrderDetailResponseVO detailResponse = JsonUtils.fromJsonString(responseBody, OrderDetailResponseVO.class); | ||
| 62 | + if (detailResponse == null) { | ||
| 63 | + log.error("解析大润发响应失败"); | ||
| 64 | + throw new RtMartMallException(RtMarkErrorCode.E4004); | ||
| 65 | + } | ||
| 66 | + | ||
| 67 | + //检查响应状态 | ||
| 68 | + if (!"success".equals(detailResponse.getResult()) || !"E0000".equals(detailResponse.getCode())) { | ||
| 69 | + log.error("调用大润发订单详情接口失败: code={}, msg={}", | ||
| 70 | + detailResponse.getCode(), detailResponse.getMsg()); | ||
| 71 | + throw new RtMartMallException(detailResponse.getCode(), detailResponse.getMsg()); | ||
| 72 | + } | ||
| 73 | + | ||
| 74 | + log.info("订单详情查询成功: order_id={}, item_count={}", orderId, | ||
| 75 | + detailResponse.getData() != null && detailResponse.getData().getItemList() != null | ||
| 76 | + ? detailResponse.getData().getItemList().size() : 0); | ||
| 77 | + | ||
| 78 | + return detailResponse; | ||
| 79 | + } | ||
| 80 | +} |
cashier-mall/src/main/java/com/diligrp/cashier/mall/dao/MallBizOrderDao.java
| @@ -30,4 +30,6 @@ public interface MallBizOrderDao extends MybatisMapperSupport { | @@ -30,4 +30,6 @@ public interface MallBizOrderDao extends MybatisMapperSupport { | ||
| 30 | MallBizOrder getByOrderId(@Param("orderId") String orderId); | 30 | MallBizOrder getByOrderId(@Param("orderId") String orderId); |
| 31 | 31 | ||
| 32 | void batchInsert(@Param("list") List<MallBizOrder> mallBizOrders); | 32 | void batchInsert(@Param("list") List<MallBizOrder> mallBizOrders); |
| 33 | + | ||
| 34 | + MallBizOrder findByOrderIdAndTradeId(String orderId, String tradeId); | ||
| 33 | } | 35 | } |
cashier-mall/src/main/java/com/diligrp/cashier/mall/dao/MallBizPaymentDao.java
| @@ -20,4 +20,6 @@ public interface MallBizPaymentDao extends MybatisMapperSupport { | @@ -20,4 +20,6 @@ public interface MallBizPaymentDao extends MybatisMapperSupport { | ||
| 20 | int updateByPrimaryKeySelective(MallBizPayment record); | 20 | int updateByPrimaryKeySelective(MallBizPayment record); |
| 21 | 21 | ||
| 22 | int updateByPrimaryKey(MallBizPayment record); | 22 | int updateByPrimaryKey(MallBizPayment record); |
| 23 | + | ||
| 24 | + MallBizPayment findByOrderIdAndTradeId(String orderId, String tradeId); | ||
| 23 | } | 25 | } |
cashier-mall/src/main/java/com/diligrp/cashier/mall/domain/rtmall/co/OrderPaymentCO.java
0 → 100644
| 1 | +package com.diligrp.cashier.mall.domain.rtmall.co; | ||
| 2 | + | ||
| 3 | +import com.diligrp.cashier.mall.domain.rtmall.RtMarkBaseCO; | ||
| 4 | +import com.diligrp.cashier.mall.util.TimestampToLocalDateTimeDeserializer; | ||
| 5 | +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; | ||
| 6 | +import jakarta.validation.constraints.NotBlank; | ||
| 7 | +import jakarta.validation.constraints.NotNull; | ||
| 8 | + | ||
| 9 | +import java.time.LocalDateTime; | ||
| 10 | + | ||
| 11 | +/** | ||
| 12 | + * 扫码下单支付CO | ||
| 13 | + */ | ||
| 14 | +public class OrderPaymentCO extends RtMarkBaseCO { | ||
| 15 | + | ||
| 16 | + /** | ||
| 17 | + * 中台订单号 | ||
| 18 | + */ | ||
| 19 | + @NotBlank(message = "order_id is required") | ||
| 20 | + private String orderId; | ||
| 21 | + | ||
| 22 | + /** | ||
| 23 | + * 中台支付流水号 | ||
| 24 | + */ | ||
| 25 | + @NotBlank(message = "trade_id is required") | ||
| 26 | + private String tradeId; | ||
| 27 | + | ||
| 28 | + /** | ||
| 29 | + * 会员编号 | ||
| 30 | + */ | ||
| 31 | + @NotBlank(message = "user_code is required") | ||
| 32 | + private String userCode; | ||
| 33 | + | ||
| 34 | + /** | ||
| 35 | + * 企业组编号 | ||
| 36 | + */ | ||
| 37 | + @NotBlank(message = "company_code is required") | ||
| 38 | + private String companyCode; | ||
| 39 | + | ||
| 40 | + /** | ||
| 41 | + * 应付金额 | ||
| 42 | + */ | ||
| 43 | + @NotNull(message = "total_amount is required") | ||
| 44 | + private Long totalAmount; | ||
| 45 | + | ||
| 46 | + /** | ||
| 47 | + * 支付单创建时间 | ||
| 48 | + */ | ||
| 49 | + @NotNull(message = "order_time is required") | ||
| 50 | + @JsonDeserialize(using = TimestampToLocalDateTimeDeserializer.class) | ||
| 51 | + private LocalDateTime orderTime; | ||
| 52 | + | ||
| 53 | + /** | ||
| 54 | + * 支付单类型: 1 线下扫码购,2 接口扫码购 | ||
| 55 | + */ | ||
| 56 | + @NotNull(message = "order_type is required") | ||
| 57 | + private Integer orderType; | ||
| 58 | + | ||
| 59 | + /** | ||
| 60 | + * 门店编号 | ||
| 61 | + */ | ||
| 62 | + @NotBlank(message = "shop_code is required") | ||
| 63 | + private String shopCode; | ||
| 64 | + | ||
| 65 | + /** | ||
| 66 | + * 门店名称 | ||
| 67 | + */ | ||
| 68 | + @NotBlank(message = "shop_name is required") | ||
| 69 | + private String shopName; | ||
| 70 | + | ||
| 71 | + /** | ||
| 72 | + * 动态码,order_type=2时必填 | ||
| 73 | + */ | ||
| 74 | + private String dynamicCode; | ||
| 75 | + | ||
| 76 | + | ||
| 77 | + public String getOrderId() { | ||
| 78 | + return orderId; | ||
| 79 | + } | ||
| 80 | + | ||
| 81 | + public void setOrderId(String orderId) { | ||
| 82 | + this.orderId = orderId; | ||
| 83 | + } | ||
| 84 | + | ||
| 85 | + public String getTradeId() { | ||
| 86 | + return tradeId; | ||
| 87 | + } | ||
| 88 | + | ||
| 89 | + public void setTradeId(String tradeId) { | ||
| 90 | + this.tradeId = tradeId; | ||
| 91 | + } | ||
| 92 | + | ||
| 93 | + public String getUserCode() { | ||
| 94 | + return userCode; | ||
| 95 | + } | ||
| 96 | + | ||
| 97 | + public void setUserCode(String userCode) { | ||
| 98 | + this.userCode = userCode; | ||
| 99 | + } | ||
| 100 | + | ||
| 101 | + public String getCompanyCode() { | ||
| 102 | + return companyCode; | ||
| 103 | + } | ||
| 104 | + | ||
| 105 | + public void setCompanyCode(String companyCode) { | ||
| 106 | + this.companyCode = companyCode; | ||
| 107 | + } | ||
| 108 | + | ||
| 109 | + public Long getTotalAmount() { | ||
| 110 | + return totalAmount; | ||
| 111 | + } | ||
| 112 | + | ||
| 113 | + public void setTotalAmount(Long totalAmount) { | ||
| 114 | + this.totalAmount = totalAmount; | ||
| 115 | + } | ||
| 116 | + | ||
| 117 | + public LocalDateTime getOrderTime() { | ||
| 118 | + return orderTime; | ||
| 119 | + } | ||
| 120 | + | ||
| 121 | + public void setOrderTime(LocalDateTime orderTime) { | ||
| 122 | + this.orderTime = orderTime; | ||
| 123 | + } | ||
| 124 | + | ||
| 125 | + public Integer getOrderType() { | ||
| 126 | + return orderType; | ||
| 127 | + } | ||
| 128 | + | ||
| 129 | + public void setOrderType(Integer orderType) { | ||
| 130 | + this.orderType = orderType; | ||
| 131 | + } | ||
| 132 | + | ||
| 133 | + public String getShopCode() { | ||
| 134 | + return shopCode; | ||
| 135 | + } | ||
| 136 | + | ||
| 137 | + public void setShopCode(String shopCode) { | ||
| 138 | + this.shopCode = shopCode; | ||
| 139 | + } | ||
| 140 | + | ||
| 141 | + public String getShopName() { | ||
| 142 | + return shopName; | ||
| 143 | + } | ||
| 144 | + | ||
| 145 | + public void setShopName(String shopName) { | ||
| 146 | + this.shopName = shopName; | ||
| 147 | + } | ||
| 148 | + | ||
| 149 | + public String getDynamicCode() { | ||
| 150 | + return dynamicCode; | ||
| 151 | + } | ||
| 152 | + | ||
| 153 | + public void setDynamicCode(String dynamicCode) { | ||
| 154 | + this.dynamicCode = dynamicCode; | ||
| 155 | + } | ||
| 156 | +} |
cashier-mall/src/main/java/com/diligrp/cashier/mall/domain/rtmall/co/PaymentAllocateCO.java
0 → 100644
| 1 | +package com.diligrp.cashier.mall.domain.rtmall.co; | ||
| 2 | + | ||
| 3 | +import com.diligrp.cashier.mall.domain.rtmall.RtMarkBaseCO; | ||
| 4 | +import com.fasterxml.jackson.annotation.JsonProperty; | ||
| 5 | +import jakarta.validation.Valid; | ||
| 6 | +import jakarta.validation.constraints.NotEmpty; | ||
| 7 | + | ||
| 8 | +import java.util.List; | ||
| 9 | + | ||
| 10 | +/** | ||
| 11 | + * 支付分摊回调请求对象 | ||
| 12 | + * POS完成支付分摊后,调用此接口通知商户 | ||
| 13 | + */ | ||
| 14 | +public class PaymentAllocateCO extends RtMarkBaseCO { | ||
| 15 | + /** | ||
| 16 | + * 支付流水列表 | ||
| 17 | + */ | ||
| 18 | + @NotEmpty(message = "trade_list is required") | ||
| 19 | + @Valid | ||
| 20 | + private List<TradeInfo> tradeList; | ||
| 21 | + | ||
| 22 | + public List<TradeInfo> getTradeList() { | ||
| 23 | + return tradeList; | ||
| 24 | + } | ||
| 25 | + | ||
| 26 | + public void setTradeList(List<TradeInfo> tradeList) { | ||
| 27 | + this.tradeList = tradeList; | ||
| 28 | + } | ||
| 29 | + | ||
| 30 | + /** | ||
| 31 | + * 支付流水信息 | ||
| 32 | + */ | ||
| 33 | + public static class TradeInfo { | ||
| 34 | + /** | ||
| 35 | + * 订单号 | ||
| 36 | + */ | ||
| 37 | + @JsonProperty("order_id") | ||
| 38 | + @NotEmpty(message = "order_id is required") | ||
| 39 | + private String orderId; | ||
| 40 | + | ||
| 41 | + /** | ||
| 42 | + * 支付流水号 | ||
| 43 | + */ | ||
| 44 | + @JsonProperty("trade_id") | ||
| 45 | + @NotEmpty(message = "trade_id is required") | ||
| 46 | + private String tradeId; | ||
| 47 | + | ||
| 48 | + /** | ||
| 49 | + * 会员编号 | ||
| 50 | + */ | ||
| 51 | + @JsonProperty("user_code") | ||
| 52 | + @NotEmpty(message = "user_code is required") | ||
| 53 | + private String userCode; | ||
| 54 | + | ||
| 55 | + /** | ||
| 56 | + * 企业组编号 | ||
| 57 | + */ | ||
| 58 | + @JsonProperty("company_code") | ||
| 59 | + @NotEmpty(message = "company_code is required") | ||
| 60 | + private String companyCode; | ||
| 61 | + | ||
| 62 | + public String getOrderId() { | ||
| 63 | + return orderId; | ||
| 64 | + } | ||
| 65 | + | ||
| 66 | + public void setOrderId(String orderId) { | ||
| 67 | + this.orderId = orderId; | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + public String getTradeId() { | ||
| 71 | + return tradeId; | ||
| 72 | + } | ||
| 73 | + | ||
| 74 | + public void setTradeId(String tradeId) { | ||
| 75 | + this.tradeId = tradeId; | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | + public String getUserCode() { | ||
| 79 | + return userCode; | ||
| 80 | + } | ||
| 81 | + | ||
| 82 | + public void setUserCode(String userCode) { | ||
| 83 | + this.userCode = userCode; | ||
| 84 | + } | ||
| 85 | + | ||
| 86 | + public String getCompanyCode() { | ||
| 87 | + return companyCode; | ||
| 88 | + } | ||
| 89 | + | ||
| 90 | + public void setCompanyCode(String companyCode) { | ||
| 91 | + this.companyCode = companyCode; | ||
| 92 | + } | ||
| 93 | + } | ||
| 94 | +} |
cashier-mall/src/main/java/com/diligrp/cashier/mall/domain/rtmall/vo/OrderDetailResponseVO.java
0 → 100644
| 1 | +package com.diligrp.cashier.mall.domain.rtmall.vo; | ||
| 2 | + | ||
| 3 | +import com.fasterxml.jackson.databind.PropertyNamingStrategies; | ||
| 4 | +import com.fasterxml.jackson.databind.annotation.JsonNaming; | ||
| 5 | + | ||
| 6 | +import java.util.List; | ||
| 7 | + | ||
| 8 | +/** | ||
| 9 | + * 大润发订单详情接口响应 | ||
| 10 | + */ | ||
| 11 | +@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class) | ||
| 12 | +public class OrderDetailResponseVO { | ||
| 13 | + /** | ||
| 14 | + * 接口状态 | ||
| 15 | + */ | ||
| 16 | + private String result; | ||
| 17 | + | ||
| 18 | + /** | ||
| 19 | + * 状态码 | ||
| 20 | + */ | ||
| 21 | + private String code; | ||
| 22 | + | ||
| 23 | + /** | ||
| 24 | + * 状态描述 | ||
| 25 | + */ | ||
| 26 | + private String msg; | ||
| 27 | + | ||
| 28 | + /** | ||
| 29 | + * 返回数据 | ||
| 30 | + */ | ||
| 31 | + private OrderDetailData data; | ||
| 32 | + | ||
| 33 | + public String getResult() { | ||
| 34 | + return result; | ||
| 35 | + } | ||
| 36 | + | ||
| 37 | + public void setResult(String result) { | ||
| 38 | + this.result = result; | ||
| 39 | + } | ||
| 40 | + | ||
| 41 | + public String getCode() { | ||
| 42 | + return code; | ||
| 43 | + } | ||
| 44 | + | ||
| 45 | + public void setCode(String code) { | ||
| 46 | + this.code = code; | ||
| 47 | + } | ||
| 48 | + | ||
| 49 | + public String getMsg() { | ||
| 50 | + return msg; | ||
| 51 | + } | ||
| 52 | + | ||
| 53 | + public void setMsg(String msg) { | ||
| 54 | + this.msg = msg; | ||
| 55 | + } | ||
| 56 | + | ||
| 57 | + public OrderDetailData getData() { | ||
| 58 | + return data; | ||
| 59 | + } | ||
| 60 | + | ||
| 61 | + public void setData(OrderDetailData data) { | ||
| 62 | + this.data = data; | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | + /** | ||
| 66 | + * 订单详情数据 | ||
| 67 | + */ | ||
| 68 | + @JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class) | ||
| 69 | + public static class OrderDetailData { | ||
| 70 | + /** | ||
| 71 | + * 订单号 | ||
| 72 | + */ | ||
| 73 | + private String orderId; | ||
| 74 | + | ||
| 75 | + /** | ||
| 76 | + * 支付流水号 | ||
| 77 | + */ | ||
| 78 | + private String tradeId; | ||
| 79 | + | ||
| 80 | + /** | ||
| 81 | + * 店铺编号 | ||
| 82 | + */ | ||
| 83 | + private String shopCode; | ||
| 84 | + | ||
| 85 | + /** | ||
| 86 | + * 店铺名称 | ||
| 87 | + */ | ||
| 88 | + private String shopName; | ||
| 89 | + | ||
| 90 | + /** | ||
| 91 | + * 订单金额(分) | ||
| 92 | + */ | ||
| 93 | + private Long totalAmount; | ||
| 94 | + | ||
| 95 | + /** | ||
| 96 | + * 会员手机号 | ||
| 97 | + */ | ||
| 98 | + private String mobile; | ||
| 99 | + | ||
| 100 | + /** | ||
| 101 | + * 商户会员编号 | ||
| 102 | + */ | ||
| 103 | + private String userCode; | ||
| 104 | + | ||
| 105 | + /** | ||
| 106 | + * 订单状态 | ||
| 107 | + */ | ||
| 108 | + private String orderStatus; | ||
| 109 | + | ||
| 110 | + /** | ||
| 111 | + * 订单创建时间 | ||
| 112 | + */ | ||
| 113 | + private String createTime; | ||
| 114 | + | ||
| 115 | + /** | ||
| 116 | + * 订单修改时间 | ||
| 117 | + */ | ||
| 118 | + private String updateTime; | ||
| 119 | + | ||
| 120 | + /** | ||
| 121 | + * 支付流水号 | ||
| 122 | + */ | ||
| 123 | + private String transactionId; | ||
| 124 | + | ||
| 125 | + /** | ||
| 126 | + * 支付状态 | ||
| 127 | + */ | ||
| 128 | + private String payStatus; | ||
| 129 | + | ||
| 130 | + /** | ||
| 131 | + * 商品列表 | ||
| 132 | + */ | ||
| 133 | + private List<OrderItem> itemList; | ||
| 134 | + | ||
| 135 | + public String getOrderId() { | ||
| 136 | + return orderId; | ||
| 137 | + } | ||
| 138 | + | ||
| 139 | + public void setOrderId(String orderId) { | ||
| 140 | + this.orderId = orderId; | ||
| 141 | + } | ||
| 142 | + | ||
| 143 | + public String getTradeId() { | ||
| 144 | + return tradeId; | ||
| 145 | + } | ||
| 146 | + | ||
| 147 | + public void setTradeId(String tradeId) { | ||
| 148 | + this.tradeId = tradeId; | ||
| 149 | + } | ||
| 150 | + | ||
| 151 | + public String getShopCode() { | ||
| 152 | + return shopCode; | ||
| 153 | + } | ||
| 154 | + | ||
| 155 | + public void setShopCode(String shopCode) { | ||
| 156 | + this.shopCode = shopCode; | ||
| 157 | + } | ||
| 158 | + | ||
| 159 | + public String getShopName() { | ||
| 160 | + return shopName; | ||
| 161 | + } | ||
| 162 | + | ||
| 163 | + public void setShopName(String shopName) { | ||
| 164 | + this.shopName = shopName; | ||
| 165 | + } | ||
| 166 | + | ||
| 167 | + public Long getTotalAmount() { | ||
| 168 | + return totalAmount; | ||
| 169 | + } | ||
| 170 | + | ||
| 171 | + public void setTotalAmount(Long totalAmount) { | ||
| 172 | + this.totalAmount = totalAmount; | ||
| 173 | + } | ||
| 174 | + | ||
| 175 | + public String getMobile() { | ||
| 176 | + return mobile; | ||
| 177 | + } | ||
| 178 | + | ||
| 179 | + public void setMobile(String mobile) { | ||
| 180 | + this.mobile = mobile; | ||
| 181 | + } | ||
| 182 | + | ||
| 183 | + public String getUserCode() { | ||
| 184 | + return userCode; | ||
| 185 | + } | ||
| 186 | + | ||
| 187 | + public void setUserCode(String userCode) { | ||
| 188 | + this.userCode = userCode; | ||
| 189 | + } | ||
| 190 | + | ||
| 191 | + public String getOrderStatus() { | ||
| 192 | + return orderStatus; | ||
| 193 | + } | ||
| 194 | + | ||
| 195 | + public void setOrderStatus(String orderStatus) { | ||
| 196 | + this.orderStatus = orderStatus; | ||
| 197 | + } | ||
| 198 | + | ||
| 199 | + public String getCreateTime() { | ||
| 200 | + return createTime; | ||
| 201 | + } | ||
| 202 | + | ||
| 203 | + public void setCreateTime(String createTime) { | ||
| 204 | + this.createTime = createTime; | ||
| 205 | + } | ||
| 206 | + | ||
| 207 | + public String getUpdateTime() { | ||
| 208 | + return updateTime; | ||
| 209 | + } | ||
| 210 | + | ||
| 211 | + public void setUpdateTime(String updateTime) { | ||
| 212 | + this.updateTime = updateTime; | ||
| 213 | + } | ||
| 214 | + | ||
| 215 | + public String getTransactionId() { | ||
| 216 | + return transactionId; | ||
| 217 | + } | ||
| 218 | + | ||
| 219 | + public void setTransactionId(String transactionId) { | ||
| 220 | + this.transactionId = transactionId; | ||
| 221 | + } | ||
| 222 | + | ||
| 223 | + public String getPayStatus() { | ||
| 224 | + return payStatus; | ||
| 225 | + } | ||
| 226 | + | ||
| 227 | + public void setPayStatus(String payStatus) { | ||
| 228 | + this.payStatus = payStatus; | ||
| 229 | + } | ||
| 230 | + | ||
| 231 | + public List<OrderItem> getItemList() { | ||
| 232 | + return itemList; | ||
| 233 | + } | ||
| 234 | + | ||
| 235 | + public void setItemList(List<OrderItem> itemList) { | ||
| 236 | + this.itemList = itemList; | ||
| 237 | + } | ||
| 238 | + } | ||
| 239 | + | ||
| 240 | + /** | ||
| 241 | + * 订单商品项 | ||
| 242 | + */ | ||
| 243 | + @JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class) | ||
| 244 | + public static class OrderItem { | ||
| 245 | + /** | ||
| 246 | + * 子订单ID | ||
| 247 | + */ | ||
| 248 | + private String subOrderId; | ||
| 249 | + | ||
| 250 | + /** | ||
| 251 | + * SKU编号 | ||
| 252 | + */ | ||
| 253 | + private String itemBn; | ||
| 254 | + | ||
| 255 | + /** | ||
| 256 | + * 品名 | ||
| 257 | + */ | ||
| 258 | + private String itemName; | ||
| 259 | + | ||
| 260 | + /** | ||
| 261 | + * 商品金额(分) | ||
| 262 | + */ | ||
| 263 | + private Long amount; | ||
| 264 | + | ||
| 265 | + /** | ||
| 266 | + * 税则分类编码 | ||
| 267 | + */ | ||
| 268 | + private String taxCategoryCode; | ||
| 269 | + | ||
| 270 | + /** | ||
| 271 | + * 销项税率 | ||
| 272 | + */ | ||
| 273 | + private String taxOutputRate; | ||
| 274 | + | ||
| 275 | + /** | ||
| 276 | + * 税则分类名称 | ||
| 277 | + */ | ||
| 278 | + private String taxCategoryName; | ||
| 279 | + | ||
| 280 | + /** | ||
| 281 | + * 税则分类简称 | ||
| 282 | + */ | ||
| 283 | + private String taxCategoryShortName; | ||
| 284 | + | ||
| 285 | + /** | ||
| 286 | + * 是否纯称重品(0=否,1=是) | ||
| 287 | + */ | ||
| 288 | + private Integer isWeight; | ||
| 289 | + | ||
| 290 | + /** | ||
| 291 | + * 商品数量(纯称重品时单位为kg) | ||
| 292 | + */ | ||
| 293 | + private Double num; | ||
| 294 | + | ||
| 295 | + public String getSubOrderId() { | ||
| 296 | + return subOrderId; | ||
| 297 | + } | ||
| 298 | + | ||
| 299 | + public void setSubOrderId(String subOrderId) { | ||
| 300 | + this.subOrderId = subOrderId; | ||
| 301 | + } | ||
| 302 | + | ||
| 303 | + public String getItemBn() { | ||
| 304 | + return itemBn; | ||
| 305 | + } | ||
| 306 | + | ||
| 307 | + public void setItemBn(String itemBn) { | ||
| 308 | + this.itemBn = itemBn; | ||
| 309 | + } | ||
| 310 | + | ||
| 311 | + public String getItemName() { | ||
| 312 | + return itemName; | ||
| 313 | + } | ||
| 314 | + | ||
| 315 | + public void setItemName(String itemName) { | ||
| 316 | + this.itemName = itemName; | ||
| 317 | + } | ||
| 318 | + | ||
| 319 | + public Long getAmount() { | ||
| 320 | + return amount; | ||
| 321 | + } | ||
| 322 | + | ||
| 323 | + public void setAmount(Long amount) { | ||
| 324 | + this.amount = amount; | ||
| 325 | + } | ||
| 326 | + | ||
| 327 | + public String getTaxCategoryCode() { | ||
| 328 | + return taxCategoryCode; | ||
| 329 | + } | ||
| 330 | + | ||
| 331 | + public void setTaxCategoryCode(String taxCategoryCode) { | ||
| 332 | + this.taxCategoryCode = taxCategoryCode; | ||
| 333 | + } | ||
| 334 | + | ||
| 335 | + public String getTaxOutputRate() { | ||
| 336 | + return taxOutputRate; | ||
| 337 | + } | ||
| 338 | + | ||
| 339 | + public void setTaxOutputRate(String taxOutputRate) { | ||
| 340 | + this.taxOutputRate = taxOutputRate; | ||
| 341 | + } | ||
| 342 | + | ||
| 343 | + public String getTaxCategoryName() { | ||
| 344 | + return taxCategoryName; | ||
| 345 | + } | ||
| 346 | + | ||
| 347 | + public void setTaxCategoryName(String taxCategoryName) { | ||
| 348 | + this.taxCategoryName = taxCategoryName; | ||
| 349 | + } | ||
| 350 | + | ||
| 351 | + public String getTaxCategoryShortName() { | ||
| 352 | + return taxCategoryShortName; | ||
| 353 | + } | ||
| 354 | + | ||
| 355 | + public void setTaxCategoryShortName(String taxCategoryShortName) { | ||
| 356 | + this.taxCategoryShortName = taxCategoryShortName; | ||
| 357 | + } | ||
| 358 | + | ||
| 359 | + public Integer getIsWeight() { | ||
| 360 | + return isWeight; | ||
| 361 | + } | ||
| 362 | + | ||
| 363 | + public void setIsWeight(Integer isWeight) { | ||
| 364 | + this.isWeight = isWeight; | ||
| 365 | + } | ||
| 366 | + | ||
| 367 | + public Double getNum() { | ||
| 368 | + return num; | ||
| 369 | + } | ||
| 370 | + | ||
| 371 | + public void setNum(Double num) { | ||
| 372 | + this.num = num; | ||
| 373 | + } | ||
| 374 | + } | ||
| 375 | +} |
cashier-mall/src/main/java/com/diligrp/cashier/mall/service/biz/MallBizPaymentService.java
| 1 | package com.diligrp.cashier.mall.service.biz; | 1 | package com.diligrp.cashier.mall.service.biz; |
| 2 | 2 | ||
| 3 | +import com.diligrp.cashier.mall.domain.rtmall.co.OrderPaymentCO; | ||
| 4 | +import com.diligrp.cashier.mall.domain.rtmall.co.PaymentAllocateCO; | ||
| 5 | +import com.diligrp.cashier.mall.domain.rtmall.vo.OrderSuccessVO; | ||
| 3 | import com.diligrp.cashier.mall.model.MallBizPayment; | 6 | import com.diligrp.cashier.mall.model.MallBizPayment; |
| 4 | import com.diligrp.cashier.mall.model.MallBizPaymentOrder; | 7 | import com.diligrp.cashier.mall.model.MallBizPaymentOrder; |
| 5 | 8 | ||
| @@ -14,4 +17,21 @@ public interface MallBizPaymentService { | @@ -14,4 +17,21 @@ public interface MallBizPaymentService { | ||
| 14 | void save(MallBizPayment mallBizPayment); | 17 | void save(MallBizPayment mallBizPayment); |
| 15 | 18 | ||
| 16 | MallBizPaymentOrder paymentOrderInfo(MallBizPaymentOrder mallBizPaymentOrder); | 19 | MallBizPaymentOrder paymentOrderInfo(MallBizPaymentOrder mallBizPaymentOrder); |
| 20 | + | ||
| 21 | + /** | ||
| 22 | + * 扫码下单接口 | ||
| 23 | + * Pos扫支付码后,推送订单信息到商户,商户返回收银台链接 | ||
| 24 | + * | ||
| 25 | + * @param orderPaymentCO 扫码下单请求 | ||
| 26 | + * @return 商户支付单号和收银台链接 | ||
| 27 | + */ | ||
| 28 | + OrderSuccessVO createOrderPayment(OrderPaymentCO orderPaymentCO); | ||
| 29 | + | ||
| 30 | + /** | ||
| 31 | + * 支付分摊回调接口 | ||
| 32 | + * POS完成支付分摊后,调用此接口通知商户商品信息已就绪 | ||
| 33 | + * | ||
| 34 | + * @param allocateCO 分摊回调请求 | ||
| 35 | + */ | ||
| 36 | + void handlePaymentAllocate(PaymentAllocateCO allocateCO); | ||
| 17 | } | 37 | } |
cashier-mall/src/main/java/com/diligrp/cashier/mall/service/biz/impl/MallBizOrderServiceImpl.java
| @@ -72,7 +72,6 @@ public class MallBizOrderServiceImpl implements MallBizOrderService { | @@ -72,7 +72,6 @@ public class MallBizOrderServiceImpl implements MallBizOrderService { | ||
| 72 | MallBizPayment mallBizPayment = MallBizPayment.of(mallBizOrders); | 72 | MallBizPayment mallBizPayment = MallBizPayment.of(mallBizOrders); |
| 73 | 73 | ||
| 74 | // TODO 2025/12/30: 预支付信息 收银台地址信息 | 74 | // TODO 2025/12/30: 预支付信息 收银台地址信息 |
| 75 | - mallBizPayment.setPayTradeId(IdUtil.simpleUUID()); | ||
| 76 | mallBizPayment.setCashierUrl("https://cashier.test.gszdtop.com?payTradeNo=" + mallBizPayment.getPayTradeNo()); | 75 | mallBizPayment.setCashierUrl("https://cashier.test.gszdtop.com?payTradeNo=" + mallBizPayment.getPayTradeNo()); |
| 77 | 76 | ||
| 78 | // save | 77 | // save |
cashier-mall/src/main/java/com/diligrp/cashier/mall/service/biz/impl/MallBizPaymentServiceImpl.java
| 1 | package com.diligrp.cashier.mall.service.biz.impl; | 1 | package com.diligrp.cashier.mall.service.biz.impl; |
| 2 | 2 | ||
| 3 | +import com.diligrp.cashier.mall.MallConstants; | ||
| 4 | +import com.diligrp.cashier.mall.client.RtMallHttpClient; | ||
| 5 | +import com.diligrp.cashier.mall.dao.MallBizOrderDao; | ||
| 6 | +import com.diligrp.cashier.mall.dao.MallBizOrderItemDao; | ||
| 3 | import com.diligrp.cashier.mall.dao.MallBizPaymentDao; | 7 | import com.diligrp.cashier.mall.dao.MallBizPaymentDao; |
| 4 | import com.diligrp.cashier.mall.dao.MallBizPaymentOrderDao; | 8 | import com.diligrp.cashier.mall.dao.MallBizPaymentOrderDao; |
| 9 | +import com.diligrp.cashier.mall.domain.rtmall.co.AuthLoginCO; | ||
| 5 | import com.diligrp.cashier.mall.domain.rtmall.co.OrderInfoCO; | 10 | import com.diligrp.cashier.mall.domain.rtmall.co.OrderInfoCO; |
| 11 | +import com.diligrp.cashier.mall.domain.rtmall.co.OrderPaymentCO; | ||
| 12 | +import com.diligrp.cashier.mall.domain.rtmall.co.PaymentAllocateCO; | ||
| 13 | +import com.diligrp.cashier.mall.domain.rtmall.vo.OrderDetailResponseVO; | ||
| 6 | import com.diligrp.cashier.mall.domain.rtmall.vo.OrderPaymentVO; | 14 | import com.diligrp.cashier.mall.domain.rtmall.vo.OrderPaymentVO; |
| 15 | +import com.diligrp.cashier.mall.domain.rtmall.vo.OrderSuccessVO; | ||
| 16 | +import com.diligrp.cashier.mall.exception.RtMartMallException; | ||
| 17 | +import com.diligrp.cashier.mall.model.MallBizOrder; | ||
| 18 | +import com.diligrp.cashier.mall.model.MallBizOrderItem; | ||
| 7 | import com.diligrp.cashier.mall.model.MallBizPayment; | 19 | import com.diligrp.cashier.mall.model.MallBizPayment; |
| 8 | import com.diligrp.cashier.mall.model.MallBizPaymentOrder; | 20 | import com.diligrp.cashier.mall.model.MallBizPaymentOrder; |
| 21 | +import com.diligrp.cashier.mall.property.MallDynamicProperty; | ||
| 22 | +import com.diligrp.cashier.mall.property.RtMallDynamicProperty; | ||
| 9 | import com.diligrp.cashier.mall.service.biz.MallBizPaymentService; | 23 | import com.diligrp.cashier.mall.service.biz.MallBizPaymentService; |
| 24 | +import com.diligrp.cashier.mall.type.OrderState; | ||
| 25 | +import com.diligrp.cashier.mall.type.PayState; | ||
| 26 | +import com.diligrp.cashier.mall.type.RtMarkErrorCode; | ||
| 27 | +import com.diligrp.cashier.mall.util.MallSnowflakeKeyManager; | ||
| 28 | +import com.diligrp.cashier.shared.util.JsonUtils; | ||
| 29 | +import com.diligrp.cashier.shared.util.SpringContextUtils; | ||
| 30 | +import com.diligrp.cashier.trade.type.SnowflakeKey; | ||
| 10 | import jakarta.annotation.Resource; | 31 | import jakarta.annotation.Resource; |
| 11 | import org.slf4j.Logger; | 32 | import org.slf4j.Logger; |
| 12 | import org.slf4j.LoggerFactory; | 33 | import org.slf4j.LoggerFactory; |
| 13 | import org.springframework.beans.BeanUtils; | 34 | import org.springframework.beans.BeanUtils; |
| 35 | +import org.springframework.dao.DuplicateKeyException; | ||
| 36 | +import org.springframework.data.redis.core.RedisTemplate; | ||
| 14 | import org.springframework.stereotype.Service; | 37 | import org.springframework.stereotype.Service; |
| 15 | import org.springframework.transaction.annotation.Transactional; | 38 | import org.springframework.transaction.annotation.Transactional; |
| 16 | 39 | ||
| 40 | +import java.util.ArrayList; | ||
| 41 | +import java.util.List; | ||
| 42 | +import java.util.Objects; | ||
| 43 | + | ||
| 17 | /** | 44 | /** |
| 18 | * @ClassName MallBizPaymentServiceImpl.java | 45 | * @ClassName MallBizPaymentServiceImpl.java |
| 19 | * @author dengwei | 46 | * @author dengwei |
| @@ -29,6 +56,16 @@ public class MallBizPaymentServiceImpl implements MallBizPaymentService { | @@ -29,6 +56,16 @@ public class MallBizPaymentServiceImpl implements MallBizPaymentService { | ||
| 29 | private MallBizPaymentDao mallBizPaymentDao; | 56 | private MallBizPaymentDao mallBizPaymentDao; |
| 30 | @Resource | 57 | @Resource |
| 31 | private MallBizPaymentOrderDao mallBizPaymentOrderDao; | 58 | private MallBizPaymentOrderDao mallBizPaymentOrderDao; |
| 59 | + @Resource | ||
| 60 | + private MallSnowflakeKeyManager mallSnowflakeKeyManager; | ||
| 61 | + @Resource | ||
| 62 | + private RedisTemplate<String, Object> redisTemplate; | ||
| 63 | + @Resource | ||
| 64 | + private RtMallHttpClient rtMallHttpClient; | ||
| 65 | + @Resource | ||
| 66 | + private MallBizOrderDao mallBizOrderDao; | ||
| 67 | + @Resource | ||
| 68 | + private MallBizOrderItemDao mallBizOrderItemDao; | ||
| 32 | 69 | ||
| 33 | /** | 70 | /** |
| 34 | * save | 71 | * save |
| @@ -48,4 +85,282 @@ public class MallBizPaymentServiceImpl implements MallBizPaymentService { | @@ -48,4 +85,282 @@ public class MallBizPaymentServiceImpl implements MallBizPaymentService { | ||
| 48 | public MallBizPaymentOrder paymentOrderInfo(MallBizPaymentOrder mallBizPaymentOrder) { | 85 | public MallBizPaymentOrder paymentOrderInfo(MallBizPaymentOrder mallBizPaymentOrder) { |
| 49 | return mallBizPaymentOrderDao.getMallBizPaymentOrder(mallBizPaymentOrder); | 86 | return mallBizPaymentOrderDao.getMallBizPaymentOrder(mallBizPaymentOrder); |
| 50 | } | 87 | } |
| 88 | + | ||
| 89 | + /** | ||
| 90 | + * 扫码下单接口 | ||
| 91 | + * Pos扫支付码后,推送订单信息到商户,商户返回收银台链接 | ||
| 92 | + * 创建订单(商品为空,待分摊后同步)+ 支付记录 | ||
| 93 | + * | ||
| 94 | + * @param co 扫码下单请求 | ||
| 95 | + * @return 支付单号和收银台链接 | ||
| 96 | + */ | ||
| 97 | + @Override | ||
| 98 | + @Transactional(rollbackFor = {Exception.class}) | ||
| 99 | + public OrderSuccessVO createOrderPayment(OrderPaymentCO co) { | ||
| 100 | + log.info("开始处理扫码下单请求, order_id={}, trade_id={}, order_type={}", | ||
| 101 | + co.getOrderId(), co.getTradeId(), co.getOrderType()); | ||
| 102 | + | ||
| 103 | + //获取用户信息 | ||
| 104 | + AuthLoginCO authLogin = getAuthLogin(co.getUserCode()); | ||
| 105 | + | ||
| 106 | + //创建订单(商品列表为空,待分摊后同步) | ||
| 107 | + MallBizOrder order = buildOrderFromCO(co, authLogin); | ||
| 108 | + | ||
| 109 | + //创建支付记录 | ||
| 110 | + MallBizPayment payment = buildPaymentFromCO(co, order); | ||
| 111 | + | ||
| 112 | + //保存订单和支付记录 | ||
| 113 | + try { | ||
| 114 | + mallBizOrderDao.insertSelective(order); | ||
| 115 | + mallBizPaymentDao.insertSelective(payment); | ||
| 116 | + log.info("扫码下单保存成功, order_no={}, out_trade_no={}, trade_id={}", | ||
| 117 | + order.getOrderNo(), payment.getPayTradeNo(), co.getTradeId()); | ||
| 118 | + } catch (DuplicateKeyException e) { | ||
| 119 | + // 如果 order_id+trade_id 已存在,返回错误 | ||
| 120 | + log.warn("扫码下单重复请求, trade_id={}", co.getTradeId()); | ||
| 121 | + throw new RtMartMallException(RtMarkErrorCode.E4003); | ||
| 122 | + } | ||
| 123 | + | ||
| 124 | + //返回结果 | ||
| 125 | + log.info("扫码下单处理完成, out_trade_no={}, cashier_url={}", payment.getPayTradeNo(), payment.getCashierUrl()); | ||
| 126 | + return new OrderSuccessVO(payment.getPayTradeNo(), payment.getCashierUrl()); | ||
| 127 | + } | ||
| 128 | + | ||
| 129 | + /** | ||
| 130 | + * 获取用户登录信息 | ||
| 131 | + */ | ||
| 132 | + private AuthLoginCO getAuthLogin(String userCode) { | ||
| 133 | + Object cache = redisTemplate.opsForValue().get(MallConstants.MALL_USER_INFO + userCode); | ||
| 134 | + if (Objects.isNull(cache)) { | ||
| 135 | + throw new RtMartMallException(RtMarkErrorCode.E5001); | ||
| 136 | + } | ||
| 137 | + AuthLoginCO authLogin = JsonUtils.fromJsonString(Objects.requireNonNull(cache).toString(), AuthLoginCO.class); | ||
| 138 | + log.info("获取用户登录信息: userCode={}, username={}", userCode, authLogin.getUsername()); | ||
| 139 | + return authLogin; | ||
| 140 | + } | ||
| 141 | + | ||
| 142 | + /** | ||
| 143 | + * 构建扫码订单(商品为空,待分摊后同步) | ||
| 144 | + */ | ||
| 145 | + private MallBizOrder buildOrderFromCO(OrderPaymentCO co, AuthLoginCO authLogin) { | ||
| 146 | + MallBizOrder order = new MallBizOrder(); | ||
| 147 | + order.setId(mallSnowflakeKeyManager.nextId(SnowflakeKey.MALL_BIZ_ORDER_ID)); | ||
| 148 | + order.setOrderNo(mallSnowflakeKeyManager.nextId(SnowflakeKey.MALL_BIZ_ORDER_ID).toString()); | ||
| 149 | + order.setOrderId(co.getOrderId()); | ||
| 150 | + order.setTradeId(co.getTradeId()); | ||
| 151 | + order.setOrderType(co.getOrderType()); | ||
| 152 | + order.setUserCode(co.getUserCode()); | ||
| 153 | + order.setCompanyCode(co.getCompanyCode()); | ||
| 154 | + order.setShopCode(co.getShopCode()); | ||
| 155 | + order.setShopName(co.getShopName()); | ||
| 156 | + order.setTotalAmount(co.getTotalAmount()); | ||
| 157 | + order.setOrderTime(co.getOrderTime()); | ||
| 158 | + order.setOrderExpire(60); // 默认订单有效期60分钟 | ||
| 159 | + order.setState(OrderState.NOT_PAY.getCode()); // 初始状态:未支付 | ||
| 160 | + | ||
| 161 | + //从用户信息中获取 | ||
| 162 | + order.setUsername(authLogin.getUsername()); | ||
| 163 | + order.setMchId(authLogin.getMchId()); | ||
| 164 | + order.setChannel(authLogin.getChannel()); | ||
| 165 | + order.setSource(authLogin.getSource()); | ||
| 166 | + | ||
| 167 | + //商品信息暂时为空,等待分摊后同步 | ||
| 168 | + order.setMallBizOrderItems(null); | ||
| 169 | + order.setMallBizOrderAddress(null); | ||
| 170 | + order.setFreightFee(0L); // 扫码下单无运费 | ||
| 171 | + | ||
| 172 | + return order; | ||
| 173 | + } | ||
| 174 | + | ||
| 175 | + /** | ||
| 176 | + * 构建支付记录 | ||
| 177 | + */ | ||
| 178 | + private MallBizPayment buildPaymentFromCO(OrderPaymentCO co, MallBizOrder order) { | ||
| 179 | + MallBizPayment payment = new MallBizPayment(); | ||
| 180 | + payment.setId(mallSnowflakeKeyManager.nextId(SnowflakeKey.MALL_BIZ_PAYMENT_ID)); | ||
| 181 | + payment.setPayTradeNo(mallSnowflakeKeyManager.nextId(SnowflakeKey.MALL_BIZ_PAYMENT_ID).toString()); | ||
| 182 | + payment.setBizOrderId(order.getId().toString()); // 关联订单 | ||
| 183 | + payment.setOrderId(co.getOrderId()); | ||
| 184 | + payment.setTradeId(co.getTradeId()); | ||
| 185 | + payment.setPayFee(co.getTotalAmount()); | ||
| 186 | + payment.setPayState(PayState.PENDING.getCode()); | ||
| 187 | + payment.setMchId(order.getMchId()); | ||
| 188 | + | ||
| 189 | + //获取大润发配置,设置回调地址 | ||
| 190 | + RtMallDynamicProperty rtMallDynamicProperty = SpringContextUtils.getBean(RtMallDynamicProperty.class); | ||
| 191 | + RtMallDynamicProperty.AppSecretDynamicProperty property = | ||
| 192 | + rtMallDynamicProperty.getBySourceAndType(order.getSource(), order.getOrderType()); | ||
| 193 | + payment.setPaymentCallback(property.getCallbackDomain()); | ||
| 194 | + | ||
| 195 | + //根据 order_type 决定是否生成收银台URL | ||
| 196 | + if (co.getOrderType() == 2) { | ||
| 197 | + //接口扫码购:生成收银台链接 | ||
| 198 | + String cashierUrl = SpringContextUtils.getBean(MallDynamicProperty.class).getUrl(); | ||
| 199 | + if (!cashierUrl.endsWith("/")) { | ||
| 200 | + cashierUrl = cashierUrl + "/"; | ||
| 201 | + } | ||
| 202 | + payment.setCashierUrl(cashierUrl + "?payTradeNo=" + payment.getPayTradeNo()); | ||
| 203 | + } | ||
| 204 | + | ||
| 205 | + | ||
| 206 | + return payment; | ||
| 207 | + } | ||
| 208 | + | ||
| 209 | + /** | ||
| 210 | + * 支付分摊回调接口 | ||
| 211 | + * POS完成支付分摊后,调用此接口通知商户商品信息已就绪 | ||
| 212 | + * | ||
| 213 | + * @param allocateCO 分摊回调请求 | ||
| 214 | + */ | ||
| 215 | + @Override | ||
| 216 | + @Transactional(rollbackFor = {Exception.class}) | ||
| 217 | + public void handlePaymentAllocate(PaymentAllocateCO allocateCO) { | ||
| 218 | + log.info("收到支付分摊回调通知, trade_count={}", allocateCO.getTradeList().size()); | ||
| 219 | + | ||
| 220 | + for (PaymentAllocateCO.TradeInfo trade : allocateCO.getTradeList()) { | ||
| 221 | + handleSingleTradeAllocate(trade); | ||
| 222 | + } | ||
| 223 | + | ||
| 224 | + log.info("支付分摊回调处理完成"); | ||
| 225 | + } | ||
| 226 | + | ||
| 227 | + /** | ||
| 228 | + * 处理单个支付流水的分摊通知 | ||
| 229 | + * 1. 调用大润发订单详情接口获取商品信息 | ||
| 230 | + * 2. 更新订单状态 | ||
| 231 | + * 3. 插入商品明细 | ||
| 232 | + */ | ||
| 233 | + private void handleSingleTradeAllocate(PaymentAllocateCO.TradeInfo trade) { | ||
| 234 | + log.info("处理支付分摊: order_id={}, trade_id={}, user_code={}", | ||
| 235 | + trade.getOrderId(), trade.getTradeId(), trade.getUserCode()); | ||
| 236 | + | ||
| 237 | + //调用大润发订单详情接口 | ||
| 238 | + OrderDetailResponseVO detailResponse = rtMallHttpClient.getOrderDetail( | ||
| 239 | + trade.getOrderId(), | ||
| 240 | + trade.getTradeId(), | ||
| 241 | + trade.getUserCode() | ||
| 242 | + ); | ||
| 243 | + | ||
| 244 | + OrderDetailResponseVO.OrderDetailData orderDetail = detailResponse.getData(); | ||
| 245 | + if (orderDetail == null || orderDetail.getItemList() == null || orderDetail.getItemList().isEmpty()) { | ||
| 246 | + log.warn("订单详情中没有商品信息: order_id={}", trade.getOrderId()); | ||
| 247 | + return; | ||
| 248 | + } | ||
| 249 | + | ||
| 250 | + //查询订单 | ||
| 251 | + MallBizOrder order = mallBizOrderDao.findByOrderIdAndTradeId(trade.getOrderId(), trade.getTradeId()); | ||
| 252 | + if (order == null) { | ||
| 253 | + log.error("找不到订单: order_id={}, trade_id={}", trade.getOrderId(), trade.getTradeId()); | ||
| 254 | + throw new RtMartMallException(RtMarkErrorCode.E5000); | ||
| 255 | + } | ||
| 256 | + | ||
| 257 | + //更新订单状态 | ||
| 258 | + updateOrderState(order, orderDetail); | ||
| 259 | + | ||
| 260 | + //更新支付记录 | ||
| 261 | + updatePaymentInfo(trade.getOrderId(), trade.getTradeId(), orderDetail); | ||
| 262 | + | ||
| 263 | + //插入商品明细 | ||
| 264 | + insertOrderItems(order, orderDetail.getItemList()); | ||
| 265 | + | ||
| 266 | + log.info("支付分摊处理成功: trade_id={}, item_count={}", trade.getTradeId(), orderDetail.getItemList().size()); | ||
| 267 | + } | ||
| 268 | + | ||
| 269 | + /** | ||
| 270 | + * 更新支付记录 | ||
| 271 | + */ | ||
| 272 | + private void updatePaymentInfo(String orderId, String tradeId, OrderDetailResponseVO.OrderDetailData orderDetail) { | ||
| 273 | + //查询支付记录 | ||
| 274 | + MallBizPayment payment = mallBizPaymentDao.findByOrderIdAndTradeId(orderId, tradeId); | ||
| 275 | + if (payment == null) { | ||
| 276 | + log.error("找不到支付记录: order_id={}, trade_id={}", orderId, tradeId); | ||
| 277 | + throw new RtMartMallException(RtMarkErrorCode.E5000); | ||
| 278 | + } | ||
| 279 | + | ||
| 280 | + //更新交易流水号 | ||
| 281 | + if (orderDetail.getTransactionId() != null && !orderDetail.getTransactionId().equals(payment.getPayTradeId())) { | ||
| 282 | + payment.setPayTradeId(orderDetail.getTransactionId()); | ||
| 283 | + mallBizPaymentDao.updateByPrimaryKeySelective(payment); | ||
| 284 | + log.info("支付记录已更新: trade_id={}, pay_payment_id={}", tradeId, orderDetail.getTransactionId()); | ||
| 285 | + } | ||
| 286 | + } | ||
| 287 | + | ||
| 288 | + /** | ||
| 289 | + * 更新订单状态 | ||
| 290 | + */ | ||
| 291 | + private void updateOrderState(MallBizOrder order, OrderDetailResponseVO.OrderDetailData orderDetail) { | ||
| 292 | + Integer newState = mapOrderState(orderDetail.getOrderStatus()); | ||
| 293 | + if (newState != null && !newState.equals(order.getState())) { | ||
| 294 | + order.setState(newState); | ||
| 295 | + mallBizOrderDao.updateByPrimaryKeySelective(order); | ||
| 296 | + log.info("订单状态已更新: order_id={}, old_state={}, new_state={}", | ||
| 297 | + order.getOrderId(), order.getState(), newState); | ||
| 298 | + } | ||
| 299 | + } | ||
| 300 | + | ||
| 301 | + /** | ||
| 302 | + * 大润发状态 -> 本系统状态 | ||
| 303 | + */ | ||
| 304 | + private Integer mapOrderState(String rtMallStatus) { | ||
| 305 | + if (rtMallStatus == null) { | ||
| 306 | + return null; | ||
| 307 | + } | ||
| 308 | + return switch (rtMallStatus) { | ||
| 309 | + case "DONE" -> OrderState.PAYED.getCode(); // 订单分摊完成 -> 已支付 | ||
| 310 | + case "PAYED" -> OrderState.PAYED.getCode(); // 已支付 | ||
| 311 | + case "NOTPAY" -> OrderState.NOT_PAY.getCode(); // 未支付 | ||
| 312 | + case "CANCEL" -> OrderState.NOT_PAY_CANCEL.getCode(); // 已取消 | ||
| 313 | + default -> null; | ||
| 314 | + }; | ||
| 315 | + } | ||
| 316 | + | ||
| 317 | + /** | ||
| 318 | + * 插入商品明细 | ||
| 319 | + */ | ||
| 320 | + private void insertOrderItems(MallBizOrder order, List<OrderDetailResponseVO.OrderItem> items) { | ||
| 321 | + List<MallBizOrderItem> orderItems = new ArrayList<>(); | ||
| 322 | + | ||
| 323 | + for (OrderDetailResponseVO.OrderItem item : items) { | ||
| 324 | + MallBizOrderItem orderItem = new MallBizOrderItem(); | ||
| 325 | + orderItem.setId(mallSnowflakeKeyManager.nextId(SnowflakeKey.MALL_BIZ_ORDER_ID)); | ||
| 326 | + orderItem.setBizOrderId(order.getId()); | ||
| 327 | + orderItem.setOrderId(order.getOrderId()); | ||
| 328 | + orderItem.setSubOrderId(item.getSubOrderId() != null ? Long.parseLong(item.getSubOrderId()) : null); | ||
| 329 | + orderItem.setShopCode(order.getShopCode()); | ||
| 330 | + orderItem.setShopName(order.getShopName()); | ||
| 331 | + orderItem.setItemBn(item.getItemBn()); | ||
| 332 | + orderItem.setItemName(item.getItemName()); | ||
| 333 | + orderItem.setAmount(item.getAmount()); | ||
| 334 | + orderItem.setTaxOutputRate(item.getTaxOutputRate()); | ||
| 335 | + orderItem.setTaxClassificationCode(item.getTaxCategoryCode()); | ||
| 336 | + orderItem.setTaxClassificationName(item.getTaxCategoryName()); | ||
| 337 | + | ||
| 338 | + if (item.getNum() != null && item.getNum() > 0) { | ||
| 339 | + //判断是否为纯称重品 | ||
| 340 | + if (item.getIsWeight() == 1) { | ||
| 341 | + //纯称重品:num单位为kg,转换为克存储(*1000) | ||
| 342 | + orderItem.setNum((int) (item.getNum() * 1000)); | ||
| 343 | + //单价 = 金额 / 重量(kg),单位:分/kg | ||
| 344 | + orderItem.setPrice((long) (item.getAmount() / item.getNum())); | ||
| 345 | + } else { | ||
| 346 | + //非称重品:num为件数,直接转为Integer | ||
| 347 | + orderItem.setNum(item.getNum().intValue()); | ||
| 348 | + //单价 = 金额 / 件数,单位:分/件 | ||
| 349 | + orderItem.setPrice((long) (item.getAmount() / item.getNum())); | ||
| 350 | + } | ||
| 351 | + } else { | ||
| 352 | + //数量为空或0时,设置默认值 | ||
| 353 | + orderItem.setNum(0); | ||
| 354 | + orderItem.setPrice(0L); | ||
| 355 | + } | ||
| 356 | + | ||
| 357 | + orderItems.add(orderItem); | ||
| 358 | + } | ||
| 359 | + | ||
| 360 | + // 批量插入商品明细 | ||
| 361 | + if (!orderItems.isEmpty()) { | ||
| 362 | + mallBizOrderItemDao.batchInsert(orderItems); | ||
| 363 | + log.info("商品明细插入成功: order_id={}, count={}", order.getOrderId(), orderItems.size()); | ||
| 364 | + } | ||
| 365 | + } | ||
| 51 | } | 366 | } |
cashier-mall/src/main/java/com/diligrp/cashier/mall/util/TimestampToLocalDateTimeDeserializer.java
0 → 100644
| 1 | +package com.diligrp.cashier.mall.util; | ||
| 2 | + | ||
| 3 | +import com.fasterxml.jackson.core.JsonParser; | ||
| 4 | +import com.fasterxml.jackson.databind.DeserializationContext; | ||
| 5 | +import com.fasterxml.jackson.databind.JsonDeserializer; | ||
| 6 | + | ||
| 7 | +import java.io.IOException; | ||
| 8 | +import java.time.Instant; | ||
| 9 | +import java.time.LocalDateTime; | ||
| 10 | +import java.time.ZoneId; | ||
| 11 | + | ||
| 12 | +/** | ||
| 13 | + * 时间戳转LocalDateTime | ||
| 14 | + */ | ||
| 15 | +public class TimestampToLocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> { | ||
| 16 | + @Override | ||
| 17 | + public LocalDateTime deserialize(JsonParser p, DeserializationContext ctx) | ||
| 18 | + throws IOException { | ||
| 19 | + long epochSecond = p.getLongValue(); | ||
| 20 | + | ||
| 21 | + return LocalDateTime.ofInstant( | ||
| 22 | + Instant.ofEpochSecond(epochSecond), | ||
| 23 | + ZoneId.systemDefault()); | ||
| 24 | + } | ||
| 25 | +} |
cashier-mall/src/main/resources/com/diligrp/cashier/dao/mapper/MallBizOrderDao.xml
| @@ -383,4 +383,12 @@ | @@ -383,4 +383,12 @@ | ||
| 383 | </if> | 383 | </if> |
| 384 | and version = #{version} | 384 | and version = #{version} |
| 385 | </update> | 385 | </update> |
| 386 | + <select id="findByOrderIdAndTradeId" resultMap="BaseResultMap"> | ||
| 387 | + select | ||
| 388 | + <include refid="Base_Column_List" /> | ||
| 389 | + from mall_biz_order | ||
| 390 | + where order_id = #{orderId,jdbcType=VARCHAR} | ||
| 391 | + and trade_id = #{tradeId,jdbcType=VARCHAR} | ||
| 392 | + limit 1 | ||
| 393 | + </select> | ||
| 386 | </mapper> | 394 | </mapper> |
cashier-mall/src/main/resources/com/diligrp/cashier/dao/mapper/MallBizPaymentDao.xml
| 1 | <?xml version="1.0" encoding="UTF-8"?> | 1 | <?xml version="1.0" encoding="UTF-8"?> |
| 2 | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | 2 | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| 3 | <mapper namespace="com.diligrp.cashier.mall.dao.MallBizPaymentDao"> | 3 | <mapper namespace="com.diligrp.cashier.mall.dao.MallBizPaymentDao"> |
| 4 | - <resultMap id="BaseResultMap" type="com.diligrp.cashier.mall.model.MallBizPayment"> | ||
| 5 | - <id column="id" jdbcType="BIGINT" property="id" /> | ||
| 6 | - <result column="pay_trade_no" jdbcType="VARCHAR" property="payTradeNo" /> | ||
| 7 | - <result column="biz_order_id" jdbcType="VARCHAR" property="bizOrderId" /> | ||
| 8 | - <result column="order_id" jdbcType="VARCHAR" property="orderId" /> | ||
| 9 | - <result column="trade_id" jdbcType="VARCHAR" property="tradeId" /> | ||
| 10 | - <result column="pay_payment_id" jdbcType="VARCHAR" property="payPaymentId" /> | ||
| 11 | - <result column="mch_id" jdbcType="VARCHAR" property="mchId" /> | ||
| 12 | - <result column="card_no" jdbcType="VARCHAR" property="cardNo" /> | ||
| 13 | - <result column="username" jdbcType="VARCHAR" property="username" /> | ||
| 14 | - <result column="user_id" jdbcType="BIGINT" property="userId" /> | ||
| 15 | - <result column="account_id" jdbcType="BIGINT" property="accountId" /> | ||
| 16 | - <result column="fund_account_id" jdbcType="BIGINT" property="fundAccountId" /> | ||
| 17 | - <result column="open_id" jdbcType="VARCHAR" property="openId" /> | ||
| 18 | - <result column="pay_fee" jdbcType="BIGINT" property="payFee" /> | ||
| 19 | - <result column="pay_state" jdbcType="TINYINT" property="payState" /> | ||
| 20 | - <result column="pay_time" jdbcType="TIMESTAMP" property="payTime" /> | ||
| 21 | - <result column="channel_id" jdbcType="TINYINT" property="channelId" /> | ||
| 22 | - <result column="cashier_url" jdbcType="VARCHAR" property="cashierUrl" /> | ||
| 23 | - <result column="payment_callback" jdbcType="VARCHAR" property="paymentCallback" /> | ||
| 24 | - <result column="version" jdbcType="INTEGER" property="version" /> | ||
| 25 | - <result column="created_time" jdbcType="TIMESTAMP" property="createdTime" /> | ||
| 26 | - <result column="modified_time" jdbcType="TIMESTAMP" property="modifiedTime" /> | ||
| 27 | - </resultMap> | ||
| 28 | - <sql id="Base_Column_List"> | ||
| 29 | - id, pay_trade_no, biz_order_id, order_id, trade_id, pay_payment_id, mch_id, card_no, | ||
| 30 | - username, user_id, account_id, fund_account_id, open_id, pay_fee, pay_state, pay_time, | ||
| 31 | - channel_id, cashier_url, payment_callback, version, created_time, modified_time | ||
| 32 | - </sql> | ||
| 33 | - <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap"> | ||
| 34 | - select | ||
| 35 | - <include refid="Base_Column_List" /> | ||
| 36 | - from mall_biz_payment | ||
| 37 | - where id = #{id,jdbcType=BIGINT} | ||
| 38 | - </select> | ||
| 39 | - <delete id="deleteByPrimaryKey" parameterType="java.lang.Long"> | ||
| 40 | - delete | ||
| 41 | - from mall_biz_payment | ||
| 42 | - where id = #{id,jdbcType=BIGINT} | ||
| 43 | - </delete> | ||
| 44 | - <insert id="insert" parameterType="com.diligrp.cashier.mall.model.MallBizPayment"> | ||
| 45 | - insert into mall_biz_payment (id, pay_trade_no, biz_order_id, | ||
| 46 | - order_id, trade_id, pay_payment_id, | ||
| 47 | - mch_id, card_no, username, | ||
| 48 | - user_id, account_id, fund_account_id, | ||
| 49 | - open_id, pay_fee, pay_state, | ||
| 50 | - pay_time, channel_id, cashier_url, | ||
| 51 | - payment_callback, version, created_time, | ||
| 52 | - modified_time) | ||
| 53 | - values (#{id,jdbcType=BIGINT}, #{payTradeNo,jdbcType=VARCHAR}, #{bizOrderId,jdbcType=VARCHAR}, | ||
| 54 | - #{orderId,jdbcType=VARCHAR}, #{tradeId,jdbcType=VARCHAR}, #{payPaymentId,jdbcType=VARCHAR}, | ||
| 55 | - #{mchId,jdbcType=VARCHAR}, #{cardNo,jdbcType=VARCHAR}, #{username,jdbcType=VARCHAR}, | ||
| 56 | - #{userId,jdbcType=BIGINT}, #{accountId,jdbcType=BIGINT}, #{fundAccountId,jdbcType=BIGINT}, | ||
| 57 | - #{openId,jdbcType=VARCHAR}, #{payFee,jdbcType=BIGINT}, #{payState,jdbcType=TINYINT}, | ||
| 58 | - #{payTime,jdbcType=TIMESTAMP}, #{channelId,jdbcType=TINYINT}, #{cashierUrl,jdbcType=VARCHAR}, | ||
| 59 | - #{paymentCallback,jdbcType=VARCHAR}, #{version,jdbcType=INTEGER}, #{createdTime,jdbcType=TIMESTAMP}, | ||
| 60 | - #{modifiedTime,jdbcType=TIMESTAMP}) | ||
| 61 | - </insert> | ||
| 62 | - <insert id="insertSelective" parameterType="com.diligrp.cashier.mall.model.MallBizPayment"> | ||
| 63 | - insert into mall_biz_payment | ||
| 64 | - <trim prefix="(" suffix=")" suffixOverrides=","> | ||
| 65 | - <if test="id != null"> | ||
| 66 | - id, | ||
| 67 | - </if> | ||
| 68 | - <if test="payTradeNo != null"> | ||
| 69 | - pay_trade_no, | ||
| 70 | - </if> | ||
| 71 | - <if test="bizOrderId != null"> | ||
| 72 | - biz_order_id, | ||
| 73 | - </if> | ||
| 74 | - <if test="orderId != null"> | ||
| 75 | - order_id, | ||
| 76 | - </if> | ||
| 77 | - <if test="tradeId != null"> | ||
| 78 | - trade_id, | ||
| 79 | - </if> | ||
| 80 | - <if test="payPaymentId != null"> | ||
| 81 | - pay_payment_id, | ||
| 82 | - </if> | ||
| 83 | - <if test="mchId != null"> | ||
| 84 | - mch_id, | ||
| 85 | - </if> | ||
| 86 | - <if test="cardNo != null"> | ||
| 87 | - card_no, | ||
| 88 | - </if> | ||
| 89 | - <if test="username != null"> | ||
| 90 | - username, | ||
| 91 | - </if> | ||
| 92 | - <if test="userId != null"> | ||
| 93 | - user_id, | ||
| 94 | - </if> | ||
| 95 | - <if test="accountId != null"> | ||
| 96 | - account_id, | ||
| 97 | - </if> | ||
| 98 | - <if test="fundAccountId != null"> | ||
| 99 | - fund_account_id, | ||
| 100 | - </if> | ||
| 101 | - <if test="openId != null"> | ||
| 102 | - open_id, | ||
| 103 | - </if> | ||
| 104 | - <if test="payFee != null"> | ||
| 105 | - pay_fee, | ||
| 106 | - </if> | ||
| 107 | - <if test="payState != null"> | ||
| 108 | - pay_state, | ||
| 109 | - </if> | ||
| 110 | - <if test="payTime != null"> | ||
| 111 | - pay_time, | ||
| 112 | - </if> | ||
| 113 | - <if test="channelId != null"> | ||
| 114 | - channel_id, | ||
| 115 | - </if> | ||
| 116 | - <if test="cashierUrl != null"> | ||
| 117 | - cashier_url, | ||
| 118 | - </if> | ||
| 119 | - <if test="paymentCallback != null"> | ||
| 120 | - payment_callback, | ||
| 121 | - </if> | ||
| 122 | - <if test="version != null"> | ||
| 123 | - version, | ||
| 124 | - </if> | ||
| 125 | - <if test="createdTime != null"> | ||
| 126 | - created_time, | ||
| 127 | - </if> | ||
| 128 | - <if test="modifiedTime != null"> | ||
| 129 | - modified_time, | ||
| 130 | - </if> | ||
| 131 | - </trim> | ||
| 132 | - <trim prefix="values (" suffix=")" suffixOverrides=","> | ||
| 133 | - <if test="id != null"> | ||
| 134 | - #{id,jdbcType=BIGINT}, | ||
| 135 | - </if> | ||
| 136 | - <if test="payTradeNo != null"> | ||
| 137 | - #{payTradeNo,jdbcType=VARCHAR}, | ||
| 138 | - </if> | ||
| 139 | - <if test="bizOrderId != null"> | ||
| 140 | - #{bizOrderId,jdbcType=VARCHAR}, | ||
| 141 | - </if> | ||
| 142 | - <if test="orderId != null"> | ||
| 143 | - #{orderId,jdbcType=VARCHAR}, | ||
| 144 | - </if> | ||
| 145 | - <if test="tradeId != null"> | ||
| 146 | - #{tradeId,jdbcType=VARCHAR}, | ||
| 147 | - </if> | ||
| 148 | - <if test="payPaymentId != null"> | ||
| 149 | - #{payPaymentId,jdbcType=VARCHAR}, | ||
| 150 | - </if> | ||
| 151 | - <if test="mchId != null"> | ||
| 152 | - #{mchId,jdbcType=VARCHAR}, | ||
| 153 | - </if> | ||
| 154 | - <if test="cardNo != null"> | ||
| 155 | - #{cardNo,jdbcType=VARCHAR}, | ||
| 156 | - </if> | ||
| 157 | - <if test="username != null"> | ||
| 158 | - #{username,jdbcType=VARCHAR}, | ||
| 159 | - </if> | ||
| 160 | - <if test="userId != null"> | ||
| 161 | - #{userId,jdbcType=BIGINT}, | ||
| 162 | - </if> | ||
| 163 | - <if test="accountId != null"> | ||
| 164 | - #{accountId,jdbcType=BIGINT}, | ||
| 165 | - </if> | ||
| 166 | - <if test="fundAccountId != null"> | ||
| 167 | - #{fundAccountId,jdbcType=BIGINT}, | ||
| 168 | - </if> | ||
| 169 | - <if test="openId != null"> | ||
| 170 | - #{openId,jdbcType=VARCHAR}, | ||
| 171 | - </if> | ||
| 172 | - <if test="payFee != null"> | ||
| 173 | - #{payFee,jdbcType=BIGINT}, | ||
| 174 | - </if> | ||
| 175 | - <if test="payState != null"> | ||
| 176 | - #{payState,jdbcType=TINYINT}, | ||
| 177 | - </if> | ||
| 178 | - <if test="payTime != null"> | ||
| 179 | - #{payTime,jdbcType=TIMESTAMP}, | ||
| 180 | - </if> | ||
| 181 | - <if test="channelId != null"> | ||
| 182 | - #{channelId,jdbcType=TINYINT}, | ||
| 183 | - </if> | ||
| 184 | - <if test="cashierUrl != null"> | ||
| 185 | - #{cashierUrl,jdbcType=VARCHAR}, | ||
| 186 | - </if> | ||
| 187 | - <if test="paymentCallback != null"> | ||
| 188 | - #{paymentCallback,jdbcType=VARCHAR}, | ||
| 189 | - </if> | ||
| 190 | - <if test="version != null"> | ||
| 191 | - #{version,jdbcType=INTEGER}, | ||
| 192 | - </if> | ||
| 193 | - <if test="createdTime != null"> | ||
| 194 | - #{createdTime,jdbcType=TIMESTAMP}, | ||
| 195 | - </if> | ||
| 196 | - <if test="modifiedTime != null"> | ||
| 197 | - #{modifiedTime,jdbcType=TIMESTAMP}, | ||
| 198 | - </if> | ||
| 199 | - </trim> | ||
| 200 | - </insert> | ||
| 201 | - <update id="updateByPrimaryKeySelective" parameterType="com.diligrp.cashier.mall.model.MallBizPayment"> | ||
| 202 | - update mall_biz_payment | ||
| 203 | - <set> | ||
| 204 | - <if test="payTradeNo != null"> | ||
| 205 | - pay_trade_no = #{payTradeNo,jdbcType=VARCHAR}, | ||
| 206 | - </if> | ||
| 207 | - <if test="bizOrderId != null"> | ||
| 208 | - biz_order_id = #{bizOrderId,jdbcType=VARCHAR}, | ||
| 209 | - </if> | ||
| 210 | - <if test="orderId != null"> | ||
| 211 | - order_id = #{orderId,jdbcType=VARCHAR}, | ||
| 212 | - </if> | ||
| 213 | - <if test="tradeId != null"> | ||
| 214 | - trade_id = #{tradeId,jdbcType=VARCHAR}, | ||
| 215 | - </if> | ||
| 216 | - <if test="payPaymentId != null"> | ||
| 217 | - pay_payment_id = #{payPaymentId,jdbcType=VARCHAR}, | ||
| 218 | - </if> | ||
| 219 | - <if test="mchId != null"> | ||
| 220 | - mch_id = #{mchId,jdbcType=VARCHAR}, | ||
| 221 | - </if> | ||
| 222 | - <if test="cardNo != null"> | ||
| 223 | - card_no = #{cardNo,jdbcType=VARCHAR}, | ||
| 224 | - </if> | ||
| 225 | - <if test="username != null"> | ||
| 226 | - username = #{username,jdbcType=VARCHAR}, | ||
| 227 | - </if> | ||
| 228 | - <if test="userId != null"> | ||
| 229 | - user_id = #{userId,jdbcType=BIGINT}, | ||
| 230 | - </if> | ||
| 231 | - <if test="accountId != null"> | ||
| 232 | - account_id = #{accountId,jdbcType=BIGINT}, | ||
| 233 | - </if> | ||
| 234 | - <if test="fundAccountId != null"> | ||
| 235 | - fund_account_id = #{fundAccountId,jdbcType=BIGINT}, | ||
| 236 | - </if> | ||
| 237 | - <if test="openId != null"> | ||
| 238 | - open_id = #{openId,jdbcType=VARCHAR}, | ||
| 239 | - </if> | ||
| 240 | - <if test="payFee != null"> | ||
| 241 | - pay_fee = #{payFee,jdbcType=BIGINT}, | ||
| 242 | - </if> | ||
| 243 | - <if test="payState != null"> | ||
| 244 | - pay_state = #{payState,jdbcType=TINYINT}, | ||
| 245 | - </if> | ||
| 246 | - <if test="payTime != null"> | ||
| 247 | - pay_time = #{payTime,jdbcType=TIMESTAMP}, | ||
| 248 | - </if> | ||
| 249 | - <if test="channelId != null"> | ||
| 250 | - channel_id = #{channelId,jdbcType=TINYINT}, | ||
| 251 | - </if> | ||
| 252 | - <if test="cashierUrl != null"> | ||
| 253 | - cashier_url = #{cashierUrl,jdbcType=VARCHAR}, | ||
| 254 | - </if> | ||
| 255 | - <if test="paymentCallback != null"> | ||
| 256 | - payment_callback = #{paymentCallback,jdbcType=VARCHAR}, | ||
| 257 | - </if> | ||
| 258 | - <if test="version != null"> | ||
| 259 | - version = #{version,jdbcType=INTEGER}, | ||
| 260 | - </if> | ||
| 261 | - <if test="createdTime != null"> | ||
| 262 | - created_time = #{createdTime,jdbcType=TIMESTAMP}, | ||
| 263 | - </if> | ||
| 264 | - <if test="modifiedTime != null"> | ||
| 265 | - modified_time = #{modifiedTime,jdbcType=TIMESTAMP}, | ||
| 266 | - </if> | ||
| 267 | - </set> | ||
| 268 | - where id = #{id,jdbcType=BIGINT} | ||
| 269 | - </update> | ||
| 270 | - <update id="updateByPrimaryKey" parameterType="com.diligrp.cashier.mall.model.MallBizPayment"> | ||
| 271 | - update mall_biz_payment | ||
| 272 | - set pay_trade_no = #{payTradeNo,jdbcType=VARCHAR}, | ||
| 273 | - biz_order_id = #{bizOrderId,jdbcType=VARCHAR}, | ||
| 274 | - order_id = #{orderId,jdbcType=VARCHAR}, | ||
| 275 | - trade_id = #{tradeId,jdbcType=VARCHAR}, | ||
| 276 | - pay_payment_id = #{payPaymentId,jdbcType=VARCHAR}, | ||
| 277 | - mch_id = #{mchId,jdbcType=VARCHAR}, | ||
| 278 | - card_no = #{cardNo,jdbcType=VARCHAR}, | ||
| 279 | - username = #{username,jdbcType=VARCHAR}, | ||
| 280 | - user_id = #{userId,jdbcType=BIGINT}, | ||
| 281 | - account_id = #{accountId,jdbcType=BIGINT}, | ||
| 282 | - fund_account_id = #{fundAccountId,jdbcType=BIGINT}, | ||
| 283 | - open_id = #{openId,jdbcType=VARCHAR}, | ||
| 284 | - pay_fee = #{payFee,jdbcType=BIGINT}, | ||
| 285 | - pay_state = #{payState,jdbcType=TINYINT}, | ||
| 286 | - pay_time = #{payTime,jdbcType=TIMESTAMP}, | ||
| 287 | - channel_id = #{channelId,jdbcType=TINYINT}, | ||
| 288 | - cashier_url = #{cashierUrl,jdbcType=VARCHAR}, | ||
| 289 | - payment_callback = #{paymentCallback,jdbcType=VARCHAR}, | ||
| 290 | - version = #{version,jdbcType=INTEGER}, | ||
| 291 | - created_time = #{createdTime,jdbcType=TIMESTAMP}, | ||
| 292 | - modified_time = #{modifiedTime,jdbcType=TIMESTAMP} | ||
| 293 | - where id = #{id,jdbcType=BIGINT} | ||
| 294 | - </update> | 4 | + <resultMap id="BaseResultMap" type="com.diligrp.cashier.mall.model.MallBizPayment"> |
| 5 | + <id column="id" jdbcType="BIGINT" property="id" /> | ||
| 6 | + <result column="pay_trade_no" jdbcType="VARCHAR" property="payTradeNo" /> | ||
| 7 | + <result column="biz_order_id" jdbcType="BIGINT" property="bizOrderId" /> | ||
| 8 | + <result column="order_id" jdbcType="VARCHAR" property="orderId" /> | ||
| 9 | + <result column="trade_id" jdbcType="VARCHAR" property="tradeId" /> | ||
| 10 | + <result column="pay_payment_id" jdbcType="VARCHAR" property="payPaymentId" /> | ||
| 11 | + <result column="mch_id" jdbcType="VARCHAR" property="mchId" /> | ||
| 12 | + <result column="card_no" jdbcType="VARCHAR" property="cardNo" /> | ||
| 13 | + <result column="username" jdbcType="VARCHAR" property="username" /> | ||
| 14 | + <result column="user_id" jdbcType="BIGINT" property="userId" /> | ||
| 15 | + <result column="account_id" jdbcType="BIGINT" property="accountId" /> | ||
| 16 | + <result column="fund_account_id" jdbcType="BIGINT" property="fundAccountId" /> | ||
| 17 | + <result column="pay_fee" jdbcType="BIGINT" property="payFee" /> | ||
| 18 | + <result column="pay_state" jdbcType="TINYINT" property="payState" /> | ||
| 19 | + <result column="pay_time" jdbcType="TIMESTAMP" property="payTime" /> | ||
| 20 | + <result column="channel_id" jdbcType="TINYINT" property="channelId" /> | ||
| 21 | + <result column="cashier_url" jdbcType="VARCHAR" property="cashierUrl" /> | ||
| 22 | + <result column="payment_callback" jdbcType="VARCHAR" property="paymentCallback" /> | ||
| 23 | + <result column="version" jdbcType="INTEGER" property="version" /> | ||
| 24 | + <result column="created_time" jdbcType="TIMESTAMP" property="createdTime" /> | ||
| 25 | + <result column="modified_time" jdbcType="TIMESTAMP" property="modifiedTime" /> | ||
| 26 | + </resultMap> | ||
| 27 | + <sql id="Base_Column_List"> | ||
| 28 | + id, pay_trade_no, biz_order_id, order_id, trade_id, pay_payment_id, mch_id, card_no, | ||
| 29 | + username, user_id, account_id, fund_account_id, pay_fee, pay_state, pay_time, channel_id, | ||
| 30 | + cashier_url, payment_callback, version, created_time, modified_time | ||
| 31 | + </sql> | ||
| 32 | + <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap"> | ||
| 33 | + select | ||
| 34 | + <include refid="Base_Column_List" /> | ||
| 35 | + from mall_biz_payment | ||
| 36 | + where id = #{id,jdbcType=BIGINT} | ||
| 37 | + </select> | ||
| 38 | + <select id="findByOrderIdAndTradeId" resultMap="BaseResultMap"> | ||
| 39 | + select | ||
| 40 | + <include refid="Base_Column_List" /> | ||
| 41 | + from mall_biz_payment | ||
| 42 | + where order_id = #{orderId,jdbcType=VARCHAR} | ||
| 43 | + and trade_id = #{tradeId,jdbcType=VARCHAR} | ||
| 44 | + limit 1 | ||
| 45 | + </select> | ||
| 46 | + <delete id="deleteByPrimaryKey" parameterType="java.lang.Long"> | ||
| 47 | + delete from mall_biz_payment | ||
| 48 | + where id = #{id,jdbcType=BIGINT} | ||
| 49 | + </delete> | ||
| 50 | + <insert id="insert" parameterType="com.diligrp.cashier.mall.model.MallBizPayment"> | ||
| 51 | + insert into mall_biz_payment (id, pay_trade_no, biz_order_id, | ||
| 52 | + order_id, trade_id, pay_payment_id, | ||
| 53 | + mch_id, card_no, username, | ||
| 54 | + user_id, account_id, fund_account_id, | ||
| 55 | + pay_fee, pay_state, pay_time, | ||
| 56 | + channel_id, cashier_url, payment_callback, | ||
| 57 | + version, created_time, modified_time | ||
| 58 | + ) | ||
| 59 | + values (#{id,jdbcType=BIGINT}, #{payTradeNo,jdbcType=VARCHAR}, #{bizOrderId,jdbcType=BIGINT}, | ||
| 60 | + #{orderId,jdbcType=VARCHAR}, #{tradeId,jdbcType=VARCHAR}, #{payPaymentId,jdbcType=VARCHAR}, | ||
| 61 | + #{mchId,jdbcType=VARCHAR}, #{cardNo,jdbcType=VARCHAR}, #{username,jdbcType=VARCHAR}, | ||
| 62 | + #{userId,jdbcType=BIGINT}, #{accountId,jdbcType=BIGINT}, #{fundAccountId,jdbcType=BIGINT}, | ||
| 63 | + #{payFee,jdbcType=BIGINT}, #{payState,jdbcType=TINYINT}, #{payTime,jdbcType=TIMESTAMP}, | ||
| 64 | + #{channelId,jdbcType=TINYINT}, #{cashierUrl,jdbcType=VARCHAR}, #{paymentCallback,jdbcType=VARCHAR}, | ||
| 65 | + #{version,jdbcType=INTEGER}, #{createdTime,jdbcType=TIMESTAMP}, #{modifiedTime,jdbcType=TIMESTAMP} | ||
| 66 | + ) | ||
| 67 | + </insert> | ||
| 68 | + <insert id="insertSelective" parameterType="com.diligrp.cashier.mall.model.MallBizPayment"> | ||
| 69 | + insert into mall_biz_payment | ||
| 70 | + <trim prefix="(" suffix=")" suffixOverrides=","> | ||
| 71 | + <if test="id != null"> | ||
| 72 | + id, | ||
| 73 | + </if> | ||
| 74 | + <if test="payTradeNo != null"> | ||
| 75 | + pay_trade_no, | ||
| 76 | + </if> | ||
| 77 | + <if test="bizOrderId != null"> | ||
| 78 | + biz_order_id, | ||
| 79 | + </if> | ||
| 80 | + <if test="orderId != null"> | ||
| 81 | + order_id, | ||
| 82 | + </if> | ||
| 83 | + <if test="tradeId != null"> | ||
| 84 | + trade_id, | ||
| 85 | + </if> | ||
| 86 | + <if test="payPaymentId != null"> | ||
| 87 | + pay_payment_id, | ||
| 88 | + </if> | ||
| 89 | + <if test="mchId != null"> | ||
| 90 | + mch_id, | ||
| 91 | + </if> | ||
| 92 | + <if test="cardNo != null"> | ||
| 93 | + card_no, | ||
| 94 | + </if> | ||
| 95 | + <if test="username != null"> | ||
| 96 | + username, | ||
| 97 | + </if> | ||
| 98 | + <if test="userId != null"> | ||
| 99 | + user_id, | ||
| 100 | + </if> | ||
| 101 | + <if test="accountId != null"> | ||
| 102 | + account_id, | ||
| 103 | + </if> | ||
| 104 | + <if test="fundAccountId != null"> | ||
| 105 | + fund_account_id, | ||
| 106 | + </if> | ||
| 107 | + <if test="payFee != null"> | ||
| 108 | + pay_fee, | ||
| 109 | + </if> | ||
| 110 | + <if test="payState != null"> | ||
| 111 | + pay_state, | ||
| 112 | + </if> | ||
| 113 | + <if test="payTime != null"> | ||
| 114 | + pay_time, | ||
| 115 | + </if> | ||
| 116 | + <if test="channelId != null"> | ||
| 117 | + channel_id, | ||
| 118 | + </if> | ||
| 119 | + <if test="cashierUrl != null"> | ||
| 120 | + cashier_url, | ||
| 121 | + </if> | ||
| 122 | + <if test="paymentCallback != null"> | ||
| 123 | + payment_callback, | ||
| 124 | + </if> | ||
| 125 | + <if test="version != null"> | ||
| 126 | + version, | ||
| 127 | + </if> | ||
| 128 | + <if test="createdTime != null"> | ||
| 129 | + created_time, | ||
| 130 | + </if> | ||
| 131 | + <if test="modifiedTime != null"> | ||
| 132 | + modified_time, | ||
| 133 | + </if> | ||
| 134 | + </trim> | ||
| 135 | + <trim prefix="values (" suffix=")" suffixOverrides=","> | ||
| 136 | + <if test="id != null"> | ||
| 137 | + #{id,jdbcType=BIGINT}, | ||
| 138 | + </if> | ||
| 139 | + <if test="payTradeNo != null"> | ||
| 140 | + #{payTradeNo,jdbcType=VARCHAR}, | ||
| 141 | + </if> | ||
| 142 | + <if test="bizOrderId != null"> | ||
| 143 | + #{bizOrderId,jdbcType=BIGINT}, | ||
| 144 | + </if> | ||
| 145 | + <if test="orderId != null"> | ||
| 146 | + #{orderId,jdbcType=VARCHAR}, | ||
| 147 | + </if> | ||
| 148 | + <if test="tradeId != null"> | ||
| 149 | + #{tradeId,jdbcType=VARCHAR}, | ||
| 150 | + </if> | ||
| 151 | + <if test="payPaymentId != null"> | ||
| 152 | + #{payPaymentId,jdbcType=VARCHAR}, | ||
| 153 | + </if> | ||
| 154 | + <if test="mchId != null"> | ||
| 155 | + #{mchId,jdbcType=VARCHAR}, | ||
| 156 | + </if> | ||
| 157 | + <if test="cardNo != null"> | ||
| 158 | + #{cardNo,jdbcType=VARCHAR}, | ||
| 159 | + </if> | ||
| 160 | + <if test="username != null"> | ||
| 161 | + #{username,jdbcType=VARCHAR}, | ||
| 162 | + </if> | ||
| 163 | + <if test="userId != null"> | ||
| 164 | + #{userId,jdbcType=BIGINT}, | ||
| 165 | + </if> | ||
| 166 | + <if test="accountId != null"> | ||
| 167 | + #{accountId,jdbcType=BIGINT}, | ||
| 168 | + </if> | ||
| 169 | + <if test="fundAccountId != null"> | ||
| 170 | + #{fundAccountId,jdbcType=BIGINT}, | ||
| 171 | + </if> | ||
| 172 | + <if test="payFee != null"> | ||
| 173 | + #{payFee,jdbcType=BIGINT}, | ||
| 174 | + </if> | ||
| 175 | + <if test="payState != null"> | ||
| 176 | + #{payState,jdbcType=TINYINT}, | ||
| 177 | + </if> | ||
| 178 | + <if test="payTime != null"> | ||
| 179 | + #{payTime,jdbcType=TIMESTAMP}, | ||
| 180 | + </if> | ||
| 181 | + <if test="channelId != null"> | ||
| 182 | + #{channelId,jdbcType=TINYINT}, | ||
| 183 | + </if> | ||
| 184 | + <if test="cashierUrl != null"> | ||
| 185 | + #{cashierUrl,jdbcType=VARCHAR}, | ||
| 186 | + </if> | ||
| 187 | + <if test="paymentCallback != null"> | ||
| 188 | + #{paymentCallback,jdbcType=VARCHAR}, | ||
| 189 | + </if> | ||
| 190 | + <if test="version != null"> | ||
| 191 | + #{version,jdbcType=INTEGER}, | ||
| 192 | + </if> | ||
| 193 | + <if test="createdTime != null"> | ||
| 194 | + #{createdTime,jdbcType=TIMESTAMP}, | ||
| 195 | + </if> | ||
| 196 | + <if test="modifiedTime != null"> | ||
| 197 | + #{modifiedTime,jdbcType=TIMESTAMP}, | ||
| 198 | + </if> | ||
| 199 | + </trim> | ||
| 200 | + </insert> | ||
| 201 | + <update id="updateByPrimaryKeySelective" parameterType="com.diligrp.cashier.mall.model.MallBizPayment"> | ||
| 202 | + update mall_biz_payment | ||
| 203 | + <set> | ||
| 204 | + <if test="payTradeNo != null"> | ||
| 205 | + pay_trade_no = #{payTradeNo,jdbcType=VARCHAR}, | ||
| 206 | + </if> | ||
| 207 | + <if test="bizOrderId != null"> | ||
| 208 | + biz_order_id = #{bizOrderId,jdbcType=BIGINT}, | ||
| 209 | + </if> | ||
| 210 | + <if test="orderId != null"> | ||
| 211 | + order_id = #{orderId,jdbcType=VARCHAR}, | ||
| 212 | + </if> | ||
| 213 | + <if test="tradeId != null"> | ||
| 214 | + trade_id = #{tradeId,jdbcType=VARCHAR}, | ||
| 215 | + </if> | ||
| 216 | + <if test="payPaymentId != null"> | ||
| 217 | + pay_payment_id = #{payPaymentId,jdbcType=VARCHAR}, | ||
| 218 | + </if> | ||
| 219 | + <if test="mchId != null"> | ||
| 220 | + mch_id = #{mchId,jdbcType=VARCHAR}, | ||
| 221 | + </if> | ||
| 222 | + <if test="cardNo != null"> | ||
| 223 | + card_no = #{cardNo,jdbcType=VARCHAR}, | ||
| 224 | + </if> | ||
| 225 | + <if test="username != null"> | ||
| 226 | + username = #{username,jdbcType=VARCHAR}, | ||
| 227 | + </if> | ||
| 228 | + <if test="userId != null"> | ||
| 229 | + user_id = #{userId,jdbcType=BIGINT}, | ||
| 230 | + </if> | ||
| 231 | + <if test="accountId != null"> | ||
| 232 | + account_id = #{accountId,jdbcType=BIGINT}, | ||
| 233 | + </if> | ||
| 234 | + <if test="fundAccountId != null"> | ||
| 235 | + fund_account_id = #{fundAccountId,jdbcType=BIGINT}, | ||
| 236 | + </if> | ||
| 237 | + <if test="payFee != null"> | ||
| 238 | + pay_fee = #{payFee,jdbcType=BIGINT}, | ||
| 239 | + </if> | ||
| 240 | + <if test="payState != null"> | ||
| 241 | + pay_state = #{payState,jdbcType=TINYINT}, | ||
| 242 | + </if> | ||
| 243 | + <if test="payTime != null"> | ||
| 244 | + pay_time = #{payTime,jdbcType=TIMESTAMP}, | ||
| 245 | + </if> | ||
| 246 | + <if test="channelId != null"> | ||
| 247 | + channel_id = #{channelId,jdbcType=TINYINT}, | ||
| 248 | + </if> | ||
| 249 | + <if test="cashierUrl != null"> | ||
| 250 | + cashier_url = #{cashierUrl,jdbcType=VARCHAR}, | ||
| 251 | + </if> | ||
| 252 | + <if test="paymentCallback != null"> | ||
| 253 | + payment_callback = #{paymentCallback,jdbcType=VARCHAR}, | ||
| 254 | + </if> | ||
| 255 | + <if test="version != null"> | ||
| 256 | + version = #{version,jdbcType=INTEGER}, | ||
| 257 | + </if> | ||
| 258 | + <if test="createdTime != null"> | ||
| 259 | + created_time = #{createdTime,jdbcType=TIMESTAMP}, | ||
| 260 | + </if> | ||
| 261 | + <if test="modifiedTime != null"> | ||
| 262 | + modified_time = #{modifiedTime,jdbcType=TIMESTAMP}, | ||
| 263 | + </if> | ||
| 264 | + </set> | ||
| 265 | + where id = #{id,jdbcType=BIGINT} | ||
| 266 | + </update> | ||
| 267 | + <update id="updateByPrimaryKey" parameterType="com.diligrp.cashier.mall.model.MallBizPayment"> | ||
| 268 | + update mall_biz_payment | ||
| 269 | + set pay_trade_no = #{payTradeNo,jdbcType=VARCHAR}, | ||
| 270 | + biz_order_id = #{bizOrderId,jdbcType=BIGINT}, | ||
| 271 | + order_id = #{orderId,jdbcType=VARCHAR}, | ||
| 272 | + trade_id = #{tradeId,jdbcType=VARCHAR}, | ||
| 273 | + pay_payment_id = #{payPaymentId,jdbcType=VARCHAR}, | ||
| 274 | + mch_id = #{mchId,jdbcType=VARCHAR}, | ||
| 275 | + card_no = #{cardNo,jdbcType=VARCHAR}, | ||
| 276 | + username = #{username,jdbcType=VARCHAR}, | ||
| 277 | + user_id = #{userId,jdbcType=BIGINT}, | ||
| 278 | + account_id = #{accountId,jdbcType=BIGINT}, | ||
| 279 | + fund_account_id = #{fundAccountId,jdbcType=BIGINT}, | ||
| 280 | + pay_fee = #{payFee,jdbcType=BIGINT}, | ||
| 281 | + pay_state = #{payState,jdbcType=TINYINT}, | ||
| 282 | + pay_time = #{payTime,jdbcType=TIMESTAMP}, | ||
| 283 | + channel_id = #{channelId,jdbcType=TINYINT}, | ||
| 284 | + cashier_url = #{cashierUrl,jdbcType=VARCHAR}, | ||
| 285 | + payment_callback = #{paymentCallback,jdbcType=VARCHAR}, | ||
| 286 | + version = #{version,jdbcType=INTEGER}, | ||
| 287 | + created_time = #{createdTime,jdbcType=TIMESTAMP}, | ||
| 288 | + modified_time = #{modifiedTime,jdbcType=TIMESTAMP} | ||
| 289 | + where id = #{id,jdbcType=BIGINT} | ||
| 290 | + </update> | ||
| 295 | </mapper> | 291 | </mapper> |