From 7869fa712c19c351a48bfb0af11b0fe87b17c184 Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期三, 14 一月 2026 15:14:00 +0800
Subject: [PATCH] 小程序 用户端接口开发

---
 server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java |  634 +++++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 517 insertions(+), 117 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..4611954 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
@@ -19,15 +19,11 @@
 import com.doumee.dao.business.join.GoodsorderJoinMapper;
 import com.doumee.dao.business.join.PlanorderDetailJoinMapper;
 import com.doumee.dao.business.model.*;
+import com.doumee.dao.system.dto.PlatformConfigDTO;
 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.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.request.*;
+import com.doumee.dao.web.request.goods.*;
+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;
@@ -37,6 +33,7 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.doumee.service.business.IntegralService;
+import com.doumee.service.system.SystemDictDataService;
 import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest;
 import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
 import com.github.binarywang.wxpay.bean.result.WxPayRefundResult;
@@ -56,6 +53,7 @@
 
 import javax.servlet.http.HttpServletRequest;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.util.*;
@@ -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;
@@ -120,6 +125,9 @@
 
     @Autowired
     private SystemDictDataBiz systemDictDataBiz;
+
+    @Autowired
+    private SystemDictDataService systemDictDataService;
 
     @Autowired
     private PlanorderDetailJoinMapper planorderDetailJoinMapper;
@@ -529,7 +537,6 @@
     /****************************************绉诲姩绔帴鍙e紑濮�********************************************************************/
 
 
-    @Override
     @Transactional(rollbackFor = {Exception.class,BusinessException.class})
     public PayResponse orderPay(OrderPayRequest orderPayRequest){
         Member member = memberMapper.selectById(orderPayRequest.getMemberId());
@@ -710,6 +717,7 @@
 
 
 
+    @Override
     @Transactional(rollbackFor = {Exception.class,BusinessException.class})
     public PayResponse orderPay(ShopOrderPayRequest orderPayRequest,MemberCouponServiceImpl memberCouponService){
         Member member = memberMapper.selectById(orderPayRequest.getMemberId());
@@ -723,7 +731,7 @@
         goodsorder.setMemberId(member.getId());
         goodsorder.setType(Constants.ZERO);
         goodsorder.setStatus(Constants.ZERO);
-
+        Shop shop = null;
         if(Constants.equalsInteger(orderPayRequest.getReceiveType(),Constants.ZERO)){
             //鏌ヨ鏀惰揣鍦板潃
             Addr addr = addrMapper.selectById(orderPayRequest.getAddressId());
@@ -734,24 +742,22 @@
             if(Objects.isNull(area)){
                 throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏀惰揣鍦板潃鍖哄垝淇℃伅鍙戠敓鍙樺寲锛岃鏇存柊鍚庝笅鍗曪紒");
             }
-
             goodsorder.setAddrId(addr.getId());
             goodsorder.setLinkaddr(area.getProvinceName()+area.getCityName() + area.getName() + addr.getAddr());
             goodsorder.setLinkphone(addr.getPhone());
             goodsorder.setLinkname(addr.getName());
             if(Objects.nonNull(member.getBindShopId())){
                 goodsorder.setDistributionShopId(member.getBindShopId());
+                shop = shopMapper.selectById(member.getBindShopId());
             }
         }else{
             if(Objects.isNull(orderPayRequest.getShopId())){
                 throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"璇烽�夋嫨姝g‘鐨勮嚜鎻愰棬搴楋紒");
             }
-            Shop shop = shopMapper.selectById(orderPayRequest.getShopId());
+            shop = shopMapper.selectById(orderPayRequest.getShopId());
             if(Objects.isNull(shop)){
                 throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"璇烽�夋嫨姝g‘鐨勮嚜鎻愰棬搴楋紒");
             }
-            //鍒ゆ柇闂ㄥ簵鏄惁璁剧疆鍟嗗搧鐨勪环鏍间俊鎭�
-
 
             //鏍规嵁閫夋嫨鍟嗘埛杩涜浼氬憳涓庡晢鎴蜂俊鎭粦瀹�
             if(Objects.isNull(member.getBindShopId())){
@@ -760,47 +766,47 @@
                         .eq(Member::getId,member.getId())
                 );
             }
-
             goodsorder.setPickUpShopId(shop.getId());
             goodsorder.setDistributionShopId(shop.getId());
             if(Objects.isNull(member.getBindShopId())){
                 member.setBindShopId(shop.getId());
             }
         }
+
         //鍗曟嵁缂栧彿 鑷
         goodsorder.setCode(getNextInCode());
         //璁$畻璁㈠崟鎬婚噾棰�
         BigDecimal sumPrice = BigDecimal.ZERO;
 
         //瀛樺偍璁板綍鏄庣粏
