WfTextbookSubscriptionServiceImpl.java 24 KB

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