From c9289c6477ea92fce66d191b4b2a41a9bad22b05 Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Thu, 21 Dec 2023 10:57:18 +0800
Subject: [PATCH] 富文本框输入版本变化

---
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallAppServiceImpl.java |  224 +++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 212 insertions(+), 12 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallAppServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallAppServiceImpl.java
index c43e24b..6fc27d6 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallAppServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallAppServiceImpl.java
@@ -1,22 +1,19 @@
 package cc.mrbird.febs.mall.service.impl;
 
 import cc.mrbird.febs.common.entity.FebsResponse;
+import cc.mrbird.febs.common.enumerates.OrderStatusEnum;
 import cc.mrbird.febs.common.exception.FebsException;
 import cc.mrbird.febs.common.utils.AppContants;
 import cc.mrbird.febs.common.utils.LoginUserUtil;
+import cc.mrbird.febs.common.utils.MallUtils;
 import cc.mrbird.febs.common.utils.RedisUtils;
+import cc.mrbird.febs.mall.conversion.MallOrderInfoConversion;
 import cc.mrbird.febs.mall.dto.*;
-import cc.mrbird.febs.mall.entity.MallAppMember;
-import cc.mrbird.febs.mall.entity.MallMember;
-import cc.mrbird.febs.mall.mapper.MallAppMemberMapper;
-import cc.mrbird.febs.mall.mapper.MallGoodsCategoryMapper;
-import cc.mrbird.febs.mall.mapper.MallGoodsMapper;
-import cc.mrbird.febs.mall.mapper.MallMemberMapper;
+import cc.mrbird.febs.mall.entity.*;
+import cc.mrbird.febs.mall.mapper.*;
 import cc.mrbird.febs.mall.service.IApiMallAppService;
-import cc.mrbird.febs.mall.vo.ApiMallAppMemberInfoVo;
-import cc.mrbird.febs.mall.vo.ApiMallGoodsListVo;
-import cc.mrbird.febs.mall.vo.MallGoodsCategoryVo;
-import cc.mrbird.febs.mall.vo.MallGoodsListVo;
+import cc.mrbird.febs.mall.vo.*;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
@@ -24,11 +21,16 @@
 import cn.hutool.crypto.asymmetric.KeyType;
 import cn.hutool.crypto.asymmetric.RSA;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -42,7 +44,13 @@
     private final MallMemberMapper mallMemberMapper;
     private final MallGoodsCategoryMapper mallGoodsCategoryMapper;
     private final MallGoodsMapper mallGoodsMapper;
+    private final MallOrderInfoMapper mallOrderInfoMapper;
+    private final MallOrderItemMapper mallOrderItemMapper;
+    private final MallMemberWalletMapper mallMemberWalletMapper;
 
+    public static void main(String[] args) {
+        System.out.println(SecureUtil.md5("a123456"));
+    }
     @Override
     public FebsResponse appToLogin(LoginDto loginDto) {
         String md5Pwd = SecureUtil.md5(loginDto.getPassword());
@@ -90,10 +98,202 @@
     }
 
     @Override