-        OrderPayConfirmResponse orderPayConfirmResponse = this.orderPayConfirm(orderPayRequest.getReceiveType(),orderPayRequest.getPayDetailRequestList(),orderPayRequest.getAddressId(),memberCouponService,member.getId());
+        OrderPayConfirmRequest payConfirmRequest = new OrderPayConfirmRequest();
+        payConfirmRequest.setReceiveType(orderPayRequest.getReceiveType());
+        payConfirmRequest.setPayDetailRequestList(orderPayRequest.getPayDetailRequestList());
+        payConfirmRequest.setAddressId(orderPayRequest.getAddressId());
+        payConfirmRequest.setMemberId(member.getId());
+        payConfirmRequest.setCouponId(orderPayRequest.getCouponId());
+        //閫氳繃鏀粯纭鎺ュ彛鑾峰彇鐢熸垚鏀粯淇℃伅
+        OrderPayConfirmResponse orderPayConfirmResponse = this.orderPayConfirm(payConfirmRequest,memberCouponService);
         if(Objects.isNull(orderPayConfirmResponse)){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"绯荤粺鏀粯閿欒,璇疯仈绯荤鐞嗗憳");
         }
         goodsorder.setPrice(orderPayConfirmResponse.getPayAmount());
         goodsorder.setTotalPrice(orderPayConfirmResponse.getAmount());
         goodsorder.setUseIntegral(orderPayConfirmResponse.getDeductIntegral());
+        goodsorder.setIntegral(goodsorder.getUseIntegral());
         goodsorder.setIntegralPrice(orderPayConfirmResponse.getIntegralAmount());
-
+        goodsorder.setMailPrice(orderPayConfirmResponse.getMailAmount());
+        goodsorder.setPayMethod(goodsorder.getPrice().compareTo(BigDecimal.ZERO)>Constants.ZERO?Constants.ZERO:Constants.ONE);
         if(Objects.nonNull(orderPayConfirmResponse.getMemberCoupon())){
-            MemberCoupon memberCoupon = memberCouponMapper.selectById(orderPayConfirmResponse.getMemberCoupon().getId());
-            if(Objects.isNull(memberCoupon)){
-                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌浼樻儬鍒镐俊鎭紒");
-            }
-            if(memberCoupon.getStatus().equals(Constants.ONE)){
-                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"浼樻儬鍒稿凡浣跨敤锛�");
-            }
-            sumPrice = sumPrice.subtract(memberCoupon.getPrice());
-            goodsorder.setCouponId(memberCoupon.getId());
+            sumPrice = sumPrice.subtract(orderPayConfirmResponse.getMemberCoupon().getPrice());
+            goodsorder.setCouponId(orderPayConfirmResponse.getMemberCoupon().getId());
             goodsorder.setCouponPrice(orderPayConfirmResponse.getMemberCoupon().getValidAmount());
-
             memberCouponMapper.update(null,new UpdateWrapper<MemberCoupon>().lambda()
                     .set(MemberCoupon::getStatus,Constants.ONE)
                     .set(MemberCoupon::getUseDate,DateUtil.getCurrDateTime())
-                    .eq(MemberCoupon::getId,memberCoupon.getId())
+                    .eq(MemberCoupon::getId,orderPayConfirmResponse.getMemberCoupon().getId())
             );
         }
-
         goodsorderMapper.insert(goodsorder);
         List<OrderGoodsCalculateResponse> goodsCalculateList  = orderPayConfirmResponse.getGoodsCalculateList();
         if(CollectionUtils.isEmpty(goodsCalculateList)){
@@ -839,6 +845,39 @@
             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()+"]鍟嗗搧锛岃鑱旂郴绠$悊鍛橈紒");
+                }
+
+                PlatformConfigDTO platformConfigDTO = systemDictDataService.getPlatformConfigDTO();
+                //缁忛攢鍟嗕紭鎯犳壙鎷呭崰姣�
+                BigDecimal shopRate = new BigDecimal("100").subtract(platformConfigDTO.getTotalRate());
+                //璁$畻缁忛攢鍟嗕紭鎯犳壙鎷呴噾棰�  锛堜紭鎯犲埜鎶垫墸閲戦 + 绉垎鎶垫墸閲戦锛� * 鍗犳瘮姣斾緥
+                BigDecimal shopDeductAmount = payDetailRequest.getCouponDeductCash().add(payDetailRequest.getIntegralDeductCash())
+                        .multiply(shopRate).divide(new BigDecimal("100"),2, RoundingMode.HALF_UP);
+                //鏍规嵁缁忛攢鍟嗛攢鍞ā寮� 璁$畻搴旂粨绠楅噾棰�
+                if(shop.getSaleType().equals(Constants.ONE)){
+                    goodsOrderDetail.setShopSettlement(goodsOrderDetail.getPrice().subtract(shopDeductAmount));
+                }else {
+                    goodsOrderDetail.setShopSettlement(
+                            shopGoodsRelation.getPrice().subtract(shopGoodsRelation.getPrice()).subtract(shopDeductAmount));
+                }
+                if(goodsOrderDetail.getShopSettlement().compareTo(BigDecimal.ZERO)<Constants.ZERO){
+                    goodsOrderDetail.setShopSettlement(BigDecimal.ZERO);
+                }
+            }else{
+                goodsOrderDetail.setShopSettlement(BigDecimal.ZERO);
+            }
             goodsOrderDetailList.add(goodsOrderDetail);
             //鍒犻櫎璐墿杞﹀晢鍝�
             shopcartMapper.delete(new QueryWrapper<Shopcart>().lambda()
@@ -847,19 +886,70 @@
             );
         }
         //绉垎鍙樺姩璁板綍
