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