瀏覽代碼

订单计算充值权益优惠

skyline 2 年之前
父節點
當前提交
735e617d42

+ 53 - 0
entity/src/main/java/com/kym/entity/miniapp/OrderRechargeRights.java

@@ -0,0 +1,53 @@
+package com.kym.entity.miniapp;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.kym.entity.BaseEntity;
+import java.io.Serializable;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 订单充值权益表
+ * </p>
+ *
+ * @author skyline
+ * @since 2023-10-19
+ */
+@Getter
+@Setter
+@TableName("t_order_recharge_rights")
+public class OrderRechargeRights extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 充值权益id
+     */
+    private Long rightsId;
+
+    /**
+     * 主活动id
+     */
+    private Long activityId;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 充电订单号
+     */
+    private String startChargeSeq;
+
+    /**
+     * 折扣:100代表无折扣,75代表75折
+     */
+    private Integer discount;
+
+    /**
+     * 总优惠金额(分)
+     */
+    private Integer discountAmount;
+}

+ 16 - 0
mapper/src/main/java/com/kym/mapper/miniapp/OrderRechargeRightsMapper.java

@@ -0,0 +1,16 @@
+package com.kym.mapper.miniapp;
+
+import com.kym.entity.miniapp.OrderRechargeRights;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 订单充值权益表 Mapper 接口
+ * </p>
+ *
+ * @author skyline
+ * @since 2023-10-19
+ */
+public interface OrderRechargeRightsMapper extends BaseMapper<OrderRechargeRights> {
+
+}

+ 20 - 0
mapper/src/main/resources/mappers/miniapp/OrderRechargeRightsMapper.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.kym.mapper.miniapp.OrderRechargeRightsMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.kym.entity.miniapp.OrderRechargeRights">
+        <result column="rights_id" property="rightsId" />
+        <result column="activity_id" property="activityId" />
+        <result column="user_id" property="userId" />
+        <result column="start_charge_seq" property="startChargeSeq" />
+        <result column="discount" property="discount" />
+        <result column="discount_amount" property="discountAmount" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id,rights_id, activity_id, user_id, start_charge_seq, discount, discount_amount,create_time,update_time
+    </sql>
+
+</mapper>

+ 18 - 0
miniapp/src/main/java/com/kym/miniapp/controller/OrderRechargeRightsController.java

@@ -0,0 +1,18 @@
+package com.kym.miniapp.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 订单充值权益表 前端控制器
+ * </p>
+ *
+ * @author skyline
+ * @since 2023-10-19
+ */
+@RestController
+@RequestMapping("/order-recharge-rights")
+public class OrderRechargeRightsController {
+
+}

+ 38 - 9
service/src/main/java/com/kym/service/enplus/impl/EnNotifyServiceImpl.java

@@ -10,6 +10,7 @@ import com.kym.entity.admin.MonitorLog;
 import com.kym.entity.common.RedisKeys;
 import com.kym.entity.enplus.EnConnectorStatusInfo;
 import com.kym.entity.miniapp.ChargeOrder;
+import com.kym.entity.miniapp.OrderRechargeRights;
 import com.kym.entity.miniapp.WalletDetail;
 import com.kym.service.admin.EquipmentInfoService;
 import com.kym.service.admin.MonitorLogService;
@@ -17,6 +18,7 @@ import com.kym.service.enplus.EnNotifyService;
 import com.kym.service.enplus.EnPlusService;
 import com.kym.service.miniapp.AccountService;
 import com.kym.service.miniapp.ChargeOrderService;
+import com.kym.service.miniapp.OrderRechargeRightsService;
 import com.kym.service.miniapp.WalletDetailService;
 import com.kym.service.utils.KymCache;
 import org.slf4j.Logger;
