From a1ae9d712f1d18799c3e4e34995fd037f6c5a22a Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Wed, 19 Jul 2023 16:56:32 +0800
Subject: [PATCH] 商城商品修改

---
 src/main/java/cc/mrbird/febs/mall/controller/ApiApplyController.java             |    1 
 src/main/java/cc/mrbird/febs/mall/dto/PayOrderDto.java                           |    5 
 src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java         |    1 
 src/main/java/cc/mrbird/febs/mall/mapper/MallRollPerkMapper.java                 |    7 +
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java  |  279 +++++++++++++++++++++------------------
 src/main/java/cc/mrbird/febs/mall/controller/ApiMallTeamLeaderController.java    |    1 
 src/main/java/cc/mrbird/febs/mall/controller/ApiMallAddressInfoController.java   |    1 
 src/main/java/cc/mrbird/febs/pay/util/WechatMenuUtil.java                        |    4 
 src/main/java/cc/mrbird/febs/mall/controller/ApiMallNewsController.java          |    1 
 src/main/java/cc/mrbird/febs/common/configure/CorsConfig.java                    |   27 +++
 src/main/java/cc/mrbird/febs/mall/controller/ApiMallShoppingCartController.java  |    1 
 src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java            |   12 +
 src/main/java/cc/mrbird/febs/common/enumerates/GoodsTypeEnum.java                |   47 ++++++
 src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsCategoryController.java |    6 
 src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java        |    1 
 src/main/java/cc/mrbird/febs/mall/controller/ApiMallActController.java           |    1 
 src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java           |    2 
 src/main/java/cc/mrbird/febs/common/enumerates/FlowTypeEnum.java                 |    2 
 src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsController.java         |    1 
 src/main/java/cc/mrbird/febs/mall/entity/MallRollPerk.java                       |   20 ++
 20 files changed, 281 insertions(+), 139 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/common/configure/CorsConfig.java b/src/main/java/cc/mrbird/febs/common/configure/CorsConfig.java
