WfTextbookSubscriptionServiceImpl.java 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464
  1. package com.xjrsoft.module.textbook.service.impl;
  2. import cn.dev33.satoken.stp.StpUtil;
  3. import cn.hutool.core.bean.BeanUtil;
  4. import com.alibaba.excel.EasyExcel;
  5. import com.alibaba.excel.read.listener.PageReadListener;
  6. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  7. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  8. import com.github.yulichang.base.MPJBaseServiceImpl;
  9. import com.github.yulichang.wrapper.MPJLambdaWrapper;
  10. import com.xjrsoft.common.enums.DeleteMark;
  11. import com.xjrsoft.common.enums.TextbookTypeEnum;
  12. import com.xjrsoft.common.exception.MyException;
  13. import com.xjrsoft.common.utils.VoToColumnUtil;
  14. import com.xjrsoft.module.base.entity.BaseClass;
  15. import com.xjrsoft.module.base.entity.BaseCourseSubject;
  16. import com.xjrsoft.module.base.mapper.BaseClassMapper;
  17. import com.xjrsoft.module.system.entity.DictionaryDetail;
  18. import com.xjrsoft.module.textbook.dto.*;
  19. import com.xjrsoft.module.textbook.entity.*;
  20. import com.xjrsoft.module.textbook.mapper.TextbookSubscriptionRecordMapper;
  21. import com.xjrsoft.module.textbook.mapper.WfTextbookSubscriptionItemHistoryMapper;
  22. import com.xjrsoft.module.textbook.mapper.WfTextbookSubscriptionItemMapper;
  23. import com.xjrsoft.module.textbook.mapper.WfTextbookSubscriptionMapper;
  24. import com.xjrsoft.module.textbook.service.ITextbookService;
  25. import com.xjrsoft.module.textbook.service.IWfTextbookSubscriptionService;
  26. import com.xjrsoft.module.textbook.vo.TextbookInstockroomListVo;
  27. import com.xjrsoft.module.textbook.vo.TextbookSubscriptionExportQueryListVo;
  28. import com.xjrsoft.module.textbook.vo.WfTextbookSubscriptionItemVo;
  29. import com.xjrsoft.module.textbook.vo.WfTextbookSubscriptionVo;
  30. import lombok.AllArgsConstructor;
  31. import org.springframework.beans.BeanUtils;
  32. import org.springframework.stereotype.Service;
  33. import org.springframework.transaction.annotation.Transactional;
  34. import java.io.InputStream;
  35. import java.util.*;
  36. import java.util.stream.Collectors;
  37. /**
  38. * @title: 教材教辅征订
  39. * @Author szs
  40. * @Date: 2024-06-04
  41. * @Version 1.0
  42. */
  43. @Service
  44. @AllArgsConstructor
  45. public class WfTextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<WfTextbookSubscriptionMapper, WfTextbookSubscription> implements IWfTextbookSubscriptionService {
  46. private final WfTextbookSubscriptionMapper wfTextbookSubscriptionWfTextbookSubscriptionMapper;
  47. private final WfTextbookSubscriptionItemMapper wfTextbookSubscriptionWfTextbookSubscriptionItemMapper;
  48. private final TextbookSubscriptionRecordMapper textbookTextbookSubscriptionRecordMapper;
  49. private final WfTextbookSubscriptionItemHistoryMapper wfTextbookSubscriptionItemHistoryMapper;
  50. private final ITextbookService textbookService;
  51. private final BaseClassMapper baseClassMapper;
  52. @Override
  53. @Transactional(rollbackFor = Exception.class)
  54. public Boolean add(WfTextbookSubscription wfTextbookSubscription) {
  55. wfTextbookSubscription.setApplicantUserId(StpUtil.getLoginIdAsLong());
  56. wfTextbookSubscription.setStatus(1);
  57. wfTextbookSubscription.setCreateDate(new Date());
  58. wfTextbookSubscriptionWfTextbookSubscriptionMapper.insert(wfTextbookSubscription);
  59. for (WfTextbookSubscriptionItem wfTextbookSubscriptionItem : wfTextbookSubscription.getWfTextbookSubscriptionItemList()) {
  60. wfTextbookSubscriptionItem.setWfTextbookSubscriptionId(wfTextbookSubscription.getId());
  61. wfTextbookSubscriptionItem.setCreateDate(new Date());
  62. wfTextbookSubscriptionWfTextbookSubscriptionItemMapper.insert(wfTextbookSubscriptionItem);
  63. }
  64. return true;
  65. }
  66. @Override
  67. @Transactional(rollbackFor = Exception.class)
  68. public Boolean update(WfTextbookSubscription wfTextbookSubscription) {
  69. wfTextbookSubscriptionWfTextbookSubscriptionMapper.updateById(wfTextbookSubscription);
  70. //********************************* WfTextbookSubscriptionItem 增删改 开始 *******************************************/
  71. {
  72. // 查出所有子级的id
  73. List<WfTextbookSubscriptionItem> wfTextbookSubscriptionItemList = wfTextbookSubscriptionWfTextbookSubscriptionItemMapper.selectList(Wrappers.lambdaQuery(WfTextbookSubscriptionItem.class).eq(WfTextbookSubscriptionItem::getWfTextbookSubscriptionId, wfTextbookSubscription.getId()).select(WfTextbookSubscriptionItem::getId));
  74. List<Long> wfTextbookSubscriptionItemIds = wfTextbookSubscriptionItemList.stream().map(WfTextbookSubscriptionItem::getId).collect(Collectors.toList());
  75. //原有子表单 没有被删除的主键
  76. List<Long> wfTextbookSubscriptionItemOldIds = wfTextbookSubscription.getWfTextbookSubscriptionItemList().stream().map(WfTextbookSubscriptionItem::getId).filter(Objects::nonNull).collect(Collectors.toList());
  77. //找到需要删除的id
  78. List<Long> wfTextbookSubscriptionItemRemoveIds = wfTextbookSubscriptionItemIds.stream().filter(item -> !wfTextbookSubscriptionItemOldIds.contains(item)).collect(Collectors.toList());
  79. for (WfTextbookSubscriptionItem wfTextbookSubscriptionItem : wfTextbookSubscription.getWfTextbookSubscriptionItemList()) {
  80. //如果不等于空则修改
  81. if (wfTextbookSubscriptionItem.getId() != null) {
  82. wfTextbookSubscriptionWfTextbookSubscriptionItemMapper.updateById(wfTextbookSubscriptionItem);
  83. }
  84. //如果等于空 则新增
  85. else {
  86. //已经不存在的id 删除
  87. wfTextbookSubscriptionItem.setWfTextbookSubscriptionId(wfTextbookSubscription.getId());
  88. wfTextbookSubscriptionWfTextbookSubscriptionItemMapper.insert(wfTextbookSubscriptionItem);
  89. }
  90. }
  91. //已经不存在的id 删除
  92. if (wfTextbookSubscriptionItemRemoveIds.size() > 0) {
  93. wfTextbookSubscriptionWfTextbookSubscriptionItemMapper.deleteBatchIds(wfTextbookSubscriptionItemRemoveIds);
  94. }
  95. }
  96. //********************************* WfTextbookSubscriptionItem 增删改 结束 *******************************************/
  97. return true;
  98. }
  99. @Override
  100. @Transactional(rollbackFor = Exception.class)
  101. public Boolean alteration(UpdateWfTextbookSubscriptionItemDto dto) {
  102. WfTextbookSubscriptionItem old = wfTextbookSubscriptionWfTextbookSubscriptionItemMapper.selectById(dto.getId());
  103. if(old == null){
  104. return false;
  105. }
  106. //将历史记录保存到历史变更记录表
  107. LambdaQueryWrapper<WfTextbookSubscriptionItemHistory> wfTextbookSubscriptionItemHistoryLambdaQueryWrapper = new LambdaQueryWrapper<>();
  108. wfTextbookSubscriptionItemHistoryLambdaQueryWrapper
  109. .eq(WfTextbookSubscriptionItemHistory::getWfTextbookSubscriptionItemId, old.getId())
  110. .orderByDesc(WfTextbookSubscriptionItemHistory::getHistoryVersion)
  111. .last("limit 1")
  112. ;
  113. WfTextbookSubscriptionItemHistory lastOne = wfTextbookSubscriptionItemHistoryMapper.selectOne(wfTextbookSubscriptionItemHistoryLambdaQueryWrapper);
  114. WfTextbookSubscriptionItemHistory wfTextbookSubscriptionItemHistory = new WfTextbookSubscriptionItemHistory();
  115. BeanUtils.copyProperties(old, wfTextbookSubscriptionItemHistory);
  116. wfTextbookSubscriptionItemHistory.setId(null);
  117. wfTextbookSubscriptionItemHistory.setWfTextbookSubscriptionItemId(old.getId());
  118. wfTextbookSubscriptionItemHistory.setCreateDate(new Date());
  119. wfTextbookSubscriptionItemHistory.setCreateUserId(StpUtil.getLoginIdAsLong());
  120. if(lastOne != null){
  121. wfTextbookSubscriptionItemHistory.setHistoryVersion(lastOne.getHistoryVersion() + 1);
  122. } else {
  123. wfTextbookSubscriptionItemHistory.setHistoryVersion(1);
  124. }
  125. wfTextbookSubscriptionItemHistoryMapper.insert(wfTextbookSubscriptionItemHistory);
  126. //变更当前记录
  127. WfTextbookSubscriptionItem updateItem = new WfTextbookSubscriptionItem();
  128. BeanUtils.copyProperties(dto, updateItem);
  129. wfTextbookSubscriptionWfTextbookSubscriptionItemMapper.updateById(updateItem);
  130. return true;
  131. }
  132. @Override
  133. @Transactional(rollbackFor = Exception.class)
  134. public Boolean delete(List<Long> ids) {
  135. wfTextbookSubscriptionWfTextbookSubscriptionMapper.deleteBatchIds(ids);
  136. wfTextbookSubscriptionWfTextbookSubscriptionItemMapper.delete(Wrappers.lambdaQuery(WfTextbookSubscriptionItem.class).in(WfTextbookSubscriptionItem::getWfTextbookSubscriptionId, ids));
  137. return true;
  138. }
  139. @Override
  140. @Transactional(rollbackFor = Exception.class)
  141. public Boolean changeStatus(UpdateWfTextbookSubscriptionDto dto) {
  142. WfTextbookSubscription wfTextbookSubscription = this.getById(dto.getId());
  143. if (wfTextbookSubscription == null) {
  144. return false;
  145. }
  146. //点击发起征订
  147. if (wfTextbookSubscription.getStatus() == 1 && dto.getStatus() == 2) {
  148. WfTextbookSubscription newW = BeanUtil.toBean(dto, WfTextbookSubscription.class);
  149. //添加征订记录
  150. List<WfTextbookSubscriptionItem> wfTextbookSubscriptionItemList = wfTextbookSubscriptionWfTextbookSubscriptionItemMapper.selectList(Wrappers.<WfTextbookSubscriptionItem>query().lambda().eq(WfTextbookSubscriptionItem::getWfTextbookSubscriptionId, wfTextbookSubscription.getId()));
  151. for (WfTextbookSubscriptionItem w : wfTextbookSubscriptionItemList) {
  152. textbookTextbookSubscriptionRecordMapper.insert(new TextbookSubscriptionRecord() {{
  153. setCreateDate(new Date());
  154. setTextbookId(w.getTextbookId());
  155. setWfTextbookSubscriptionId(wfTextbookSubscription.getId());
  156. setWfTextbookSubscriptionItemId(w.getId());//该字段存入征订项的id,征订项中有所属征订记录
  157. }});
  158. }
  159. return this.updateById(newW);
  160. }
  161. //点击完成征订
  162. if (wfTextbookSubscription.getStatus() == 2 && dto.getStatus() == 4) {
  163. WfTextbookSubscription newW = BeanUtil.toBean(dto, WfTextbookSubscription.class);
  164. return this.updateById(newW);
  165. }
  166. return false;
  167. }
  168. @Override
  169. public WfTextbookSubscriptionVo getInfo(Long id) {
  170. WfTextbookSubscription wfTextbookSubscription = this.getById(id);
  171. if (wfTextbookSubscription == null) {
  172. return null;
  173. }
  174. WfTextbookSubscriptionVo wfTextbookSubscriptionVo = BeanUtil.toBean(wfTextbookSubscription, WfTextbookSubscriptionVo.class);
  175. MPJLambdaWrapper<WfTextbookSubscriptionItem> mpjLambdaWrapper = new MPJLambdaWrapper<>();
  176. mpjLambdaWrapper
  177. .select(WfTextbookSubscriptionItem::getId)
  178. .selectAs(BaseCourseSubject::getName, WfTextbookSubscriptionItemVo::getCourseSubjectIdCn)
  179. .select(WfTextbookSubscriptionItem.class, x -> VoToColumnUtil.fieldsToColumns(WfTextbookSubscriptionItemVo.class).contains(x.getProperty()))
  180. .select(Textbook.class, x -> VoToColumnUtil.fieldsToColumns(WfTextbookSubscriptionItemVo.class).contains(x.getProperty()))
  181. .leftJoin(Textbook.class, Textbook::getId, WfTextbookSubscriptionItem::getTextbookId)
  182. .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, Textbook::getTextbookType,
  183. ext -> ext.selectAs(DictionaryDetail::getName, WfTextbookSubscriptionItemVo::getTextbookTypeCn))
  184. .leftJoin(BaseCourseSubject.class, BaseCourseSubject::getId, Textbook::getCourseSubjectId)
  185. .eq(WfTextbookSubscriptionItem::getWfTextbookSubscriptionId, wfTextbookSubscription.getId())
  186. ;
  187. List<WfTextbookSubscriptionItemVo> itemList = wfTextbookSubscriptionWfTextbookSubscriptionItemMapper.selectJoinList(WfTextbookSubscriptionItemVo.class, mpjLambdaWrapper);
  188. //处理班级
  189. String classIds = "";
  190. List<String> classIdList = new ArrayList<>();
  191. StringBuilder sb = new StringBuilder();
  192. if (!itemList.isEmpty() && itemList.get(0).getClassIds() != null && !itemList.get(0).getClassIds().equals("")) {
  193. classIds = itemList.get(0).getClassIds();
  194. String[] classIdArr = classIds.split(",");
  195. classIdList = Arrays.asList(classIdArr);
  196. if (!classIdList.isEmpty()) {
  197. List<BaseClass> baseClassList = baseClassMapper.selectList(Wrappers.<BaseClass>query().lambda().in(BaseClass::getId, classIdList));
  198. Map<Long, BaseClass> baseClassMap = baseClassList.stream()
  199. .collect(Collectors.toMap(BaseClass::getId, baseClass -> baseClass));
  200. for (String classId : classIdList) {
  201. BaseClass baseClass = baseClassMap.get(Long.parseLong(classId));
  202. if (baseClass != null) {
  203. sb.append(baseClass.getName());
  204. sb.append(",");
  205. }
  206. }
  207. sb.deleteCharAt(sb.length() - 1);
  208. }
  209. }
  210. //遍历处理所有项
  211. int stuSum = 0;
  212. int teaSum = 0;
  213. for (WfTextbookSubscriptionItemVo w : itemList) {
  214. if (!classIdList.isEmpty()) {
  215. w.setClassNum(classIdList.size());
  216. }
  217. if (w.getStudentSubscriptionNumber() != null) {
  218. stuSum += w.getStudentSubscriptionNumber();
  219. }
  220. if (w.getTeacherSubscriptionNumber() != null) {
  221. teaSum += w.getTeacherSubscriptionNumber();
  222. }
  223. }
  224. wfTextbookSubscriptionVo.setClassIdsCn(sb.toString());
  225. wfTextbookSubscriptionVo.setClassIds(classIds);
  226. wfTextbookSubscriptionVo.setStudentSubscriptionNumberSum(stuSum);
  227. wfTextbookSubscriptionVo.setTeacherSubscriptionNumberSum(teaSum);
  228. wfTextbookSubscriptionVo.setSum(stuSum + teaSum);
  229. wfTextbookSubscriptionVo.setWfTextbookSubscriptionItemList(itemList);
  230. return wfTextbookSubscriptionVo;
  231. }
  232. @Override
  233. public List<TextbookSubscriptionExportQueryListVo> textbookSubscriptionExportQuery(TextbookSubscriptionExportQueryListDto dto) {
  234. WfTextbookSubscription wfTextbookSubscription = this.getById(dto.getWfTextbookSubscriptionId());
  235. if (wfTextbookSubscription == null) {
  236. return null;
  237. }
  238. MPJLambdaWrapper<WfTextbookSubscriptionItem> mpjLambdaWrapper = new MPJLambdaWrapper<>();
  239. mpjLambdaWrapper
  240. .selectAs(BaseCourseSubject::getName, TextbookSubscriptionExportQueryListVo::getCourseName)
  241. .select(WfTextbookSubscriptionItem.class, x -> VoToColumnUtil.fieldsToColumns(TextbookSubscriptionExportQueryListVo.class).contains(x.getProperty()))
  242. .select(Textbook.class, x -> VoToColumnUtil.fieldsToColumns(TextbookSubscriptionExportQueryListVo.class).contains(x.getProperty()))
  243. .leftJoin(Textbook.class, Textbook::getId, WfTextbookSubscriptionItem::getTextbookId)
  244. .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, Textbook::getTextbookType,
  245. ext -> ext.selectAs(DictionaryDetail::getName, TextbookSubscriptionExportQueryListVo::getTextbookTypeCn))
  246. .leftJoin(BaseCourseSubject.class, BaseCourseSubject::getId, Textbook::getCourseSubjectId)
  247. .eq(WfTextbookSubscriptionItem::getWfTextbookSubscriptionId, wfTextbookSubscription.getId())
  248. ;
  249. List<TextbookSubscriptionExportQueryListVo> itemList = wfTextbookSubscriptionWfTextbookSubscriptionItemMapper.selectJoinList(TextbookSubscriptionExportQueryListVo.class, mpjLambdaWrapper);
  250. //处理班级
  251. String classIds = "";
  252. List<String> classIdList = new ArrayList<>();
  253. StringBuilder sb = new StringBuilder();
  254. if (!itemList.isEmpty() && itemList.get(0).getClassIds() != null && !itemList.get(0).getClassIds().equals("")) {
  255. classIds = itemList.get(0).getClassIds();
  256. String[] classIdArr = classIds.split(",");
  257. classIdList = Arrays.asList(classIdArr);
  258. /*if(!classIdList.isEmpty()){
  259. List<BaseClass> baseClassList = baseClassMapper.selectList(Wrappers.<BaseClass>query().lambda().in(BaseClass::getId, classIdList));
  260. Map<Long, BaseClass> baseClassMap = baseClassList.stream()
  261. .collect(Collectors.toMap(BaseClass::getId, baseClass -> baseClass));
  262. for (String classId : classIdList){
  263. BaseClass baseClass = baseClassMap.get(Long.parseLong(classId));
  264. if(baseClass != null){
  265. sb.append(baseClass.getName());
  266. sb.append(",");
  267. }
  268. }
  269. sb.deleteCharAt(sb.length() - 1);
  270. }*/
  271. }
  272. for (TextbookSubscriptionExportQueryListVo w : itemList) {
  273. w.setClassNum(classIdList.size());
  274. }
  275. return itemList;
  276. }
  277. @Override
  278. public List<TextbookInstockroomListVo> instockroomList(TextbookInstockroomListDto dto) {
  279. MPJLambdaWrapper<WfTextbookSubscriptionItem> queryWrapper = new MPJLambdaWrapper<>();
  280. queryWrapper
  281. .select(WfTextbookSubscriptionItem::getId)
  282. .selectAs(BaseCourseSubject::getName, TextbookInstockroomListVo::getCourseName)
  283. .selectAs(DictionaryDetail::getName, TextbookInstockroomListVo::getTextbookTypeCn)
  284. .select("(t.student_subscription_number + t.teacher_subscription_number) as subscriptionNumber")
  285. .select(Textbook.class, x -> VoToColumnUtil.fieldsToColumns(TextbookInstockroomListVo.class).contains(x.getProperty()))
  286. .select(WfTextbookSubscriptionItem.class, x -> VoToColumnUtil.fieldsToColumns(TextbookInstockroomListVo.class).contains(x.getProperty()))
  287. .leftJoin(Textbook.class, Textbook::getId, WfTextbookSubscriptionItem::getTextbookId)
  288. .leftJoin(BaseCourseSubject.class, BaseCourseSubject::getId, Textbook::getCourseSubjectId)
  289. .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, Textbook::getTextbookType)
  290. .eq(WfTextbookSubscriptionItem::getWfTextbookSubscriptionId, dto.getWfTextbookSubscriptionId())
  291. .orderByAsc(WfTextbookSubscriptionItem::getInStockroomNum)
  292. ;
  293. return wfTextbookSubscriptionWfTextbookSubscriptionItemMapper.selectJoinList(TextbookInstockroomListVo.class, queryWrapper);
  294. }
  295. @Override
  296. @Transactional(rollbackFor = Exception.class)
  297. public Boolean instockroom(List<TextbookInstockroomDto> dtos) {
  298. if (dtos.isEmpty()) {
  299. return false;
  300. }
  301. //获取需要修改的list
  302. LambdaQueryWrapper<WfTextbookSubscriptionItem> queryWrapper = new LambdaQueryWrapper<>();
  303. queryWrapper
  304. .eq(WfTextbookSubscriptionItem::getWfTextbookSubscriptionId, dtos.get(0).getWfTextbookSubscriptionId())
  305. .eq(WfTextbookSubscriptionItem::getDeleteMark, DeleteMark.NODELETE.getCode())
  306. ;
  307. List<WfTextbookSubscriptionItem> wfTextbookSubscriptionItemList = wfTextbookSubscriptionWfTextbookSubscriptionItemMapper.selectList(queryWrapper);
  308. if (wfTextbookSubscriptionItemList.isEmpty()) {
  309. return false;
  310. }
  311. Map<Long, WfTextbookSubscriptionItem> itemMap = wfTextbookSubscriptionItemList
  312. .stream()
  313. .collect(Collectors.toMap(
  314. WfTextbookSubscriptionItem::getId,
  315. item -> item
  316. ));
  317. Date now = new Date();
  318. Long loginId = StpUtil.getLoginIdAsLong();
  319. for (TextbookInstockroomDto dto : dtos) {
  320. WfTextbookSubscriptionItem old = itemMap.get(dto.getId());
  321. WfTextbookSubscriptionItem updateItem = new WfTextbookSubscriptionItem();
  322. updateItem.setId(old.getId());
  323. updateItem.setInStockroomNum(old.getInStockroomNum() + dto.getInNum());
  324. updateItem.setModifyDate(now);
  325. updateItem.setModifyUserId(loginId);
  326. wfTextbookSubscriptionWfTextbookSubscriptionItemMapper.updateById(updateItem);
  327. //新增入库记录
  328. textbookService.deliverWarehouse(new AddTextbookWarehouseRecordDto() {{
  329. setTextbookId(old.getTextbookId());
  330. setWarehouseNumber(dto.getInNum());
  331. setSource("wm_manual");
  332. }});
  333. }
  334. return true;
  335. }
  336. @Override
  337. public Boolean excelImport(InputStream inputStream) {
  338. EasyExcel.read(inputStream, TextbookImportDto.class, new PageReadListener<TextbookImportDto>(dataList -> {
  339. if (dataList.isEmpty()) {
  340. throw new MyException("导入数据为空");
  341. }
  342. saveData(dataList);
  343. })).sheet().headRowNumber(3).doRead();
  344. return true;
  345. }
  346. private void saveData(List<TextbookImportDto> dataList) {
  347. /*//查询所有需要的数据
  348. //学科组
  349. List<SubjectGroup> subjectGroupList = subjectGroupMapper.selectList(new LambdaQueryWrapper<>());
  350. Map<String, Long> subjectGroupNameAndIdMap = subjectGroupList.stream().collect(Collectors.toMap(SubjectGroup::getGroupName, SubjectGroup::getId, (k1, k2) -> k1));
  351. //使用课程
  352. List<BaseCourseSubject> baseCourseSubjectList = baseCourseSubjectMapper.selectList(new LambdaQueryWrapper<>());
  353. Map<String, Long> baseCourseSubjectNameAndIdMap = baseCourseSubjectList.stream().collect(Collectors.toMap(BaseCourseSubject::getName, BaseCourseSubject::getId, (k1, k2) -> k1));
  354. //批量插入或更新数据
  355. for (TextbookImportDto textbookImportDto : dataList) {
  356. TextbookCoreAttribute textbookCoreAttribute = new TextbookCoreAttribute();
  357. BeanUtils.copyProperties(textbookImportDto, textbookCoreAttribute);
  358. Textbook textbook = new Textbook();
  359. BeanUtils.copyProperties(textbookImportDto, textbook);
  360. // 处理学科组映射
  361. String groupName = textbookImportDto.getGroupName();
  362. Long subjectGroupId = Optional.ofNullable(groupName)
  363. .map(subjectGroupNameAndIdMap::get)
  364. .orElse(null);
  365. textbook.setSubjectGroupId(subjectGroupId);
  366. // 处理课程映射
  367. String courseName = textbookImportDto.getCourseName();
  368. Long courseSubjectId = Optional.ofNullable(courseName)
  369. .map(baseCourseSubjectNameAndIdMap::get)
  370. .orElse(null);
  371. textbook.setCourseSubjectId(courseSubjectId);
  372. // 处理是否教材计划字段
  373. String isTextbookPlanCn = textbookImportDto.getIsTextbookPlanCn();
  374. String isTextbookPlan = Optional.ofNullable(isTextbookPlanCn)
  375. .filter("是"::equals)
  376. .map(s -> "yes")
  377. .orElse("no");
  378. textbook.setIsTextbookPlan(isTextbookPlan);
  379. // 处理教材类型映射
  380. String textbookTypeCn = textbookImportDto.getTextbookTypeCn();
  381. String textbookTypeCode = Optional.ofNullable(textbookTypeCn)
  382. .map(TextbookTypeEnum::getCode)
  383. .orElse(null);
  384. textbook.setTextbookType(textbookTypeCode);
  385. // 判断导入的教材是否已经存在,根据教材的 ISBN 码和使用的学期判断
  386. LambdaQueryWrapper<Textbook> textbookLambdaQueryWrapper = new LambdaQueryWrapper<>();
  387. textbookLambdaQueryWrapper
  388. .eq(Textbook::getIssn, textbook.getIssn())
  389. ;
  390. Textbook oldTextbook = this.getOne(textbookLambdaQueryWrapper);
  391. // 已经存在,更新数据
  392. if (oldTextbook != null) {
  393. // 更新教材数据
  394. textbook.setId(oldTextbook.getId());
  395. textbookTextbookMapper.updateById(textbook);
  396. } else {
  397. textbookCoreAttributeService.save(textbookCoreAttribute);
  398. textbook.setTextbookCoreAttributeId(textbookCoreAttribute.getId());
  399. // 插入教材数据
  400. textbookTextbookMapper.insert(textbook);
  401. }
  402. }*/
  403. }
  404. }