From 2cfceadff437135a255990ab9698788a48adb636 Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期二, 16 十二月 2025 09:54:00 +0800
Subject: [PATCH] 小程序 用户端接口开发

---
 server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java |  266 ++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 252 insertions(+), 14 deletions(-)

diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
index c026e4b..c5e1955 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
@@ -20,14 +20,12 @@
 import com.doumee.dao.business.join.PlanorderDetailJoinMapper;
 import com.doumee.dao.business.model.*;
 import com.doumee.dao.web.dto.CouponDTO;
-import com.doumee.dao.web.request.DealIntegralRequest;
-import com.doumee.dao.web.request.OrderPayRequest;
-import com.doumee.dao.web.request.PayDetailRequest;
-import com.doumee.dao.web.request.ShopOrderPayRequest;
+import com.doumee.dao.web.request.*;
 import com.doumee.dao.web.request.goods.MemberOrderRequest;
 import com.doumee.dao.web.request.goods.DealOrderRequest;
 import com.doumee.dao.web.request.goods.OrderCommentRequest;
 import com.doumee.dao.web.request.goods.OrderGoodsCommentRequest;
+import com.doumee.dao.web.response.HomeInfoResponse;
 import com.doumee.dao.web.response.MyPageResponse;
 import com.doumee.dao.web.response.goods.*;
 import com.doumee.service.business.AreasService;
@@ -78,7 +76,8 @@
     private ActivitySignMapper activitySignMapper;
     @Autowired
     private AftersaleMapper  aftersaleMapper;
-
+    @Autowired
+    private ShopGoodsRelationMapper shopGoodsRelationMapper;
     @Autowired
     private MemberMapper memberMapper;
 
@@ -98,7 +97,13 @@
     private ShopMapper shopMapper;
 
     @Autowired
+    private ShopGoodsRelationMapper relationMapper;
+
+    @Autowired
     private MemberCouponMapper memberCouponMapper;
+
+    @Autowired
+    private CollectMapper collectMapper;
 
     @Autowired
     private WxMiniUtilService wxMiniUtilService;
@@ -529,7 +534,6 @@
     /****************************************绉诲姩绔帴鍙e紑濮�********************************************************************/
 
 
-    @Override
     @Transactional(rollbackFor = {Exception.class,BusinessException.class})
     public PayResponse orderPay(OrderPayRequest orderPayRequest){
         Member member = memberMapper.selectById(orderPayRequest.getMemberId());
@@ -710,6 +714,7 @@
 
 
 
+    @Override
     @Transactional(rollbackFor = {Exception.class,BusinessException.class})
     public PayResponse orderPay(ShopOrderPayRequest orderPayRequest,MemberCouponServiceImpl memberCouponService){
         Member member = memberMapper.selectById(orderPayRequest.getMemberId());
@@ -750,7 +755,6 @@
             if(Objects.isNull(shop)){
                 throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"璇烽�夋嫨姝g‘鐨勮嚜鎻愰棬搴楋紒");
             }
-            //鍒ゆ柇闂ㄥ簵鏄惁璁剧疆鍟嗗搧鐨勪环鏍间俊鎭�
 
 
             //鏍规嵁閫夋嫨鍟嗘埛杩涜浼氬憳涓庡晢鎴蜂俊鎭粦瀹�
@@ -760,7 +764,6 @@
                         .eq(Member::getId,member.getId())
                 );
             }
