From bd6229ebd9cb543a22944ecb1142fad92b675dce Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期一, 13 十月 2025 14:26:25 +0800
Subject: [PATCH] bug 修复

---
 server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java |  307 ++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 228 insertions(+), 79 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 e1599db..bca9bde 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
@@ -37,6 +37,7 @@
 import nonapi.io.github.classgraph.json.Id;
 import org.apache.poi.sl.image.ImageHeaderEMF;
 import org.checkerframework.checker.units.qual.A;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
@@ -46,6 +47,7 @@
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
@@ -134,11 +136,11 @@
         if(Objects.isNull(category)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鍙傛暟閰嶇疆閿欒,璇疯仈绯荤鐞嗗憳");
         }
+        orders.setPayAccount(orders.getEstimatedAccount());
+        Long tcje = Long.valueOf(new BigDecimal(orders.getPayAccount().toString()).multiply(orders.getPlatformRata()).intValue());
+        orders.setReceiveAccount(orders.getPayAccount() - tcje);
         //鐢ㄩ璁㈠崟
         if(Constants.equalsInteger(orders.getType(),Constants.TWO)){
-            orders.setPayAccount(orders.getEstimatedAccount());
-            Long tcje = Long.valueOf(new BigDecimal(orders.getPayAccount().toString()).multiply(orders.getPlatformRata()).intValue());
-            orders.setReceiveAccount(orders.getPayAccount() - tcje);
             orders.setStatus(Constants.ordersStatus.waitPay.getKey());
             orders.setOutTradeNo(UUID.randomUUID().toString().replace("-",""));
             //鍞よ捣鏀粯涓氬姟
@@ -147,6 +149,10 @@
         }else{
             orders.setStatus(Constants.ordersStatus.wait.getKey());
         }
+        orders.setOriginPriceNum1(orders.getPriceNum1());
+        orders.setOriginPriceNum2(orders.getPriceNum2());
+        orders.setOriginEstimatedAccount(orders.getEstimatedAccount());
+        orders.setConfirmOtherFee(0l);
         ordersMapper.insert(orders);
 
         orderReleaseVO.setId(orders.getId());
@@ -170,7 +176,7 @@
 
         //鍒涘缓鎿嶄綔鏃ュ織
         Constants.OrdersLog ordersLog = Constants.OrdersLog.UPLOAD;