new file mode 100644
index 0000000..8932f8e
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/common/configure/CorsConfig.java
@@ -0,0 +1,27 @@
+package cc.mrbird.febs.common.configure;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.cors.CorsConfiguration;
+import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
+import org.springframework.web.filter.CorsFilter;
+
+@Configuration
+public class CorsConfig {
+
+    private CorsConfiguration buildConfig() {
+        CorsConfiguration corsConfiguration = new CorsConfiguration();
+        corsConfiguration.addAllowedOrigin("*");
+        corsConfiguration.addAllowedHeader("*");
+        corsConfiguration.addAllowedMethod("*");
+        corsConfiguration.setAllowCredentials(true);
+        return corsConfiguration;
+    }
+
+    @Bean
+    public CorsFilter corsFilter() {
+        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
+        source.registerCorsConfiguration("/**", buildConfig());
+        return new CorsFilter(source);
+    }
+}
diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java
index cbded5e..8005fb8 100644
--- a/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java
+++ b/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java
@@ -5,6 +5,8 @@
 
 @Getter
 public enum DataDictionaryEnum {
+    // 积分兑换比例  1,则1积分等于一元 2则2积分等于一元
+    SCORE_CHANGE("SCORE_CHANGE", "SCORE_CHANGE"),
     //微信订阅模板ID,
     // 微信订单通知
 //    WX_TEMPLATE_ID_ONE("WX_TEMPLATE", "WX_TEMPLATE_ID_ONE"),
diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/FlowTypeEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/FlowTypeEnum.java
index eccc67e..682e4ca 100644
--- a/src/main/java/cc/mrbird/febs/common/enumerates/FlowTypeEnum.java
+++ b/src/main/java/cc/mrbird/febs/common/enumerates/FlowTypeEnum.java
@@ -19,7 +19,7 @@
      */
     SCORE(2),
     /**
-     * 竞猜积分
+     * 兑换卷
      */
     PRIZE_SCORE(3),
     /**
diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/GoodsTypeEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/GoodsTypeEnum.java
new file mode 100644
index 0000000..9d36fd6
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/common/enumerates/GoodsTypeEnum.java
@@ -0,0 +1,47 @@
+package cc.mrbird.febs.common.enumerates;
+
+import lombok.Getter;
+
+/**
+ *
+ <option value="1">积分兑换商品</option>
+ <option value="2">购买积分商品</option>
+ <option value="3">普通商品商品</option>
+ <option value="4">课程卷商品</option>
+ <option value="5">民宿卷商品</option>
+ */
+@Getter
+public enum GoodsTypeEnum {
+
+    /**
+     * 积分兑换商品
+     *  使用积分去购买商品,不够则使用余额来折扣剩余积分
+     */
+    SCORE_CHANGE(1),
+    /**
+     * 购买积分商品
+     *  使用余额或者微信支付购买,然后赠送积分
+     */
+    BUY_SCORE(2),
+    /**
+     * 普通商品商品
+     *  使用余额或者微信支付购买
+     */
+    NORMAL_GOODS(3),
+    /**
+     * 课程卷商品
+     *  使用余额或者微信支付购买或者使用折扣卷
+     */
+    CLASS_ROLL(4),
+    /**
+     * 民宿卷商品
+     *  使用余额或者微信支付购买或者使用折扣卷
+     */
+    HOUSE_ROLL(5);
+
+    private final int value;
+
+    GoodsTypeEnum(int value) {
+        this.value = value;
+    }
+}
diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java
index eac5287..0b4c7b2 100644
--- a/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java
+++ b/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java
@@ -113,7 +113,17 @@
     /**
      * 微信退款
      */
-    WECHAT_REFUND(22);
+    WECHAT_REFUND(22),
+
+    /**
+     * 积分支付
+     */
+    SCORE_PAY(23),
+
+    /**
+     * 兑换券支付
+     */
+    ROLL_PAY(24);
 
     private final int value;
 
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiApplyController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiApplyController.java
index 1b87b5c..2854a3c 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ApiApplyController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiApplyController.java
@@ -19,6 +19,7 @@
  **/
 @Slf4j
 @RestController
+@CrossOrigin("*")
 @RequestMapping(value = "/api/apply")
 @RequiredArgsConstructor
 @Api(value = "ApiApplyController", tags = "申请通道接口类")
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallActController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallActController.java
index 6c8d0fe..09ac342 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallActController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallActController.java
@@ -16,6 +16,7 @@
 
 @Slf4j
 @RestController
+@CrossOrigin("*")
 @RequestMapping(value = "/api/act")
 @RequiredArgsConstructor
 @Api(value = "ApiApplyController", tags = "活动接口类")
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallAddressInfoController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallAddressInfoController.java
index 8305013..3fe8124 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallAddressInfoController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallAddressInfoController.java
@@ -26,6 +26,7 @@
 @Slf4j
 @Validated
 @RestController
+@CrossOrigin("*")
 @RequiredArgsConstructor
 @RequestMapping(value = "/api/address")
 @Api(value = "ApiMallAddressInfoController", tags = "用户地址管理接口类")
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsCategoryController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsCategoryController.java
index 3a525be..c5c501e 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsCategoryController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsCategoryController.java
@@ -9,10 +9,7 @@
 import io.swagger.annotations.ApiResponses;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 
@@ -22,6 +19,7 @@
  **/
 @Slf4j
 @RestController
+@CrossOrigin("*")
 @RequiredArgsConstructor
 @RequestMapping(value = "/api/category")
 @Api(value = "ApiMallGoodsCategoryController", tags = "商品分类参数接收类")
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsController.java
index b8da8bc..099aa13 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsController.java
@@ -20,6 +20,7 @@
  **/
 @Slf4j
 @Validated
+@CrossOrigin("*")
 @RestController
 @RequiredArgsConstructor
 @RequestMapping(value = "/api/goods")
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java
index b9b7639..7593f5f 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java
@@ -23,6 +23,7 @@
  **/
 @Slf4j
 @RestController
+@CrossOrigin("*")
 @RequestMapping(value = "/api/member")
 @RequiredArgsConstructor
 @Api(value = "ApiMallMemberController", tags = "商城用户接口类")
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallNewsController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallNewsController.java
index cf94025..1fc3677 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallNewsController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallNewsController.java
@@ -21,6 +21,7 @@
  **/
 @Slf4j
 @RestController
+@CrossOrigin("*")
 @RequestMapping(value = "/api/news")
 @RequiredArgsConstructor
 @Api(value = "ApiMallNewsController", tags = "新闻接口类")
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java
index 5975313..ba17b61 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallOrderController.java
@@ -24,6 +24,7 @@
  **/
 @Slf4j
 @Validated
+@CrossOrigin("*")
 @RestController
 @RequiredArgsConstructor
 @RequestMapping(value = "/api/order")
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallShoppingCartController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallShoppingCartController.java
index dd483e3..67c94b5 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallShoppingCartController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallShoppingCartController.java
@@ -25,6 +25,7 @@
  **/
 @Slf4j
 @Validated
+@CrossOrigin("*")
 @RestController
 @RequiredArgsConstructor
 @RequestMapping(value = "/api/cart")
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallTeamLeaderController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallTeamLeaderController.java
index fdee968..8039f4f 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallTeamLeaderController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallTeamLeaderController.java
@@ -19,6 +19,7 @@
 @Slf4j
 @Validated
 @RestController
+@CrossOrigin("*")
 @RequiredArgsConstructor
 @RequestMapping(value = "/api/leader")
 @Api(value = "ApiMallTeamLeaderController", tags = "团长接口类")
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/PayOrderDto.java b/src/main/java/cc/mrbird/febs/mall/dto/PayOrderDto.java
index 9d2094f..1515809 100644
--- a/src/main/java/cc/mrbird/febs/mall/dto/PayOrderDto.java
+++ b/src/main/java/cc/mrbird/febs/mall/dto/PayOrderDto.java
@@ -20,7 +20,7 @@
     private Long id;
 
     @NotBlank(message = "参数不能为空")
-    @ApiModelProperty(value = "支付类型", example = "1微信2支付宝3余额4积分")
+    @ApiModelProperty(value = "支付类型", example = "1微信2余额3积分4卷")
     private String type;
 
     @ApiModelProperty(value = "支付密码", example = "如果选择余额支付需要输入")
@@ -31,4 +31,7 @@
 
     @ApiModelProperty(value = "支付凭证")
     private String payImage;
+
+    @ApiModelProperty(value = "兑换卷ID")
+    private Long rollId;
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallRollPerk.java b/src/main/java/cc/mrbird/febs/mall/entity/MallRollPerk.java
new file mode 100644
index 0000000..af48abd
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/entity/MallRollPerk.java
@@ -0,0 +1,20 @@
+package cc.mrbird.febs.mall.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("mall_roll_perk")
+public class MallRollPerk {
+
+    private static final long serialVersionUID = 1L;
+
+    private Long id;
+
+    private Long memberId;
+
+    private Long rollId;
+
+    private Integer state;
+
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallRollPerkMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallRollPerkMapper.java
new file mode 100644
index 0000000..1c13f07
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallRollPerkMapper.java
@@ -0,0 +1,7 @@
+package cc.mrbird.febs.mall.mapper;
+
+import cc.mrbird.febs.mall.entity.MallRollPerk;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+public interface MallRollPerkMapper extends BaseMapper<MallRollPerk> {
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
index e8e3a32..7656e4d 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -82,12 +82,15 @@
     private final IApiMallTeamLeaderService iApiMallTeamLeaderService;
     private final IMallElectronicFenceService iMallElectronicFenceService;
     private final MallElectronicFenceMapper mallElectronicFenceMapper;
+    private final MallMemberWalletMapper mallMemberWalletMapper;
+    private final MallRollPerkMapper mallRollPerkMapper;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Long createOrder(AddOrderDto addOrderDto) {
         Long memberId = LoginUserUtil.getLoginUser().getId();
         MallMember member = mallMemberMapper.selectById(memberId);
+        MallMemberWallet memberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId);
 
                 //验证用户的等级
 //        if(AgentLevelEnum.ZERO_LEVEL.name().equals(member.getLevel())){
@@ -116,120 +119,85 @@
 
         BigDecimal total = BigDecimal.ZERO;
         for (AddOrderItemDto item : addOrderDto.getItems()) {
-                MallOrderItem orderItem = new MallOrderItem();
+            MallOrderItem orderItem = new MallOrderItem();
+            MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(item.getSkuId());
+            if (ObjectUtil.isEmpty(sku)) {
+                throw new FebsException("购买商品或sku不存在");
+            }
 
-                // 积分商品提交订单
-                if (addOrderDto.getOrderType() == 2) {
-                    MallGoods mallGoods = mallGoodsMapper.selectById(item.getSkuId());
-                    if (mallGoods.getStock() < item.getCnt()) {
-                        throw new FebsException(mallGoods.getGoodsName() + "库存不足");
-                    }
-
-                    if (MallGoods.ISSALE_STATUS_DISABLED.equals(mallGoods.getIsSale())) {
-                        throw new FebsException(mallGoods.getGoodsName() + "已下架");
-                    }
-
-                    BigDecimal amount = mallGoods.getScore().multiply(BigDecimal.valueOf(item.getCnt()));
-                    orderItem.setAmount(amount);
-                    orderItem.setCnt(item.getCnt());
-                    orderItem.setOrderId(orderInfo.getId());
-                    orderItem.setPrice(mallGoods.getScore());
-                    orderItem.setGoodsId(mallGoods.getId());
-                    orderItem.setGoodsName(mallGoods.getGoodsName());
-                    orderItem.setStyleName(mallGoods.getGoodsName());
-                    orderItem.setSkuName(mallGoods.getGoodsName());
-                    orderItem.setSkuImage(mallGoods.getThumb());
-                    orderItem.setState(1);
-
-                    total = total.add(amount);
-                } else {
-                    MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(item.getSkuId());
-                    if (sku == null) {
-                        throw new FebsException("购买商品或sku不存在");
-                    }
-
-//                    if("样品".equals(sku.getSample())){
-//                        List<MallOrderItem> items = mallOrderItemMapper.selectItemBySkuIdUnCancel(sku.getId(), member.getId());
-//                        if (CollUtil.isNotEmpty(items)) {
-//                            throw new FebsException("样品一个用户只能购买一次");
-//                        }
-//                        Integer cnt = item.getCnt();
-//                        if(1 < cnt){
-//                            throw new FebsException("样品只能购买一件");
-//                        }
-//
-//                    }
-
-                    if (sku.getStock() < item.getCnt()) {
-                        throw new FebsException(sku.getSkuName() + "库存不足");
-                    }
-
-                    MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId());
-                    // 零撸专区购买
-                    if (new BigDecimal(mallGoods.getPresentPrice()).compareTo(BigDecimal.ZERO) == 0) {
-                        List<MallOrderItem> items = mallOrderItemMapper.selectItemByGoodsIdUnCancel(mallGoods.getId(), member.getId());
-                        if (CollUtil.isNotEmpty(items)) {
-                            throw new FebsException("无法重复领取同一个商品");
-                        }
-                    }
-
-                    if (MallGoods.ISSALE_STATUS_DISABLED.equals(mallGoods.getIsSale())) {
-                        throw new FebsException(mallGoods.getGoodsName() + "已下架");
-                    }
-                    //商品库存销量计算
-                    Integer goodsResult = mallGoodsMapper.upDateStockAndVolumeByGoodsId(mallGoods.getId(), item.getCnt());
-                    if(1 != goodsResult){
-                        throw new FebsException(mallGoods.getGoodsName() + "库存不足");
-                    }
-                    BigDecimal amount = BigDecimal.ZERO;
-                    BigDecimal itemPrice = BigDecimal.ZERO;
-                    if(AgentLevelEnum.ZERO_LEVEL.name().equals(member.getLevel())){
-                        //普通用户使用原价购买
-                        amount = sku.getOriginalPrice().multiply(BigDecimal.valueOf(item.getCnt()));
-                        itemPrice = sku.getOriginalPrice();
-                    }else if(AgentLevelEnum.LEVEL_ONE.name().equals(member.getLevel())){
-                        //普通用户使用原价购买
-                        amount = sku.getLevelOnePrice().multiply(BigDecimal.valueOf(item.getCnt()));
-                        itemPrice = sku.getLevelOnePrice();
-                    }else if(AgentLevelEnum.LEVEL_TWO.name().equals(member.getLevel())){
-                        //普通用户使用原价购买
-                        amount = sku.getLevelTwoPrice().multiply(BigDecimal.valueOf(item.getCnt()));
-                        itemPrice = sku.getLevelTwoPrice();
-                    }else if(AgentLevelEnum.LEVEL_THREE.name().equals(member.getLevel())){
-                        //普通用户使用原价购买
-                        amount = sku.getLevelThreePrice().multiply(BigDecimal.valueOf(item.getCnt()));
-                        itemPrice = sku.getLevelThreePrice();
-                    }else{
-                        //合伙人使用折扣价
-                        amount = sku.getPresentPrice().multiply(BigDecimal.valueOf(item.getCnt()));
-                        itemPrice = sku.getPresentPrice();
-                    }
-//                    BigDecimal amount = sku.getPresentPrice().multiply(BigDecimal.valueOf(item.getCnt()));
-                    orderItem.setAmount(amount);
-                    orderItem.setCnt(item.getCnt());
-                    orderItem.setOrderId(orderInfo.getId());
-                    orderItem.setPrice(itemPrice);
-                    orderItem.setGoodsId(sku.getGoodsId());
-                    orderItem.setGoodsName(sku.getGoodsName());
-                    orderItem.setSkuId(sku.getId());
-                    orderItem.setState(1);
-                    orderItem.setStyleName(sku.getStyleName());
-                    orderItem.setSkuName(sku.getSkuName());
-                    orderItem.setSkuImage(sku.getSkuImage());
-                    orderItem.setIsNormal(mallGoods.getIsNormal());
-                    orderItem.setCostPrice(sku.getCostPrice());
-
-                    total = total.add(amount);
-                    //规格的库存销量
-                    Integer skuResult = mallGoodsSkuMapper.upDateStockAndVolumeBySkuId(sku.getId(),item.getCnt());
-                    if(1 != skuResult){
-                        throw new FebsException(sku.getSkuName() + "库存不足");
-                    }
-                    if (addOrderDto.getType() == 1) {
-                        mallShoppingCartMapper.delBySkuId(sku.getId(), member.getId());
-                    }
+            if (sku.getStock() < item.getCnt()) {
+                throw new FebsException(sku.getSkuName() + "库存不足");
+            }
+            MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId());
+            // 零撸专区购买
+            if (new BigDecimal(mallGoods.getPresentPrice()).compareTo(BigDecimal.ZERO) == 0) {
+                List<MallOrderItem> items = mallOrderItemMapper.selectItemByGoodsIdUnCancel(mallGoods.getId(), member.getId());
+                if (CollUtil.isNotEmpty(items)) {
+                    throw new FebsException("无法重复领取同一个商品");
                 }
-                mallOrderItemMapper.insert(orderItem);
+            }
+
+            if (MallGoods.ISSALE_STATUS_DISABLED.equals(mallGoods.getIsSale())) {
+                throw new FebsException(mallGoods.getGoodsName() + "已下架");
+            }
+            //商品库存销量计算
+            Integer goodsResult = mallGoodsMapper.upDateStockAndVolumeByGoodsId(mallGoods.getId(), item.getCnt());
+            if(1 != goodsResult){
+                throw new FebsException(mallGoods.getGoodsName() + "库存不足");
+            }
+            BigDecimal amount = BigDecimal.ZERO;
+            BigDecimal itemPrice = BigDecimal.ZERO;
+            /**
+             *
+             */
+            Integer isNormal = mallGoods.getIsNormal();
+            if(GoodsTypeEnum.SCORE_CHANGE.getValue() == isNormal){
+                //普通用户使用原价购买
+                amount = sku.getOriginalPrice().multiply(BigDecimal.valueOf(item.getCnt()));
+                itemPrice = sku.getOriginalPrice();
+            }else if(GoodsTypeEnum.BUY_SCORE.getValue() == isNormal){
+                //普通用户使用原价购买
+                amount = sku.getLevelOnePrice().multiply(BigDecimal.valueOf(item.getCnt()));
+                itemPrice = sku.getLevelOnePrice();
+            }else if(GoodsTypeEnum.NORMAL_GOODS.getValue() == isNormal){
+                //普通用户使用原价购买
+                amount = sku.getLevelTwoPrice().multiply(BigDecimal.valueOf(item.getCnt()));
+                itemPrice = sku.getLevelTwoPrice();
+            }else if(GoodsTypeEnum.CLASS_ROLL.getValue() == isNormal){
+                //普通用户使用原价购买
+                amount = sku.getLevelThreePrice().multiply(BigDecimal.valueOf(item.getCnt()));
+                itemPrice = sku.getLevelThreePrice();
+            }else if(GoodsTypeEnum.HOUSE_ROLL.getValue() == isNormal){
+                //普通用户使用原价购买
+                amount = sku.getLevelThreePrice().multiply(BigDecimal.valueOf(item.getCnt()));
+                itemPrice = sku.getLevelThreePrice();
+            }else{
+                throw new FebsException("当前商品无法购买!");
+            }
+            orderItem.setAmount(amount);
+            orderItem.setCnt(item.getCnt());
+            orderItem.setOrderId(orderInfo.getId());
+            orderItem.setPrice(itemPrice);
+            orderItem.setGoodsId(sku.getGoodsId());
+            orderItem.setGoodsName(sku.getGoodsName());
+            orderItem.setSkuId(sku.getId());
+            orderItem.setState(1);
+            orderItem.setStyleName(sku.getStyleName());
+            orderItem.setSkuName(sku.getSkuName());
+            orderItem.setSkuImage(sku.getSkuImage());
+            orderItem.setIsNormal(mallGoods.getIsNormal());
+            orderItem.setCostPrice(sku.getCostPrice());
+
+            total = total.add(amount);
+            //规格的库存销量
+            Integer skuResult = mallGoodsSkuMapper.upDateStockAndVolumeBySkuId(sku.getId(),item.getCnt());
+            if(1 != skuResult){
+                throw new FebsException(sku.getSkuName() + "库存不足");
+            }
+            if (addOrderDto.getType() == 1) {
+                mallShoppingCartMapper.delBySkuId(sku.getId(), member.getId());
+            }
+            mallOrderItemMapper.insert(orderItem);
         }
         //运费
         BigDecimal delivaryAmount = addOrderDto.getDeliveryAmount() == null ? BigDecimal.ZERO : addOrderDto.getDeliveryAmount();
@@ -367,17 +335,6 @@
                 orderInfo.setPayMethod("微信支付");
                 break;
             case "2":
-                if (StrUtil.isNotBlank(orderInfo.getPayOrderNo())) {
-                    payResultStr = orderInfo.getPayOrderNo();
-                } else {
-                    payResultStr = payService.aliPay(orderInfo);
-                }
-
-                orderInfo.setPayOrderNo(payResultStr);
-                orderInfo.setPayMethod("支付宝支付");
-                agentProducer.sendOrderReturn(orderInfo.getId());
-                break;
-            case "3":
                 payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd(), "balance");
 
                 orderInfo.setPayOrderNo(orderInfo.getOrderNo());
@@ -387,29 +344,91 @@
                 orderInfo.setPayResult("1");
                 orderInfo.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_WAIT.getValue());
 
