From fa668c325f2dac348fb9f80c0c6c679f9ce1e41b Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期二, 10 三月 2026 18:28:17 +0800
Subject: [PATCH] 小程序   接口开发

---
 server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java |  100 +++++++++++++++++++++++++++++++++++--------------
 1 files changed, 71 insertions(+), 29 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 9c0c299..3680761 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
@@ -286,7 +286,7 @@
                     Constants.UserActionType.CHANGE_ORDER_KD,
                     userActionMapper,
                     update.getEditDate(),
-                    new String[]{goodsorder.getKdInfo()},
+                    StringUtils.isNotBlank(goodsorder.getKdInfo())?new String[]{query.getKdInfo()}:null,
                     JSONObject.toJSONString(update) ,
                     query.getKdName()+"(鍗曞彿锛�"+query.getKdCode()+")",
                     goodsorder.getKdName()+"(鍗曞彿锛�"+goodsorder.getKdCode()+")");
@@ -296,7 +296,7 @@
         //鍙戦�佸彂璐х珯鍐呬俊
         Notice notice = Notice.getNotice(
                 Constants.NoticeType.NOTICE_ORDER_SEND,
-                goodsorder.getMemberId(),
+                query.getMemberId(),
                 goodsorder.getId()
         );
         notice.setContent(notice.getContent().replace("{param}",goodsorder.getCode().toString()));
@@ -787,12 +787,13 @@
             if(Objects.isNull(member.getBindShopId())){
                 memberMapper.update(new UpdateWrapper<Member>().lambda()
                         .set(Member::getBindShopId,shop.getId())
+                        .set(Member::getBindShopDate,new Date())
                         .eq(Member::getId,member.getId())
                 );
             }
             goodsorder.setPickUpShopId(shop.getId());
             goodsorder.setDistributionShopId(shop.getId());
-            goodsorder.setLinkname(member.getName());
+            goodsorder.setLinkname(StringUtils.isNotBlank(member.getName())?member.getName():member.getNickname());
             goodsorder.setLinkphone(member.getPhone());
             if(Objects.isNull(member.getBindShopId())){
                 member.setBindShopId(shop.getId());
@@ -835,8 +836,8 @@
                     .eq(MemberCoupon::getId,orderPayConfirmResponse.getMemberCoupon().getId())
             );
         }
-        goodsorder.setReturnCustomerIntegral(getBackIntegral(goodsorder.getPrice(),Constants.ONE));
-        goodsorder.setReturnMemberIntegral(getBackIntegral(goodsorder.getPrice(),Constants.ZERO));
+        goodsorder.setReturnCustomerIntegral(getBackIntegral(goodsorder.getPrice().subtract(goodsorder.getMailPrice()),Constants.ONE));
+        goodsorder.setReturnMemberIntegral(getBackIntegral(goodsorder.getPrice().subtract(goodsorder.getMailPrice()),Constants.ZERO));
         goodsorderMapper.insert(goodsorder);
         List<OrderGoodsCalculateResponse> goodsCalculateList  = orderPayConfirmResponse.getGoodsCalculateList();
         if(CollectionUtils.isEmpty(goodsCalculateList)){
@@ -844,7 +845,8 @@
         }
         List<GoodsorderDetail> goodsOrderDetailList = new ArrayList<>();
         BigDecimal shopSettlement = BigDecimal.ZERO;
