TextbookServiceImpl.java 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439
  1. package com.xjrsoft.module.textbook.service.impl;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import cn.hutool.core.util.ObjectUtil;
  4. import cn.hutool.core.util.StrUtil;
  5. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  6. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  7. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  8. import com.github.yulichang.base.MPJBaseServiceImpl;
  9. import com.xjrsoft.common.enums.SubscriptionTypeEnum;
  10. import com.xjrsoft.common.enums.TextbookTypeEnum;
  11. import com.xjrsoft.common.enums.WarehouseModeEnum;
  12. import com.xjrsoft.common.exception.MyException;
  13. import com.xjrsoft.module.base.entity.BaseClass;
  14. import com.xjrsoft.module.base.service.IBaseClassService;
  15. import com.xjrsoft.module.textbook.dto.AddTextbookWarehouseRecordDto;
  16. import com.xjrsoft.module.textbook.dto.TextbookPageDto;
  17. import com.xjrsoft.module.textbook.entity.*;
  18. import com.xjrsoft.module.textbook.mapper.TextbookClassRelationMapper;
  19. import com.xjrsoft.module.textbook.mapper.TextbookMapper;
  20. import com.xjrsoft.module.textbook.mapper.TextbookSubscriptionRecordMapper;
  21. import com.xjrsoft.module.textbook.service.ITextbookClassWarehouseService;
  22. import com.xjrsoft.module.textbook.service.ITextbookService;
  23. import com.xjrsoft.module.textbook.service.IWfExerciseBookService;
  24. import com.xjrsoft.module.textbook.service.IWfTextbookSubscriptionService;
  25. import com.xjrsoft.module.textbook.vo.*;
  26. import lombok.AllArgsConstructor;
  27. import org.springframework.stereotype.Service;
  28. import org.springframework.transaction.annotation.Transactional;
  29. import java.util.ArrayList;
  30. import java.util.List;
  31. import java.util.Objects;
  32. import java.util.stream.Collectors;
  33. /**
  34. * @title: 教材管理
  35. * @Author szs
  36. * @Date: 2023-12-25
  37. * @Version 1.0
  38. */
  39. @Service
  40. @AllArgsConstructor
  41. public class TextbookServiceImpl extends MPJBaseServiceImpl<TextbookMapper, Textbook> implements ITextbookService {
  42. private final TextbookMapper textbookTextbookMapper;
  43. private final TextbookClassRelationMapper textbookTextbookClassRelationMapper;
  44. private final TextbookSubscriptionRecordMapper textbookTextbookSubscriptionRecordMapper;
  45. private final IWfTextbookSubscriptionService iWfTextbookSubscriptionService;
  46. private final IWfExerciseBookService wfExerciseBookService;
  47. private final IBaseClassService baseClassService;
  48. private final ITextbookClassWarehouseService textbookClassWarehouseService;
  49. @Override
  50. @Transactional(rollbackFor = Exception.class)
  51. public Boolean add(Textbook textbook) {
  52. textbookTextbookMapper.insert(textbook);
  53. for (TextbookClassRelation textbookClassRelation : textbook.getTextbookClassRelationList()) {
  54. textbookClassRelation.setTextbookId(textbook.getId());
  55. textbookTextbookClassRelationMapper.insert(textbookClassRelation);
  56. }
  57. if (textbook.getTextbookSubscriptionRecordList() != null) {
  58. for (TextbookSubscriptionRecord textbookSubscriptionRecord : textbook.getTextbookSubscriptionRecordList()) {
  59. textbookSubscriptionRecord.setWfTextbookSubscriptionId(textbook.getId());
  60. textbookTextbookSubscriptionRecordMapper.insert(textbookSubscriptionRecord);
  61. }
  62. }
  63. return true;
  64. }
  65. @Override
  66. @Transactional(rollbackFor = Exception.class)
  67. public Boolean update(Textbook textbook) {
  68. textbookTextbookMapper.updateById(textbook);
  69. //********************************* TextbookClassRelation 增删改 开始 *******************************************/
  70. {
  71. // 查出所有子级的id
  72. List<TextbookClassRelation> textbookClassRelationList = textbookTextbookClassRelationMapper.selectList(Wrappers.lambdaQuery(TextbookClassRelation.class).eq(TextbookClassRelation::getTextbookId, textbook.getId()).select(TextbookClassRelation::getId));
  73. List<Long> textbookClassRelationIds = textbookClassRelationList.stream().map(TextbookClassRelation::getId).collect(Collectors.toList());
  74. //原有子表单 没有被删除的主键
  75. List<Long> textbookClassRelationOldIds = textbook.getTextbookClassRelationList().stream().map(TextbookClassRelation::getId).filter(Objects::nonNull).collect(Collectors.toList());
  76. //找到需要删除的id
  77. List<Long> textbookClassRelationRemoveIds = textbookClassRelationIds.stream().filter(item -> !textbookClassRelationOldIds.contains(item)).collect(Collectors.toList());
  78. for (TextbookClassRelation textbookClassRelation : textbook.getTextbookClassRelationList()) {
  79. //如果不等于空则修改
  80. if (textbookClassRelation.getId() != null) {
  81. textbookTextbookClassRelationMapper.updateById(textbookClassRelation);
  82. }
  83. //如果等于空 则新增
  84. else {
  85. //已经不存在的id 删除
  86. textbookClassRelation.setTextbookId(textbook.getId());
  87. textbookTextbookClassRelationMapper.insert(textbookClassRelation);
  88. }
  89. }
  90. //已经不存在的id 删除
  91. if (textbookClassRelationRemoveIds.size() > 0) {
  92. textbookTextbookClassRelationMapper.deleteBatchIds(textbookClassRelationRemoveIds);
  93. }
  94. }
  95. //********************************* TextbookClassRelation 增删改 结束 *******************************************/
  96. //********************************* TextbookSubscriptionRecord 增删改 开始 *******************************************/
  97. {
  98. // 查出所有子级的id
  99. List<TextbookSubscriptionRecord> textbookSubscriptionRecordList = textbookTextbookSubscriptionRecordMapper.selectList(Wrappers.lambdaQuery(TextbookSubscriptionRecord.class).eq(TextbookSubscriptionRecord::getWfTextbookSubscriptionId, textbook.getId()).select(TextbookSubscriptionRecord::getId));
  100. List<Long> textbookSubscriptionRecordIds = textbookSubscriptionRecordList.stream().map(TextbookSubscriptionRecord::getId).collect(Collectors.toList());
  101. //原有子表单 没有被删除的主键
  102. if (!textbookSubscriptionRecordIds.isEmpty()) {
  103. List<Long> textbookSubscriptionRecordOldIds = textbook.getTextbookSubscriptionRecordList().stream().map(TextbookSubscriptionRecord::getId).filter(Objects::nonNull).collect(Collectors.toList());
  104. //找到需要删除的id
  105. List<Long> textbookSubscriptionRecordRemoveIds = textbookSubscriptionRecordIds.stream().filter(item -> !textbookSubscriptionRecordOldIds.contains(item)).collect(Collectors.toList());
  106. for (TextbookSubscriptionRecord textbookSubscriptionRecord : textbook.getTextbookSubscriptionRecordList()) {
  107. //如果不等于空则修改
  108. if (textbookSubscriptionRecord.getId() != null) {
  109. textbookTextbookSubscriptionRecordMapper.updateById(textbookSubscriptionRecord);
  110. }
  111. //如果等于空 则新增
  112. else {
  113. //已经不存在的id 删除
  114. textbookSubscriptionRecord.setWfTextbookSubscriptionId(textbook.getId());
  115. textbookTextbookSubscriptionRecordMapper.insert(textbookSubscriptionRecord);
  116. }
  117. }
  118. //已经不存在的id 删除
  119. if (textbookSubscriptionRecordRemoveIds.size() > 0) {
  120. textbookTextbookSubscriptionRecordMapper.deleteBatchIds(textbookSubscriptionRecordRemoveIds);
  121. }
  122. for (TextbookSubscriptionRecord textbookSubscriptionRecord : textbook.getTextbookSubscriptionRecordList()) {
  123. //如果不等于空则修改
  124. if (textbookSubscriptionRecord.getId() != null) {
  125. textbookTextbookSubscriptionRecordMapper.updateById(textbookSubscriptionRecord);
  126. }
  127. //如果等于空 则新增
  128. else {
  129. //已经不存在的id 删除
  130. textbookSubscriptionRecord.setWfTextbookSubscriptionId(textbook.getId());
  131. textbookTextbookSubscriptionRecordMapper.insert(textbookSubscriptionRecord);
  132. }
  133. }
  134. //已经不存在的id 删除
  135. if (textbookSubscriptionRecordRemoveIds.size() > 0) {
  136. textbookTextbookSubscriptionRecordMapper.deleteBatchIds(textbookSubscriptionRecordRemoveIds);
  137. }
  138. }
  139. //********************************* TextbookSubscriptionRecord 增删改 结束 *******************************************/
  140. return true;
  141. }
  142. }
  143. @Override
  144. @Transactional(rollbackFor = Exception.class)
  145. public Boolean delete(List<Long> ids) {
  146. textbookTextbookMapper.deleteBatchIds(ids);
  147. textbookTextbookClassRelationMapper.delete(Wrappers.lambdaQuery(TextbookClassRelation.class).in(TextbookClassRelation::getTextbookId, ids));
  148. textbookTextbookSubscriptionRecordMapper.delete(Wrappers.lambdaQuery(TextbookSubscriptionRecord.class).in(TextbookSubscriptionRecord::getWfTextbookSubscriptionId, ids));
  149. return true;
  150. }
  151. @Override
  152. public Page<TextbookPageVo> getPage(Page<TextbookPageDto> page, TextbookPageDto dto) {
  153. Page<TextbookPageVo> result = textbookTextbookMapper.getPage(page, dto);
  154. return result;
  155. }
  156. @Override
  157. @Transactional
  158. public Boolean dataHandleAddTextbookNode(Long dataId) {
  159. WfTextbookSubscription wfTextbookSubscription = iWfTextbookSubscriptionService.selectById(dataId);
  160. if (ObjectUtil.isNotNull(wfTextbookSubscription) && ObjectUtil.isNotNull(wfTextbookSubscription.getWfTextbookSubscriptionItemList()) && wfTextbookSubscription.getWfTextbookSubscriptionItemList().size() > 0) {
  161. for (WfTextbookSubscriptionItem wfTextbookSubscriptionItem : wfTextbookSubscription.getWfTextbookSubscriptionItemList()) {
  162. Long semesterId = wfTextbookSubscription.getBaseSemesterId();
  163. String issn = wfTextbookSubscriptionItem.getIssn();
  164. LambdaQueryWrapper<Textbook> queryWrapper = new LambdaQueryWrapper<>();
  165. queryWrapper
  166. .eq(Textbook::getIssn, issn)
  167. .eq(Textbook::getBaseSemesterId, semesterId);
  168. List<Textbook> textbookList = this.list(queryWrapper);
  169. //征订的教材没有在教材管理
  170. if (ObjectUtil.isNull(textbookList) || textbookList.size() <= 0) {//该书不存在于教材管理
  171. Textbook textbook = new Textbook() {{
  172. setIssn(wfTextbookSubscriptionItem.getIssn());
  173. setIsbn(wfTextbookSubscriptionItem.getIsbn());
  174. setBookName(wfTextbookSubscriptionItem.getBookName());
  175. setPublishingHouse(wfTextbookSubscriptionItem.getPublishingHouse());
  176. setEditorInChief(wfTextbookSubscriptionItem.getEditorInChief());
  177. setSubjectGroupId(wfTextbookSubscription.getSubjectGroupId());
  178. setBaseSemesterId(wfTextbookSubscription.getBaseSemesterId());
  179. setCourseSubjectId(wfTextbookSubscriptionItem.getCourseSubjectId());
  180. setVersion(wfTextbookSubscriptionItem.getVersion());
  181. setIsTextbookPlan(wfTextbookSubscriptionItem.getIsTextbookPlan());
  182. if (ObjectUtil.isNotNull(wfTextbookSubscriptionItem.getSubscriptionType()) && wfTextbookSubscriptionItem.getSubscriptionType().equals(SubscriptionTypeEnum.STextbook.getCode())) {
  183. setTextbookType(TextbookTypeEnum.TTextbook.getCode());
  184. }
  185. if (ObjectUtil.isNotNull(wfTextbookSubscriptionItem.getSubscriptionType()) && wfTextbookSubscriptionItem.getSubscriptionType().equals(SubscriptionTypeEnum.SMaterials.getCode())) {
  186. setTextbookType(TextbookTypeEnum.TMaterials.getCode());
  187. }
  188. setAppraisalPrice(wfTextbookSubscriptionItem.getAppraisalPrice());
  189. }};
  190. //班级不为空
  191. if (ObjectUtil.isNotNull(wfTextbookSubscriptionItem.getClassIds()) && !wfTextbookSubscriptionItem.getClassIds().equals("")) {
  192. //将班级ids转换为List
  193. String classIds = wfTextbookSubscriptionItem.getClassIds();
  194. String[] classIdStrs = classIds.split(",");
  195. List<Long> classIdList = new ArrayList<>();
  196. for (String classIdStr : classIdStrs) {
  197. classIdList.add(Long.parseLong(classIdStr));
  198. }
  199. //查询年级,如果添加的班级只存在一个年级,添加年级字段值
  200. LambdaQueryWrapper<BaseClass> queryWrapper1 = new LambdaQueryWrapper<>();
  201. queryWrapper1
  202. .in(BaseClass::getId, classIdList)
  203. .groupBy(BaseClass::getGradeId);
  204. List<BaseClass> baseClassList = baseClassService.list(queryWrapper1);
  205. if (ObjectUtil.isNotNull(baseClassList) && baseClassList.size() == 1) {
  206. textbook.setGradeId(baseClassList.get(0).getGradeId());
  207. }
  208. //插入教材数据
  209. textbookTextbookMapper.insert(textbook);
  210. //插入班级和教材关系
  211. for (Long classId : classIdList) {
  212. textbookTextbookClassRelationMapper.insert(new TextbookClassRelation() {{
  213. setTextbookId(textbook.getId());
  214. setClassId(classId);
  215. }});
  216. }
  217. }
  218. //添加教材征订记录
  219. textbookTextbookSubscriptionRecordMapper.insert(new TextbookSubscriptionRecord() {{
  220. setTextbookId(textbook.getId());
  221. setWfTextbookSubscriptionId(wfTextbookSubscription.getId());
  222. }});
  223. } else {
  224. //征订的教材在教材管理,进行班级的和记录的管理
  225. Textbook textbook = textbookList.get(0);
  226. //班级不为空
  227. if (ObjectUtil.isNotNull(wfTextbookSubscriptionItem.getClassIds()) && !wfTextbookSubscriptionItem.getClassIds().equals("")) {
  228. //将班级ids转换为List
  229. String classIds = wfTextbookSubscriptionItem.getClassIds();
  230. String[] classIdStrs = classIds.split(",");
  231. for (String classIdStr : classIdStrs) {
  232. textbookTextbookClassRelationMapper.insert(new TextbookClassRelation() {{
  233. setTextbookId(textbook.getId());
  234. setClassId(Long.parseLong(classIdStr));
  235. }});
  236. }
  237. }
  238. //添加教材征订记录
  239. textbookTextbookSubscriptionRecordMapper.insert(new TextbookSubscriptionRecord() {{
  240. setTextbookId(textbook.getId());
  241. setWfTextbookSubscriptionId(wfTextbookSubscription.getId());
  242. }});
  243. }
  244. }
  245. }
  246. return true;
  247. }
  248. /**
  249. * 添加作业本规则
  250. *
  251. * @param dataId
  252. * @return
  253. */
  254. @Override
  255. public Boolean dataHandleAddExerciseBookNode(Long dataId) {
  256. WfExerciseBook wfExerciseBook = wfExerciseBookService.selectById(dataId);
  257. if (ObjectUtil.isNotNull(wfExerciseBook) && ObjectUtil.isNotNull(wfExerciseBook.getWfExerciseBookItemList()) && wfExerciseBook.getWfExerciseBookItemList().size() > 0) {
  258. for (WfExerciseBookItem wfExerciseBookItem : wfExerciseBook.getWfExerciseBookItemList()) {
  259. Long semesterId = wfExerciseBook.getBaseSemesterId();
  260. String bookName = wfExerciseBookItem.getSubscriptionType();//作业本的选择类型对应教材管理的书名
  261. LambdaQueryWrapper<Textbook> queryWrapper = new LambdaQueryWrapper<>();
  262. queryWrapper
  263. .eq(Textbook::getBookName, bookName)
  264. .eq(Textbook::getBaseSemesterId, semesterId);
  265. List<Textbook> textbookList = this.list(queryWrapper);
  266. //征订的作业本没有在教材管理
  267. if (ObjectUtil.isNull(textbookList) || textbookList.size() <= 0) {
  268. Textbook textbook = new Textbook() {{
  269. setBaseSemesterId(wfExerciseBook.getBaseSemesterId());
  270. setBookName(wfExerciseBookItem.getSubscriptionType());
  271. setTextbookType(TextbookTypeEnum.TExerciseBook.getCode());
  272. //年级id
  273. LambdaQueryWrapper<BaseClass> queryWrapper1 = new LambdaQueryWrapper<>();
  274. queryWrapper1
  275. .eq(BaseClass::getId, wfExerciseBook.getClassId());
  276. BaseClass baseClass = baseClassService.getOne(queryWrapper1);
  277. setGradeId(baseClass.getGradeId());
  278. setAppraisalPrice(wfExerciseBookItem.getAppraisalPrice());
  279. }};
  280. //插入教材数据
  281. textbookTextbookMapper.insert(textbook);
  282. //插入班级和教材关系
  283. textbookTextbookClassRelationMapper.insert(new TextbookClassRelation() {{
  284. setTextbookId(textbook.getId());
  285. setClassId(wfExerciseBook.getClassId());
  286. }});
  287. //添加教材征订记录
  288. textbookTextbookSubscriptionRecordMapper.insert(new TextbookSubscriptionRecord() {{
  289. setTextbookId(textbook.getId());
  290. setWfTextbookSubscriptionId(wfExerciseBook.getId());
  291. }});
  292. } else {
  293. //征订的教材在教材管理,进行班级的和记录的管理
  294. Textbook textbook = textbookList.get(0);
  295. //班级不为空
  296. if (ObjectUtil.isNotNull(wfExerciseBook.getClassId()) && !wfExerciseBook.getClassId().equals("")) {
  297. textbookTextbookClassRelationMapper.insert(new TextbookClassRelation() {{
  298. setTextbookId(textbook.getId());
  299. setClassId(wfExerciseBook.getClassId());
  300. }});
  301. }
  302. //添加教材征订记录
  303. textbookTextbookSubscriptionRecordMapper.insert(new TextbookSubscriptionRecord() {{
  304. setTextbookId(textbook.getId());
  305. setWfTextbookSubscriptionId(wfExerciseBook.getId());
  306. }});
  307. }
  308. }
  309. }
  310. return true;
  311. }
  312. @Override
  313. public List<TextbookSubscriptionRecordVo> subscriptionList(Long id) {
  314. List<TextbookSubscriptionRecordVo> recordVos = textbookTextbookMapper.subscriptionList(id);
  315. for (TextbookSubscriptionRecordVo recordVo : recordVos) {
  316. if (ObjectUtil.isNull(recordVo) || StrUtil.isEmpty(recordVo.getClassIds())) {
  317. continue;
  318. }
  319. String[] split = recordVo.getClassIds().split(",");
  320. List<String> ids = new ArrayList<>();
  321. for (String classId : split) {
  322. ids.add(classId.trim());
  323. }
  324. List<TextbookSubscriptionClassVo> classInfo = textbookTextbookMapper.getClassInfo(ids);
  325. String useClass = "";
  326. for (int i = 0; i < classInfo.size(); i++) {
  327. if (i >= 1) {
  328. useClass += ",";
  329. }
  330. TextbookSubscriptionClassVo classVo = classInfo.get(i);
  331. useClass += classVo.getName();
  332. }
  333. recordVo.setUseClass(useClass);
  334. }
  335. return recordVos;
  336. }
  337. @Override
  338. public TextbookVo getInfoByissn(String issn) {
  339. return textbookTextbookMapper.getInfoByissn(issn);
  340. }
  341. @Override
  342. public List<TextbookWarehouseRecordListVo> warehouseList(Long id) {
  343. List<TextbookWarehouseRecordListVo> result = textbookTextbookMapper.warehouseList(id);
  344. if (!result.isEmpty()) {
  345. return result;
  346. }
  347. return new ArrayList<>();
  348. }
  349. @Override
  350. public List<TextbookClassRelation> getClassRelation(Long id) {
  351. List<TextbookClassRelation> classRelation = textbookTextbookMapper.getClassRelation(id);
  352. if (!classRelation.isEmpty()) {
  353. return classRelation;
  354. }
  355. return new ArrayList<>();
  356. }
  357. @Override
  358. public List<TextbookIssueRecordListVo> issueList(Long id) {
  359. List<TextbookIssueRecordListVo> result = textbookTextbookMapper.issueList(id);
  360. if (!result.isEmpty()) {
  361. return result;
  362. }
  363. return new ArrayList<>();
  364. }
  365. @Override
  366. public List<WfTextbookClaimListVo> claimList(Long id) {
  367. List<WfTextbookClaimListVo> result = textbookTextbookMapper.claimList(id);
  368. if (!result.isEmpty()) {
  369. return result;
  370. }
  371. return new ArrayList<>();
  372. }
  373. @Override
  374. @Transactional
  375. public Boolean deliverWarehouse(AddTextbookWarehouseRecordDto dto) {
  376. //根据id获取教材管理记录
  377. Textbook textbook = this.getById(dto.getTextbookId());
  378. if (ObjectUtil.isNull(textbook)) {
  379. throw new MyException("入库失败,该教材不存在");
  380. }
  381. //更新总的库存数量
  382. Textbook updateTextbook = new Textbook();
  383. updateTextbook.setId(dto.getTextbookId());
  384. Integer oldStock = ObjectUtil.isNull(textbook.getStock()) ? 0 : textbook.getStock();
  385. updateTextbook.setStock(oldStock + dto.getWarehouseNumber());
  386. boolean isSuccess = this.updateById(updateTextbook);
  387. TextbookWarehouseRecord textbookWarehouseRecord = BeanUtil.toBean(dto, TextbookWarehouseRecord.class);
  388. textbookWarehouseRecord.setWarehouseMode(WarehouseModeEnum.WmManual.getCode());
  389. isSuccess = textbookClassWarehouseService.save(textbookWarehouseRecord);
  390. return isSuccess;
  391. }
  392. }