-                mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue(),"余额支付",2);
+                mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(),
+                        orderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue(),"余额支付",2);
+                break;
+            case "3":
+                /**
+                 * 获取用户的当前积分
+                 */
+                MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(member.getId());
+                BigDecimal score = mallMemberWallet.getScore();
+                BigDecimal amount = orderInfo.getAmount();
+                //积分兑换比例
+                DataDictionaryCustom scoreChangeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                        DataDictionaryEnum.SCORE_CHANGE.getType(),
+                        DataDictionaryEnum.SCORE_CHANGE.getCode()
+                );
+                BigDecimal scoreChange = StrUtil.isEmpty(scoreChangeDic.getValue()) ? new BigDecimal("1") : new BigDecimal(scoreChangeDic.getValue());
+                BigDecimal amountToScore = amount.multiply(scoreChange).setScale(0, BigDecimal.ROUND_DOWN);
+                //实际支付积分
+                BigDecimal scoreActual = BigDecimal.ZERO;
+                if(score.compareTo(amountToScore) >= 0){
+                    //拥有的积分大于此次订单的金额,则全额订单折扣
+                    int reduce = memberWalletService.reduce(amountToScore, member.getId(), "score");
+                    if (reduce == 2) {
+                        throw new FebsException("积分余额不足");
+                    }
+                    orderInfo.setPayMethod("积分支付");
+                    scoreActual = amountToScore;
+                }else{
+                    //拥有的积分大于此次订单的金额,则全额订单折扣
+                    int reduce = memberWalletService.reduce(score, member.getId(), "score");
+                    if (reduce == 2) {
+                        throw new FebsException("积分余额不足");
+                    }
+                    scoreActual = score;
+                }
+
+                BigDecimal scoreToAmount = score.divide(scoreChange, 2, BigDecimal.ROUND_DOWN);
+                //实际支付余额
+                BigDecimal amountActual = amount.subtract(scoreToAmount).setScale(2, BigDecimal.ROUND_DOWN);
+                int balance = memberWalletService.reduce(amountActual, member.getId(), "balance");
+                if (balance == 2) {
+                    throw new FebsException("余额不足");
+                }
+                orderInfo.setPayOrderNo(orderInfo.getOrderNo());
+                orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue());
+                orderInfo.setPayTime(new Date());
+                orderInfo.setPayResult("1");
+                orderInfo.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_WAIT.getValue());
+                if(amountActual.compareTo(BigDecimal.ZERO) > 0){
+                    mallMoneyFlowService.addMoneyFlow(member.getId(), amountActual.negate(), MoneyFlowTypeEnum.PAY.getValue(),
+                            orderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue(),"余额支付",2);
+                }
+                if(scoreActual.compareTo(BigDecimal.ZERO) > 0){
+                    mallMoneyFlowService.addMoneyFlow(member.getId(), scoreActual.negate(),
+                            MoneyFlowTypeEnum.SCORE_PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.SCORE.getValue(),"积分支付",2);
+                }
                 break;
             case "4":