-        for (OrderGoodsCalculateResponse payDetailRequest:goodsCalculateList) {
+        for (int i = 0; i < goodsCalculateList.size(); i++) {
+            OrderGoodsCalculateResponse payDetailRequest = goodsCalculateList.get(i);
             //鏌ヨ鍟嗗搧
             GoodsSku goodsSku = goodsSkuMapper.selectById(payDetailRequest.getSkuId());
             if(Objects.isNull(goodsSku)||!Constants.equalsInteger(goodsSku.getIsdeleted(),Constants.ZERO)){
@@ -896,10 +898,10 @@
                 //缁忛攢鍟嗕紭鎯犳壙鎷呭崰姣�
                 BigDecimal shopRate = new BigDecimal("100").subtract(platformConfigDTO.getTotalRate());
                 //璁$畻缁忛攢鍟嗕紭鎯犳壙鎷呴噾棰�  锛堜紭鎯犲埜鎶垫墸閲戦 + 绉垎鎶垫墸閲戦锛� * 鍗犳瘮姣斾緥
-                BigDecimal shopDeductAmount = payDetailRequest.getCouponDeductCash().add(payDetailRequest.getIntegralDeductCash())
+                BigDecimal shopDeductAmount = payDetailRequest.getCouponDeductCash().add(Constants.equalsInteger(orderPayRequest.getUseIntegral(),Constants.ONE)?payDetailRequest.getIntegralDeductCash():BigDecimal.ZERO)
                         .multiply(shopRate).divide(new BigDecimal("100"),2, RoundingMode.HALF_UP);
                 //鏍规嵁缁忛攢鍟嗛攢鍞ā寮� 璁$畻搴旂粨绠楅噾棰�
-                if(shop.getSaleType().equals(Constants.ONE)){
+                if(Constants.equalsInteger(shop.getSaleType(),Constants.ONE)&&Constants.equalsInteger(goodsorder.getReceiveType(),Constants.ONE)){
                     goodsOrderDetail.setShopSettlement(goodsOrderDetail.getPrice().subtract(shopDeductAmount));
                 }else {
                     //骞冲彴閾鸿揣
@@ -944,6 +946,10 @@
 
         //瀛樺湪鐜伴噾鏀粯
         if(Constants.equalsInteger(goodsorder.getPayMethod(),Constants.ZERO)){
+            goodsorderMapper.update(null,new UpdateWrapper<Goodsorder>().lambda()
+                    .set(Goodsorder::getShopSettlement,shopSettlement)
+                    .eq(Goodsorder::getId,goodsorder.getId())
+            );
             PayResponse payResponse = this.wxPay(goodsorder,member);
             payResponse.setLockKey(lockKey);
             return payResponse;
@@ -954,7 +960,7 @@
                 .set(Goodsorder::getShopSettlement,shopSettlement)
                 .set(Goodsorder::getPayStatus,Constants.OrderStatus.PAY_DONE.getKey())
                 .set(Goodsorder::getPayDate,DateUtil.getCurrDateTime())
-                .set(Goodsorder::getId,goodsorder.getId())
+                .eq(Goodsorder::getId,goodsorder.getId())
         );
         PayResponse payResponse = new PayResponse();
         payResponse.setOrderId(goodsorder.getId());
@@ -1312,7 +1318,7 @@
                     Goods goods = goodsMapper.selectById(goodsSku.getGoodsId());
                     goodsName = goods.getName();
                 }
-                if(!Objects.isNull(goodsSku)){
+                if(!Objects.isNull(goodsSku)&&Objects.nonNull(goodsSku.getStock())){
                     goodsSku.setStock(goodsSku.getStock().add(new BigDecimal(Constants.formatIntegerNum(goodsorderDetail.getGoodsNum()))));
                     goodsSkuMapper.updateById(goodsSku);
                 }
@@ -1441,7 +1447,7 @@
                 amount = amount.add(response.getSkuAmount());
             }
         }
-        MemberCoupon memberCoupon = new MemberCoupon();
+        MemberCoupon memberCoupon = null;
         orderPayConfirmResponse.setCouponAmount(couponAmount);
         //鑾峰彇鍙互浣跨敤鐨勪紭鎯犲埜
         List<MemberCoupon> memberCouponList = memberCouponService.getApplyCoupon(request.getPayDetailRequestList(),request.getMemberId());
@@ -1467,6 +1473,11 @@
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏃犲彲鐢ㄤ紭鎯犲埜锛岃鍒锋柊鏌ョ湅");
             }
         }
+        if(Objects.nonNull(memberCoupon)){
+            //璁$畻浼樻儬鍒稿崰姣�
+            memberCouponService.calculateCouponRata(memberCoupon,goodsCalculateList,amount);
+        }
+
         //鏌ヨ鐢ㄦ埛鎬荤Н鍒�
         Member member = memberMapper.selectById(request.getMemberId());
         //鏈�浣庡彲鐢ㄥ惎鐢ㄧН鍒�
@@ -1480,6 +1491,7 @@
         orderPayConfirmResponse.setDeductIntegral(deductIntegral);
         orderPayConfirmResponse.setIntegralAmount(integralAmount);
         if(Constants.equalsInteger(orderPayConfirmResponse.getIntegralStatus(),Constants.ZERO)){
+            //璁$畻绉垎鍗犳瘮
             integralAmount = this.calculateIntegralRata(orderPayConfirmResponse,goodsCalculateList,member.getIntegral());
         }else{
             orderPayConfirmResponse.setSurplusIntegral(member.getIntegral());
@@ -1566,12 +1578,12 @@
         if(Constants.equalsInteger(type,Constants.ZERO)){
             if( Constants.equalsInteger(platformConfigDTO.getReturnMemberIntegralStatus(),Constants.ZERO)
                 && Objects.nonNull(platformConfigDTO.getReturnMemberIntegral())){
-                integralBack = payAmount.multiply(platformConfigDTO.getReturnMemberIntegral()).divide(BigDecimal.ONE,0,BigDecimal.ROUND_DOWN);
+                integralBack = payAmount.divide(platformConfigDTO.getReturnMemberIntegral(),2,BigDecimal.ROUND_DOWN);
             }
         }else{
             if( Constants.equalsInteger(platformConfigDTO.getReturnShopIntegralStatus(),Constants.ZERO)
                     && Objects.nonNull(platformConfigDTO.getReturnShopIntegral())){
-                integralBack = payAmount.multiply(platformConfigDTO.getReturnShopIntegral()).divide(BigDecimal.ONE,0,BigDecimal.ROUND_DOWN);
+                integralBack = payAmount.divide(platformConfigDTO.getReturnShopIntegral(),2,BigDecimal.ROUND_DOWN);
             }
         }
         return integralBack;
@@ -1591,6 +1603,12 @@
                 .multiply(i.getDeductRata()).divide(new BigDecimal("100"),2,RoundingMode.DOWN)).reduce(BigDecimal.ZERO,BigDecimal::add);
         //绉垎-鐜伴噾鍏戞崲姣斾緥锛圶XX绉垎鎶垫墸1鍏冿級
         BigDecimal cashToIntegralRata = new BigDecimal(systemDictDataBiz.queryByCode(Constants.INTEGRAL_SET,Constants.INTERALSET_DEDUCTINTEGRALLIMIT).getCode());
+        //绉垎鏈�澶у彲鎶垫墸閲戦
+        BigDecimal deductionCash = totalIntegral.divide(cashToIntegralRata,2,RoundingMode.DOWN);
+        BigDecimal surDeductionCash = deductionCash;
+        BigDecimal goodUseIntegral = BigDecimal.ZERO;
+        BigDecimal surUseIntegral = totalIntegral;
+
         //褰撳墠閫夋嫨鍟嗗搧鎶垫墸闇�瑕佷娇鐢ㄧ殑绉垎
         BigDecimal maxDeductionIntegral =  maxDeductionCash.multiply(cashToIntegralRata);
         //鑾峰彇褰撳墠闇�瑕佹敮浠樼殑鐜伴噾鎬婚
@@ -1601,15 +1619,26 @@
         BigDecimal realDeductionCash = BigDecimal.ZERO;
         for (int j = 0; j < goodsCalculateList.size(); j++) {
             //鑾峰彇鏈�澶у彲鎶垫墸閲戦
-            BigDecimal deductionCash = goodsCalculateList.get(j).getSkuAmount().subtract(goodsCalculateList.get(j).getCouponDeductCash())
+            BigDecimal goodDeductionCash = goodsCalculateList.get(j).getSkuAmount().subtract(goodsCalculateList.get(j).getCouponDeductCash())
                     .multiply(goodsCalculateList.get(j).getDeductRata()).divide(new BigDecimal("100"),2,RoundingMode.DOWN);
-            goodsCalculateList.get(j).setIntegralMaxDeductCash(deductionCash);
+            goodsCalculateList.get(j).setIntegralMaxDeductCash(goodDeductionCash);
+            BigDecimal rata = goodDeductionCash.divide(maxDeductionCash,2,BigDecimal.ROUND_HALF_UP);
             //濡傛灉鍓╀綑绉垎澶т簬鍙互浣跨敤绉垎 鍒欑洿鎺ユ弧棰濊绠� 鍙嶄箣 鍓╀綑绉垎涓嶈兘婊¤冻鍏ㄩ儴鎶垫墸 鍗曠嫭璁$畻姣忎釜鍟嗗搧鍗犳瘮
             if(totalIntegral.compareTo(maxDeductionIntegral)<Constants.ZERO){
-                deductionCash  = deductionCash.divide(payCash).multiply(totalIntegral);
+                if(Constants.equalsInteger(j+1,goodsCalculateList.size())){
+                    goodDeductionCash = surDeductionCash;
+                    goodUseIntegral = surUseIntegral;
+                }else{
+                    goodDeductionCash  = (goodDeductionCash.multiply(deductionCash)).divide(maxDeductionCash,2,BigDecimal.ROUND_HALF_UP);
+                    surDeductionCash = surDeductionCash.subtract(goodDeductionCash);
+                    goodUseIntegral = (goodDeductionCash.multiply(totalIntegral)).divide(maxDeductionCash,2,BigDecimal.ROUND_HALF_UP);
+                    surUseIntegral = totalIntegral.subtract(goodUseIntegral);
+                }
             }
-            goodsCalculateList.get(j).setIntegralDeductCash(deductionCash);
-            realDeductionCash = realDeductionCash.add(deductionCash);
+            goodsCalculateList.get(j).setIntegralDeductCash(goodDeductionCash);
+            goodsCalculateList.get(j).setIntegralDeduct(goodUseIntegral);
+            realDeductionCash = realDeductionCash.add(goodDeductionCash);
+
         }
         //鍓╀綑绉垎鍊�
         orderPayConfirmResponse.setSurplusIntegral(totalIntegral);
@@ -1757,7 +1786,22 @@
                 if(Objects.isNull(coupon)||Constants.equalsInteger(coupon.getIsdeleted(),Constants.ONE)&&num>Constants.ZERO){
                     continue;
                 }
+                if(coupon.getNum()>Constants.ZERO){
+                    //鏌ヨ宸查鍙栨暟閲�
+                    Integer getNum = memberCouponMapper.selectCount(new QueryWrapper<MemberCoupon>().lambda()
+                            .eq(MemberCoupon::getIsdeleted,Constants.ZERO)
+                            .eq(MemberCoupon::getCouponId,couponId)
+                            .ne(MemberCoupon::getGetMethod,Constants.TWO)
+                    ).intValue();
+                    if(getNum >= coupon.getNum()){
+                        continue;
+                    }
+                    if(num>(coupon.getNum() - getNum)){
+                        num = coupon.getNum().intValue() - getNum;
+                    }
+                }
                 MemberCoupon memberCoupon = MemberCoupon.couponToBean(coupon,inviteMember,new Date(),Constants.ONE,null);
+
                 for (int i = 0; i < num; i++) {
                     //婊″噺鍗蜂笉浼氱敓鎴恗axPrice 闇�瑕佹牴鎹紭鎯犲埜鍑忓皯閲戦璁剧疆
                     if(Constants.equalsInteger(coupon.getCouponType(),Constants.ZERO)){
@@ -1823,9 +1867,9 @@
         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()+"]闈炴偍缁戝畾鐨勭粡閿�鍟嗭紝鏃犳硶杩涜璇ユ搷浣滐紒");
-//        }
+        if(!Constants.equalsInteger(shop.getId(),memberId)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝褰撳墠璁㈠崟鏍搁攢闂ㄥ簵涓篬"+shop.getName()+"]锛屾偍鏃犳硶杩涜璇ユ搷浣滐紒");
+        }
         goodsorder.setStatus(Constants.OrderStatus.DONE.getKey());
         goodsorder.setDoneDate(new Date());
         goodsorderMapper.updateById(goodsorder);
@@ -1862,11 +1906,10 @@
         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) {
+        if (goodsorder.getReturnCustomerIntegral().compareTo(BigDecimal.ZERO) > 0) {
             //鏇存柊浣欓淇℃伅 娣诲姞绉垎鍙樺姩璁板綍
             DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
-            dealIntegralRequest.setIntegralNum(backIntegral);
+            dealIntegralRequest.setIntegralNum(goodsorder.getReturnCustomerIntegral());
             dealIntegralRequest.setDealType(Constants.ZERO);
             dealIntegralRequest.setMemberId(goodsorder.getDistributionShopId());
             dealIntegralRequest.setObjId(goodsorder.getId());
@@ -1911,11 +1954,10 @@
         if(Constants.equalsInteger(goodsorder.getPayMethod(),Constants.ONE)){
             return;
         }
-        BigDecimal backIntegral = getBackIntegral(goodsorder.getPrice(),Constants.ZERO);
-        if (backIntegral.compareTo(BigDecimal.ZERO) > 0) {
+        if (goodsorder.getReturnMemberIntegral().compareTo(BigDecimal.ZERO) > 0) {
             //鏇存柊浣欓淇℃伅 娣诲姞绉垎鍙樺姩璁板綍
             DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
-            dealIntegralRequest.setIntegralNum(backIntegral);
+            dealIntegralRequest.setIntegralNum(goodsorder.getReturnMemberIntegral());
             dealIntegralRequest.setDealType(Constants.ZERO);
             dealIntegralRequest.setMemberId(goodsorder.getMemberId());
             dealIntegralRequest.setObjId(goodsorder.getId());
@@ -2214,7 +2256,7 @@
                         .eq(Notice::getIsdeleted,Constants.ZERO)
                         .eq(Notice::getMemberId,member.getId())
                         .eq(Notice::getStatus,Constants.ZERO)
-                )>=Constants.ZERO?Constants.ZERO:Constants.ONE
+                )>Constants.ZERO?Constants.ZERO:Constants.ONE
         );
 
         return homeInfoResponse;
@@ -2329,7 +2371,7 @@
         List<Goodsorder> goodsorderList = goodsorderMapper.selectList(new QueryWrapper<Goodsorder>().lambda()
                 .eq(Goodsorder::getIsdeleted, Constants.ZERO)
                 .eq(Goodsorder::getStatus, Constants.OrderStatus.WAIT_PAY.getKey())
-                        .apply(" CREATE_DATE >  DATE_SUB(NOW(), INTERVAL 15 MINUTE) ")
+                        .apply(" CREATE_DATE <  DATE_SUB(NOW(), INTERVAL 15 MINUTE) ")
         );
         if(CollectionUtils.isNotEmpty(goodsorderList)){
             for (Goodsorder goodsorder:goodsorderList) {

--
Gitblit v1.9.3