RefreshController.java 9.95 KB
package com.ruoyi.controller;

import com.alibaba.fastjson2.JSON;
import com.ruoyi.common.core.domain.ResponseResult;
import com.ruoyi.common.utils.sign.Base64;
import com.ruoyi.controller.dss.DssFaceController;
import com.ruoyi.domain.driver.NewDriver;
import com.ruoyi.domain.driver.dss.syn.res.dto.FaceRegisterDTO;
import com.ruoyi.domain.scheduling.LinggangScheduling;
import com.ruoyi.equipment.domain.Equipment;
import com.ruoyi.equipment.service.IEquipmentService;
import com.ruoyi.job.DriverJob;
import com.ruoyi.service.driver.NewDriverService;
import com.ruoyi.service.key.location.LinggangKeyWorkLocationService;
import com.ruoyi.service.scheduling.LinggangSchedulingService;
import com.ruoyi.utils.DateUtil;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

import java.io.File;
import java.io.IOException;
import java.text.ParseException;
import java.util.*;
import java.util.stream.Collectors;

/**
 * @author liujun
 * @date 2024年07月30日 14:37
 */
@Slf4j
@RestController
@RequestMapping("/refresh")
public class RefreshController {
    @Autowired
    private DriverJob driverJob;
    @Autowired
    private LinggangKeyWorkLocationService keyWorkLocationService;
    @Autowired
    private NewDriverService newDriverService;
    @Autowired
    private LinggangSchedulingService linggangSchedulingService;
    @Autowired
    private DssFaceController dssFaceController;
    @Autowired
    private IEquipmentService equipmentService;

    @GetMapping(value = "/scheduling")
    @ApiOperation("scheduling")
//    @PreAuthorize("@ss.hasPermi('refresh:scheduling')")
    public ResponseResult<Boolean> test() {
        Date date = new Date();
        for (int i = 0; i < 2; i++) {
            driverJob.runScheduling(DateUtils.addDays(date, i).getTime());
        }


        return ResponseResult.success();
    }

    @GetMapping(value = "/key/info/local")
    @ApiOperation("/key/info/local")
    @PreAuthorize("@ss.hasPermi('refresh:key:info:local')")
    public ResponseResult<Boolean> testKeyInfoLocal(@RequestParam(value = "dateStr", required = false) String dateStr) throws ParseException {
        if (StringUtils.isEmpty(dateStr)) {
            dateStr = DateUtil.YYYY_MM_DD_LINK.format(new Date());
        }
        Date date = DateUtil.YYYY_MM_DD_LINK.parse(dateStr);

        LinggangScheduling scheduling = new LinggangScheduling();
        scheduling.setStartScheduleDate(DateUtil.shortDate(date));
        scheduling.setEndScheduleDate(DateUtils.addDays(scheduling.getStartScheduleDate(), 1));
        scheduling.setType(100);

        List<LinggangScheduling> linggangSchedulings = linggangSchedulingService.list(scheduling);
        Set<Long> idSets = linggangSchedulings.stream().map(LinggangScheduling::getId).collect(Collectors.toSet());
        keyWorkLocationService.insertJob(dateStr, null, idSets);

        log.info("钥匙存放信息处理完毕");
        return ResponseResult.success();
    }

    @GetMapping(value = "/driver")
    @ApiOperation("driver")
    @PreAuthorize("@ss.hasPermi('refresh:driver')")
    public ResponseResult<Boolean> insertDriver() {
        newDriverService.insertJob();
        log.info("人员信息同步完毕");
        return ResponseResult.success();
    }