-
             goodsorder.setPickUpShopId(shop.getId());
             goodsorder.setDistributionShopId(shop.getId());
             if(Objects.isNull(member.getBindShopId())){
@@ -780,6 +783,7 @@
         goodsorder.setPrice(orderPayConfirmResponse.getPayAmount());
         goodsorder.setTotalPrice(orderPayConfirmResponse.getAmount());
         goodsorder.setUseIntegral(orderPayConfirmResponse.getDeductIntegral());
+        goodsorder.setIntegral(goodsorder.getUseIntegral());
         goodsorder.setIntegralPrice(orderPayConfirmResponse.getIntegralAmount());
 
         if(Objects.nonNull(orderPayConfirmResponse.getMemberCoupon())){
@@ -839,6 +843,21 @@
             goodsOrderDetail.setCouponDeduct(payDetailRequest.getCouponDeductCash());
             goodsOrderDetail.setIntegralDeduct(payDetailRequest.getIntegralDeductCash());
             goodsOrderDetail.setOrderId(goodsorder.getId());
+
+            //鍒ゆ柇闂ㄥ簵鏄惁璁剧疆鍟嗗搧鐨勪环鏍间俊鎭�
+            if(Objects.nonNull(goodsorder.getDistributionShopId())){
+                ShopGoodsRelation shopGoodsRelation = relationMapper.selectOne(new QueryWrapper<ShopGoodsRelation>().lambda()
+                        .eq(ShopGoodsRelation::getIsdeleted,Constants.ZERO) .eq(ShopGoodsRelation::getShopId,goodsorder.getDistributionShopId())
+                        .eq(ShopGoodsRelation::getStatus,Constants.ZERO)
+                        .eq(ShopGoodsRelation::getIsdeleted,Constants.ZERO)
+                        .eq(ShopGoodsRelation::getGoodsSkuId,goodsOrderDetail.getGoodsSkuId())
+                        .last(" limit 1 ")
+                );
+                if(Objects.isNull(shopGoodsRelation)){
+                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝鍏宠仈缁忛攢鍟嗘湭缁戝畾["+goods.getName()+"]鍟嗗搧锛岃鑱旂郴绠$悊鍛橈紒");
+                }
+                goodsOrderDetail.setShopSettlement(shopGoodsRelation.getPrice());
+            }
             goodsOrderDetailList.add(goodsOrderDetail);
             //鍒犻櫎璐墿杞﹀晢鍝�
             shopcartMapper.delete(new QueryWrapper<Shopcart>().lambda()
@@ -847,12 +866,18 @@
             );
         }
         //绉垎鍙樺姩璁板綍
-        Integral integral =Integral.createIntegral(member.getId(),Constants.INTEGRAL_TYPE.ORDER_PAY,goodsorder.getId());
-        integral.setNum(goodsorder.getUseIntegral());
-        integral.setTotalNum(member.getIntegral().subtract(goodsorder.getUseIntegral()));
-        integralMapper.insert(integral);
-        //鏇存柊鐢ㄦ埛绉垎
-        memberMapper.subtractIntegral(member.getId(),goodsorder.getUseIntegral());
+        if(goodsorder.getUseIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){
+            //鏇存柊浣欓淇℃伅 娣诲姞绉垎鍙樺姩璁板綍
+            DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
+            dealIntegralRequest.setIntegralNum(goodsorder.getUseIntegral());
+            dealIntegralRequest.setDealType(Constants.ONE);
+            dealIntegralRequest.setMemberId(member.getId());
+            dealIntegralRequest.setObjId(goodsorder.getId());
+            dealIntegralRequest.setOrderCode(goodsorder.getCode().toString());
+            dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.SHOP_ORDER);
+            integralService.dealIntegral(dealIntegralRequest);
+        }
+
         if(goodsorder.getPrice().compareTo(orderPayRequest.getTitlePrice())!=Constants.ZERO){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍟嗗搧浠锋牸鍙戠敓鍙樺寲锛岃鍒锋柊鍚庨噸鏂版敮浠橈紒");
         }
@@ -962,6 +987,9 @@
             j.setImgUrl(fullUrl + j.getImgUrl());
         });
         memberOrderResponse.setMemberOrderDetailResponseList(memberOrderDetailResponseList);
+        if(Constants.equalsInteger(memberOrderResponse.getReceiveType(),Constants.ONE)){
+            memberOrderResponse.setShopInfo(shopMapper.selectById(memberOrderResponse.getShopId()));
+        }
         return memberOrderResponse;
     }
 
@@ -1079,6 +1107,88 @@
             }
         }
     }