-        String orderTypeInfo = "鐢ㄥ伐鍗�";
+        String orderTypeInfo = Constants.getOrderInfo(orders);/*"鐢ㄥ伐鍗�";
         if(!Constants.equalsInteger(orders.getType(),Constants.ZERO)){
             orderTypeInfo =   Constants.equalsInteger(orders.getType(),Constants.ONE)?"鐢ㄨ溅鍗�":"閫侀鍗�";
         }else{
@@ -179,7 +185,7 @@
             }else{
                 orderTypeInfo = orderTypeInfo + (Constants.equalsInteger(orders.getWorkType(),Constants.ONE)?"-鍒嗘嫞宸�":"-鍖呰宸�");
             }
-        }
+        }*/
         String logInfo = ordersLog.getInfo()
                 .replace("{param}",orderTypeInfo);
         this.saveOrderLog(orders,ordersLog,
@@ -204,7 +210,7 @@
         request.setOutTradeNo(orders.getOutTradeNo());
         request.setNotifyUrl(WxMiniConfig.wxProperties.getNotifyUrl());//杩欎釜鍥炶皟url蹇呴』鏄痟ttps寮�澶寸殑
         Amount amount = new Amount();
-        amount.setTotal(1);//orders.getPayAccount().intValue());
+        amount.setTotal(orders.getPayAccount().intValue());
         request.setAmount(amount);
 //        PrepayResponse res = WxMiniConfig.wxPayService.prepay(request);
         // 璺熶箣鍓嶄笅鍗曠ず渚嬩竴鏍凤紝濉厖棰勪笅鍗曞弬鏁�
@@ -240,7 +246,7 @@
 
 
     public void initVerification(Orders orders){
-        if(Objects.isNull(orders)
+         if(Objects.isNull(orders)
                 || Objects.isNull(orders.getType())
                 || Objects.isNull(orders.getStartDate())
                 || Objects.isNull(orders.getEndDate())
@@ -256,9 +262,13 @@
         ){
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
         }
-        if( (Constants.equalsInteger(orders.getType(),Constants.ZERO) && Constants.equalsInteger(orders.getWorkType(),Constants.TWO) &&
-            ( Constants.equalsInteger(orders.getCarType(),Constants.ZERO) || Constants.equalsInteger(orders.getCarType(),Constants.ONE) ))
-            || (Constants.equalsInteger(orders.getType(),Constants.ZERO) && Constants.equalsInteger(orders.getWorkType(),Constants.ONE))
+        Integer priceNum2 = orders.getPriceNum2();
+        if( (Constants.equalsInteger(orders.getType(),Constants.ZERO)
+                && Constants.equalsInteger(orders.getWorkType(),Constants.TWO) &&
+            ( Constants.equalsInteger(orders.getCarType(),Constants.ZERO)
+                    || Constants.equalsInteger(orders.getCarType(),Constants.ONE) ))
+            || (Constants.equalsInteger(orders.getType(),Constants.ZERO)
+                && Constants.equalsInteger(orders.getWorkType(),Constants.ONE))
         ){
             if(Objects.isNull(orders.getPriceNum2())){
                 throw new BusinessException(ResponseStatus.BAD_REQUEST);
@@ -269,7 +279,7 @@
         orders.setTotalDays(DateUtil.daysBetweenDates(orders.getEndDate(),orders.getStartDate())+1);
         if(Constants.equalsInteger(orders.getType(),Constants.ZERO)){
             if(Constants.equalsInteger(orders.getWorkType(),Constants.TWO)
-            && ( Objects.isNull(orders.getCarType())  ) ){
+                && ( Objects.isNull(orders.getCarType())  ) ){
                 throw new BusinessException(ResponseStatus.BAD_REQUEST);
             }
         }else if(Constants.equalsInteger(orders.getType(),Constants.ONE)){
@@ -310,6 +320,7 @@
                 throw new BusinessException(ResponseStatus.BAD_REQUEST);
             }
             Long sumPrice = 0L;
+//            List<CateringDTO> cateringDTOList = new ArrayList<>();
             for (CateringDTO cateringDTO:orders.getCateringDTOList()) {
                 if(Objects.isNull(cateringDTO)
                         || StringUtils.isEmpty(cateringDTO.getName())
@@ -332,15 +343,19 @@
                     throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鐢ㄩ鏍囧噯鏁版嵁閿欒锛岃鍒锋柊閲嶈瘯");
                 }
                 sumPrice = sumPrice + (cateringDTO.getPrice() * cateringDTO.getNum()) ;
+
             }
             if(new BigDecimal(sumPrice.toString()).compareTo(orders.getPrice())!=Constants.ZERO){
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍗曚环璁$畻閿欒");
             }
+
+
             orders.setWayInfo(JSONObject.toJSONString(orders.getCateringDTOList()));
         }
         if(!orders.getEstimatedAccount().equals(this.getTotal(orders))){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"閲戦璁$畻閿欒!");
         }
+        orders.setPriceNum2(priceNum2);
     }
 
 
@@ -382,7 +397,8 @@
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟宸蹭慨鏀癸紝寰呮帴鍗曟柟纭锛屾棤娉曡繘琛岃鎿嶄綔");
         }
         if(!Constants.equalsInteger(model.getType(),Constants.TWO)){
-            if(Constants.equalsInteger(model.getStatus(),Constants.ZERO)||Constants.equalsInteger(model.getStatus(),Constants.ONE)){
+            if(Constants.equalsInteger(model.getStatus(),Constants.ZERO)
+                    ||Constants.equalsInteger(model.getStatus(),Constants.ONE)){
                 this.updateById(orders);
             }else if(Constants.equalsInteger(model.getStatus(),Constants.TWO)){
                 this.updOrderData(orders,model);
@@ -392,9 +408,6 @@
         }else{
             throw new BusinessException(ResponseStatus.NOT_ALLOWED);
         }
-
-
-
     }
 
 
@@ -439,6 +452,11 @@
             }
             multifileMapper.insert(multifileList);
         }
+        orders.setOriginPriceNum1(orders.getPriceNum1());
+        orders.setOriginPriceNum2(orders.getPriceNum2());
+        orders.setOriginEstimatedAccount(orders.getEstimatedAccount());
+        orders.setPayAccount(orders.getEstimatedAccount());
+        orders.setConfirmOtherFee(0L);
         ordersMapper.updateById(orders);
     }
 
@@ -631,9 +649,9 @@
                 if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(cateringDTOList)){
                     for (CateringDTO cateringDTO:cateringDTOList) {
                         if(StringUtils.isEmpty(orders.getOrderContent())){
-                            orders.setOrderContent(cateringDTO.getName()+cateringDTO.getPrice()+" 闇�"+cateringDTO.getNum()+"浠�");
+                            orders.setOrderContent(cateringDTO.getName()+(new BigDecimal(cateringDTO.getPrice().toString()).divide(new BigDecimal("100"),2,BigDecimal.ROUND_HALF_UP))+" 闇�"+cateringDTO.getNum()+"浠�");
                         }else{
-                            orders.setOrderContent(orders.getOrderContent()+" | "+cateringDTO.getName()+cateringDTO.getPrice()+" 闇�"+cateringDTO.getNum()+"浠�");
+                            orders.setOrderContent(orders.getOrderContent()+" | "+cateringDTO.getName()+(new BigDecimal(cateringDTO.getPrice().toString()).divide(new BigDecimal("100"),2,BigDecimal.ROUND_HALF_UP))+" 闇�"+cateringDTO.getNum()+"浠�");
                         }
                     }
                 }