-        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(),"鍟嗗搧浠锋牸鍙戠敓鍙樺寲锛岃鍒锋柊鍚庨噸鏂版敮浠橈紒");
         }
-
-        return this.wxPay(goodsorder,member);
+        //瀛樺湪鐜伴噾鏀粯
+        if(Constants.equalsInteger(goodsorder.getPayMethod(),Constants.ZERO)){
+            return this.wxPay(goodsorder,member);
+        }
+        //鏃犵幇閲戞敮浠�
+        goodsorderMapper.update(null,new UpdateWrapper<Goodsorder>().lambda()
+                .set(Goodsorder::getStatus,Constants.ONE)
+                .set(Goodsorder::getPayStatus,Constants.OrderStatus.PAY_DONE.getKey())
+                .set(Goodsorder::getPayDate,DateUtil.getCurrDateTime())
+                .set(Goodsorder::getId,goodsorder.getId())
+        );
+        PayResponse payResponse = new PayResponse();
+        payResponse.setOrderId(goodsorder.getId());
+        payResponse.setPayType(Constants.ONE);
+        return payResponse;
     }
 
+
+    public void shopBalance(GoodsorderDetail detail,Shop shop){
+        if(Objects.isNull(shop)){
+            detail.setShopSettlement(BigDecimal.ZERO);
+            return;
+        }
+        PlatformConfigDTO platformConfigDTO = systemDictDataService.getPlatformConfigDTO();
+        //缁忛攢鍟嗕紭鎯犳壙鎷呭崰姣�
+        BigDecimal shopRate = new BigDecimal("100").subtract(platformConfigDTO.getTotalRate());
+
+        ShopGoodsRelation shopGoodsRelation = shopGoodsRelationMapper.selectOne(new QueryWrapper<ShopGoodsRelation>().lambda()
+                .eq(ShopGoodsRelation::getIsdeleted,Constants.ZERO)
+                .eq(ShopGoodsRelation::getStatus,Constants.ZERO)
+                .eq(ShopGoodsRelation::getShopId,shop.getId())
+                .eq(ShopGoodsRelation::getGoodsSkuId,detail.getGoodsSkuId())
+                .last(" limit 1 ")
+        );
+        if(Objects.isNull(shopGoodsRelation)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝鍏宠仈缁忛攢鍟嗘湭缁戝畾["+detail.getName()+"]鍟嗗搧锛岃鑱旂郴绠$悊鍛橈紒");
+        }
+
+
+
+
+
+
+
+
+
+
+
+    }
 
     /**
      * 閲嶆柊鏀粯
@@ -908,6 +998,7 @@
             PayResponse payResponse = new PayResponse();
             payResponse.setResponse(response);
             payResponse.setOrderId(goodsorder.getId());
+            payResponse.setPayType(Constants.ZERO);
             return payResponse;
         } catch (WxPayException e) {
             e.printStackTrace();
@@ -962,6 +1053,9 @@
             j.setImgUrl(fullUrl + j.getImgUrl());
         });
         memberOrderResponse.setMemberOrderDetailResponseList(memberOrderDetailResponseList);
+        if(Constants.equalsInteger(memberOrderResponse.getReceiveType(),Constants.ONE)){
+            memberOrderResponse.setShopInfo(shopMapper.selectById(memberOrderResponse.getShopId()));
+        }
         return memberOrderResponse;
     }
 
@@ -1080,6 +1174,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<>();
 
@@ -1117,14 +1293,12 @@
 
     /**
      * 璁㈠崟纭鎺ュ彛
-     * @param receiveType 0=蹇�掗厤閫� 1=鑷彁
-     * @param requestList
-     * @param addressId
      * @param memberCouponService
-     * @param memberId
+     * @param request
      */
