package com.xiaopeng.account.service.impl;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xiaopeng.account.mapper.SysRoleMapper;
import com.xiaopeng.account.mapper.XpOperationsRoleMapper;
import com.xiaopeng.account.mapper.XpOperationsUserMapper;
import com.xiaopeng.account.mapper.XpQualificationAuditMapper;
import com.xiaopeng.account.model.dto.QualificationReviewDTO;
import com.xiaopeng.account.model.query.XpQualificationAuditQuery;
import com.xiaopeng.account.service.ISysRoleService;
import com.xiaopeng.account.service.IXpQualificationAuditService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xiaopeng.api.model.account.SysRole;
import com.xiaopeng.api.model.account.XpOperationsRole;
import com.xiaopeng.api.model.account.XpOperationsUser;
import com.xiaopeng.api.model.account.XpQualificationAudit;
import com.xiaopeng.api.vo.account.XpQualificationAuditVO;
import com.xiaopeng.common.core.utils.SensitiveDataCryptoUtil;
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.evi.oss.service.AliOssService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.io.UnsupportedEncodingException;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
*
* 运维人员资质证书审核记录 服务实现类
*
*
* @author mitao
* @since 2026-02-03
*/
@Service
public class XpQualificationAuditServiceImpl extends ServiceImpl implements IXpQualificationAuditService {
@Autowired
private XpOperationsRoleMapper xpOperationsRoleMapper;
@Autowired
private SysRoleMapper sysRoleMapper;
@Autowired
private AliOssService aliOssService;
@Override
public PageInfo pageList(XpQualificationAuditQuery query) throws UnsupportedEncodingException {
query.setPhoneNumberQueryValues(SensitiveDataCryptoUtil.queryValues(query.getPhoneNumber()));
PageInfo pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
List list = this.baseMapper.pageList(pageInfo, query);
if(CollectionUtils.isEmpty(list)){
return pageInfo;
}
// 查询角色名称
List operationsUserIds = list.stream().map(XpQualificationAuditVO::getOperationsUserId).collect(Collectors.toList());
// 查询用户信息
List xpOperationsRoles = xpOperationsRoleMapper.selectList(Wrappers.lambdaQuery(XpOperationsRole.class)
.in(XpOperationsRole::getOperationsUserId, operationsUserIds));
if(!CollectionUtils.isEmpty(xpOperationsRoles)){
List roleIds = xpOperationsRoles.stream().map(XpOperationsRole::getRoleId).collect(Collectors.toList());
// 查询列表关联的所有角色
List sysRoles = sysRoleMapper.selectList(Wrappers.lambdaQuery(SysRole.class)
.in(SysRole::getId, roleIds));
if(!CollectionUtils.isEmpty(sysRoles)){
// 角色匹配账号id
Map> map = new HashMap<>();
for (XpOperationsRole xpOperationsRole : xpOperationsRoles) {
List sysRoleList = sysRoles.stream().filter(sysRole -> sysRole.getId().equals(xpOperationsRole.getRoleId())).collect(Collectors.toList());
map.put(xpOperationsRole.getOperationsUserId(), sysRoleList);
}
// 角色名称匹配
for (XpQualificationAuditVO xpQualificationAuditVO : list) {
List roleList = map.get(xpQualificationAuditVO.getOperationsUserId());
xpQualificationAuditVO.setRoleNames(roleList.stream().map(SysRole::getRoleName).collect(Collectors.toList()));
}
}
}
for (XpQualificationAuditVO xpQualificationAuditVO : list) {
xpQualificationAuditVO.setPhoneNumber(SensitiveDataCryptoUtil.decryptIfPossible(xpQualificationAuditVO.getPhoneNumber()));
String certificateOfNoCriminalRecord = xpQualificationAuditVO.getCertificateOfNoCriminalRecord();
if(certificateOfNoCriminalRecord!=null){
JSONObject jsonObject = JSONObject.parseObject(certificateOfNoCriminalRecord);
// 1
String downloadUrl = aliOssService.getDownloadUrl(jsonObject.getString("id"), jsonObject.getString("name"), true);
jsonObject.put("url", downloadUrl);
xpQualificationAuditVO.setCertificateOfNoCriminalRecord(jsonObject.toJSONString());
}
String driverLicense = xpQualificationAuditVO.getDriverLicense();
if(driverLicense!=null){
JSONObject jsonObject = JSONObject.parseObject(driverLicense);
//1
String downloadUrl = aliOssService.getDownloadUrl(jsonObject.getString("id"), jsonObject.getString("name"), true);
jsonObject.put("url", downloadUrl);
xpQualificationAuditVO.setDriverLicense(jsonObject.toJSONString());
}
String trainingGraduationCertificate = xpQualificationAuditVO.getTrainingGraduationCertificate();
if(trainingGraduationCertificate!=null){
JSONObject jsonObject = JSONObject.parseObject(trainingGraduationCertificate);
//1
String downloadUrl = aliOssService.getDownloadUrl(jsonObject.getString("id"), jsonObject.getString("name"), true);
jsonObject.put("url", downloadUrl);
xpQualificationAuditVO.setTrainingGraduationCertificate(jsonObject.toJSONString());
}
String idCardFront = xpQualificationAuditVO.getIdCardFront();
if(idCardFront!=null){
JSONObject jsonObject = JSONObject.parseObject(idCardFront);
//1
String downloadUrl = aliOssService.getDownloadUrl(jsonObject.getString("id"), jsonObject.getString("name"), true);
jsonObject.put("url", downloadUrl);
xpQualificationAuditVO.setIdCardFront(jsonObject.toJSONString());
}
String idCardBack = xpQualificationAuditVO.getIdCardBack();
if(idCardBack!=null){
JSONObject jsonObject = JSONObject.parseObject(idCardBack);
//1
String downloadUrl = aliOssService.getDownloadUrl(jsonObject.getString("id"), jsonObject.getString("name"), true);
jsonObject.put("url", downloadUrl);
xpQualificationAuditVO.setIdCardBack(jsonObject.toJSONString());
}
}
pageInfo.setRecords(list);
return pageInfo;
}
@Override
public void audit(QualificationReviewDTO dto, Long userid) {
List qualificationAudits = this.listByIds(dto.getIds());
for (XpQualificationAudit qualificationAudit : qualificationAudits) {
qualificationAudit.setAuditUserId(userid);
qualificationAudit.setAuditTime(LocalDateTime.now());
qualificationAudit.setAuditStatus(dto.getAuditStatus());
// qualificationAudit.setAuditRemarks(dto.getAuditRemarks());
}
this.updateBatchById(qualificationAudits);
}
}