package com.xjrsoft.module.textbook.service.impl; import cn.hutool.core.bean.BeanUtil; 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.common.enums.SubscriptionTypeEnum; import com.xjrsoft.common.enums.TextbookTypeEnum; import com.xjrsoft.common.enums.WarehouseModeEnum; import com.xjrsoft.common.exception.MyException; import com.xjrsoft.module.base.entity.BaseClass; import com.xjrsoft.module.base.service.IBaseClassService; import com.xjrsoft.module.textbook.dto.AddTextbookWarehouseRecordDto; import com.xjrsoft.module.textbook.dto.TextbookPageDto; import com.xjrsoft.module.textbook.entity.*; 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.ITextbookClassWarehouseService; import com.xjrsoft.module.textbook.service.ITextbookService; import com.xjrsoft.module.textbook.service.IWfExerciseBookService; import com.xjrsoft.module.textbook.service.IWfTextbookSubscriptionService; import com.xjrsoft.module.textbook.vo.*; 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 IWfExerciseBookService wfExerciseBookService; private final IBaseClassService baseClassService; private final ITextbookClassWarehouseService textbookClassWarehouseService; @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); } 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) { Page result = textbookTextbookMapper.getPage(page, dto); return result; } @Override @Transactional public Boolean dataHandleAddTextbookNode(Long dataId) { WfTextbookSubscription wfTextbookSubscription = iWfTextbookSubscriptionService.selectById(dataId); if (ObjectUtil.isNotNull(wfTextbookSubscription) && ObjectUtil.isNotNull(wfTextbookSubscription.getWfTextbookSubscriptionItemList()) && wfTextbookSubscription.getWfTextbookSubscriptionItemList().size() > 0) { for (WfTextbookSubscriptionItem wfTextbookSubscriptionItem : wfTextbookSubscription.getWfTextbookSubscriptionItemList()) { Long semesterId = wfTextbookSubscription.getBaseSemesterId(); String issn = wfTextbookSubscriptionItem.getIssn(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper .eq(Textbook::getIssn, issn) .eq(Textbook::getBaseSemesterId, semesterId); List textbookList = this.list(queryWrapper); //征订的教材没有在教材管理 if (ObjectUtil.isNull(textbookList) || textbookList.size() <= 0) {//该书不存在于教材管理 Textbook textbook = new Textbook() {{ setIssn(wfTextbookSubscriptionItem.getIssn()); setIsbn(wfTextbookSubscriptionItem.getIsbn()); setBookName(wfTextbookSubscriptionItem.getBookName()); setPublishingHouse(wfTextbookSubscriptionItem.getPublishingHouse()); setEditorInChief(wfTextbookSubscriptionItem.getEditorInChief()); setSubjectGroupId(wfTextbookSubscription.getSubjectGroupId()); setBaseSemesterId(wfTextbookSubscription.getBaseSemesterId()); setCourseSubjectId(wfTextbookSubscriptionItem.getCourseSubjectId()); setVersion(wfTextbookSubscriptionItem.getVersion()); setIsTextbookPlan(wfTextbookSubscriptionItem.getIsTextbookPlan()); if (ObjectUtil.isNotNull(wfTextbookSubscriptionItem.getSubscriptionType()) && wfTextbookSubscriptionItem.getSubscriptionType().equals(SubscriptionTypeEnum.STextbook.getCode())) { setTextbookType(TextbookTypeEnum.TTextbook.getCode()); } if (ObjectUtil.isNotNull(wfTextbookSubscriptionItem.getSubscriptionType()) && wfTextbookSubscriptionItem.getSubscriptionType().equals(SubscriptionTypeEnum.SMaterials.getCode())) { setTextbookType(TextbookTypeEnum.TMaterials.getCode()); } setAppraisalPrice(wfTextbookSubscriptionItem.getAppraisalPrice()); }}; //班级不为空 if (ObjectUtil.isNotNull(wfTextbookSubscriptionItem.getClassIds()) && !wfTextbookSubscriptionItem.getClassIds().equals("")) { //将班级ids转换为List String classIds = wfTextbookSubscriptionItem.getClassIds(); String[] classIdStrs = classIds.split(","); List classIdList = new ArrayList<>(); for (String classIdStr : classIdStrs) { classIdList.add(Long.parseLong(classIdStr)); } //查询年级,如果添加的班级只存在一个年级,添加年级字段值 LambdaQueryWrapper queryWrapper1 = new LambdaQueryWrapper<>(); queryWrapper1 .in(BaseClass::getId, classIdList) .groupBy(BaseClass::getGradeId); List baseClassList = baseClassService.list(queryWrapper1); if (ObjectUtil.isNotNull(baseClassList) && baseClassList.size() == 1) { textbook.setGradeId(baseClassList.get(0).getGradeId()); } //插入教材数据 textbookTextbookMapper.insert(textbook); //插入班级和教材关系 for (Long classId : classIdList) { textbookTextbookClassRelationMapper.insert(new TextbookClassRelation() {{ setTextbookId(textbook.getId()); setClassId(classId); }}); } } //添加教材征订记录 textbookTextbookSubscriptionRecordMapper.insert(new TextbookSubscriptionRecord() {{ setTextbookId(textbook.getId()); setWfTextbookSubscriptionId(wfTextbookSubscription.getId()); }}); } else { //征订的教材在教材管理,进行班级的和记录的管理 Textbook textbook = textbookList.get(0); //班级不为空 if (ObjectUtil.isNotNull(wfTextbookSubscriptionItem.getClassIds()) && !wfTextbookSubscriptionItem.getClassIds().equals("")) { //将班级ids转换为List String classIds = wfTextbookSubscriptionItem.getClassIds(); String[] classIdStrs = classIds.split(","); for (String classIdStr : classIdStrs) { textbookTextbookClassRelationMapper.insert(new TextbookClassRelation() {{ setTextbookId(textbook.getId()); setClassId(Long.parseLong(classIdStr)); }}); } } //添加教材征订记录 textbookTextbookSubscriptionRecordMapper.insert(new TextbookSubscriptionRecord() {{ setTextbookId(textbook.getId()); setWfTextbookSubscriptionId(wfTextbookSubscription.getId()); }}); } } } return true; } /** * 添加作业本规则 * * @param dataId * @return */ @Override public Boolean dataHandleAddExerciseBookNode(Long dataId) { WfExerciseBook wfExerciseBook = wfExerciseBookService.selectById(dataId); if (ObjectUtil.isNotNull(wfExerciseBook) && ObjectUtil.isNotNull(wfExerciseBook.getWfExerciseBookItemList()) && wfExerciseBook.getWfExerciseBookItemList().size() > 0) { for (WfExerciseBookItem wfExerciseBookItem : wfExerciseBook.getWfExerciseBookItemList()) { Long semesterId = wfExerciseBook.getBaseSemesterId(); String bookName = wfExerciseBookItem.getSubscriptionType();//作业本的选择类型对应教材管理的书名 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper .eq(Textbook::getBookName, bookName) .eq(Textbook::getBaseSemesterId, semesterId); List textbookList = this.list(queryWrapper); //征订的作业本没有在教材管理 if (ObjectUtil.isNull(textbookList) || textbookList.size() <= 0) { Textbook textbook = new Textbook() {{ setBaseSemesterId(wfExerciseBook.getBaseSemesterId()); setBookName(wfExerciseBookItem.getSubscriptionType()); setTextbookType(TextbookTypeEnum.TExerciseBook.getCode()); //年级id LambdaQueryWrapper queryWrapper1 = new LambdaQueryWrapper<>(); queryWrapper1 .eq(BaseClass::getId, wfExerciseBook.getClassId()); BaseClass baseClass = baseClassService.getOne(queryWrapper1); setGradeId(baseClass.getGradeId()); setAppraisalPrice(wfExerciseBookItem.getAppraisalPrice()); }}; //插入教材数据 textbookTextbookMapper.insert(textbook); //插入班级和教材关系 textbookTextbookClassRelationMapper.insert(new TextbookClassRelation() {{ setTextbookId(textbook.getId()); setClassId(wfExerciseBook.getClassId()); }}); //添加教材征订记录 textbookTextbookSubscriptionRecordMapper.insert(new TextbookSubscriptionRecord() {{ setTextbookId(textbook.getId()); setWfTextbookSubscriptionId(wfExerciseBook.getId()); }}); } else { //征订的教材在教材管理,进行班级的和记录的管理 Textbook textbook = textbookList.get(0); //班级不为空 if (ObjectUtil.isNotNull(wfExerciseBook.getClassId()) && !wfExerciseBook.getClassId().equals("")) { textbookTextbookClassRelationMapper.insert(new TextbookClassRelation() {{ setTextbookId(textbook.getId()); setClassId(wfExerciseBook.getClassId()); }}); } //添加教材征订记录 textbookTextbookSubscriptionRecordMapper.insert(new TextbookSubscriptionRecord() {{ setTextbookId(textbook.getId()); setWfTextbookSubscriptionId(wfExerciseBook.getId()); }}); } } } 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<>(); } @Override public List claimList(Long id) { List result = textbookTextbookMapper.claimList(id); if (!result.isEmpty()) { return result; } return new ArrayList<>(); } @Override @Transactional public Boolean deliverWarehouse(AddTextbookWarehouseRecordDto dto) { //根据id获取教材管理记录 Textbook textbook = this.getById(dto.getTextbookId()); if (ObjectUtil.isNull(textbook)) { throw new MyException("入库失败,该教材不存在"); } //更新总的库存数量 Textbook updateTextbook = new Textbook(); updateTextbook.setId(dto.getTextbookId()); Integer oldStock = ObjectUtil.isNull(textbook.getStock()) ? 0 : textbook.getStock(); updateTextbook.setStock(oldStock + dto.getWarehouseNumber()); boolean isSuccess = this.updateById(updateTextbook); TextbookWarehouseRecord textbookWarehouseRecord = BeanUtil.toBean(dto, TextbookWarehouseRecord.class); textbookWarehouseRecord.setWarehouseMode(WarehouseModeEnum.WmManual.getCode()); isSuccess = textbookClassWarehouseService.save(textbookWarehouseRecord); return isSuccess; } }