-    public OrderPayConfirmResponse orderPayConfirm(Integer receiveType,List<PayDetailRequest> requestList,Integer addressId,
-                                MemberCouponServiceImpl memberCouponService,Integer memberId){
+    @Override
+    public OrderPayConfirmResponse orderPayConfirm(OrderPayConfirmRequest request,
+                                                   MemberCouponServiceImpl memberCouponService){
         OrderPayConfirmResponse orderPayConfirmResponse = new OrderPayConfirmResponse();
         List<Goods> goodsList = goodsMapper.selectJoinList(Goods.class,
                 new MPJLambdaWrapper<Goods>()
@@ -1134,11 +1308,10 @@
                         .selectAs(GoodsSku::getWeight,Goods::getWeight)
                         .selectAs(GoodsSku::getImgurl,Goods::getSkuImg)
                         .leftJoin(GoodsSku.class,GoodsSku::getGoodsId,Goods::getId)
-                        .in(GoodsSku::getId,requestList.stream().map(i->i.getGoodsSkuId()).collect(Collectors.toList())));
+                        .in(GoodsSku::getId,request.getPayDetailRequestList().stream().map(i->i.getGoodsSkuId()).collect(Collectors.toList())));
         if(CollectionUtils.isEmpty(goodsList)){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈尮閰嶅埌鍟嗗搧淇℃伅");
         }
-
         List<OrderGoodsCalculateResponse> goodsCalculateList = ListUtil.copyProperties(goodsList,OrderGoodsCalculateResponse::new);
 
         //璁㈠崟鎬婚噾棰�
@@ -1152,105 +1325,152 @@
         //閭垂閲戦
         BigDecimal mailAmount = BigDecimal.ZERO;
         for (OrderGoodsCalculateResponse response:goodsCalculateList) {
-            List<PayDetailRequest> request = requestList.stream().filter(i->Constants.equalsInteger(i.getGoodsSkuId(), response.getSkuId())).collect(Collectors.toList());
-            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(request)){
-                PayDetailRequest payDetailRequest = request.get(Constants.ZERO);
+            List<PayDetailRequest> payDetailRequestList = request.getPayDetailRequestList().stream()
+                    .filter(i->Constants.equalsInteger(i.getGoodsSkuId(), response.getSkuId())).collect(Collectors.toList());
+            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(payDetailRequestList)){
+                PayDetailRequest payDetailRequest = payDetailRequestList.get(Constants.ZERO);
                 response.setSkuAmount(response.getSkuPrice().multiply(new BigDecimal(payDetailRequest.getGoodsNum()+"")));
                 response.setGoodsNum(payDetailRequest.getGoodsNum());
                 amount = amount.add(response.getSkuAmount());
             }
         }
-        //鑾峰彇浼樻儬鍒镐紭鎯犻噾棰�
-        List<MemberCoupon> memberCouponList = memberCouponService.getApplyCoupon(requestList,memberId);
         MemberCoupon memberCoupon = new MemberCoupon();
+        orderPayConfirmResponse.setCouponAmount(couponAmount);
+        //鑾峰彇鍙互浣跨敤鐨勪紭鎯犲埜
+        List<MemberCoupon> memberCouponList = memberCouponService.getApplyCoupon(request.getPayDetailRequestList(),request.getMemberId());
         if(CollectionUtils.isNotEmpty(memberCouponList)){
-            memberCoupon = memberCouponList.get(Constants.ZERO);
-            couponAmount = memberCoupon.getValidAmount();
-            memberCouponService.calculateCouponRata(memberCoupon,goodsCalculateList,amount);
-            orderPayConfirmResponse.setMemberCoupon(memberCoupon);
-        }
-        //绉垎鎶垫墸閲戦
-        //鏌ヨ鐢ㄦ埛鎬荤Н鍒�
-        Member member = memberMapper.selectById(memberId);
-        //绉垎澶т簬0 涓斿ぇ浜庡彲鐢ㄧН鍒嗛厤缃」 鎵嶅彲浠ヤ娇鐢�
-        if(member.getIntegral().compareTo(BigDecimal.ZERO)>Constants.ZERO){
-            //鏈�浣庡彲鐢ㄥ惎鐢ㄧН鍒�
-            BigDecimal minimumIntegral = new BigDecimal(systemDictDataBiz.queryByCode(Constants.SHOP_CONFIG,Constants.MINIMUM_AVAILABLE_INTEGRAL).getCode());
-            if(member.getIntegral().compareTo(minimumIntegral)>=Constants.ZERO){
-                this.calculateIntegralRata(goodsCalculateList,member.getIntegral());
+            orderPayConfirmResponse.setMemberCouponList(memberCouponList);
+            //濡傛灉閫夋嫨浜嗕紭鎯犲埜锛屽垯鍒ゆ柇閫夋嫨鐨勪紭鎯犲埜鏄惁鏈夋晥
+            if(Objects.nonNull(request.getCouponId())){
+                List<MemberCoupon>  memberCoupons = memberCouponList.stream().filter(i->Constants.equalsInteger(i.getId(),request.getCouponId())).collect(Collectors.toList());
+                if(CollectionUtils.isEmpty(memberCoupons)){
+                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"閫夋嫨鐨勪紭鎯犲埜鏃犳晥锛岃鍒锋柊閲嶈瘯");
+                }
+                memberCoupon = memberCouponList.get(Constants.ZERO);
+                couponAmount = memberCoupon.getValidAmount();
+                memberCouponService.calculateCouponRata(memberCoupon,goodsCalculateList,amount);
+                orderPayConfirmResponse.setMemberCoupon(memberCoupon);
+            }
+        }else {
+            if(Objects.nonNull(request.getCouponId())){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏃犲彲鐢ㄤ紭鎯犲埜锛岃鍒锋柊鏌ョ湅");
             }
         }
