From f12c2e007d8cf951568d04ec9ad3348acac47849 Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期一, 26 一月 2026 11:03:42 +0800
Subject: [PATCH] 小程序   接口开发

---
 server/dmmall_service/src/main/java/com/doumee/service/business/impl/AftersaleServiceImpl.java |  184 ++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 176 insertions(+), 8 deletions(-)

diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/AftersaleServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/AftersaleServiceImpl.java
index 05105fe..f3be3c6 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/AftersaleServiceImpl.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/AftersaleServiceImpl.java
@@ -12,13 +12,11 @@
 import com.doumee.core.utils.Utils;
 import com.doumee.core.wx.WxMiniUtilService;
 import com.doumee.dao.admin.response.AftersaleListResponse;
-import com.doumee.dao.business.AftersaleMapper;
-import com.doumee.dao.business.FundMapper;
-import com.doumee.dao.business.GoodsorderDetailMapper;
-import com.doumee.dao.business.GoodsorderMapper;
+import com.doumee.dao.business.*;
 import com.doumee.dao.business.join.AftersaleJoinMapper;
 import com.doumee.dao.business.model.*;
 import com.doumee.dao.web.dto.MultiFileDTO;
+import com.doumee.dao.web.request.AfterSaleApplyRequest;
 import com.doumee.dao.web.request.DealIntegralRequest;
 import com.doumee.dao.web.request.goods.AftersaleCancelRequest;
 import com.doumee.dao.web.request.goods.AftersaleCreateRequest;
@@ -43,10 +41,7 @@
 import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * 鍟嗗搧鍞悗淇℃伅琛⊿ervice瀹炵幇
@@ -64,6 +59,10 @@
     @Autowired
     private GoodsorderMapper goodsorderMapper;
     @Autowired
+    private ShopMapper shopMapper;
+    @Autowired
+    private MemberMapper memberMapper;
+    @Autowired
     private GoodsorderDetailMapper goodsorderDetailMapper;
     @Autowired
     private AftersaleJoinMapper aftersaleJoinMapper;
@@ -73,6 +72,9 @@
     @Autowired
     @Lazy
     private IntegralService integralService;
+
+    @Autowired
+    private MemberCouponJoinMapper memberCouponJoinMapper;
 
     @Autowired
     private FundMapper fundMapper;
@@ -1004,4 +1006,170 @@
     }
 
 
