Procházet zdrojové kódy

存在文化扫码立减金功能提交

yjwang před 1 měsícem
rodič
revize
dc4da8b1b6

+ 2 - 1
fs-service/src/main/java/com/fs/hisStore/config/StoreConfig.java

@@ -25,5 +25,6 @@ public class StoreConfig implements Serializable {
     private Integer createSalesOrderType; // 订单改价方式 1 商品改价 2总价改价
     private Boolean isBrushOrders;//是否开启刷单按钮
     private Boolean isWeChatShipping;//是否开启微信发货
-
+    private Boolean scanCodeDiscountEnabled;//是否开启扫码立减金
+    private BigDecimal scanCodeDiscountAmount;//扫码立减金额
 }

+ 10 - 0
fs-service/src/main/java/com/fs/hisStore/domain/FsStorePaymentScrm.java

@@ -101,5 +101,15 @@ public class FsStorePaymentScrm extends BaseEntity
     private BigDecimal shareMoney;
     private Integer isShare;
 
+    /**
+     * 扫码原支付金额
+     * **/
+    private BigDecimal originalAmount;
+    /**
+     * 扫码立减金额
+     * **/
+    private BigDecimal reductionAmount;
+
+
 
 }

+ 27 - 1
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStorePaymentScrmServiceImpl.java

@@ -39,6 +39,7 @@ import com.fs.his.domain.FsUserWx;
 import com.fs.his.service.IFsUserService;
 import com.fs.his.service.IFsUserWxService;
 import com.fs.his.utils.ConfigUtil;
+import com.fs.hisStore.config.StoreConfig;
 import com.fs.hisStore.enums.StatTypeEnum;
 import com.fs.hisStore.enums.SysConfigEnum;
 import com.fs.hisStore.param.*;
@@ -68,7 +69,6 @@ import com.github.binarywang.wxpay.exception.WxPayException;
 import com.github.binarywang.wxpay.service.TransferService;
 import com.github.binarywang.wxpay.service.WxPayService;
 import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
-import com.github.pagehelper.PageInfo;
 import me.chanjar.weixin.common.error.WxErrorException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -868,6 +868,20 @@ public class FsStorePaymentScrmServiceImpl implements IFsStorePaymentScrmService
         }
         storePayment.setStatus(0);
         storePayment.setPayCode(orderSn);
+        storePayment.setOriginalAmount(param.getPayMoney());
+
+        //验证扫码立减金是否开启
+        final String STORE_CONFIG_KEY = "store.config";
+        String jsonConfig = configService.selectConfigByKey(STORE_CONFIG_KEY);
+        StoreConfig storeConfig = JSONUtil.toBean(jsonConfig, StoreConfig.class);
+        if (isValidDiscountConfig(storeConfig)) {
+            //校验立减金是否大于当前支付金额
+            if(storeConfig.getScanCodeDiscountAmount().compareTo(param.getPayMoney()) < 0){
+                param.setPayMoney(param.getPayMoney().subtract(storeConfig.getScanCodeDiscountAmount()));
+                storePayment.setReductionAmount(storeConfig.getScanCodeDiscountAmount());
+            }
+        }
+
         storePayment.setPayMoney(param.getPayMoney());
         storePayment.setCreateTime(new Date());
         storePayment.setPayTypeCode("weixin");
@@ -985,4 +999,16 @@ public class FsStorePaymentScrmServiceImpl implements IFsStorePaymentScrmService
         }
         return paymentStatDetailsVos;
     }
+
+    /**
+     * 验证立减配置是否有效
+     * @param config 店铺配置对象
+     * @return 配置是否有效
+     */
+    private boolean isValidDiscountConfig(StoreConfig config) {
+        return config != null
+                && Boolean.TRUE.equals(config.getScanCodeDiscountEnabled())
+                && config.getScanCodeDiscountAmount() != null
+                && config.getScanCodeDiscountAmount().compareTo(BigDecimal.ZERO) > 0;
+    }
 }

+ 10 - 0
fs-service/src/main/java/com/fs/hisStore/vo/FsStoreScanPaymentStatDetailsVo.java

@@ -15,4 +15,14 @@ public class FsStoreScanPaymentStatDetailsVo implements Serializable {
 
     //支付金额
     private BigDecimal payMoney;
+
+    /**
+     * 扫码原支付金额
+     * **/
+    private BigDecimal originalAmount;
+
+    /**
+     * 扫码立减金额
+     * **/
+    private BigDecimal reductionAmount;
 }

+ 19 - 5
fs-service/src/main/resources/mapper/hisStore/FsStorePaymentScrmMapper.xml

@@ -88,6 +88,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="orderId != null">order_id,</if>
             <if test="isPayRemain != null">is_pay_remain,</if>
             <if test="payMode != null">pay_mode,</if>
+            <if test="originalAmount != null">original_amount,</if>
+            <if test="reductionAmount != null">reduction_amount,</if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="payCode != null">#{payCode},</if>
@@ -112,6 +114,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="orderId != null">#{orderId},</if>
             <if test="isPayRemain != null">#{isPayRemain},</if>
             <if test="payMode != null">#{payMode},</if>