@@ -672,15 +690,15 @@
         //鏌ヨ鐢ㄦ埛鏄惁鏈夊搴旇韩浠�
         if(Constants.equalsInteger(orders.getType(),Constants.ZERO)){
             if(!Constants.equalsInteger(member.getWorkerIdentity(),Constants.TWO)){
-                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎮ㄨ繕鏈敞鍐岃鏈嶅姟锛岃鍓嶅線涓汉淇℃伅涓彁浜ょ敵璇枫��");
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎮ㄨ繕鏈敞鍐岃鏈嶅姟锛岃鍓嶅線\"鎴戠殑\"椤甸潰鎻愪氦鐢宠");
             }
         }else if(Constants.equalsInteger(orders.getType(),Constants.ONE)){
             if(!Constants.equalsInteger(member.getDriverIdentity(),Constants.TWO)){
-                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎮ㄨ繕鏈敞鍐岃鏈嶅姟锛岃鍓嶅線涓汉淇℃伅涓彁浜ょ敵璇枫��");
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎮ㄨ繕鏈敞鍐岃鏈嶅姟锛岃鍓嶅線\"鎴戠殑\"椤甸潰鎻愪氦鐢宠");
             }
         }else{
             if(!Constants.equalsInteger(member.getChefIdentity(),Constants.TWO)){
-                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎮ㄨ繕鏈敞鍐岃鏈嶅姟锛岃鍓嶅線涓汉淇℃伅涓彁浜ょ敵璇枫��");
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎮ㄨ繕鏈敞鍐岃鏈嶅姟锛岃鍓嶅線\"鎴戠殑\"椤甸潰鎻愪氦鐢宠");
             }
         }
 
@@ -746,6 +764,9 @@
         if(Constants.equalsInteger(orders.getIsUpdate(),Constants.ONE)){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟淇敼寰呯‘璁わ紝鏃犳硶杩涜璇ユ搷浣�");
         }
+        if(orders.getStartDate().getTime()>System.currentTimeMillis()){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鏈埌寮�濮嬫椂闂存棤娉曡繘琛岃鎿嶄綔");
+        }
         orders.setUpdateTime(new Date());
         orders.setStatus(Constants.ordersStatus.doing.getKey());
         orders.setWorkStartTime(new Date());
@@ -786,6 +807,8 @@
             model.setPriceNum1(orders.getTotalDays());
         }
         Long total = this.getTotal(orders);
+        Long tcje = Long.valueOf(new BigDecimal(total.toString()).multiply(model.getPlatformRata()).intValue());
+        Long reciveTotal = total  - tcje;
         ordersMapper.update(new UpdateWrapper<Orders>().lambda()
                 .set(Orders::getStartDate,model.getStartDate())
                 .set(Orders::getEndDate,model.getEndDate())
@@ -794,6 +817,8 @@
                 .set(Orders::getIsUpdateTime,new Date())
                 .set(Orders::getUpdateTime,new Date())
                 .set(Orders::getEstimatedAccount,total)
+                .set(Orders::getOriginEstimatedAccount,total)
+                .set(Orders::getReceiveAccount,reciveTotal)
                 .eq(Orders::getId,orders.getId())
         );
         //鍒涘缓鎿嶄綔鏃ュ織
@@ -830,24 +855,108 @@
     public Long getTotal(Orders orders){
         if(Objects.isNull(orders)
                 ||Objects.isNull(orders.getPrice())
-                ||Objects.isNull(orders.getPriceNum1())){
+                ||Objects.isNull(orders.getPriceNum1())
+                ||Objects.isNull(orders.getType())
+        ){
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
         }
+        BigDecimal bigDecimalPrice = BigDecimal.ZERO;
         if(
             (Constants.equalsInteger(orders.getType(),Constants.ZERO) && Constants.equalsInteger(orders.getWorkType(),Constants.ZERO ))
-            || Constants.equalsInteger(orders.getType(),Constants.ONE)
+                    || (Constants.equalsInteger(orders.getType(),Constants.ZERO) && Objects.nonNull(orders.getCarType()) && Constants.equalsInteger(orders.getWorkType(),Constants.TWO ) && Constants.equalsInteger(orders.getCarType(),Constants.TWO))
+                || Constants.equalsInteger(orders.getType(),Constants.ONE)
                 || Constants.equalsInteger(orders.getType(),Constants.TWO)
         ){
-            orders.setPriceNum2(Constants.ONE);
+            bigDecimalPrice = orders.getPrice().multiply(new BigDecimal(orders.getPriceNum1().toString()));
         }else{
             if(Objects.isNull(orders.getPriceNum2())){
                 throw new BusinessException(ResponseStatus.BAD_REQUEST);
             }
+            bigDecimalPrice = orders.getPrice().multiply(new BigDecimal(orders.getPriceNum1().toString())).multiply(new BigDecimal(orders.getPriceNum2().toString()));
         }
-        BigDecimal bigDecimalPrice = orders.getPrice().multiply(new BigDecimal(orders.getPriceNum1().toString())).multiply(new BigDecimal(orders.getPriceNum2().toString()));
+        if(Objects.nonNull(orders.getConfirmOtherFee())){
+            bigDecimalPrice = bigDecimalPrice.add(new BigDecimal(orders.getConfirmOtherFee().toString()));
+        }
         return bigDecimalPrice.divide(new BigDecimal("1"),0,BigDecimal.ROUND_HALF_UP).longValue();//orders.getPrice() * orders.getPriceNum1() * orders.getPriceNum2();
     }
 