+
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+    public void cancelOrderNew(Integer orderId,Integer optUserId,String cancelInfo){
+        if(Objects.isNull(orderId)){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        Goodsorder goodsorder = goodsorderMapper.selectById(orderId);
+        if(Objects.isNull(goodsorder)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(!(Constants.equalsInteger(goodsorder.getStatus(),Constants.OrderStatus.WAIT_PAY.getKey())
+        || Constants.equalsInteger(goodsorder.getStatus(),Constants.OrderStatus.PAY_DONE.getKey()) 
+        || Constants.equalsInteger(goodsorder.getStatus(),Constants.OrderStatus.WAIT_RECEIVE.getKey()) )){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鍙栨秷澶辫触锛氳鍗曠姸鎬佸凡娴佽浆锛�");
+        }
+        if(goodsorder.getPrice().compareTo(BigDecimal.ZERO)>Constants.ZERO){
+            //寰俊鐜伴噾閫�娆�
+            String refundCode = WxMiniUtilService.wxRefund(goodsorder.getCode().toString(), goodsorder.getPrice(), goodsorder.getPrice());
+            Fund fund = new Fund();
+            fund.setOrderCode(refundCode);
+            fund.setCreateDate(new Date());
+            fund.setIsdeleted(Constants.ZERO);
+            fund.setRemark(goodsorder.getId().toString());
+            fund.setMemberId(goodsorder.getCreator());
+            fund.setTitle("璁㈠崟鍙栨秷");
+            fund.setContent(StringUtils.isBlank(cancelInfo)?"鐢ㄦ埛涓诲姩鍙栨秷":cancelInfo);
+            fund.setObjId(goodsorder.getId());
+            fund.setObjType(Constants.ONE);
+            fund.setType(Constants.ONE);
+            fund.setNum(goodsorder.getPrice());
+            fundMapper.insert(fund);
+        }
+        if(goodsorder.getIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){
+            //鏇存柊浣欓淇℃伅 娣诲姞绉垎鍙樺姩璁板綍
+            DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
+            dealIntegralRequest.setIntegralNum(goodsorder.getIntegral());
+            dealIntegralRequest.setDealType(Constants.ZERO);
+            dealIntegralRequest.setMemberId(goodsorder.getMemberId());
+            dealIntegralRequest.setObjId(goodsorder.getId());
+            dealIntegralRequest.setOrderCode(goodsorder.getCode().toString());
+            dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.SHOP_ORDER_CANCEL);
+            integralService.dealIntegral(dealIntegralRequest);
+        }
+        //璁㈠崟淇℃伅鍙栨秷
+        goodsorder.setStatus(Constants.OrderStatus.CLOSE.getKey());
+        goodsorder.setCancelDate(new Date());
+        goodsorder.setCancelInfo(StringUtils.isBlank(cancelInfo)?"鐢ㄦ埛涓诲姩鍙栨秷":cancelInfo);
+        goodsorder.setCancelUser(optUserId);
+        goodsorderMapper.updateById(goodsorder);
+        String goodsName = "";
+        List<GoodsorderDetail> goodsorderDetailList =  goodsorderDetailMapper.selectList(new QueryWrapper<GoodsorderDetail>().eq("ORDER_ID",goodsorder.getId()));
+        if(!Objects.isNull(goodsorderDetailList)&&goodsorderDetailList.size()>Constants.ZERO){
+            for (GoodsorderDetail goodsorderDetail:goodsorderDetailList) {
+                GoodsSku goodsSku = goodsSkuMapper.selectById(goodsorderDetail.getGoodsSkuId());
+                if(StringUtils.isBlank(goodsName)){
+                    Goods goods = goodsMapper.selectById(goodsSku.getGoodsId());
+                    goodsName = goods.getName();
+                }
+                if(!Objects.isNull(goodsSku)){
+                    goodsSku.setStock(goodsSku.getStock().add(new BigDecimal(Constants.formatIntegerNum(goodsorderDetail.getGoodsNum()))));
+                    goodsSkuMapper.updateById(goodsSku);
+                }
+            }
+        }
+
+        //SendWxMessage.orderCancel(goodsorder,memberMapper.selectById(goodsorder.getMemberId()),goodsName);
+
+        //鏌ヨ浼樻儬鍒镐俊鎭褰�
+        if(!Objects.isNull(goodsorder.getCouponId())){
+            MemberCoupon memberCoupon = memberCouponMapper.selectById(goodsorder.getCouponId());
+            if(!Objects.isNull(memberCoupon)){
+                memberCoupon.setStatus(Constants.ZERO);
+                memberCouponMapper.updateById(memberCoupon);
+            }
+        }
+    }
+
+
+
+
 
     public BigDecimal getDeductAmount(List<PayDetailRequest> requestList){
         List<MemberCoupon> memberCouponList = new ArrayList<>();
@@ -1295,6 +1405,21 @@
         orderUrgeMapper.insert(orderUrge);
     }
 
+    @Override
+    public void delOrder(Integer orderId,Integer memberId){
+        Goodsorder goodsorder = goodsorderMapper.selectById(orderId);
+        if(!goodsorder.getMemberId().equals(memberId)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎿嶄綔澶辫触锛氱敤鎴蜂俊鎭尮閰嶅け璐ワ紒");
+        }
+        if(!goodsorder.getStatus().equals(Constants.OrderStatus.CLOSE.getKey())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎿嶄綔澶辫触锛氬綋鍓嶈鍗曠姸鎬侊紝鏃犳硶杩涜璇ユ搷浣滐紒");
+        }
+        goodsorder.setIsdeleted(Constants.ONE);
+        goodsorder.setEditDate(new Date());
+        goodsorderMapper.updateById(goodsorder);
+    }
+    
+    
 
     /**
      * 璁㈠崟纭鏀惰揣
@@ -1307,6 +1432,9 @@
         if(!goodsorder.getMemberId().equals(memberId)){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎿嶄綔澶辫触锛氱敤鎴蜂俊鎭尮閰嶅け璐ワ紒");
         }
+        if(Constants.equalsInteger(goodsorder.getReceiveType(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎿嶄綔澶辫触锛氳嚜鎻愯鍗曪紝鏃犳硶杩涜璇ユ搷浣滐紒");
+        }
         if(!goodsorder.getStatus().equals(Constants.OrderStatus.WAIT_RECEIVE.getKey())){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎿嶄綔澶辫触锛氳鍗曟湭鍙戣揣锛屾棤娉曡繘琛岀‘璁わ紒");
         }
@@ -1316,7 +1444,69 @@
         goodsorder.setStatus(Constants.OrderStatus.DONE.getKey());
         goodsorder.setDoneDate(new Date());
         goodsorderMapper.updateById(goodsorder);
+        //缁忛攢鍟嗗垎閿� 娣诲姞鍒嗛攢閲戦璁板綍
+        this.addShopIntegral(goodsorder);
     }
+
+    /**
+     * 璁㈠崟鏍搁攢
+     * @param code
+     * @param memberId
+     */
+    @Override
+    public void orderWriteOff(String exchangeCode,Integer memberId){
+        Goodsorder goodsorder = goodsorderMapper.selectOne(new QueryWrapper<Goodsorder>().lambda()
+                .eq(Goodsorder::getExchangeCode,exchangeCode)
+                .eq(Goodsorder::getIsdeleted,Constants.ZERO).last("limit 1 "));
+        if(Objects.isNull(goodsorder)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(!Constants.equalsInteger(goodsorder.getReceiveType(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎿嶄綔澶辫触锛氶厤閫佽鍗曪紝鏃犳硶杩涜璇ユ搷浣滐紒");
+        }
+        if(!goodsorder.getStatus().equals(Constants.OrderStatus.PAY_DONE.getKey())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎿嶄綔澶辫触锛氳鍗曠姸鎬佸凡娴佽浆锛屾棤娉曡繘琛岃鎿嶄綔锛�");
+        }
+        Shop shop = shopMapper.selectById(goodsorder.getPickUpShopId());/*selectOne(new QueryWrapper<Shop>().lambda().eq(Shop::getMemberId,memberId)
+                .eq(Shop::getIsdeleted,Constants.ZERO).last("limit 1 ")
+        );*/
+        if(Objects.isNull(shop)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌璁㈠崟鍏宠仈缁忛攢鍟嗕俊鎭�,璇疯仈绯荤鐞嗗憳");
+        }
+        if(!Constants.equalsInteger(shop.getMemberId(),memberId)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"["+shop.getName()+"]闈炴偍缁戝畾鐨勭粡閿�鍟嗭紝鏃犳硶杩涜璇ユ搷浣滐紒");
+        } 
+        goodsorder.setStatus(Constants.OrderStatus.DONE.getKey());
+        goodsorder.setDoneDate(new Date());
+        goodsorderMapper.updateById(goodsorder);
+        //缁忛攢鍟嗗垎閿� 娣诲姞鍒嗛攢閲戦璁板綍
+        this.addShopIntegral(goodsorder);
+    }
+
+
+    public void addShopIntegral(Goodsorder goodsorder){
+        if(Objects.isNull(goodsorder.getDistributionShopId())){
+            return;
+        }
+        List<GoodsorderDetail> detailList = goodsorderDetailMapper.selectList(new QueryWrapper<GoodsorderDetail>().lambda()
+                .eq(GoodsorderDetail::getOrderId,goodsorder.getId())
+                .isNotNull(GoodsorderDetail::getShopSettlement)
+        );
+        if(CollectionUtils.isNotEmpty(detailList)){
+            BigDecimal settlement = detailList.stream().map(i->i.getShopSettlement()).reduce(BigDecimal.ZERO,BigDecimal::add);
+            //鏇存柊浣欓淇℃伅 娣诲姞绉垎鍙樺姩璁板綍
+            DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
+            dealIntegralRequest.setIntegralNum(settlement);
+            dealIntegralRequest.setDealType(Constants.ZERO);
+            dealIntegralRequest.setMemberId(goodsorder.getDistributionShopId());
+            dealIntegralRequest.setObjId(goodsorder.getId());
+            dealIntegralRequest.setOrderCode(goodsorder.getCode().toString());
+            dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.SHOP_ORDER_SETTLEMENT);
+            integralService.dealShopIntegral(dealIntegralRequest);
+        }
+    }
+
+
 
 
     @Override
@@ -1533,4 +1723,52 @@
 
 
 
+
+    @Override
+    public HomeInfoResponse getHomeInfo(int memberId){
+        HomeInfoResponse homeInfoResponse = new HomeInfoResponse();
+        Member member = memberMapper.selectById(memberId);
+        if(Objects.isNull(member)){
+            return homeInfoResponse;
+        }
+        homeInfoResponse.setMember(member);
+        homeInfoResponse.setWaitReceiveNum(
+                goodsorderMapper.selectCount(new QueryWrapper<Goodsorder>().lambda().eq(Goodsorder::getIsdeleted,Constants.ZERO)
+                        .eq(Goodsorder::getMemberId,member.getId())
+                        .eq(Goodsorder::getStatus,Constants.OrderStatus.WAIT_RECEIVE.getKey()))
+        );
+        homeInfoResponse.setWaitPayNum(
+                goodsorderMapper.selectCount(new QueryWrapper<Goodsorder>().lambda().eq(Goodsorder::getIsdeleted,Constants.ZERO)
+                        .eq(Goodsorder::getMemberId,member.getId())
+                        .eq(Goodsorder::getStatus,Constants.OrderStatus.WAIT_PAY.getKey()))
+        );
+        homeInfoResponse.setCartTypeNum(
+                shopcartMapper.selectCount(new QueryWrapper<Shopcart>().lambda()
+                        .eq(Shopcart::getIsdeleted,Constants.ZERO)
+                        .eq(Shopcart::getMemberId,member.getId()))
+        );
+        homeInfoResponse.setCouponNum(
+                memberCouponMapper.selectCount(new QueryWrapper<MemberCoupon>().lambda()
+                        .eq(MemberCoupon::getIsdeleted,Constants.ZERO)
+                        .eq(MemberCoupon::getMemberId,member.getId())
+                        .eq(MemberCoupon::getStatus,Constants.ZERO)
+                        .apply(" end_date >now() ")
+                )
+        );
+        homeInfoResponse.setCollectNum(
+                collectMapper.selectCount(new QueryWrapper<Collect>().lambda()
+                        .eq(Collect::getIsdeleted,Constants.ZERO)
+                        .eq(Collect::getMemberId,member.getId())
+                )
+        );
+
+        return homeInfoResponse;
+
+
+    }
+
+
+
+
+
 }

--
Gitblit v1.9.3