-                if (orderInfo.getOrderType() != 2) {
-                    throw new FebsException("非积分订单,无法使用积分支付");
+                MallRollPerk mallRollPerk = mallRollPerkMapper.selectById(payOrderDto.getRollId());
+                if(ObjectUtil.isEmpty(mallRollPerk)){
+                    throw new FebsException("兑换券不存在");
                 }
-                payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd(), "prizeScore");
+                int stateRoll = ObjectUtil.isEmpty(mallRollPerk.getState()) ? 2 : mallRollPerk.getState();
+                if(stateRoll == 2){
+                    throw new FebsException("兑换券已使用");
+                }
+
+                payResultStr = orderInfo.getOrderNo();
 
                 orderInfo.setPayOrderNo(orderInfo.getOrderNo());
-                orderInfo.setPayMethod("积分支付");
+                orderInfo.setPayMethod("兑换券支付");
                 orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue());
                 orderInfo.setPayTime(new Date());
                 orderInfo.setPayResult("1");
 
-                mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(),  FlowTypeEnum.PRIZE_SCORE.getValue());
+                mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.ROLL_PAY.getValue(),
+                        orderInfo.getOrderNo(),  FlowTypeEnum.PRIZE_SCORE.getValue());
                 break;
             default:
 
         }
+
         //订单支付成功产生一个提货码
         String takeCode = ShareCodeUtil.toSerialCode(orderInfo.getId());
         orderInfo.setTakeCode(takeCode);
