zhentao 17 ore în urmă
părinte
comite
b9646076e2

+ 22 - 1
pom.xml

@@ -15,9 +15,25 @@
     </properties>
     <dependencies>
         <dependency>
+            <groupId>javax.xml.bind</groupId>
+            <artifactId>jaxb-api</artifactId>
+            <version>2.3.1</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.activation</groupId>
+            <artifactId>activation</artifactId>
+            <version>1.1.1</version>
+        </dependency>
+        <!-- no more than 2.3.3-->
+        <dependency>
+            <groupId>org.glassfish.jaxb</groupId>
+            <artifactId>jaxb-runtime</artifactId>
+            <version>2.3.3</version>
+        </dependency>
+        <dependency>
             <groupId>com.aliyun.oss</groupId>
             <artifactId>aliyun-sdk-oss</artifactId>
-            <version>3.13.1</version>
+            <version>3.17.4</version>
         </dependency>
         <dependency>
             <groupId>com.google.zxing</groupId>
@@ -46,6 +62,11 @@
             <artifactId>elasticsearch</artifactId>
             <version>7.4.0</version>
         </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.47</version>
+        </dependency>
 <!--        <dependency>-->
 <!--            <groupId>org.springframework.boot</groupId>-->
 <!--            <artifactId>spring-boot-starter-data-mongodb</artifactId>-->

+ 14 - 0
src/main/java/com/zhentao/order/controller/OrderController.java

@@ -0,0 +1,14 @@
+package com.zhentao.order.controller;
+
+import com.zhentao.order.service.OrdersService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("order")
+public class OrderController {
+    @Autowired
+    private OrdersService service;
+
+}

+ 30 - 0
src/main/java/com/zhentao/order/controller/PassengersController.java

@@ -0,0 +1,30 @@
+package com.zhentao.order.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.zhentao.order.domain.Passengers;
+import com.zhentao.order.dto.PassengersDto;
+import com.zhentao.order.service.PassengersService;
+import com.zhentao.vo.Result;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("passengers")
+public class PassengersController {
+    @Autowired
+    private PassengersService service;
+//    添加身份信息
+    @PostMapping("add")
+    public Result add(@RequestBody Passengers passengers){
+        boolean save = service.save(passengers);
+        return Result.OK(save,"添加成功");
+    }
+//    查询出当前用户所添加的乘客信息
+    @PostMapping("list")
+    public Result add(@RequestBody PassengersDto passengers){
+        return Result.OK(service.findAll(passengers),"添加成功");
+    }
+}

+ 4 - 21
src/main/java/com/zhentao/order/controller/QrCodeController.java

@@ -4,6 +4,7 @@ import com.google.zxing.BarcodeFormat;
 import com.google.zxing.MultiFormatWriter;
 import com.google.zxing.client.j2se.MatrixToImageWriter;
 import com.google.zxing.common.BitMatrix;
+import com.zhentao.order.domain.Passengers;
 import org.springframework.web.bind.annotation.*;
 
 import javax.imageio.ImageIO;
@@ -11,6 +12,7 @@ import java.awt.image.BufferedImage;
 import java.io.ByteArrayOutputStream;
 import java.util.Base64;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 @RestController
@@ -19,11 +21,11 @@ public class QrCodeController {
 
     // 生成带用户数据的二维码接口
     @PostMapping("/generate")
-    public Map<String, Object> generateQrCode(@RequestBody UserData userData) {
+    public Map<String, Object> generateQrCode(@RequestBody List<Passengers> list) {
         Map<String, Object> result = new HashMap<>();
         try {
             // 1. 处理用户数据
-            String dataToEncode = userData.toJsonString();
+            String dataToEncode = list.toString();
 
             // 2. 生成二维码图片
             int width = 300;
@@ -54,22 +56,3 @@ public class QrCodeController {
         return result;
     }
 }
-class UserData {
-    private String userId;
-    private String name;
-    private long timestamp;
-
-    // getters and setters
-    public String getUserId() { return userId; }
-    public void setUserId(String userId) { this.userId = userId; }
-    public String getName() { return name; }
-    public void setName(String name) { this.name = name; }
-    public long getTimestamp() { return timestamp; }
-    public void setTimestamp(long timestamp) { this.timestamp = timestamp; }
-
-    // 转换为JSON字符串(简化实现,实际建议用JSON库)
-    public String toJsonString() {
-        return String.format("{\"userId\":\"%s\",\"name\":\"%s\",\"timestamp\":%d}",
-                userId, name, timestamp);
-    }
-}

+ 12 - 0
src/main/java/com/zhentao/order/dto/OrderDto.java

@@ -0,0 +1,12 @@
+package com.zhentao.order.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class OrderDto {
+    private Long uid;
+    private Long tid;
+    private Integer quantity;
+}

+ 8 - 0
src/main/java/com/zhentao/order/dto/PassengersDto.java

@@ -0,0 +1,8 @@
+package com.zhentao.order.dto;
+
+import lombok.Data;
+
+@Data
+public class PassengersDto {
+    private Long uid;
+}

+ 103 - 0
src/main/java/com/zhentao/oss/controller/ossController.java

@@ -1,4 +1,107 @@
 package com.zhentao.oss.controller;
 
+import com.aliyun.oss.OSS;
+import com.aliyun.oss.OSSClientBuilder;
+import com.aliyun.oss.model.PutObjectRequest;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+@RestController
+@RequestMapping("/api/upload")
 public class ossController {
+
+    @Value("${aliyun.oss.endpoint}")
+    private String endpoint;
+
+    @Value("${aliyun.oss.accessKeyId}")
+    private String accessKeyId;
+
+    @Value("${aliyun.oss.accessKeySecret}")
+    private String accessKeySecret;
+
+    @Value("${aliyun.oss.bucketName}")
+    private String bucketName;
+
+    // 允许的图片格式
+    private static final String[] ALLOWED_TYPES = {
+            "image/jpeg", "image/png", "image/gif"
+    };
+
+    @PostMapping("/simple-image")
+    public Map<String, Object> uploadSimpleImage(@RequestParam("file") MultipartFile file) {
+        Map<String, Object> result = new HashMap<>();
+
+        // 基础验证
+        if (file == null || file.isEmpty()) {
+            result.put("code", 400);
+            result.put("message", "上传图片不能为空");
+            return result;
+        }
+
+        // 验证图片格式
+        String contentType = file.getContentType();
+        if (!isValidImageType(contentType)) {
+            result.put("code", 400);
+            result.put("message", "仅支持JPG、PNG、GIF格式的图片");
+            return result;
+        }
+
+        OSS ossClient = null;
+        try {
+            ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
+
+            // 生成唯一文件名
+            String originalFilename = file.getOriginalFilename();
+            String extension = getFileExtension(originalFilename);
+            String fileName = UUID.randomUUID().toString() + "." + extension;
+
+            // 上传图片
+            PutObjectRequest putObjectRequest = new PutObjectRequest(
+                    bucketName, fileName, file.getInputStream()
+            );
+            ossClient.putObject(putObjectRequest);
+
+            // 构建访问URL
+            String endpointWithoutProtocol = endpoint.replaceFirst("^https?://", "");
+            String imageUrl = "https://" + bucketName + "." + endpointWithoutProtocol + "/" + fileName;
+
+            // 返回结果
+            result.put("code", 200);
+            result.put("message", "图片上传成功");
+            result.put("imageUrl", imageUrl);
+
+        } catch (IOException e) {
+            result.put("code", 500);
+            result.put("message", "上传失败:" + e.getMessage());
+        } finally {
+            if (ossClient != null) {
+                ossClient.shutdown();
+            }
+        }
+
+        return result;
+    }
+
+    private boolean isValidImageType(String contentType) {
+        if (contentType == null) return false;
+        for (String type : ALLOWED_TYPES) {
+            if (contentType.equalsIgnoreCase(type)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private String getFileExtension(String fileName) {
+        if (fileName == null || !fileName.contains(".")) {
+            return "jpg";
+        }
+        return fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
+    }
 }

+ 3 - 1
src/main/java/com/zhentao/touristAttractions/controller/TouristAttractionsController.java

@@ -8,6 +8,8 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.io.IOException;
+
 @RestController
 @RequestMapping("touristAttractions")
 public class TouristAttractionsController {
@@ -15,7 +17,7 @@ public class TouristAttractionsController {
     private TouristattractionsService service;
 //    查询所有的旅游景点
     @RequestMapping("findAll")
-    public Result findAll(@RequestBody TouristattrcationDto dto) {
+    public Result findAll(@RequestBody TouristattrcationDto dto) throws IOException {
         return service.findAll(dto);
     }
 

+ 3 - 1
src/main/java/com/zhentao/touristAttractions/service/TouristattractionsService.java

@@ -5,11 +5,13 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.zhentao.touristAttractions.dto.TouristattrcationDto;
 import com.zhentao.vo.Result;
 
+import java.io.IOException;
+
 /**
 * @author 86183
 * @description 针对表【TouristAttractions(旅游信息表)】的数据库操作Service
 * @createDate 2025-05-22 15:42:58
 */
 public interface TouristattractionsService extends IService<Touristattractions> {
-    Result findAll(TouristattrcationDto dto);
+    Result findAll(TouristattrcationDto dto) throws IOException;
 }

+ 18 - 1
src/main/java/com/zhentao/touristAttractions/service/impl/TouristattractionsServiceImpl.java

@@ -1,5 +1,6 @@
 package com.zhentao.touristAttractions.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zhentao.touristAttractions.domain.Touristattractions;
@@ -7,9 +8,15 @@ import com.zhentao.touristAttractions.dto.TouristattrcationDto;
 import com.zhentao.touristAttractions.service.TouristattractionsService;
 import com.zhentao.touristAttractions.mapper.TouristattractionsMapper;
 import com.zhentao.vo.Result;
+import org.elasticsearch.action.bulk.BulkRequest;
+import org.elasticsearch.action.index.IndexRequest;
+import org.elasticsearch.client.RequestOptions;
+import org.elasticsearch.client.RestHighLevelClient;
+import org.elasticsearch.common.xcontent.XContentType;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.io.IOException;
 import java.util.List;
 
 /**
@@ -22,8 +29,10 @@ public class TouristattractionsServiceImpl extends ServiceImpl<Touristattraction
     implements TouristattractionsService{
     @Autowired
     private TouristattractionsMapper mapper;
+    @Autowired
+    private RestHighLevelClient restHighLevelClient;
     @Override
-    public Result findAll(TouristattrcationDto dto) {
+    public Result findAll(TouristattrcationDto dto) throws IOException {
         QueryWrapper<Touristattractions> queryWrapper = new QueryWrapper<>();
         queryWrapper.like(dto.getAddress()!=null,"address",dto.getAddress());
         queryWrapper.like(dto.getName()!=null,"name",dto.getName());
@@ -31,6 +40,14 @@ public class TouristattractionsServiceImpl extends ServiceImpl<Touristattraction
         System.err.println(dto);
         List<Touristattractions> touristattractions = mapper.selectList(queryWrapper);
         System.err.println(touristattractions);
+
+        BulkRequest bulkRequest = new BulkRequest("touristattrcation");
+        for (Touristattractions t:touristattractions) {
+            IndexRequest indexRequest = new IndexRequest()
+                    .id(t.getId().toString()).source(JSON.toJSONString(t), XContentType.JSON);
+            bulkRequest.add(indexRequest);
+        }
+        restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
         return Result.OK(touristattractions,"查询成功");
     }
 }

+ 4 - 0
src/main/resources/application.yml

@@ -10,6 +10,10 @@ spring:
     host: 47.110.46.22
     port: 6379
     database: 0
+  servlet:
+    multipart:
+      max-file-size: 5MB
+      max-request-size: 10MB
 aliyun:
   oss:
     endpoint: https://oss-cn-beijing.aliyuncs.com