+
+    @Override
+    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+    public void afterSaleApply(AfterSaleApplyRequest afterSaleApplyRequest, Integer userId){
+        if(Objects.isNull(afterSaleApplyRequest)
+            || Objects.isNull(afterSaleApplyRequest.getOrderId())
+                || Objects.isNull(afterSaleApplyRequest.getReturnUseIntegralStatus())
+                || Objects.isNull(afterSaleApplyRequest.getReturnUseCouponStatus())
+                || Objects.isNull(afterSaleApplyRequest.getReturnShopSettlementStatus())
+                || Objects.isNull(afterSaleApplyRequest.getReturnShopIntegralStatus())
+                || Objects.isNull(afterSaleApplyRequest.getReturnIntegralStatus())
+                || Objects.isNull(afterSaleApplyRequest.getMoney())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+
+        Goodsorder goodsorder = goodsorderMapper.selectById(afterSaleApplyRequest.getOrderId());
+        if(Objects.isNull(goodsorder)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(!(Constants.equalsInteger(goodsorder.getStatus(),Constants.OrderStatus.WAIT_RECEIVE.getKey())
+            || Constants.equalsInteger(goodsorder.getStatus(),Constants.OrderStatus.DONE.getKey()))){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆锛屾棤娉曡繘琛岃鎿嶄綔锛�");
+        }
+        Aftersale aftersale = new Aftersale();
+        aftersale.setCreateDate(new Date());
+        aftersale.setIsdeleted(Constants.ZERO);
+        aftersale.setOrderId(goodsorder.getId());
+        aftersale.setType(Constants.ZERO);
+        aftersale.setContent(afterSaleApplyRequest.getRemark());
+        aftersale.setStatus(Constants.AftersaleStatus.DONE.getKey());
+        aftersale.setInfo(afterSaleApplyRequest.getRemark());
+        aftersale.setMoney(afterSaleApplyRequest.getMoney());
+        aftersale.setCoupon(goodsorder.getCouponPrice());
+        aftersale.setReturnShopIntegral(BigDecimal.ZERO);
+        aftersale.setReturnIntegral(BigDecimal.ZERO);
+        aftersale.setReturnShopSettlement(BigDecimal.ZERO);
+        aftersale.setCode(getNextInCode());
+
+        //璁㈠崟閫�鍥� 杩斿洖缁欑粡閿�鍟嗙殑绉垎
+        if(Objects.nonNull(goodsorder.getDistributionShopId())&&goodsorder.getReturnCustomerIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){
+            Shop shop = shopMapper.selectById(goodsorder.getDistributionShopId());
+            //缁忛攢鍟嗗瓨鍦ㄥ墿浣欑Н鍒�
+            if(Objects.nonNull(shop)&&shop.getIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){
+                //寮�鍚簡鎵i櫎杩旇繕缁忛攢鍟嗙Н鍒�
+                if(Constants.equalsInteger(afterSaleApplyRequest.getReturnShopIntegralStatus(),Constants.ONE)){
+                    //璁板綍鎵i櫎缁忛攢鍟嗙Н鍒嗗��
+                    aftersale.setReturnShopIntegral(shop.getIntegral().compareTo(goodsorder.getReturnCustomerIntegral())>Constants.ZERO
+                            ?goodsorder.getReturnCustomerIntegral():shop.getIntegral());
+                    DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
+                    dealIntegralRequest.setIntegralNum(aftersale.getReturnShopIntegral());
+                    dealIntegralRequest.setDealType(Constants.ONE);
+                    dealIntegralRequest.setMemberId(goodsorder.getDistributionShopId());
+                    dealIntegralRequest.setObjId(goodsorder.getId());
+                    dealIntegralRequest.setOrderCode(goodsorder.getCode().toString());
+                    dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.SHOP_ORDER_REFUND_INTEGRAL);
+                    integralService.dealShopIntegral(dealIntegralRequest);
+                }
+            }
+        }
+
+        //璁㈠崟閫�鍥� 缁忛攢鍟嗙粨绠椾綑棰�
+        if(Objects.nonNull(goodsorder.getDistributionShopId())&&goodsorder.getShopSettlement().compareTo(BigDecimal.ZERO)>Constants.ZERO){
+            Shop shop = shopMapper.selectById(goodsorder.getDistributionShopId());
+            //缁忛攢鍟嗗瓨鍦ㄥ墿浣欑Н鍒�
+            if(Objects.nonNull(shop)&&shop.getAmount().compareTo(BigDecimal.ZERO)>Constants.ZERO){
+                //寮�鍚簡鎵i櫎杩旇繕缁忛攢鍟嗙Н鍒�
+                if(Constants.equalsInteger(afterSaleApplyRequest.getReturnShopSettlementStatus(),Constants.ONE)){
+                    //璁板綍鎵i櫎缁忛攢鍟嗙Н鍒嗗��
+                    aftersale.setReturnShopSettlement(shop.getAmount().compareTo(goodsorder.getShopSettlement())>Constants.ZERO
+                            ?goodsorder.getShopSettlement():shop.getAmount());
+                    DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
+                    dealIntegralRequest.setIntegralNum(aftersale.getReturnShopIntegral());
+                    dealIntegralRequest.setDealType(Constants.ONE);
+                    dealIntegralRequest.setMemberId(goodsorder.getDistributionShopId());
+                    dealIntegralRequest.setObjId(goodsorder.getId());
+                    dealIntegralRequest.setOrderCode(goodsorder.getCode().toString());
+                    dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.SHOP_ORDER_REFUND_CASH);
+                    integralService.dealShopAmount(dealIntegralRequest);
+
+                }
+            }
+        }
+
+        //璁㈠崟閫�鍥� 杩旇繕缁欏鎴风殑绉垎
+        if(Objects.nonNull(goodsorder.getDistributionShopId())&&goodsorder.getReturnMemberIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){
+            Member member = memberMapper.selectById(goodsorder.getMemberId());
+            //瀹㈡埛瀛樺湪鍓╀綑绉垎
+            if(Objects.nonNull(member)&&member.getIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){
+                //寮�鍚簡鎵i櫎杩旇繕瀹㈡埛绉垎
+                if(Constants.equalsInteger(afterSaleApplyRequest.getReturnIntegralStatus(),Constants.ONE)){
+                    //璁板綍鎵i櫎缁忛攢鍟嗙Н鍒嗗��
+                    aftersale.setReturnIntegral(member.getIntegral().compareTo(goodsorder.getReturnCustomerIntegral())>Constants.ZERO
+                            ?goodsorder.getReturnCustomerIntegral():member.getIntegral());
+                    DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
+                    dealIntegralRequest.setIntegralNum(aftersale.getReturnShopIntegral());
+                    dealIntegralRequest.setDealType(Constants.ONE);
+                    dealIntegralRequest.setMemberId(member.getId());
+                    dealIntegralRequest.setObjId(goodsorder.getId());
+                    dealIntegralRequest.setOrderCode(goodsorder.getCode().toString());
+                    dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.MEMBER_ORDER_REFUND_RETURN);
+                    integralService.dealIntegral(dealIntegralRequest);
+                }
+            }
+        }
+
+        //璁㈠崟閫�娆� 杩旇繕瀹㈡埛浣跨敤鐨勭Н鍒�
+        if(Constants.equalsInteger(afterSaleApplyRequest.getReturnIntegralStatus(),Constants.ONE)
+            && goodsorder.getUseIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){
+            DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
+            dealIntegralRequest.setIntegralNum(aftersale.getReturnShopIntegral());
+            dealIntegralRequest.setDealType(Constants.ZERO);
+            dealIntegralRequest.setMemberId(goodsorder.getMemberId());
+            dealIntegralRequest.setObjId(goodsorder.getId());
+            dealIntegralRequest.setOrderCode(goodsorder.getCode().toString());
+            dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.MEMBER_ORDER_REFUND);
+            integralService.dealIntegral(dealIntegralRequest);
+        }
+
+        //璁㈠崟閫�娆� 閫�鍥炲鎴蜂娇鐢ㄧ殑浼樻儬鍒�
+        if(Constants.equalsInteger(afterSaleApplyRequest.getReturnUseCouponStatus(),Constants.ONE)
+            && Objects.nonNull(goodsorder.getCouponId())){
+            memberCouponJoinMapper.update(new UpdateWrapper<MemberCoupon>().lambda()
+                    .set(MemberCoupon::getStatus, Constants.ZERO)
+                    .eq(MemberCoupon::getId, goodsorder.getCouponId())
+            );
+        }
+
+
+        if(afterSaleApplyRequest.getMoney().compareTo(BigDecimal.ZERO)>Constants.ZERO
+             && afterSaleApplyRequest.getMoney().compareTo(goodsorder.getPrice())<=Constants.ZERO){
+            //璁㈠崟閫�娆�
+            String refundCode = WxMiniUtilService.wxRefund(goodsorder.getCode().toString(), goodsorder.getPrice(), afterSaleApplyRequest.getMoney());
+            Fund fund = new Fund();
+            fund.setOrderCode(refundCode);
+            fund.setCreator(userId);
+            fund.setCreateDate(new Date());
+            fund.setIsdeleted(Constants.ZERO);
+            fund.setRemark(userId.toString());
+            fund.setMemberId(goodsorder.getCreator());
+            fund.setTitle("璁㈠崟閫�娆�");
+            fund.setContent(afterSaleApplyRequest.getRemark());
+            fund.setObjId(goodsorder.getId());
+            fund.setObjType(Constants.ONE);
+            fund.setType(Constants.ZERO);
+            fund.setNum(goodsorder.getPrice());
+            fundMapper.insert(fund);
+            aftersale.setDrawbackNo(refundCode);
+            aftersale.setDrawbackDate(new Date());
+            aftersale.setDrawbackInfo(afterSaleApplyRequest.getRemark());
+            aftersale.setDrawbackNo(refundCode);
+
+        }
+        aftersaleMapper.insert(aftersale);
+
+        goodsorderMapper.update(null,new UpdateWrapper<Goodsorder>().lambda()
+                .set(Goodsorder::getStatus, Constants.OrderStatus.REFUND.getKey())
+                .eq(Goodsorder::getId, goodsorder.getId())
+        );
+
+    }
+
+
+
+
+
 }

--
Gitblit v1.9.3