From 1fc5510367dcf321ac85e50e31c9dcdaaf5cd09e Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Wed, 21 Dec 2022 11:56:27 +0800
Subject: [PATCH] 20221221

---
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java |  110 ++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 68 insertions(+), 42 deletions(-)

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 c05d958..040638a 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
@@ -25,6 +25,7 @@
 import cc.mrbird.febs.pay.service.UnipayService;
 import cc.mrbird.febs.rabbit.producter.AgentProducer;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUnit;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
@@ -43,6 +44,7 @@
 
 import java.math.BigDecimal;
 import java.text.DecimalFormat;
+import java.text.SimpleDateFormat;
 import java.util.*;
 
 /**
@@ -67,6 +69,7 @@
     private final MallShoppingCartMapper mallShoppingCartMapper;
     private final IApiMallMemberService memberService;
     private final IMallMoneyFlowService mallMoneyFlowService;
+    private final MallMoneyFlowMapper mallMoneyFlowMapper;
     private final RedisUtils redisUtils;
 
     private final AgentProducer agentProducer;
@@ -77,11 +80,39 @@
     private final MallMemberBankSignMapper mallMemberBankSignMapper;
     private final MallMemberBankMapper mallMemberBankMapper;
     private final MallShopApplyMapper mallShopApplyMapper;
+    private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Long createOrder(AddOrderDto addOrderDto) {
         MallMember member = LoginUserUtil.getLoginUser();
+        /**
+         * 根据会员星级判断是否可以购买该商品
+         */
+        MallMember mallMember = memberMapper.selectById(member.getId());
+        String accountLevel = mallMember.getAccountLevel();
+        Integer memberLevelCode = MemberAccountLevelEnum.NORMAL.getMemberLevelCode(accountLevel);
+        //获取商品星级
+        MallGoods goods = mallGoodsMapper.selectById(addOrderDto.getGoodsId());
+        String starRating = goods.getStarRating();
+        Integer goodsStarCode = StarRatingEnum.NORMAL.getGoodsStarCode(starRating);
+        if(memberLevelCode < goodsStarCode){
+            throw new FebsException("会员等级不够");
+        }
+        /**
+         * 会员一天最多下单次数
+         */
+        DataDictionaryCustom buyTimesDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.BUY_TIMES.getType(), DataDictionaryEnum.BUY_TIMES.getCode());
+        Integer buyTimes = Integer.parseInt(buyTimesDic.getValue());
+
+        DateTime date = DateUtil.date();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        String yyyyMMdd = sdf.format(date);
+        Integer times = this.baseMapper.selectCountByCreateTimeAndMemberId(yyyyMMdd,member.getId());
+        if(buyTimes <= times){
+            throw new FebsException("会员今日已无法购买");
+        }
 
 //        MallAddressInfo address = mallAddressInfoMapper.selectAddressInfoByMemberIdAndId(member.getId(), addOrderDto.getAddressId());
 //        if (address == null) {
@@ -101,7 +132,8 @@
 //        orderInfo.setLongitude(address.getLongitude());
         orderInfo.setRemark(addOrderDto.getRemark());
         orderInfo.setOrderType(addOrderDto.getOrderType());
-
+        //补贴金额
+        orderInfo.setSubsidyAmount(goods.getSubsidyAmount());
         if (CollUtil.isEmpty(addOrderDto.getItems())) {
             throw new FebsException("参数错误");
         }
@@ -255,10 +287,11 @@
         if (OrderStatusEnum.WAIT_PAY.getValue() != orderInfo.getStatus()) {
             throw new FebsException("订单状态不能支付");
         }
-
+        String type = payOrderDto.getType();
+        type = type == "3" ? type : "3";
         String payResultStr = "";
         String rcResult = "";
