DssFaceController.java 9.16 KB
package com.ruoyi.controller.dss;


import cn.hutool.core.convert.Convert;
import com.ruoyi.common.TipEnum;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.ResponseResult;
import com.ruoyi.domain.driver.NewDriver;
import com.ruoyi.domain.driver.dss.syn.DrivePosEnum;
import com.ruoyi.domain.driver.dss.syn.dto.DssDriveQueryDTO;
import com.ruoyi.domain.driver.dss.syn.res.dto.FaceCheckDTO;
import com.ruoyi.domain.driver.dss.syn.res.dto.FaceRegisterDTO;
import com.ruoyi.domain.driver.dss.syn.res.dto.ReqDataDTO;
import com.ruoyi.domain.driver.dss.syn.res.dto.ResDataDriveDTO;
import com.ruoyi.domain.driver.dss.syn.res.vo.FaceCheckVo;
import com.ruoyi.domain.driver.dss.syn.res.vo.ReqDataVo;
import com.ruoyi.domain.driver.dss.syn.vo.DssDriveVo;
import com.ruoyi.service.driver.NewDriverService;
import com.ruoyi.service.dss.FaceService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
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;

import javax.validation.Valid;
import java.util.*;
import java.util.stream.Collectors;

/**
 * @author liujun
 * @date 2024年07月11日 14:07
 */

@Slf4j
@RestController
@RequestMapping("/dss")
@Api(tags = "【蓝斯一期】人脸信息")
public class DssFaceController extends BaseController {

    @Autowired
    private NewDriverService newDriverService;
    @Autowired
    private FaceService faceService;

    @ApiOperation(value = "05.终端同步人脸数据")
    @PostMapping(value = "/face/syn/reqData")
    public ResponseResult<List<ReqDataVo>> reqData(@Valid @RequestBody ReqDataDTO dto, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            return ResponseResult.error(bindingResult.getFieldError().getDefaultMessage());
        }

