Bladeren bron

订单提交,代码完善

wangzhijun 2 dagen geleden
bovenliggende
commit
7f71909d03

+ 3 - 0
nightFragrance-massage/src/main/java/com/ylx/order/domain/TOrder.java

@@ -186,4 +186,7 @@ public class TOrder extends BaseEntity {
 
     @ApiModelProperty("派单情况:0=未派单 1=已派单")
     private Integer dispatchedStatus;
+
+    @ApiModelProperty("优惠券id")
+    private String couponId;
 }

+ 2 - 2
nightFragrance-massage/src/main/java/com/ylx/order/domain/dto/OrderSubmitDTO.java

@@ -33,8 +33,8 @@ public class OrderSubmitDTO implements Serializable {
     @ApiModelProperty("联系人地址ID")
     private Long addressId;
 
-    @ApiModelProperty("优惠券抵扣金额")
-    private BigDecimal couponDiscount;
+    @ApiModelProperty("优惠券id")
+    private String couponId;
 
     @ApiModelProperty("交通费")
     private BigDecimal trafficFee;

+ 62 - 4
nightFragrance-massage/src/main/java/com/ylx/order/service/impl/TOrderServiceImpl.java

@@ -17,18 +17,24 @@ import com.ylx.massage.domain.TWxUser;
 import com.ylx.massage.domain.vo.HomeBlock;
 import com.ylx.massage.domain.vo.OrderVerificationVo;
 import com.ylx.massage.domain.vo.TechnicianAvailabilityVo;
+import com.ylx.massage.service.CouponService;
 import com.ylx.massage.service.IMaTechnicianService;
 import com.ylx.massage.service.TAddressService;
+import com.ylx.massage.service.TWxUserService;
 import com.ylx.massage.utils.OrderNumberGenerator;
 import com.ylx.order.domain.TOrder;
 import com.ylx.order.domain.dto.OrderDateQueryDTO;
 import com.ylx.order.domain.dto.OrderSubmitDTO;
 import com.ylx.order.domain.vo.OrderDateQueryVo;
 import com.ylx.order.enums.OrderStatusEnum;
+import com.ylx.order.enums.PaymentMethodEnum;
 import com.ylx.order.mapper.TOrderMapper;
 import com.ylx.order.service.TOrderService;
 import com.ylx.project.domain.Project;
 import com.ylx.project.service.ProjectService;
+import com.ylx.shopingfundsdetail.domain.vo.ShoppingFundsDetailAddDto;
+import com.ylx.shopingfundsdetail.enums.ShoppingFundsExpenseTypeEnum;
+import com.ylx.shopingfundsdetail.service.ShoppingFundsDetailService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
@@ -60,6 +66,12 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
     private IMaTechnicianService maTechnicianService;
     @Resource
     private OrderNumberGenerator orderNumberGenerator;
+    @Resource
+    private TWxUserService wxUserService;
+    @Resource
+    private ShoppingFundsDetailService shoppingFundsDetailService;
+    @Resource
+    private CouponService couponService;
 
     @Override
     public TOrder addOrder(TOrder order) {
@@ -205,7 +217,9 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
             throw new ServiceException("用户未登录");
         }
 
-        order.setUserId(Long.parseLong(wxLoginUser.getId()));
+        Long userId = Long.parseLong(wxLoginUser.getId());
+
+        order.setUserId(userId);
 
         // 2. 获取项目信息
         Project project = this.projectService.getById(dto.getProjectId());
@@ -253,9 +267,12 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         // 5. 设置价格信息
         LocalDateTime appointmentStartTime = dto.getAppointmentStartTime();
 
-        Integer paymentMethod = dto.getPaymentMethod();
         // 优惠券优惠
-        BigDecimal couponDiscount = Optional.ofNullable(dto.getCouponDiscount()).orElse(BigDecimal.ZERO);
+        BigDecimal couponDiscount = BigDecimal.ZERO;
+        order.setCouponId(dto.getCouponId());
+        if (ObjectUtil.isNotNull(dto.getCouponId())) {
+            couponDiscount = this.couponService.calculateDiscountAmount(dto.getCouponId(), wxLoginUser.getCOpenid(), project.getPrice());
+        }
         // 车费
         BigDecimal trafficFee = Optional.ofNullable(dto.getTrafficFee()).orElse(BigDecimal.ZERO);
         // 商品原价
@@ -268,7 +285,6 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         order.setCouponDiscount(couponDiscount);
         order.setTrafficFee(trafficFee);
         order.setFinalAmount(finalAmount);
-        order.setPaymentMethod(paymentMethod);
 
         order.setCreateTime(DateUtils.getNowDate());
         order.setAppointmentStartTime(appointmentStartTime);
@@ -297,14 +313,53 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
             order.setVirtualLatitude(new BigDecimal(addr.getLatitude()));
         });
 
