优化商品下单业务、水票解冻业务
This commit is contained in:
@@ -4,18 +4,19 @@ import com.gxwebsoft.common.core.annotation.IgnoreTenant;
|
|||||||
import com.gxwebsoft.glt.service.GltUserTicketAutoReleaseService;
|
import com.gxwebsoft.glt.service.GltUserTicketAutoReleaseService;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||||
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.scheduling.annotation.Scheduled;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 冻结水票自动释放任务:
|
* 冻结水票自动释放任务:每月1日凌晨1-3点每2分钟执行一次任务
|
||||||
* - 扫描 glt_user_ticket_release 中到期且待释放(status=0)的记录
|
* - 扫描 glt_user_ticket_release 中本月到期且待释放(status=0)的记录
|
||||||
* - 释放成功:frozen -> available,并将 release.status 置为 1
|
* - 释放成功:
|
||||||
|
* 1.修改水票释放任务为已释放状态 glt_user_ticket_release
|
||||||
|
* 2.修改个人水票中:可用数量、冻结数量、已释放数量 glt_user_ticket
|
||||||
|
* 3.同步生产水票释放记录数据 glt_user_ticket_log
|
||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Component
|
@Component
|
||||||
|
|||||||
@@ -5,42 +5,41 @@ import cn.hutool.core.util.NumberUtil;
|
|||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.gxwebsoft.common.core.config.ConfigProperties;
|
|
||||||
import com.gxwebsoft.common.core.config.CertificateProperties;
|
import com.gxwebsoft.common.core.config.CertificateProperties;
|
||||||
import com.gxwebsoft.common.core.utils.RedisUtil;
|
import com.gxwebsoft.common.core.config.ConfigProperties;
|
||||||
import com.gxwebsoft.common.core.utils.CertificateLoader;
|
import com.gxwebsoft.common.core.utils.CertificateLoader;
|
||||||
|
import com.gxwebsoft.common.core.utils.RedisUtil;
|
||||||
import com.gxwebsoft.common.core.utils.WechatCertAutoConfig;
|
import com.gxwebsoft.common.core.utils.WechatCertAutoConfig;
|
||||||
import com.gxwebsoft.common.core.utils.WechatPayConfigValidator;
|
import com.gxwebsoft.common.core.utils.WechatPayConfigValidator;
|
||||||
|
import com.gxwebsoft.common.core.web.ApiResult;
|
||||||
import com.gxwebsoft.common.core.web.BaseController;
|
import com.gxwebsoft.common.core.web.BaseController;
|
||||||
|
import com.gxwebsoft.common.core.web.BatchParam;
|
||||||
|
import com.gxwebsoft.common.core.web.PageResult;
|
||||||
import com.gxwebsoft.common.system.entity.Payment;
|
import com.gxwebsoft.common.system.entity.Payment;
|
||||||
|
import com.gxwebsoft.common.system.entity.User;
|
||||||
import com.gxwebsoft.glt.service.GltTicketIssueService;
|
import com.gxwebsoft.glt.service.GltTicketIssueService;
|
||||||
import com.gxwebsoft.shop.dto.*;
|
|
||||||
import com.gxwebsoft.shop.entity.ShopOrderDelivery;
|
|
||||||
import com.gxwebsoft.shop.entity.ShopUserAddress;
|
|
||||||
import com.gxwebsoft.shop.service.*;
|
|
||||||
import com.gxwebsoft.glt.service.GltTicketRevokeService;
|
import com.gxwebsoft.glt.service.GltTicketRevokeService;
|
||||||
import com.gxwebsoft.shop.service.impl.KuaiDi100Impl;
|
|
||||||
import com.gxwebsoft.shop.task.OrderAutoCancelTask;
|
|
||||||
import com.gxwebsoft.shop.entity.ShopOrder;
|
|
||||||
import com.gxwebsoft.shop.param.ShopOrderParam;
|
|
||||||
import com.gxwebsoft.payment.service.PaymentService;
|
|
||||||
import com.gxwebsoft.payment.dto.PaymentResponse;
|
import com.gxwebsoft.payment.dto.PaymentResponse;
|
||||||
import com.gxwebsoft.payment.enums.PaymentType;
|
import com.gxwebsoft.payment.enums.PaymentType;
|
||||||
import com.gxwebsoft.common.core.web.ApiResult;
|
import com.gxwebsoft.payment.service.PaymentService;
|
||||||
import com.gxwebsoft.common.core.web.PageResult;
|
import com.gxwebsoft.shop.dto.*;
|
||||||
import com.gxwebsoft.common.core.web.BatchParam;
|
import com.gxwebsoft.shop.entity.ShopOrder;
|
||||||
import com.gxwebsoft.common.system.entity.User;
|
import com.gxwebsoft.shop.entity.ShopOrderDelivery;
|
||||||
|
import com.gxwebsoft.shop.entity.ShopUserAddress;
|
||||||
|
import com.gxwebsoft.shop.param.ShopOrderParam;
|
||||||
|
import com.gxwebsoft.shop.service.*;
|
||||||
|
import com.gxwebsoft.shop.service.impl.KuaiDi100Impl;
|
||||||
|
import com.gxwebsoft.shop.task.OrderAutoCancelTask;
|
||||||
|
import com.wechat.pay.java.core.RSAAutoCertificateConfig;
|
||||||
import com.wechat.pay.java.core.notification.NotificationConfig;
|
import com.wechat.pay.java.core.notification.NotificationConfig;
|
||||||
import com.wechat.pay.java.core.notification.NotificationParser;
|
import com.wechat.pay.java.core.notification.NotificationParser;
|
||||||
import com.wechat.pay.java.core.notification.RequestParam;
|
import com.wechat.pay.java.core.notification.RequestParam;
|
||||||
import com.wechat.pay.java.core.RSAAutoCertificateConfig;
|
|
||||||
import com.wechat.pay.java.service.payments.model.Transaction;
|
import com.wechat.pay.java.service.payments.model.Transaction;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springdoc.api.annotations.ParameterObject;
|
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.security.core.Authentication;
|
import org.springframework.security.core.Authentication;
|
||||||
|
|||||||
@@ -86,41 +86,38 @@ public class OrderBusinessService {
|
|||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public Map<String, String> createOrder(OrderCreateRequest request, User loginUser) {
|
public Map<String, String> createOrder(OrderCreateRequest request, User loginUser) {
|
||||||
|
|
||||||
// 1. 参数校验
|
//1. 参数校验
|
||||||
validateOrderRequest(request, loginUser);
|
validateOrderRequest(request, loginUser);
|
||||||
|
|
||||||
// 2. 构建订单对象
|
//2. 构建订单对象
|
||||||
ShopOrder shopOrder = buildShopOrder(request, loginUser);
|
ShopOrder shopOrder = buildShopOrder(request, loginUser);
|
||||||
|
|
||||||
// 3. 处理收货地址信息
|
//3. 处理收货地址信息
|
||||||
processDeliveryAddress(shopOrder, request, loginUser);
|
processDeliveryAddress(shopOrder, request, loginUser);
|
||||||
|
|
||||||
// 3.1 下单时校验配送范围(电子围栏)
|
//4. 下单时校验配送范围(电子围栏)
|
||||||
validateDeliveryFenceIfNeeded(shopOrder, loginUser);
|
validateDeliveryFenceIfNeeded(shopOrder, loginUser);
|
||||||
|
|
||||||
// 4. 应用业务规则
|
//5.如果商品仅有一个则更新formId
|
||||||
applyBusinessRules(shopOrder, loginUser);
|
|
||||||
|
|
||||||
// 如果商品仅有一个则更新formId
|
|
||||||
if (request.getGoodsItems().size() == 1) {
|
if (request.getGoodsItems().size() == 1) {
|
||||||
shopOrder.setFormId(request.getGoodsItems().get(0).getGoodsId());
|
shopOrder.setFormId(request.getGoodsItems().get(0).getGoodsId());
|
||||||
}
|
}
|
||||||
|
|
||||||
// 5. 保存订单
|
//6.保存订单
|
||||||
boolean saved = shopOrderService.save(shopOrder);
|
boolean saved = shopOrderService.save(shopOrder);
|
||||||
if (!saved) {
|
if (!saved) {
|
||||||
throw new BusinessException("订单保存失败");
|
throw new BusinessException("订单保存失败");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 6. 保存订单商品
|
//7.保存订单商品
|
||||||
saveOrderGoods(request, shopOrder);
|
saveOrderGoods(request, shopOrder);
|
||||||
|
|
||||||
// 7. 标记优惠券为已使用
|
//8.标记优惠券为已使用
|
||||||
if (shopOrder.getCouponId() != null && shopOrder.getCouponId() > 0) {
|
if (shopOrder.getCouponId() != null && shopOrder.getCouponId() > 0) {
|
||||||
markCouponAsUsed(shopOrder.getCouponId(), shopOrder.getOrderId());
|
markCouponAsUsed(shopOrder.getCouponId(), shopOrder.getOrderId());
|
||||||
}
|
}
|
||||||
|
|
||||||
// 8. 创建微信支付订单
|
//9.创建微信支付订单
|
||||||
try {
|
try {
|
||||||
return shopOrderService.createWxOrder(shopOrder);
|
return shopOrderService.createWxOrder(shopOrder);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|||||||
Reference in New Issue
Block a user