TextbookServiceImpl.java 16 KB

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