Crazy преди 7 месеца
родител
ревизия
7867383102

+ 14 - 11
yudao-module-md/yudao-module-md-biz/src/main/java/cn/iocoder/yudao/module/md/controller/admin/AcsController.java

@@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.module.md.controller.admin.vo.attendanceImportExcelVO;
 import cn.iocoder.yudao.module.md.controller.admin.vo.attendanceImportRespVO;
+import cn.iocoder.yudao.module.md.controller.admin.vo.importResponse;
 import cn.iocoder.yudao.module.md.service.AcsService;
 
 import cn.iocoder.yudao.module.system.controller.admin.studentAttendance.vo.StudentAttendancePageReqVO;
@@ -18,6 +19,7 @@ import com.google.gson.JsonObject;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.Parameters;
 import org.json.JSONException;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
@@ -62,9 +64,8 @@ public class AcsController {
 
 
     //直接运行
-    @PostConstruct
-    public void init() throws UnsupportedEncodingException, InterruptedException {
-        // 自动运行的方法
+    @Scheduled(cron = "0 0 0 * * ?") // 每天凌晨 1 点执行
+    public void scheduledTask() throws UnsupportedEncodingException, InterruptedException {
         acsService.searchEvents(adminUserService, studentAttendanceService);
         // 处理结果,如果需要的话
     }
@@ -237,12 +238,13 @@ public class AcsController {
             @Parameter(name = "updateSupport", description = "是否支持更新,默认为 false", example = "true")
     })
    @PreAuthorize("@ss.hasPermission('system:users-info-with-image:import')")
-    public CommonResult<String> importData(@RequestParam("excelFile") MultipartFile excelFile,
+    public CommonResult<importResponse> importData(@RequestParam("excelFile") MultipartFile excelFile,
                                                    @RequestParam("imageFile") MultipartFile imageFile,
                                                    @RequestParam(value = "updateSupport", required = false, defaultValue = "true") Boolean updateSupport) {
         try {
-            String result = acsService.importData(excelFile, imageFile, updateSupport);
-            return CommonResult.success(result);
+            importResponse response = acsService.importData(excelFile, imageFile, updateSupport);
+            System.out.println("导入结果"+response);
+            return CommonResult.success(response);
         } catch (Exception e) {
             return CommonResult.error(500, "导入过程中发生错误: " + e.getMessage());
         }
@@ -283,20 +285,21 @@ public class AcsController {
     }
 
 
-    //需有人员信息已经导入到user表
-    @PostMapping("/test")
+
+
+    @PostMapping("/直接下发人员和人脸")
     @Operation(summary = "lsq")
     @Parameters({
             @Parameter(name = "excelFile", description = "Excel 文件", required = true),
             @Parameter(name = "imageFile", description = "压缩包文件", required = true),
             @Parameter(name = "updateSupport", description = "是否支持更新,默认为 false", example = "true")
     })
-    public CommonResult<String> test(@RequestParam("excelFile") MultipartFile excelFile,
+    public CommonResult<importResponse> test(@RequestParam("excelFile") MultipartFile excelFile,
                                            @RequestParam("imageFile") MultipartFile imageFile,
                                            @RequestParam(value = "updateSupport", required = false, defaultValue = "true") Boolean updateSupport) {
         try {
-            String result = acsService.testData(excelFile, imageFile, updateSupport);
-            return CommonResult.success(result);
+            importResponse response = acsService.testData(excelFile, imageFile, updateSupport);
+            return CommonResult.success(response);
         } catch (Exception e) {
             return CommonResult.error(500, "导入过程中发生错误: " + e.getMessage());
         }

+ 29 - 0
yudao-module-md/yudao-module-md-biz/src/main/java/cn/iocoder/yudao/module/md/controller/admin/vo/imageImportRespVO.java

@@ -0,0 +1,29 @@
+package cn.iocoder.yudao.module.md.controller.admin.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Builder;
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+@Schema(description = "考勤机 - 用户信息人脸导入 Response VO")
+@Data
+@Builder
+public class imageImportRespVO {
+
+    @Schema(description = "创建成功的照片", requiredMode = Schema.RequiredMode.REQUIRED)
+    private List<String> createImages;
+
+    @Schema(description = "更新成功的照片", requiredMode = Schema.RequiredMode.REQUIRED)
+    private List<String> updateImages;
+
+    @Schema(description = "导入失败的照片", requiredMode = Schema.RequiredMode.REQUIRED)
+    private List<String> failureImages;
+
+    @Schema(description = "不存在的照片用户", requiredMode = Schema.RequiredMode.REQUIRED)
+    private List<String> nullUsers;
+
+    @Schema(description = "格式错误的照片", requiredMode = Schema.RequiredMode.REQUIRED)
+    private List<String> errorImages;
+}

+ 14 - 0
yudao-module-md/yudao-module-md-biz/src/main/java/cn/iocoder/yudao/module/md/controller/admin/vo/importResponse.java

@@ -0,0 +1,14 @@
+package cn.iocoder.yudao.module.md.controller.admin.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Builder;
+import lombok.Data;
+
+@Schema(description = "用户信息与人脸信息导入响应 Response VO")
+@Data
+@Builder
+public class importResponse {
+
+    private attendanceImportRespVO userImportResult;
+    private imageImportRespVO imageImportResult;
+}

+ 25 - 27
yudao-module-md/yudao-module-md-biz/src/main/java/cn/iocoder/yudao/module/md/service/AcsService.java

@@ -10,6 +10,8 @@ import cn.iocoder.yudao.module.infra.api.config.ConfigApi;
 import cn.iocoder.yudao.module.infra.api.file.FileApi;
 import cn.iocoder.yudao.module.md.controller.admin.vo.attendanceImportExcelVO;
 import cn.iocoder.yudao.module.md.controller.admin.vo.attendanceImportRespVO;
+import cn.iocoder.yudao.module.md.controller.admin.vo.imageImportRespVO;
+import cn.iocoder.yudao.module.md.controller.admin.vo.importResponse;
 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
 import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserSaveReqVO;
 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
@@ -402,13 +404,16 @@ public class AcsService {
 
     //插入照片到考勤用户,成功后再插入到对应用户的photoUrl(需要先有用户信息)
     @Transactional(rollbackFor = Exception.class) // 添加事务,异常则回滚所有导入
-    public String importImages(MultipartFile file) throws Exception {
+    public imageImportRespVO importImages(MultipartFile file) throws Exception {
         // 校验文件类型
         if (!file.getOriginalFilename().endsWith(".zip")) {
             throw exception(UPLOADED_FOLDER_CANNOT_EMPTY);
         }
         // 创建临时目录存放解压后的文件
         File tempDir = Files.createTempDirectory("user_images").toFile();
+        imageImportRespVO respVO = imageImportRespVO.builder().createImages(new ArrayList<>())
+                .updateImages(new ArrayList<>()).failureImages(new ArrayList<>()).errorImages(new ArrayList<>()).nullUsers(new ArrayList<>()).build();
+
         List<String> successUsers =new LinkedList<>();
         List<String> failUsers =new LinkedList<>();
         List<String> nullUsers =new LinkedList<>();
@@ -448,37 +453,26 @@ public class AcsService {
                                 //给对应学号的人的照片添加
                                 String msg = addFaceByUrl(user.getUserNumber(), photoUrl);
                                 if (msg.contains("下发人脸成功") && msg.contains("但是有异常情况")) {
-                                    failUsers.add(studentName);
+                                    respVO.getFailureImages().add(studentName);//添加失败
                                 } else {
-                                    successUsers.add(studentName);
+                                    respVO.getCreateImages().add(studentName);//添加成功
                                     if (user!=null) {
                                         user.setPhotoUrl(photoUrl);
                                         userService.updateUser((BeanUtils.toBean(user, UserSaveReqVO.class)));
                                     }
                                 }
                             } else {
-                                nullUsers.add(studentName);
+                                respVO.getNullUsers().add(studentName);//照片用户不存在
                             }
                     }else{
-                        errorImages.add(entry.getName());
+                        respVO.getErrorImages().add(entry.getName());//照片格式错误
                     }
                 }
             }
         }
         // 清理临时文件
         FileUtils.deleteDirectory(tempDir);
-        return "添加照片成功的用户{"
-                +successUsers+
-                "}"+
-                "添加照片失败的用户{"
-                +failUsers+
-                "}"+
-                "不存在的用户{"+
-                nullUsers+
-                "}"+
-                "照片格式错误{"+
-                errorImages+
-                "}";
+        return respVO;
     }
 
 
@@ -572,9 +566,10 @@ public class AcsService {
 
 
     private attendanceImportRespVO importRespVO;
-    private String imageImportResult;
+    private imageImportRespVO imageImportResult;
     @Transactional(rollbackFor = Exception.class) // 事务管理
-    public String importData(MultipartFile excelFile, MultipartFile imageFile, boolean updateSupport) throws Exception {
+    public importResponse importData(MultipartFile excelFile, MultipartFile imageFile, boolean updateSupport) throws Exception {
+        importResponse response = importResponse.builder().build();
         // 1. 导入用户信息
         if (excelFile!=null){
             List<attendanceImportExcelVO> list = ExcelUtils.read(excelFile, attendanceImportExcelVO.class);
@@ -585,20 +580,22 @@ public class AcsService {
         }
         // 2. 导入图片
         if (imageFile!=null){
-            imageImportResult = testImages(imageFile);
+            imageImportResult = importImages(imageFile);
             System.out.println("图片导入结果: " + imageImportResult);
         }else {
-            imageImportResult="为传入照片信息";
+            imageImportResult=null;
         }
+        response.setImageImportResult(imageImportResult);
+        response.setUserImportResult(importRespVO);
 
-        return  importRespVO+
-                imageImportResult;
+        return  response;
     }
 
 
 
     @Transactional(rollbackFor = Exception.class) // 是先插入的
-    public String testData(MultipartFile excelFile, MultipartFile imageFile, boolean updateSupport) throws Exception {
+    public importResponse testData(MultipartFile excelFile, MultipartFile imageFile, boolean updateSupport) throws Exception {
+        importResponse response = importResponse.builder().build();
         // 1. 导入用户信息
         if (excelFile!=null){
             List<attendanceImportExcelVO> list = ExcelUtils.read(excelFile, attendanceImportExcelVO.class);
@@ -612,11 +609,12 @@ public class AcsService {
             imageImportResult = importImages(imageFile);
             System.out.println("图片导入结果: " + imageImportResult);
         }else {
-            imageImportResult="为传入照片信息";
+            imageImportResult=null;
         }
+        response.setImageImportResult(imageImportResult);
+        response.setUserImportResult(importRespVO);
 
-        return  importRespVO+
-                imageImportResult;
+        return response;
     }
 
 }