From db7fa6a91b9534ac90e219b6f554c54c43c83a5a Mon Sep 17 00:00:00 2001
From: liujie <liujie>
Date: 星期三, 16 八月 2023 09:28:15 +0800
Subject: [PATCH] update

---
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/api/OrderController.java |  249 ++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 234 insertions(+), 15 deletions(-)

diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/api/OrderController.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/api/OrderController.java
index 9e24715..78592c1 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/api/OrderController.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/api/OrderController.java
@@ -1,7 +1,20 @@
 package com.supersavedriving.driver.modular.system.api;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.supersavedriving.driver.modular.system.model.DivisionRecord;
+import com.supersavedriving.driver.modular.system.model.Order;
+import com.supersavedriving.driver.modular.system.model.RechargeRecord;
+import com.supersavedriving.driver.modular.system.service.IDivisionRecordService;
+import com.supersavedriving.driver.modular.system.service.IRechargeRecordService;
+import com.supersavedriving.driver.modular.system.util.MallBook.model.InterfaceResponse;
+import com.supersavedriving.driver.modular.system.util.MallBook.model.Receive;
+import com.supersavedriving.driver.modular.system.util.MallBook.model.ReceiveUser;
+import com.supersavedriving.driver.modular.system.util.MallBook.util.RSASignature;
+import com.supersavedriving.driver.modular.system.util.MallBook.util.TrhRequest;
+import com.supersavedriving.driver.modular.system.util.rongyun.RongYunUtil;
+import com.supersavedriving.driver.modular.system.util.rongyun.model.CloudRecordingCallback;
 import com.supersavedriving.driver.modular.system.warpper.*;
-import com.supersavedriving.driver.core.common.annotion.ServiceLog;
 import com.supersavedriving.driver.core.util.ToolUtil;
 import com.supersavedriving.driver.modular.system.service.IDriverService;
 import com.supersavedriving.driver.modular.system.service.IOrderService;
@@ -11,14 +24,21 @@
 import com.supersavedriving.driver.modular.system.warpper.OrderInfoWarpper;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
-import java.util.List;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.SimpleDateFormat;
+import java.util.*;
 
 /**
 * 订单控制器
@@ -29,11 +49,19 @@
 @RequestMapping("")
 public class OrderController {
 
+    Logger logger = LoggerFactory.getLogger(OrderController.class);
+
     @Autowired
     private IOrderService orderService;
 
     @Autowired
     private IDriverService driverService;
+
+    @Autowired
+    private IRechargeRecordService rechargeRecordService;
+
+    @Autowired
+    private IDivisionRecordService divisionRecordService;
 
 
 
@@ -45,14 +73,14 @@
     @ApiImplicitParams({
             @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
     })
-    public ResponseWarpper<Long> queryDriverServerOrder(){
+    public ResponseWarpper<Map<String, Object>> queryDriverServerOrder(){
         try {
             Integer uid = driverService.getUserByRequest();
             if(null == uid){
                 return ResponseWarpper.tokenErr();
             }
-            Long id = orderService.queryDriverServerOrder(uid);
-            return ResponseWarpper.success(id);
+            Map<String, Object> map = orderService.queryDriverServerOrder(uid);
+            return ResponseWarpper.success(map);
         }catch (Exception e){
             e.printStackTrace();
             return new ResponseWarpper(500, e.getMessage());
@@ -68,7 +96,7 @@
     @ApiImplicitParams({
             @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
     })
-    public ResponseWarpper driverAddOrder(AddOrderWarpper addOrderWarpper){
+    public ResponseWarpper<Integer> driverAddOrder(AddOrderWarpper addOrderWarpper){
         try {
             Integer uid = driverService.getUserByRequest();
             if(null == uid){
@@ -234,9 +262,10 @@
     @ApiImplicitParams({
             @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "long"),
             @ApiImplicitParam(value = "原因", name = "cause", required = true, dataType = "string"),
+            @ApiImplicitParam(value = "phone", name = "phone", required = false, dataType = "string"),
             @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
     })
-    public ResponseWarpper transferOrder(Long orderId, String cause){
+    public ResponseWarpper transferOrder(Long orderId, String cause,String phone){
         if(ToolUtil.isEmpty(orderId)){
             return ResponseWarpper.success(ResultUtil.paranErr("orderId"));
         }
@@ -248,7 +277,7 @@
             if(null == uid){
                 return ResponseWarpper.tokenErr();
             }
-            ResultUtil resultUtil = orderService.transferOrder(uid, orderId, cause);
+            ResultUtil resultUtil = orderService.transferOrder(uid, orderId, cause,phone);
             return ResponseWarpper.success(resultUtil);
         }catch (Exception e){
             e.printStackTrace();
@@ -370,10 +399,11 @@
     @ApiOperation(value = "服务完成后修改订单状态", tags = {"司机端-服务中"}, notes = "")
     @ApiImplicitParams({
             @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "long"),
-            @ApiImplicitParam(value = "107(线上支付),108(完成线下支付)", name = "state", required = true, dataType = "int"),
+            @ApiImplicitParam(value = "支付方式(1=线上,2=线下)", name = "payType", required = true, dataType = "int"),
+            @ApiImplicitParam(value = "107(待支付),108(已完成)", name = "state", required = true, dataType = "int"),
             @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
     })
-    public ResponseWarpper setOrderStatus(Long orderId, Integer state){
+    public ResponseWarpper setOrderStatus(Long orderId, Integer payType, Integer state){
         if(ToolUtil.isEmpty(orderId)){
             return ResponseWarpper.success(ResultUtil.paranErr("orderId"));
         }
@@ -385,7 +415,7 @@
             if(null == uid){
                 return ResponseWarpper.tokenErr();
             }
-            ResultUtil resultUtil = orderService.setOrderStatus(uid, orderId, state);
+            ResultUtil resultUtil = orderService.setOrderStatus(uid, orderId, payType, state);
             return ResponseWarpper.success(resultUtil);
         }catch (Exception e){
             e.printStackTrace();
@@ -394,7 +424,39 @@
     }
 
 
+    /**
+     * 转账回调
+     * @param execute
+     * @param response
+     */
+    @ResponseBody
+    @PostMapping("/base/order/zhaunzhangCallback")
+    public void zhaunzhangCallback(@RequestBody InterfaceResponse execute, HttpServletResponse response){
+        try {
+            if("0000".equals(execute.getCode())){
+                JSONObject jsonObject = JSON.parseObject(execute.getResult());
+                Integer status = jsonObject.getInteger("status");//0:待处理;1:成功;2:失败
+                if(2 == status){
+                    System.err.println("转账失败");
+                    return;
+                }
+                String parameter1 = jsonObject.getString("parameter1");
+                RechargeRecord rechargeRecord = rechargeRecordService.selectById(parameter1);
 
+
+                response.setStatus(200);
+                PrintWriter out = response.getWriter();
+                out.print("OK");
+                out.flush();
+                out.close();
+            }else{
+                System.err.println("转账失败:" + execute.getMsg());
+                return;
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
 
     @ResponseBody
     @PostMapping("/api/order/queryDriverOrderList")
@@ -425,4 +487,161 @@
             return new ResponseWarpper(500, e.getMessage());
         }
     }
+
+
+    /**
+     * 服务录音回调
+     * @param request
+     */
+    @ResponseBody
+    @PostMapping("/base/order/cloudRecordingCallback")
+    public void cloudRecordingCallback(HttpServletRequest request, HttpServletResponse response){
+        CloudRecordingCallback cloudRecordingCallback = RongYunUtil.cloudRecordingCallback(request);
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        System.err.println(sdf.format(new Date()) + "-------------------云端录制状态回调!-------------------");
+        System.err.println(JSON.toJSONString(cloudRecordingCallback));
+        if(null == cloudRecordingCallback){
+            System.err.println("云端录制状态回调解析出错!");
+            return;
+        }
+        Integer type = cloudRecordingCallback.getType();
+        if(4 == type){//文件上传
+            String fileUrl = cloudRecordingCallback.getOutput().getFileUrl();
+            String roomId = cloudRecordingCallback.getRoomId();
+            Order order = orderService.selectById(roomId);
+            order.setRouteRecord(fileUrl);
+            orderService.updateById(order);
+        }
+        PrintWriter out = null;
+        try {
+            out = response.getWriter();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        out.print("OK");
+        out.flush();
+        out.close();
+    }
+
+
+    @ResponseBody
+    @PostMapping("/api/order/openOrderQRCode")
+//    @ServiceLog(name = "打开下单二维码操作", url = "/api/order/openOrderQRCode")
+    @ApiOperation(value = "打开下单二维码操作", tags = {"司机端-首页"}, notes = "")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
+    })
+    public ResponseWarpper openOrderQRCode(){
+        try {
+            Integer uid = driverService.getUserByRequest();
+            if(null == uid){
+                return ResponseWarpper.tokenErr();
+            }
+            ResultUtil resultUtil = driverService.openOrderQRCode(uid);
+            return ResponseWarpper.success(resultUtil);
+        }catch (Exception e){
+            e.printStackTrace();
+            return new ResponseWarpper(500, e.getMessage());
+        }
+    }
+
+
+
+    @ResponseBody
+    @PostMapping("/api/order/closeOrderQRCode")
+//    @ServiceLog(name = "关闭下单二维码操作", url = "/api/order/closeOrderQRCode")
+    @ApiOperation(value = "关闭下单二维码操作", tags = {"司机端-首页"}, notes = "")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
+    })
+    public ResponseWarpper closeOrderQRCode(){
+        try {
+            Integer uid = driverService.getUserByRequest();
+            if(null == uid){
+                return ResponseWarpper.tokenErr();
+            }
+            ResultUtil resultUtil = driverService.closeOrderQRCode(uid);
+            return ResponseWarpper.success(resultUtil);
+        }catch (Exception e){
+            e.printStackTrace();
+            return new ResponseWarpper(500, e.getMessage());
+        }
+    }
+
+
+
+    /**
+     * 异步分账回调
+     */
+    @ResponseBody
+    @PostMapping("/base/order/ledgerCallback")
+    public void ledgerCallback(@RequestBody InterfaceResponse execute, HttpServletResponse response){
+        try{
+            // 验签
+            boolean verify = RSASignature.validate(execute.content(), execute.getSign());
+            if (verify) {//验签成功业务处理逻辑
+                if("0000".equals(execute.getCode())){
+                    JSONObject jsonObject = JSON.parseObject(execute.getResult());
+                    Integer status = jsonObject.getInteger("status");
+                    if(2 == status){
+                        logger.warn("异步分账回调异常");
+                        return;
+                    }
+                    String merOrderId = jsonObject.getString("merOrderId");
+                    String divisionRecordId = jsonObject.getString("parameter1");
+                    DivisionRecord divisionRecord = divisionRecordService.selectById(divisionRecordId);
+                    if(divisionRecord.getState() == 2){
+                        response.setStatus(200);
+                        PrintWriter out = response.getWriter();
+                        out.print("OK");
+                        out.flush();
+                        out.close();
+                        return;
+                    }
+                    divisionRecord.setMerOrderId(merOrderId);
+                    divisionRecord.setPayTime(new Date());
+                    divisionRecord.setState(2);
+                    divisionRecordService.updateById(divisionRecord);
+
+                    //确认收货
+                    new Timer().schedule(new TimerTask() {
+                        @Override
+                        public void run() {
+                            Receive receive = new Receive();//确认收货
+                            receive.setOriginalMerOrderId(merOrderId);
+                            receive.setRcvAmount(new BigDecimal(divisionRecord.getAmount()).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue() + "");
+                            List<ReceiveUser> splitList = new ArrayList<>();
+                            ReceiveUser receiveUser = new ReceiveUser();
+                            receiveUser.setSplitUserId(divisionRecord.getMerchantNumber());
+                            receiveUser.setRcvSplitAmount(new BigDecimal(divisionRecord.getAmount()).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue() + "");
+                            splitList.add(receiveUser);
+                            receive.setSplitList(splitList);
+                            TrhRequest<Receive> request1 = new TrhRequest();
+                            InterfaceResponse execute = request1.execute(receive, Receive.SERVICE_CODE);
+                            if(!"0000".equals(execute.getCode())){
+                                logger.warn("确认收货" + execute.getMsg());
+                            }
+                            JSONObject jsonObject = JSON.parseObject(execute.getResult());
+                            String status = jsonObject.getString("status");
+                            if("2".equals(status)){
+                                logger.warn("确认收货失败");
+                            }
+                            if("0".equals(status)){
+                                logger.warn("确认收货处理中");
+                            }
+                        }
+                    }, 60000);
+                    response.setStatus(200);
+                    PrintWriter out = response.getWriter();
+                    out.print("OK");
+                    out.flush();
+                    out.close();
+                }
+            } else {//验签失败业务处理逻辑
+                logger.warn("支付回调验签失败");
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
 }

--
Gitblit v1.7.1