package com.gkhy.assess.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gkhy.assess.common.enums.DeleteFlagEnum;
import com.gkhy.assess.common.exception.ApiException;
import com.gkhy.assess.common.utils.StringUtils;
import com.gkhy.assess.system.domain.AssFaceRecognition;
import com.gkhy.assess.system.domain.AssPlanPerson;
import com.gkhy.assess.system.enums.ReportProgressEnum;
import com.gkhy.assess.system.mapper.AssFaceRecognitionMapper;
import com.gkhy.assess.system.mapper.AssPlanPersonMapper;
import com.gkhy.assess.system.domain.vo.UploadObjectVO;
import com.gkhy.assess.system.service.AssFaceRecognitionService;
import com.gkhy.assess.system.service.AssProjectService;
import com.gkhy.assess.system.service.SysCommonService;
import com.gkhy.assess.system.utils.ShiroUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
*
* 签字确认表 服务实现类
*
*
* @author kzy
* @since 2023-12-12 10:46:54
*/
@Service
public class AssFaceRecognitionServiceImpl extends ServiceImpl implements AssFaceRecognitionService {
@Autowired
private AssProjectService projectService;
@Autowired
private SysCommonService commonService;
@Autowired
private AssPlanPersonMapper planPersonMapper;
@Override
public int addFaceRecognition(AssFaceRecognition faceRecognition) {
int row=0;
projectService.checkUserAllowed(faceRecognition.getProjectId());
UploadObjectVO uploadObjectVO=commonService.doUpload(faceRecognition.getFile());
faceRecognition.setSignPath(uploadObjectVO.getPath());
AssFaceRecognition existRecord=checkFaceRecognitionUnique(faceRecognition.getPersonId(),faceRecognition.getProjectId());
if(existRecord!=null){
existRecord.setSignPath(faceRecognition.getSignPath());
existRecord.setUpdateBy(ShiroUtils.getSysUser().getUsername());
row =baseMapper.updateById(existRecord);
}else{
faceRecognition.setCreateBy(ShiroUtils.getSysUser().getUsername());
row=baseMapper.insert(faceRecognition);
}
return row;
}
@Override
public void doFaceRecognition(Map map) {
Long projectId= Long.parseLong(map.get("projectId").toString());
projectService.checkUserAllowed(projectId);
//todo 校验项目成员是否都完成了签字确认
checkAllFaceRecongnition(projectId);
//校验项目状态
projectService.checkReportProgress(projectId, ReportProgressEnum.PROJECT_MATERIAL);
//更新项目状态
projectService.changeReportProgress(projectId,ReportProgressEnum.FACE_RECOGNITION);
}
@Override
public Boolean checkAllFaceRecongnition(Long projectId){
projectService.checkUserAllowed(projectId);
List planPersonList=planPersonMapper.getAllPlanPersonByProjectId(projectId);
List faceRecognitionList=baseMapper.getFaceRecognitionByProjectId(projectId);
Map map=faceRecognitionList.stream().collect(Collectors.toMap(AssFaceRecognition::getPersonId,a -> a,(k1,k2) -> k1));
String message="";
for(AssPlanPerson planPerson:planPersonList){
if(map.get(planPerson.getPersonId())==null){
message=message+planPerson.getPerson().getName()+",";
}
}
if(StringUtils.isNotBlank(message)){
message=message+"未签字确认";
throw new ApiException(message);
}
return true;
}
public AssFaceRecognition checkFaceRecognitionUnique(Long personId,Long projectId){
LambdaQueryWrapper lambdaQueryWrapper = Wrappers.lambdaQuery()
.eq(AssFaceRecognition::getPersonId, personId)
.eq(AssFaceRecognition::getProjectId, projectId)
.eq(AssFaceRecognition::getDelFlag, DeleteFlagEnum.UN_DELETE);
return getOne(lambdaQueryWrapper);
}
@Override
public int editFaceRecognition(AssFaceRecognition faceRecognition) {
projectService.checkUserAllowed(faceRecognition.getProjectId());
faceRecognition.setUpdateBy(ShiroUtils.getSysUser().getUsername());
int row=baseMapper.updateById(faceRecognition);
return row;
}
@Override
public List getFaceRecognitionByProjectId(Long projectId) {
projectService.checkUserAllowed(projectId);
return baseMapper.getFaceRecognitionByProjectId(projectId);
}
@Override
public AssFaceRecognition getFaceRecognitionById(Long faceRecognitionId) {
AssFaceRecognition faceRecognition= baseMapper.getFaceRecognitionById(faceRecognitionId);
projectService.checkUserAllowed(faceRecognition.getProjectId());
return faceRecognition;
}
@Override
public AssFaceRecognition getRecognitionByPersonId(Long projectId, Long personId) {
projectService.checkUserAllowed(projectId);
return getOne(Wrappers.lambdaQuery()
.eq(AssFaceRecognition::getPersonId,personId)
.eq(AssFaceRecognition::getProjectId,projectId)
.eq(AssFaceRecognition::getDelFlag, DeleteFlagEnum.UN_DELETE.getCode()));
}
}