@@ -51,6 +53,8 @@ public class EnNotifyServiceImpl implements EnNotifyService {
 
     private final EquipmentInfoService equipmentInfoService;
 
+    private final OrderRechargeRightsService orderRechargeRightsService;
+
     private final KymCache kymCache;
 
     private final RedisDBChangeUtil redisDBChangeUtil;
@@ -61,13 +65,14 @@ public class EnNotifyServiceImpl implements EnNotifyService {
     public EnNotifyServiceImpl(EnPlusService enPlusService, ChargeOrderService chargeOrderService,
                                AccountService accountService, WalletDetailService walletDetailService,
                                MonitorLogService monitorLogService, EquipmentInfoService equipmentInfoService,
-                               KymCache kymCache, RedisDBChangeUtil redisDBChangeUtil) {
+                               OrderRechargeRightsService orderRechargeRightsService, KymCache kymCache, RedisDBChangeUtil redisDBChangeUtil) {
         this.enPlusService = enPlusService;
         this.chargeOrderService = chargeOrderService;
         this.accountService = accountService;
         this.walletDetailService = walletDetailService;
         this.monitorLogService = monitorLogService;
         this.equipmentInfoService = equipmentInfoService;
+        this.orderRechargeRightsService = orderRechargeRightsService;
         this.kymCache = kymCache;
         this.redisDBChangeUtil = redisDBChangeUtil;
     }
@@ -250,14 +255,37 @@ public class EnNotifyServiceImpl implements EnNotifyService {
         // EN+平台推送重试策略是当天失败第二天再推送一次,仅此一次。EN+订单页面可以多次手动推送,所以这里要先判断订单状态,避免重复处理。
         if (chargeOrder.getChargeStatus() != ChargeOrder.CHARGE_STATUS_已结束 || chargeOrder.getOrderStatus() != ChargeOrder.ORDER_STATUS_成功) {
             // 更新订单信息
-            chargeOrder.setEndTime(LocalDateTime.parse(data.getString("EndTime"), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
-            chargeOrder.setTotalPower(data.getDoubleValue("TotalPower"));
-            chargeOrder.setElecMoney((int) Math.round(data.getDouble("TotalElecMoney") * 100));
-            chargeOrder.setServiceMoney((int) Math.round(data.getDoubleValue("TotalSeviceMoney") * 100)); // 这里文档service单词错误,按文档填写
-            chargeOrder.setTotalMoney((int) Math.round(data.getDoubleValue("TotalMoney") * 100));
-            chargeOrder.setStopReason(data.getIntValue("StopReason"));
-            chargeOrder.setSumPeriod(data.getIntValue("SumPeriod"));
-            chargeOrder.setChargeDetail(data.getString("ChargeDetails"));
+            chargeOrder
+                    .setEndTime(LocalDateTime.parse(data.getString("EndTime"), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")))
+                    .setTotalPower(data.getDoubleValue("TotalPower"))
+                    .setElecMoney((int) Math.round(data.getDouble("TotalElecMoney") * 100))
+                    .setServiceMoney((int) Math.round(data.getDoubleValue("TotalSeviceMoney") * 100)) // 这里文档service单词错误,按文档填写
+                    .setTotalMoney((int) Math.round(data.getDoubleValue("TotalMoney") * 100))
+                    .setStopReason(data.getIntValue("StopReason"))
+                    .setSumPeriod(data.getIntValue("SumPeriod"))
+                    .setChargeDetail(data.getString("ChargeDetails"));
+
+            // 获取订单权益,计算订单优惠金额,实付金额,服务费优惠金额
+            var orderRechargeRights = orderRechargeRightsService.lambdaQuery()
+                    .eq(OrderRechargeRights::getStartChargeSeq, chargeOrder.getStartChargeSeq())
+                    .eq(OrderRechargeRights::getUserId, chargeOrder.getUserId())
+                    .one();
+            if (orderRechargeRights != null) {
+                // 获取折扣,计算优惠
+                var discount = orderRechargeRights.getDiscount();
+                var serviceMoneyDiscount = chargeOrder.getServiceMoney() * (discount / 100); // 只保留到分,分以下不进行四舍五入
+                chargeOrder
+                        .setPayAmount(chargeOrder.getTotalMoney() - serviceMoneyDiscount)
+                        .setDiscountAmount(serviceMoneyDiscount)
+                        .setServiceMoney(serviceMoneyDiscount);
+
+                // 更新订单权益的最终优惠金额
+                orderRechargeRights.setDiscountAmount(serviceMoneyDiscount);
+                orderRechargeRightsService.updateById(orderRechargeRights);
+            }
+
+            // 优惠券(将来如果有多种活动形式,进行链式处理)
+
             // 订单成功
             chargeOrder.setOrderStatus(ChargeOrder.ORDER_STATUS_成功);
             // 充电结束
@@ -280,6 +308,7 @@ public class EnNotifyServiceImpl implements EnNotifyService {
             // 已确认
             walletDetail.setStatus(WalletDetail.STATUS_已确认);
             walletDetailService.save(walletDetail);
+
         }
         return """
                 {

+ 18 - 0
service/src/main/java/com/kym/service/miniapp/OrderRechargeRightsService.java

@@ -0,0 +1,18 @@
+package com.kym.service.miniapp;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.kym.entity.miniapp.OrderRechargeRights;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 订单充值权益表 服务类
+ * </p>
+ *
+ * @author skyline
+ * @since 2023-10-19
+ */
+@DS("db-miniapp")
+public interface OrderRechargeRightsService extends IService<OrderRechargeRights> {
+
+}

+ 1 - 1
service/src/main/java/com/kym/service/miniapp/impl/ChargeServiceImpl.java

@@ -178,7 +178,7 @@ public class ChargeServiceImpl implements ChargeService {
             var flag = delayService.addToDelayQueue(order.setStartTime(startTime));
             if (flag) {
                 // 修改设备状态为预约中
-                // TODO: 2023-10-09 切换数据源 
+                // 切换数据源
                 updateEquipmentStatus(connectorId);
                 LOGGER.info("预约充电成功,用户:{},订单号:{}", userId, order.getStartChargeSeq());
                 return Map.of("startChargeSeq", order.getStartChargeSeq());

+ 20 - 0
service/src/main/java/com/kym/service/miniapp/impl/OrderRechargeRightsServiceImpl.java

@@ -0,0 +1,20 @@
+package com.kym.service.miniapp.impl;
+
+import com.kym.entity.miniapp.OrderRechargeRights;
+import com.kym.mapper.miniapp.OrderRechargeRightsMapper;
+import com.kym.service.miniapp.OrderRechargeRightsService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 订单充值权益表 服务实现类
+ * </p>
+ *
+ * @author skyline
+ * @since 2023-10-19
+ */
+@Service
+public class OrderRechargeRightsServiceImpl extends ServiceImpl<OrderRechargeRightsMapper, OrderRechargeRights> implements OrderRechargeRightsService {
+
+}