From 5282681f84634f83639f240bf5d5ee2a9eb649c0 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Tue, 13 Sep 2022 15:48:31 +0800
Subject: [PATCH] 20220902
---
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java | 348 +++++++++++++++++++++++++++++++---------------------------
1 files changed, 186 insertions(+), 162 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 fafe3d7..9e6f3ff 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
@@ -75,6 +75,7 @@
private final MallMemberMapper mallMemberMapper;
private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
private final MallLeaderAchieveMapper mallLeaderAchieveMapper;
+ private final IApiMallTeamLeaderService iApiMallTeamLeaderService;
@Override
@Transactional(rollbackFor = Exception.class)
@@ -83,6 +84,11 @@
String takeUniqueCode = addOrderDto.getTakeUniqueCode();
if(StrUtil.isEmpty(takeUniqueCode)){
throw new FebsException("请选择自提点");
+ }
+
+ MallTeamLeader mallTeamLeader = mallTeamLeaderMapper.selectLeaderByUniqueCode(takeUniqueCode);
+ if(ObjectUtil.isEmpty(mallTeamLeader)){
+ throw new FebsException("请重新选择团长");
}
String orderNo = MallUtils.getOrderNum();
@@ -105,83 +111,88 @@
BigDecimal total = BigDecimal.ZERO;
BigDecimal carriage = BigDecimal.ZERO;
for (AddOrderItemDto item : addOrderDto.getItems()) {
- MallOrderItem orderItem = new MallOrderItem();
+ synchronized(this){
+ 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());
- orderItem.setState(1);
+ 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不存在");
- }
+ 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 (sku.getStock() < item.getCnt()) {
+ throw new FebsException(sku.getSkuName() + "库存不足");
+ }
- MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId());
+ 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 (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() + "已下架");
+ }
+
+ mallGoods.setStock(mallGoods.getStock() - item.getCnt());
+ mallGoods.setVolume(mallGoods.getVolume() + item.getCnt());
+ mallGoodsMapper.updateById(mallGoods);
+
+ 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.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);
+ 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());
}
}
-
- 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.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);
- 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);
}
//配送费
BigDecimal delivaryAmount = addOrderDto.getDeliveryAmount() == null ? BigDecimal.ZERO : addOrderDto.getDeliveryAmount();
@@ -227,6 +238,23 @@
orderInfo.setStatus(OrderStatusEnum.CANCEL.getValue());
orderInfo.setCancelType(MallOrderInfo.CANCEL_BY_SELF);
this.baseMapper.updateById(orderInfo);
+ List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(id);
+ if(CollUtil.isNotEmpty(mallOrderItemList)){
+ for(MallOrderItem mallOrderItem : mallOrderItemList){
+ Long goodsId = mallOrderItem.getGoodsId();
+ Long skuId = mallOrderItem.getSkuId();
+ Integer cnt = mallOrderItem.getCnt();
+ MallGoods mallGoods = mallGoodsMapper.selectById(goodsId);
+ mallGoods.setVolume(mallGoods.getVolume() - cnt);
+ mallGoods.setStock(mallGoods.getStock() + cnt);
+ mallGoodsMapper.updateById(mallGoods);
+
+ MallGoodsSku mallGoodsSku = mallGoodsSkuMapper.selectById(skuId);
+ mallGoodsSku.setSkuVolume(mallGoodsSku.getSkuVolume() - cnt);
+ mallGoodsSku.setStock(mallGoodsSku.getStock() + cnt);
+ mallGoodsSkuMapper.updateById(mallGoodsSku);
+ }
+ }
}
/**
@@ -439,7 +467,8 @@
@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("订单不存在");
}
@@ -483,19 +512,41 @@
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);
//生成一条团长提成记录
- MallLeaderAchieve mallLeaderAchieve = new MallLeaderAchieve();
- mallLeaderAchieve.setMemberId(orderInfo.getMemberId());
- mallLeaderAchieve.setOrderNo(orderInfo.getOrderNo());
- BigDecimal subtract = orderInfo.getAmount().subtract(orderInfo.getCarriage() == null ? BigDecimal.ZERO : orderInfo.getCarriage());
- mallLeaderAchieve.setAmount(subtract);
- mallLeaderAchieve.setUniqueCode(orderInfo.getTakeUniqueCode());
- mallLeaderAchieve.setState(MallLeaderAchieve.STATE_ONE);
- mallLeaderAchieveMapper.insert(mallLeaderAchieve);
+ Long orderInfoId = orderInfo.getId();
+ List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(orderInfoId);
+ if(CollUtil.isNotEmpty(mallOrderItemList)){
+
+ MallTeamLeader mallTeamLeader = mallTeamLeaderMapper.selectLeaderByUniqueCode(orderInfo.getTakeUniqueCode());
+ BigDecimal bonusPercent =new BigDecimal(mallTeamLeader.getBonusPercent()==null?"0":mallTeamLeader.getBonusPercent());
+// DataDictionaryCustom dicBonusPercent = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.BONUS_PERCENT.getType(), DataDictionaryEnum.BONUS_PERCENT.getCode());
+// BigDecimal bonusPercent = new BigDecimal(dicBonusPercent.getValue()).setScale(2,BigDecimal.ROUND_DOWN);
+ 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
@@ -669,95 +720,56 @@
if(1 != deliveryState){
return new FebsResponse().fail().message("订单不是待配送状态");
}
- QueryWrapper<MallRefundEntity> objectQueryWrapper = new QueryWrapper<>();
- objectQueryWrapper.eq("member_id",member.getId());
- objectQueryWrapper.eq("order_id",mallOrderInfo.getId());
- MallRefundEntity mallRefund = mallRefundMapper.selectOne(objectQueryWrapper);
- MallRefundEntity mallRefundEntity = new MallRefundEntity();
- if(ObjectUtil.isEmpty(mallRefund)){
- mallRefundEntity.setRefundNo(mallOrderInfo.getOrderNo()+"_r");
- mallRefundEntity.setMemberId(member.getId());
- mallRefundEntity.setOrderId(mallOrderInfo.getId());
- mallRefundEntity.setType(1);
- mallRefundEntity.setState(3);
- mallRefundEntity.setAmount(mallOrderInfo.getAmount());
- mallRefundMapper.insert(mallRefundEntity);
- }else{
- if(mallRefund.getState() == 1){
- return new FebsResponse().fail().message("订单已退款");
- }
- if(mallRefund.getState() == 3){
- return new FebsResponse().fail().message("订单退款中");
- }
- if(mallRefund.getState() == 2){
- mallRefundEntity.setId(mallRefund.getId());
- mallRefundEntity.setRefundNo(mallRefund.getRefundNo());
- mallRefundEntity.setMemberId(mallRefund.getMemberId());
- mallRefundEntity.setOrderId(mallRefund.getOrderId());
- mallRefundEntity.setType(mallRefund.getType());
+ //根据子订单生成退款记录
+ 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(mallRefund.getAmount());
- mallRefundMapper.updateById(mallRefundEntity);
+ 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);
}
-
- //退款订单编号
- String orderNo = mallOrderInfo.getOrderNo();
- //退款退款编号
- String refundNo = mallRefundEntity.getRefundNo();
- //退款订单金额
- BigDecimal orderAmount = mallOrderInfo.getAmount();
- BigDecimal aa = new BigDecimal(100);
- int orderMoney = orderAmount.multiply(aa).intValue();
-
- //退款退款金额
- BigDecimal refundAmount = mallRefundEntity.getAmount();
- BigDecimal bb = new BigDecimal(100);
- int refundMoney = refundAmount.multiply(bb).intValue();
-
- Long refundId = mallRefundEntity.getId();
- MallRefundEntity mallRefundOld = mallRefundMapper.selectById(refundId);
- MallOrderInfo mallOrderInfoOld = this.baseMapper.selectByOrderNo(orderNo);
- //余额支付退款
- if(OrderPayMethodEnum.BALANCE.getName().equals(mallOrderInfo.getPayMethod())){
- mallRefundOld.setState(1);
- mallRefundMapper.updateById(mallRefundOld);
- mallOrderInfoOld.setStatus(OrderStatusEnum.REFUNDED.getValue());
- this.baseMapper.updateById(mallOrderInfoOld);
- mallMoneyFlowService.addMoneyFlow(mallOrderInfoOld.getMemberId(), mallOrderInfoOld.getAmount(), MoneyFlowTypeEnum.REFUND.getValue(), mallOrderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue());
- memberWalletService.add(refundAmount, member.getId(), "balance");
- mallOrderItemMapper.updateStateByOrderId(3,mallOrderInfoOld.getId());
- return new FebsResponse().success().message("退款成功");
- }
-
- Boolean flag = false;
- Boolean debug = xcxProperties.getDebug();
- if (debug) {
- boolean b = weixinServiceUtil.comRefund(orderNo, refundNo, 1, 1, null);
- flag = b;
- } else {
- log.info("开始调用退款接口。。。退款编号为{}", refundNo);
- boolean b = weixinServiceUtil.comRefund(orderNo, refundNo, orderMoney, refundMoney, null);
- flag = b;
- }
-
- /**
- * 更新退款表
- * 更新订单表
- */
- if(flag){
- mallRefundOld.setState(1);
- mallRefundMapper.updateById(mallRefundOld);
- mallOrderInfoOld.setStatus(OrderStatusEnum.REFUNDED.getValue());
- this.baseMapper.updateById(mallOrderInfoOld);
- mallOrderItemMapper.updateStateByOrderId(3,mallOrderInfoOld.getId());
- mallMoneyFlowService.addMoneyFlow(mallOrderInfoOld.getMemberId(), mallOrderInfoOld.getAmount(), MoneyFlowTypeEnum.REFUND.getValue(), mallOrderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue());
- }else{
- mallRefundOld.setState(2);
- mallRefundMapper.updateById(mallRefundOld);
- return new FebsResponse().fail().message("退款失败,请联系客服人员");
- }
- return new FebsResponse().success().message("退款成功");
+ return new FebsResponse().success();
}
@Override
@@ -799,4 +811,16 @@
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("已取消");
+ }
+
}
--
Gitblit v1.9.1