+        // 7. 判断支付方式
+        Integer paymentMethod = dto.getPaymentMethod();
+        order.setPaymentMethod(paymentMethod);
+        // 余额支付
+        if (ObjectUtil.equals(PaymentMethodEnum.BALANCE.getCode(), paymentMethod)) {
+            order.setStatus(OrderStatusEnum.PENDING_DISPATCH.getCode());
+            order.setPaidTime(LocalDateTime.now());
+        } else {
+            order.setStatus(OrderStatusEnum.PENDING_PAYMENT.getCode());
+        }
+
         boolean saveResult = this.save(order);
         if (!saveResult) {
             throw new ServiceException("添加订单失败");
         }
+
+        // 8. 处理用户余额数据
+        if (ObjectUtil.equals(PaymentMethodEnum.BALANCE.getCode(), paymentMethod)) {
+
+            // 处理用户余额
+            TWxUser user = this.wxUserService.getById(userId);
+            BigDecimal newBalance = user.getdBalance().add(finalAmount);
+            this.wxUserService.lambdaUpdate()
+                    .set(TWxUser::getdBalance, newBalance)
+                    .eq(TWxUser::getId, user.getId())
+                    .update();
+
+            // 记录购物金明细
+            ShoppingFundsDetailAddDto shoppingFundsDetailAddDto = new ShoppingFundsDetailAddDto();
+            shoppingFundsDetailAddDto.setUserId(userId.toString());
+            shoppingFundsDetailAddDto.setAmount(finalAmount);
+            shoppingFundsDetailAddDto.setOrderNo(orderNo);
+            shoppingFundsDetailAddDto.setExpenseType(ShoppingFundsExpenseTypeEnum.CONSUMPTION.getCode());
+            shoppingFundsDetailAddDto.setBalance(newBalance);
+            shoppingFundsDetailService.addShoppingFundsDetail(shoppingFundsDetailAddDto);
+
+        }
+        // 9. 判断有没有使用优惠券
+        if (couponDiscount.compareTo(BigDecimal.ZERO) > 0) {
+            this.couponService.useCoupon(dto.getCouponId(), wxLoginUser.getCOpenid(), order.getId(), 1);
+        }
+
     }
 
     /**
      * 用户端订单列表
+     *
      * @param dto
      * @return
      */
@@ -351,6 +406,7 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
 
     /**
      * 用户端逻辑删除
+     *
      * @param orderId
      */
     @Override
@@ -394,12 +450,14 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
 
         return vo;
     }
+
     /**
      * 订单状态码 -> 中文描述
      */
     private String getOrderStatusName(Integer status) {
         return OrderStatusEnum.getInfoByCode(status);
     }
+
     /**
      * 拼接服务时间字符串,例如 “2026-06-08 14:30 (90分钟)”
      */

+ 0 - 1
nightFragrance-massage/src/main/java/com/ylx/shopingfundsdetail/domain/vo/ShoppingFundsDetailAddDto.java

@@ -32,7 +32,6 @@ public class ShoppingFundsDetailAddDto {
     /**
      * 购物卡id
      */
-    @NotNull(message = "购物卡id不能为空")
     @ApiModelProperty("购物卡id")
     private Long giftCardId;
     /**