+            <if test="originalAmount != null">#{originalAmount},</if>
+            <if test="reductionAmount != null">#{reductionAmount},</if>
         </trim>
     </insert>
 
@@ -140,6 +144,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="orderId != null">order_id = #{orderId},</if>
             <if test="isPayRemain != null">is_pay_remain = #{isPayRemain},</if>
             <if test="payMode != null">pay_mode = #{payMode},</if>
+            <if test="originalAmount != null">#{originalAmount},</if>
+            <if test="reductionAmount != null">#{reductionAmount},</if>
         </trim>
         where payment_id = #{paymentId}
     </update>
@@ -215,7 +221,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="getScanPaymentDayStatDetails" resultType="com.fs.hisStore.vo.FsStoreScanPaymentStatDetailsVo">
         SELECT
         pay_time,
-        pay_money
+        pay_money,
+        original_amount,
+        reduction_amount
         FROM
         fs_store_payment_scrm
         WHERE
@@ -249,8 +257,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <select id="getScanPaymentMonthStatPage" resultType="com.fs.hisStore.vo.FsStoreScanPaymentStatDetailsVo">
         SELECT
-        pay_time,
-        pay_money
+            pay_time,
+            pay_money,
+            original_amount,
+            reduction_amount
         FROM
         fs_store_payment_scrm
         WHERE
@@ -283,7 +293,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="getScanPaymentYearStatPage" resultType="com.fs.hisStore.vo.FsStoreScanPaymentStatDetailsVo">
         SELECT
             pay_time,
-            pay_money
+            pay_money,
+            original_amount,
+            reduction_amount
         FROM
             fs_store_payment_scrm
         WHERE
@@ -314,7 +326,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="getScanPaymentDateStatPage" resultType="com.fs.hisStore.vo.FsStoreScanPaymentStatDetailsVo">
         SELECT
             pay_time,
-            pay_money
+            pay_money,
+            original_amount,
+            reduction_amount
         FROM
             fs_store_payment_scrm
         WHERE

+ 46 - 0
fs-user-app/src/main/java/com/fs/app/controller/store/FsStoreScanPaymentStatController.java

@@ -1,12 +1,15 @@
 package com.fs.app.controller.store;
 
+import cn.hutool.json.JSONUtil;
 import com.fs.app.controller.AppBaseController;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.page.TableDataInfo;
+import com.fs.hisStore.config.StoreConfig;
 import com.fs.hisStore.param.FsStoreScanPaymentStatParam;
 import com.fs.hisStore.service.IFsStorePaymentScrmService;
 import com.fs.hisStore.vo.FsStoreScanPaymentStatDetailsVo;
 import com.fs.hisStore.vo.FsStoreScanPaymentStatVo;
+import com.fs.system.service.ISysConfigService;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import io.swagger.annotations.Api;
@@ -15,7 +18,11 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.math.BigDecimal;
+import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 @Api("扫码流水统计接口")
 @RestController
@@ -24,6 +31,9 @@ public class FsStoreScanPaymentStatController extends AppBaseController {
     @Autowired
     private IFsStorePaymentScrmService paymentService;
 
+    @Autowired
+    private ISysConfigService configService;
+
     /**
      * 扫码支付统计接口
      */
@@ -40,4 +50,40 @@ public class FsStoreScanPaymentStatController extends AppBaseController {
         }
         return R.ok().put("data",scanPaymentStat);
     }
+
+    /**
+     * 扫码码立减金额查询
+     */
+    @ApiOperation("扫码码立减金额查询")
+    @GetMapping("/getScanCodeDiscountAmount")
+    public R getScanCodeDiscountAmount() {
+        final String STORE_CONFIG_KEY = "store.config";
+        final BigDecimal DEFAULT_DISCOUNT_AMOUNT = BigDecimal.ZERO;
+
+        try {
+            String jsonConfig = configService.selectConfigByKey(STORE_CONFIG_KEY);
+            StoreConfig storeConfig = JSONUtil.toBean(jsonConfig, StoreConfig.class);
+
+            BigDecimal discountAmount = DEFAULT_DISCOUNT_AMOUNT;
+            if (isValidDiscountConfig(storeConfig)) {
+                discountAmount = storeConfig.getScanCodeDiscountAmount();
+            }
+
+            return R.ok().put("data", Collections.singletonMap("scanCodeDiscountAmount", discountAmount));
+        } catch (Exception e) {
+            return R.error("查询立减金额失败,请稍后重试");
+        }
+    }
+
+    /**
+     * 验证立减配置是否有效
+     * @param config 店铺配置对象
+     * @return 配置是否有效
+     */
+    private boolean isValidDiscountConfig(StoreConfig config) {
+        return config != null
+                && Boolean.TRUE.equals(config.getScanCodeDiscountEnabled())
+                && config.getScanCodeDiscountAmount() != null
+                && config.getScanCodeDiscountAmount().compareTo(BigDecimal.ZERO) > 0;
+    }
 }