TextbookSubscriptionServiceImpl.java 46 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781
  1. package com.xjrsoft.module.textbook.service.impl;
  2. import cn.dev33.satoken.stp.StpUtil;
  3. import cn.hutool.core.bean.BeanUtil;
  4. import cn.hutool.core.util.ObjectUtil;
  5. import com.alibaba.excel.EasyExcel;
  6. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  7. import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  8. import com.baomidou.mybatisplus.core.metadata.IPage;
  9. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  10. import com.github.yulichang.base.MPJBaseServiceImpl;
  11. import com.github.yulichang.wrapper.MPJLambdaWrapper;
  12. import com.xjrsoft.common.enums.DeleteMark;
  13. import com.xjrsoft.common.enums.WarehouseModeEnum;
  14. import com.xjrsoft.common.exception.MyException;
  15. import com.xjrsoft.common.page.ConventPage;
  16. import com.xjrsoft.common.utils.VoToColumnUtil;
  17. import com.xjrsoft.module.base.entity.BaseClass;
  18. import com.xjrsoft.module.base.entity.BaseCourseSubject;
  19. import com.xjrsoft.module.base.entity.BaseGrade;
  20. import com.xjrsoft.module.base.entity.BaseSemester;
  21. import com.xjrsoft.module.student.entity.BaseClassMajorSet;
  22. import com.xjrsoft.module.system.entity.DictionaryDetail;
  23. import com.xjrsoft.module.teacher.entity.XjrUser;
  24. import com.xjrsoft.module.textbook.dto.*;
  25. import com.xjrsoft.module.textbook.entity.*;
  26. import com.xjrsoft.module.textbook.mapper.*;
  27. import com.xjrsoft.module.textbook.service.ITextbookSubscriptionService;
  28. import com.xjrsoft.module.textbook.vo.*;
  29. import lombok.AllArgsConstructor;
  30. import org.apache.commons.lang3.ObjectUtils;
  31. import org.apache.commons.lang3.StringUtils;
  32. import org.springframework.beans.BeanUtils;
  33. import org.springframework.stereotype.Service;
  34. import org.springframework.transaction.annotation.Transactional;
  35. import java.io.InputStream;
  36. import java.math.BigDecimal;
  37. import java.math.RoundingMode;
  38. import java.util.*;
  39. import java.util.concurrent.atomic.AtomicReference;
  40. import java.util.regex.Matcher;
  41. import java.util.regex.Pattern;
  42. import java.util.stream.Collectors;
  43. /**
  44. * @title: 教材教辅征订记录表
  45. * @Author dzx
  46. * @Date: 2024-12-16
  47. * @Version 1.0
  48. */
  49. @Service
  50. @AllArgsConstructor
  51. public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<TextbookSubscriptionMapper, TextbookSubscription> implements ITextbookSubscriptionService {
  52. private final TextbookSubscriptionMapper textbookSubscriptionTextbookSubscriptionMapper;
  53. private final TextbookSubscriptionItemMapper textbookSubscriptionTextbookSubscriptionItemMapper;
  54. private final TextbookSubscriptionClassMapper textbookSubscriptionClassMapper;
  55. private final TextbookSubscriptionItemClassMapper textbookSubscriptionItemClassMapper;
  56. private final TextbookWarehouseRecordMapper textbookWarehouseRecordMapper;
  57. private final TextbookSubscriptionItemHistoryMapper textbookSubscriptionItemHistoryMapper;
  58. @Override
  59. public IPage<TextbookSubscriptionPageVo> pageRubAndHand(TextbookSubscriptionPageDto dto) {
  60. MPJLambdaWrapper<TextbookSubscription> queryWrapper = new MPJLambdaWrapper<>();
  61. queryWrapper
  62. .select(TextbookSubscription::getId)
  63. .selectAs(BaseSemester::getName, TextbookSubscriptionPageVo::getBaseSemesterIdCn)
  64. .select(TextbookSubscription.class, x -> VoToColumnUtil.fieldsToColumns(TextbookSubscriptionPageVo.class).contains(x.getProperty()))
  65. .leftJoin(BaseSemester.class, BaseSemester::getId, TextbookSubscription::getBaseSemesterId)
  66. .eq(dto.getBaseSemesterId() != null && dto.getBaseSemesterId() > 0, TextbookSubscription::getBaseSemesterId, dto.getBaseSemesterId())
  67. .eq(dto.getSubscriptionMethod() != null && dto.getSubscriptionMethod() > 0, TextbookSubscription::getSubscriptionMethod, dto.getSubscriptionMethod())
  68. .eq(StringUtils.isNotBlank(dto.getId()), TextbookSubscription::getId, dto.getId())
  69. .orderByDesc(TextbookSubscription::getCreateDate)
  70. ;
  71. IPage<TextbookSubscriptionPageVo> page = this.selectJoinListPage(ConventPage.getPage(dto), TextbookSubscriptionPageVo.class, queryWrapper);
  72. return page;
  73. }
  74. @Override
  75. public List<TextbookInstockroomListVo> instockroomList(TextbookInstockroomListDto dto) {
  76. MPJLambdaWrapper<TextbookSubscriptionItem> queryWrapper = new MPJLambdaWrapper<>();
  77. queryWrapper
  78. .selectAs(TextbookSubscriptionItem::getId, TextbookInstockroomListVo::getTextbookSubscriptionItemId)
  79. .select(Textbook.class, x -> VoToColumnUtil.fieldsToColumns(TextbookInstockroomListVo.class).contains(x.getProperty()))
  80. .select(TextbookSubscriptionItem.class, x -> VoToColumnUtil.fieldsToColumns(TextbookInstockroomListVo.class).contains(x.getProperty()))
  81. .selectAs(TextbookSubscriptionItem::getStudentNum, TextbookInstockroomListVo::getStudentSubscriptionNumber)
  82. .selectAs(TextbookSubscriptionItem::getTeacherNum, TextbookInstockroomListVo::getTeacherSubscriptionNumber)
  83. .selectAs(TextbookSubscriptionItem::getPrice, TextbookInstockroomListVo::getActualPrice)
  84. .selectAs(TextbookSubscriptionItem::getDiscount, TextbookInstockroomListVo::getDiscount)
  85. .leftJoin(Textbook.class, Textbook::getId, TextbookSubscriptionItem::getTextbookId)
  86. .leftJoin(BaseCourseSubject.class, BaseCourseSubject::getId, Textbook::getCourseSubjectId,
  87. wrapper -> wrapper
  88. .selectAs(BaseCourseSubject::getName, TextbookInstockroomListVo::getCourseName)
  89. )
  90. .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, Textbook::getTextbookType,
  91. wrapper -> wrapper
  92. .selectAs(DictionaryDetail::getName, TextbookInstockroomListVo::getTextbookTypeCn)
  93. )
  94. .eq(TextbookSubscriptionItem::getTextbookSubscriptionId, dto.getTextbookSubscriptionId())
  95. .orderByAsc(TextbookSubscriptionItem::getInStockNum)
  96. ;
  97. return textbookSubscriptionTextbookSubscriptionItemMapper.selectJoinList(TextbookInstockroomListVo.class, queryWrapper);
  98. }
  99. @Override
  100. public List<TextbookInstockroomOnceListVo> everyInstockroomList(TextbookInstockroomOnceListDto dto) {
  101. MPJLambdaWrapper<TextbookWarehouseRecord> queryWrapper = new MPJLambdaWrapper<>();
  102. queryWrapper
  103. .select(TextbookSubscriptionItem::getId)
  104. .selectAs(TextbookWarehouseRecord::getWarehouseNumber, TextbookInstockroomOnceListVo::getOnceInStockNum)
  105. .selectAs(TextbookWarehouseRecord::getCreateDate, TextbookInstockroomOnceListVo::getCreateDate)
  106. .selectAs(TextbookWarehouseRecord::getCreateUserId, TextbookInstockroomOnceListVo::getCreateUserId)
  107. .select(Textbook.class, x -> VoToColumnUtil.fieldsToColumns(TextbookInstockroomOnceListVo.class).contains(x.getProperty()))
  108. .leftJoin(Textbook.class, Textbook::getId, TextbookSubscriptionItem::getTextbookId)
  109. .leftJoin(BaseCourseSubject.class, BaseCourseSubject::getId, Textbook::getCourseSubjectId,
  110. wrapper -> wrapper
  111. .selectAs(BaseCourseSubject::getName, TextbookInstockroomOnceListVo::getCourseName)
  112. )
  113. .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, Textbook::getTextbookType,
  114. wrapper -> wrapper
  115. .selectAs(DictionaryDetail::getName, TextbookInstockroomOnceListVo::getTextbookTypeCn)
  116. )
  117. .eq(TextbookSubscriptionItem::getTextbookSubscriptionId, dto.getTextbookSubscriptionId())
  118. .orderByAsc(TextbookSubscriptionItem::getInStockNum)
  119. ;
  120. return textbookWarehouseRecordMapper.selectJoinList(TextbookInstockroomOnceListVo.class, queryWrapper);
  121. }
  122. @Override
  123. public TextbookSubscriptionVo infoRubAndHand(Long id) {
  124. TextbookSubscription textbookSubscription = this.getById(id);
  125. TextbookSubscriptionVo textbookSubscriptionVo = BeanUtil.toBean(textbookSubscription, TextbookSubscriptionVo.class);
  126. MPJLambdaWrapper<TextbookSubscriptionItem> textbookSubscriptionItemMPJLambdaWrapper = new MPJLambdaWrapper<>();
  127. textbookSubscriptionItemMPJLambdaWrapper
  128. .select(TextbookSubscriptionItem::getId)
  129. .select(TextbookSubscriptionItem.class,x -> VoToColumnUtil.fieldsToColumns(TextbookSubscriptionItemVo.class).contains(x.getProperty()))
  130. .leftJoin(Textbook.class, Textbook::getId, TextbookSubscriptionItem::getTextbookId,
  131. wrapper -> wrapper
  132. .select(Textbook.class,x -> VoToColumnUtil.fieldsToColumns(TextbookSubscriptionItemVo.class).contains(x.getProperty()))
  133. .leftJoin(BaseCourseSubject.class, BaseCourseSubject::getId, Textbook::getCourseSubjectId,
  134. wp -> wp
  135. .selectAs(BaseCourseSubject::getName, TextbookSubscriptionItemVo::getCourseSubjectIdCn)
  136. )
  137. .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, Textbook::getTextbookType,
  138. wp -> wp
  139. .selectAs(DictionaryDetail::getName, TextbookSubscriptionItemVo::getTextbookTypeCn)
  140. )
  141. )
  142. .selectAs(TextbookSubscriptionItem::getPrice, TextbookSubscriptionItemVo::getPricing)
  143. .selectAs(Textbook::getPrice, TextbookSubscriptionItemVo::getPrice)
  144. .eq(TextbookSubscriptionItem::getTextbookSubscriptionId, id)
  145. ;
  146. List<TextbookSubscriptionItemVo> list = textbookSubscriptionTextbookSubscriptionItemMapper.selectJoinList(TextbookSubscriptionItemVo.class, textbookSubscriptionItemMPJLambdaWrapper);
  147. textbookSubscriptionVo.setTextbookSubscriptionItemList(list);
  148. return textbookSubscriptionVo;
  149. }
  150. @Override
  151. public TextbookSubscriptionDetailVo detail(Long id) {
  152. TextbookSubscription textbookSubscription = this.getById(id);
  153. if (ObjectUtils.isEmpty(textbookSubscription)) {
  154. throw new MyException("证订记录被修改,请刷新重试");
  155. }
  156. // 获取所有的证订项目
  157. LambdaQueryWrapper<TextbookSubscriptionItem> subscriptionItemLambdaQueryWrapper = new LambdaQueryWrapper<>();
  158. subscriptionItemLambdaQueryWrapper
  159. .eq(TextbookSubscriptionItem::getTextbookSubscriptionId, id)
  160. .eq(TextbookSubscriptionItem::getDeleteMark, DeleteMark.NODELETE.getCode())
  161. ;
  162. List<TextbookSubscriptionItem> textbookSubscriptionItemList = textbookSubscriptionTextbookSubscriptionItemMapper.selectList(subscriptionItemLambdaQueryWrapper);
  163. int stuNum = 0;
  164. int teaNum = 0;
  165. BigDecimal totalPrice = BigDecimal.valueOf(0);
  166. BigDecimal currentPrice;
  167. BigDecimal currentTotalPrice;
  168. for (TextbookSubscriptionItem textbookSubscriptionItem : textbookSubscriptionItemList) {
  169. stuNum += textbookSubscriptionItem.getStudentNum();
  170. teaNum += textbookSubscriptionItem.getTeacherNum();
  171. BigDecimal discount = BigDecimal.valueOf(textbookSubscriptionItem.getDiscount()).divide(BigDecimal.valueOf(10), 2, RoundingMode.DOWN);
  172. currentPrice = textbookSubscriptionItem.getPrice().multiply(discount);
  173. currentTotalPrice = currentPrice.multiply(BigDecimal.valueOf(textbookSubscriptionItem.getTeacherNum() + textbookSubscriptionItem.getStudentNum()));
  174. totalPrice = totalPrice.add(currentTotalPrice);
  175. }
  176. TextbookSubscriptionDetailVo textbookSubscriptionDetailVo = new TextbookSubscriptionDetailVo();
  177. textbookSubscriptionDetailVo.setId(String.valueOf(id));
  178. textbookSubscriptionDetailVo.setStudentTatolNum(stuNum);
  179. textbookSubscriptionDetailVo.setTeacherTatolNum(teaNum);
  180. textbookSubscriptionDetailVo.setSum(stuNum + teaNum);
  181. textbookSubscriptionDetailVo.setSumPrice(totalPrice);
  182. return textbookSubscriptionDetailVo;
  183. }
  184. @Override
  185. public IPage<TextbookSubscriptionItemPageVo> itemPage(TextbookSubscriptionItemPageDto dto) {
  186. MPJLambdaWrapper<TextbookSubscriptionItem> textbookSubscriptionItemMPJLambdaWrapper = new MPJLambdaWrapper<>();
  187. textbookSubscriptionItemMPJLambdaWrapper
  188. .select(TextbookSubscriptionItem::getId)
  189. .select(TextbookSubscriptionItem.class,x -> VoToColumnUtil.fieldsToColumns(TextbookSubscriptionItemPageVo.class).contains(x.getProperty()))
  190. .leftJoin(Textbook.class, Textbook::getId, TextbookSubscriptionItem::getTextbookId,
  191. wrapper -> wrapper
  192. .select(Textbook.class,x -> VoToColumnUtil.fieldsToColumns(TextbookSubscriptionItemPageVo.class).contains(x.getProperty()))
  193. .leftJoin(BaseCourseSubject.class, BaseCourseSubject::getId, Textbook::getCourseSubjectId,
  194. wp -> wp
  195. .selectAs(BaseCourseSubject::getName, TextbookSubscriptionItemPageVo::getCourseSubjectIdCn)
  196. .like(StringUtils.isNotBlank(dto.getCourseSubjectIdCn()), BaseCourseSubject::getName, dto.getCourseSubjectIdCn())
  197. )
  198. .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, Textbook::getTextbookType,
  199. wp -> wp
  200. .selectAs(DictionaryDetail::getName, TextbookSubscriptionItemPageVo::getTextbookTypeCn)
  201. )
  202. .like(StringUtils.isNotBlank(dto.getBookName()), Textbook::getBookName, dto.getBookName())
  203. .eq(StringUtils.isNotBlank(dto.getTextbookType()), Textbook::getTextbookType, dto.getTextbookType())
  204. )
  205. .eq(TextbookSubscriptionItem::getTextbookSubscriptionId, dto.getTextbookSubscriptionId())
  206. ;
  207. IPage<TextbookSubscriptionItemPageVo> page = textbookSubscriptionTextbookSubscriptionItemMapper.selectJoinPage(ConventPage.getPage(dto), TextbookSubscriptionItemPageVo.class, textbookSubscriptionItemMPJLambdaWrapper);
  208. return page;
  209. }
  210. @Override
  211. public IPage<BaseclassPageVo> baseclassPage(BaseclassPageDto dto) {
  212. // 查询征订记录总的征订班级
  213. MPJLambdaWrapper<TextbookSubscriptionItem> baseClassMPJLambdaWrapper = new MPJLambdaWrapper<>();
  214. baseClassMPJLambdaWrapper
  215. .disableSubLogicDel()
  216. .distinct()
  217. .selectAs(BaseGrade::getName, BaseclassPageVo::getGradeIdCn)
  218. .selectAs(XjrUser::getName, BaseclassPageVo::getTeacherIdCn)
  219. .select(" (select" +
  220. " count(a.id)" +
  221. " from base_student_school_roll a" +
  222. " where a.class_id = t1.base_class_id" +
  223. " and a.archives_status = 'FB2901'" +
  224. " and a.delete_mark = 0" +
  225. " ) as total_student")
  226. .select(BaseClass.class, x -> VoToColumnUtil.fieldsToColumns(BaseclassPageVo.class).contains(x.getProperty()))
  227. .innerJoin(TextbookSubscriptionItemClass.class, TextbookSubscriptionItemClass::getTextbookSubscriptionItemId, TextbookSubscriptionItem::getId)
  228. .leftJoin(BaseClass.class, BaseClass::getId, TextbookSubscriptionItemClass::getBaseClassId)
  229. .leftJoin(BaseGrade.class, BaseGrade::getId, BaseClass::getGradeId)
  230. .leftJoin(XjrUser.class, XjrUser::getId, BaseClass::getTeacherId)
  231. .eq(ObjectUtils.isNotEmpty(dto.getId()), TextbookSubscriptionItem::getTextbookSubscriptionId, dto.getId())
  232. .eq(ObjectUtils.isNotEmpty(dto.getTextbookSubscriptionItemId()), TextbookSubscriptionItem::getId, dto.getTextbookSubscriptionItemId())
  233. .eq(TextbookSubscriptionClass::getDeleteMark, DeleteMark.NODELETE.getCode())
  234. ;
  235. return textbookSubscriptionTextbookSubscriptionItemMapper.selectJoinPage(ConventPage.getPage(dto), BaseclassPageVo.class, baseClassMPJLambdaWrapper);
  236. }
  237. @Override
  238. public List<SubscriptionItemListDistributeVo> itemListConfirmDistribute(SubscriptionItemListDistributeDto dto) {
  239. MPJLambdaWrapper<TextbookSubscriptionItem> textbookSubscriptionItemMPJLambdaWrapper = new MPJLambdaWrapper<>();
  240. textbookSubscriptionItemMPJLambdaWrapper
  241. .select(TextbookSubscriptionItem::getId)
  242. .selectAs(TextbookSubscriptionItem::getPrice, SubscriptionItemListDistributeVo::getActulPrice)
  243. .select(TextbookSubscriptionItem.class,x -> VoToColumnUtil.fieldsToColumns(SubscriptionItemListDistributeVo.class).contains(x.getProperty()))
  244. .innerJoin(TextbookSubscription.class, TextbookSubscription::getId, TextbookSubscriptionItem::getTextbookSubscriptionId)
  245. .eq(TextbookSubscriptionItem::getTextbookId, dto.getTextbookId())
  246. .gt(TextbookSubscriptionItem::getInStockNum, TextbookSubscriptionItem::getOutStockNum)
  247. .orderByAsc(TextbookSubscriptionItem::getCreateDate)
  248. ;
  249. return textbookSubscriptionTextbookSubscriptionItemMapper.selectJoinList(SubscriptionItemListDistributeVo.class, textbookSubscriptionItemMPJLambdaWrapper);
  250. }
  251. @Override
  252. @Transactional(rollbackFor = Exception.class)
  253. public Boolean add(TextbookSubscription textbookSubscription) {
  254. // 处理征订表
  255. int sum = 0;
  256. for (TextbookSubscriptionItem textbookSubscriptionItem : textbookSubscription.getTextbookSubscriptionItemList()) {
  257. textbookSubscriptionItem.setStudentNum(ObjectUtils.isEmpty(textbookSubscriptionItem.getStudentNum()) ? 0 : textbookSubscriptionItem.getStudentNum());
  258. textbookSubscriptionItem.setTeacherNum(ObjectUtils.isEmpty(textbookSubscriptionItem.getTeacherNum()) ? 0 : textbookSubscriptionItem.getTeacherNum());
  259. sum += textbookSubscriptionItem.getStudentNum() + textbookSubscriptionItem.getTeacherNum();
  260. }
  261. textbookSubscription.setSum(sum);
  262. textbookSubscription.setCreateDate(new Date());
  263. textbookSubscriptionTextbookSubscriptionMapper.insert(textbookSubscription);
  264. // // 处理征订和班级关联表
  265. // if (ObjectUtils.isNotEmpty(textbookSubscription.getSubscriptionMethod())
  266. // && textbookSubscription.getSubscriptionMethod() == 1
  267. // && StringUtils.isNotBlank(textbookSubscription.getBaseClassIds())
  268. // ) {
  269. // String[] classIdArr = textbookSubscription.getBaseClassIds().split(",");
  270. // TextbookSubscriptionClass textbookSubscriptionClass;
  271. // for (String str : classIdArr) {
  272. // textbookSubscriptionClass = new TextbookSubscriptionClass();
  273. // textbookSubscriptionClass.setTextbookSubscriptionId(textbookSubscription.getId());
  274. // textbookSubscriptionClass.setBaseClassId(Long.parseLong(str));
  275. // textbookSubscriptionClass.setCreateDate(new Date());
  276. // textbookSubscriptionClassMapper.insert(textbookSubscriptionClass);
  277. // }
  278. // }
  279. // 处理征订项
  280. TextbookSubscriptionItemClass textbookSubscriptionItemClass;
  281. for (TextbookSubscriptionItem textbookSubscriptionItem : textbookSubscription.getTextbookSubscriptionItemList()) {
  282. String[] classIdArr = new String[0];
  283. if (ObjectUtils.isNotEmpty(textbookSubscription.getSubscriptionMethod())
  284. && textbookSubscription.getSubscriptionMethod() == 1
  285. && ObjectUtils.isNotEmpty(textbookSubscriptionItem.getClassIds())
  286. ) {
  287. classIdArr = textbookSubscriptionItem.getClassIds().split(",");
  288. }
  289. textbookSubscriptionItem.setUseClassNum(classIdArr.length);
  290. textbookSubscriptionItem.setTextbookSubscriptionId(textbookSubscription.getId());
  291. textbookSubscriptionItem.setCreateDate(new Date());
  292. textbookSubscriptionTextbookSubscriptionItemMapper.insert(textbookSubscriptionItem);
  293. // 处理征订项和班级关联表
  294. for (String str : classIdArr) {
  295. textbookSubscriptionItemClass = new TextbookSubscriptionItemClass();
  296. textbookSubscriptionItemClass.setTextbookSubscriptionItemId(textbookSubscriptionItem.getId());
  297. textbookSubscriptionItemClass.setBaseClassId(Long.parseLong(str));
  298. textbookSubscriptionItemClass.setCreateDate(new Date());
  299. textbookSubscriptionItemClassMapper.insert(textbookSubscriptionItemClass);
  300. }
  301. }
  302. return true;
  303. }
  304. @Override
  305. @Transactional(rollbackFor = Exception.class)
  306. public Boolean instockroom(List<TextbookInstockroomDto> dtos) {
  307. if (dtos.isEmpty()) {
  308. return false;
  309. }
  310. List<Long> textbookSubscriptionItemIds = new ArrayList<>();
  311. for (TextbookInstockroomDto dto : dtos) {
  312. if(ObjectUtils.isNotEmpty(dto.getTextbookSubscriptionItemId())){
  313. textbookSubscriptionItemIds.add(dto.getTextbookSubscriptionItemId());
  314. }
  315. }
  316. if (textbookSubscriptionItemIds.isEmpty()) {
  317. throw new MyException("请选择需要入库的教材");
  318. }
  319. //获取需要修改的list
  320. MPJLambdaWrapper<TextbookSubscriptionItem> queryWrapper = new MPJLambdaWrapper<>();
  321. queryWrapper
  322. .select(TextbookSubscriptionItem::getId)
  323. .select(TextbookSubscriptionItem.class, x -> VoToColumnUtil.fieldsToColumns(TextbookSubscriptionItem.class).contains(x.getProperty()))
  324. .leftJoin(Textbook.class, Textbook::getId, TextbookSubscriptionItem::getTextbookId)
  325. .in(TextbookSubscriptionItem::getId, textbookSubscriptionItemIds)
  326. .eq(TextbookSubscriptionItem::getDeleteMark, DeleteMark.NODELETE.getCode())
  327. ;
  328. List<TextbookSubscriptionItem> textbookSubscriptionItemList = textbookSubscriptionTextbookSubscriptionItemMapper.selectJoinList(TextbookSubscriptionItem.class, queryWrapper);
  329. if (textbookSubscriptionItemList.isEmpty()) {
  330. throw new MyException("证订信息已经修改,请刷新重试");
  331. }
  332. Map<Long, TextbookSubscriptionItem> itemByIdMap = new HashMap<>();
  333. for (TextbookSubscriptionItem el : textbookSubscriptionItemList) {
  334. if(ObjectUtils.isNotEmpty(el.getId()) && !itemByIdMap.containsKey(el.getId())){
  335. itemByIdMap.put(el.getId(), el);
  336. }
  337. }
  338. TextbookSubscriptionItem old = null;
  339. for (TextbookInstockroomDto dto : dtos) {
  340. if (ObjectUtils.isNotEmpty(dto.getTextbookSubscriptionItemId())) {
  341. old = itemByIdMap.get(dto.getTextbookSubscriptionItemId());
  342. }
  343. if (ObjectUtils.isEmpty(old)) {
  344. continue;
  345. }
  346. TextbookSubscriptionItem updateItem = new TextbookSubscriptionItem();
  347. updateItem.setId(old.getId());
  348. updateItem.setDiscount(dto.getDiscount());
  349. updateItem.setPrice(old.getPrice().multiply(BigDecimal.valueOf(dto.getDiscount() / 10)));
  350. updateItem.setInStockNum(old.getInStockNum() + dto.getInNum());
  351. updateItem.setModifyDate(new Date());
  352. updateItem.setModifyUserId(StpUtil.getLoginIdAsLong());
  353. textbookSubscriptionTextbookSubscriptionItemMapper.updateById(updateItem);
  354. //新增入库记录
  355. TextbookWarehouseRecord textbookWarehouseRecord = new TextbookWarehouseRecord();
  356. textbookWarehouseRecord.setTextbookId(old.getTextbookId());
  357. textbookWarehouseRecord.setDataId(dto.getTextbookSubscriptionId());
  358. textbookWarehouseRecord.setDataItemId(dto.getTextbookSubscriptionItemId());
  359. textbookWarehouseRecord.setWarehouseNumber(dto.getInNum());
  360. textbookWarehouseRecord.setPrice(old.getPrice());
  361. textbookWarehouseRecord.setDiscount(dto.getDiscount());
  362. textbookWarehouseRecord.setSubtotal(old.getPrice().multiply(BigDecimal.valueOf(dto.getDiscount() / 10)));
  363. textbookWarehouseRecord.setTotalPrice(textbookWarehouseRecord.getSubtotal().multiply(BigDecimal.valueOf(dto.getInNum())));
  364. textbookWarehouseRecord.setWarehouseMode(WarehouseModeEnum.WmManual.getCode());
  365. updateItem.setCreateDate(new Date());
  366. updateItem.setCreateUserId(StpUtil.getLoginIdAsLong());
  367. textbookWarehouseRecordMapper.insert(textbookWarehouseRecord);
  368. }
  369. return true;
  370. }
  371. @Override
  372. @Transactional(rollbackFor = Exception.class)
  373. public String instockroomExcelImport(InputStream inputStream, Long textbookSubscriptionId) {
  374. AtomicReference<Map<String, Object>> atomicMap = new AtomicReference<>(new HashMap<>());
  375. List<Map<Integer, Object>> excalDataList = EasyExcel.read(inputStream).sheet().headRowNumber(1).doReadSync();
  376. String regex = "\\d+";
  377. Pattern pattern = Pattern.compile(regex);
  378. List<TextbookInstockroomImportDto> dataList = new ArrayList<>();
  379. for (Map<Integer, Object> integerObjectMap : excalDataList) {
  380. Matcher matcher = pattern.matcher(integerObjectMap.get(11).toString());
  381. int inNum = 0;
  382. if (matcher.find()) {
  383. inNum = Integer.parseInt(integerObjectMap.get(11).toString());
  384. }
  385. TextbookInstockroomImportDto importDto = new TextbookInstockroomImportDto();
  386. importDto.setInNum(inNum);
  387. importDto.setIssn(integerObjectMap.get(2).toString());
  388. dataList.add(importDto);
  389. }
  390. //获取需要修改的list
  391. MPJLambdaWrapper<TextbookSubscriptionItem> queryWrapper = new MPJLambdaWrapper<>();
  392. queryWrapper
  393. .select(TextbookSubscriptionItem::getId)
  394. .selectAs(Textbook::getIssn, TextbookSubscriptionItemVo::getIssn)
  395. .select(TextbookSubscriptionItem.class, x -> VoToColumnUtil.fieldsToColumns(TextbookSubscriptionItemVo.class).contains(x.getProperty()))
  396. .leftJoin(Textbook.class, Textbook::getId, TextbookSubscriptionItem::getTextbookId)
  397. .eq(TextbookSubscriptionItem::getTextbookSubscriptionId, textbookSubscriptionId)
  398. .eq(TextbookSubscriptionItem::getDeleteMark, DeleteMark.NODELETE.getCode())
  399. ;
  400. List<TextbookSubscriptionItemVo> textbookSubscriptionItemVos = textbookSubscriptionTextbookSubscriptionItemMapper.selectJoinList(TextbookSubscriptionItemVo.class, queryWrapper);
  401. if (textbookSubscriptionItemVos.isEmpty()) {
  402. return null;
  403. }
  404. Map<String, TextbookSubscriptionItemVo> itemByIssnMap = new HashMap<>();
  405. for (TextbookSubscriptionItemVo el : textbookSubscriptionItemVos) {
  406. itemByIssnMap.put(el.getIssn(), el);
  407. }
  408. int successNum = 0;
  409. int instockroomNum = 0;
  410. for (TextbookInstockroomImportDto item : dataList) {
  411. if (StringUtils.isBlank(item.getIssn())) {
  412. continue;
  413. }
  414. TextbookSubscriptionItemVo old = itemByIssnMap.get(item.getIssn());
  415. if (old == null) {
  416. continue;
  417. }
  418. TextbookSubscriptionItem updateItem = new TextbookSubscriptionItem();
  419. updateItem.setId(old.getId());
  420. updateItem.setInStockNum(old.getInStockNum() + item.getInNum());
  421. textbookSubscriptionTextbookSubscriptionItemMapper.updateById(updateItem);
  422. //新增入库记录
  423. TextbookWarehouseRecord textbookWarehouseRecord = new TextbookWarehouseRecord();
  424. textbookWarehouseRecord.setTextbookId(old.getTextbookId());
  425. textbookWarehouseRecord.setDataId(textbookSubscriptionId);
  426. textbookWarehouseRecord.setDataItemId(old.getId());
  427. textbookWarehouseRecord.setWarehouseNumber(item.getInNum());
  428. textbookWarehouseRecord.setWarehouseMode(WarehouseModeEnum.WmManual.getCode());
  429. textbookWarehouseRecordMapper.insert(textbookWarehouseRecord);
  430. successNum++;
  431. successNum += item.getInNum();
  432. }
  433. return "成功入库" + successNum + "样,成功入库" + successNum + "本";
  434. }
  435. @Override
  436. @Transactional(rollbackFor = Exception.class)
  437. public Boolean update(TextbookSubscription textbookSubscription) {
  438. int sum = 0;
  439. //********************************* TextbookSubscriptionItem 增删改 开始 *******************************************/
  440. {
  441. // 查出所有子级的id
  442. List<TextbookSubscriptionItem> textbookSubscriptionItemList = textbookSubscriptionTextbookSubscriptionItemMapper.selectList(
  443. Wrappers.lambdaQuery(TextbookSubscriptionItem.class)
  444. .eq(TextbookSubscriptionItem::getTextbookSubscriptionId, textbookSubscription.getId())
  445. .select(TextbookSubscriptionItem::getId));
  446. List<Long> textbookSubscriptionItemIds = textbookSubscriptionItemList.stream()
  447. .map(TextbookSubscriptionItem::getId)
  448. .collect(Collectors.toList());
  449. // 原有子表单 没有被删除的主键
  450. List<Long> textbookSubscriptionItemOldIds = textbookSubscription.getTextbookSubscriptionItemList().stream()
  451. .map(TextbookSubscriptionItem::getId)
  452. .filter(Objects::nonNull)
  453. .collect(Collectors.toList());
  454. // 找到需要删除的id
  455. List<Long> textbookSubscriptionItemRemoveIds = textbookSubscriptionItemIds.stream()
  456. .filter(item -> !textbookSubscriptionItemOldIds.contains(item))
  457. .collect(Collectors.toList());
  458. TextbookSubscriptionItemClass textbookSubscriptionItemClass;
  459. for (TextbookSubscriptionItem textbookSubscriptionItem : textbookSubscription.getTextbookSubscriptionItemList()) {
  460. // 如果不等于空则修改
  461. if (textbookSubscriptionItem.getId() != null) {
  462. textbookSubscriptionTextbookSubscriptionItemMapper.updateById(textbookSubscriptionItem);
  463. } else {
  464. // 如果等于空 则新增
  465. // 新增的时候应该处理班级关联
  466. String[] classIdArr = new String[0];
  467. if (ObjectUtils.isNotEmpty(textbookSubscription.getSubscriptionMethod())
  468. && textbookSubscription.getSubscriptionMethod() == 1
  469. && ObjectUtils.isNotEmpty(textbookSubscriptionItem.getClassIds())
  470. ) {
  471. classIdArr = textbookSubscriptionItem.getClassIds().split(",");
  472. }
  473. textbookSubscriptionItem.setUseClassNum(classIdArr.length);
  474. textbookSubscriptionItem.setTextbookSubscriptionId(textbookSubscription.getId());
  475. textbookSubscriptionItem.setCreateDate(new Date());
  476. textbookSubscriptionTextbookSubscriptionItemMapper.insert(textbookSubscriptionItem);
  477. // 处理征订项和班级关联表
  478. for (String str : classIdArr) {
  479. textbookSubscriptionItemClass = new TextbookSubscriptionItemClass();
  480. textbookSubscriptionItemClass.setTextbookSubscriptionItemId(textbookSubscriptionItem.getId());
  481. textbookSubscriptionItemClass.setBaseClassId(Long.parseLong(str));
  482. textbookSubscriptionItemClass.setCreateDate(new Date());
  483. textbookSubscriptionItemClassMapper.insert(textbookSubscriptionItemClass);
  484. }
  485. }
  486. textbookSubscriptionItem.setStudentNum(ObjectUtils.isEmpty(textbookSubscriptionItem.getStudentNum()) ? 0 : textbookSubscriptionItem.getStudentNum());
  487. textbookSubscriptionItem.setTeacherNum(ObjectUtils.isEmpty(textbookSubscriptionItem.getTeacherNum()) ? 0 : textbookSubscriptionItem.getTeacherNum());
  488. sum += textbookSubscriptionItem.getStudentNum() + textbookSubscriptionItem.getTeacherNum();
  489. }
  490. // 已经不存在的id 删除
  491. if (ObjectUtils.isNotEmpty(textbookSubscriptionItemRemoveIds.isEmpty())) {
  492. LambdaUpdateWrapper<TextbookSubscriptionItemClass> textbookSubscriptionItemClassLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
  493. textbookSubscriptionItemClassLambdaUpdateWrapper
  494. .in(TextbookSubscriptionItemClass::getTextbookSubscriptionItemId, textbookSubscriptionItemRemoveIds)
  495. .eq(TextbookSubscriptionItemClass::getDeleteMark, DeleteMark.NODELETE.getCode())
  496. ;
  497. textbookSubscriptionItemClassMapper.delete(textbookSubscriptionItemClassLambdaUpdateWrapper);
  498. textbookSubscriptionTextbookSubscriptionItemMapper.deleteBatchIds(textbookSubscriptionItemRemoveIds);
  499. }
  500. }
  501. //********************************* TextbookSubscriptionItem 增删改 结束 *******************************************/
  502. //********************************* TextbookSubscriptionClass 增删改 开始 *******************************************/
  503. // LambdaUpdateWrapper<TextbookSubscriptionClass> textbookSubscriptionClassLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
  504. // textbookSubscriptionClassLambdaUpdateWrapper
  505. // .eq(TextbookSubscriptionClass::getTextbookSubscriptionId, textbookSubscription.getId())
  506. // ;
  507. // textbookSubscriptionClassMapper.delete(textbookSubscriptionClassLambdaUpdateWrapper);
  508. //
  509. // if (ObjectUtils.isNotEmpty(textbookSubscription.getSubscriptionMethod())
  510. // && textbookSubscription.getSubscriptionMethod() == 1
  511. // && StringUtils.isNotBlank(textbookSubscription.getBaseClassIds())
  512. // ) {
  513. // String[] classIdArr = textbookSubscription.getBaseClassIds().split(",");
  514. // for (String str : classIdArr) {
  515. // TextbookSubscriptionClass textbookSubscriptionClass = new TextbookSubscriptionClass();
  516. // textbookSubscriptionClass.setTextbookSubscriptionId(textbookSubscription.getId());
  517. // textbookSubscriptionClass.setBaseClassId(Long.parseLong(str));
  518. // textbookSubscriptionClass.setCreateDate(new Date());
  519. // textbookSubscriptionClassMapper.insert(textbookSubscriptionClass);
  520. // }
  521. // }
  522. //********************************* TextbookSubscriptionClass 增删改 结束 *******************************************/
  523. textbookSubscription.setSum(sum);
  524. textbookSubscriptionTextbookSubscriptionMapper.updateById(textbookSubscription);
  525. return true;
  526. }
  527. @Override
  528. @Transactional(rollbackFor = Exception.class)
  529. public Boolean alteration(UpdateTextbookSubscriptionItemDto dto) {
  530. TextbookSubscriptionItem old = textbookSubscriptionTextbookSubscriptionItemMapper.selectById(dto.getId());
  531. if(old == null){
  532. throw new MyException("征订项已经被修改,刷新重试");
  533. }
  534. MPJLambdaWrapper<TextbookSubscription> textbookSubscriptionMPJLambdaWrapper = new MPJLambdaWrapper<>();
  535. textbookSubscriptionMPJLambdaWrapper
  536. .select(TextbookSubscription.class, x -> VoToColumnUtil.fieldsToColumns(TextbookSubscription.class).contains(x.getProperty()))
  537. .eq(TextbookSubscriptionItem::getId, dto.getId())
  538. .innerJoin(TextbookSubscriptionItem.class, TextbookSubscriptionItem::getTextbookSubscriptionId, TextbookSubscription::getId)
  539. ;
  540. TextbookSubscription textbookSubscription = this.selectJoinOne(TextbookSubscription.class, textbookSubscriptionMPJLambdaWrapper);
  541. // 判断变更状态
  542. int alterationType = 0;
  543. TextbookSubscription updateTotalNum = new TextbookSubscription();
  544. if(!old.getStudentNum().equals(dto.getStudentNum())
  545. || !old.getTeacherNum().equals(dto.getTeacherNum())
  546. ){
  547. alterationType = 1;
  548. if(ObjectUtils.isNotEmpty(textbookSubscription)){
  549. updateTotalNum.setId(textbookSubscription.getId());
  550. updateTotalNum.setSum(textbookSubscription.getSum() + (dto.getStudentNum() - old.getStudentNum()) + (dto.getTeacherNum() - old.getTeacherNum()));
  551. this.updateById(updateTotalNum);
  552. }
  553. }
  554. if(!old.getTextbookId().equals(dto.getTextbookId())){
  555. alterationType = 2;
  556. if(ObjectUtils.isNotEmpty(textbookSubscription)){
  557. updateTotalNum.setId(textbookSubscription.getId());
  558. updateTotalNum.setSum(textbookSubscription.getSum() - (old.getTeacherNum() + old.getStudentNum()) + (dto.getTeacherNum() + dto.getStudentNum()));
  559. this.updateById(updateTotalNum);
  560. }
  561. }
  562. // 将历史记录保存到历史变更记录表
  563. // 当前征订项的变更历史最后一次记录
  564. LambdaQueryWrapper<TextbookSubscriptionItemHistory> textbookSubscriptionItemHistoryLambdaQueryWrapper = new LambdaQueryWrapper<>();
  565. textbookSubscriptionItemHistoryLambdaQueryWrapper
  566. .eq(TextbookSubscriptionItemHistory::getTextbookSubscriptionItemId, old.getId())
  567. .orderByDesc(TextbookSubscriptionItemHistory::getHistoryVersion)
  568. .last("limit 1")
  569. ;
  570. TextbookSubscriptionItemHistory lastOne = textbookSubscriptionItemHistoryMapper.selectOne(textbookSubscriptionItemHistoryLambdaQueryWrapper);
  571. // 将变更前的数据记录在历史表中
  572. TextbookSubscriptionItemHistory textbookSubscriptionItemHistory = new TextbookSubscriptionItemHistory();
  573. // 变更前
  574. textbookSubscriptionItemHistory.setOldTextbookId(old.getTextbookId());
  575. textbookSubscriptionItemHistory.setOldStudentNum(old.getStudentNum());
  576. textbookSubscriptionItemHistory.setOldTeacherNum(old.getTeacherNum());
  577. textbookSubscriptionItemHistory.setOldDiscount(old.getDiscount());
  578. textbookSubscriptionItemHistory.setOldPrice(old.getPrice());
  579. textbookSubscriptionItemHistory.setOldInStockNum(old.getInStockNum());
  580. textbookSubscriptionItemHistory.setOldOutStockNum(old.getOutStockNum());
  581. // 变更后
  582. textbookSubscriptionItemHistory.setNewTextbookId(dto.getTextbookId());
  583. textbookSubscriptionItemHistory.setNewStudentNum(dto.getStudentNum());
  584. textbookSubscriptionItemHistory.setNewTeacherNum(dto.getTeacherNum());
  585. textbookSubscriptionItemHistory.setNewDiscount(dto.getDiscount());
  586. textbookSubscriptionItemHistory.setNewPrice(dto.getPrice());
  587. textbookSubscriptionItemHistory.setNewInStockNum(dto.getInStockNum());
  588. textbookSubscriptionItemHistory.setNewOutStockNum(dto.getOutStockNum());
  589. textbookSubscriptionItemHistory.setTextbookSubscriptionId(old.getTextbookSubscriptionId());
  590. textbookSubscriptionItemHistory.setTextbookSubscriptionItemId(old.getId());
  591. textbookSubscriptionItemHistory.setCreateDate(new Date());
  592. textbookSubscriptionItemHistory.setCreateUserId(StpUtil.getLoginIdAsLong());
  593. if(ObjectUtils.isNotEmpty(lastOne)){
  594. textbookSubscriptionItemHistory.setHistoryVersion(lastOne.getHistoryVersion() + 1);
  595. } else {
  596. textbookSubscriptionItemHistory.setHistoryVersion(1);
  597. }
  598. textbookSubscriptionItemHistory.setAlterationType(alterationType);
  599. textbookSubscriptionItemHistoryMapper.insert(textbookSubscriptionItemHistory);
  600. // 变更征订总数量
  601. //变更当前记录
  602. TextbookSubscriptionItem updateItem = new TextbookSubscriptionItem();
  603. BeanUtils.copyProperties(dto, updateItem);
  604. updateItem.setAlterationType(alterationType);
  605. textbookSubscriptionTextbookSubscriptionItemMapper.updateById(updateItem);
  606. return true;
  607. }
  608. @Override
  609. @Transactional(rollbackFor = Exception.class)
  610. public Boolean changeStatus(UpdateWfTextbookSubscriptionDto dto) {
  611. TextbookSubscription textbookSubscription = this.getById(dto.getId());
  612. if (textbookSubscription == null) {
  613. return false;
  614. }
  615. TextbookSubscription newT = new TextbookSubscription();
  616. newT.setId(textbookSubscription.getId());
  617. newT.setStatus(dto.getStatus());
  618. return this.updateById(newT);
  619. }
  620. @Override
  621. @Transactional(rollbackFor = Exception.class)
  622. public Boolean delete(List<Long> ids) {
  623. LambdaQueryWrapper<TextbookSubscriptionItem> textbookSubscriptionItemLambdaQueryWrapper = new LambdaQueryWrapper<>();
  624. textbookSubscriptionItemLambdaQueryWrapper
  625. .in(TextbookSubscriptionItem::getTextbookSubscriptionId, ids)
  626. ;
  627. List<TextbookSubscriptionItem> textbookSubscriptionItemList = textbookSubscriptionTextbookSubscriptionItemMapper.selectList(textbookSubscriptionItemLambdaQueryWrapper);
  628. List<Long> textbookSubscriptionItemIds = textbookSubscriptionItemList.stream()
  629. .map(TextbookSubscriptionItem::getId)
  630. .collect(Collectors.toList());
  631. if(ObjectUtils.isNotEmpty(textbookSubscriptionItemIds)){
  632. textbookSubscriptionItemClassMapper.delete(Wrappers.lambdaQuery(TextbookSubscriptionItemClass.class).in(TextbookSubscriptionItemClass::getTextbookSubscriptionItemId, textbookSubscriptionItemIds));
  633. }
  634. if(ObjectUtils.isNotEmpty(ids)) {
  635. textbookSubscriptionTextbookSubscriptionItemMapper.delete(Wrappers.lambdaQuery(TextbookSubscriptionItem.class).in(TextbookSubscriptionItem::getTextbookSubscriptionId, ids));
  636. textbookSubscriptionClassMapper.delete(Wrappers.lambdaQuery(TextbookSubscriptionClass.class).in(TextbookSubscriptionClass::getTextbookSubscriptionId, ids));
  637. textbookSubscriptionTextbookSubscriptionMapper.deleteBatchIds(ids);
  638. }
  639. return true;
  640. }
  641. @Override
  642. public List<TextbookSubscriptionExportQueryListVo> textbookSubscriptionExportQuery(TextbookSubscriptionExportQueryListDto dto) {
  643. TextbookSubscription textbookSubscription = this.getById(dto.getTextbookSubscriptionId());
  644. if (textbookSubscription == null) {
  645. return null;
  646. }
  647. MPJLambdaWrapper<TextbookSubscriptionItem> textbookSubscriptionItemMPJLambdaWrapper = new MPJLambdaWrapper<>();
  648. textbookSubscriptionItemMPJLambdaWrapper
  649. .selectAs(BaseCourseSubject::getName, TextbookSubscriptionExportQueryListVo::getCourseName)
  650. .selectAs(TextbookSubscriptionItem::getStudentNum, TextbookSubscriptionExportQueryListVo::getStudentSubscriptionNumber)
  651. .selectAs(TextbookSubscriptionItem::getTeacherNum, TextbookSubscriptionExportQueryListVo::getTeacherSubscriptionNumber)
  652. .selectAs(TextbookSubscriptionItem::getInStockNum, TextbookSubscriptionExportQueryListVo::getInStockroomNum)
  653. .selectAs(TextbookSubscription::getBaseClassIds, TextbookSubscriptionExportQueryListVo::getClassIds)
  654. .select("t.student_num + t.teacher_num as subscription_sum")
  655. .select(TextbookSubscriptionItem.class, x -> VoToColumnUtil.fieldsToColumns(TextbookSubscriptionExportQueryListVo.class).contains(x.getProperty()))
  656. .select(Textbook.class, x -> VoToColumnUtil.fieldsToColumns(TextbookSubscriptionExportQueryListVo.class).contains(x.getProperty()))
  657. .leftJoin(TextbookSubscription.class, TextbookSubscription::getId, TextbookSubscriptionItem::getTextbookSubscriptionId)
  658. .leftJoin(Textbook.class, Textbook::getId, TextbookSubscriptionItem::getTextbookId)
  659. .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, Textbook::getTextbookType,
  660. ext -> ext.selectAs(DictionaryDetail::getName, TextbookSubscriptionExportQueryListVo::getTextbookTypeCn))
  661. .leftJoin(BaseCourseSubject.class, BaseCourseSubject::getId, Textbook::getCourseSubjectId)
  662. .eq(TextbookSubscriptionItem::getTextbookSubscriptionId, textbookSubscription.getId())
  663. ;
  664. List<TextbookSubscriptionExportQueryListVo> itemList = textbookSubscriptionTextbookSubscriptionItemMapper.selectJoinList(TextbookSubscriptionExportQueryListVo.class, textbookSubscriptionItemMPJLambdaWrapper);
  665. //处理班级
  666. String classIds = "";
  667. List<String> classIdList = new ArrayList<>();
  668. StringBuilder sb = new StringBuilder();
  669. if (!itemList.isEmpty() && itemList.get(0).getClassIds() != null && !itemList.get(0).getClassIds().equals("")) {
  670. classIds = itemList.get(0).getClassIds();
  671. String[] classIdArr = classIds.split(",");
  672. classIdList = Arrays.asList(classIdArr);
  673. /*if(!classIdList.isEmpty()){
  674. List<BaseClass> baseClassList = baseClassMapper.selectList(Wrappers.<BaseClass>query().lambda().in(BaseClass::getId, classIdList));
  675. Map<Long, BaseClass> baseClassMap = baseClassList.stream()
  676. .collect(Collectors.toMap(BaseClass::getId, baseClass -> baseClass));
  677. for (String classId : classIdList){
  678. BaseClass baseClass = baseClassMap.get(Long.parseLong(classId));
  679. if(baseClass != null){
  680. sb.append(baseClass.getName());
  681. sb.append(",");
  682. }
  683. }
  684. sb.deleteCharAt(sb.length() - 1);
  685. }*/
  686. }
  687. for (TextbookSubscriptionExportQueryListVo w : itemList) {
  688. w.setClassNum(classIdList.size());
  689. }
  690. return itemList;
  691. }
  692. }