From 86f2368f146af23c9e16507f790752e79858a29f Mon Sep 17 00:00:00 2001
From: Hentua <wangdoubleone@gmail.com>
Date: Thu, 22 Feb 2024 22:34:31 +0800
Subject: [PATCH] fix
---
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java | 843 +++++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 713 insertions(+), 130 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 7ef0eda..1b46a1c 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
@@ -1,38 +1,51 @@
package cc.mrbird.febs.mall.service.impl;
+import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.enumerates.*;
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.common.properties.XcxProperties;
+import cc.mrbird.febs.common.utils.*;
+import cc.mrbird.febs.mall.conversion.MallGoodsCommentConversion;
import cc.mrbird.febs.mall.conversion.MallOrderInfoConversion;
import cc.mrbird.febs.mall.conversion.MallOrderRefundConversion;
+import cc.mrbird.febs.mall.conversion.MallTeamLeaderConversion;
import cc.mrbird.febs.mall.dto.*;
import cc.mrbird.febs.mall.entity.*;
import cc.mrbird.febs.mall.mapper.*;
import cc.mrbird.febs.mall.service.*;
-import cc.mrbird.febs.mall.vo.OrderDetailVo;
-import cc.mrbird.febs.mall.vo.OrderListVo;
-import cc.mrbird.febs.mall.vo.OrderRefundVo;
+import cc.mrbird.febs.mall.vo.*;
+import cc.mrbird.febs.pay.model.BrandWCPayRequestData;
+import cc.mrbird.febs.pay.model.OrderStateDto;
import cc.mrbird.febs.pay.service.IPayService;
+import cc.mrbird.febs.pay.service.IXcxPayService;
+import cc.mrbird.febs.pay.util.WeixinServiceUtil;
import cc.mrbird.febs.rabbit.producter.AgentProducer;
+import cc.mrbird.febs.vip.service.IMallVipConfigBenefitsService;
+import cc.mrbird.febs.vip.service.IMallVipConfigService;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
-import java.text.SimpleDateFormat;
import java.util.*;
+import java.util.stream.Collectors;
/**
* @author wzy
@@ -48,6 +61,7 @@
private final MallAddressInfoMapper mallAddressInfoMapper;
private final MallOrderItemMapper mallOrderItemMapper;
private final MallMemberMapper memberMapper;
+ private final MallGoodsCommentMapper mallGoodsCommentMapper;
private final IApiMallMemberWalletService memberWalletService;
private final MallExpressInfoMapper expressInfoMapper;
private final MallOrderRefundMapper mallOrderRefundMapper;
@@ -59,15 +73,37 @@
private final AgentProducer agentProducer;
private final IPayService payService;
+ private final IXcxPayService iXcxPayService;
+ private final IMallAchieveService mallAchieveService;
+ private final MallRefundMapper mallRefundMapper;
+ private final MallTeamLeaderMapper mallTeamLeaderMapper;
+ private final MallMemberMapper mallMemberMapper;
+ private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
+ private final MallLeaderAchieveMapper mallLeaderAchieveMapper;
+ private final IApiMallTeamLeaderService iApiMallTeamLeaderService;
+ private final IMallElectronicFenceService iMallElectronicFenceService;
+ private final MallElectronicFenceMapper mallElectronicFenceMapper;
+ private final MallMemberCouponMapper mallMemberCouponMapper;
+ private final MallGoodsCouponMapper mallGoodsCouponMapper;
+ private final CouponGoodsMapper couponGoodsMapper;
+
+ private final IMallVipConfigService mallVipConfigService;
@Override
@Transactional(rollbackFor = Exception.class)
public Long createOrder(AddOrderDto addOrderDto) {
- MallMember member = LoginUserUtil.getLoginUser();
+ Long memberId = LoginUserUtil.getLoginUser().getId();
+ MallMember member = mallMemberMapper.selectById(memberId);
+ //验证用户的等级
+// if(AgentLevelEnum.ZERO_LEVEL.name().equals(member.getLevel())){
+// throw new FebsException("请先申请成为代理人");
+// }
+
+ //订单范围内才允许下单
MallAddressInfo address = mallAddressInfoMapper.selectAddressInfoByMemberIdAndId(member.getId(), addOrderDto.getAddressId());
- if (address == null) {
- throw new FebsException("地址不存在");
+ if(ObjectUtil.isEmpty(address)){
+ throw new FebsException("请重新选择收货地址信息");
}
String orderNo = MallUtils.getOrderNum();
@@ -76,105 +112,279 @@
orderInfo.setOrderTime(new Date());
orderInfo.setMemberId(member.getId());
orderInfo.setStatus(OrderStatusEnum.WAIT_PAY.getValue());
- orderInfo.setName(address.getName());
- orderInfo.setAddress(address.getArea() + address.getAddress());
- orderInfo.setPhone(address.getPhone());
- orderInfo.setLatitude(address.getLatitude());
- orderInfo.setLongitude(address.getLongitude());
orderInfo.setRemark(addOrderDto.getRemark());
orderInfo.setOrderType(addOrderDto.getOrderType());
-
+ orderInfo.setDeliveryType(2);
if (CollUtil.isEmpty(addOrderDto.getItems())) {
throw new FebsException("参数错误");
}
-
this.baseMapper.insert(orderInfo);
+
BigDecimal total = BigDecimal.ZERO;
- BigDecimal carriage = BigDecimal.ZERO;
+ /**
+ * 根据传入的优惠卷ID和商品明细集合计算出每个商品获取的实际支付金额
+ */
+ Map<Long, BigDecimal> couponAmountMap = new HashMap<>();
+ MallMemberCoupon mallMemberCoupon = new MallMemberCoupon();
+ if(ObjectUtil.isNotEmpty(addOrderDto.getMemberCouponId())){
+ Long memberCouponId = addOrderDto.getMemberCouponId();
+ mallMemberCoupon = mallMemberCouponMapper.selectById(memberCouponId);
+ if(ObjectUtil.isEmpty(mallMemberCoupon)){
+ throw new FebsException(mallMemberCoupon.getCouponName()+"无法使用");
+ }
+ Integer state = mallMemberCoupon.getState();
+ if(1 != state){
+ throw new FebsException(mallMemberCoupon.getCouponName()+"无法使用");
+ }
+ List<AddOrderItemDto> items = addOrderDto.getItems();
+ couponAmountMap = getCouponAmountMap(memberCouponId, items);
+ }
for (AddOrderItemDto item : addOrderDto.getItems()) {
- MallOrderItem orderItem = new MallOrderItem();
+ MallOrderItem orderItem = new MallOrderItem();
- // 积分商品提交订单
- if (addOrderDto.getOrderType() == 2) {
- MallGoods mallGoods = mallGoodsMapper.selectById(item.getSkuId());
- if (mallGoods.getStock() < item.getCnt()) {
- throw new FebsException(mallGoods.getGoodsName() + "库存不足");
- }
+ // 积分商品提交订单
+ 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() + "已下架");
- }
+ 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());
+ 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 (addOrderDto.getType() == 1) {
+ LambdaQueryWrapper<MallShoppingCart> delQuery = new LambdaQueryWrapper<>();
+ delQuery.eq(MallShoppingCart::getGoodsId, item.getSkuId())
+ .eq(MallShoppingCart::getMemberId, member.getId());
+ mallShoppingCartMapper.delete(delQuery);
+ }
+ total = total.add(amount);
+ } else {
+ MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(item.getSkuId());
+ if (sku == null) {
+ throw new FebsException("购买商品或sku不存在");
+ }
- if (sku.getStock() < item.getCnt()) {
- throw new FebsException(sku.getSkuName() + "库存不足");
- }
+// 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("样品只能购买一件");
+// }
+//
+// }
- MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId());
+ if (sku.getStock() < item.getCnt()) {
+ throw new FebsException(sku.getSkuName() + "库存不足");
+ }
- // 零撸专区购买
- 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("无法重复领取同一个商品");
+ 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 = sku.getPresentPrice().multiply(BigDecimal.valueOf(item.getCnt()));
+ //是否使用优惠卷
+ if(ObjectUtil.isNotEmpty(addOrderDto.getMemberCouponId())){
+ Long memberCouponId = addOrderDto.getMemberCouponId();
+ if(ObjectUtil.isNotEmpty(couponAmountMap.get(item.getSkuId()))){
+ BigDecimal skuCouponAmount = couponAmountMap.get(item.getSkuId());//使用折扣卷后的应该支付的钱
+ if(skuCouponAmount.compareTo(BigDecimal.ZERO) > 0){
+ amount = skuCouponAmount;
+ }
+ orderItem.setMemberCouponId(memberCouponId);
+ }
+ }
+ orderItem.setAmount(amount);
+ orderItem.setCnt(item.getCnt());
+ orderItem.setOrderId(orderInfo.getId());
+ orderItem.setPrice(sku.getPresentPrice());
+ orderItem.setGoodsId(sku.getGoodsId());
+ orderItem.setGoodsName(sku.getGoodsName());
+ orderItem.setSkuId(sku.getId());
+ orderItem.setState(1);
+ if(ObjectUtil.isNotEmpty(member.getReferrerId())){
+ orderItem.setMemberInviteId(member.getReferrerId());
+ }
+ if(ObjectUtil.isNotEmpty(addOrderDto.getMemberInviteId())){
+ orderItem.setMemberInviteId(addOrderDto.getMemberInviteId());
+ }
+
+ 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 (MallGoods.ISSALE_STATUS_DISABLED.equals(mallGoods.getIsSale())) {
- throw new FebsException(mallGoods.getGoodsName() + "已下架");
- }
-
- BigDecimal amount = sku.getPresentPrice().multiply(BigDecimal.valueOf(item.getCnt()));
- orderItem.setAmount(amount);
- orderItem.setCnt(item.getCnt());
- orderItem.setOrderId(orderInfo.getId());
- orderItem.setPrice(sku.getPresentPrice());
- orderItem.setGoodsId(sku.getGoodsId());
- orderItem.setGoodsName(sku.getGoodsName());
- orderItem.setSkuId(sku.getId());
- orderItem.setStyleName(sku.getStyleName());
- orderItem.setSkuName(sku.getSkuName());
- orderItem.setSkuImage(sku.getSkuImage());
- orderItem.setIsNormal(mallGoods.getIsNormal());
- orderItem.setCostPrice(sku.getCostPrice());
-
- total = total.add(amount);
- carriage = carriage.add(mallGoods.getCarriage());
-
- sku.setStock(sku.getStock() - item.getCnt());
- sku.setSkuVolume(sku.getSkuVolume() + item.getCnt());
- mallGoodsSkuMapper.updateById(sku);
-
- if (addOrderDto.getType() == 1) {
- mallShoppingCartMapper.delBySkuId(sku.getId(), member.getId());
- }
- }
- mallOrderItemMapper.insert(orderItem);
+ mallOrderItemMapper.insert(orderItem);
}
- orderInfo.setAmount(total);
- orderInfo.setCarriage(carriage);
- this.baseMapper.updateById(orderInfo);
+ mallMemberCoupon.setState(2);
+ mallMemberCouponMapper.updateById(mallMemberCoupon);
+ //运费
+ BigDecimal delivaryAmount = addOrderDto.getDeliveryAmount() == null ? BigDecimal.ZERO : addOrderDto.getDeliveryAmount();
+ orderInfo.setCarriage(delivaryAmount);
- agentProducer.sendOrderCancelDelayMsg(orderInfo.getId(), 15 * 60 * 1000L);
+ total = total.add(delivaryAmount);
+ orderInfo.setAmount(total);
+ orderInfo.setAddressId(address.getId());
+ orderInfo.setName(address.getName());
+ orderInfo.setPhone(address.getPhone());
+ orderInfo.setIsHome(addOrderDto.getIsHome());
+
+ if (StrUtil.isBlank(address.getLatitude())||StrUtil.isBlank(address.getLongitude())) {
+ throw new FebsException("请添加地址");
+ }
+ orderInfo.setAddress(address.getProvince()+address.getCity()+address.getArea() + address.getAddress());
+ orderInfo.setLatitude(address.getLatitude());
+ orderInfo.setLongitude(address.getLongitude());
+ this.baseMapper.updateById(orderInfo);
+ //过期时间修改成24小时
+ agentProducer.sendOrderCancelDelayMsg(orderInfo.getId(), 24 * 60 * 60 * 1000L);
return orderInfo.getId();
+ }
+
+ /**
+ * 根据传入的优惠卷ID和商品明细集合计算出每个商品获取的实际支付金额
+ * @param memberCouponId 优惠卷ID
+ * @param items 商品明细
+ * @return Map<Long,BigDecimal> skuId,实际支付金额
+ */
+ @Override
+ public Map<Long,BigDecimal> getCouponAmountMap(Long memberCouponId,List<AddOrderItemDto> items){
+ HashMap<Long,BigDecimal> couponAmountMap = new HashMap<>();
+ MallMemberCoupon mallMemberCoupon = mallMemberCouponMapper.selectById(memberCouponId);
+ if(ObjectUtil.isEmpty(mallMemberCoupon)){
+ return couponAmountMap;
+ }
+ Integer state = mallMemberCoupon.getState();
+ if(1 != state){
+ return couponAmountMap;
+ }
+ Long couponId = mallMemberCoupon.getCouponId();//优惠卷ID
+ List<Long> goodsIdsAll = couponGoodsMapper.selectByCouponId(couponId);
+ List<MallGoodsSku> skusAll = mallGoodsSkuMapper.selectSkuIdsByGoodsId(goodsIdsAll);//获取该优惠卷绑定的全部商品sku
+ List<Long> skuIdsAll = skusAll.stream().map(MallGoodsSku::getId).collect(Collectors.toList());//获取该优惠卷绑定的全部商品skuIDS
+ List<Long> skuIds = items.stream().map(AddOrderItemDto::getSkuId).collect(Collectors.toList());//订单中的全部skuIds
+
+ /**
+ * 获取这张优惠卷生效的skuIds
+ */
+ Set<Long> intersection = skuIdsAll.stream()
+ .filter(item -> skuIds.contains(item))
+ .collect(Collectors.toSet());//获取两个集合的交集
+ if(CollUtil.isEmpty(intersection)){
+ return couponAmountMap;
+ }
+ HashMap<Long,BigDecimal> skuMap = new HashMap<>();//每个订单详情的ID和amount的map
+ List<MallGoodsSku> skus = mallGoodsSkuMapper.selectByIds(new ArrayList<>(intersection));
+ BigDecimal totalAmount = BigDecimal.ZERO;//订单中的总金额
+ Map<Long, AddOrderItemDto> itemMap = new HashMap<>();// 预先将items转换为Map,以skuId作为键
+ for (AddOrderItemDto addOrderItemDto : items) {
+ itemMap.put(addOrderItemDto.getSkuId(), addOrderItemDto);
+ }
+ for(MallGoodsSku mallGoodsSku : skus){
+ Long id = mallGoodsSku.getId();
+ BigDecimal presentPrice = mallGoodsSku.getPresentPrice();
+ // 检查itemMap中是否存在该商品
+ AddOrderItemDto addOrderItemDto = itemMap.get(id);
+ if (addOrderItemDto != null) {
+ BigDecimal skuAmount = presentPrice.multiply(BigDecimal.valueOf(addOrderItemDto.getCnt()));
+ totalAmount = totalAmount.add(skuAmount);
+ skuMap.put(id,skuAmount);
+ }
+ }
+
+ /**
+ * 计算每个商品利用优惠卷打折的具体金额
+ */
+ MallGoodsCoupon mallGoodsCoupon = mallGoodsCouponMapper.selectById(mallMemberCoupon.getCouponId());
+ BigDecimal costAmount = mallGoodsCoupon.getCostAmount();
+ BigDecimal realAmount = mallGoodsCoupon.getRealAmount();
+ if(totalAmount.compareTo(costAmount) < 0){
+ return couponAmountMap;
+ }
+ HashMap<Long,BigDecimal> skuMapPercent = new HashMap<>();//每个订单详情的ID和amount的map
+ for (Map.Entry<Long,BigDecimal> entry : skuMap.entrySet()) {
+ Long keySkuId = entry.getKey();
+ BigDecimal valueSkuAmount = entry.getValue();
+ BigDecimal divide = valueSkuAmount.divide(totalAmount, 4, BigDecimal.ROUND_DOWN);//每个商品占符合满减的总额的比例
+ skuMapPercent.put(keySkuId,divide);
+ Integer type = mallGoodsCoupon.getType();
+ if(MallGoodsCoupon.TYPE_ONE == type){
+ BigDecimal bigDecimal = realAmount.multiply(divide).setScale(0, BigDecimal.ROUND_DOWN);//每个SKU的减免金额(比例*减免金额)
+ BigDecimal skuRealAmount = valueSkuAmount.subtract(bigDecimal.compareTo(BigDecimal.ZERO) > 0 ? bigDecimal : BigDecimal.ZERO);//实际支付金额
+ couponAmountMap.put(keySkuId,skuRealAmount);
+ }
+ if(MallGoodsCoupon.TYPE_TWO == type){
+ BigDecimal divideTime = totalAmount.divide(costAmount, 0, BigDecimal.ROUND_DOWN);//累计减免次数
+ BigDecimal multiply = divideTime.multiply(realAmount);//实际减免金额
+ BigDecimal bigDecimal = multiply.multiply(divide).setScale(0, BigDecimal.ROUND_DOWN);//每个SKU的减免金额(比例*实际减免金额)
+ BigDecimal skuRealAmount = valueSkuAmount.subtract(bigDecimal.compareTo(BigDecimal.ZERO) > 0 ? bigDecimal : BigDecimal.ZERO);//实际支付金额
+ couponAmountMap.put(keySkuId,skuRealAmount);
+ }
+ }
+ return couponAmountMap;
+ }
+
+ public static void main(String[] args) {
+ List<Integer> a = new ArrayList<>();
+ a.add(1);
+ a.add(2);
+ a.add(3);
+ List<Integer> b = new ArrayList<>();
+ b.add(3);
+ b.add(4);
+ b.add(5);
+ boolean b1 = a.retainAll(b);
+ System.out.println(b1);
+ System.out.println(a);
+ System.out.println(b);
+ List<Integer> intersection = a.stream()
+ .filter(item -> b.contains(item))
+ .collect(Collectors.toList());
+
+ System.out.println(intersection);
+
}
@@ -194,6 +404,82 @@
orderInfo.setStatus(OrderStatusEnum.CANCEL.getValue());
orderInfo.setCancelType(MallOrderInfo.CANCEL_BY_SELF);
this.baseMapper.updateById(orderInfo);
+
+ if (orderInfo.getOrderType() == 2) {
+// mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount(), MoneyFlowTypeEnum.REFUND.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.PRIZE_SCORE.getValue());
+// memberWalletService.add(orderInfo.getAmount(), member.getId(), "prizeScore");
+ return;
+ }
+
+ List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(orderInfo.getId());
+ if(CollUtil.isNotEmpty(mallOrderItemList)){
+ for(MallOrderItem mallOrderItem : mallOrderItemList){
+ MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(mallOrderItem.getSkuId());
+ if (sku == null) {
+ throw new FebsException("购买商品或sku不存在");
+ }
+
+ if (sku.getStock() < mallOrderItem.getCnt()) {
+ throw new FebsException(sku.getSkuName() + "库存不足");
+ }
+
+ MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId());
+ Integer goodsResult = mallGoodsMapper.updateStockAndVolumeByGoodsId(mallGoods.getId(), mallOrderItem.getCnt());
+ if(1 != goodsResult){
+ throw new FebsException(mallGoods.getGoodsName() + "库存不足");
+ }
+
+ Integer skuResult = mallGoodsSkuMapper.updateStockAndVolumeBySkuId(sku.getId(),mallOrderItem.getCnt());
+ if(1 != skuResult){
+ throw new FebsException(sku.getSkuName() + "库存不足");
+ }
+ Long memberCouponId = mallOrderItem.getMemberCouponId();
+ MallMemberCoupon mallMemberCoupon = mallMemberCouponMapper.selectById(memberCouponId);
+ if(ObjectUtil.isNotEmpty(mallMemberCoupon)){
+ mallMemberCoupon.setState(1);
+ mallMemberCouponMapper.updateById(mallMemberCoupon);
+ }
+ }
+ }
+
+ }
+
+ /**
+ * 根据用户ID和订单ID获取所购买商品名称
+ * @return 所含商品名称(多个以","隔开)
+ */
+ public String getProductNames(Long memberId, Long orderId) {
+ MallOrderInfo mallOrderInfo = this.baseMapper.selectOrderByMemberIdAndId(memberId, orderId);
+ List<MallOrderItem> details = mallOrderInfo.getItems();
+ if (CollectionUtils.isEmpty(details)) {
+ return "";
+ }
+ StringBuffer productNameBuffer = new StringBuffer();
+ Integer maxLength = 30;
+ for (int i = 0; i< details.size(); i++) {
+ MallOrderItem mallOrderItem = details.get(i);
+ String goodsName = mallOrderItem.getGoodsName();
+ if (goodsName == null) {
+ continue;
+ }
+ if (i == 0 && goodsName.length() > maxLength) {
+ productNameBuffer.append(goodsName.substring(0, maxLength) + "...");
+ break;
+ }
+ if ((productNameBuffer.length() + goodsName.length()) > maxLength) {
+ productNameBuffer.append("等");
+ break;
+ }
+ productNameBuffer.append(goodsName + ",");
+ }
+ String productNames = productNameBuffer.toString();
+ if (productNames.endsWith(",")) {
+ productNames = productNames.substring(0, productNames.length() - 1);
+ }
+ if (productNames.endsWith(",等")) {
+ productNames = productNames.substring(0, productNames.length() - 2) + "等";
+ }
+ return productNames;
}
@Override
@@ -210,12 +496,18 @@
}
String payResultStr = "";
+ String wxResultStr = "";
switch (payOrderDto.getType()) {
case "1":
-// orderInfo.setPayOrderNo(payOrderDto.getPayOrderNo());
-// orderInfo.setPayImage(payOrderDto.getPayImage());
+ BrandWCPayRequestData brandWCPayRequestData = null;
+ try {
+ brandWCPayRequestData = iXcxPayService.startPayment(orderInfo);
+ } catch (Exception e) {
+ throw new FebsException("支付失败");
+ }
+ wxResultStr = JSONUtil.toJsonStr(brandWCPayRequestData);
+ payResultStr = brandWCPayRequestData.getPrepay_id();
orderInfo.setPayMethod("微信支付");
- agentProducer.sendOrderReturn(orderInfo.getId());
break;
case "2":
if (StrUtil.isNotBlank(orderInfo.getPayOrderNo())) {
@@ -236,39 +528,11 @@
orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue());
orderInfo.setPayTime(new Date());
orderInfo.setPayResult("1");
+ orderInfo.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_WAIT.getValue());
- 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());
- }
+ mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue(),"余额支付",2);
- 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());
- }
- }
- }
-
- // 购买套餐后,升级为普通会员
- 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());
+ agentProducer.sendOrderCoupon(orderInfo.getId());
break;
case "4":
if (orderInfo.getOrderType() != 2) {
@@ -282,17 +546,22 @@
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(), ScoreFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.PRIZE_SCORE.getValue(), null, 2);
break;
default:
}
+ //订单支付成功产生一个提货码
+ String takeCode = ShareCodeUtil.toSerialCode(orderInfo.getId());
+ orderInfo.setTakeCode(takeCode);
this.baseMapper.updateById(orderInfo);
+
Map<String, Object> map = new HashMap<>();
map.put("orderInfo", payResultStr);
map.put("orderNo", orderInfo.getOrderNo());
map.put("orderId", orderInfo.getId());
+ map.put("wxResultStr", wxResultStr);
return map;
}
@@ -311,32 +580,49 @@
throw new FebsException("支付密码错误");
}
- memberWalletService.reduce(orderInfo.getAmount().add(orderInfo.getCarriage()), mallMember.getId(), field);
+ int reduce = memberWalletService.reduce(orderInfo.getAmount(), mallMember.getId(), field);
+ if (reduce == 2) {
+ throw new FebsException("余额不足");
+ }
return orderInfo.getOrderNo();
}
@Override
public List<OrderListVo> findOrderList(OrderListDto orderListDto) {
+ log.info("订单查询");
MallMember member = LoginUserUtil.getLoginUser();
IPage<MallOrderInfo> page = new Page<>(orderListDto.getPageNum(), orderListDto.getPageSize());
orderListDto.setMemberId(member.getId());
- IPage<MallOrderInfo> mallOrderInfos = this.baseMapper.selectApiOrderListInPage(page, orderListDto);
+// IPage<MallOrderInfo> mallOrderInfos = this.baseMapper.selectApiOrderListInPage(page, orderListDto);
+ IPage<MallOrderInfo> mallOrderInfos = this.baseMapper.selectNewApiOrderListInPage(page, orderListDto);
+ if (CollUtil.isNotEmpty(mallOrderInfos.getRecords())) {
+ mallOrderInfos.getRecords().forEach(item -> {
+ item.setItems(mallOrderItemMapper.selectListByOrderId(item.getId()));
+ });
+ }
return MallOrderInfoConversion.INSTANCE.entitysToVos(mallOrderInfos.getRecords());
}
@Override
public OrderDetailVo findOrderDetailsById(Long id) {
MallOrderInfo orderInfo = this.baseMapper.selectOrderDetailsById(id);
- if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) {
+// if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) {
+ if (ObjectUtil.isNull(orderInfo)) {
throw new FebsException("订单不存在");
+ }
+ List<MallOrderItem> items = orderInfo.getItems();
+ if(CollUtil.isNotEmpty(items)){
+ for(MallOrderItem mallOrderItem : items){
+ mallOrderItem.setItemAmount(mallOrderItemMapper.selectById(mallOrderItem.getId()).getAmount());
+ }
}
OrderDetailVo orderDetailVo = MallOrderInfoConversion.INSTANCE.entityToDetailVo(orderInfo);
- if (orderInfo.getStatus() == OrderStatusEnum.WAIT_FINISH.getValue()) {
- MallExpressInfo expressInfo = expressInfoMapper.selectByOrderId(orderInfo.getId());
+ MallExpressInfo expressInfo = expressInfoMapper.selectByOrderId(orderInfo.getId());
+ if(ObjectUtil.isNotEmpty(expressInfo)){
orderDetailVo.setExpressNo(expressInfo.getExpressNo());
orderDetailVo.setExpressCom(expressInfo.getExpressCom());
}
@@ -348,7 +634,7 @@
}
if (OrderStatusEnum.WAIT_PAY.getValue() == orderInfo.getStatus()) {
- Date endTime = DateUtil.offsetMinute(orderInfo.getOrderTime(), 15);
+ Date endTime = DateUtil.offsetMinute(orderInfo.getOrderTime(), 1440);
long remainTime = DateUtil.between(new Date(), endTime, DateUnit.SECOND, false);
orderDetailVo.setRemainTime(remainTime);
@@ -369,9 +655,48 @@
throw new FebsException("该状态不能确认收货");
}
+// if (orderInfo.getDeliveryState() != OrderDeliveryStateEnum.DELIVERY_FINISH.getValue()) {
+// throw new FebsException("还未送至自提点");
+// }
+
+ List<MallRefundEntity> mallRefundEntities = mallRefundMapper.selectByItemIdAndOrderIdAndState(null, orderInfo.getId(), 3);
+ if(CollUtil.isNotEmpty(mallRefundEntities)){
+ throw new FebsException("请先处理退款商品");
+ }
+
orderInfo.setStatus(OrderStatusEnum.FINISH.getValue());
orderInfo.setReceivingTime(new Date());
this.baseMapper.updateById(orderInfo);
+
+ agentProducer.sendGetScoreMsg(orderInfo.getId());
+ //生成一条团长提成记录
+// Long orderInfoId = orderInfo.getId();
+// List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(orderInfoId);
+// if(CollUtil.isNotEmpty(mallOrderItemList)){
+//
+// MallTeamLeader mallTeamLeader = mallTeamLeaderMapper.selectLeaderByUniqueCode(orderInfo.getTakeUniqueCode());
+// Integer profitSwitch = mallTeamLeader.getProfitSwitch()==null?2:mallTeamLeader.getProfitSwitch();
+// BigDecimal bonusPercent =new BigDecimal(mallTeamLeader.getBonusPercent()==null?"0":mallTeamLeader.getBonusPercent());
+//
+// if(1 == profitSwitch){
+// for(MallOrderItem mallOrderItem : mallOrderItemList){
+// Integer state = mallOrderItem.getState() == null ? 1 : mallOrderItem.getState();
+// if(1 == state){
+// MallLeaderAchieve mallLeaderAchieve = new MallLeaderAchieve();
+// mallLeaderAchieve.setMemberId(orderInfo.getMemberId());
+// mallLeaderAchieve.setOrderNo(orderInfo.getOrderNo());
+// mallLeaderAchieve.setOrderItemId(mallOrderItem.getId());
+// BigDecimal itemAmount = mallOrderItem.getAmount();
+// mallLeaderAchieve.setAmount(itemAmount);
+// BigDecimal bigDecimal = bonusPercent.multiply(itemAmount).setScale(2, BigDecimal.ROUND_DOWN);
+// mallLeaderAchieve.setProfitAmount(bigDecimal);
+// mallLeaderAchieve.setUniqueCode(orderInfo.getTakeUniqueCode());
+// mallLeaderAchieve.setState(MallLeaderAchieve.STATE_ONE);
+// mallLeaderAchieveMapper.insert(mallLeaderAchieve);
+// }
+// }
+// }
+// }
}
@Override
@@ -418,6 +743,13 @@
orderRefund.setRefundTime(new Date());
orderRefund.setBeforeStatus(beforeStatus);
orderRefund.setStatus(OrderRefundStatusEnum.REFUND_APPLY.getValue());
+
+ // 未发货则退运费,发货了则不退
+ if (beforeStatus == 2) {
+ orderRefund.setAmount(orderInfo.getAmount().add(orderInfo.getCarriage()));
+ } else {
+ orderRefund.setAmount(orderInfo.getAmount());
+ }
mallOrderRefundMapper.insert(orderRefund);
} else {
orderRefund.setDesp(addRefundDto.getDesp());
@@ -426,6 +758,12 @@
orderRefund.setRefundTime(new Date());
orderRefund.setBeforeStatus(beforeStatus);
orderRefund.setStatus(OrderRefundStatusEnum.REFUND_APPLY.getValue());
+ // 未发货则退运费,发货了则不退
+ if (beforeStatus == 2) {
+ orderRefund.setAmount(orderInfo.getAmount().add(orderInfo.getCarriage()));
+ } else {
+ orderRefund.setAmount(orderInfo.getAmount());
+ }
mallOrderRefundMapper.updateById(orderRefund);
}
@@ -470,6 +808,251 @@
orderInfo.setStatus(OrderStatusEnum.CANCEL.getValue());
orderInfo.setCancelType(MallOrderInfo.CANCEL_OVERTIME_NO_PAY);
this.baseMapper.updateById(orderInfo);
+
+ List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(orderInfo.getId());
+ if(CollUtil.isNotEmpty(mallOrderItemList)){
+ for(MallOrderItem mallOrderItem : mallOrderItemList){
+ MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(mallOrderItem.getSkuId());
+ if (sku == null) {
+ throw new FebsException("购买商品或sku不存在");
+ }
+
+// if (sku.getStock() < mallOrderItem.getCnt()) {
+// throw new FebsException(sku.getSkuName() + "库存不足");
+// }
+
+ MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId());
+ Integer goodsResult = mallGoodsMapper.updateStockAndVolumeByGoodsId(mallGoods.getId(), mallOrderItem.getCnt());
+ if(1 != goodsResult){
+ throw new FebsException(mallGoods.getGoodsName() + "库存不足");
+ }
+
+ Integer skuResult = mallGoodsSkuMapper.updateStockAndVolumeBySkuId(sku.getId(),mallOrderItem.getCnt());
+ if(1 != skuResult){
+ throw new FebsException(sku.getSkuName() + "库存不足");
+ }
+ }
+ }
}
}
+
+ @Override
+ @Transactional
+ public void goodsComment(ApiAddCommentDtos addCommentDtos) {
+ Long orderId = addCommentDtos.getOrderId();
+ MallMember member = LoginUserUtil.getLoginUser();
+ MallOrderInfo orderInfo = this.baseMapper.selectOrderDetailsById(orderId);
+ if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) {
+ throw new FebsException("订单不存在");
+ }
+ if (OrderStatusEnum.FINISH.getValue() != orderInfo.getStatus()) {
+ throw new FebsException("该状态不能评价");
+ }
+ if (MallOrderInfo.COMMENT_STATE_YES == orderInfo.getCommentState()) {
+ throw new FebsException("该状态不能评价");
+ }
+
+ orderInfo.setCommentState(MallOrderInfo.COMMENT_STATE_YES);
+ this.baseMapper.updateById(orderInfo);
+
+ List<ApiAddCommentDto> apiAddCommentDtos = addCommentDtos.getApiAddCommentDtos();
+ if(CollUtil.isNotEmpty(apiAddCommentDtos)){
+ for(ApiAddCommentDto apiAddCommentDto : apiAddCommentDtos){
+ Long skuId = apiAddCommentDto.getSkuId();
+ MallGoodsSku mallGoodsSku = mallGoodsSkuMapper.selectById(skuId);
+ Long goodsId = apiAddCommentDto.getGoodsId();
+ MallGoods mallGoods = mallGoodsMapper.selectById(goodsId);
+ MallGoodsComment mallGoodsComment = MallGoodsCommentConversion.INSTANCE.dtoToEntity(apiAddCommentDto);
+ mallGoodsComment.setMemberId(member.getId());
+ mallGoodsComment.setOrderId(orderId);
+ mallGoodsComment.setGoodsName(mallGoods.getGoodsName());
+ mallGoodsComment.setSkuName(mallGoodsSku.getSkuName());
+ mallGoodsComment.setStyleId(mallGoodsSku.getStyleId());
+ mallGoodsComment.setStyleName(mallGoodsSku.getStyleName());
+ mallGoodsComment.setShowState(MallGoodsComment.SHOW_STATE_ENABLE);
+ mallGoodsCommentMapper.insert(mallGoodsComment);
+ }
+ }
+ }
+
+ @Autowired
+ private WeixinServiceUtil weixinServiceUtil;
+ private final XcxProperties xcxProperties = SpringContextHolder.getBean(XcxProperties.class);
+
+ @Override
+ @Transactional
+ public FebsResponse refundOrder(Long id) {
+ MallMember member = LoginUserUtil.getLoginUser();
+ MallOrderInfo mallOrderInfo = this.baseMapper.selectById(id);
+ if(ObjectUtil.isEmpty(mallOrderInfo)){
+ return new FebsResponse().fail().message("订单不存在");
+ }
+ Integer status = mallOrderInfo.getStatus();
+ if(OrderStatusEnum.WAIT_SHIPPING.getValue() != status){
+ return new FebsResponse().fail().message("订单不是待发货状态");
+ }
+ Integer deliveryState = mallOrderInfo.getDeliveryState();
+ if(1 != deliveryState){
+ return new FebsResponse().fail().message("订单不是待配送状态");
+ }
+ //根据子订单生成退款记录
+ List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(id);
+ if(CollUtil.isEmpty(mallOrderItemList)){
+ return new FebsResponse().fail().message("订单不存在");
+ }
+ for(MallOrderItem mallOrderItem : mallOrderItemList){
+ QueryWrapper<MallRefundEntity> objectQueryWrapper = new QueryWrapper<>();
+ objectQueryWrapper.eq("member_id",member.getId());
+ objectQueryWrapper.eq("order_id",mallOrderInfo.getId());
+ objectQueryWrapper.eq("item_id",mallOrderItem.getId());
+ MallRefundEntity mallRefund = mallRefundMapper.selectOne(objectQueryWrapper);
+ MallRefundEntity mallRefundEntity = new MallRefundEntity();
+ if(ObjectUtil.isEmpty(mallRefund)){
+ mallRefundEntity.setRefundNo(mallOrderInfo.getOrderNo()+"_RITEM"+mallOrderItem.getId());
+ mallRefundEntity.setMemberId(member.getId());
+ mallRefundEntity.setOrderId(mallOrderInfo.getId());
+ mallRefundEntity.setItemId(mallOrderItem.getId());
+ if("余额支付".equals(mallOrderInfo.getPayMethod())){
+ mallRefundEntity.setType(3);
+ }else if("微信支付".equals(mallOrderInfo.getPayMethod())){
+ mallRefundEntity.setType(1);
+ }else{
+ mallRefundEntity.setType(3);
+ }
+ mallRefundEntity.setState(3);
+ mallRefundEntity.setAmount(mallOrderItem.getAmount());
+ mallRefundMapper.insert(mallRefundEntity);
+ }else{
+ if(mallRefund.getState() == 1){
+ return new FebsResponse().fail().message("订单已退款");
+ }
+ if(mallRefund.getState() == 2 || mallRefund.getState() == 3){
+ mallRefundEntity.setId(mallRefund.getId());
+ mallRefundEntity.setRefundNo(mallRefund.getRefundNo());
+ mallRefundEntity.setMemberId(mallRefund.getMemberId());
+ mallRefundEntity.setOrderId(mallRefund.getOrderId());
+ mallRefundEntity.setItemId(mallRefund.getItemId());
+ mallRefundEntity.setType(mallRefund.getType());
+ mallRefundEntity.setState(3);
+ mallRefundEntity.setAmount(mallRefund.getAmount());
+ mallRefundMapper.updateById(mallRefundEntity);
+ }
+ }
+ ApiLeaderRefundOrderDto apiLeaderRefundOrderDto = new ApiLeaderRefundOrderDto();
+ apiLeaderRefundOrderDto.setOrderId(mallOrderInfo.getId());
+ apiLeaderRefundOrderDto.setItemId(mallOrderItem.getId());
+ apiLeaderRefundOrderDto.setAgreeState(1);
+ iApiMallTeamLeaderService.leaderRefundOrder(apiLeaderRefundOrderDto);
+ }
+ return new FebsResponse().success();
+ }
+
+ @Override
+ public FebsResponse applyRefundOrder(ApplyRefundOrderDto applyRefundOrderDto) {
+ Long orderId = applyRefundOrderDto.getOrderId();
+ Long itemId = applyRefundOrderDto.getItemId();
+ MallMember member = LoginUserUtil.getLoginUser();
+ MallOrderInfo mallOrderInfo = this.baseMapper.selectById(orderId);
+ if(ObjectUtil.isEmpty(mallOrderInfo)){
+ return new FebsResponse().fail().message("订单不存在");
+ }
+
+ List<MallRefundEntity> mallRefundEntitieSuccess = mallRefundMapper.selectByItemIdAndOrderIdAndState(itemId,orderId,1);
+ List<MallRefundEntity> mallRefundEntitiesIng = mallRefundMapper.selectByItemIdAndOrderIdAndState(itemId,orderId,3);
+ if(CollUtil.isNotEmpty(mallRefundEntitieSuccess) || CollUtil.isNotEmpty(mallRefundEntitiesIng)){
+ return new FebsResponse().fail().message("该订单无法申请退款");
+ }
+
+ MallRefundEntity mallRefundEntity = new MallRefundEntity();
+ MallOrderItem mallOrderItem = mallOrderItemMapper.selectById(itemId);
+ if(ObjectUtil.isNotEmpty(mallOrderItem)){
+ mallOrderItem.setState(2);
+ mallOrderItemMapper.updateById(mallOrderItem);
+ mallRefundEntity.setRefundNo(mallOrderInfo.getOrderNo()+"_RITEM"+itemId);
+ mallRefundEntity.setItemId(itemId);
+ }else{
+
+ mallRefundEntity.setRefundNo(mallOrderInfo.getOrderNo()+"_R"+orderId);
+ }
+ mallRefundEntity.setRefundReason(applyRefundOrderDto.getRefundReason());
+ mallRefundEntity.setRefundRemark(applyRefundOrderDto.getRefundRemark());
+ mallRefundEntity.setRefundPic(applyRefundOrderDto.getRefundPic());
+ mallRefundEntity.setMemberId(member.getId());
+ mallRefundEntity.setState(3);
+ mallRefundEntity.setType(applyRefundOrderDto.getType());
+ mallRefundEntity.setOrderId(orderId);
+ mallRefundEntity.setAmount(mallOrderItem.getAmount());
+ mallRefundMapper.insert(mallRefundEntity);
+ return new FebsResponse().success().message("已申请");
+ }
+
+ @Override
+ public FebsResponse cancelRefundOrder(Long id) {
+ MallRefundEntity mallRefundEntity = mallRefundMapper.selectById(id);
+ mallRefundEntity.setState(2);
+ mallRefundMapper.updateById(mallRefundEntity);
+ Long itemId = mallRefundEntity.getItemId();
+ MallOrderItem mallOrderItem = mallOrderItemMapper.selectById(itemId);
+ mallOrderItem.setState(1);
+ mallOrderItemMapper.updateById(mallOrderItem);
+ return new FebsResponse().success().message("已取消");
+ }
+
+ @Override
+ public FebsResponse createOrderVerify(ApiCreateOrderVerifyDto apiCreateOrderVerifyDto) {
+ Long memberId = LoginUserUtil.getLoginUser().getId();
+ MallMember member = memberMapper.selectById(memberId);
+ List<AddOrderItemDto> items = apiCreateOrderVerifyDto.getItems();
+ if(CollUtil.isEmpty(items)){
+ return new FebsResponse().fail().message("请先挑选商品");
+ }
+ for (AddOrderItemDto item : apiCreateOrderVerifyDto.getItems()) {
+ MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(item.getSkuId());
+ if (sku == null) {
+ return new FebsResponse().fail().message("购买商品或sku不存在");
+ }
+// if("样品".equals(sku.getSample())){
+// List<MallOrderItem> mallOrderItems = mallOrderItemMapper.selectItemBySkuIdUnCancel(sku.getId(), member.getId());
+// if (CollUtil.isNotEmpty(mallOrderItems)) {
+// return new FebsResponse().fail().message("样品只能购买一次");
+// }
+// Integer cnt = item.getCnt();
+// if(1 < cnt){
+// return new FebsResponse().fail().message("样品只能购买一件");
+// }
+// }else{
+// //验证用户的等级
+// if(AgentLevelEnum.ZERO_LEVEL.name().equals(member.getLevel())){
+// return new FebsResponse().fail().message("请先申请成为合伙人");
+// }
+// }
+
+ if (sku.getStock() < item.getCnt()) {
+ return new FebsResponse().fail().message(sku.getSkuName() + "库存不足");
+ }
+
+ MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId());
+ if (MallGoods.ISSALE_STATUS_DISABLED.equals(mallGoods.getIsSale())) {
+ return new FebsResponse().fail().message(mallGoods.getGoodsName() + "已下架");
+ }
+ }
+
+ return new FebsResponse().success();
+ }
+
+ @Override
+ public FebsResponse chooseCoupon(ApiChooseCouponDto chooseCouponDto) {
+ Map<Long, BigDecimal> couponAmountMap = getCouponAmountMap(chooseCouponDto.getMemberCouponId(), chooseCouponDto.getItems());
+ ArrayList<ApiCouponAmountMapVo> objects = new ArrayList<>();
+ for (Map.Entry<Long,BigDecimal> entry : couponAmountMap.entrySet()) {
+ Long keySkuId = entry.getKey();
+ BigDecimal valueSkuAmount = entry.getValue();
+ ApiCouponAmountMapVo apiCouponAmountMapVo = new ApiCouponAmountMapVo();
+ apiCouponAmountMapVo.setId(keySkuId);
+ apiCouponAmountMapVo.setAmount(valueSkuAmount);
+ objects.add(apiCouponAmountMapVo);
+ }
+ return new FebsResponse().success().data(objects);
+ }
+
}
--
Gitblit v1.9.1