lzy 2 months ago
parent
commit
231e2390a3

+ 35 - 12
Marketplace/pom.xml

@@ -52,16 +52,6 @@
             <groupId>org.springframework.boot</groupId>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-data-redis</artifactId>
             <artifactId>spring-boot-starter-data-redis</artifactId>
         </dependency>
         </dependency>
-
-        <dependency>
-            <groupId>face</groupId>
-            <artifactId>face</artifactId>
-            <version>3.0.0</version>
-            <scope>system</scope>
-            <systemPath>${project.basedir}/libs/arcsoft-sdk-face-3.0.0.0.jar</systemPath>
-        </dependency>
-
-
         <!-- Hibernate Validator (Bean Validation 实现) -->
         <!-- Hibernate Validator (Bean Validation 实现) -->
         <dependency>
         <dependency>
             <groupId>org.hibernate.validator</groupId>
             <groupId>org.hibernate.validator</groupId>
@@ -74,7 +64,11 @@
             <artifactId>validation-api</artifactId>
             <artifactId>validation-api</artifactId>
             <version>2.0.1.Final</version>
             <version>2.0.1.Final</version>
         </dependency>
         </dependency>
-
+        <dependency>
+            <groupId>com.squareup.okhttp3</groupId>
+            <artifactId>okhttp</artifactId>
+            <version>4.12.0</version>
+        </dependency>
         <dependency>
         <dependency>
             <groupId>com.aliyun.oss</groupId>
             <groupId>com.aliyun.oss</groupId>
             <artifactId>aliyun-sdk-oss</artifactId>
             <artifactId>aliyun-sdk-oss</artifactId>
@@ -113,6 +107,36 @@
             <artifactId>spring-security-crypto</artifactId>
             <artifactId>spring-security-crypto</artifactId>
             <version>5.7.6</version>
             <version>5.7.6</version>
         </dependency>
         </dependency>
+        <!-- 百度AI SDK -->
+        <dependency>
+            <groupId>com.baidu.aip</groupId>
+            <artifactId>java-sdk</artifactId>
+            <version>4.16.1</version>
+        </dependency>
+        <!-- Jackson 依赖 -->
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+            <version>2.13.4</version>
+        </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.8.21</version> <!-- 可根据实际情况选择最新版本 -->
+        </dependency>
+        <!-- Spring Boot Configuration Processor -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-configuration-processor</artifactId>
+            <optional>true</optional>
+        </dependency>
+
+        <!-- MP3播放支持 -->
+        <dependency>
+            <groupId>javazoom</groupId>
+            <artifactId>jlayer</artifactId>
+            <version>1.0.1</version>
+        </dependency>
     </dependencies>
     </dependencies>
     <dependencyManagement>
     <dependencyManagement>
         <dependencies>
         <dependencies>
@@ -125,7 +149,6 @@
             </dependency>
             </dependency>
         </dependencies>
         </dependencies>
     </dependencyManagement>
     </dependencyManagement>
-
     <build>
     <build>
         <plugins>
         <plugins>
             <plugin>
             <plugin>

+ 0 - 1
Marketplace/src/main/java/com/dt/MarketplaceApplication.java

