记得上下班打卡 | git大法好,push需谨慎

Commit 91b97e69 authored by 胡佳晨's avatar 胡佳晨

再次支付 接口添加

parent 58a122bd
...@@ -49,6 +49,9 @@ public class GoblinRedisConst { ...@@ -49,6 +49,9 @@ public class GoblinRedisConst {
public static final String REDIS_GOBLIN_BUY_COUNT = PREFIX.concat("uid:");//用户sku购买数量 key:uid:skuId:$skuId public static final String REDIS_GOBLIN_BUY_COUNT = PREFIX.concat("uid:");//用户sku购买数量 key:uid:skuId:$skuId
public static final String REDIS_GOBLIN_SALE_COUNT = PREFIX.concat("sale:skuId:");//用户sku购买数量 key:sale:skuId:$skuId public static final String REDIS_GOBLIN_SALE_COUNT = PREFIX.concat("sale:skuId:");//用户sku购买数量 key:sale:skuId:$skuId
public static final String REDIS_GOBLIN_ORDER = PREFIX.concat("order:");//用户sku购买数量 key:$orderId
public static final String REDIS_GOBLIN_ORDER_UN_PAY = PREFIX.concat("order:un:pay:");//未支付订单id列表 key:$randomKey
public static final String REDIS_GOBLIN_ORDER_LIST = PREFIX.concat("order:id:list:");//用户订单id列表 key:$uid
/* ----------------------------------------------------------------- */ /* ----------------------------------------------------------------- */
/** /**
* SKU剩余库存 * SKU剩余库存
......
...@@ -26,18 +26,24 @@ public class GoblinStatusConst { ...@@ -26,18 +26,24 @@ public class GoblinStatusConst {
} }
public enum OrderStatus { public enum OrderStatus {
ORDER_STATUS_1("1", "订单状态"), ORDER_STATUS_0(0, "待付款(用户刚下单)"),
ORDER_STATUS_2(2, "代发货(用户付完款 等待商城发货)"),
ORDER_STATUS_3(3, "代收货(商城已经发货 等待用户确认收货)"),
ORDER_STATUS_4(4, "已完成(用户已经确认收货 订单结束)"),
ORDER_STATUS_5(5, "取消订单(用户未付款前取消订单)"),
ORDER_STATUS_6(6, "退款通过(用户已经付款但是商城还未发货,用户发出退款申请,商城同意退款)"),
ORDER_STATUS_7(7, "退货通过(用户已经确认收货后用户发出退货申请,商城同意所有退货申请 ,一个订单可能有多个单品)"),
; ;
private final String value; private final int value;
private final String desc; private final String desc;
OrderStatus(String value, String desc) { OrderStatus(int value, String desc) {
this.value = value; this.value = value;
this.desc = desc; this.desc = desc;
} }
public String getValue() { public int getValue() {
return value; return value;
} }
......
...@@ -11,6 +11,7 @@ import lombok.EqualsAndHashCode; ...@@ -11,6 +11,7 @@ import lombok.EqualsAndHashCode;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List;
/** /**
* <p> * <p>
...@@ -62,6 +63,8 @@ public class GoblinStoreOrderVo implements Serializable, Cloneable { ...@@ -62,6 +63,8 @@ public class GoblinStoreOrderVo implements Serializable, Cloneable {
private String ucouponId; private String ucouponId;
@ApiModelProperty(value = " 支付类型[wepay-微信支付|alipay-阿里支付|douyinpay-抖音支付|unionpay-银联支付]") @ApiModelProperty(value = " 支付类型[wepay-微信支付|alipay-阿里支付|douyinpay-抖音支付|unionpay-银联支付]")
private String payType; private String payType;
@ApiModelProperty(value = " 支付来源")
private String deviceFrom;
@ApiModelProperty(value = " 取消原因") @ApiModelProperty(value = " 取消原因")
private String cancelReason; private String cancelReason;
@ApiModelProperty(value = " 订单来源[app|h5|applet]") @ApiModelProperty(value = " 订单来源[app|h5|applet]")
...@@ -96,10 +99,16 @@ public class GoblinStoreOrderVo implements Serializable, Cloneable { ...@@ -96,10 +99,16 @@ public class GoblinStoreOrderVo implements Serializable, Cloneable {
private String logisticsCompany; private String logisticsCompany;
@ApiModelProperty(value = " 物流公司code[物流公司id]") @ApiModelProperty(value = " 物流公司code[物流公司id]")
private String logisticsCode; private String logisticsCode;
@ApiModelProperty(value = " ip")
private String ipAddress;
@ApiModelProperty(value = " 创建时间") @ApiModelProperty(value = " 创建时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR) @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
private LocalDateTime createdAt; private LocalDateTime createdAt;
@ApiModelProperty(value = "orderAttr")
private GoblinOrderAttrVo orderAttrVo;
@ApiModelProperty(value = "orderSku")
private List<GoblinOrderSkuVo> orderSkuVos;
private static final GoblinStoreOrderVo obj = new GoblinStoreOrderVo(); private static final GoblinStoreOrderVo obj = new GoblinStoreOrderVo();
......
...@@ -203,6 +203,9 @@ public class MQConst { ...@@ -203,6 +203,9 @@ public class MQConst {
public enum GoblinQueue { public enum GoblinQueue {
GOBLIN_STORE_MARKET("goblin:stream:store.market", "group.store.market", "店铺活动"), GOBLIN_STORE_MARKET("goblin:stream:store.market", "group.store.market", "店铺活动"),
GOBLIN_SELF_MARKET("goblin:stream:self.market", "group.self.market", "平台活动"), GOBLIN_SELF_MARKET("goblin:stream:self.market", "group.self.market", "平台活动"),
GOBLIN_ORDER_CREATE_PAY("goblin:stream:order:create_pay", "group.order:create_pay", "订单创建&支付"),
GOBLIN_ORDER_AGAIN("goblin:stream:order:again", "group.order:again", "订单再次支付"),
GOBLIN_ORDER_CLOSE("goblin:stream:order:close", "group.order:close", "订单关闭"),
; ;
private final String key; private final String key;
......
...@@ -150,6 +150,10 @@ public class GoblinStoreOrder implements Serializable,Cloneable { ...@@ -150,6 +150,10 @@ public class GoblinStoreOrder implements Serializable,Cloneable {
*/ */
private String payType; private String payType;
/**
* 支付来源
*/
private String deviceFrom;
/** /**
* 取消原因 * 取消原因
*/ */
......
package com.liquidnet.service.consumer.goblin.config;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.consumer.goblin.receiver.ConsumerGoblinOrderAGRdsReceiver;
import com.liquidnet.service.consumer.goblin.receiver.ConsumerGoblinOrderCPRdsReceiver;
import lombok.var;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.stream.Consumer;
import org.springframework.data.redis.connection.stream.MapRecord;
import org.springframework.data.redis.connection.stream.ReadOffset;
import org.springframework.data.redis.connection.stream.StreamOffset;
import org.springframework.data.redis.stream.StreamMessageListenerContainer;
import org.springframework.data.redis.stream.Subscription;
import java.time.Duration;
@Configuration
public class ConsumerGoblinOrderAGRedisStreamConfig {
@Autowired
ConsumerGoblinOrderAGRdsReceiver consumerGoblinOrderAGRdsReceiver;
private StreamMessageListenerContainer<String, MapRecord<String, String, String>> buildStreamMessageListenerContainer(RedisConnectionFactory factory) {
var options = StreamMessageListenerContainer
.StreamMessageListenerContainerOptions
.builder()
.pollTimeout(Duration.ofMillis(1))
.build();
return StreamMessageListenerContainer.create(factory, options);
}
/**
* 缺票登记
*
* @param listenerContainer
* @param t
* @return
*/
private Subscription receiveGoblinOrderAG(StreamMessageListenerContainer<String, MapRecord<String, String, String>> listenerContainer, int t) {
return listenerContainer.receiveAutoAck(
Consumer.from(MQConst.GoblinQueue.GOBLIN_ORDER_AGAIN.getGroup(), MQConst.GoblinQueue.GOBLIN_ORDER_AGAIN.name() + t),
StreamOffset.create(MQConst.GoblinQueue.GOBLIN_ORDER_AGAIN.getKey(), ReadOffset.lastConsumed()), consumerGoblinOrderAGRdsReceiver
);
}
/* —————————————————————————— | —————————————————————————— | —————————————————————————— */
/* -------------------------------------------------------- | 缺票登记 */
@Bean
public Subscription subscriptionGoblinOrderAG(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveGoblinOrderAG(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
@Bean
public Subscription subscriptionGoblinOrderAG2(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveGoblinOrderAG(listenerContainer, 2);
listenerContainer.start();
return subscription;
}
@Bean
public Subscription subscriptionGoblinOrderAG3(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveGoblinOrderAG(listenerContainer, 3);
listenerContainer.start();
return subscription;
}
/* -------------------------------------------------------- | */
}
package com.liquidnet.service.consumer.goblin.config;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.consumer.goblin.receiver.ConsumerGoblinOrderCPRdsReceiver;
import com.liquidnet.service.consumer.goblin.receiver.ConsumerGoblinSelfMarketRdsReceiver;
import lombok.var;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.stream.Consumer;
import org.springframework.data.redis.connection.stream.MapRecord;
import org.springframework.data.redis.connection.stream.ReadOffset;
import org.springframework.data.redis.connection.stream.StreamOffset;
import org.springframework.data.redis.stream.StreamMessageListenerContainer;
import org.springframework.data.redis.stream.Subscription;
import java.time.Duration;
@Configuration
public class ConsumerGoblinOrderCPRedisStreamConfig {
@Autowired
ConsumerGoblinOrderCPRdsReceiver consumerGoblinOrderCPRdsReceiver;
private StreamMessageListenerContainer<String, MapRecord<String, String, String>> buildStreamMessageListenerContainer(RedisConnectionFactory factory) {
var options = StreamMessageListenerContainer
.StreamMessageListenerContainerOptions
.builder()
.pollTimeout(Duration.ofMillis(1))
.build();
return StreamMessageListenerContainer.create(factory, options);
}
/**
* 缺票登记
*
* @param listenerContainer
* @param t
* @return
*/
private Subscription receiveGoblinOrderCP(StreamMessageListenerContainer<String, MapRecord<String, String, String>> listenerContainer, int t) {
return listenerContainer.receiveAutoAck(
Consumer.from(MQConst.GoblinQueue.GOBLIN_ORDER_CREATE_PAY.getGroup(), MQConst.GoblinQueue.GOBLIN_ORDER_CREATE_PAY.name() + t),
StreamOffset.create(MQConst.GoblinQueue.GOBLIN_ORDER_CREATE_PAY.getKey(), ReadOffset.lastConsumed()), consumerGoblinOrderCPRdsReceiver
);
}
/* —————————————————————————— | —————————————————————————— | —————————————————————————— */
/* -------------------------------------------------------- | 缺票登记 */
@Bean
public Subscription subscriptionGoblinOrderCP(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveGoblinOrderCP(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
@Bean
public Subscription subscriptionGoblinOrderCP2(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveGoblinOrderCP(listenerContainer, 2);
listenerContainer.start();
return subscription;
}
@Bean
public Subscription subscriptionGoblinOrderCP3(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveGoblinOrderCP(listenerContainer, 3);
listenerContainer.start();
return subscription;
}
/* -------------------------------------------------------- | */
}
package com.liquidnet.service.consumer.goblin.config;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.consumer.goblin.receiver.ConsumerGoblinSelfMarketRdsReceiver;
import com.liquidnet.service.consumer.goblin.receiver.ConsumerGoblinStoreMarketRdsReceiver;
import lombok.var;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.stream.Consumer;
import org.springframework.data.redis.connection.stream.MapRecord;
import org.springframework.data.redis.connection.stream.ReadOffset;
import org.springframework.data.redis.connection.stream.StreamOffset;
import org.springframework.data.redis.stream.StreamMessageListenerContainer;
import org.springframework.data.redis.stream.Subscription;
import java.time.Duration;
@Configuration
public class ConsumerGoblinSelfMarketRedisStreamConfig {
@Autowired
ConsumerGoblinSelfMarketRdsReceiver consumerGoblinSelfMarketRdsReceiver;
private StreamMessageListenerContainer<String, MapRecord<String, String, String>> buildStreamMessageListenerContainer(RedisConnectionFactory factory) {
var options = StreamMessageListenerContainer
.StreamMessageListenerContainerOptions
.builder()
.pollTimeout(Duration.ofMillis(1))
.build();
return StreamMessageListenerContainer.create(factory, options);
}
/**
* 缺票登记
*
* @param listenerContainer
* @param t
* @return
*/
private Subscription receiveGoblinSelfMarket(StreamMessageListenerContainer<String, MapRecord<String, String, String>> listenerContainer, int t) {
return listenerContainer.receiveAutoAck(
Consumer.from(MQConst.GoblinQueue.GOBLIN_SELF_MARKET.getGroup(), MQConst.GoblinQueue.GOBLIN_SELF_MARKET.name() + t),
StreamOffset.create(MQConst.GoblinQueue.GOBLIN_SELF_MARKET.getKey(), ReadOffset.lastConsumed()), consumerGoblinSelfMarketRdsReceiver
);
}
/* —————————————————————————— | —————————————————————————— | —————————————————————————— */
/* -------------------------------------------------------- | 缺票登记 */
@Bean
public Subscription subscriptionGoblinSelfMarket(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveGoblinSelfMarket(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
@Bean
public Subscription subscriptionGoblinSelfMarket2(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveGoblinSelfMarket(listenerContainer, 2);
listenerContainer.start();
return subscription;
}
@Bean
public Subscription subscriptionGoblinSelfMarket3(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveGoblinSelfMarket(listenerContainer, 3);
listenerContainer.start();
return subscription;
}
/* -------------------------------------------------------- | */
}
package com.liquidnet.service.consumer.goblin.receiver;
import com.liquidnet.service.base.constant.MQConst;
import org.springframework.stereotype.Component;
@Component
public class ConsumerGoblinOrderAGRdsReceiver extends AbstractSqlRedisReceiver {
@Override
protected String getRedisStreamKey() {
return MQConst.GoblinQueue.GOBLIN_ORDER_AGAIN.getKey();
}
@Override
protected String getRedisStreamGroup() {
return MQConst.GoblinQueue.GOBLIN_ORDER_AGAIN.getGroup();
}
}
package com.liquidnet.service.consumer.goblin.receiver;
import com.liquidnet.service.base.constant.MQConst;
import org.springframework.stereotype.Component;
@Component
public class ConsumerGoblinOrderCPRdsReceiver extends AbstractSqlRedisReceiver {
@Override
protected String getRedisStreamKey() {
return MQConst.GoblinQueue.GOBLIN_ORDER_CREATE_PAY.getKey();
}
@Override
protected String getRedisStreamGroup() {
return MQConst.GoblinQueue.GOBLIN_ORDER_CREATE_PAY.getGroup();
}
}
package com.liquidnet.service.consumer.goblin.receiver;
import com.liquidnet.service.base.constant.MQConst;
import org.springframework.stereotype.Component;
@Component
public class ConsumerGoblinSelfMarketRdsReceiver extends AbstractSqlRedisReceiver {
@Override
protected String getRedisStreamKey() {
return MQConst.GoblinQueue.GOBLIN_SELF_MARKET.getKey();
}
@Override
protected String getRedisStreamGroup() {
return MQConst.GoblinQueue.GOBLIN_SELF_MARKET.getGroup();
}
}
...@@ -2,4 +2,13 @@ XADD goblin:stream:store.market * 0 0 ...@@ -2,4 +2,13 @@ XADD goblin:stream:store.market * 0 0
XGROUP CREATE goblin:stream:store.market group.store.market 0 XGROUP CREATE goblin:stream:store.market group.store.market 0
XADD goblin:stream:self.market * 0 0 XADD goblin:stream:self.market * 0 0
XGROUP CREATE goblin:stream:self.market group.self.market 0 XGROUP CREATE goblin:stream:self.market group.self.market 0
\ No newline at end of file
XADD goblin:stream:order:create_pay * 0 0
XGROUP CREATE goblin:stream:order:create_pay group.order:create_pay 0
XADD goblin:stream:order:again * 0 0
XGROUP CREATE goblin:stream:order:again group.order:again 0
XADD goblin:stream:order:close * 0 0
XGROUP CREATE goblin:stream:order:close group.order:close 0
\ No newline at end of file
...@@ -7,7 +7,9 @@ import com.liquidnet.service.adam.dto.vo.AdamAddressesVo; ...@@ -7,7 +7,9 @@ import com.liquidnet.service.adam.dto.vo.AdamAddressesVo;
import com.liquidnet.service.adam.dto.vo.AdamRscPolymer01Vo; import com.liquidnet.service.adam.dto.vo.AdamRscPolymer01Vo;
import com.liquidnet.service.base.ErrorMapping; import com.liquidnet.service.base.ErrorMapping;
import com.liquidnet.service.base.ResponseDto; import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.UserPathDto; import com.liquidnet.service.base.UserPathDto;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.goblin.constant.GoblinStatusConst; import com.liquidnet.service.goblin.constant.GoblinStatusConst;
import com.liquidnet.service.goblin.dto.manage.GoblinOrderParam; import com.liquidnet.service.goblin.dto.manage.GoblinOrderParam;
import com.liquidnet.service.goblin.dto.manage.GoblinOrderSkuParam; import com.liquidnet.service.goblin.dto.manage.GoblinOrderSkuParam;
...@@ -164,6 +166,9 @@ public class GoblinAppOrderServiceImpl implements IGoblinAppOrderService { ...@@ -164,6 +166,9 @@ public class GoblinAppOrderServiceImpl implements IGoblinAppOrderService {
String platVoucherCode = storeParam.getPlatVoucherCode(); String platVoucherCode = storeParam.getPlatVoucherCode();
String storeId = storeParam.getStoreId(); String storeId = storeParam.getStoreId();
LinkedList<String> sqls = CollectionUtil.linkedListString(); LinkedList<String> sqls = CollectionUtil.linkedListString();
sqls.add(SqlMapping.get("goblin.order.create.sku_insert"));
sqls.add(SqlMapping.get("goblin.order.create.order_insert"));
sqls.add(SqlMapping.get("goblin.order.create.attr_insert"));
Map token = CurrentUtil.getTokenClaims(); Map token = CurrentUtil.getTokenClaims();
String headerCliSource = CurrentUtil.getHeaderCliSource(), headerCliVersion = CurrentUtil.getHeaderCliVersion(); String headerCliSource = CurrentUtil.getHeaderCliSource(), headerCliVersion = CurrentUtil.getHeaderCliVersion();
String source = headerCliSource == null ? "" : headerCliSource; String source = headerCliSource == null ? "" : headerCliSource;
...@@ -176,6 +181,7 @@ public class GoblinAppOrderServiceImpl implements IGoblinAppOrderService { ...@@ -176,6 +181,7 @@ public class GoblinAppOrderServiceImpl implements IGoblinAppOrderService {
BigDecimal voucherMarket = BigDecimal.ZERO;//活动优惠金额 BigDecimal voucherMarket = BigDecimal.ZERO;//活动优惠金额
String writeOffCode = ""; //取货码 String writeOffCode = ""; //取货码
List<GoblinOrderSkuVo> goblinOrderSkuVoList = ObjectUtil.getGoblinOrderSkuVoArrayList(); List<GoblinOrderSkuVo> goblinOrderSkuVoList = ObjectUtil.getGoblinOrderSkuVoArrayList();
LinkedList<Object[]> sqlDataSku = CollectionUtil.linkedListObjectArr();
for (GoblinOrderSkuParam skuParam : storeParam.getGoblinOrderSkuParamArrayList()) { for (GoblinOrderSkuParam skuParam : storeParam.getGoblinOrderSkuParamArrayList()) {
String pre = GoblinStatusConst.MarketPreStatus.getPre(skuParam.getSkuId()); String pre = GoblinStatusConst.MarketPreStatus.getPre(skuParam.getSkuId());
GoblinGoodsSkuInfoVo skuVo = redisUtils.getGoodsSkuInfoVo(skuParam.getSkuId()); GoblinGoodsSkuInfoVo skuVo = redisUtils.getGoodsSkuInfoVo(skuParam.getSkuId());
...@@ -218,6 +224,10 @@ public class GoblinAppOrderServiceImpl implements IGoblinAppOrderService { ...@@ -218,6 +224,10 @@ public class GoblinAppOrderServiceImpl implements IGoblinAppOrderService {
orderSku.setSkuSpecs(JSON.toJSONString(skuVo.getSkuSpecList())); orderSku.setSkuSpecs(JSON.toJSONString(skuVo.getSkuSpecList()));
orderSku.setPriceVoucher(priceBase.subtract(price)); orderSku.setPriceVoucher(priceBase.subtract(price));
orderSku.setCreatedAt(now); orderSku.setCreatedAt(now);
sqlDataSku.add(new Object[]{
orderSku.getOrderSkuId(), orderSku.getOrderId(), orderSku.getSpuId(), orderSku.getSkuId(), orderSku.getNum(), orderSku.getSkuPrice(), orderSku.getSkuPriceActual(), orderSku.getSkuName(),
orderSku.getSkuNo(), orderSku.getSkuImage(), orderSku.getSkuSpecs(), orderSku.getPriceVoucher(), orderSku.getCreatedAt()
});
//订单 orderSku Vo //订单 orderSku Vo
GoblinOrderSkuVo orderSkuVo = GoblinOrderSkuVo.getNew(); GoblinOrderSkuVo orderSkuVo = GoblinOrderSkuVo.getNew();
BeanUtils.copyProperties(orderSku, orderSkuVo); BeanUtils.copyProperties(orderSku, orderSkuVo);
...@@ -245,27 +255,17 @@ public class GoblinAppOrderServiceImpl implements IGoblinAppOrderService { ...@@ -245,27 +255,17 @@ public class GoblinAppOrderServiceImpl implements IGoblinAppOrderService {
storeOrder.setPriceTotal(storeTotalPrice); storeOrder.setPriceTotal(storeTotalPrice);
storeOrder.setPriceActual(storeOrder.getPriceTotal().subtract(voucherMarket).subtract(voucherPrice)); storeOrder.setPriceActual(storeOrder.getPriceTotal().subtract(voucherMarket).subtract(voucherPrice));
storeOrder.setPriceRefund(BigDecimal.ZERO); storeOrder.setPriceRefund(BigDecimal.ZERO);
storeOrder.setPreSalePrice(BigDecimal.ZERO);
storeOrder.setPriceExpress(BigDecimal.TEN);//todo 快递费 暂时写死 storeOrder.setPriceExpress(BigDecimal.TEN);//todo 快递费 暂时写死
storeOrder.setPriceModify(BigDecimal.ZERO);
storeOrder.setPricePoint((BigDecimal.ZERO));
storeOrder.setPriceCoupon(voucherPrice); storeOrder.setPriceCoupon(voucherPrice);
storeOrder.setPriceRedEnvelope((BigDecimal.ZERO));
storeOrder.setPriceVoucher(voucherMarket.add(voucherPrice)); storeOrder.setPriceVoucher(voucherMarket.add(voucherPrice));
storeOrder.setStatus(0); storeOrder.setStatus(0);
storeOrder.setStatusPreSale(0);
storeOrder.setStatusEvaluation(0);
storeOrder.setRedEnvelopeCode("");
storeOrder.setUcouponId(platVoucherCode); storeOrder.setUcouponId(platVoucherCode);
storeOrder.setUsePoint((BigDecimal.ZERO));
storeOrder.setPayType(param.getPayType()); storeOrder.setPayType(param.getPayType());
storeOrder.setCancelReason(""); storeOrder.setDeviceFrom(param.getDeviceFrom());
storeOrder.setPreDepositPay(0);
storeOrder.setSource(source); storeOrder.setSource(source);
storeOrder.setVersion(version); storeOrder.setVersion(version);
storeOrder.setIsMember(isMember ? 1 : 0); storeOrder.setIsMember(isMember ? 1 : 0);
storeOrder.setOrderType(0); storeOrder.setOrderType(0);
storeOrder.setLotteryStatus("0");
storeOrder.setWriteOffCode(writeOffCode); storeOrder.setWriteOffCode(writeOffCode);
storeOrder.setPayCountdownMinute(5); storeOrder.setPayCountdownMinute(5);
storeOrder.setIpAddress(CurrentUtil.getCliIpAddr()); storeOrder.setIpAddress(CurrentUtil.getCliIpAddr());
...@@ -335,14 +335,34 @@ public class GoblinAppOrderServiceImpl implements IGoblinAppOrderService { ...@@ -335,14 +335,34 @@ public class GoblinAppOrderServiceImpl implements IGoblinAppOrderService {
payInnerResultVo.setPayType(storeOrder.getPayType()); payInnerResultVo.setPayType(storeOrder.getPayType());
} }
//todo vo redisList LinkedList<Object[]> sqlDataOrder = CollectionUtil.linkedListObjectArr();
sqlDataOrder.add(new Object[]{
storeOrder.getMasterOrderCode(), storeOrder.getOrderId(), storeOrder.getStoreId(), storeOrder.getOrderCode(), storeOrder.getUserId(), storeOrder.getUserName(), storeOrder.getUserMobile(), storeOrder.getPriceTotal(),
storeOrder.getPriceActual(), storeOrder.getPriceRefund(), storeOrder.getPriceExpress(), storeOrder.getPriceCoupon(), storeOrder.getPriceVoucher(), storeOrder.getStatus(), storeOrder.getUcouponId(), storeOrder.getPayType(), storeOrder.getDeviceFrom(),
storeOrder.getSource(), storeOrder.getVersion(), storeOrder.getIsMember(), storeOrder.getOrderType(), storeOrder.getWriteOffCode(), storeOrder.getPayCountdownMinute(), storeOrder.getIpAddress(), storeOrder.getPayCode(), storeOrder.getCreatedAt()
});
LinkedList<Object[]> sqlDataAttr = CollectionUtil.linkedListObjectArr();
sqlDataAttr.add(new Object[]{
orderAttr.getOrderAttrId(), orderAttr.getOrderId(), orderAttr.getExpressContacts(), orderAttr.getExpressAddress(), orderAttr.getExpressAddressDetail(), orderAttr.getExpressPhone(), orderAttr.getExpressType(), orderAttr.getCreatedAt()
});
//订单vo //订单vo
GoblinStoreOrderVo orderVo = GoblinStoreOrderVo.getNew(); GoblinStoreOrderVo orderVo = GoblinStoreOrderVo.getNew();
BeanUtils.copyProperties(storeOrder, orderVo); BeanUtils.copyProperties(storeOrder, orderVo);
//订单attr vo //订单attr vo
GoblinOrderAttrVo orderAttrVo = GoblinOrderAttrVo.getNew(); GoblinOrderAttrVo orderAttrVo = GoblinOrderAttrVo.getNew();
BeanUtils.copyProperties(orderAttr, orderAttrVo); BeanUtils.copyProperties(orderAttr, orderAttrVo);
//redis 赋值
orderVo.setOrderAttrVo(orderAttrVo);
orderVo.setOrderSkuVos(goblinOrderSkuVoList);
redisUtils.setGoblinOrder(orderVo.getOrderId(), orderVo);
//redis 添加未支付列表
redisUtils.addUnPayOrder(orderVo.getOrderId());
//redis 订单列表
redisUtils.addOrderList(uid, orderId);
//mysql 执行sql
String sqlData = SqlMapping.gets(sqls, sqlDataSku, sqlDataOrder, sqlDataAttr);
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.GOBLIN_ORDER_CREATE_PAY.getKey(), sqlData);
log.info(UserPathDto.setData("下单(唤起支付)", param, payInnerResultVo)); log.info(UserPathDto.setData("下单(唤起支付)", param, payInnerResultVo));
if (isFree) { if (isFree) {
SyncOrderParam syncOrderParam = SyncOrderParam.getNew(); SyncOrderParam syncOrderParam = SyncOrderParam.getNew();
...@@ -362,7 +382,85 @@ public class GoblinAppOrderServiceImpl implements IGoblinAppOrderService { ...@@ -362,7 +382,85 @@ public class GoblinAppOrderServiceImpl implements IGoblinAppOrderService {
@Override @Override
public ResponseDto<GoblinPayInnerResultVo> payAgain(PayAgainParam param) { public ResponseDto<GoblinPayInnerResultVo> payAgain(PayAgainParam param) {
return null; String uid = CurrentUtil.getCurrentUid();
LocalDateTime now = LocalDateTime.now();
//检查订单时间 是否关闭
GoblinStoreOrderVo storeOrderVo = redisUtils.getGoblinOrder(param.getOrderId());
if (!storeOrderVo.getUserId().equals(uid)) {
return ResponseDto.failure(ErrorMapping.get("20003"));
}
if (storeOrderVo == null) {
return ResponseDto.failure(ErrorMapping.get("20024"));
}
if (storeOrderVo.getStatus() != GoblinStatusConst.OrderStatus.ORDER_STATUS_0.getValue()) {
return ResponseDto.failure("订单无法支付");//订单
}
String returnCheckData = HttpUtil.get(checkUrl + "?code=" + storeOrderVo.getPayCode(), null);
ResponseDto<GoblinPayInnerResultVo> checkVo = JsonUtils.fromJson(returnCheckData, new TypeReference<ResponseDto<GoblinPayInnerResultVo>>() {
});
if (checkVo.getData().getStatus() == 1) {
return ResponseDto.failure("订单已支付");
}
GoblinPayInnerResultVo payInnerResultVo = GoblinPayInnerResultVo.getNew();
if (!storeOrderVo.getPayType().equals("FREE") && storeOrderVo.getPayType().equals(param.getPayType()) && storeOrderVo.getDeviceFrom().equals(param.getDeviceFrom())) {
payInnerResultVo.setCode(checkVo.getData().getCode());
payInnerResultVo.setOrderCode(checkVo.getData().getOrderCode());
payInnerResultVo.setPayData(checkVo.getData().getPayData());
payInnerResultVo.setOrderId(param.getOrderId());
payInnerResultVo.setPayType(param.getPayType());
payInnerResultVo.setPrice(storeOrderVo.getPriceActual());
storeOrderVo.setPayCode(payInnerResultVo.getCode());
payInnerResultVo.setShowUrl(param.getShowUrl() + storeOrderVo.getOrderId());
payInnerResultVo.setReturnUrl(param.getReturnUrl() + storeOrderVo.getOrderId());
log.info(UserPathDto.setData("再次支付[原支付方式]", param, payInnerResultVo));
} else {
// 调用支付
LinkedMultiValueMap<String, String> httpData = CollectionUtil.linkedMultiValueMapStringString();
httpData.add("type", "PRODUCT");
httpData.add("price", storeOrderVo.getPriceActual().toString());
httpData.add("name", redisUtils.getStoreInfoVo(storeOrderVo.getStoreId()).getStoreName());
httpData.add("detail", "查找最初订单");
httpData.add("orderCode", storeOrderVo.getOrderCode());
httpData.add("clientIp", storeOrderVo.getIpAddress());
httpData.add("notifyUrl", synUrl);
httpData.add("createDate", storeOrderVo.getCreatedAt().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
httpData.add("expireTime", storeOrderVo.getPayCountdownMinute().toString());
httpData.add("payType", storeOrderVo.getPayType());
httpData.add("deviceFrom", param.getDeviceFrom());
if (param.getDeviceFrom().equals("js") || param.getDeviceFrom().equals("applet")) {
httpData.add("openId", param.getOpenId());
}
if (param.getPayType().equals("alipay") && param.getDeviceFrom().equals("wap")) {
httpData.add("showUrl", param.getShowUrl() + storeOrderVo.getOrderId());
httpData.add("returnUrl", param.getReturnUrl() + storeOrderVo.getOrderId());
}
if (param.getPayType().equals("douyinpay")) {
httpData.add("showUrl", param.getShowUrl() + storeOrderVo.getOrderId());
httpData.add("returnUrl", param.getReturnUrl() + storeOrderVo.getOrderId());
}
if (param.getPayType().equals("unionpay")) {
httpData.add("returnUrl", param.getReturnUrl() + storeOrderVo.getOrderId());
}
String returnData = HttpUtil.post(payUrl, httpData);
log.info("调用 DRAGON 结果 = " + returnData);
ResponseDto<GoblinPayInnerResultVo> dto = JsonUtils.fromJson(returnData, new TypeReference<ResponseDto<GoblinPayInnerResultVo>>() {
});
payInnerResultVo.setCode(dto.getData().getCode());
payInnerResultVo.setOrderCode(dto.getData().getOrderCode());
payInnerResultVo.setPayData(dto.getData().getPayData());
payInnerResultVo.setOrderId(storeOrderVo.getOrderId());
payInnerResultVo.setPayType(storeOrderVo.getPayType());
payInnerResultVo.setPrice(storeOrderVo.getPriceActual());
storeOrderVo.setPayCode(payInnerResultVo.getCode());
payInnerResultVo.setShowUrl(param.getShowUrl() + storeOrderVo.getOrderId());
payInnerResultVo.setReturnUrl(param.getReturnUrl() + storeOrderVo.getOrderId());
//mysql
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.GOBLIN_ORDER_AGAIN.getKey(),
SqlMapping.get("goblin.store.market.status", param.getPayType(), param.getDeviceFrom(), payInnerResultVo.getCode(), param.getOrderId(), now, now));
log.info(UserPathDto.setData("再次支付[新支付方式]", param, payInnerResultVo));
}
return ResponseDto.success(payInnerResultVo);
} }
@Override @Override
......
package com.liquidnet.service.goblin.util; package com.liquidnet.service.goblin.util;
import com.liquidnet.common.cache.redis.util.RedisUtil; import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.DateUtil; import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.RandomUtil;
import com.liquidnet.service.goblin.constant.GoblinRedisConst; import com.liquidnet.service.goblin.constant.GoblinRedisConst;
import com.liquidnet.service.goblin.dto.vo.*; import com.liquidnet.service.goblin.dto.vo.*;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -400,4 +402,77 @@ public class GoblinRedisUtils { ...@@ -400,4 +402,77 @@ public class GoblinRedisUtils {
return (int) redisUtil.decr(redisKey, number); return (int) redisUtil.decr(redisKey, number);
} }
// 赋值 订单相关vo
public void setGoblinOrder(String orderId,GoblinStoreOrderVo vo){
String redisKey = GoblinRedisConst.REDIS_GOBLIN_ORDER.concat(orderId);
redisUtil.set(redisKey,vo);
}
// 赋值 订单相关vo
public GoblinStoreOrderVo getGoblinOrder(String orderId){
String redisKey = GoblinRedisConst.REDIS_GOBLIN_ORDER.concat(orderId);
Object obj = redisUtil.get(redisKey);
if(obj==null){
return null;
}else{
return (GoblinStoreOrderVo) obj;
}
}
// 获取 未支付订单id列表
public List<String> getUnPayOrder(){
int randomKey=RandomUtil.getRandomInt(0,100);
String redisKey = GoblinRedisConst.REDIS_GOBLIN_ORDER_UN_PAY.concat(randomKey+"");
Object obj = redisUtil.get(redisKey);
if(obj==null){
return CollectionUtil.arrayListString();
}else{
return (List<String>) obj;
}
}
// 添加 未支付订单id列表
public void addUnPayOrder(String orderId){
int randomKey=RandomUtil.getRandomInt(0,100);
String redisKey = GoblinRedisConst.REDIS_GOBLIN_ORDER_UN_PAY.concat(randomKey+"");
List<String> list = getUnPayOrder();
list.add(orderId);
redisUtil.set(redisKey,list);
}
// 删除 未支付订单id列表
public void removeGoblinOrder(String randomKey ,String orderId){
String redisKey = GoblinRedisConst.REDIS_GOBLIN_ORDER_UN_PAY.concat(randomKey+"");
List<String> list = getUnPayOrder();
list.remove(orderId);
redisUtil.set(redisKey,list);
}
// 获取 订单id列表
public List<String> getOrderList(String uid){
String redisKey = GoblinRedisConst.REDIS_GOBLIN_ORDER_LIST.concat(uid);
Object obj = redisUtil.get(redisKey);
if(obj==null){
return CollectionUtil.arrayListString();
}else{
return (List<String>) obj;
}
}
// 添加 订单id列表
public void addOrderList(String uid,String orderId){
String redisKey = GoblinRedisConst.REDIS_GOBLIN_ORDER_LIST.concat(uid);
List<String> list = getOrderList(uid);
list.add(orderId);
redisUtil.set(redisKey,list);
}
// 删除 订单id列表
public void removeOrderList(String uid ,String orderId){
String redisKey = GoblinRedisConst.REDIS_GOBLIN_ORDER_LIST.concat(uid);
List<String> list = getOrderList(uid);
list.remove(orderId);
redisUtil.set(redisKey,list);
}
} }
#---- 商铺活动
goblin.store.market.insert=INSERT INTO goblin_store_marketing (`store_market_id`,`name`,`type`,`status`,`store_id`,`start_time`,`end_time`,`del_flag`,`is_pre`,`pre_time`,`created_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?) goblin.store.market.insert=INSERT INTO goblin_store_marketing (`store_market_id`,`name`,`type`,`status`,`store_id`,`start_time`,`end_time`,`del_flag`,`is_pre`,`pre_time`,`created_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?)
goblin.store.market.status=UPDATE goblin_store_marketing SET status=? , del_flag=? WHERE store_market_id =? and store_id =? goblin.store.market.status=UPDATE goblin_store_marketing SET status=? , del_flag=? WHERE store_market_id =? and store_id =?
goblin.store.market.update=UPDATE goblin_store_marketing SET name=?,type=?,status=?,store_id=?,describes=?,start_time=?,end_time=?,del_flag=?,is_pre=?,pre_time=?,updated_at=? WHERE store_market_id =? and store_id =? goblin.store.market.update=UPDATE goblin_store_marketing SET name=?,type=?,status=?,store_id=?,describes=?,start_time=?,end_time=?,del_flag=?,is_pre=?,pre_time=?,updated_at=? WHERE store_market_id =? and store_id =?
goblin.store.market.insertRelation=INSERT INTO goblin_store_market_purchasing (`purchase_id`,`store_market_id`,`spu_id`,`sku_id`,`store_id`,`price_marketing`,`stock_marketing`,`buy_factor`,`buy_roster`,`buy_limit`,`del_flag`,`created_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) goblin.store.market.insertRelation=INSERT INTO goblin_store_market_purchasing (`purchase_id`,`store_market_id`,`spu_id`,`sku_id`,`store_id`,`price_marketing`,`stock_marketing`,`buy_factor`,`buy_roster`,`buy_limit`,`del_flag`,`created_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)
goblin.store.market.updateRelation=UPDATE goblin_store_market_purchasing SET price_marketing=? ,stock_marketing=? , buy_factor=?,buy_roster=?,buy_limit=?,updated_at=? WHERE store_market_id =? and store_id =? goblin.store.market.updateRelation=UPDATE goblin_store_market_purchasing SET price_marketing=? ,stock_marketing=? , buy_factor=?,buy_roster=?,buy_limit=?,updated_at=? WHERE store_market_id =? and store_id =?
goblin.store.market.delSpuRelation=UPDATE goblin_store_market_purchasing SET del_flag = ?,updated_at = ? WHERE store_market_id =? and store_id =? and spu_id=? goblin.store.market.delSpuRelation=UPDATE goblin_store_market_purchasing SET del_flag = ?,updated_at = ? WHERE store_market_id =? and store_id =? and spu_id=?
#---- 平台活动
goblin.self.market.insertRelation=INSERT INTO goblin_marketing_zhengzai (`zhengzai_id`,`self_market_id`,`spu_id`,`sku_id`,`store_id`,`price_marketing`,`stock_marketing`,`buy_factor`,`buy_roster`,`buy_limit`,`del_flag`,`created_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) goblin.self.market.insertRelation=INSERT INTO goblin_marketing_zhengzai (`zhengzai_id`,`self_market_id`,`spu_id`,`sku_id`,`store_id`,`price_marketing`,`stock_marketing`,`buy_factor`,`buy_roster`,`buy_limit`,`del_flag`,`created_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)
goblin.self.market.updateRelation=UPDATE goblin_marketing_zhengzai SET price_marketing=? ,stock_marketing=? , buy_factor=?,buy_roster=?,buy_limit=?,updated_at=? WHERE self_market_id =? and store_id =? goblin.self.market.updateRelation=UPDATE goblin_marketing_zhengzai SET price_marketing=? ,stock_marketing=? , buy_factor=?,buy_roster=?,buy_limit=?,updated_at=? WHERE self_market_id =? and store_id =?
goblin.self.market.delSpuRelation=UPDATE goblin_marketing_zhengzai SET del_flag = ?,updated_at = ? WHERE self_market_id =? and store_id =? and spu_id=? goblin.self.market.delSpuRelation=UPDATE goblin_marketing_zhengzai SET del_flag = ?,updated_at = ? WHERE self_market_id =? and store_id =? and spu_id=?
\ No newline at end of file #---- 订单创建&支付
goblin.order.create.order_insert=INSERT INTO goblin_store_order (`master_order_code`,`order_id`,`store_id`,`order_code`,`user_id`,`user_name`,`user_mobile`,`price_total`,`price_actual`,`price_refund`,`price_express`,`price_coupon`,`price_voucher`,`status`,`ucoupon_id`,`pay_type`,`device_from`,`source`,`version`,`is_member`,`order_type`,`write_off_code`,`pay_countdown_minute`,`ip_address`,`pay_code`,`created_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
goblin.order.create.attr_insert=INSERT INTO goblin_order_attr (`order_attr_id`,`order_id`,`express_contacts`,`express_address`,`express_address_detail`,`express_phone`,`express_type`,`created_at`) VALUES (?,?,?,?,?,?,?,?)
goblin.order.create.sku_insert=INSERT INTO goblin_order_sku (`order_sku_id`,`order_id`,`spu_id`,`sku_id`,`num`,`sku_price`,`sku_price_actual`,`sku_name`,`sku_no`,`sku_image`,`sku_specs`,`price_voucher`,`created_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)
#---- 再次支付
goblin_order.pay.again = UPDATE goblin_store_order SET pay_type = ? ,device_from = ? ,pay_code = ? WHERE order_id = ? and (updated_at <= ? or created_at = ? or updated_at is null)
#---- 订单关闭
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment