WfTextbookSubscriptionServiceImpl.java 24 KB

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