@@ -7,7 +7,6 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
 @SpringBootApplication
 @SpringBootApplication
 @MapperScan("com.dt.user.mapper")
 @MapperScan("com.dt.user.mapper")
 public class  MarketplaceApplication {
 public class  MarketplaceApplication {
-
     public static void main(String[] args) {
     public static void main(String[] args) {
         SpringApplication.run(MarketplaceApplication.class, args);
         SpringApplication.run(MarketplaceApplication.class, args);
     }
     }

+ 1 - 3
Marketplace/src/main/java/com/dt/oss/controller/OSSController.java

@@ -20,11 +20,9 @@ public class OSSController {
     private OSSService ossService;
     private OSSService ossService;
 
 
 
 
-    @RequestMapping("/uupload")
+    @RequestMapping("/upload")
     @NonLoginRequired
     @NonLoginRequired
     public String upload(MultipartFile file) throws IOException {
     public String upload(MultipartFile file) throws IOException {
         return ossService.upload(file);
         return ossService.upload(file);
     }
     }
-
-
 }
 }

+ 25 - 0
Marketplace/src/main/java/com/dt/user/controller/UserController.java

@@ -4,6 +4,7 @@ import com.dt.config.NonLoginRequired;
 import com.dt.user.dto.UserLoginDTO;
 import com.dt.user.dto.UserLoginDTO;
 import com.dt.user.dto.UserRegisterDTO;
 import com.dt.user.dto.UserRegisterDTO;
 import com.dt.user.dto.FaceLoginEnableDTO;
 import com.dt.user.dto.FaceLoginEnableDTO;
+import com.dt.user.dto.UserUpdateDTO;
 import com.dt.user.service.UserService;
 import com.dt.user.service.UserService;
 import com.dt.user.vo.UserLoginVO;
 import com.dt.user.vo.UserLoginVO;
 import com.dt.util.Result;
 import com.dt.util.Result;
@@ -69,4 +70,28 @@ public class UserController {
     public Result uploadFaceImage(@RequestParam("faceImage") MultipartFile faceImage) {
     public Result uploadFaceImage(@RequestParam("faceImage") MultipartFile faceImage) {
         return userService.uploadFaceImage(faceImage, request);
         return userService.uploadFaceImage(faceImage, request);
     }
     }
+    /**
+     * 获取用户个人信息
+     */
+    @GetMapping("getUserInfo")
+    public Result getUserInfo() {
+        return userService.getUserInfo(request);
+    }
+    /**
+     * 修改个人用户信息
+     */
+    @PostMapping("/updateUserInfo")
+    public Result updateUserInfo(@Validated @RequestBody UserUpdateDTO updateDTO) {
+        return userService.updateUser(updateDTO, request);
+    }
+
+    /**
+     * 用户签到
+     * @param
+     * @return
+     */
+    @PostMapping("/signIn")
+    public Result signIn() {
+        return userService.signIn(request);
+    }
 }
 }

+ 20 - 0
Marketplace/src/main/java/com/dt/user/pojo/User.java

@@ -106,6 +106,26 @@ public class User implements Serializable {
      */
      */
     private Integer deleted;
     private Integer deleted;
 
 
+    /**
+     * 上次签到时间
+     */
+    private Date lastSignInTime;
+
+    /**
+     * 连续签到天数
+     */
+    private Integer continuousSignInDays;
+
+    /**
+     * 累计签到天数
+     */
+    private Integer totalSignInDays;
+
+    /**
+     * 豆豆数量
+     */
+    private Integer beans;
+
     @TableField(exist = false)
     @TableField(exist = false)
     private static final long serialVersionUID = 1L;
     private static final long serialVersionUID = 1L;
 }
 }

+ 16 - 0
Marketplace/src/main/java/com/dt/user/service/UserService.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.dt.user.dto.UserLoginDTO;
 import com.dt.user.dto.UserLoginDTO;
 import com.dt.user.dto.UserRegisterDTO;
 import com.dt.user.dto.UserRegisterDTO;
 import com.dt.user.dto.FaceLoginEnableDTO;
 import com.dt.user.dto.FaceLoginEnableDTO;
+import com.dt.user.dto.UserUpdateDTO;
 import com.dt.user.vo.UserLoginVO;
 import com.dt.user.vo.UserLoginVO;
 import com.dt.util.Result;
 import com.dt.util.Result;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartFile;
@@ -51,4 +52,19 @@ public interface UserService extends IService<User> {
      * @return 操作结果
      * @return 操作结果
      */
      */
     Result uploadFaceImage(MultipartFile faceImage, HttpServletRequest request);
     Result uploadFaceImage(MultipartFile faceImage, HttpServletRequest request);
+    /**
+     * 获取用户信息
+     * @param request
+     * @return
+     */
+    Result getUserInfo(HttpServletRequest request);
+
+    Result updateUser(UserUpdateDTO userUpdateDTO, HttpServletRequest request);
+
+    /**
+     * 用户签到
+     * @param request
+     * @return
+     */
+    Result signIn(HttpServletRequest request);
 }
 }

