package com.tcm.training.admin.system.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.tcm.training.admin.common.PageResponse; import com.tcm.training.admin.system.dto.PlatformQualificationPublishStatusRequest; import com.tcm.training.admin.system.dto.PlatformQualificationSaveRequest; import com.tcm.training.admin.system.entity.PlatformQualification; import com.tcm.training.admin.system.mapper.PlatformQualificationMapper; import com.tcm.training.admin.system.vo.PlatformQualificationDetailVO; import com.tcm.training.admin.system.vo.PlatformQualificationListItemVO; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; @Service public class PlatformQualificationAppService { private final PlatformQualificationMapper platformQualificationMapper; public PlatformQualificationAppService(PlatformQualificationMapper platformQualificationMapper) { this.platformQualificationMapper = platformQualificationMapper; } public PageResponse page(int page, int pageSize, String qualificationName) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() .eq(PlatformQualification::getDeleted, 0) .like(qualificationName != null && !qualificationName.trim().isEmpty(), PlatformQualification::getQualificationName, qualificationName == null ? null : qualificationName.trim()) .orderByDesc(PlatformQualification::getCreatedAt) .orderByDesc(PlatformQualification::getId); IPage result = platformQualificationMapper.selectPage( new Page(page, pageSize), queryWrapper ); List list = new ArrayList(); for (PlatformQualification item : result.getRecords()) { list.add(toListItem(item)); } return PageResponse.of(list, result.getTotal(), result.getCurrent(), result.getSize()); } public PlatformQualificationDetailVO detail(Long id) { return toDetailVO(requireItem(id)); } @Transactional public PlatformQualificationDetailVO create(PlatformQualificationSaveRequest request) { PlatformQualification item = new PlatformQualification(); fillEntity(item, request); item.setDeleted(0); platformQualificationMapper.insert(item); return detail(item.getId()); } @Transactional public PlatformQualificationDetailVO update(Long id, PlatformQualificationSaveRequest request) { PlatformQualification item = requireItem(id); fillEntity(item, request); platformQualificationMapper.updateById(item); return detail(id); } @Transactional public void delete(Long id) { requireItem(id); platformQualificationMapper.deleteById(id); } @Transactional public void patchPublishStatus(Long id, PlatformQualificationPublishStatusRequest request) { PlatformQualification item = requireItem(id); item.setPublishEnabled(booleanToInteger(request.getPublishEnabled())); platformQualificationMapper.updateById(item); } private void fillEntity(PlatformQualification item, PlatformQualificationSaveRequest request) { String qualificationType = normalizeQualificationType(request.getQualificationType()); item.setQualificationName(normalizeRequired(request.getQualificationName(), "请输入资质名称")); item.setQualificationType(qualificationType); item.setRecordNumber(normalizeRequired(request.getRecordNumber(), "请输入备案号")); item.setSort(request.getSort()); item.setPublishEnabled(booleanToInteger(request.getPublishEnabled())); if (PlatformQualification.TYPE_RICH_TEXT.equals(qualificationType)) { item.setContentHtml(normalizeContent(request.getContentHtml())); item.setLinkUrl(null); return; } item.setLinkUrl(normalizeRequired(request.getLinkUrl(), "请输入跳转链接")); item.setContentHtml(null); } private PlatformQualification requireItem(Long id) { PlatformQualification item = platformQualificationMapper.selectOne(new LambdaQueryWrapper() .eq(PlatformQualification::getId, id) .eq(PlatformQualification::getDeleted, 0) .last("limit 1")); if (item == null) { throw new IllegalArgumentException("平台资质不存在"); } return item; } private PlatformQualificationListItemVO toListItem(PlatformQualification item) { PlatformQualificationListItemVO vo = new PlatformQualificationListItemVO(); vo.setId(item.getId()); vo.setQualificationName(item.getQualificationName()); vo.setQualificationType(item.getQualificationType()); vo.setRecordNumber(item.getRecordNumber()); vo.setSort(item.getSort()); vo.setPublishEnabled(integerToBoolean(item.getPublishEnabled())); vo.setCreatedBy(item.getCreatedBy()); vo.setCreatedAt(item.getCreatedAt()); return vo; } private PlatformQualificationDetailVO toDetailVO(PlatformQualification item) { PlatformQualificationDetailVO vo = new PlatformQualificationDetailVO(); vo.setId(item.getId()); vo.setQualificationName(item.getQualificationName()); vo.setQualificationType(item.getQualificationType()); vo.setRecordNumber(item.getRecordNumber()); vo.setContentHtml(item.getContentHtml()); vo.setLinkUrl(item.getLinkUrl()); vo.setSort(item.getSort()); vo.setPublishEnabled(integerToBoolean(item.getPublishEnabled())); vo.setCreatedBy(item.getCreatedBy()); vo.setUpdatedBy(item.getUpdatedBy()); vo.setCreatedAt(item.getCreatedAt()); vo.setUpdatedAt(item.getUpdatedAt()); return vo; } private String normalizeQualificationType(String qualificationType) { String normalized = normalizeRequired(qualificationType, "请选择资质类型").toUpperCase(); if (PlatformQualification.TYPE_RICH_TEXT.equals(normalized) || PlatformQualification.TYPE_LINK.equals(normalized)) { return normalized; } throw new IllegalArgumentException("资质类型不合法"); } private String normalizeRequired(String value, String message) { String trimmed = trimToNull(value); if (trimmed == null) { throw new IllegalArgumentException(message); } return trimmed; } private String normalizeContent(String contentHtml) { String trimmed = trimToNull(contentHtml); if (trimmed == null || isBlankRichText(trimmed)) { throw new IllegalArgumentException("请输入资质内容"); } return trimmed; } private boolean isBlankRichText(String html) { String normalized = html .replaceAll("(?i)", "") .replaceAll("(?i)

", "") .replace(" ", "") .replace(" ", "") .replaceAll("<[^>]+>", "") .trim(); if (!normalized.isEmpty()) { return false; } String lowerCaseHtml = html.toLowerCase(); return !lowerCaseHtml.contains("