-
         this.baseMapper.updateById(orderInfo);
 
 
diff --git a/src/main/java/cc/mrbird/febs/pay/util/WechatMenuUtil.java b/src/main/java/cc/mrbird/febs/pay/util/WechatMenuUtil.java
index b44c818..4f49065 100644
--- a/src/main/java/cc/mrbird/febs/pay/util/WechatMenuUtil.java
+++ b/src/main/java/cc/mrbird/febs/pay/util/WechatMenuUtil.java
@@ -23,7 +23,7 @@
         String appId = "wx052716b1a388b13c";
         // 第三方用户唯一凭证密钥
         String appSecret = "e7cf355e7234f035d8fea6a3a19513b9";
-        String accessToken = "70_VnGMZaIo0pkY7WJOfGVnRlqUGC8UQPu0eN4L8Hc9PearLQgIAtWOC2UCaErhctjI7ORBk_aeBg3QudsLWi5z5_lIPd_zwMCf7E4g8rHkqvArD-N8jyKOKJfzNGsGWJeAFAKAN";
+        String accessToken = "70_LkVymFk8YsaB6EfPqJARigNJoM4fL5gqHE90HHG8o9zureJ34jFYOcal97lTpCD1sNhxHRbZzIs6CylMHyMou3GWj51HNg37lKUlTzrCkpeEGERAnT2gQCCjyOgTKAfAIAGXN";
 
         // 调用接口创建菜单
         String result = createMenu(getMenu(), accessToken);
@@ -82,7 +82,7 @@
         btn11.setName("商城");
         btn11.setType("view");
         btn11.setKey("11");
-        btn11.setUrl("https://www.baidu.com/");
+        btn11.setUrl("http://ywgouth.meiao.biz/");
 
         CommonButton btn24 = new CommonButton();
         btn24.setName("公司简介");

--
Gitblit v1.9.1