TextbookServiceImpl.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. package com.xjrsoft.module.textbook.service.impl;
  2. import cn.hutool.core.util.ObjectUtil;
  3. import cn.hutool.core.util.StrUtil;
  4. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  5. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  6. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  7. import com.github.yulichang.base.MPJBaseServiceImpl;
  8. import com.xjrsoft.module.base.entity.BaseClass;
  9. import com.xjrsoft.module.base.mapper.BaseClassMapper;
  10. import com.xjrsoft.module.base.service.IBaseClassService;
  11. import com.xjrsoft.module.textbook.dto.TextbookPageDto;
  12. import com.xjrsoft.module.textbook.entity.Textbook;
  13. import com.xjrsoft.module.textbook.entity.TextbookClassRelation;
  14. import com.xjrsoft.module.textbook.entity.TextbookSubscriptionRecord;
  15. import com.xjrsoft.module.textbook.entity.WfTextbookSubscription;
  16. import com.xjrsoft.module.textbook.entity.WfTextbookSubscriptionItem;
  17. import com.xjrsoft.module.textbook.mapper.TextbookClassRelationMapper;
  18. import com.xjrsoft.module.textbook.mapper.TextbookMapper;
  19. import com.xjrsoft.module.textbook.mapper.TextbookSubscriptionRecordMapper;
  20. import com.xjrsoft.module.textbook.service.ITextbookService;
  21. import com.xjrsoft.module.textbook.service.IWfTextbookSubscriptionService;
  22. import com.xjrsoft.module.textbook.vo.TextbookClassWarehouseListVo;
  23. import com.xjrsoft.module.textbook.vo.TextbookIssueRecordListVo;
  24. import com.xjrsoft.module.textbook.vo.TextbookPageVo;
  25. import com.xjrsoft.module.textbook.vo.TextbookSubscriptionClassVo;
  26. import com.xjrsoft.module.textbook.vo.TextbookSubscriptionRecordVo;
  27. import com.xjrsoft.module.textbook.vo.TextbookVo;
  28. import lombok.AllArgsConstructor;
  29. import org.springframework.stereotype.Service;
  30. import org.springframework.transaction.annotation.Transactional;
  31. import java.util.ArrayList;
  32. import java.util.List;
  33. import java.util.Objects;
  34. import java.util.stream.Collectors;
  35. /**
  36. * @title: 教材管理
  37. * @Author szs
  38. * @Date: 2023-12-25
  39. * @Version 1.0
  40. */
  41. @Service
  42. @AllArgsConstructor
  43. public class TextbookServiceImpl extends MPJBaseServiceImpl<TextbookMapper, Textbook> implements ITextbookService {
  44. private final TextbookMapper textbookTextbookMapper;
  45. private final TextbookClassRelationMapper textbookTextbookClassRelationMapper;
  46. private final TextbookSubscriptionRecordMapper textbookTextbookSubscriptionRecordMapper;
  47. private final IWfTextbookSubscriptionService iWfTextbookSubscriptionService;
  48. private final IBaseClassService baseClassService;
  49. private final BaseClassMapper baseClassMapper;
  50. @Override
  51. @Transactional(rollbackFor = Exception.class)
  52. public Boolean add(Textbook textbook) {
  53. textbookTextbookMapper.insert(textbook);
  54. for (TextbookClassRelation textbookClassRelation : textbook.getTextbookClassRelationList()) {
  55. textbookClassRelation.setTextbookId(textbook.getId());
  56. textbookTextbookClassRelationMapper.insert(textbookClassRelation);
  57. }
  58. if(textbook.getTextbookSubscriptionRecordList() != null){
  59. for (TextbookSubscriptionRecord textbookSubscriptionRecord : textbook.getTextbookSubscriptionRecordList()) {
  60. textbookSubscriptionRecord.setWfTextbookSubscriptionId(textbook.getId());
  61. textbookTextbookSubscriptionRecordMapper.insert(textbookSubscriptionRecord);
  62. }
  63. }
  64. return true;
  65. }
  66. @Override
  67. @Transactional(rollbackFor = Exception.class)
  68. public Boolean update(Textbook textbook) {
  69. textbookTextbookMapper.updateById(textbook);
  70. //********************************* TextbookClassRelation 增删改 开始 *******************************************/
  71. {
  72. // 查出所有子级的id
  73. List<TextbookClassRelation> textbookClassRelationList = textbookTextbookClassRelationMapper.selectList(Wrappers.lambdaQuery(TextbookClassRelation.class).eq(TextbookClassRelation::getTextbookId, textbook.getId()).select(TextbookClassRelation::getId));
  74. List<Long> textbookClassRelationIds = textbookClassRelationList.stream().map(TextbookClassRelation::getId).collect(Collectors.toList());
  75. //原有子表单 没有被删除的主键
  76. List<Long> textbookClassRelationOldIds = textbook.getTextbookClassRelationList().stream().map(TextbookClassRelation::getId).filter(Objects::nonNull).collect(Collectors.toList());
  77. //找到需要删除的id
  78. List<Long> textbookClassRelationRemoveIds = textbookClassRelationIds.stream().filter(item -> !textbookClassRelationOldIds.contains(item)).collect(Collectors.toList());
  79. for (TextbookClassRelation textbookClassRelation : textbook.getTextbookClassRelationList()) {
  80. //如果不等于空则修改
  81. if (textbookClassRelation.getId() != null) {
  82. textbookTextbookClassRelationMapper.updateById(textbookClassRelation);
  83. }
  84. //如果等于空 则新增
  85. else {
  86. //已经不存在的id 删除
  87. textbookClassRelation.setTextbookId(textbook.getId());
  88. textbookTextbookClassRelationMapper.insert(textbookClassRelation);
  89. }
  90. }
  91. //已经不存在的id 删除
  92. if(textbookClassRelationRemoveIds.size() > 0){
  93. textbookTextbookClassRelationMapper.deleteBatchIds(textbookClassRelationRemoveIds);
  94. }
  95. }
  96. //********************************* TextbookClassRelation 增删改 结束 *******************************************/
  97. //********************************* TextbookSubscriptionRecord 增删改 开始 *******************************************/
  98. {
  99. // 查出所有子级的id
  100. List<TextbookSubscriptionRecord> textbookSubscriptionRecordList = textbookTextbookSubscriptionRecordMapper.selectList(Wrappers.lambdaQuery(TextbookSubscriptionRecord.class).eq(TextbookSubscriptionRecord::getWfTextbookSubscriptionId, textbook.getId()).select(TextbookSubscriptionRecord::getId));
  101. List<Long> textbookSubscriptionRecordIds = textbookSubscriptionRecordList.stream().map(TextbookSubscriptionRecord::getId).collect(Collectors.toList());
  102. //原有子表单 没有被删除的主键
  103. if(!textbookSubscriptionRecordIds.isEmpty()){
  104. List<Long> textbookSubscriptionRecordOldIds = textbook.getTextbookSubscriptionRecordList().stream().map(TextbookSubscriptionRecord::getId).filter(Objects::nonNull).collect(Collectors.toList());
  105. //找到需要删除的id
  106. List<Long> textbookSubscriptionRecordRemoveIds = textbookSubscriptionRecordIds.stream().filter(item -> !textbookSubscriptionRecordOldIds.contains(item)).collect(Collectors.toList());
  107. for (TextbookSubscriptionRecord textbookSubscriptionRecord : textbook.getTextbookSubscriptionRecordList()) {
  108. //如果不等于空则修改
  109. if (textbookSubscriptionRecord.getId() != null) {
  110. textbookTextbookSubscriptionRecordMapper.updateById(textbookSubscriptionRecord);
  111. }
  112. //如果等于空 则新增
  113. else {
  114. //已经不存在的id 删除
  115. textbookSubscriptionRecord.setWfTextbookSubscriptionId(textbook.getId());
  116. textbookTextbookSubscriptionRecordMapper.insert(textbookSubscriptionRecord);
  117. }
  118. }
  119. //已经不存在的id 删除
  120. if(textbookSubscriptionRecordRemoveIds.size() > 0){
  121. textbookTextbookSubscriptionRecordMapper.deleteBatchIds(textbookSubscriptionRecordRemoveIds);
  122. }
  123. }
  124. }
  125. //********************************* TextbookSubscriptionRecord 增删改 结束 *******************************************/
  126. return true;
  127. }
  128. @Override
  129. @Transactional(rollbackFor = Exception.class)
  130. public Boolean delete(List<Long> ids) {
  131. textbookTextbookMapper.deleteBatchIds(ids);
  132. textbookTextbookClassRelationMapper.delete(Wrappers.lambdaQuery(TextbookClassRelation.class).in(TextbookClassRelation::getTextbookId, ids));
  133. textbookTextbookSubscriptionRecordMapper.delete(Wrappers.lambdaQuery(TextbookSubscriptionRecord.class).in(TextbookSubscriptionRecord::getWfTextbookSubscriptionId, ids));
  134. return true;
  135. }
  136. @Override
  137. public Page<TextbookPageVo> getPage(Page<TextbookPageDto> page, TextbookPageDto dto) {
  138. return textbookTextbookMapper.getPage(page, dto);
  139. }
  140. @Override
  141. public Boolean dataHandle(Long dataId) {
  142. WfTextbookSubscription wfTextbookSubscription = iWfTextbookSubscriptionService.selectById(dataId);
  143. if(ObjectUtil.isNotNull(wfTextbookSubscription) && ObjectUtil.isNotNull(wfTextbookSubscription.getWfTextbookSubscriptionItemList()) && wfTextbookSubscription.getWfTextbookSubscriptionItemList().size() > 0){
  144. for (WfTextbookSubscriptionItem wfTextbookSubscriptionItem : wfTextbookSubscription.getWfTextbookSubscriptionItemList()) {
  145. String issn = wfTextbookSubscriptionItem.getIssn();
  146. Long semesterId = wfTextbookSubscription.getBaseSemesterId();
  147. Long subjectGroupId = wfTextbookSubscription.getSubjectGroupId();
  148. LambdaQueryWrapper<Textbook> queryWrapper = new LambdaQueryWrapper<>();
  149. queryWrapper
  150. .eq(Textbook::getIssn,issn)
  151. .eq(Textbook::getBaseSemesterId,semesterId)
  152. .eq(Textbook::getSubjectGroupId,subjectGroupId);
  153. Long count = this.count(queryWrapper);
  154. if(count <= 0){//该书不存在教材管理
  155. Textbook textbook = new Textbook();
  156. textbook.setIssn(wfTextbookSubscriptionItem.getIssn());
  157. textbook.setIsbn(wfTextbookSubscriptionItem.getIsbn());
  158. textbook.setBookName(wfTextbookSubscriptionItem.getBookName());
  159. textbook.setPublishingHouse(wfTextbookSubscriptionItem.getPublishingHouse());
  160. textbook.setEditorInChief(wfTextbookSubscriptionItem.getEditorInChief());
  161. textbook.setSubjectGroupId(wfTextbookSubscription.getSubjectGroupId());
  162. textbook.setBaseSemesterId(wfTextbookSubscription.getBaseSemesterId());
  163. textbook.setCourseSubjectId(wfTextbookSubscriptionItem.getCourseSubjectId());
  164. textbook.setVersion(wfTextbookSubscriptionItem.getVersion());
  165. textbook.setIsTextbookPlan(wfTextbookSubscriptionItem.getIsTextbookPlan());
  166. textbook.setTextbookType(wfTextbookSubscriptionItem.getSubscriptionType());
  167. textbook.setAppraisalPrice(wfTextbookSubscriptionItem.getAppraisalPrice());
  168. textbookTextbookMapper.insert(textbook);
  169. if(ObjectUtil.isNotNull(wfTextbookSubscriptionItem.getClassIds()) && !wfTextbookSubscriptionItem.getClassIds().equals("")){
  170. String classIds = wfTextbookSubscriptionItem.getClassIds();
  171. //查询年级
  172. LambdaQueryWrapper<BaseClass> queryWrapper1 = new LambdaQueryWrapper<>();
  173. queryWrapper1
  174. .in(BaseClass::getId,classIds)
  175. .groupBy(BaseClass::getGradeId);
  176. List<BaseClass> baseClassList = baseClassService.list(queryWrapper1);
  177. if(ObjectUtil.isNotNull(baseClassList) && baseClassList.size() == 1){
  178. textbook.setGradeId(baseClassList.get(0).getGradeId());
  179. }
  180. String[] classIdStrs = classIds.split(",");
  181. for (String classIdStr : classIdStrs) {
  182. Long classId = Long.parseLong(classIdStr);
  183. TextbookClassRelation textbookClassRelation = new TextbookClassRelation();
  184. textbookClassRelation.setTextbookId(textbook.getId());
  185. textbookClassRelation.setClassId(classId);
  186. textbookTextbookClassRelationMapper.insert(textbookClassRelation);
  187. }
  188. }
  189. TextbookSubscriptionRecord textbookSubscriptionRecord = new TextbookSubscriptionRecord();
  190. textbookSubscriptionRecord.setWfTextbookSubscriptionId(textbook.getId());
  191. textbookSubscriptionRecord.setWfTextbookSubscriptionId(wfTextbookSubscription.getId());
  192. textbookTextbookSubscriptionRecordMapper.insert(textbookSubscriptionRecord);
  193. }
  194. }
  195. }
  196. return true;
  197. }
  198. @Override
  199. public List<TextbookSubscriptionRecordVo> subscriptionList(Long id) {
  200. List<TextbookSubscriptionRecordVo> recordVos = textbookTextbookMapper.subscriptionList(id);
  201. for (TextbookSubscriptionRecordVo recordVo : recordVos) {
  202. if(ObjectUtil.isNull(recordVo) || StrUtil.isEmpty(recordVo.getClassIds())){
  203. continue;
  204. }
  205. String[] split = recordVo.getClassIds().split(",");
  206. List<String> ids = new ArrayList<>();
  207. for (String classId : split) {
  208. ids.add(classId.trim());
  209. }
  210. List<TextbookSubscriptionClassVo> classInfo = textbookTextbookMapper.getClassInfo(ids);
  211. String useClass = "";
  212. for (int i = 0; i < classInfo.size(); i ++){
  213. if(i >= 1){
  214. useClass += ",";
  215. }
  216. TextbookSubscriptionClassVo classVo = classInfo.get(i);
  217. useClass += classVo.getName();
  218. }
  219. recordVo.setUseClass(useClass);
  220. }
  221. return recordVos;
  222. }
  223. @Override
  224. public TextbookVo getInfoByissn(String issn) {
  225. return textbookTextbookMapper.getInfoByissn(issn);
  226. }
  227. @Override
  228. public List<TextbookClassWarehouseListVo> warehouseList(Long id) {
  229. List<TextbookClassWarehouseListVo> result = textbookTextbookMapper.warehouseList(id);
  230. if(!result.isEmpty()){
  231. return result;
  232. }
  233. return new ArrayList<>();
  234. }
  235. @Override
  236. public List<TextbookClassRelation> getClassRelation(Long id) {
  237. List<TextbookClassRelation> classRelation = textbookTextbookMapper.getClassRelation(id);
  238. if(!classRelation.isEmpty()){
  239. return classRelation;
  240. }
  241. return new ArrayList<>();
  242. }
  243. @Override
  244. public List<TextbookIssueRecordListVo> issueList(Long id) {
  245. List<TextbookIssueRecordListVo> result = textbookTextbookMapper.issueList(id);
  246. if(!result.isEmpty()){
  247. return result;
  248. }
  249. return new ArrayList<>();
  250. }
  251. }