-        switch (payOrderDto.getType()) {
+        switch (type) {
             case "1":
                 UnipayDto unipayDtoWx = new UnipayDto();
 //                unipayDto.setAmount(new BigDecimal("0.01"));
@@ -331,46 +364,22 @@
                 orderInfo.setPayTime(new Date());
                 orderInfo.setPayResult("1");
 
-//                boolean hasTc = false;
-                // 静态倍数
-//                List<MallOrderItem> orderItems = this.baseMapper.getMallOrderItemByOrderId(orderInfo.getId());
-//                if (CollUtil.isNotEmpty(orderItems)) {
-//                    for (MallOrderItem orderItem : orderItems) {
-//                        MallGoods mallGoods = mallGoodsMapper.selectById(orderItem.getGoodsId());
-//                        BigDecimal score = BigDecimal.ZERO;
-//                        MallGoodsSku sku = mallGoodsSkuMapper.selectById(orderItem.getSkuId());
-//                        if (mallGoods.getIsNormal() == 2) {
-//                            hasTc = true;
-//                            score = sku.getPresentPrice().multiply(mallGoods.getStaticMulti()).multiply(new BigDecimal(orderItem.getCnt()));
-////                            BigDecimal staticMulti = mallGoods.getStaticMulti() == null ? BigDecimal.ZERO : mallGoods.getStaticMulti();
-////                            score = sku.getPresentPrice().multiply(staticMulti);
-//                            // 普通商品也及时结算,不再10天结算
-//                        } else {
-//                            score = sku.getPresentPrice();
-//                        }
-//
-//                        if (score.compareTo(BigDecimal.ZERO) > 0) {
-//                            memberWalletService.add(score, member.getId(), "score");
-//                            mallMoneyFlowService.addMoneyFlow(member.getId(), score, MoneyFlowTypeEnum.STATIC_BONUS.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.SCORE.getValue());
-//
-//                            // 添加业绩
-//                            mallAchieveService.add(orderItem.getId());
-//                        }
-//                    }
-//                }
+//                mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue());
+                /**
+                 * 生成下单的流水记录
+                 */
+                Long payFlowId = mallMoneyFlowService.addMoneyFlow(
+                        member.getId(),
+                        orderInfo.getOrderNo(),
+                        orderInfo.getAmount().negate().setScale(2, BigDecimal.ROUND_DOWN),
+                        MallMoneyFlowTypeEnum.PAY.getCode(),
+                        MallMoneyFlow.STATUS_SUCCESS,
+                        MallMoneyFlow.IS_RETURN_N,
+                        member.getId(),
+                        FlowTypeEnum.BALANCE.getValue(),
+                        MallMoneyFlowTypeEnum.PAY.getName()
+                );
 
-                // 购买套餐后,升级为普通会员
-//                if (hasTc) {
-//                    MallMember mallMember = memberMapper.selectById(member.getId());
-//                    if (AgentLevelEnum.ZERO_LEVEL.name().equals(mallMember.getLevel())) {
-//                        mallMember.setLevel(AgentLevelEnum.FIRST_LEVEL.name());
-//                        memberMapper.updateById(mallMember);
-//                    }
-//                }
-
-                mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue());
-//                agentProducer.sendAutoLevelUpMsg(member.getId());
-//                agentProducer.sendOrderReturn(orderInfo.getId());
                 break;
             case "4":
                 if (orderInfo.getOrderType() != 2) {
@@ -570,6 +579,23 @@
         orderInfo.setStatus(OrderStatusEnum.FINISH.getValue());
         orderInfo.setReceivingTime(new Date());
         this.baseMapper.updateById(orderInfo);
+        /**
+         * 通过支付流水记录,返回下单金额
+         */
+        MallMoneyFlow payFlow = mallMoneyFlowMapper.selectOneByMemberIdAndOrderNoAndTypeAndStatusAndIsReturn(
+                member.getId(),
+                orderInfo.getOrderNo(),
+                MallMoneyFlowTypeEnum.PAY.getCode(),
+                MallMoneyFlow.STATUS_SUCCESS,
+                MallMoneyFlow.IS_RETURN_N);
+        if(ObjectUtil.isNotEmpty(payFlow)){
+            memberWalletService.addBalance(payFlow.getAmount().negate(),payFlow.getRtMemberId());
+            payFlow.setIsReturn(MallMoneyFlow.IS_RETURN_Y);
+            mallMoneyFlowMapper.updateById(payFlow);
+        }
+        //产生补贴流水记录
+        agentProducer.sendDirectRewardMsg(orderInfo.getId());
+
     }
 
     @Override

--
Gitblit v1.9.1