+
+    /**
+     * 鎺ュ崟鏂圭‘璁よ鍗曡垂鐢�
+     */
+    @Override
+    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+    public void  confirmFee(ConfirmFeeOrderDTO confirmUpdOrderDTO){
+        if(Objects.isNull(confirmUpdOrderDTO)
+                || Objects.isNull(confirmUpdOrderDTO.getOrderId())
+                || Objects.isNull(confirmUpdOrderDTO.getPriceNum1())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        Orders orders = ordersMapper.selectById(confirmUpdOrderDTO.getOrderId());
+        if(Objects.isNull(orders)||Constants.equalsInteger(orders.getDeleted(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(!Constants.equalsInteger(orders.getAcceptMemberId(),confirmUpdOrderDTO.getMember().getId())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炴偍鐨勮鍗曟棤娉曡繘琛岃鎿嶄綔");
+        }
+        if(!Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.doing.getKey())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜璇ユ搷浣�");
+        }
+        //绫诲瀷:0=鐢ㄥ伐锛�1=杩愯揣锛�2=璁㈤
+        if(Constants.equalsInteger(orders.getType(),Constants.ZERO)){
+            //鐢ㄥ伐绫诲瀷:0=閲囨憳宸ワ紱1=鍒嗘嫞宸ワ紱2=鍖呰宸ワ紱锛堢敤宸ヨ鍗曪級
+            if(Constants.equalsInteger(orders.getWorkType(),Constants.ONE)){
+                //1=鍒嗘嫞宸�
+                if( Objects.isNull(confirmUpdOrderDTO.getPriceNum2())){//蹇呴』鏈夌敤宸ユ暟閲忥紙浜猴級
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST);
+                }
+            }else if(Constants.equalsInteger(orders.getWorkType(),Constants.TWO)){
+                //鍖呰宸� 鐢ㄨ溅绫诲瀷(鐢ㄥ伐鍖呰/杩愯揣浣跨敤):0=澶�;1=娆�/灏忔椂;2=閲嶉噺
+                if( !Constants.equalsInteger(orders.getCarType(),Constants.TWO)
+                        && Objects.isNull(confirmUpdOrderDTO.getPriceNum2())){
+                    //涓嶆槸鎸夐噸閲忚璐圭殑锛屽繀椤绘湁鐢ㄥ伐鏁伴噺锛堜汉锛�
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST);
+                }
+            }
+        }else  if(Constants.equalsInteger(orders.getType(),Constants.ONE)){
+            //杩愯揣璁㈠崟
+
+        }else{
+            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璇ヨ鍗曚笉鏀寔璇ユ搷浣滐紝璇疯繑鍥炲埛鏂伴噸璇曪紒");
+        }
+        orders.setPriceNum1(confirmUpdOrderDTO.getPriceNum1());
+        orders.setPriceNum2(confirmUpdOrderDTO.getPriceNum2());
+        orders.setConfirmOtherFee(confirmUpdOrderDTO.getConfirmOtherFee());
+        Long totalFee = this.getTotal(orders);//閲嶆柊璁$畻璐圭敤
+        Long payFee = totalFee;//閲嶆柊璁$畻璐圭敤
+        Long tcje = Long.valueOf(new BigDecimal(orders.getPayAccount().toString()).multiply(orders.getPlatformRata()).intValue());
+        Long reciveTotal = payFee  - tcje;
+        //BigDecimal recFee = new BigDecimal(payFee).multiply((new BigDecimal(1).subtract(Constants.formatBigDecimal(orders.getPlatformRata())))).setScale(0, RoundingMode.HALF_UP) ;
+        ordersMapper.update(new UpdateWrapper<Orders>().lambda()
+                .set(Orders::getPriceNum1,confirmUpdOrderDTO.getPriceNum1())
+                .set(Orders::getPriceNum2,confirmUpdOrderDTO.getPriceNum2())
+                .set(Orders::getConfirmFeeRemark,confirmUpdOrderDTO.getConfirmFeeRemark())
+                .set(Orders::getConfirmOtherFee,confirmUpdOrderDTO.getConfirmOtherFee())
+                .set(Orders::getEstimatedAccount,totalFee)
+                .set(Orders::getStatus,Constants.ordersStatus.feeconfirm.getKey())
+                .set(Orders::getPayAccount,payFee)
+                .set(Orders::getReceiveAccount,reciveTotal)
+                .set(Orders::getUpdateTime,new Date())
+                .set(Orders::getConfirmFeeTime,new Date())
+                .eq(Orders::getId,orders.getId())
+        );
+        //璁板綍鍚屾剰淇敼鐨勬棩蹇�
+        Constants.OrdersLog ordersLog = Constants.OrdersLog.FEE_CONFIRM;
+        this.saveOrderLog(orders,ordersLog,
+                ordersLog.getInfo(),confirmUpdOrderDTO.getMember().getId(),null);
+
+        //寰俊閫氱煡
+        Member member = memberMapper.selectById(orders.getReleaseMemberId());
+        if(Objects.nonNull(member)&& org.apache.commons.lang3.StringUtils.isNotBlank(member.getOpenid())){
+            sendWxMessage.waitPayMessage(member.getOpenid(),orders);
+        }
+
+    }
 
     /**
      * 鎺ュ崟鏂瑰鐞嗚鍗曚慨鏀�
@@ -1002,13 +1111,13 @@
                     .eq(Orders::getReleaseMemberId,orders.getReleaseMemberId()));
             //鏌ヨ鍙栨秷娆℃暟
             if(totalCancelTimes<=cancelTimes){
-                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"浠婃棩璁㈠崟涓诲姩鍙栨秷娆℃暟宸茶秴鍑�"+totalCancelTimes+"娆�,鏃犳硶鍙栨秷璁㈠崟,濡傞渶澶勭悊璇疯仈绯诲鏈�");
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"浠婃棩璁㈠崟涓诲姩鍙栨秷娆℃暟宸茶秴鍑�"+totalCancelTimes+"娆�,鏃犳硶鍙栨秷璁㈠崟");
             }
 
             Integer cancelTimeHour = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RELEASE_CANCEL_TIME).getCode());
             Long hours = DateUtil.getBetweenHours(new Date(),orders.getStartDate());
             if(hours < cancelTimeHour){
-                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璺濈璁㈠崟寮�濮嬫椂闂翠笉瓒�"+cancelTimeHour+"灏忔椂,鏃犳硶鍙栨秷璁㈠崟锛屽闇�澶勭悊璇疯仈绯诲鏈�");
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璺濈璁㈠崟寮�濮嬫椂闂翠笉瓒�"+cancelTimeHour+"灏忔椂,鏃犳硶鍙栨秷璁㈠崟");
             }
 
             if(Constants.equalsInteger(orders.getType(),Constants.TWO)){
@@ -1048,6 +1157,7 @@
         if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(members)){
             List<String> openIdList = members.stream().map(i->i.getOpenid()).collect(Collectors.toList());
             //鍙戦�佸井淇¢�氱煡
+            orders.setCancelTime(new Date());
             sendWxMessage.cancelMessage(openIdList,orders,Constants.ONE);
         }
 
@@ -1085,16 +1195,17 @@
                 .eq(OrderLog::getMemberId,member.getId()));
         //鏌ヨ鍙栨秷娆℃暟
         if(totalCancelTimes<=cancelTimes){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"浠婃棩璁㈠崟涓诲姩鍙栨秷娆℃暟宸茶秴鍑�"+totalCancelTimes+"娆�,鏃犳硶鍙栨秷璁㈠崟,濡傞渶澶勭悊璇疯仈绯诲鏈�");
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"浠婃棩璁㈠崟涓诲姩鍙栨秷娆℃暟宸茶秴鍑�"+totalCancelTimes+"娆�,鏃犳硶鍙栨秷璁㈠崟");
         }
 
         Integer cancelTimeHour = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RECEIVE_CANCEL_TIME).getCode());
         Long hours = DateUtil.getBetweenHours(new Date(),orders.getStartDate());
         if(hours < cancelTimeHour){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璺濈璁㈠崟寮�濮嬫椂闂翠笉瓒�"+cancelTimeHour+"灏忔椂,鏃犳硶鍙栨秷璁㈠崟锛屽闇�澶勭悊璇疯仈绯诲鏈�");
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璺濈璁㈠崟寮�濮嬫椂闂翠笉瓒�"+cancelTimeHour+"灏忔椂,鏃犳硶鍙栨秷璁㈠崟");
         }
         ordersMapper.update(new UpdateWrapper<Orders>().lambda()
                 .set(Orders::getUpdateTime,new Date())
+                .set(Orders::getCancelTime,new Date())
                 .set(Orders::getStatus,Constants.ordersStatus.wait.getKey())
                 .set(Orders::getAcceptMemberId,null)
                 .set(Orders::getAcceptType,null)
@@ -1115,6 +1226,7 @@
         if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(members)){
             List<String> openIdList = members.stream().map(i->i.getOpenid()).collect(Collectors.toList());
             //鍙戦�佸井淇¢�氱煡
+            orders.setCancelTime(new Date());
             sendWxMessage.cancelMessage(openIdList,orders,Constants.TWO);
         }
         //鐭俊閫氱煡
@@ -1140,9 +1252,16 @@
         if(Objects.isNull(orders)||Constants.equalsInteger(orders.getDeleted(),Constants.ONE)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
         }
-        if(!Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.doing.getKey())){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜鍙栨秷");
+        if(Constants.equalsInteger(orders.getType(),Constants.orderType.scd.getKey())){
+            if(!Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.doing.getKey())){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜鍙栨秷");
+            }
+        }else{
+            if(!Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.feeconfirm.getKey())){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆,鏃犳硶杩涜鍙栨秷");
+            }
         }
+
         if(!Constants.equalsInteger(orders.getReleaseMemberId(),doneOrderDTO.getMember().getId())){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炴偍鐨勮鍗曟棤娉曡繘琛岃鎿嶄綔");
         }
@@ -1158,6 +1277,7 @@
         if(!Constants.equalsInteger(orders.getType(),Constants.TWO)){
             orders.setPayAccount(doneOrderDTO.getAmount());
             //鎻愭垚閲戦
+//            Long tcje =  (new BigDecimal(orders.getPayAccount().toString()).multiply(Constants.formatBigDecimal(orders.getPlatformRata())).setScale(0,RoundingMode.HALF_UP).longValue());
             Long tcje = Long.valueOf(new BigDecimal(orders.getPayAccount().toString()).multiply(orders.getPlatformRata()).intValue());
             orders.setReceiveAccount(orders.getPayAccount() - tcje);
             orders.setOutTradeNo(UUID.randomUUID().toString().replace("-",""));
@@ -1232,21 +1352,28 @@
         }
 
         if(!((( Constants.equalsInteger(orders.getType(),Constants.TWO) && Constants.equalsInteger(orders.getStatus(),Constants.ZERO) )
-                || ( !Constants.equalsInteger(orders.getType(),Constants.TWO) && Constants.equalsInteger(orders.getStatus(),Constants.THREE) ))
+                || ( !Constants.equalsInteger(orders.getType(),Constants.TWO) && Constants.equalsInteger(orders.getStatus(),Constants.FIVE) ))
         && Constants.equalsInteger(orders.getPayStatus(),Constants.ZERO) )){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鐘舵�佸凡娴佽浆");
         }
+        Member payMember = memberMapper.selectById(reusePayDTO.getMember().getId());
+        if(Objects.isNull(payMember)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛淇℃伅寮傚父");
+        }
+
         OrderReleaseVO orderReleaseVO = new OrderReleaseVO();
         if(!Constants.equalsInteger(orders.getType(),Constants.TWO)){
             orders.setPayAccount(reusePayDTO.getAmount());
             //鎻愭垚閲戦
             Long tcje = Long.valueOf(new BigDecimal(orders.getPayAccount().toString()).multiply(orders.getPlatformRata()).intValue());
             orders.setReceiveAccount(orders.getPayAccount() - tcje);
+            orders.setOutTradeNo(UUID.randomUUID().toString().replace("-",""));
+            ordersMapper.updateById(orders);
         }
         orders.setOutTradeNo(UUID.randomUUID().toString().replace("-",""));
         ordersMapper.updateById(orders);
         //鍞よ捣鏀粯涓氬姟
-        Object object = this.getWxPayResponse(orders,orders.getMember().getOpenid());
+        Object object = this.getWxPayResponse(orders,payMember.getOpenid());
         orderReleaseVO.setObject(object);
         orderReleaseVO.setId(orders.getId());
         return orderReleaseVO;
@@ -1310,6 +1437,7 @@
             List<String> openIdList = members.stream().map(i->i.getOpenid()).collect(Collectors.toList());
             orders.setCancelTime(new Date());
             //鍙戦�佸井淇¢�氱煡
+            orders.setCancelTime(new Date());
             sendWxMessage.cancelMessage(openIdList,orders,Constants.ZERO);
         }
         //鐭俊閫氱煡鍙戝崟鏂�
@@ -1409,7 +1537,7 @@
             }
         }else{
             //闈炵敤椁愮被璁㈠崟
-            if(!Constants.equalsInteger(orders.getStatus(),Constants.THREE)){
+            if(!Constants.equalsInteger(orders.getStatus(),Constants.FIVE)){
                 return  ("澶勭悊鎴愬姛!");
             }else{
                 //澶勭悊鏀粯瀹屾垚閫昏緫
@@ -1489,9 +1617,7 @@
         Utils.MP.blankToNull(pageWrap.getModel());
         Orders model = pageWrap.getModel();
         if(Objects.isNull(model)
-            || Objects.isNull(model.getQueryLat())
-            || Objects.isNull(model.getQueryLgt())
-                || Objects.isNull(model.getQueryMyOrderType())
+            || Objects.isNull(model.getQueryMyOrderType())
         ){
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
         }
@@ -1536,24 +1662,29 @@
                 .select("c2.name",Orders::getTransportTypeName)
                 .leftJoin(" category c1 on t.category_id = c1.id  ")
                 .leftJoin(" category c2 on t.TRANSPORT_TYPE_ID = c2.id  ")
-                .select(" case when T.LGT IS NULL OR T.LAT IS NULL THEN 0 " +
-                        " when t.TYPE = 0 then CONVERT( ST_Distance_Sphere ( POINT ( t.LGT, t.LAT ), POINT ( "+workerLgt+", "+workerLat+" )) /1000,DECIMAL(15,2))  " +
-                        " when t.TYPE = 1 then   CONVERT( ST_Distance_Sphere ( POINT ( t.LGT, t.LAT ), POINT ( "+driverLgt+", "+driverLat+" )) /1000,DECIMAL(15,2)) " +
-                        " else  CONVERT( ST_Distance_Sphere ( POINT ( t.LGT, t.LAT ), POINT ( "+chefLgt+", "+chefLat+" )) /1000,DECIMAL(15,2)) end " , Orders::getDistance)
-                .eq(Objects.nonNull(model.getType()),Orders::getType,model.getType());
+                .eq(Objects.nonNull(model.getType()),Orders::getType,model.getType())
+                .eq(Objects.nonNull(model.getCommentStatus()),Orders::getCommentStatus,model.getCommentStatus());;
+        if(!(Objects.isNull(model.getQueryLat())||Objects.isNull(model.getQueryLgt()))){
+            queryWrapper.select(" case when T.LGT IS NULL OR T.LAT IS NULL THEN 0 " +
+                    " when t.TYPE = 0 then CONVERT( ST_Distance_Sphere ( POINT ( t.LGT, t.LAT ), POINT ( "+workerLgt+", "+workerLat+" )) /1000,DECIMAL(15,2))  " +
+                    " when t.TYPE = 1 then   CONVERT( ST_Distance_Sphere ( POINT ( t.LGT, t.LAT ), POINT ( "+driverLgt+", "+driverLat+" )) /1000,DECIMAL(15,2)) " +
+                    " else  CONVERT( ST_Distance_Sphere ( POINT ( t.LGT, t.LAT ), POINT ( "+chefLgt+", "+chefLat+" )) /1000,DECIMAL(15,2)) end " , Orders::getDistance);
+        }
         if(Objects.nonNull(model.getQueryMyOrderType())){
             if(Constants.equalsInteger(model.getQueryMyOrderType(),Constants.ZERO)){
                 //鍙戝崟鏂� 鎴戠殑璁㈠崟
                 queryWrapper.eq(Orders::getReleaseMemberId,model.getMember().getId());
-                queryWrapper.eq(Objects.nonNull(model.getStatus()),Orders::getStatus,model.getStatus());
+                queryWrapper.eq(Objects.nonNull(model.getStatus())&&!Constants.equalsInteger(model.getStatus(),Constants.ordersStatus.waitPay.getKey()),Orders::getStatus,model.getStatus());
+                queryWrapper.in(Objects.nonNull(model.getStatus())&&Constants.equalsInteger(model.getStatus(),Constants.ordersStatus.waitPay.getKey()),Orders::getStatus,model.getStatus(),Constants.ordersStatus.feeconfirm.getKey());
                 queryWrapper.orderByDesc(Orders::getCreateTime);
             }else if(Constants.equalsInteger(model.getQueryMyOrderType(),Constants.ONE)){
                 //鎺ュ崟鏂� 鎴戠殑璁㈠崟
                 queryWrapper.eq(Orders::getAcceptMemberId,model.getMember().getId());
                 queryWrapper.eq(Objects.nonNull(model.getStatus()),Orders::getStatus,model.getStatus());
+//                queryWrapper.in(Objects.nonNull(model.getStatus())&&Constants.equalsInteger(model.getStatus(),Constants.ordersStatus.waitPay.getKey()),Orders::getStatus,model.getStatus(),Constants.ordersStatus.feeconfirm.getKey());
                 queryWrapper.orderByDesc(Orders::getAcceptTime);
             }else{
-                //鏌ヨ鐢ㄦ埛鐨勬帴鍗曟潈閲�
+                //鏌ヨ鐢ㄦ埛鐨勬帴鍗曟潈閲� 鎺ュ崟澶у巺
                 ReceiveWeight receiveWeight = receiveWeightMapper.selectOne(new QueryWrapper<ReceiveWeight>().lambda().eq(ReceiveWeight::getDeleted,Constants.ZERO).apply(" RECEIVE_MIN < "+model.getMember().getReceiveNum()+" and RECEIVE_MAX > " + model.getMember().getReceiveNum()).last(" limit 1 "));
                 if(Objects.nonNull(receiveWeight)){
                     queryWrapper.apply(" DATE_ADD(t.CREATE_TIME, INTERVAL "+receiveWeight.getDelayTime()+" MINUTE)  < now() ");
@@ -1574,38 +1705,13 @@
         IPage<Orders> iPage = ordersMapper.selectJoinPage(page,Orders.class,queryWrapper);
         for (Orders orders:iPage.getRecords()) {
             this.getPriceUnit(orders);
+            if(Constants.equalsInteger(model.getQueryMyOrderType(),Constants.ZERO)||Constants.equalsInteger(model.getQueryMyOrderType(),Constants.ONE)){
+                orders.setStatusName(
+                        Constants.equalsInteger(model.getQueryMyOrderType(),Constants.ZERO)?Constants.ordersStatus.getName(orders.getStatus()):
+                                Constants.ordersStatus.getInfo(orders.getStatus())
+                );
+            }
         }
-//        if(Objects.nonNull(model.getQueryMyOrderType())&&Constants.equalsInteger(model.getQueryMyOrderType(),Constants.TWO)){
-//            if(Constants.equalsInteger(model.getMember().getUseIdentity(),Constants.ONE)){
-//                model.getMember().setWorkerIdentityModel(
-//                        identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda()
-//                                .eq(IdentityInfo::getMemberId,model.getMember().getId())
-//                                .eq(IdentityInfo::getType,Constants.ZERO)
-//                                .eq(IdentityInfo::getAuditStatus,Constants.TWO)
-//                                .last("limit 1")
-//                        )
-//                );
-//                model.getMember().setDriverIdentityModel(
-//                        identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda()
-//                                .eq(IdentityInfo::getMemberId,model.getMember().getId())
-//                                .eq(IdentityInfo::getType,Constants.ONE)
-//                                .eq(IdentityInfo::getAuditStatus,Constants.TWO)
-//                                .last("limit 1")
-//                        )
-//                );
-//                model.getMember().setChefIdentityModel(
-//                        identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda()
-//                                .eq(IdentityInfo::getMemberId,model.getMember().getId())
-//                                .eq(IdentityInfo::getType,Constants.TWO)
-//                                .eq(IdentityInfo::getAuditStatus,Constants.TWO)
-//                                .last("limit 1")
-//                        )
-//                );
-//            }
-//            for (Orders orders:iPage.getRecords()) {
-//               this.getDistance(model.getMember(),orders);
-//            }
-//        }
         return PageData.from(iPage);
     }
 
@@ -1705,12 +1811,25 @@
         orders.setStatusName(Constants.ordersStatus.getName(orders.getStatus()));
         orders.setCancelStatus(Constants.ZERO);
         if(Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.accept.getKey())&&Constants.equalsInteger(orders.getIsUpdate(),Constants.ONE)){
-            orders.setConfirmCountdown(DateUtil.getXMinuteAfterDate(orders.getIsUpdateTime(),60).getTime() - System.currentTimeMillis());
+            String autoConfirmTime = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.AUTO_CONFIRM).getCode();
+            orders.setConfirmCountdown(DateUtil.getXMinuteAfterDate(orders.getIsUpdateTime(),Integer.valueOf(autoConfirmTime)).getTime() - System.currentTimeMillis());
+            if(orders.getConfirmCountdown()<=Constants.ZERO){
+                orders.setConfirmCountdown(0L);
+            }
         }
-
+        if(Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.waitPay.getKey())){
+            orders.setCancelCountdown(DateUtil.getXMinuteAfterDate(orders.getCreateTime(),15).getTime() - System.currentTimeMillis());
+            if(orders.getCancelCountdown()<=Constants.ZERO){
+                orders.setCancelCountdown(0L);
+            }
+        }
         this.getPriceUnit(orders);
+        orders.setCanStart(Constants.ZERO);
         if(orders.getStatus() <= Constants.ordersStatus.accept.getKey()){
             if(Constants.equalsInteger(orders.getReleaseMemberId(),member.getId())){
+                if(Constants.equalsInteger(orders.getStatus(),Constants.ordersStatus.accept.getKey())&&orders.getStartDate().getTime() <= System.currentTimeMillis()){
+                    orders.setCanStart(Constants.ONE);
+                }
                 //鍒ゆ柇鏄惁鍙慨鏀� 宸插彇娑堟鏁� 涓� 鏃堕棿闄愬埗
                 Integer totalCancelTimes = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.RELEASE_CANCEL_TIMES).getCode());
                 Long cancelTimes = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
@@ -1809,7 +1928,7 @@
             BigDecimal lat = orders.getLat();
             BigDecimal lgt = orders.getLgt();
             //鏌ヨ鑼冨洿鍐呯殑浼氬憳
-            List<Member> memberList = memberMapper.getList(lgt,lat,orders.getType());
+            List<Member> memberList = memberMapper.getList(lgt,lat,orders.getType(),orders.getReleaseMemberId());
 //                    memberMapper.selectList(new MPJLambdaWrapper<Member>()
 //                    .select(Member::getId,Member::getScore)
 //                            .select(" ifnull((select r.level from receive_weight r where r.RECEIVE_MAX > RECEIVE_NUM and RECEIVE_NUM > r.RECEIVE_MIN limit 1  ),0) " ,Member::getLevel)
@@ -1831,7 +1950,8 @@
             Member releaseMember = memberMapper.selectById(orders.getReleaseMemberId());
             //鑷姩娲惧崟
             Orders model = ordersMapper.selectById(orders.getId());
-            if(!Constants.equalsInteger(model.getStatus(),Constants.ONE)){
+            if(!Constants.equalsInteger(model.getStatus(),Constants.ONE) || Constants.equalsInteger(releaseMember.getId(),model.getReleaseMemberId())){
+               //濡傛灉璁㈠崟宸插垹闄� 骞朵笖闈炲彂甯冩柟
                 continue;
             }
             ordersMapper.update(new UpdateWrapper<Orders>().lambda().eq(Orders::getId,model.getId())
@@ -1914,7 +2034,8 @@
     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)
+                .eq(Orders::getStatus,Constants.ordersStatus.accept.getKey())
+                .eq(Orders::getIsUpdate,Constants.ONE)
                 .apply(" DATE_ADD(IS_UPDATE_TIME, INTERVAL "+autoConfirmTime+" MINUTE) < now() ")
                 .last("limit 100")
         );
@@ -1928,6 +2049,34 @@
                 //璁板綍鍚屾剰淇敼鐨勬棩蹇�
                 Constants.OrdersLog ordersLog = Constants.OrdersLog.AUTO_AGREE;
                 this.saveOrderLog(orders,ordersLog,
+                        ordersLog.getInfo(),null,null);
+            }
+        }
+    }
+
+
+
+    //鑷姩鍙栨秷 璁㈠崟鏈敮浠�
+    @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+    public void autoCancelWaitPay(){
+        List<Orders> ordersList = ordersMapper.selectList(new QueryWrapper<Orders>().lambda()
+                .eq(Orders::getStatus,Constants.ordersStatus.waitPay)
+                .apply(" DATE_ADD(CREATE_TIME, INTERVAL 15 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::getStatus,Constants.ordersStatus.cancel.getKey())
+                        .set(Orders::getUpdateTime,DateUtil.getCurrDateTime())
+                        .set(Orders::getCancelTime,DateUtil.getCurrDateTime())
+                        .set(Orders::getCancelType,Constants.TWO)
+                        .eq(Orders::getId,orders.getId())
+                );
+                //璁板綍鍚屾剰淇敼鐨勬棩蹇�
+                Constants.OrdersLog ordersLog = Constants.OrdersLog.SYSTEM_CANCEL;
+                this.saveOrderLog(orders,ordersLog,
                         ordersLog.getInfo(),orders.getAcceptMemberId(),null);
             }
         }

--
Gitblit v1.9.3