From 5fd8f535ef44ef055d91673740491b9c9177aa89 Mon Sep 17 00:00:00 2001
From: seatonwan9
Date: 星期日, 24 八月 2025 20:32:01 +0800
Subject: [PATCH] 交易管理

---
 src/main/java/com/webmanage/controller/OrderController.java |  149 +++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 142 insertions(+), 7 deletions(-)

diff --git a/src/main/java/com/webmanage/controller/OrderController.java b/src/main/java/com/webmanage/controller/OrderController.java
index 6680838..f66ad4d 100644
--- a/src/main/java/com/webmanage/controller/OrderController.java
+++ b/src/main/java/com/webmanage/controller/OrderController.java
@@ -2,8 +2,12 @@
 
 import com.webmanage.common.Result;
 import com.webmanage.dto.CreateOrderDTO;
+import com.webmanage.dto.FileCheckDTO;
 import com.webmanage.dto.OrderQueryDTO;
+import com.webmanage.entity.OrderInfo;
+import com.webmanage.dto.UpdateOrderDetailDTO;
 import com.webmanage.service.OrderInfoService;
+import com.webmanage.service.TokenService;
 import com.webmanage.service.OrderNoService;
 import com.webmanage.vo.OrderDetailVO;
 import io.swagger.annotations.Api;
@@ -17,6 +21,7 @@
 import javax.validation.Valid;
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
+import com.webmanage.dto.OrderApprovalDTO;
 
 /**
  * 璁㈠崟绠$悊Controller
@@ -29,6 +34,7 @@
 public class OrderController {
     @Resource private OrderInfoService orderInfoService;
     @Resource private OrderNoService orderNoService;
+    @Resource private TokenService tokenService;
 
     @PostMapping("/buyer/page")
     @ApiOperation("鍒嗛〉鏌ヨ涔板璁㈠崟鍒楄〃")
@@ -38,14 +44,30 @@
     }
 
     @PostMapping("/create")
-    @ApiOperation("鍒涘缓璁㈠崟锛堝寘鍚鍗曡鎯咃級")
-    public Result<Object> createOrder(@Valid @RequestBody CreateOrderDTO createOrderDTO) {
+    @ApiOperation("鍒涘缓璁㈠崟锛堝寘鍚鍗曡鎯咃級锛岄渶鍦� Header 鎼哄甫 Idempotency-Token 闃查噸澶嶆彁浜�")
+    public Result<OrderInfo> createOrder(@RequestHeader(value = "Idempotency-Token", required = false) String token,
+                                         @Valid @RequestBody CreateOrderDTO createOrderDTO) {
         try {
-            String orderId = orderInfoService.createOrder(createOrderDTO);
-            return Result.success(orderId);
+            if (!tokenService.verifyAndConsume(token)) {
+                return Result.error("璇锋眰鏃犳晥鎴栭噸澶嶆彁浜わ紝璇峰埛鏂伴〉闈㈠悗閲嶈瘯");
+            }
+            OrderInfo orderInfo = orderInfoService.createOrder(createOrderDTO);
+            return Result.success(orderInfo);
         } catch (Exception e) {
             log.error("鍒涘缓璁㈠崟澶辫触", e);
             return Result.error("鍒涘缓璁㈠崟澶辫触锛�" + e.getMessage());
+        }
+    }
+
+    @GetMapping("/idempotency/token")
+    @ApiOperation("鑾峰彇涓�娆℃�ч槻閲嶅鎻愪氦 Token")
+    public Result<Object> getIdempotencyToken(@RequestParam(required = false) Long userId) {
+        try {
+            String token = tokenService.generateToken(userId);
+            return Result.success("token鐢熸垚",token);
+        } catch (Exception e) {
+            log.error("鐢熸垚闃查噸澶嶆彁浜� Token 澶辫触", e);
+            return Result.error("鐢熸垚闃查噸澶嶆彁浜� Token 澶辫触锛�" + e.getMessage());
         }
     }
 
@@ -58,6 +80,34 @@
         } catch (Exception e) {
             log.error("鐢熸垚璁㈠崟鍙峰け璐�", e);
             return Result.error("鐢熸垚璁㈠崟鍙峰け璐ワ細" + e.getMessage());
+        }
+    }
+
+
+
+    @PostMapping("/status/next")
+    @ApiOperation("鏇存柊璁㈠崟鐘舵�佸埌涓嬩竴涓姸鎬�")
+    public Result<Object> updateOrderStatusToNext(
+            @ApiParam("璁㈠崟ID") @RequestParam @NotBlank String orderId) {
+        try {
+            boolean success = orderInfoService.updateOrderStatusToNext(orderId);
+            return success ? Result.success("璁㈠崟鐘舵�佹洿鏂板埌涓嬩竴涓姸鎬佹垚鍔�") : Result.error("璁㈠崟鐘舵�佹洿鏂板け璐�");
+        } catch (Exception e) {
+            log.error("鏇存柊璁㈠崟鐘舵�佸埌涓嬩竴涓姸鎬佸け璐�", e);
+            return Result.error("鏇存柊璁㈠崟鐘舵�佸埌涓嬩竴涓姸鎬佸け璐ワ細" + e.getMessage());
+        }
+    }
+
+    @PostMapping("/status/previous")
+    @ApiOperation("鏇存柊璁㈠崟鐘舵�佸埌涓婁竴涓姸鎬�")
+    public Result<Object> updateOrderStatusToPrevious(
+            @ApiParam("璁㈠崟ID") @RequestParam @NotBlank String orderId) {
+        try {
+            boolean success = orderInfoService.updateOrderStatusToPrevious(orderId);
+            return success ? Result.success("璁㈠崟鐘舵�佹洿鏂板埌涓婁竴涓姸鎬佹垚鍔�") : Result.error("璁㈠崟鐘舵�佹洿鏂板け璐�");
+        } catch (Exception e) {
+            log.error("鏇存柊璁㈠崟鐘舵�佸埌涓婁竴涓姸鎬佸け璐�", e);
+            return Result.error("鏇存柊璁㈠崟鐘舵�佸埌涓婁竴涓姸鎬佸け璐ワ細" + e.getMessage());
         }
     }
 
@@ -101,7 +151,7 @@
 
     @PostMapping("/attachment/upload")
     @ApiOperation("涓婁紶璁㈠崟闄勪欢")
-    public Result<Boolean> uploadOrderAttachment(
+    public Result<Long> uploadOrderAttachment(
             @ApiParam("璁㈠崟ID") @RequestParam @NotBlank String orderId,
             @ApiParam("鏂囦欢鍚�") @RequestParam @NotBlank String fileName,
             @ApiParam("鍘熷鏂囦欢鍚�") @RequestParam String originalName,
@@ -115,11 +165,11 @@
             @ApiParam("闄勪欢绫诲瀷") @RequestParam String attachmentType,
             @ApiParam("闄勪欢鎻忚堪") @RequestParam String description) {
         try {
-            boolean result = orderInfoService.uploadOrderAttachment(
+            Long attachmentId = orderInfoService.uploadOrderAttachment(
                 orderId, fileName, originalName, fileType, fileSize, fileUrl,
                 bucketName, objectName, uploadUserId, uploadUserName, attachmentType, description
             );
-            return result ? Result.success(true) : Result.error("涓婁紶璁㈠崟闄勪欢澶辫触");
+            return Result.success("涓婁紶璁㈠崟闄勪欢鎴愬姛", attachmentId);
         } catch (Exception e) {
             log.error("涓婁紶璁㈠崟闄勪欢澶辫触锛岃鍗旾D: {}", orderId, e);
             return Result.error("涓婁紶璁㈠崟闄勪欢澶辫触锛�" + e.getMessage());
@@ -179,4 +229,89 @@
             return Result.error("鍥炲璇勪环澶辫触锛�" + e.getMessage());
         }
     }
+
+    @PostMapping("/detail/update")
+    @ApiOperation("鏇存柊璁㈠崟璇︽儏")
+    public Result<Boolean> updateOrderDetail(@Valid @RequestBody UpdateOrderDetailDTO updateOrderDetailDTO) {
+        try {
+            boolean result = orderInfoService.updateOrderDetail(updateOrderDetailDTO);
+            return result ? Result.success(true) : Result.error("鏇存柊璁㈠崟璇︽儏澶辫触");
+        } catch (Exception e) {
+            log.error("鏇存柊璁㈠崟璇︽儏澶辫触锛岃鍗旾D: {}", updateOrderDetailDTO.getOrderId(), e);
+            return Result.error("鏇存柊璁㈠崟璇︽儏澶辫触锛�" + e.getMessage());
+        }
+    }
+
+    @PostMapping("/detail/remarks/update")
+    @ApiOperation("鍙洿鏂拌鍗曡鎯呯殑澶囨敞淇℃伅")
+    public Result<Boolean> updateOrderDetailRemarksOnly(@Valid @RequestBody UpdateOrderDetailDTO.UpdateOrderDetailRemarksOnlyDTO updateOrderDetailDTO) {
+        try {
+            boolean result = orderInfoService.updateOrderDetailRemarksOnly(updateOrderDetailDTO);
+            return result ? Result.success(true) : Result.error("鏇存柊璁㈠崟璇︽儏澶囨敞澶辫触");
+        } catch (Exception e) {
+            log.error("鏇存柊璁㈠崟璇︽儏澶囨敞澶辫触锛岃鍗旾D: {}", updateOrderDetailDTO.getOrderId(), e);
+            return Result.error("鏇存柊璁㈠崟璇︽儏澶囨敞澶辫触锛�" + e.getMessage());
+        }
+    }
+
+    @PostMapping("/trade/checkFiles")
+    @ApiOperation("鏂囦欢鏍告煡")
+    public Result<Boolean> checkFiles(@Valid @RequestBody FileCheckDTO fileCheckDTO) {
+        try {
+            boolean result = orderInfoService.checkFiles(fileCheckDTO);
+            return result ? Result.success(true) : Result.error("鏂囦欢鏍告煡澶辫触");
+        } catch (Exception e) {
+            log.error("鏂囦欢鏍告煡澶辫触锛岃鍗旾D: {}", fileCheckDTO.getOrderId(), e);
+            return Result.error("鏂囦欢鏍告煡澶辫触锛�" + e.getMessage());
+        }
+    }
+
+    @DeleteMapping("/attachment/delete/{attachmentId}")
+    @ApiOperation("鍒犻櫎璁㈠崟闄勪欢")
+    public Result<Boolean> deleteOrderAttachment(@ApiParam("闄勪欢ID") @PathVariable @NotNull Long attachmentId) {
+        try {
+            boolean result = orderInfoService.deleteOrderAttachment(attachmentId);
+            return result ? Result.success(true) : Result.error("鍒犻櫎璁㈠崟闄勪欢澶辫触");
+        } catch (Exception e) {
+            log.error("鍒犻櫎璁㈠崟闄勪欢澶辫触锛岄檮浠禝D: {}", attachmentId, e);
+            return Result.error("鍒犻櫎璁㈠崟闄勪欢澶辫触锛�" + e.getMessage());
+        }
+    }
+
+    @PostMapping("/trade/approve")
+    @ApiOperation("瀹℃壒閫氳繃")
+    public Result<Boolean> approveOrder(@Valid @RequestBody OrderApprovalDTO orderApprovalDTO) {
+        try {
+            boolean result = orderInfoService.approveOrder(orderApprovalDTO);
+            return result ? Result.success(true) : Result.error("瀹℃壒閫氳繃澶辫触");
+        } catch (Exception e) {
+            log.error("瀹℃壒閫氳繃澶辫触锛岃鍗旾D: {}", orderApprovalDTO.getOrderId(), e);
+            return Result.error("瀹℃壒閫氳繃澶辫触锛�" + e.getMessage());
+        }
+    }
+
+    @GetMapping("/agreement/check/{orderId}")
+    @ApiOperation("妫�鏌ヨ鍗曟槸鍚﹀寘鍚崗璁被鍨嬬殑瀛愯鍗�")
+    public Result<Boolean> checkAgreementPriceType(
+            @ApiParam("璁㈠崟ID") @PathVariable @NotBlank String orderId) {
+        try {
+            boolean hasAgreement = orderInfoService.hasAgreementPriceType(orderId);
+            return Result.success(hasAgreement);
+        } catch (Exception e) {
+            log.error("妫�鏌ヨ鍗曞崗璁被鍨嬪け璐ワ紝璁㈠崟ID: {}", orderId, e);
+            return Result.error("妫�鏌ヨ鍗曞崗璁被鍨嬪け璐ワ細" + e.getMessage());
+        }
+    }
+
+    @DeleteMapping("/cancel/{orderId}")
+    @ApiOperation("鍙栨秷璁㈠崟")
+    public Result<Boolean> cancelOrder(@ApiParam("璁㈠崟ID") @PathVariable @NotBlank String orderId) {
+        try {
+            boolean result = orderInfoService.cancelOrder(orderId);
+            return result ? Result.success(true) : Result.error("鍙栨秷璁㈠崟澶辫触");
+        } catch (Exception e) {
+            log.error("鍙栨秷璁㈠崟澶辫触锛岃鍗旾D: {}", orderId, e);
+            return Result.error("鍙栨秷璁㈠崟澶辫触锛�" + e.getMessage());
+        }
+    }
 }

--
Gitblit v1.8.0