    @PostMapping(value = "/driver/init/image")
    @ApiOperation("driver/init/image")
    @PreAuthorize("@ss.hasPermi('refresh:driver:init:image')")
    public ResponseResult<Boolean> insertDriverInitImage(@RequestParam("imagePath") String imagePath, @RequestParam("device") String device) {
        if (StringUtils.isEmpty(device)) {
            return ResponseResult.error("注册设备号不能为空");
        }

        if (StringUtils.isEmpty(imagePath)) {
            String path = StringUtils.join(System.getProperty("user.dir"), File.pathSeparator, "images");
            ;
            log.info("[{}]", path);
            imagePath = path;
        }

        File file = new File(imagePath);
        if (!file.exists()) {
            return ResponseResult.error("文件路径不存在");
        }
        if (!file.isDirectory()) {
            return ResponseResult.error("文件路径不是文件夹路径");
        }

        File[] fs = file.listFiles();
        int length = ArrayUtils.getLength(fs);
        if (0 == length) {
            return ResponseResult.error("文件路径下没有文件");
        }

        Equipment equipment = equipmentService.getOneByDeviceId(device);
        if (Objects.isNull(equipment)) {
            return ResponseResult.error("设备号不正确,请确认设备信息");
        }


        for (int i = 0; i < length; i++) {
            FaceRegisterDTO dto = new FaceRegisterDTO();
            dto.setDevice(device);

            String jobCode = StringUtils.trim(StringUtils.substringBeforeLast(fs[i].getName(), "."));
            dto.setStaffCode(jobCode);


            NewDriver driver = newDriverService.getOne(jobCode);
            if (Objects.isNull(driver)) {
                log.info("没有人员信息:[{}]", dto);
                continue;
            }
            if (StringUtils.isNotEmpty(driver.getImage())) {
                log.info("人脸数据已经存在:[{}]", dto);
                continue;
            }
            dto.setRegTime(DateUtil.shortDate(new Date()));
            try {
                byte[] bytes = FileUtils.readFileToByteArray(fs[i]);
                String imageContent = Base64.encode(bytes);
                dto.setFaceValue(imageContent);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
            ResponseResult<Object> responseResult = dssFaceController.faceRegister(dto);
            if (Objects.isNull(responseResult) || !responseResult.isSuccess()) {
                log.warn("[{}]数据没有执行成功;返回值为:[{}]", dto, responseResult);
            }
        }

        log.info("人员信息同步完毕");
        return ResponseResult.success();
    }


    @PostMapping(value = "/driver/init/image/name")
    @ApiOperation("driver/init/image/name")
    @PreAuthorize("@ss.hasPermi('refresh:driver:init:image:name')")
    public ResponseResult<Object> insertDriverInitImageOfName(@RequestParam("imagePath") String imagePath, @RequestParam("device") String device) {
        if (StringUtils.isEmpty(device)) {
            return ResponseResult.error("注册设备号不能为空");
        }

        if (StringUtils.isEmpty(imagePath)) {
            String path = StringUtils.join(System.getProperty("user.dir"), File.pathSeparator, "images");

            log.info("[{}]", path);
            imagePath = path;
        }

        File file = new File(imagePath);
        if (!file.exists()) {
            return ResponseResult.error("文件路径不存在");
        }
        if (!file.isDirectory()) {
            return ResponseResult.error("文件路径不是文件夹路径");
        }

        File[] fs = file.listFiles();
        int length = ArrayUtils.getLength(fs);
        if (0 == length) {
            return ResponseResult.error("文件路径下没有文件");
        }

        Equipment equipment = equipmentService.getOneByDeviceId(device);
        if (Objects.isNull(equipment)) {
            return ResponseResult.error("设备号不正确,请确认设备信息");
        }


        List<String> errors = new ArrayList<>();
        for (int i = 0; i < length; i++) {
            FaceRegisterDTO dto = new FaceRegisterDTO();
            dto.setDevice(device);
            String name = StringUtils.trim(StringUtils.substringBeforeLast(fs[i].getName(), "."));

            NewDriver source = new NewDriver();
            source.setPersonnelName(name);

            List<NewDriver> drivers = newDriverService.list(source);
            int size = CollectionUtils.size(drivers);
            if (size == 0) {
                errors.add(StringUtils.join(file.getName(), "没有找到用户"));
                continue;
            } else if (size > 1) {
                errors.add(StringUtils.join(file.getName(), "找到多个数据:", JSON.toJSONString(drivers)));
                continue;
            }

            NewDriver driver = drivers.get(0);
            if (StringUtils.isNotEmpty(driver.getImage())) {
                log.info("人脸数据已经存在:[{}]", driver);
                continue;
            }
            dto.setRegTime(DateUtil.shortDate(new Date()));
            dto.setStaffCode(driver.getJobCode());
            try {
                byte[] bytes = FileUtils.readFileToByteArray(fs[i]);
                String imageContent = Base64.encode(bytes);
                dto.setFaceValue(imageContent);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
            ResponseResult<Object> responseResult = dssFaceController.faceRegister(dto);
            if (Objects.isNull(responseResult) || !responseResult.isSuccess()) {
                log.warn("[{}]数据没有执行成功;返回值为:[{}]", dto, responseResult);
                errors.add(StringUtils.join(file.getName(), "数据没有执行成功:", JSON.toJSONString(driver)));
            }
        }

        if (CollectionUtils.isNotEmpty(errors)) {
            return ResponseResult.error(JSON.toJSONString(errors));
        }

        log.info("人员信息同步完毕");
        return ResponseResult.success();
    }

    @GetMapping(value = "/jar/class/path")
    public ResponseResult<String> getJarClassPath() {
        String path = StringUtils.join(System.getProperty("user.dir"), File.separator, "images");

        ResponseResult<String> responseResult = ResponseResult.success();
        responseResult.setData(path);
        return responseResult;
    }

}