+    @Transactional
     public FebsResponse createAppOrder(ApiAddOrderDto addOrderDto) {
+        MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(addOrderDto.getMemberId());
+        if (ObjectUtil.isEmpty(mallMemberWallet)) {
+            throw new FebsException("用户钱包不存在。");
+        }
+        if (CollUtil.isEmpty(addOrderDto.getItems())) {
+            throw new FebsException("商品明细不能为空。");
+        }
+        Integer type = addOrderDto.getType();
+        String orderNo = MallUtils.getOrderNum();
+        MallOrderInfo orderInfo = new MallOrderInfo();
+        orderInfo.setOrderNo(orderNo);
+        orderInfo.setIsApp(AppContants.IS_APP_ORDER);
+        orderInfo.setOrderTime(new Date());
+        orderInfo.setMemberId(addOrderDto.getMemberId());
+        //会员结算
+        orderInfo.setStatus(OrderStatusEnum.WAIT_PAY.getValue());
+        mallOrderInfoMapper.insert(orderInfo);
+        BigDecimal total = BigDecimal.ZERO;//总支付金额
+        //订单子表记录
+        for (ApiAddOrderItemDto item : addOrderDto.getItems()) {
+            MallOrderItem orderItem = new MallOrderItem();
+            MallGoods mallGoods = mallGoodsMapper.selectById(item.getId());
+            //现价
+            BigDecimal presentPrice = new BigDecimal(mallGoods.getPresentPrice());
+            BigDecimal amount = presentPrice.multiply(item.getCnt());
+            orderItem.setAmount(amount);
+            orderItem.setOrderId(orderInfo.getId());
+            orderItem.setPrice(presentPrice);
+            orderItem.setAppCnt(item.getCnt());
+            orderItem.setGoodsId(mallGoods.getId());
+            orderItem.setGoodsName(mallGoods.getGoodsName());
+            orderItem.setSkuImage(mallGoods.getThumb());
+            orderItem.setState(1);
 
-//        return new FebsResponse().success().data(orderId).message("创建订单成功");
-        return new FebsResponse().success().message("创建订单成功");
+            total = total.add(amount);
+            mallOrderItemMapper.insert(orderItem);
+        }
+        orderInfo.setAmount(total);
+        orderInfo.setMemberId(mallMemberWallet.getMemberId());
+        //折扣费用
+        if(AppContants.INSURE_ORDER_MEMBER.equals(type)){
+            BigDecimal score = mallMemberWallet.getScore();//积分
+            BigDecimal balance = mallMemberWallet.getBalance();//余额
+
+            //这里将运费定义成折扣总金额
+            /**
+             * 积分 + 余额 1:1来折扣支付金额
+             */
+            BigDecimal totalCarriage = BigDecimal.ZERO;//总折扣金额
+            BigDecimal memberAmount = score.add(balance);//用户积分加余额总数
+            if(memberAmount.compareTo(BigDecimal.ZERO) > 0){
+                //折扣金额
+                if(total.compareTo(memberAmount) >= 0){
+                    totalCarriage = memberAmount;
+                }else{
+                    totalCarriage = total;
+                }
+                //减少用户积分和余额
+
+                BigDecimal avaAmount = totalCarriage;//剩余需要折扣的金额
+                if(avaAmount.compareTo(memberAmount) >= 0){
+                    //清零用户的积分和余额
+                    mallMemberWallet.setBalance(BigDecimal.ZERO);
+                    mallMemberWallet.setScore(BigDecimal.ZERO);
+                    mallMemberWalletMapper.updateBalanceScoreWithId(mallMemberWallet);
+                }else{
+                    /**
+                     * 先扣积分,再扣余额
+                     */
+                    if(avaAmount.compareTo(score) >= 0){
+                        mallMemberWallet.setScore(BigDecimal.ZERO);
+                        avaAmount = avaAmount.subtract(score);
+                    }else{
+                        mallMemberWallet.setScore(score.subtract(avaAmount));
+                        avaAmount = BigDecimal.ZERO;
+                    }
+                    //积分不够
+                    if(avaAmount.compareTo(BigDecimal.ZERO) > 0){
+                        mallMemberWallet.setBalance(balance.subtract(avaAmount));
+                    }else{
+                        mallMemberWallet.setBalance(balance);
+                    }
+                    mallMemberWalletMapper.updateBalanceScoreWithId(mallMemberWallet);
+                }
+            }
+            orderInfo.setCarriage(totalCarriage);
+        }
+        mallOrderInfoMapper.updateById(orderInfo);
+        Map<String, Object> orderInfoMap = new HashMap<>();
+        orderInfoMap.put("orderId", orderInfo.getId());
+        orderInfoMap.put("totalAmount", orderInfo.getAmount());
+        orderInfoMap.put("totalCarriage", orderInfo.getCarriage());
+        return new FebsResponse().success().data(orderInfoMap);
+    }
+
+    @Override
+    public FebsResponse registAppOrder(ApiRegistAppOrderDto addOrderDto) {
+        String orderNo = MallUtils.getOrderNum();
+        MallOrderInfo orderInfo = new MallOrderInfo();
+        orderInfo.setOrderNo(orderNo);
+        orderInfo.setIsApp(AppContants.IS_APP_ORDER);
+        orderInfo.setOrderTime(new Date());
+        orderInfo.setStatus(OrderStatusEnum.WAIT_PAY.getValue());
+        if (CollUtil.isEmpty(addOrderDto.getItems())) {
+            throw new FebsException("商品明细不能为空。");
+        }
+        mallOrderInfoMapper.insert(orderInfo);
+        BigDecimal total = BigDecimal.ZERO;//总支付金额
+        //订单子表记录
+        for (ApiAddOrderItemDto item : addOrderDto.getItems()) {
+            MallOrderItem orderItem = new MallOrderItem();
+            MallGoods mallGoods = mallGoodsMapper.selectById(item.getId());
+            //现价
+            BigDecimal presentPrice = new BigDecimal(mallGoods.getPresentPrice());
+            BigDecimal amount = presentPrice.multiply(item.getCnt());
+            orderItem.setAmount(amount);
+            orderItem.setOrderId(orderInfo.getId());
+            orderItem.setPrice(presentPrice);
+            orderItem.setAppCnt(item.getCnt());
+            orderItem.setGoodsId(mallGoods.getId());
+            orderItem.setGoodsName(mallGoods.getGoodsName());
+            orderItem.setSkuImage(mallGoods.getThumb());
+            orderItem.setState(1);
+            mallOrderItemMapper.insert(orderItem);
+
+            total = total.add(amount);
+        }
+        orderInfo.setAmount(total);
+        mallOrderInfoMapper.updateById(orderInfo);
+        return new FebsResponse().success().message("操作成功");
+    }
+
+    @Override
+    public FebsResponse normalInsure(ApiNormalInsureDto addOrderDto) {
+        String orderNo = MallUtils.getOrderNum();
+        MallOrderInfo orderInfo = new MallOrderInfo();
+        orderInfo.setOrderNo(orderNo);
+        orderInfo.setIsApp(AppContants.IS_APP_ORDER);
+        orderInfo.setOrderTime(new Date());
+        orderInfo.setStatus(OrderStatusEnum.WAIT_PAY.getValue());
+        if (CollUtil.isEmpty(addOrderDto.getItems())) {
+            throw new FebsException("商品明细不能为空。");
+        }
+        mallOrderInfoMapper.insert(orderInfo);
+        BigDecimal total = BigDecimal.ZERO;//总支付金额
+        //订单子表记录
+        for (ApiAddOrderItemDto item : addOrderDto.getItems()) {
+            MallOrderItem orderItem = new MallOrderItem();
+            MallGoods mallGoods = mallGoodsMapper.selectById(item.getId());
+            //现价
+            BigDecimal presentPrice = new BigDecimal(mallGoods.getPresentPrice());
+            BigDecimal amount = presentPrice.multiply(item.getCnt());
+            orderItem.setAmount(amount);
+            orderItem.setOrderId(orderInfo.getId());
+            orderItem.setPrice(presentPrice);
+            orderItem.setAppCnt(item.getCnt());
+            orderItem.setGoodsId(mallGoods.getId());
+            orderItem.setGoodsName(mallGoods.getGoodsName());
+            orderItem.setSkuImage(mallGoods.getThumb());
+            orderItem.setState(1);
+
+            total = total.add(amount);
+            mallOrderItemMapper.insert(orderItem);
+        }
+        orderInfo.setCarriage(BigDecimal.ZERO);//折扣费用
+        orderInfo.setAmount(total);
+        mallOrderInfoMapper.updateById(orderInfo);
+        Map<String, Object> orderInfoMap = new HashMap<>();
+        orderInfoMap.put("orderId", orderInfo.getId());
+        orderInfoMap.put("totalAmount", orderInfo.getAmount());
+        orderInfoMap.put("totalCarriage", orderInfo.getCarriage());
+        return new FebsResponse().success().data(orderInfoMap);
+    }
+
+    @Override
+    public FebsResponse getOrderList(ApiGetOrderListDto orderListDto) {
+        IPage<ApiGetOrderListVo> page = new Page<>(orderListDto.getPageNum(), orderListDto.getPageSize());
+        orderListDto.setStatus(OrderStatusEnum.WAIT_PAY.getValue());
+        IPage<ApiGetOrderListVo> apiGetOrderListVos = mallOrderInfoMapper.getAppOrderListInPage(page, orderListDto);
+        if (CollUtil.isNotEmpty(apiGetOrderListVos.getRecords())) {
+            apiGetOrderListVos.getRecords().forEach(item -> {
+                item.setItems(mallOrderItemMapper.getAppOrderItemByOrderId(item.getId()));
+            });
+        }
+        return new FebsResponse().success().data(apiGetOrderListVos);
+    }
+
+    @Override
+    public FebsResponse getOrder(ApiGetOrderDto apiGetOrderDto) {
+        ApiGetOrderListVo apiGetOrderListVo = mallOrderInfoMapper.getAppOrderByOrderId(apiGetOrderDto.getOrderId());
+        if(ObjectUtil.isNotEmpty(apiGetOrderListVo)){
+            apiGetOrderListVo.setItems(mallOrderItemMapper.getAppOrderItemByOrderId(apiGetOrderListVo.getId()));
+        }
+        return new FebsResponse().success().data(apiGetOrderListVo);
     }
 
     public String generateAsaToken(String token) {

--
Gitblit v1.9.1