From e5f4cb6e5e19b09ca62ebc6160720858c58f24c1 Mon Sep 17 00:00:00 2001
From: k94314517 <8417338+k94314517@user.noreply.gitee.com>
Date: 星期二, 15 七月 2025 17:57:23 +0800
Subject: [PATCH] 111

---
 server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java |  184 +++++++++++++++++++++++++++++++++++----------
 1 files changed, 142 insertions(+), 42 deletions(-)

diff --git a/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
index 8a3f607..6ad3885 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
@@ -27,7 +27,9 @@
 import com.wechat.pay.java.service.partnerpayments.jsapi.model.Payer;
 import com.wechat.pay.java.service.partnerpayments.jsapi.model.PrepayRequest;
 import com.wechat.pay.java.service.partnerpayments.jsapi.model.PrepayWithRequestPaymentResponse;
+import com.wechat.pay.java.service.refund.model.RefundNotification;
 import jodd.util.StringUtil;
+import lombok.With;
 import nonapi.io.github.classgraph.json.Id;
 import org.apache.poi.sl.image.ImageHeaderEMF;
 import org.checkerframework.checker.units.qual.A;
@@ -38,11 +40,13 @@
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
+import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
 import java.util.UUID;
+import java.util.concurrent.TimeUnit;
 
 /**
  * 璁㈠崟淇℃伅璁板綍Service瀹炵幇
@@ -77,7 +81,13 @@
     private IdentityInfoMapper identityInfoMapper;
 
     @Autowired
+    private WithdrawalOrdersMapper withdrawalOrdersMapper;
+
+    @Autowired
     private WxMiniUtilService wxMiniUtilService;
+
+    @Resource
+    private RedisTemplate<String,Object> redisTemplate;
 
     @Override
     @Transactional(rollbackFor = {Exception.class,BusinessException.class})
@@ -98,11 +108,11 @@
         }
         //鐢ㄩ璁㈠崟
         if(Constants.equalsInteger(orders.getType(),Constants.TWO)){
-            orders.setStatus(Constants.ZERO);
+            orders.setStatus(Constants.ordersStatus.waitPay.getKey());
             //鍞よ捣鏀粯涓氬姟
             objects = this.getWxPayResponse(orders,orders.getMember().getOpenid());
         }else{
-            orders.setStatus(Constants.ONE);
+            orders.setStatus(Constants.ordersStatus.wait.getKey());
         }
         ordersMapper.insert(orders);
         if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(orders.getMultifileList())){
@@ -449,11 +459,12 @@
         queryWrapper.eq(Objects.nonNull(model.getType()),Orders::getType, model.getType());
         queryWrapper.eq(Objects.nonNull(model.getStatus()),Orders::getStatus, model.getStatus());
         queryWrapper.eq(Objects.nonNull(model.getAcceptType()),Orders::getAcceptType, model.getAcceptType());
-        queryWrapper.like(org.apache.commons.lang3.StringUtils.isNotBlank(model.getReleaseName()),"m1.name", model.getReleaseName());
-        queryWrapper.apply(org.apache.commons.lang3.StringUtils.isNotBlank(model.getAcceptName())," i.LINK_NAME like '%"+model.getAcceptName()+"%' or i.company_name like '%"+model.getAcceptName()+"%' ");
+        queryWrapper.apply(org.apache.commons.lang3.StringUtils.isNotBlank(model.getReleaseName()),"m1.name", model.getReleaseName());
+        queryWrapper.apply(org.apache.commons.lang3.StringUtils.isNotBlank(model.getAcceptName()),"( i.LINK_NAME like '%"+model.getAcceptName()+"%' or i.company_name like '%"+model.getAcceptName()+"%' or i.TELEPHONE like '%"+model.getAcceptName()+"%' ) ");
         IPage<Orders> iPage = ordersMapper.selectJoinPage(page,Orders.class,queryWrapper);
         for (Orders orders:iPage.getRecords()) {
            this.getOrderContent(orders);
+           orders.setStatusName(Constants.ordersStatus.getName(orders.getStatus()));
         }
         return PageData.from(iPage);
     }
@@ -516,7 +527,7 @@
         if(Objects.isNull(orders)||Constants.equalsInteger(orders.getDeleted(),Constants.ONE)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
         }
-        if(!Constants.equalsInteger(orders.getStatus(),Constants.ONE)){
+        if(!Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.wait.getKey())){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜璇ユ搷浣�");
         }
         if(Constants.equalsInteger(orders.getReleaseMemberId(),member.getId())){
@@ -540,7 +551,7 @@
         orders.setAcceptType(Constants.ZERO);
         orders.setAcceptTime(new Date());
         orders.setAcceptMemberId(member.getId());
-        orders.setStatus(Constants.TWO);
+        orders.setStatus(Constants.ordersStatus.accept.getKey());
         ordersMapper.updateById(orders);
         //鏇存柊鎺ュ崟閲�
         memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getPublishNum," (publish_num + 1 )").eq(Member::getId,member.getId()));
@@ -569,7 +580,7 @@
         if(Objects.isNull(orders)||Constants.equalsInteger(orders.getDeleted(),Constants.ONE)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
         }
-        if(!Constants.equalsInteger(orders.getStatus(),Constants.TWO)){
+        if(!Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.accept.getKey())){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜璇ユ搷浣�");
         }
         if(Constants.equalsInteger(orders.getReleaseMemberId(),member.getId())){
@@ -579,7 +590,7 @@
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟淇敼寰呯‘璁わ紝鏃犳硶杩涜璇ユ搷浣�");
         }
         orders.setUpdateTime(new Date());
-        orders.setStatus(Constants.THREE);
+        orders.setStatus(Constants.ordersStatus.doing.getKey());
         orders.setWorkStartTime(new Date());
         ordersMapper.updateById(orders);
 
@@ -608,7 +619,7 @@
         if(Objects.isNull(orders)||Constants.equalsInteger(orders.getDeleted(),Constants.ONE)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
         }
-        if(!Constants.equalsInteger(orders.getStatus(),Constants.TWO)){
+        if(!Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.accept.getKey())){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜璇ユ搷浣�");
         }
         if(Constants.equalsInteger(orders.getReleaseMemberId(),updOrderDataDTO.getMember().getId())){
@@ -638,6 +649,7 @@
                 .set(Orders::getEndDate,updOrderDataDTO.getEndDate())
                 .set(Orders::getTotalDays,updOrderDataDTO.getTotalDays())
                 .set(Orders::getIsUpdate,Constants.ONE)
+                .set(Orders::getIsUpdateTime,"now()")
                 .set(Orders::getUpdateTime,"now()")
                 .set(Orders::getEstimatedAccount,total)
                 .eq(Orders::getId,orders.getId())
@@ -683,7 +695,7 @@
         if(Objects.isNull(orders)||Constants.equalsInteger(orders.getDeleted(),Constants.ONE)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
         }
-        if(!Constants.equalsInteger(orders.getStatus(),Constants.TWO)){
+        if(!Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.accept.getKey())){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜璇ユ搷浣�");
         }
         if(!Constants.equalsInteger(orders.getIsUpdate(),Constants.ONE)){
@@ -706,7 +718,7 @@
             ordersMapper.update(new UpdateWrapper<Orders>().lambda()
                     .set(Orders::getIsUpdate,Constants.TWO)
                     .set(Orders::getUpdateTime,"now()")
-                    .set(Orders::getStatus,Constants.ONE)
+                    .set(Orders::getStatus,Constants.ordersStatus.wait.getKey())
                     .set(Orders::getAcceptMemberId,null)
                     .set(Orders::getAcceptType,null)
                     .eq(Orders::getId,orders.getId())
@@ -737,9 +749,9 @@
         if(Objects.isNull(orders)||Constants.equalsInteger(orders.getDeleted(),Constants.ONE)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
         }
-        if(!(Constants.equalsInteger(orders.getStatus(),Constants.ONE)
-                ||Constants.equalsInteger(orders.getStatus(),Constants.ZERO)
-        || Constants.equalsInteger(orders.getStatus(),Constants.TWO))){
+        if(!(Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.wait.getKey())
+                ||Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.waitPay.getKey())
+        || Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.accept.getKey()))){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜鍙栨秷");
         }
         if(Constants.equalsInteger(orders.getReleaseMemberId(),member.getId())){
@@ -754,15 +766,14 @@
                 withdrawalOrders.setCreateTime(new Date());
                 withdrawalOrders.setMemberId(orders.getReleaseMemberId());
                 withdrawalOrders.setAmount(orders.getPayAccount());
-                withdrawalOrders.setWxExternalNo("refund_"+orders.getCode());
-                withdrawalOrders.setStatus(Constants.ONE);
+                withdrawalOrders.setStatus(Constants.ZERO);
                 withdrawalOrders.setDoneTime(new Date());
                 withdrawalOrders.setType(Constants.ONE);
                 withdrawalOrders.setObjId(orders.getId());
                 wxMiniUtilService.wxRefund(withdrawalOrders,orders);
             }
             ordersMapper.update(new UpdateWrapper<Orders>().lambda()
-                    .set(Orders::getStatus,99)
+                    .set(Orders::getStatus,Constants.ordersStatus.cancel.getKey())
                     .set(Orders::getUpdateTime,"now()")
                     .set(Orders::getCancelTime,"now()")
                     .set(Orders::getCancelType,Constants.ZERO)
@@ -773,7 +784,7 @@
             Integer totalCancelTimes = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RELEASE_CANCEL_TIMES).getCode());
             Long cancelTimes = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
                     .apply(" DATE(cancel_time) = DATE(NOW()) ")
-                    .eq(Orders::getStatus,99)
+                    .eq(Orders::getStatus,Constants.ordersStatus.cancel.getKey())
                     .eq(Orders::getReleaseMemberId,orders.getReleaseMemberId()));
             //鏌ヨ鍙栨秷娆℃暟
             if(totalCancelTimes<=cancelTimes){
@@ -800,7 +811,7 @@
                 wxMiniUtilService.wxRefund(withdrawalOrders,orders);
             }
             ordersMapper.update(new UpdateWrapper<Orders>().lambda()
-                    .set(Orders::getStatus,99)
+                    .set(Orders::getStatus,Constants.ordersStatus.cancel.getKey())
                     .set(Orders::getUpdateTime,"now()")
                     .set(Orders::getCancelTime,"now()")
                     .set(Orders::getCancelType,Constants.ONE)
@@ -833,7 +844,7 @@
         if(Objects.isNull(orders)||Constants.equalsInteger(orders.getDeleted(),Constants.ONE)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
         }
-        if(!Constants.equalsInteger(orders.getStatus(),Constants.TWO)){
+        if(!Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.accept.getKey())){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜鍙栨秷");
         }
         if(Constants.equalsInteger(orders.getAcceptMemberId(),member.getId())){
@@ -857,7 +868,7 @@
         }
         ordersMapper.update(new UpdateWrapper<Orders>().lambda()
                 .set(Orders::getUpdateTime,"now()")
-                .set(Orders::getStatus,Constants.ONE)
+                .set(Orders::getStatus,Constants.ordersStatus.wait.getKey())
                 .set(Orders::getAcceptMemberId,null)
                 .set(Orders::getAcceptType,null)
                 .eq(Orders::getId,orders.getId())
@@ -892,7 +903,7 @@
         if(Objects.isNull(orders)||Constants.equalsInteger(orders.getDeleted(),Constants.ONE)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
         }
-        if(!Constants.equalsInteger(orders.getStatus(),Constants.THREE)){
+        if(!Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.doing.getKey())){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜鍙栨秷");
         }
         if(Constants.equalsInteger(orders.getReleaseMemberId(),doneOrderDTO.getMember().getId())){
@@ -909,7 +920,7 @@
             //鍞よ捣鏀粯涓氬姟
             object = this.getWxPayResponse(orders,orders.getMember().getOpenid());
         }else{
-            orders.setStatus(Constants.FOUR);
+            orders.setStatus(Constants.ordersStatus.done.getKey());
             //鏃ュ織瀛樺偍
             Constants.OrdersLog ordersLog = Constants.OrdersLog.DONE;
             this.saveOrderLog(orders,ordersLog,
@@ -928,8 +939,8 @@
         if(Objects.isNull(orders)||Constants.equalsInteger(orders.getDeleted(),Constants.ONE)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
         }
-        if(!(Constants.equalsInteger(orders.getStatus(),Constants.ONE)||Constants.equalsInteger(orders.getStatus(),Constants.TWO)
-            ||Constants.equalsInteger(orders.getStatus(),Constants.THREE))){
+        if(!(Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.wait.getKey())||Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.accept.getKey())
+                ||Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.doing.getKey())||Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.waitPay.getKey()))){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜鍙栨秷");
         }
         //濡傛灉宸叉敮浠� 鍒欓渶瑕佽繘琛岄��娆�
@@ -955,7 +966,7 @@
         }
 
         ordersMapper.update(new UpdateWrapper<Orders>().lambda()
-                .set(Orders::getStatus,99)
+                .set(Orders::getStatus,Constants.ordersStatus.cancel.getKey())
                 .set(Orders::getUpdateTime,"now()")
                 .set(Orders::getCancelTime,"now()")
                 .set(Orders::getCancelType,Constants.TWO)
@@ -984,7 +995,7 @@
                 ||Constants.equalsInteger(orders.getDeleted(),Constants.ONE)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
         }
-        if(!Constants.equalsInteger(orders.getStatus(),Constants.FOUR)){
+        if(!Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.done.getKey())){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜璇勪环");
         }
         if(Constants.equalsInteger(orders.getCommentStatus(),Constants.ONE)){
@@ -1033,7 +1044,7 @@
                 //澶勭悊鏀粯瀹屾垚閫昏緫
                 ordersMapper.update(new UpdateWrapper<Orders>().lambda()
                         .set(Orders::getUpdateTime,"now()")
-                        .set(Orders::getStatus,Constants.ONE)
+                        .set(Orders::getStatus,Constants.ordersStatus.wait)
                         .set(Orders::getPayStatus,Constants.ONE)
                         .set(Orders::getWxExternalNo,paymentNo)
                         .eq(Orders::getId,orders.getId())
@@ -1253,22 +1264,111 @@
     }
 
 
-
-
     public synchronized String  getNextCode(Integer type){
-//        String prefix = "YG";
-//        if(!Constants.equalsInteger(type,Constants.ZERO)){
-//            prefix = (Constants.equalsInteger(type,Constants.ONE)?"YC-":"SC-");
-//        }
-//        prefix =  DateUtil.getDate(new Date(),"yyyyMMdd") +"-";
-//        Integer countNum  = RedisUtil.getObject(redisTemplate, Constants.RedisKeys.ORDER_CODE, Integer.class);
-//        countNum = Constants.formatIntegerNum(countNum)+1;
-//        //鏇存柊缂撳瓨
-//        RedisUtil.addObject(redisTemplate,Constants.RedisKeys.ORDER_CODE,countNum);
-//        String nextIndex =Integer.toString( countNum );
-//        return prefix + org.apache.commons.lang3.StringUtils.leftPad(nextIndex,3,"0");
-        return null;
+        String prefix = "YG";
+        if(!Constants.equalsInteger(type,Constants.ZERO)){
+            prefix = (Constants.equalsInteger(type,Constants.ONE)?"YH-":"DC-");
+        }
+        prefix =  DateUtil.getDate(new Date(),"yyyyMMddHHmmss") +"-";
+
+        Integer countNum  = (Integer) redisTemplate.opsForValue().get(Constants.RedisKeys.ORDER_CODE);//RedisUtil.getObject(redisTemplate, Constants.RedisKeys.ORDER_CODE, Integer.class);
+        countNum = Constants.formatIntegerNum(countNum)+1;
+        //鏇存柊缂撳瓨
+        redisTemplate.opsForValue().set(Constants.RedisKeys.ORDER_CODE,countNum);
+        String nextIndex =Integer.toString( countNum );
+        return prefix + org.apache.commons.lang3.StringUtils.leftPad(nextIndex,3,"0");
     }
 
 
+    @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+    public void refundCallback(RefundNotification refundNotification){
+        WithdrawalOrders withdrawalOrders = withdrawalOrdersMapper.selectById(refundNotification.getOutRefundNo());
+        if(Objects.isNull(withdrawalOrders)||!Constants.equalsInteger(withdrawalOrders.getStatus(),Constants.ZERO)){
+            return;
+        }
+        withdrawalOrders.setWxExternalNo(refundNotification.getTransactionId());
+        withdrawalOrders.setUpdateTime(new Date());
+        withdrawalOrders.setDoneTime(withdrawalOrders.getUpdateTime());
+        if (!"SUCCESS".equals(refundNotification.getRefundStatus().name())) {
+            // 濡傛灉閫�娆剧姸鎬佷笉姝g‘锛屼慨鏀归��娆惧崟鐘舵��
+            withdrawalOrders.setStatus(Constants.TWO);
+        }else{
+            withdrawalOrders.setStatus(Constants.ONE);
+        }
+        //鏇存柊閫�娆惧崟鐘舵��
+        withdrawalOrdersMapper.updateById(withdrawalOrders);
+    }
+
+
+
+    //todo 鑷姩娲惧崟
+    public void autoGrabOrders(){
+
+
+    }
+
+    //鑷姩璇勪环 璁㈠崟瀹屾垚7澶╁悗鑷姩璇勪环4鏄�
+    @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+    public void autoComment(){
+        List<Orders> ordersList = ordersMapper.selectList(new QueryWrapper<Orders>().lambda()
+                .eq(Orders::getStatus,Constants.FOUR).eq(Orders::getCommentStatus,Constants.ZERO)
+                .apply(" DATE_ADD(finish_time, INTERVAL 7 DAY) < now() ")
+                .last("limit 100")
+        );
+
+        for (Orders orders:ordersList) {
+            ordersMapper.update(new UpdateWrapper<Orders>().lambda()
+                    .set(Orders::getCommentStatus,Constants.ONE)
+                    .set(Orders::getUpdateTime,"now()")
+                    .set(Orders::getCommentTime,"now()")
+                    .set(Orders::getCommentLevel,Constants.FOUR)
+                    .set(Orders::getCommentType,Constants.ZERO)
+                    .eq(Orders::getId,orders.getId())
+            );
+
+            memberMapper.update(new UpdateWrapper<Member>().lambda()
+                    .set(Member::getScore," ( total_score +" + Constants.FOUR + " ) / (score_order_num + 1 )")
+                    .set(Member::getTotalScore," total_score +" + Constants.FOUR)
+                    .set(Member::getScoreOrderNum," score_order_num + 1 " ).eq(Member::getId,orders.getAcceptMemberId())
+            );
+
+            //鏃ュ織瀛樺偍
+            Constants.OrdersLog ordersLog = Constants.OrdersLog.AUTO_COMMENT;
+            this.saveOrderLog(orders,ordersLog,
+                    ordersLog.getInfo(),orders.getAcceptMemberId(),null);
+        }
+    }
+
+
+    //鑷姩纭 璁㈠崟淇敼鍚庤嫢鏈鐞� 鏍规嵁閰嶇疆鑷姩澶勭悊
+    @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+    public void autoConfirm(){
+        String autoConfirmTime = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.AUTO_CONFIRM).getCode();
+        List<Orders> ordersList = ordersMapper.selectList(new QueryWrapper<Orders>().lambda()
+                .eq(Orders::getStatus,Constants.ordersStatus.accept).eq(Orders::getIsUpdate,Constants.ONE)
+                .apply(" DATE_ADD(IS_UPDATE_TIME, INTERVAL "+autoConfirmTime+" MINUTE) < now() ")
+                .last("limit 100")
+        );
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ordersList)){
+            for (Orders orders:ordersList) {
+                ordersMapper.update(new UpdateWrapper<Orders>().lambda()
+                        .set(Orders::getIsUpdate,Constants.TWO)
+                        .set(Orders::getUpdateTime,"now()")
+                        .eq(Orders::getId,orders.getId())
+                );
+                //璁板綍鍚屾剰淇敼鐨勬棩蹇�
+                Constants.OrdersLog ordersLog = Constants.OrdersLog.AUTO_AGREE;
+                this.saveOrderLog(orders,ordersLog,
+                        ordersLog.getInfo(),orders.getAcceptMemberId(),null);
+            }
+        }
+    }
+
+
+
+
+
 }

--
Gitblit v1.9.3