package com.xjrsoft.module.textbook.service.impl; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.base.MPJBaseServiceImpl; import com.xjrsoft.module.textbook.dto.TextbookPageDto; import com.xjrsoft.module.textbook.entity.Textbook; import com.xjrsoft.module.textbook.entity.TextbookClassRelation; import com.xjrsoft.module.textbook.entity.TextbookSubscriptionRecord; import com.xjrsoft.module.textbook.mapper.TextbookClassRelationMapper; import com.xjrsoft.module.textbook.mapper.TextbookMapper; import com.xjrsoft.module.textbook.mapper.TextbookSubscriptionRecordMapper; import com.xjrsoft.module.textbook.service.ITextbookService; import com.xjrsoft.module.textbook.vo.TextbookPageVo; import com.xjrsoft.module.textbook.vo.TextbookSubscriptionClassVo; import com.xjrsoft.module.textbook.vo.TextbookSubscriptionRecordVo; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; /** * @title: 教材管理 * @Author szs * @Date: 2023-12-25 * @Version 1.0 */ @Service @AllArgsConstructor public class TextbookServiceImpl extends MPJBaseServiceImpl implements ITextbookService { private final TextbookMapper textbookTextbookMapper; private final TextbookClassRelationMapper textbookTextbookClassRelationMapper; private final TextbookSubscriptionRecordMapper textbookTextbookSubscriptionRecordMapper; @Override @Transactional(rollbackFor = Exception.class) public Boolean add(Textbook textbook) { textbookTextbookMapper.insert(textbook); for (TextbookClassRelation textbookClassRelation : textbook.getTextbookClassRelationList()) { textbookClassRelation.setTextbookId(textbook.getId()); textbookTextbookClassRelationMapper.insert(textbookClassRelation); } for (TextbookSubscriptionRecord textbookSubscriptionRecord : textbook.getTextbookSubscriptionRecordList()) { textbookSubscriptionRecord.setWfTextbookSubscriptionId(textbook.getId()); textbookTextbookSubscriptionRecordMapper.insert(textbookSubscriptionRecord); } return true; } @Override @Transactional(rollbackFor = Exception.class) public Boolean update(Textbook textbook) { textbookTextbookMapper.updateById(textbook); //********************************* TextbookClassRelation 增删改 开始 *******************************************/ { // 查出所有子级的id List textbookClassRelationList = textbookTextbookClassRelationMapper.selectList(Wrappers.lambdaQuery(TextbookClassRelation.class).eq(TextbookClassRelation::getTextbookId, textbook.getId()).select(TextbookClassRelation::getId)); List textbookClassRelationIds = textbookClassRelationList.stream().map(TextbookClassRelation::getId).collect(Collectors.toList()); //原有子表单 没有被删除的主键 List textbookClassRelationOldIds = textbook.getTextbookClassRelationList().stream().map(TextbookClassRelation::getId).filter(Objects::nonNull).collect(Collectors.toList()); //找到需要删除的id List textbookClassRelationRemoveIds = textbookClassRelationIds.stream().filter(item -> !textbookClassRelationOldIds.contains(item)).collect(Collectors.toList()); for (TextbookClassRelation textbookClassRelation : textbook.getTextbookClassRelationList()) { //如果不等于空则修改 if (textbookClassRelation.getId() != null) { textbookTextbookClassRelationMapper.updateById(textbookClassRelation); } //如果等于空 则新增 else { //已经不存在的id 删除 textbookClassRelation.setTextbookId(textbook.getId()); textbookTextbookClassRelationMapper.insert(textbookClassRelation); } } //已经不存在的id 删除 if(textbookClassRelationRemoveIds.size() > 0){ textbookTextbookClassRelationMapper.deleteBatchIds(textbookClassRelationRemoveIds); } } //********************************* TextbookClassRelation 增删改 结束 *******************************************/ //********************************* TextbookSubscriptionRecord 增删改 开始 *******************************************/ { // 查出所有子级的id List textbookSubscriptionRecordList = textbookTextbookSubscriptionRecordMapper.selectList(Wrappers.lambdaQuery(TextbookSubscriptionRecord.class).eq(TextbookSubscriptionRecord::getWfTextbookSubscriptionId, textbook.getId()).select(TextbookSubscriptionRecord::getId)); List textbookSubscriptionRecordIds = textbookSubscriptionRecordList.stream().map(TextbookSubscriptionRecord::getId).collect(Collectors.toList()); //原有子表单 没有被删除的主键 List textbookSubscriptionRecordOldIds = textbook.getTextbookSubscriptionRecordList().stream().map(TextbookSubscriptionRecord::getId).filter(Objects::nonNull).collect(Collectors.toList()); //找到需要删除的id List textbookSubscriptionRecordRemoveIds = textbookSubscriptionRecordIds.stream().filter(item -> !textbookSubscriptionRecordOldIds.contains(item)).collect(Collectors.toList()); for (TextbookSubscriptionRecord textbookSubscriptionRecord : textbook.getTextbookSubscriptionRecordList()) { //如果不等于空则修改 if (textbookSubscriptionRecord.getId() != null) { textbookTextbookSubscriptionRecordMapper.updateById(textbookSubscriptionRecord); } //如果等于空 则新增 else { //已经不存在的id 删除 textbookSubscriptionRecord.setWfTextbookSubscriptionId(textbook.getId()); textbookTextbookSubscriptionRecordMapper.insert(textbookSubscriptionRecord); } } //已经不存在的id 删除 if(textbookSubscriptionRecordRemoveIds.size() > 0){ textbookTextbookSubscriptionRecordMapper.deleteBatchIds(textbookSubscriptionRecordRemoveIds); } } //********************************* TextbookSubscriptionRecord 增删改 结束 *******************************************/ return true; } @Override @Transactional(rollbackFor = Exception.class) public Boolean delete(List ids) { textbookTextbookMapper.deleteBatchIds(ids); textbookTextbookClassRelationMapper.delete(Wrappers.lambdaQuery(TextbookClassRelation.class).in(TextbookClassRelation::getTextbookId, ids)); textbookTextbookSubscriptionRecordMapper.delete(Wrappers.lambdaQuery(TextbookSubscriptionRecord.class).in(TextbookSubscriptionRecord::getWfTextbookSubscriptionId, ids)); return true; } @Override public Page getPage(Page page, TextbookPageDto dto) { return textbookTextbookMapper.getPage(page, dto); } @Override public List subscriptionList(Long id) { List recordVos = textbookTextbookMapper.subscriptionList(id); for (TextbookSubscriptionRecordVo recordVo : recordVos) { if(StrUtil.isEmpty(recordVo.getClassIds())){ continue; } String[] split = recordVo.getClassIds().split(","); List ids = new ArrayList<>(); for (String classId : split) { ids.add(classId.trim()); } List classInfo = textbookTextbookMapper.getClassInfo(ids); String useClass = ""; for (int i = 0; i < classInfo.size(); i ++){ if(i >= 1){ useClass += ","; } TextbookSubscriptionClassVo classVo = classInfo.get(i); useClass += classVo.getName(); } recordVo.setUseClass(useClass); } return recordVos; } }