package com.xjrsoft.module.textbook.service.impl; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.base.entity.BaseClass; import com.xjrsoft.module.base.mapper.BaseClassMapper; import com.xjrsoft.module.base.service.IBaseClassService; 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.entity.WfTextbookSubscription; import com.xjrsoft.module.textbook.entity.WfTextbookSubscriptionItem; 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.service.IWfTextbookSubscriptionService; import com.xjrsoft.module.textbook.vo.TextbookClassWarehouseListVo; import com.xjrsoft.module.textbook.vo.TextbookIssueRecordListVo; import com.xjrsoft.module.textbook.vo.TextbookPageVo; import com.xjrsoft.module.textbook.vo.TextbookSubscriptionClassVo; import com.xjrsoft.module.textbook.vo.TextbookSubscriptionRecordVo; import com.xjrsoft.module.textbook.vo.TextbookVo; 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; private final IWfTextbookSubscriptionService iWfTextbookSubscriptionService; private final IBaseClassService baseClassService; private final BaseClassMapper baseClassMapper; @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); } if(textbook.getTextbookSubscriptionRecordList() != null){ 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()); //原有子表单 没有被删除的主键 if(!textbookSubscriptionRecordIds.isEmpty()){ 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 Boolean dataHandle(Long dataId) { WfTextbookSubscription wfTextbookSubscription = iWfTextbookSubscriptionService.selectById(dataId); if(ObjectUtil.isNotNull(wfTextbookSubscription) && ObjectUtil.isNotNull(wfTextbookSubscription.getWfTextbookSubscriptionItemList()) && wfTextbookSubscription.getWfTextbookSubscriptionItemList().size() > 0){ for (WfTextbookSubscriptionItem wfTextbookSubscriptionItem : wfTextbookSubscription.getWfTextbookSubscriptionItemList()) { String issn = wfTextbookSubscriptionItem.getIssn(); Long semesterId = wfTextbookSubscription.getBaseSemesterId(); Long subjectGroupId = wfTextbookSubscription.getSubjectGroupId(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper .eq(Textbook::getIssn,issn) .eq(Textbook::getBaseSemesterId,semesterId) .eq(Textbook::getSubjectGroupId,subjectGroupId); Long count = this.count(queryWrapper); if(count <= 0){//该书不存在教材管理 Textbook textbook = new Textbook(); textbook.setIssn(wfTextbookSubscriptionItem.getIssn()); textbook.setIsbn(wfTextbookSubscriptionItem.getIsbn()); textbook.setBookName(wfTextbookSubscriptionItem.getBookName()); textbook.setPublishingHouse(wfTextbookSubscriptionItem.getPublishingHouse()); textbook.setEditorInChief(wfTextbookSubscriptionItem.getEditorInChief()); textbook.setSubjectGroupId(wfTextbookSubscription.getSubjectGroupId()); textbook.setBaseSemesterId(wfTextbookSubscription.getBaseSemesterId()); textbook.setCourseSubjectId(wfTextbookSubscriptionItem.getCourseSubjectId()); textbook.setVersion(wfTextbookSubscriptionItem.getVersion()); textbook.setIsTextbookPlan(wfTextbookSubscriptionItem.getIsTextbookPlan()); textbook.setTextbookType(wfTextbookSubscriptionItem.getSubscriptionType()); textbook.setAppraisalPrice(wfTextbookSubscriptionItem.getAppraisalPrice()); textbookTextbookMapper.insert(textbook); if(ObjectUtil.isNotNull(wfTextbookSubscriptionItem.getClassIds()) && !wfTextbookSubscriptionItem.getClassIds().equals("")){ String classIds = wfTextbookSubscriptionItem.getClassIds(); //查询年级 LambdaQueryWrapper queryWrapper1 = new LambdaQueryWrapper<>(); queryWrapper1 .in(BaseClass::getId,classIds) .groupBy(BaseClass::getGradeId); List baseClassList = baseClassService.list(queryWrapper1); if(ObjectUtil.isNotNull(baseClassList) && baseClassList.size() == 1){ textbook.setGradeId(baseClassList.get(0).getGradeId()); } String[] classIdStrs = classIds.split(","); for (String classIdStr : classIdStrs) { Long classId = Long.parseLong(classIdStr); TextbookClassRelation textbookClassRelation = new TextbookClassRelation(); textbookClassRelation.setTextbookId(textbook.getId()); textbookClassRelation.setClassId(classId); textbookTextbookClassRelationMapper.insert(textbookClassRelation); } } TextbookSubscriptionRecord textbookSubscriptionRecord = new TextbookSubscriptionRecord(); textbookSubscriptionRecord.setWfTextbookSubscriptionId(textbook.getId()); textbookSubscriptionRecord.setWfTextbookSubscriptionId(wfTextbookSubscription.getId()); textbookTextbookSubscriptionRecordMapper.insert(textbookSubscriptionRecord); } } } return true; } @Override public List subscriptionList(Long id) { List recordVos = textbookTextbookMapper.subscriptionList(id); for (TextbookSubscriptionRecordVo recordVo : recordVos) { if(ObjectUtil.isNull(recordVo) || 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; } @Override public TextbookVo getInfoByissn(String issn) { return textbookTextbookMapper.getInfoByissn(issn); } @Override public List warehouseList(Long id) { List result = textbookTextbookMapper.warehouseList(id); if(!result.isEmpty()){ return result; } return new ArrayList<>(); } @Override public List getClassRelation(Long id) { List classRelation = textbookTextbookMapper.getClassRelation(id); if(!classRelation.isEmpty()){ return classRelation; } return new ArrayList<>(); } @Override public List issueList(Long id) { List result = textbookTextbookMapper.issueList(id); if(!result.isEmpty()){ return result; } return new ArrayList<>(); } }