|
|
|
@ -6,21 +6,22 @@ import com.chenhai.common.core.domain.AjaxResult; |
|
|
|
import com.chenhai.common.core.page.TableDataInfo; |
|
|
|
import com.chenhai.common.enums.BusinessType; |
|
|
|
import com.chenhai.common.utils.SecurityUtils; |
|
|
|
import com.chenhai.common.utils.StringUtils; |
|
|
|
import com.chenhai.common.utils.poi.ExcelUtil; |
|
|
|
import com.chenhai.vet.domain.VetPersonalInfo; |
|
|
|
import com.chenhai.vet.domain.VetQualification; |
|
|
|
import com.chenhai.vet.service.IVetPersonalInfoService; |
|
|
|
import com.chenhai.vet.service.IVetQualificationService; |
|
|
|
import org.slf4j.Logger; |
|
|
|
import org.slf4j.LoggerFactory; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.security.access.prepost.PreAuthorize; |
|
|
|
import org.springframework.web.bind.annotation.*; |
|
|
|
|
|
|
|
import jakarta.servlet.http.HttpServletResponse; |
|
|
|
import jakarta.servlet.http.HttpServletRequest; |
|
|
|
|
|
|
|
import java.util.Date; |
|
|
|
import java.util.HashMap; |
|
|
|
import java.util.List; |
|
|
|
import java.util.Map; |
|
|
|
import java.util.*; |
|
|
|
import java.util.concurrent.ConcurrentHashMap; |
|
|
|
|
|
|
|
/** |
|
|
|
* 兽医信息审核管理Controller |
|
|
|
@ -30,14 +31,61 @@ import java.util.Map; |
|
|
|
@RequestMapping("/sys/vet/audit") |
|
|
|
public class SysVetAuditController extends BaseController |
|
|
|
{ |
|
|
|
private static final Logger log = LoggerFactory.getLogger(SysVetAuditController.class); |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private IVetPersonalInfoService vetPersonalInfoService; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private IVetQualificationService vetQualificationService; |
|
|
|
|
|
|
|
// 请求去重缓存:key = 用户ID + 操作类型 + 目标ID,value = 时间戳 |
|
|
|
private final Map<String, Long> requestCache = new ConcurrentHashMap<>(); |
|
|
|
private static final long REQUEST_TIMEOUT = 3000; // 3秒内相同请求视为重复 |
|
|
|
|
|
|
|
/** |
|
|
|
* 检查是否为重复请求 |
|
|
|
* @param userId 操作用户ID |
|
|
|
* @param operationType 操作类型 |
|
|
|
* @param targetId 目标ID |
|
|
|
* @return true=重复请求,false=新请求 |
|
|
|
*/ |
|
|
|
private boolean isDuplicateRequest(Long userId, String operationType, Long targetId) { |
|
|
|
if (userId == null || targetId == null) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
String key = userId + "_" + operationType + "_" + targetId; |
|
|
|
Long lastTime = requestCache.get(key); |
|
|
|
long now = System.currentTimeMillis(); |
|
|
|
|
|
|
|
if (lastTime != null && (now - lastTime) < REQUEST_TIMEOUT) { |
|
|
|
log.warn("检测到重复请求 - 用户: {}, 操作: {}, 目标ID: {}, 间隔: {}ms", |
|
|
|
userId, operationType, targetId, now - lastTime); |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
requestCache.put(key, now); |
|
|
|
|
|
|
|
// 定期清理过期缓存(每1000次请求清理一次,避免内存泄漏) |
|
|
|
if (requestCache.size() > 1000) { |
|
|
|
cleanExpiredCache(); |
|
|
|
} |
|
|
|
|
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 查询兽医信息列表(审核管理专用) |
|
|
|
* 清理过期的请求缓存 |
|
|
|
*/ |
|
|
|
private void cleanExpiredCache() { |
|
|
|
long now = System.currentTimeMillis(); |
|
|
|
requestCache.entrySet().removeIf(entry -> (now - entry.getValue()) > REQUEST_TIMEOUT); |
|
|
|
log.debug("清理过期缓存完成,当前缓存大小: {}", requestCache.size()); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 查询兽医信息列表(审核管理专用)- 包含综合审核状态 |
|
|
|
*/ |
|
|
|
@PreAuthorize("@ss.hasPermi('sys:vetAudit:list') or @ss.hasRole('muhu') or @ss.hasRole('vet')") |
|
|
|
@GetMapping("/list") |
|
|
|
@ -45,9 +93,59 @@ public class SysVetAuditController extends BaseController |
|
|
|
{ |
|
|
|
startPage(); |
|
|
|
List<VetPersonalInfo> list = vetPersonalInfoService.selectVetPersonalInfoList(vetPersonalInfo); |
|
|
|
|
|
|
|
// 为每个兽医计算综合审核状态 |
|
|
|
for (VetPersonalInfo info : list) { |
|
|
|
calculateOverallAuditStatus(info); |
|
|
|
} |
|
|
|
|
|
|
|
// ========== 新增:在内存中按综合状态排序 ========== |
|
|
|
// 排序规则:待审核(0) > 已拒绝(2) > 已通过(1) |
|
|
|
list.sort((a, b) -> { |
|
|
|
String statusA = a.getOverallAuditStatus(); |
|
|
|
String statusB = b.getOverallAuditStatus(); |
|
|
|
|
|
|
|
int orderA = getAuditStatusOrder(statusA); |
|
|
|
int orderB = getAuditStatusOrder(statusB); |
|
|
|
|
|
|
|
if (orderA != orderB) { |
|
|
|
return Integer.compare(orderA, orderB); |
|
|
|
} |
|
|
|
// 相同状态按创建时间倒序 |
|
|
|
Date timeA = a.getCreateTime(); |
|
|
|
Date timeB = b.getCreateTime(); |
|
|
|
if (timeA != null && timeB != null) { |
|
|
|
return timeB.compareTo(timeA); |
|
|
|
} |
|
|
|
return 0; |
|
|
|
}); |
|
|
|
|
|
|
|
// 用综合状态覆盖原来的审核状态(用于前端显示) |
|
|
|
for (VetPersonalInfo info : list) { |
|
|
|
if (StringUtils.isNotEmpty(info.getOverallAuditStatus())) { |
|
|
|
info.setAuditStatus(info.getOverallAuditStatus()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return getDataTable(list); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 获取审核状态的排序权重 |
|
|
|
* @param status 审核状态 |
|
|
|
* @return 排序权重(数字越小越靠前) |
|
|
|
*/ |
|
|
|
private int getAuditStatusOrder(String status) { |
|
|
|
if ("0".equals(status)) { |
|
|
|
return 1; // 待审核排最前 |
|
|
|
} else if ("2".equals(status)) { |
|
|
|
return 2; // 已拒绝排中间 |
|
|
|
} else if ("1".equals(status)) { |
|
|
|
return 3; // 已通过排最后 |
|
|
|
} |
|
|
|
return 4; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 查询审核通过的兽医列表 |
|
|
|
* 用于前台展示已认证兽医 |
|
|
|
@ -60,7 +158,27 @@ public class SysVetAuditController extends BaseController |
|
|
|
// 设置审核状态为已通过(假设1表示审核通过,请根据实际状态码调整) |
|
|
|
vetPersonalInfo.setAuditStatus("1"); |
|
|
|
List<VetPersonalInfo> list = vetPersonalInfoService.selectVetPersonalInfoList(vetPersonalInfo); |
|
|
|
return getDataTable(list); |
|
|
|
|
|
|
|
// 为每个兽医计算综合审核状态 |
|
|
|
for (VetPersonalInfo info : list) { |
|
|
|
calculateOverallAuditStatus(info); |
|
|
|
// 注意:这里不覆盖,因为要筛选已通过的 |
|
|
|
} |
|
|
|
|
|
|
|
// 过滤出综合状态为已通过的 |
|
|
|
List<VetPersonalInfo> filteredList = new ArrayList<>(); |
|
|
|
for (VetPersonalInfo info : list) { |
|
|
|
if ("1".equals(info.getOverallAuditStatus())) { |
|
|
|
filteredList.add(info); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
TableDataInfo rspData = new TableDataInfo(); |
|
|
|
rspData.setCode(200); |
|
|
|
rspData.setMsg("查询成功"); |
|
|
|
rspData.setRows(filteredList); |
|
|
|
rspData.setTotal(filteredList.size()); |
|
|
|
return rspData; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
@ -74,41 +192,230 @@ public class SysVetAuditController extends BaseController |
|
|
|
if (fullInfo == null || fullInfo.isEmpty()) { |
|
|
|
return AjaxResult.error("兽医信息不存在"); |
|
|
|
} |
|
|
|
|
|
|
|
// 计算综合审核状态 |
|
|
|
VetPersonalInfo vetInfo = (VetPersonalInfo) fullInfo.get("vetInfo"); |
|
|
|
if (vetInfo != null) { |
|
|
|
calculateOverallAuditStatus(vetInfo); |
|
|
|
// 用综合状态覆盖原来的审核状态 |
|
|
|
if (StringUtils.isNotEmpty(vetInfo.getOverallAuditStatus())) { |
|
|
|
vetInfo.setAuditStatus(vetInfo.getOverallAuditStatus()); |
|
|
|
} |
|
|
|
fullInfo.put("vetInfo", vetInfo); |
|
|
|
fullInfo.put("overallAuditStatus", vetInfo.getOverallAuditStatus()); |
|
|
|
fullInfo.put("overallAuditStatusLabel", getAuditStatusLabel(vetInfo.getOverallAuditStatus())); |
|
|
|
} |
|
|
|
|
|
|
|
return AjaxResult.success(fullInfo); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 获取兽医个人信息详细信息 |
|
|
|
* 获取兽医个人信息详细信息 - 包含综合审核状态 |
|
|
|
*/ |
|
|
|
@PreAuthorize("@ss.hasPermi('sys:vetAudit:userInfo')") |
|
|
|
@GetMapping(value = "/{id}") |
|
|
|
public AjaxResult getInfo(@PathVariable("id") Long id) |
|
|
|
{ |
|
|
|
return success(vetPersonalInfoService.selectVetPersonalInfoById(id)); |
|
|
|
VetPersonalInfo info = vetPersonalInfoService.selectVetPersonalInfoById(id); |
|
|
|
if (info != null) { |
|
|
|
calculateOverallAuditStatus(info); |
|
|
|
// 用综合状态覆盖原来的审核状态 |
|
|
|
if (StringUtils.isNotEmpty(info.getOverallAuditStatus())) { |
|
|
|
info.setAuditStatus(info.getOverallAuditStatus()); |
|
|
|
} |
|
|
|
} |
|
|
|
return success(info); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 兽医个人信息审核 |
|
|
|
* 兽医个人信息审核 - 支持同时处理个人信息和资质 |
|
|
|
* 兼容原有的单一审核和批量审核 |
|
|
|
*/ |
|
|
|
@Log(title = "兽医信息审核", businessType = BusinessType.UPDATE) |
|
|
|
@PreAuthorize("@ss.hasPermi('sys:vetAudit:auditVetPersonalInfo')") |
|
|
|
@PostMapping("/auditVetPersonalInfo") |
|
|
|
public AjaxResult auditVetPersonalInfo(@RequestBody VetPersonalInfo vetPersonalInfo) |
|
|
|
public AjaxResult auditVetPersonalInfo(@RequestBody Map<String, Object> requestData, HttpServletRequest request) |
|
|
|
{ |
|
|
|
return toAjax(vetPersonalInfoService.auditVetPersonalInfo(vetPersonalInfo)); |
|
|
|
Long currentUserId = SecurityUtils.getUserId(); |
|
|
|
|
|
|
|
try { |
|
|
|
// 批量审核结果收集 |
|
|
|
List<Map<String, Object>> auditResults = new ArrayList<>(); |
|
|
|
int successCount = 0; |
|
|
|
int failCount = 0; |
|
|
|
|
|
|
|
// 1. 处理个人信息审核 |
|
|
|
if (requestData.containsKey("personalInfo")) { |
|
|
|
Map<String, Object> personalData = (Map<String, Object>) requestData.get("personalInfo"); |
|
|
|
Long targetId = ((Number) personalData.get("id")).longValue(); |
|
|
|
|
|
|
|
// 防重复提交检查 |
|
|
|
if (isDuplicateRequest(currentUserId, "personalInfo", targetId)) { |
|
|
|
log.info("拦截重复的个人信息审核请求 - 用户: {}, 个人信息ID: {}", currentUserId, targetId); |
|
|
|
Map<String, Object> result = new HashMap<>(); |
|
|
|
result.put("type", "personalInfo"); |
|
|
|
result.put("id", targetId); |
|
|
|
result.put("success", true); |
|
|
|
result.put("isDuplicate", true); |
|
|
|
auditResults.add(result); |
|
|
|
successCount++; |
|
|
|
} else { |
|
|
|
VetPersonalInfo vetPersonalInfo = new VetPersonalInfo(); |
|
|
|
vetPersonalInfo.setId(targetId); |
|
|
|
vetPersonalInfo.setAuditStatus((String) personalData.get("auditStatus")); |
|
|
|
vetPersonalInfo.setAuditDesc((String) personalData.get("auditDesc")); |
|
|
|
|
|
|
|
int result = vetPersonalInfoService.auditVetPersonalInfo(vetPersonalInfo); |
|
|
|
|
|
|
|
Map<String, Object> resultMap = new HashMap<>(); |
|
|
|
resultMap.put("type", "personalInfo"); |
|
|
|
resultMap.put("id", targetId); |
|
|
|
resultMap.put("success", result > 0); |
|
|
|
if (result > 0) { |
|
|
|
successCount++; |
|
|
|
} else { |
|
|
|
failCount++; |
|
|
|
resultMap.put("error", "审核失败"); |
|
|
|
} |
|
|
|
auditResults.add(resultMap); |
|
|
|
} |
|
|
|
} else if (requestData.containsKey("id")) { |
|
|
|
// 兼容旧的单一数据格式 |
|
|
|
VetPersonalInfo vetPersonalInfo = new VetPersonalInfo(); |
|
|
|
vetPersonalInfo.setId(((Number) requestData.get("id")).longValue()); |
|
|
|
vetPersonalInfo.setAuditStatus((String) requestData.get("auditStatus")); |
|
|
|
vetPersonalInfo.setAuditDesc((String) requestData.get("auditDesc")); |
|
|
|
|
|
|
|
Long targetId = vetPersonalInfo.getId(); |
|
|
|
|
|
|
|
// 防重复提交检查 |
|
|
|
if (isDuplicateRequest(currentUserId, "personalInfo", targetId)) { |
|
|
|
log.info("拦截重复的个人信息审核请求 - 用户: {}, 个人信息ID: {}", currentUserId, targetId); |
|
|
|
Map<String, Object> result = new HashMap<>(); |
|
|
|
result.put("success", true); |
|
|
|
result.put("id", targetId); |
|
|
|
result.put("message", "处理成功"); |
|
|
|
result.put("isDuplicate", true); |
|
|
|
return success(result); |
|
|
|
} |
|
|
|
|
|
|
|
int result = vetPersonalInfoService.auditVetPersonalInfo(vetPersonalInfo); |
|
|
|
|
|
|
|
if (result > 0) { |
|
|
|
VetPersonalInfo updatedInfo = vetPersonalInfoService.selectVetPersonalInfoById(vetPersonalInfo.getId()); |
|
|
|
if (updatedInfo != null) { |
|
|
|
calculateOverallAuditStatus(updatedInfo); |
|
|
|
if (StringUtils.isNotEmpty(updatedInfo.getOverallAuditStatus())) { |
|
|
|
updatedInfo.setAuditStatus(updatedInfo.getOverallAuditStatus()); |
|
|
|
} |
|
|
|
return success(updatedInfo); |
|
|
|
} |
|
|
|
} |
|
|
|
return toAjax(result); |
|
|
|
} |
|
|
|
|
|
|
|
// 2. 处理资质审核 |
|
|
|
if (requestData.containsKey("qualifications")) { |
|
|
|
List<Map<String, Object>> qualifications = (List<Map<String, Object>>) requestData.get("qualifications"); |
|
|
|
for (Map<String, Object> qualData : qualifications) { |
|
|
|
Long targetId = ((Number) qualData.get("qualificationId")).longValue(); |
|
|
|
|
|
|
|
// 防重复提交检查 |
|
|
|
if (isDuplicateRequest(currentUserId, "qualification", targetId)) { |
|
|
|
log.info("拦截重复的资质审核请求 - 用户: {}, 资质ID: {}", currentUserId, targetId); |
|
|
|
Map<String, Object> result = new HashMap<>(); |
|
|
|
result.put("type", "qualification"); |
|
|
|
result.put("id", targetId); |
|
|
|
result.put("success", true); |
|
|
|
result.put("isDuplicate", true); |
|
|
|
auditResults.add(result); |
|
|
|
successCount++; |
|
|
|
} else { |
|
|
|
VetQualification qualification = new VetQualification(); |
|
|
|
qualification.setQualificationId(targetId); |
|
|
|
qualification.setAuditStatus((String) qualData.get("auditStatus")); |
|
|
|
qualification.setAuditOpinion((String) qualData.get("auditOpinion")); |
|
|
|
qualification.setAuditTime(new Date()); |
|
|
|
|
|
|
|
int result = vetQualificationService.updateVetQualification(qualification); |
|
|
|
|
|
|
|
Map<String, Object> resultMap = new HashMap<>(); |
|
|
|
resultMap.put("type", "qualification"); |
|
|
|
resultMap.put("id", targetId); |
|
|
|
resultMap.put("success", result > 0); |
|
|
|
if (result > 0) { |
|
|
|
successCount++; |
|
|
|
} else { |
|
|
|
failCount++; |
|
|
|
resultMap.put("error", "审核失败"); |
|
|
|
} |
|
|
|
auditResults.add(resultMap); |
|
|
|
} |
|
|
|
} |
|
|
|
} else if (requestData.containsKey("qualificationId")) { |
|
|
|
// 兼容旧的单一资质格式 |
|
|
|
VetQualification vetQualification = new VetQualification(); |
|
|
|
vetQualification.setQualificationId(((Number) requestData.get("qualificationId")).longValue()); |
|
|
|
vetQualification.setAuditStatus((String) requestData.get("auditStatus")); |
|
|
|
vetQualification.setAuditOpinion((String) requestData.get("auditOpinion")); |
|
|
|
vetQualification.setAuditTime(new Date()); |
|
|
|
|
|
|
|
Long targetId = vetQualification.getQualificationId(); |
|
|
|
|
|
|
|
// 防重复提交检查 |
|
|
|
if (isDuplicateRequest(currentUserId, "qualification", targetId)) { |
|
|
|
log.info("拦截重复的资质审核请求 - 用户: {}, 资质ID: {}", currentUserId, targetId); |
|
|
|
Map<String, Object> result = new HashMap<>(); |
|
|
|
result.put("success", true); |
|
|
|
result.put("qualificationId", targetId); |
|
|
|
result.put("message", "处理成功"); |
|
|
|
result.put("isDuplicate", true); |
|
|
|
return success(result); |
|
|
|
} |
|
|
|
|
|
|
|
int result = vetQualificationService.updateVetQualification(vetQualification); |
|
|
|
|
|
|
|
if (result > 0 && vetQualification.getUserId() != null) { |
|
|
|
VetPersonalInfo vetInfo = vetPersonalInfoService.selectVetPersonalInfoByUserId(vetQualification.getUserId()); |
|
|
|
if (vetInfo != null) { |
|
|
|
calculateOverallAuditStatus(vetInfo); |
|
|
|
if (StringUtils.isNotEmpty(vetInfo.getOverallAuditStatus())) { |
|
|
|
vetInfo.setAuditStatus(vetInfo.getOverallAuditStatus()); |
|
|
|
} |
|
|
|
return success(vetInfo); |
|
|
|
} |
|
|
|
} |
|
|
|
return toAjax(result); |
|
|
|
} |
|
|
|
|
|
|
|
// 返回批量审核结果 |
|
|
|
Map<String, Object> response = new HashMap<>(); |
|
|
|
response.put("successCount", successCount); |
|
|
|
response.put("failCount", failCount); |
|
|
|
response.put("total", successCount + failCount); |
|
|
|
response.put("results", auditResults); |
|
|
|
|
|
|
|
if (failCount == 0) { |
|
|
|
response.put("message", "审核完成,共" + (successCount + failCount) + "条,全部成功"); |
|
|
|
} else { |
|
|
|
response.put("message", "审核完成,成功" + successCount + "条,失败" + failCount + "条"); |
|
|
|
} |
|
|
|
|
|
|
|
return success(response); |
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
log.error("审核失败", e); |
|
|
|
return error("审核失败:" + e.getMessage()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 查询兽医资质列表(含证书信息) |
|
|
|
*/ |
|
|
|
/** |
|
|
|
* 查询兽医资质列表(含证书信息) |
|
|
|
* 查询兽医资质列表(自动展开证书并包含综合状态) |
|
|
|
*/ |
|
|
|
@PreAuthorize("@ss.hasPermi('vet:qualification:list') or @ss.hasRole('manger')") |
|
|
|
@GetMapping("/listQualification") |
|
|
|
public TableDataInfo listQualification(VetQualification vetQualification) |
|
|
|
{ |
|
|
|
startPage(); |
|
|
|
Long userId = SecurityUtils.getUserId(); |
|
|
|
|
|
|
|
// 管理员和manger角色可以查看所有数据 |
|
|
|
@ -116,32 +423,549 @@ public class SysVetAuditController extends BaseController |
|
|
|
vetQualification.setUserId(userId); |
|
|
|
} |
|
|
|
|
|
|
|
List<VetQualification> list = vetQualificationService.selectVetQualificationList(vetQualification); |
|
|
|
// 获取所有资质 |
|
|
|
List<VetQualification> qualifications = vetQualificationService.selectVetQualificationList(vetQualification); |
|
|
|
|
|
|
|
// 将证书展开为独立记录 |
|
|
|
List<Map<String, Object>> expandedList = new ArrayList<>(); |
|
|
|
|
|
|
|
for (VetQualification qualification : qualifications) { |
|
|
|
List<Map<String, Object>> certificates = qualification.getCertificates(); |
|
|
|
|
|
|
|
// 调试日志 |
|
|
|
for (VetQualification qualification : list) { |
|
|
|
System.out.println("===== 资质信息 ====="); |
|
|
|
System.out.println("qualificationId: " + qualification.getQualificationId()); |
|
|
|
System.out.println("auditStatus: " + qualification.getAuditStatus()); |
|
|
|
System.out.println("auditStatusLabel: " + qualification.getAuditStatusLabel()); |
|
|
|
System.out.println("certStatus: " + qualification.getCertStatus()); |
|
|
|
System.out.println("certStatusLabel: " + qualification.getCertStatusLabel()); |
|
|
|
System.out.println("scopeNames: " + qualification.getScopeNames()); |
|
|
|
System.out.println("certificateList size: " + |
|
|
|
(qualification.getCertificateList() != null ? qualification.getCertificateList().size() : 0)); |
|
|
|
if (certificates != null && !certificates.isEmpty()) { |
|
|
|
// 有证书:展开每个证书 |
|
|
|
for (Map<String, Object> cert : certificates) { |
|
|
|
Map<String, Object> record = new LinkedHashMap<>(); |
|
|
|
|
|
|
|
// 复制资质字段 |
|
|
|
record.put("qualificationId", qualification.getQualificationId()); |
|
|
|
record.put("userId", qualification.getUserId()); |
|
|
|
record.put("realName", qualification.getRealName()); |
|
|
|
record.put("idCard", qualification.getIdCard()); |
|
|
|
record.put("qualificationType", qualification.getQualificationType()); |
|
|
|
record.put("qualificationTypeLabel", qualification.getQualificationTypeLabel()); |
|
|
|
record.put("auditStatus", qualification.getAuditStatus()); |
|
|
|
record.put("auditStatusLabel", qualification.getAuditStatusLabel()); |
|
|
|
record.put("auditTime", qualification.getAuditTime()); |
|
|
|
record.put("auditOpinion", qualification.getAuditOpinion()); |
|
|
|
record.put("applyTime", qualification.getApplyTime()); |
|
|
|
record.put("createTime", qualification.getCreateTime()); |
|
|
|
record.put("createBy", qualification.getCreateBy()); |
|
|
|
record.put("updateTime", qualification.getUpdateTime()); |
|
|
|
record.put("updateBy", qualification.getUpdateBy()); |
|
|
|
record.put("scopeIds", qualification.getScopeIds()); |
|
|
|
record.put("scopeNames", qualification.getScopeNames()); |
|
|
|
record.put("scopeNamesLabel", qualification.getScopeNamesLabel()); |
|
|
|
|
|
|
|
// 复制证书字段 |
|
|
|
record.put("certId", cert.get("certId")); |
|
|
|
record.put("certName", cert.get("certName")); |
|
|
|
record.put("certStatus", cert.get("certStatus")); |
|
|
|
record.put("certStatusLabel", cert.get("certStatusLabel")); |
|
|
|
record.put("certImage", cert.get("certImage")); |
|
|
|
record.put("certificateFiles", cert.get("certificateFiles")); |
|
|
|
record.put("certificateNo", cert.get("certificateNo")); |
|
|
|
record.put("issueDate", cert.get("issueDate")); |
|
|
|
record.put("expireDate", cert.get("expireDate")); |
|
|
|
record.put("issueOrg", cert.get("issueOrg")); |
|
|
|
|
|
|
|
// 添加类型标识 |
|
|
|
record.put("recordType", "certificate"); |
|
|
|
|
|
|
|
expandedList.add(record); |
|
|
|
} |
|
|
|
} else { |
|
|
|
// 没有证书:返回资质本身 |
|
|
|
Map<String, Object> record = new LinkedHashMap<>(); |
|
|
|
|
|
|
|
return getDataTable(list); |
|
|
|
// 复制资质字段 |
|
|
|
record.put("qualificationId", qualification.getQualificationId()); |
|
|
|
record.put("userId", qualification.getUserId()); |
|
|
|
record.put("realName", qualification.getRealName()); |
|
|
|
record.put("idCard", qualification.getIdCard()); |
|
|
|
record.put("qualificationType", qualification.getQualificationType()); |
|
|
|
record.put("qualificationTypeLabel", qualification.getQualificationTypeLabel()); |
|
|
|
record.put("auditStatus", qualification.getAuditStatus()); |
|
|
|
record.put("auditStatusLabel", qualification.getAuditStatusLabel()); |
|
|
|
record.put("auditTime", qualification.getAuditTime()); |
|
|
|
record.put("auditOpinion", qualification.getAuditOpinion()); |
|
|
|
record.put("applyTime", qualification.getApplyTime()); |
|
|
|
record.put("createTime", qualification.getCreateTime()); |
|
|
|
record.put("createBy", qualification.getCreateBy()); |
|
|
|
record.put("updateTime", qualification.getUpdateTime()); |
|
|
|
record.put("updateBy", qualification.getUpdateBy()); |
|
|
|
record.put("scopeIds", qualification.getScopeIds()); |
|
|
|
record.put("scopeNames", qualification.getScopeNames()); |
|
|
|
record.put("scopeNamesLabel", qualification.getScopeNamesLabel()); |
|
|
|
record.put("recordType", "qualification"); |
|
|
|
|
|
|
|
expandedList.add(record); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 手动分页 |
|
|
|
int pageNum = 1; |
|
|
|
int pageSize = 10; |
|
|
|
|
|
|
|
if (vetQualification.getParams() != null) { |
|
|
|
if (vetQualification.getParams().get("pageNum") != null) { |
|
|
|
pageNum = Integer.parseInt(vetQualification.getParams().get("pageNum").toString()); |
|
|
|
} |
|
|
|
if (vetQualification.getParams().get("pageSize") != null) { |
|
|
|
pageSize = Integer.parseInt(vetQualification.getParams().get("pageSize").toString()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
int total = expandedList.size(); |
|
|
|
int start = (pageNum - 1) * pageSize; |
|
|
|
int end = Math.min(start + pageSize, total); |
|
|
|
List<Map<String, Object>> pageList = start < total ? expandedList.subList(start, end) : new ArrayList<>(); |
|
|
|
|
|
|
|
TableDataInfo rspData = new TableDataInfo(); |
|
|
|
rspData.setCode(200); |
|
|
|
rspData.setMsg("查询成功"); |
|
|
|
rspData.setRows(pageList); |
|
|
|
rspData.setTotal(total); |
|
|
|
return rspData; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 资质证书审核接口 |
|
|
|
* 资质证书审核接口 - 支持证书ID数组批量审核 |
|
|
|
* 前端格式:{"certId": [id1, id2, ...], "auditStatus": "1", "auditOpinion": ""} |
|
|
|
*/ |
|
|
|
@Log(title = "兽医资质证书审核", businessType = BusinessType.UPDATE) |
|
|
|
@PreAuthorize("@ss.hasPermi('sys:vetAudit:qualificationAudit')") |
|
|
|
@PostMapping("/qualificationAudit") |
|
|
|
public AjaxResult qualificationAudit(@RequestBody VetQualification vetQualification) { |
|
|
|
vetQualification.setAuditTime(new Date()); |
|
|
|
return toAjax(vetQualificationService.updateVetQualification(vetQualification)); |
|
|
|
public AjaxResult qualificationAudit(@RequestBody Map<String, Object> requestData, HttpServletRequest request) { |
|
|
|
Long currentUserId = SecurityUtils.getUserId(); |
|
|
|
|
|
|
|
try { |
|
|
|
// 检查是否为证书ID数组格式 |
|
|
|
if (requestData.containsKey("certId") && requestData.get("certId") instanceof List) { |
|
|
|
List<?> certIdList = (List<?>) requestData.get("certId"); |
|
|
|
String auditStatus = (String) requestData.get("auditStatus"); |
|
|
|
String auditOpinion = (String) requestData.get("auditOpinion"); |
|
|
|
|
|
|
|
if (certIdList == null || certIdList.isEmpty()) { |
|
|
|
return error("证书ID列表不能为空"); |
|
|
|
} |
|
|
|
|
|
|
|
log.info("批量审核证书 - 用户: {}, 证书数量: {}, 审核状态: {}", |
|
|
|
currentUserId, certIdList.size(), auditStatus); |
|
|
|
|
|
|
|
// 批量审核结果收集 |
|
|
|
List<Map<String, Object>> auditResults = new ArrayList<>(); |
|
|
|
int successCount = 0; |
|
|
|
int failCount = 0; |
|
|
|
|
|
|
|
for (Object certIdObj : certIdList) { |
|
|
|
Long certId = null; |
|
|
|
try { |
|
|
|
if (certIdObj instanceof Number) { |
|
|
|
certId = ((Number) certIdObj).longValue(); |
|
|
|
} else if (certIdObj instanceof String) { |
|
|
|
certId = Long.parseLong((String) certIdObj); |
|
|
|
} else { |
|
|
|
throw new IllegalArgumentException("证书ID格式错误"); |
|
|
|
} |
|
|
|
} catch (Exception e) { |
|
|
|
log.warn("解析证书ID失败: {}", certIdObj); |
|
|
|
Map<String, Object> resultItem = new HashMap<>(); |
|
|
|
resultItem.put("certId", certIdObj); |
|
|
|
resultItem.put("success", false); |
|
|
|
resultItem.put("error", "证书ID格式错误"); |
|
|
|
auditResults.add(resultItem); |
|
|
|
failCount++; |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
// 防重复提交检查 |
|
|
|
if (isDuplicateRequest(currentUserId, "certificate", certId)) { |
|
|
|
log.info("拦截重复的证书审核请求 - 用户: {}, 证书ID: {}", currentUserId, certId); |
|
|
|
Map<String, Object> resultItem = new HashMap<>(); |
|
|
|
resultItem.put("certId", certId); |
|
|
|
resultItem.put("success", true); |
|
|
|
resultItem.put("isDuplicate", true); |
|
|
|
auditResults.add(resultItem); |
|
|
|
successCount++; |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
// 根据证书ID查找并更新证书 |
|
|
|
try { |
|
|
|
VetQualification qualification = findQualificationByCertId(certId); |
|
|
|
if (qualification == null) { |
|
|
|
Map<String, Object> resultItem = new HashMap<>(); |
|
|
|
resultItem.put("certId", certId); |
|
|
|
resultItem.put("success", false); |
|
|
|
resultItem.put("error", "未找到该证书"); |
|
|
|
auditResults.add(resultItem); |
|
|
|
failCount++; |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
// 更新证书的审核状态 |
|
|
|
boolean updated = updateCertificateStatus(qualification, certId, auditStatus, auditOpinion); |
|
|
|
|
|
|
|
if (updated) { |
|
|
|
// 更新资质 |
|
|
|
qualification.setUpdateBy(SecurityUtils.getUsername()); |
|
|
|
qualification.setUpdateTime(new Date()); |
|
|
|
int updateResult = vetQualificationService.updateVetQualification(qualification); |
|
|
|
|
|
|
|
if (updateResult > 0) { |
|
|
|
Map<String, Object> resultItem = new HashMap<>(); |
|
|
|
resultItem.put("certId", certId); |
|
|
|
resultItem.put("qualificationId", qualification.getQualificationId()); |
|
|
|
resultItem.put("userId", qualification.getUserId()); |
|
|
|
resultItem.put("success", true); |
|
|
|
auditResults.add(resultItem); |
|
|
|
successCount++; |
|
|
|
|
|
|
|
// 注意:不需要手动更新兽医个人信息 |
|
|
|
// 因为 updateVetQualification 方法内部已经调用了 updateVetPersonalAuditStatus |
|
|
|
// 它会自动更新兽医个人信息的审核状态 |
|
|
|
} else { |
|
|
|
Map<String, Object> resultItem = new HashMap<>(); |
|
|
|
resultItem.put("certId", certId); |
|
|
|
resultItem.put("success", false); |
|
|
|
resultItem.put("error", "更新资质失败"); |
|
|
|
auditResults.add(resultItem); |
|
|
|
failCount++; |
|
|
|
} |
|
|
|
} else { |
|
|
|
Map<String, Object> resultItem = new HashMap<>(); |
|
|
|
resultItem.put("certId", certId); |
|
|
|
resultItem.put("success", false); |
|
|
|
resultItem.put("error", "未找到证书或更新失败"); |
|
|
|
auditResults.add(resultItem); |
|
|
|
failCount++; |
|
|
|
} |
|
|
|
} catch (Exception e) { |
|
|
|
log.error("审核证书失败 - certId: {}", certId, e); |
|
|
|
Map<String, Object> resultItem = new HashMap<>(); |
|
|
|
resultItem.put("certId", certId); |
|
|
|
resultItem.put("success", false); |
|
|
|
resultItem.put("error", e.getMessage()); |
|
|
|
auditResults.add(resultItem); |
|
|
|
failCount++; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 返回批量审核结果 |
|
|
|
Map<String, Object> response = new HashMap<>(); |
|
|
|
response.put("successCount", successCount); |
|
|
|
response.put("failCount", failCount); |
|
|
|
response.put("total", successCount + failCount); |
|
|
|
response.put("results", auditResults); |
|
|
|
|
|
|
|
if (failCount == 0) { |
|
|
|
response.put("message", "审核完成,共" + (successCount + failCount) + "条,全部成功"); |
|
|
|
} else { |
|
|
|
response.put("message", "审核完成,成功" + successCount + "条,失败" + failCount + "条"); |
|
|
|
} |
|
|
|
|
|
|
|
return success(response); |
|
|
|
} |
|
|
|
|
|
|
|
// 如果不是证书ID数组格式,则调用原来的方法 |
|
|
|
return auditVetPersonalInfo(requestData, request); |
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
log.error("审核失败", e); |
|
|
|
return error("审核失败:" + e.getMessage()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 根据证书ID查找包含该证书的资质 |
|
|
|
*/ |
|
|
|
private VetQualification findQualificationByCertId(Long certId) { |
|
|
|
// 查询所有资质 |
|
|
|
VetQualification query = new VetQualification(); |
|
|
|
List<VetQualification> allQualifications = vetQualificationService.selectVetQualificationList(query); |
|
|
|
|
|
|
|
for (VetQualification qualification : allQualifications) { |
|
|
|
List<Map<String, Object>> certificates = qualification.getCertificates(); |
|
|
|
if (certificates != null) { |
|
|
|
for (Map<String, Object> cert : certificates) { |
|
|
|
Long currentCertId = extractCertId(cert.get("certId")); |
|
|
|
if (currentCertId != null && currentCertId.equals(certId)) { |
|
|
|
return qualification; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 更新证书的审核状态 |
|
|
|
*/ |
|
|
|
private boolean updateCertificateStatus(VetQualification qualification, Long certId, String auditStatus, String auditOpinion) { |
|
|
|
List<Map<String, Object>> certificates = qualification.getCertificates(); |
|
|
|
if (certificates == null || certificates.isEmpty()) { |
|
|
|
log.warn("资质没有证书列表 - qualificationId: {}", qualification.getQualificationId()); |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
boolean found = false; |
|
|
|
for (Map<String, Object> cert : certificates) { |
|
|
|
Long currentCertId = extractCertId(cert.get("certId")); |
|
|
|
if (currentCertId != null && currentCertId.equals(certId)) { |
|
|
|
// 同时设置 auditStatus 和 certStatus 字段 |
|
|
|
cert.put("auditStatus", auditStatus); |
|
|
|
cert.put("certStatus", auditStatus); |
|
|
|
if (auditOpinion != null) { |
|
|
|
cert.put("auditOpinion", auditOpinion); |
|
|
|
} |
|
|
|
// 添加审核时间 |
|
|
|
cert.put("auditTime", new Date()); |
|
|
|
found = true; |
|
|
|
log.info("找到并更新证书 - certId: {}, 新状态: {}, 字段已更新", certId, auditStatus); |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (found) { |
|
|
|
// 更新证书JSON |
|
|
|
try { |
|
|
|
com.fasterxml.jackson.databind.ObjectMapper mapper = new com.fasterxml.jackson.databind.ObjectMapper(); |
|
|
|
String newCertificatesJson = mapper.writeValueAsString(certificates); |
|
|
|
qualification.setCertificatesJson(newCertificatesJson); |
|
|
|
qualification.setCertificates(certificates); |
|
|
|
|
|
|
|
log.info("证书JSON已更新 - qualificationId: {}, JSON长度: {}", |
|
|
|
qualification.getQualificationId(), newCertificatesJson.length()); |
|
|
|
|
|
|
|
// 更新资质审核状态(根据所有证书的审核状态) |
|
|
|
updateQualificationAuditStatus(qualification); |
|
|
|
|
|
|
|
return true; |
|
|
|
} catch (Exception e) { |
|
|
|
log.error("更新证书JSON失败", e); |
|
|
|
return false; |
|
|
|
} |
|
|
|
} else { |
|
|
|
log.warn("未找到要更新的证书 - certId: {}, qualificationId: {}", certId, qualification.getQualificationId()); |
|
|
|
} |
|
|
|
|
|
|
|
return found; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 从对象中提取证书ID |
|
|
|
*/ |
|
|
|
private Long extractCertId(Object certIdObj) { |
|
|
|
if (certIdObj == null) { |
|
|
|
return null; |
|
|
|
} |
|
|
|
try { |
|
|
|
if (certIdObj instanceof Number) { |
|
|
|
return ((Number) certIdObj).longValue(); |
|
|
|
} else if (certIdObj instanceof String) { |
|
|
|
return Long.parseLong((String) certIdObj); |
|
|
|
} |
|
|
|
} catch (Exception e) { |
|
|
|
// 忽略 |
|
|
|
} |
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 根据证书审核状态更新资质的综合审核状态 |
|
|
|
*/ |
|
|
|
private void updateQualificationAuditStatus(VetQualification qualification) { |
|
|
|
List<Map<String, Object>> certificates = qualification.getCertificates(); |
|
|
|
if (certificates == null || certificates.isEmpty()) { |
|
|
|
log.warn("资质没有证书列表 - qualificationId: {}", qualification.getQualificationId()); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
log.info("更新资质审核状态 - qualificationId: {}, 证书数量: {}", |
|
|
|
qualification.getQualificationId(), certificates.size()); |
|
|
|
|
|
|
|
boolean allApproved = true; |
|
|
|
boolean anyRejected = false; |
|
|
|
boolean anyPending = false; |
|
|
|
|
|
|
|
for (int i = 0; i < certificates.size(); i++) { |
|
|
|
Map<String, Object> cert = certificates.get(i); |
|
|
|
|
|
|
|
// 尝试多种方式获取审核状态 |
|
|
|
String certAuditStatus = null; |
|
|
|
|
|
|
|
// 方式1: 直接获取 auditStatus |
|
|
|
Object statusObj = cert.get("auditStatus"); |
|
|
|
if (statusObj != null) { |
|
|
|
certAuditStatus = statusObj.toString(); |
|
|
|
} |
|
|
|
|
|
|
|
// 方式2: 如果为空,尝试从 certStatus 字段获取 |
|
|
|
if (certAuditStatus == null) { |
|
|
|
Object certStatusObj = cert.get("certStatus"); |
|
|
|
if (certStatusObj != null) { |
|
|
|
certAuditStatus = certStatusObj.toString(); |
|
|
|
log.info("证书 {} 使用 certStatus 字段: {}", i, certAuditStatus); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
log.info("证书 {} - certId: {}, auditStatus: {}", i, cert.get("certId"), certAuditStatus); |
|
|
|
|
|
|
|
if (certAuditStatus == null || "0".equals(certAuditStatus)) { |
|
|
|
anyPending = true; |
|
|
|
allApproved = false; |
|
|
|
log.info("证书 {} 状态为待审核或未设置", i); |
|
|
|
} else if ("2".equals(certAuditStatus)) { |
|
|
|
anyRejected = true; |
|
|
|
allApproved = false; |
|
|
|
log.info("证书 {} 状态为已拒绝", i); |
|
|
|
} else if ("1".equals(certAuditStatus)) { |
|
|
|
// 已通过,继续检查 |
|
|
|
log.info("证书 {} 状态为已通过", i); |
|
|
|
} else { |
|
|
|
anyPending = true; |
|
|
|
allApproved = false; |
|
|
|
log.info("证书 {} 状态未知: {}", i, certAuditStatus); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
String qualStatus; |
|
|
|
if (anyPending) { |
|
|
|
qualStatus = "0"; |
|
|
|
} else if (anyRejected) { |
|
|
|
qualStatus = "2"; |
|
|
|
} else if (allApproved) { |
|
|
|
qualStatus = "1"; |
|
|
|
} else { |
|
|
|
qualStatus = "0"; |
|
|
|
} |
|
|
|
|
|
|
|
log.info("资质 {} 最终审核状态: {} (anyPending: {}, anyRejected: {}, allApproved: {})", |
|
|
|
qualification.getQualificationId(), qualStatus, anyPending, anyRejected, allApproved); |
|
|
|
|
|
|
|
qualification.setAuditStatus(qualStatus); |
|
|
|
|
|
|
|
// 如果所有证书都审核通过,且资质还没有审核时间,则设置审核时间 |
|
|
|
if ("1".equals(qualStatus) && qualification.getAuditTime() == null) { |
|
|
|
qualification.setAuditTime(new Date()); |
|
|
|
log.info("设置资质审核时间: {}", qualification.getAuditTime()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 计算兽医的综合审核状态 |
|
|
|
* 规则:只要个人信息或任一资质证书为待审核,综合状态就是待审核 |
|
|
|
* |
|
|
|
* @param vetInfo 兽医个人信息 |
|
|
|
*/ |
|
|
|
private void calculateOverallAuditStatus(VetPersonalInfo vetInfo) { |
|
|
|
if (vetInfo == null || vetInfo.getUserId() == null) { |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
// 1. 获取个人信息审核状态 |
|
|
|
String personalAuditStatus = vetInfo.getAuditStatus(); |
|
|
|
|
|
|
|
// 2. 获取所有资质证书的审核状态 |
|
|
|
VetQualification query = new VetQualification(); |
|
|
|
query.setUserId(vetInfo.getUserId()); |
|
|
|
List<VetQualification> qualifications = vetQualificationService.selectVetQualificationList(query); |
|
|
|
|
|
|
|
// 3. 统计各类审核状态 |
|
|
|
boolean hasPending = false; |
|
|
|
boolean hasRejected = false; |
|
|
|
int pendingCount = 0; |
|
|
|
int approvedCount = 0; |
|
|
|
int rejectedCount = 0; |
|
|
|
|
|
|
|
// 检查个人信息 |
|
|
|
if ("0".equals(personalAuditStatus)) { |
|
|
|
hasPending = true; |
|
|
|
pendingCount++; |
|
|
|
} else if ("2".equals(personalAuditStatus)) { |
|
|
|
hasRejected = true; |
|
|
|
rejectedCount++; |
|
|
|
} else if ("1".equals(personalAuditStatus)) { |
|
|
|
approvedCount++; |
|
|
|
} |
|
|
|
|
|
|
|
// 检查所有资质和证书 |
|
|
|
for (VetQualification qualification : qualifications) { |
|
|
|
// 检查资质审核状态 |
|
|
|
String qualStatus = qualification.getAuditStatus(); |
|
|
|
if ("0".equals(qualStatus)) { |
|
|
|
hasPending = true; |
|
|
|
pendingCount++; |
|
|
|
} else if ("2".equals(qualStatus)) { |
|
|
|
hasRejected = true; |
|
|
|
rejectedCount++; |
|
|
|
} else if ("1".equals(qualStatus)) { |
|
|
|
approvedCount++; |
|
|
|
} |
|
|
|
|
|
|
|
// 检查证书审核状态 |
|
|
|
List<Map<String, Object>> certificates = qualification.getCertificates(); |
|
|
|
if (certificates != null) { |
|
|
|
for (Map<String, Object> cert : certificates) { |
|
|
|
String certAuditStatus = (String) cert.get("auditStatus"); |
|
|
|
if (certAuditStatus != null) { |
|
|
|
if ("0".equals(certAuditStatus)) { |
|
|
|
hasPending = true; |
|
|
|
pendingCount++; |
|
|
|
} else if ("2".equals(certAuditStatus)) { |
|
|
|
hasRejected = true; |
|
|
|
rejectedCount++; |
|
|
|
} else if ("1".equals(certAuditStatus)) { |
|
|
|
approvedCount++; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 4. 计算综合状态 |
|
|
|
String overallStatus; |
|
|
|
if (hasPending) { |
|
|
|
overallStatus = "0"; // 有待审核的,综合状态为待审核 |
|
|
|
} else if (hasRejected) { |
|
|
|
overallStatus = "2"; // 有拒绝的,综合状态为拒绝 |
|
|
|
} else { |
|
|
|
overallStatus = "1"; // 全部通过 |
|
|
|
} |
|
|
|
|
|
|
|
// 5. 设置综合审核状态到返回对象 |
|
|
|
vetInfo.setOverallAuditStatus(overallStatus); |
|
|
|
|
|
|
|
// 6. 添加扩展信息 |
|
|
|
Map<String, Object> params = vetInfo.getParams(); |
|
|
|
if (params == null) { |
|
|
|
params = new HashMap<>(); |
|
|
|
} |
|
|
|
params.put("personalAuditStatus", personalAuditStatus); |
|
|
|
params.put("personalAuditStatusLabel", getAuditStatusLabel(personalAuditStatus)); |
|
|
|
params.put("qualificationPendingCount", pendingCount); |
|
|
|
params.put("qualificationApprovedCount", approvedCount); |
|
|
|
params.put("qualificationRejectedCount", rejectedCount); |
|
|
|
params.put("totalAuditItems", pendingCount + approvedCount + rejectedCount); |
|
|
|
params.put("overallAuditStatus", overallStatus); |
|
|
|
params.put("overallAuditStatusLabel", getAuditStatusLabel(overallStatus)); |
|
|
|
|
|
|
|
vetInfo.setParams(params); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 获取审核状态标签 |
|
|
|
*/ |
|
|
|
private String getAuditStatusLabel(String status) { |
|
|
|
if (status == null) { |
|
|
|
return "未知"; |
|
|
|
} |
|
|
|
switch (status) { |
|
|
|
case "0": return "待审核"; |
|
|
|
case "1": return "已通过"; |
|
|
|
case "2": return "已拒绝"; |
|
|
|
default: return "未知"; |
|
|
|
} |
|
|
|
} |
|
|
|
} |