-        //閭垂閲戦
-        if(Constants.equalsInteger(receiveType,Constants.ZERO)){
-            //TODO  鏍规嵁鏀惰揣鍦板潃 鏌ヨ杩愯垂閰嶇疆
-
-            //璁$畻鍟嗗搧淇℃伅鎬婚噸閲�
-            BigDecimal totalWeight = goodsCalculateList.stream().map(i->
-                    i.getWeight().multiply(new BigDecimal(i.getGoodsNum().toString()))
-                    ).reduce(BigDecimal.ZERO,BigDecimal::add);
-            
-        }
-
-        orderPayConfirmResponse.setAmount(amount);
-        orderPayConfirmResponse.setCouponAmount(couponAmount);
-        orderPayConfirmResponse.setDeductIntegral(deductIntegral);
-        orderPayConfirmResponse.setMailAmount(mailAmount);
-        orderPayConfirmResponse.setIntegralAmount(integralAmount);
-        orderPayConfirmResponse.setPayAmount(amount.subtract(couponAmount).subtract(mailAmount).subtract(integralAmount));
-        orderPayConfirmResponse.setGoodsCalculateList(goodsCalculateList);
-        BigDecimal cashToIntegralRata = new BigDecimal(systemDictDataBiz.queryByCode(Constants.SHOP_CONFIG,Constants.CASH_EXCHANGE_INTEGRAL_RATA).getCode());
-        orderPayConfirmResponse.setIntegralBack(
-                orderPayConfirmResponse.getPayAmount().multiply(cashToIntegralRata)
+        //鏌ヨ鐢ㄦ埛鎬荤Н鍒�
+        Member member = memberMapper.selectById(request.getMemberId());
+        //鏈�浣庡彲鐢ㄥ惎鐢ㄧН鍒�
+        BigDecimal minimumIntegral = new BigDecimal(systemDictDataBiz.queryByCode(Constants.SHOP_CONFIG,Constants.MINIMUM_AVAILABLE_INTEGRAL).getCode());
+        //绉垎鍙娇鐢ㄧ姸鎬�  澶т簬0 澶т簬鏈�灏忓彲鐢ㄩ厤缃Н鍒嗗��
+        orderPayConfirmResponse.setIntegralStatus(
+                (member.getIntegral().compareTo(BigDecimal.ZERO)<=Constants.ZERO||
+                member.getIntegral().compareTo(minimumIntegral)<Constants.ZERO)?Constants.ONE:Constants.ZERO
         );
 
+        orderPayConfirmResponse.setDeductIntegral(deductIntegral);
+        orderPayConfirmResponse.setIntegralAmount(integralAmount);
+        if(Constants.equalsInteger(orderPayConfirmResponse.getIntegralStatus(),Constants.ZERO)){
+            integralAmount = this.calculateIntegralRata(orderPayConfirmResponse,goodsCalculateList,member.getIntegral());
+        }
+
+        //閭垂閲戦
+        if(Objects.nonNull(request.getReceiveType())){
+            if(Constants.equalsInteger(request.getReceiveType(),Constants.ZERO)){
+                //TODO  鏍规嵁鏀惰揣鍦板潃 鏌ヨ杩愯垂閰嶇疆
+                //璁$畻鍟嗗搧淇℃伅鎬婚噸閲�
+                BigDecimal totalWeight = goodsCalculateList.stream().map(i->
+                        i.getWeight().multiply(new BigDecimal(i.getGoodsNum().toString()))
+                ).reduce(BigDecimal.ZERO,BigDecimal::add);
+                //TODO 鏆傛椂鏃犺繍璐归噾棰�
+                mailAmount = BigDecimal.ZERO;
+
+                amount = amount.add(mailAmount);
+            }
+        }
+        orderPayConfirmResponse.setAmount(amount);
+        orderPayConfirmResponse.setMailAmount(mailAmount);
+        //浣跨敤绉垎 鍑忓幓绉垎鎶垫墸閲戦
+        if(Constants.equalsInteger(request.getUseIntegral(), Constants.ONE)){
+            orderPayConfirmResponse.setIntegralAmount(integralAmount);
+        }
+        //浣跨敤浼樻儬鍒� 鍑忓幓浼樻儬鍒告姷鎵i噾棰�
+        if(Objects.nonNull(request.getCouponId())){
+            orderPayConfirmResponse.setCouponAmount(couponAmount);
+        }
+        //瀹為檯鏀粯閲戦 鍑忓幓浼樻儬鍒搞�佺Н鍒嗘姷鎵i噾棰�
+        orderPayConfirmResponse.setPayAmount(amount.subtract(couponAmount).subtract(orderPayConfirmResponse.getIntegralAmount()));
+        orderPayConfirmResponse.setGoodsCalculateList(goodsCalculateList);
+
+        orderPayConfirmResponse.setIntegralBack(getBackIntegral(orderPayConfirmResponse.getPayAmount(),Constants.ZERO));
         return orderPayConfirmResponse;
     }
 
+
     /**
-     *
+     * 璁$畻璧犻�佺Н鍒嗘暟閲�
+     * @param payAmount
+     * @param type 0=娑堣垂鑰呯Н鍒� 1=缁忛攢鍟嗙Н鍒�
+     * @return
+     */
+    public BigDecimal getBackIntegral(BigDecimal payAmount,Integer type){
+        BigDecimal integralBack = BigDecimal.ZERO;
+        if(payAmount.compareTo(BigDecimal.ZERO)<=Constants.ZERO){
+            return integralBack;
+        }
+        PlatformConfigDTO platformConfigDTO = systemDictDataService.getPlatformConfigDTO();
+        if(Objects.isNull(platformConfigDTO)){
+            return integralBack;
+        }
+        if(Constants.equalsInteger(type,Constants.ZERO)){
+            if( Constants.equalsInteger(platformConfigDTO.getReturnMemberIntegralStatus(),Constants.ZERO)
+                && Objects.nonNull(platformConfigDTO.getReturnMemberIntegral())){
+                integralBack = payAmount.divide(platformConfigDTO.getReturnMemberIntegral(),0,BigDecimal.ROUND_DOWN);
+            }
+        }else{
+            if( Constants.equalsInteger(platformConfigDTO.getReturnShopIntegralStatus(),Constants.ZERO)
+                    && Objects.nonNull(platformConfigDTO.getReturnShopIntegral())){
+                integralBack = payAmount.divide(platformConfigDTO.getReturnShopIntegral(),0,BigDecimal.ROUND_DOWN);
+            }
+        }
+        return integralBack;
+    }
+
+
+
+
+    /**
+     * 璁$畻绉垎鎶垫墸淇℃伅
      * @param goodsCalculateList 鍟嗗搧闆嗗悎
      * @param totalIntegral 鐢ㄦ埛鎬荤Н鍒�
      */
-    public void  calculateIntegralRata(List<OrderGoodsCalculateResponse> goodsCalculateList,BigDecimal totalIntegral){
+    public BigDecimal  calculateIntegralRata(OrderPayConfirmResponse orderPayConfirmResponse,List<OrderGoodsCalculateResponse> goodsCalculateList,BigDecimal totalIntegral){
         //褰撳墠閫夋嫨鍟嗗搧鏈�澶у彲鐢ㄧН鍒嗘姷鎵g殑閲戦
         BigDecimal maxDeductionCash =  goodsCalculateList.stream().map(i->i.getSkuAmount().subtract(i.getCouponDeductCash())
-                .multiply(i.getDeductRata())).reduce(BigDecimal.ZERO,BigDecimal::add);
+                .multiply(i.getDeductRata()).multiply(new BigDecimal("0.01"))).reduce(BigDecimal.ZERO,BigDecimal::add);
         //绉垎 - 鐜伴噾 姣斾緥
         BigDecimal cashToIntegralRata = new BigDecimal(systemDictDataBiz.queryByCode(Constants.SHOP_CONFIG,Constants.INTEGRAL_EXCHANGE_CASH_RATA).getCode());
         //褰撳墠閫夋嫨鍟嗗搧鎶垫墸闇�瑕佷娇鐢ㄧ殑绉垎
         BigDecimal maxDeductionIntegral =  maxDeductionCash.multiply(cashToIntegralRata).multiply(new BigDecimal("100"));
-        BigDecimal deductionRata = BigDecimal.ONE;
+        //鑾峰彇褰撳墠闇�瑕佹敮浠樼殑鐜伴噾鎬婚
+        BigDecimal payCash =  goodsCalculateList.stream().map(i->i.getSkuAmount().subtract(i.getCouponDeductCash())).reduce(BigDecimal.ZERO,BigDecimal::add);
+
         //濡傛灉瀹為檯绉垎灏戜簬鏈�澶ч渶瑕佺Н鍒� 闇�瑕佽绠楁瘮渚嬪崰姣� 鍘诲搴旀坊鍔犺嚦瀵瑰簲鐨勫晢鍝侀噷
-        if(totalIntegral.compareTo(maxDeductionIntegral)<=Constants.ZERO) {
-            deductionRata = totalIntegral.divide(maxDeductionIntegral, 2, BigDecimal.ROUND_HALF_UP);
-        }
-        //鑾峰彇鎬荤殑鎶垫墸閲戦 涓� 姣忎釜鍟嗗搧鍙姷鎵i噾棰�
-        //宸茬敤鍗犳瘮姣斾緥鍊�
-        BigDecimal rata = BigDecimal.ZERO;
-        //鍓╀綑鍙垎閰嶉噾棰�
-        BigDecimal surplusValidAmount = maxDeductionCash;
+        //寰幆涓嬪崟鍟嗗搧鍒楄〃 璁$畻搴旇浣跨敤鐨勭Н鍒嗗��
+        BigDecimal realDeductionCash = BigDecimal.ZERO;
         for (int j = 0; j < goodsCalculateList.size(); j++) {
-            if(Constants.equalsInteger(j+1,goodsCalculateList.size())){
-                goodsCalculateList.get(j).setIntegralMaxDeductCash(surplusValidAmount);
-                goodsCalculateList.get(j).setOrderIntegralRata(new BigDecimal("1").subtract(rata));
-            }else{
-                //绉垎鏈�澶у彲鎶垫墸閲戦
-                goodsCalculateList.get(j).setIntegralMaxDeductCash(
-                        goodsCalculateList.get(j).getSkuAmount()
-                                .subtract(goodsCalculateList.get(j).getCouponDeductCash())
-                                .multiply(goodsCalculateList.get(j).getDeductRata()));
-                //璁㈠崟涓Н鍒嗛噾棰濆疄闄呭崰姣�
-                goodsCalculateList.get(j).setOrderIntegralRata(
-                                goodsCalculateList.get(j)
-                                        .getIntegralMaxDeductCash().divide(maxDeductionCash,2,BigDecimal.ROUND_DOWN)
-                        );
-                rata = rata.add(goodsCalculateList.get(j).getOrderIntegralRata());
-                surplusValidAmount = surplusValidAmount.subtract(goodsCalculateList.get(j).getIntegralMaxDeductCash());
+            BigDecimal deductionCash = goodsCalculateList.get(j).getSkuAmount().subtract(goodsCalculateList.get(j).getCouponDeductCash());
+            goodsCalculateList.get(j).setIntegralMaxDeductCash(deductionCash);
+            //濡傛灉鍓╀綑绉垎澶т簬鍙互浣跨敤绉垎 鍒欑洿鎺ユ弧棰濊绠� 鍙嶄箣 鍓╀綑绉垎涓嶈兘婊¤冻鍏ㄩ儴鎶垫墸 鍗曠嫭璁$畻姣忎釜鍟嗗搧鍗犳瘮
+            if(totalIntegral.compareTo(maxDeductionIntegral)<Constants.ZERO){
+                deductionCash  = deductionCash.divide(payCash).multiply(totalIntegral);
             }
-            //濡傛灉鐢ㄦ埛绉垎澶т簬鏈闇�瑕佷娇鐢ㄧ殑鏈�澶хН鍒� 鍒欑洿鎺ヤ娇鐢ㄥ惁鍒欓渶瑕侀噸鏂拌绠�
-            goodsCalculateList.get(j).setIntegralDeductCash(goodsCalculateList.get(j).getIntegralMaxDeductCash().multiply(deductionRata));
-            goodsCalculateList.get(j).setIntegralDeduct(goodsCalculateList.get(j).getIntegralMaxDeductCash().multiply(cashToIntegralRata).multiply(deductionRata));
+            goodsCalculateList.get(j).setIntegralDeductCash(deductionCash);
+            realDeductionCash = realDeductionCash.add(deductionCash);
         }
+        //鍓╀綑绉垎鍊�
+        orderPayConfirmResponse.setSurplusIntegral(totalIntegral);
+        //瀹為檯鎶垫墸浣跨敤绉垎
+        orderPayConfirmResponse.setDeductIntegral(totalIntegral.compareTo(maxDeductionCash)<=Constants.ZERO?totalIntegral:maxDeductionIntegral);
+        return realDeductionCash;
 
     }
 
@@ -1295,6 +1515,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 +1542,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,6 +1554,120 @@
         goodsorder.setStatus(Constants.OrderStatus.DONE.getKey());
         goodsorder.setDoneDate(new Date());
         goodsorderMapper.updateById(goodsorder);
+        //鏍规嵁璁㈠崟绫诲瀷杩涜绉垎璧犻��
+        //涓嬪崟纭鏀惰揣 锛岃禒閫佺粡閿�鍟嗙Н鍒�
+        this.orderAddShopIntegral(goodsorder);
+        //娑堣垂鑰呯‘璁ゆ敹璐�
+        this.orderAddMemberIntegral(goodsorder);
+        //缁忛攢鍟� 缁撶畻閲戦
+        this.orderAddShopCash(goodsorder);
+    }
+
+    /**
+     * 璁㈠崟鏍搁攢
+     * @param
+     * @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());
+        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);
+        //瀛樺湪鐜伴噾鏀粯 璧犻�� 绉垎
+        if(Constants.equalsInteger(goodsorder.getPayMethod(),Constants.ZERO)){
+            //璧犻�佹秷璐硅�呯Н鍒�
+            this.orderAddMemberIntegral(goodsorder);
+            //缁忛攢鍟� 娣诲姞璧犻�佺Н鍒�
+            this.orderAddShopIntegral(goodsorder);
+            //缁忛攢鍟� 缁撶畻閲戦
+            this.orderAddShopCash(goodsorder);
+        }
+    }
+
+
+    /**
+     * 璧犻�佺粡閿�鍟嗕笅鍗曠Н鍒�
+     * @param goodsorder
+     */
+    public void orderAddShopIntegral(Goodsorder goodsorder){
+        if(Objects.isNull(goodsorder.getDistributionShopId()) || Constants.equalsInteger(goodsorder.getPayMethod(),Constants.ONE)){
+            return;
+        }
+        BigDecimal backIntegral = getBackIntegral(goodsorder.getPrice(),Constants.ONE);
+        if (backIntegral.compareTo(BigDecimal.ZERO) >= 0) {
+            //鏇存柊浣欓淇℃伅 娣诲姞绉垎鍙樺姩璁板綍
+            DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
+            dealIntegralRequest.setIntegralNum(backIntegral);
+            dealIntegralRequest.setDealType(Constants.ZERO);
+            dealIntegralRequest.setMemberId(goodsorder.getDistributionShopId());
+            dealIntegralRequest.setObjId(goodsorder.getId());
+            dealIntegralRequest.setOrderCode(goodsorder.getCode().toString());
+            dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.ORDER_DONATE);
+            integralService.dealShopIntegral(dealIntegralRequest);
+        }
+    }
+
+    public void orderAddShopCash(Goodsorder goodsorder){
+        if(Objects.isNull(goodsorder.getDistributionShopId()) || Constants.equalsInteger(goodsorder.getPayMethod(),Constants.ONE)){
+            return;
+        }
+        List<GoodsorderDetail> goodsorderDetails = goodsorderDetailMapper.selectList(new QueryWrapper<GoodsorderDetail>().lambda()
+                .eq(GoodsorderDetail::getOrderId,goodsorder.getId())
+        );
+        BigDecimal settlement = goodsorderDetails.stream().map(i->i.getShopSettlement()).reduce(BigDecimal.ZERO,BigDecimal::add);
+        if(settlement.compareTo(BigDecimal.ZERO)>Constants.ZERO ){
+            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.ORDER_DONE_AMOUNT);
+            integralService.dealShopAmount(dealIntegralRequest);
+        }
+    }
+
+
+
+    /**
+     * 璧犻�佹秷璐硅�呬笅鍗曠Н鍒�
+     * @param goodsorder
+     */
+    public void orderAddMemberIntegral(Goodsorder goodsorder){
+        if(Constants.equalsInteger(goodsorder.getPayMethod(),Constants.ONE)){
+            return;
+        }
+        BigDecimal backIntegral = getBackIntegral(goodsorder.getPrice(),Constants.ZERO);
+        if (backIntegral.compareTo(BigDecimal.ZERO) >= 0) {
+            //鏇存柊浣欓淇℃伅 娣诲姞绉垎鍙樺姩璁板綍
+            DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
+            dealIntegralRequest.setIntegralNum(backIntegral);
+            dealIntegralRequest.setDealType(Constants.ZERO);
+            dealIntegralRequest.setMemberId(goodsorder.getDistributionShopId());
+            dealIntegralRequest.setObjId(goodsorder.getId());
+            dealIntegralRequest.setOrderCode(goodsorder.getCode().toString());
+            dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.ORDER_DONATE);
+            integralService.dealIntegral(dealIntegralRequest);
+        }
     }
 
 
@@ -1533,4 +1885,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