+ 125 - 3
Marketplace/src/main/java/com/dt/user/service/impl/UserServiceImpl.java

@@ -8,6 +8,7 @@ import com.dt.oss.OSSService;
 import com.dt.user.dto.UserLoginDTO;
 import com.dt.user.dto.UserLoginDTO;
 import com.dt.user.dto.UserRegisterDTO;
 import com.dt.user.dto.UserRegisterDTO;
 import com.dt.user.dto.FaceLoginEnableDTO;
 import com.dt.user.dto.FaceLoginEnableDTO;
+import com.dt.user.dto.UserUpdateDTO;
 import com.dt.user.mapper.UserMapper;
 import com.dt.user.mapper.UserMapper;
 import com.dt.user.pojo.User;
 import com.dt.user.pojo.User;
 import com.dt.user.service.UserService;
 import com.dt.user.service.UserService;
@@ -28,6 +29,8 @@ import javax.servlet.http.HttpServletRequest;
 import java.util.Date;
 import java.util.Date;
 import java.util.List;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeUnit;
+import java.time.LocalDate;
+import java.time.ZoneId;
 
 
 /**
 /**
 * @author 张大宇
 * @author 张大宇
@@ -97,10 +100,9 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User>
         // 3. 设置默认值
         // 3. 设置默认值
         user.setStatus(1); // 正常状态
         user.setStatus(1); // 正常状态
         user.setGender(0); // 性别未知
         user.setGender(0); // 性别未知
+        user.setRealName(registerDTO.getUsername());
         user.setCreatedAt(new Date());
         user.setCreatedAt(new Date());
         user.setUpdatedAt(new Date());
         user.setUpdatedAt(new Date());
-        user.setDeleted(0); // 未删除
-
         // 4. 保存用户
         // 4. 保存用户
         this.save(user);
         this.save(user);
     }
     }
@@ -139,7 +141,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User>
     }
     }
 
 
     @Override
     @Override
-    public Result uploadFaceImage(MultipartFile faceImage, HttpServletRequest request) {
+    public Result   uploadFaceImage(MultipartFile faceImage, HttpServletRequest request) {
         try {
         try {
             // 获取当前登录用户ID
             // 获取当前登录用户ID
             String token = request.getHeader("token");
             String token = request.getHeader("token");
@@ -167,6 +169,20 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User>
     }
     }
 
 
     @Override
     @Override
+    public Result getUserInfo(HttpServletRequest request) {
+        String token = request.getHeader("token");
+        Long userId = TokenUtils.getUserId(token);
+        if (userId == null){
+            return new Result(false, "用户未登录");
+        }
+        User user = this.getById(userId);
+        if (user == null){
+            return new Result(false, "用户不存在");
+        }
+        return new Result(true, "获取用户信息成功", user);
+    }
+
+    @Override
     public Result faceLogin(MultipartFile imageUrl2) {
     public Result faceLogin(MultipartFile imageUrl2) {
         try {
         try {
             // 查询所有启用了人脸登录的用户
             // 查询所有启用了人脸登录的用户
@@ -217,6 +233,112 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User>
             return new Result(false, "人脸识别失败:" + e.getMessage());
             return new Result(false, "人脸识别失败:" + e.getMessage());
         }
         }
     }
     }
+
+    @Override
+    public Result updateUser(UserUpdateDTO userUpdateDTO, HttpServletRequest request) {
+        try {
+            String token = request.getHeader("token");
+            Long userId = TokenUtils.getUserId(token);
+            if (userId == null) {
+                return new Result(false, "用户未登录");
+            }
+
+            User user = this.getById(userId);
+            if (user == null) {
+                return new Result(false, "用户不存在");
+            }
+
+            // 更新用户信息
+            if (userUpdateDTO.getGender() != null) {
+                user.setGender(userUpdateDTO.getGender());
+            }
+            if (userUpdateDTO.getRealName() != null && !userUpdateDTO.getRealName().isEmpty()) {
+                user.setRealName(userUpdateDTO.getRealName());
+            }
+            if (userUpdateDTO.getPhone() != null && !userUpdateDTO.getPhone().isEmpty()) {
+                user.setPhone(userUpdateDTO.getPhone());
+            }
+            if (userUpdateDTO.getEmail() != null && !userUpdateDTO.getEmail().isEmpty()) {
+                user.setEmail(userUpdateDTO.getEmail());
+            }
+
+            user.setUpdatedAt(new Date());
+            this.updateById(user);
+            return new Result(true, "用户信息更新成功");
+
+        } catch (ApiException e) {
+            return new Result(false, e.getMessage());
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new Result(false, "更新用户信息失败:" + e.getMessage());
+        }
+    }
+
+    @Override
+    public Result signIn(HttpServletRequest request) {
+        try {
+            String token = request.getHeader("token");
+            Long userId = TokenUtils.getUserId(token);
+            if (userId == null) {
+                return new Result(false, "用户未登录");
+            }
+
+            User user = this.getById(userId);
+            if (user == null) {
+                return new Result(false, "用户不存在");
+            }
+
+            LocalDate today = LocalDate.now();
+            LocalDate lastSignInDate = null;
+            if (user.getLastSignInTime() != null) {
+                lastSignInDate = user.getLastSignInTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+            }
+
+            if (lastSignInDate != null && lastSignInDate.isEqual(today)) {
+                return new Result(false, "您今天已经签到过了");
+            }
+
+            // 初始化签到数据 (如果为null)
+            if (user.getContinuousSignInDays() == null) {
+                user.setContinuousSignInDays(0);
+            }
+            if (user.getTotalSignInDays() == null) {
+                user.setTotalSignInDays(0);
+            }
+            if (user.getBeans() == null) {
+                user.setBeans(0);
+            }
+
+            // 更新连续签到天数
+            if (lastSignInDate != null && lastSignInDate.isEqual(today.minusDays(1))) {
+                user.setContinuousSignInDays(user.getContinuousSignInDays() + 1);
+            } else {
+                user.setContinuousSignInDays(1);
+            }
+
+            // 根据连续签到天数计算本次获得的豆豆数量
+            int gainedBeans;
+            int continuousDays = user.getContinuousSignInDays();
+            if (continuousDays >= 7) {
+                gainedBeans = 70;
+            } else {
+                gainedBeans = continuousDays * 10;
+            }
+
+            // 更新累计签到天数和豆豆
+            user.setTotalSignInDays(user.getTotalSignInDays() + 1);
+            user.setLastSignInTime(new Date());
+            user.setBeans(user.getBeans() + gainedBeans);
+
+            this.updateById(user);
+
+            return new Result(true, "签到成功!获得" + gainedBeans + "豆豆,您已连续签到 " + user.getContinuousSignInDays() + " 天,累计签到 " + user.getTotalSignInDays() + " 天。");
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new Result(false, "签到失败:" + e.getMessage());
+        }
+    }
 }
 }
 
 
 
 

+ 27 - 1
Marketplace/src/main/resources/application.yml

@@ -13,6 +13,7 @@ spring:
   redis:
   redis:
     host: 101.200.59.170
     host: 101.200.59.170
     port: 6379
     port: 6379
+    password: yrhl666
     database: 0
     database: 0
 mybatis-plus:
 mybatis-plus:
   type-aliases-package: cn.zhentao.pojo
   type-aliases-package: cn.zhentao.pojo
@@ -24,7 +25,32 @@ logging:
   level:
   level:
     cn:
     cn:
       zhentao: debug
       zhentao: debug
-
+baidu:
+  ai:
+    # 请替换为您在百度AI平台新建应用后获取的密钥信息
+    appId: 119456819  # 示例:12345678
+    apiKey: NlOEw3RS4nSGhxsb4ojWmZVr  # 在应用详情页面获取
+    secretKey: EVMXrVlJoUEfVkqfk1F69zKqB9VRalUk  # 在应用详情页面获取
+  asr:  # 语音识别参数
+    lang: zh
+    format: wav
+    rate: 16000
+  tts:  # 语音合成参数
+    lang: zh  # 语言,使用zh而不是zh-CN
+    per: 4    # 发音人:0-女声,1-男声,3-情感男声,4-情感女声
+    spd: 5    # 语速,取值0-15,默认为5中语速
+    pit: 5    # 音调,取值0-15,默认为5中语调
+    vol: 5    # 音量,取值0-15,默认为5中音量
+  wenxin:  # 文心一言参数
+    api-key: "bce-v3/ALTAK-TUpAcVUc23264iv606UkH/feac26b64b72c99e3548f304bfe59067b9c9d47a"  # 您的文心一言API密钥
+audio:
+  record:
+    path: audio/record  # 录音文件保存目录
+  synthesis:
+    path: audio/synthesis  # 合成语音保存目录
+  web:
+    resources:
+      static-locations: classpath:/static/, file:${audio.synthesis.path}/
 
 
 
 
 #  kafka:
 #  kafka:

+ 0 - 13
Marketplace/src/test/java/com/dt/MarketplaceApplicationTests.java

@@ -1,13 +0,0 @@
-package com.dt;
-
-import org.junit.jupiter.api.Test;
-import org.springframework.boot.test.context.SpringBootTest;
-
-@SpringBootTest
-class MarketplaceApplicationTests {
-
-    @Test
-    void contextLoads() {
-    }
-
-}

+ 0 - 45
Marketplace/src/test/java/com/dt/util/FaceEngineUtilTest.java

@@ -1,45 +0,0 @@
-package com.dt.util;
-
-import com.arcsoft.face.EngineConfiguration;
-import com.arcsoft.face.FaceEngine;
-import com.arcsoft.face.enums.DetectMode;
-import com.arcsoft.face.enums.DetectOrient;
-import com.arcsoft.face.enums.ErrorInfo;
-import org.junit.jupiter.api.Test;
-import static org.junit.jupiter.api.Assertions.*;
-
-import java.io.File;
-
-public class FaceEngineUtilTest {
-
-    @Test
-    public void testFaceEngineInitialization() {
-        String projectRoot = new File("").getAbsolutePath();
-        String enginePath = new File(projectRoot, "libs/WIN64").getAbsolutePath();
-        
-        System.out.println("Engine path: " + enginePath);
-        System.out.println("Files in directory:");
-        File dir = new File(enginePath);
-        if (dir.exists() && dir.isDirectory()) {
-            for (File file : dir.listFiles()) {
-                System.out.println(" - " + file.getName() + " (exists: " + file.exists() + ", readable: " + file.canRead() + ")");
-            }
-        }
-
-        FaceEngine faceEngine = new FaceEngine(enginePath);
-        
-        // Try to initialize the engine
-        EngineConfiguration engineConfiguration = new EngineConfiguration();
-        engineConfiguration.setDetectMode(DetectMode.ASF_DETECT_MODE_IMAGE);
-        engineConfiguration.setDetectFaceOrientPriority(DetectOrient.ASF_OP_ALL_OUT);
-        engineConfiguration.setDetectFaceMaxNum(10);
-        engineConfiguration.setDetectFaceScaleVal(16);
-        
-        int errorCode = faceEngine.init(engineConfiguration);
-        assertEquals(ErrorInfo.MOK.getValue(), errorCode, "Face engine initialization failed");
-        
-        // Clean up
-        errorCode = faceEngine.unInit();
-        assertEquals(ErrorInfo.MOK.getValue(), errorCode, "Face engine uninitialization failed");
-    }
-}