        List<NewDriver> drivers = newDriverService.list();
        List<ReqDataVo> vos = convertReqDataVo(drivers);
        return ResponseResult.success(vos);
    }

    @PostMapping("/Driver/syn/reqData")
    @ApiOperation("获取数据库人员信息")
    public List<DssDriveVo> queryDriver(@Valid @RequestBody DssDriveQueryDTO dto, BindingResult bindingResult) {

        List<NewDriver> drivers = newDriverService.list();
        return convertDssDriveVo(drivers);
    }

    @ApiOperation("终端同步人脸数据结果上报")
    @PostMapping(value = "/face/syn/resData")
    public ResponseResult<Object> insertDriver(@Valid @RequestBody ResDataDriveDTO dto, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            return ResponseResult.error(bindingResult.getFieldError().getDefaultMessage());
        }
        NewDriver newDriver = convertNewDriver(dto);
        TipEnum errorTipEnum = newDriverService.updateClient(newDriver);
        return new ResponseResult<>(errorTipEnum.getCode(), errorTipEnum.getMsg());
    }

    @ApiOperation(("人脸注册"))
    @PostMapping(value = "/Driver/FaceRegister")
    public ResponseResult<Object> faceRegister(@Valid @RequestBody FaceRegisterDTO dto, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            return ResponseResult.error(bindingResult.getFieldError().getDefaultMessage());
        }
        NewDriver newDriver = convertFaceRegister(dto);
        TipEnum errorTipEnum = newDriverService.faceRegister(newDriver);
        return new ResponseResult<>(errorTipEnum.getCode(), errorTipEnum.getMsg());
    }

    @ApiOperation("人脸校验")
    @PostMapping(value = "/Driver/FaceCheck")
    public ResponseResult<FaceCheckVo> faceCheck(@Valid @RequestBody FaceCheckDTO dto, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            return ResponseResult.error(bindingResult.getFieldError().getDefaultMessage());
        }

        NewDriver driver = convertNewDriver(dto);
        driver = faceService.checkFace(driver);

        return Objects.isNull(driver) ? ResponseResult.error("登陆匹配失败") : ResponseResult.success(convertFaceCheckVo(driver));
    }


    private List<DssDriveVo> convertDssDriveVo(List<NewDriver> newDrivers) {
        if (CollectionUtils.isEmpty(newDrivers)) {
            return Collections.emptyList();
        }

        return newDrivers.stream().map(driver -> {
            DssDriveVo vo = new DssDriveVo();
            vo.setStaffId(driver.getJobCode());
            vo.setStaffName(driver.getPersonnelName());
            vo.setIcCardNo(driver.getIcCardCode());
            vo.setFacePhotoPath(driver.getImage());
            vo.setCsn(driver.getIdRfid());
            vo.setFaceFeature(driver.getFaceFeature());
            vo.setBlueTooth(driver.getBlueTooth());
            vo.setSynContent(driver.getSyncontent());

            Integer post = DrivePosEnum.getObjValueOfLabel(driver.getPosts());
            Set<Integer> posts = new HashSet<>();
            posts.add(post);

            vo.setStaffTypeItem(posts);

            return vo;
        }).collect(Collectors.toList());
    }

    private NewDriver convertNewDriver(ResDataDriveDTO dto) {
        NewDriver newDriver = new NewDriver();
        newDriver.setId(Convert.toInt(dto.getStaffId()));
        newDriver.setJobCode(dto.getStaffCode());
        newDriver.setPersonnelName(dto.getStaffName());
        newDriver.setIcCardCode(dto.getIcCardNo());
        newDriver.setImage(dto.getFacePhotoPath());
        newDriver.setFaceFeature(dto.getFaceFeature());
        newDriver.setBlueTooth(dto.getBlueTooth());
        newDriver.setInteger(dto.getInteger());
        newDriver.setSyncontent((dto.getSynContent()));
        newDriver.setCsn(dto.getCsn());
        newDriver.setImageVersion(dto.getVersionNo());

        return newDriver;
    }

    private NewDriver convertFaceRegister(FaceRegisterDTO dto) {
        NewDriver newDriver = new NewDriver();
        newDriver.setIcCardCode(dto.getDriverCode());
        newDriver.setFaceSignIn(1);
        newDriver.setSignInEquipment(dto.getDevice());
        newDriver.setImage(dto.getFaceValue());

        return newDriver;
    }

    private NewDriver convertNewDriver(FaceCheckDTO dto) {
        NewDriver driver = new NewDriver();
        driver.setImage(dto.getFaceValue());
        return driver;
    }

    private FaceCheckVo convertFaceCheckVo(NewDriver driver) {
        FaceCheckVo faceCheckVo = new FaceCheckVo();
        faceCheckVo.setDriverCode(driver.getIcRfid());

        return faceCheckVo;
    }

    private List<ReqDataVo> convertReqDataVo(List<NewDriver> drivers){
        if(CollectionUtils.isEmpty(drivers)){
            return Collections.emptyList();
        }
        return drivers.stream().map(d->{
            ReqDataVo vo = new ReqDataVo();
            vo.setVersionNo(Convert.toStr(d.getImageVersion()));
            vo.setStaffId(Convert.toStr(d.getId()));
            vo.setStaffName(d.getPersonnelName());
            vo.setIcCardNo(d.getIcCardCode());
            vo.setFacePhotoPath(d.getImage());
            vo.setFaceFeature(vo.getFaceFeature());
            vo.setStaffCode(d.getJobCode());
//            vo.setSynState(d.getS)
            vo.setSynContent(d.getSyncontent());

            vo.setStaffTypeItem(switchPostion(d.getPosts()));

            return vo;
        }).collect(Collectors.toList());
    }

    private Set<Integer> switchPostion(String post){

        Set<Integer> postSet = new LinkedHashSet<>();
        if(StringUtils.indexOf(post,"驾驶员") > -1){
            postSet.add(2);
        }

        if(StringUtils.indexOf(post,"集调中心") > -1){
            postSet.add(3);
        }

        if(StringUtils.indexOf(post,"稽查") > -1){
            postSet.add(3);
        }

        if(StringUtils.indexOf(post,"行管员") > -1){
            postSet.add(3);
        }

        if(StringUtils.indexOf(post,"副队长") > -1){
            postSet.add(3);
        }

        if(StringUtils.indexOf(post,"调度") > -1){
            postSet.add(3);
        }

        if(StringUtils.indexOf(post,"科员") > -1){
            postSet.add(3);
        }

        if(StringUtils.indexOf(post,"队长") > -1){
            postSet.add(3);
        }

        if(StringUtils.indexOf(post,"车队支部书记") > -1){
            postSet.add(3);
        }


        if(StringUtils.indexOf(post,"部门副经理") > -1){
            postSet.add(3);
        }

        if(StringUtils.indexOf(post,"副总经理") > -1){
            postSet.add(3);
        }


        if(StringUtils.indexOf(post,"部门经理") > -1){
            postSet.add(3);
        }

        if(StringUtils.indexOf(post,"办公室主任") > -1){
            postSet.add(3);
        }

        if(StringUtils.indexOf(post,"办公室副主任") > -1){
            postSet.add(3);
        }

        if(StringUtils.indexOf(post,"工会副主席") > -1){
            postSet.add(3);
        }


        if(CollectionUtils.isEmpty(postSet)){
            postSet.add(1);
        }

        return postSet;
    }


}