WfTextbookClaimServiceImpl.java 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515
  1. package com.xjrsoft.module.textbook.service.impl;
  2. import cn.dev33.satoken.stp.StpUtil;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.core.metadata.IPage;
  5. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  6. import com.github.yulichang.base.MPJBaseServiceImpl;
  7. import com.github.yulichang.wrapper.MPJLambdaWrapper;
  8. import com.xjrsoft.common.enums.ClaimTypeEnum;
  9. import com.xjrsoft.common.enums.DeleteMark;
  10. import com.xjrsoft.common.enums.IssueModeEnum;
  11. import com.xjrsoft.common.enums.RoleEnum;
  12. import com.xjrsoft.common.exception.MyException;
  13. import com.xjrsoft.common.page.ConventPage;
  14. import com.xjrsoft.common.utils.SortCodeUtil;
  15. import com.xjrsoft.common.utils.VoToColumnUtil;
  16. import com.xjrsoft.module.base.entity.BaseClass;
  17. import com.xjrsoft.module.system.entity.DictionaryDetail;
  18. import com.xjrsoft.module.teacher.entity.XjrUser;
  19. import com.xjrsoft.module.teacher.mapper.XjrUserMapper;
  20. import com.xjrsoft.module.textbook.dto.ConfirmDistributeDto;
  21. import com.xjrsoft.module.textbook.dto.DistributePageDto;
  22. import com.xjrsoft.module.textbook.dto.WfTextbookClaimPageDto;
  23. import com.xjrsoft.module.textbook.entity.*;
  24. import com.xjrsoft.module.textbook.mapper.*;
  25. import com.xjrsoft.module.textbook.service.IWfTextbookClaimService;
  26. import com.xjrsoft.module.textbook.vo.*;
  27. import com.xjrsoft.module.workflow.entity.WorkflowFormRelation;
  28. import com.xjrsoft.module.workflow.mapper.WorkflowFormRelationMapper;
  29. import lombok.AllArgsConstructor;
  30. import org.apache.commons.lang3.ObjectUtils;
  31. import org.apache.commons.lang3.StringUtils;
  32. import org.camunda.bpm.engine.history.HistoricProcessInstance;
  33. import org.springframework.stereotype.Service;
  34. import org.springframework.transaction.annotation.Transactional;
  35. import java.math.BigDecimal;
  36. import java.time.LocalDateTime;
  37. import java.time.format.DateTimeFormatter;
  38. import java.util.*;
  39. import java.util.stream.Collectors;
  40. /**
  41. * @title: 教材申领
  42. * @Author szs
  43. * @Date: 2023-12-26
  44. * @Version 1.0
  45. */
  46. @Service
  47. @AllArgsConstructor
  48. public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookClaimMapper, WfTextbookClaim> implements IWfTextbookClaimService {
  49. private final WfTextbookClaimMapper wfTextbookClaimWfTextbookClaimMapper;
  50. private final WfTextbookClaimItemMapper wfTextbookClaimWfTextbookClaimItemMapper;
  51. private final XjrUserMapper xjrUserMapper;
  52. private final TextbookMapper textbookMapper;
  53. private final TextbookSubscriptionItemMapper textbookSubscriptionItemMapper;
  54. private final TextbookIssueRecordMapper textbookIssueRecordMapper;
  55. private final TextbookClaimUserMapper textbookClaimUserMapper;
  56. private final ClaimItemSubscriptionItemMapper claimItemSubscriptionItemMapper;
  57. private final WorkflowFormRelationMapper workflowFormRelationMapper;
  58. private final TextbookWarehouseRecordMapper textbookWarehouseRecordMapper;
  59. @Override
  60. public IPage<DistributePageVo> distributePageVo(DistributePageDto dto) {
  61. MPJLambdaWrapper<WfTextbookClaim> wfTextbookClaimMPJLambdaWrapper = new MPJLambdaWrapper<>();
  62. wfTextbookClaimMPJLambdaWrapper
  63. .disableSubLogicDel()
  64. .select(WfTextbookClaim::getId)
  65. .select(WfTextbookClaim.class,x -> VoToColumnUtil.fieldsToColumns(DistributePageVo.class).contains(x.getProperty()))
  66. .innerJoin(WorkflowFormRelation.class, WorkflowFormRelation::getFormKeyValue, WfTextbookClaim::getId)
  67. .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, WfTextbookClaim::getClaimType,
  68. wrapper -> wrapper
  69. .selectAs(DictionaryDetail::getName, DistributePageVo::getClaimTypeCn)
  70. )
  71. .leftJoin(XjrUser.class, XjrUser::getId, WfTextbookClaim::getApplicantUserId,
  72. wrapper -> wrapper
  73. .selectAs(XjrUser::getName, DistributePageVo::getApplicantUserIdCn)
  74. )
  75. .leftJoin(BaseClass.class, BaseClass::getId, WfTextbookClaim::getClassId,
  76. wrapper -> wrapper
  77. .selectAs(BaseClass::getName, DistributePageVo::getClassIdCn)
  78. )
  79. .eq(WorkflowFormRelation::getCurrentState, HistoricProcessInstance.STATE_COMPLETED)
  80. .eq(WfTextbookClaim::getBaseSemesterId, dto.getBaseSemesterId())
  81. .eq(StringUtils.isNotEmpty(dto.getClaimType()), WfTextbookClaim::getClaimType, dto.getClaimType())
  82. .eq(ObjectUtils.isNotEmpty(dto.getDistributeStatus()), WfTextbookClaim::getStatus, dto.getDistributeStatus())
  83. .ne(ObjectUtils.isEmpty(dto.getDistributeStatus()), WfTextbookClaim::getStatus, 1)
  84. .and(StringUtils.isNotEmpty(dto.getName()),
  85. wrapper -> wrapper
  86. .like(XjrUser::getName, dto.getName())
  87. .or()
  88. .like(BaseClass::getName, dto.getName())
  89. )
  90. ;
  91. IPage<DistributePageVo> page = this.selectJoinListPage(ConventPage.getPage(dto), DistributePageVo.class, wfTextbookClaimMPJLambdaWrapper);
  92. List<DistributePageVo> distributePageVos = page.getRecords();
  93. // 处理申领总数量和已经发放总数量
  94. if(ObjectUtils.isNotEmpty(distributePageVos)){
  95. List<Long> textbookClaimIds = distributePageVos.stream()
  96. .map(DistributePageVo::getId)
  97. .collect(Collectors.toList());
  98. Map<Long, WfTextbookClaimItem> applicantTatolNumberMap = new HashMap<>();
  99. WfTextbookClaimItem wfTextbookClaimItem;
  100. if(ObjectUtils.isNotEmpty(distributePageVos)){
  101. MPJLambdaWrapper<WfTextbookClaimItem> wfTextbookClaimItemLambdaQueryWrapper = new MPJLambdaWrapper<>();
  102. wfTextbookClaimItemLambdaQueryWrapper
  103. .selectAs(WfTextbookClaimItem::getWfTextbookClaimId, WfTextbookClaimItem::getWfTextbookClaimId)
  104. .selectSum(WfTextbookClaimItem::getApplicantNumber, WfTextbookClaimItem::getApplicantNumber)
  105. .selectSum(WfTextbookClaimItem::getIssueNumber, WfTextbookClaimItem::getIssueNumber)
  106. .in(WfTextbookClaimItem::getWfTextbookClaimId, textbookClaimIds)
  107. .groupBy(WfTextbookClaimItem::getWfTextbookClaimId)
  108. ;
  109. List<WfTextbookClaimItem> wfTextbookClaimItemList = wfTextbookClaimWfTextbookClaimItemMapper.selectJoinList(WfTextbookClaimItem.class, wfTextbookClaimItemLambdaQueryWrapper);
  110. if(ObjectUtils.isNotEmpty(wfTextbookClaimItemList)){
  111. applicantTatolNumberMap = wfTextbookClaimItemList.stream()
  112. .collect(Collectors.toMap(WfTextbookClaimItem::getWfTextbookClaimId, w -> w, (w1, w2) -> w1));
  113. }
  114. }
  115. if(ObjectUtils.isNotEmpty(applicantTatolNumberMap)){
  116. for(DistributePageVo distributePageVo : page.getRecords()){
  117. wfTextbookClaimItem = applicantTatolNumberMap.get(distributePageVo.getId());
  118. if(ObjectUtils.isNotEmpty(wfTextbookClaimItem)){
  119. distributePageVo.setApplicantTatolNumber(wfTextbookClaimItem.getApplicantNumber());
  120. distributePageVo.setIssueTatolNumber(wfTextbookClaimItem.getIssueNumber());
  121. }
  122. }
  123. }
  124. }
  125. return page;
  126. }
  127. @Override
  128. @Transactional(rollbackFor = Exception.class)
  129. public Boolean add(WfTextbookClaim wfTextbookClaim) {
  130. wfTextbookClaimWfTextbookClaimMapper.insert(wfTextbookClaim);
  131. for (WfTextbookClaimItem wfTextbookClaimItem : wfTextbookClaim.getWfTextbookClaimItemList()) {
  132. wfTextbookClaimItem.setWfTextbookClaimId(wfTextbookClaim.getId());
  133. wfTextbookClaimWfTextbookClaimItemMapper.insert(wfTextbookClaimItem);
  134. }
  135. return true;
  136. }
  137. @Override
  138. @Transactional(rollbackFor = Exception.class)
  139. public Boolean update(WfTextbookClaim wfTextbookClaim) {
  140. wfTextbookClaimWfTextbookClaimMapper.updateById(wfTextbookClaim);
  141. //********************************* WfTextbookClaimItem 增删改 开始 *******************************************/
  142. {
  143. // 查出所有子级的id
  144. List<WfTextbookClaimItem> wfTextbookClaimItemList = wfTextbookClaimWfTextbookClaimItemMapper.selectList(Wrappers.lambdaQuery(WfTextbookClaimItem.class).eq(WfTextbookClaimItem::getWfTextbookClaimId, wfTextbookClaim.getId()).select(WfTextbookClaimItem::getId));
  145. List<Long> wfTextbookClaimItemIds = wfTextbookClaimItemList.stream().map(WfTextbookClaimItem::getId).collect(Collectors.toList());
  146. //原有子表单 没有被删除的主键
  147. List<Long> wfTextbookClaimItemOldIds = wfTextbookClaim.getWfTextbookClaimItemList().stream().map(WfTextbookClaimItem::getId).filter(Objects::nonNull).collect(Collectors.toList());
  148. //找到需要删除的id
  149. List<Long> wfTextbookClaimItemRemoveIds = wfTextbookClaimItemIds.stream().filter(item -> !wfTextbookClaimItemOldIds.contains(item)).collect(Collectors.toList());
  150. for (WfTextbookClaimItem wfTextbookClaimItem : wfTextbookClaim.getWfTextbookClaimItemList()) {
  151. //如果不等于空则修改
  152. if (wfTextbookClaimItem.getId() != null) {
  153. wfTextbookClaimWfTextbookClaimItemMapper.updateById(wfTextbookClaimItem);
  154. }
  155. //如果等于空 则新增
  156. else {
  157. //已经不存在的id 删除
  158. wfTextbookClaimItem.setWfTextbookClaimId(wfTextbookClaim.getId());
  159. wfTextbookClaimWfTextbookClaimItemMapper.insert(wfTextbookClaimItem);
  160. }
  161. }
  162. //已经不存在的id 删除
  163. if (wfTextbookClaimItemRemoveIds.size() > 0) {
  164. wfTextbookClaimWfTextbookClaimItemMapper.deleteBatchIds(wfTextbookClaimItemRemoveIds);
  165. }
  166. }
  167. //********************************* WfTextbookClaimItem 增删改 结束 *******************************************/
  168. return true;
  169. }
  170. @Override
  171. @Transactional(rollbackFor = Exception.class)
  172. public Boolean delete(List<Long> ids) {
  173. wfTextbookClaimWfTextbookClaimMapper.deleteBatchIds(ids);
  174. wfTextbookClaimWfTextbookClaimItemMapper.delete(Wrappers.lambdaQuery(WfTextbookClaimItem.class).in(WfTextbookClaimItem::getWfTextbookClaimId, ids));
  175. return true;
  176. }
  177. @Override
  178. public IPage<WfTextbookClaimPageVo> getPage(WfTextbookClaimPageDto dto) {
  179. dto.setUserId(StpUtil.getLoginIdAsLong());
  180. IPage<WfTextbookClaimPageVo> page = wfTextbookClaimWfTextbookClaimMapper.getPage(ConventPage.getPage(dto), dto);
  181. for (WfTextbookClaimPageVo wfTextbookClaimPageVo : page.getRecords()) {
  182. //拆分代领取人
  183. String receiveUserIdStr = wfTextbookClaimPageVo.getReceiveUserId();
  184. if (ObjectUtils.isNotEmpty(receiveUserIdStr) && !receiveUserIdStr.isEmpty()) {
  185. String[] receiveUserIdStrs = receiveUserIdStr.split(",");
  186. List<Long> receiveUserIdList = new ArrayList<>();
  187. for (String str : receiveUserIdStrs) {
  188. receiveUserIdList.add(Long.parseLong(str));
  189. }
  190. LambdaQueryWrapper<XjrUser> queryWrapper = new LambdaQueryWrapper<>();
  191. queryWrapper
  192. .in(XjrUser::getId, receiveUserIdList);
  193. List<XjrUser> xjrUserList = xjrUserMapper.selectList(queryWrapper);
  194. if (ObjectUtils.isNotEmpty(xjrUserList) && !xjrUserList.isEmpty()) {
  195. StringBuilder sb = new StringBuilder();
  196. for (int i = 0; i < xjrUserList.size(); i++) {
  197. if(i == 0){
  198. sb.append(xjrUserList.get(i).getName());
  199. }else{
  200. sb.append(",").append(xjrUserList.get(i).getName());
  201. }
  202. }
  203. wfTextbookClaimPageVo.setReceiveUserIdCN(sb.toString());
  204. }
  205. }
  206. //加上申领项
  207. List<WfTextbookClaimItemVo> wfTextbookClaimItemVoList = wfTextbookClaimWfTextbookClaimItemMapper.getListByWfTextbookClaimId(Long.parseLong(wfTextbookClaimPageVo.getId()));
  208. if (ObjectUtils.isNotEmpty(wfTextbookClaimItemVoList) && !wfTextbookClaimItemVoList.isEmpty()) {
  209. wfTextbookClaimPageVo.setWfTextbookClaimItemList(wfTextbookClaimItemVoList);
  210. }
  211. }
  212. return page;
  213. }
  214. @Override
  215. public WfTextbookClaimVo infoDistribute(Long id) {
  216. WfTextbookClaimVo wfTextbookClaimVo = wfTextbookClaimWfTextbookClaimMapper.infoDistribute(id);
  217. if (ObjectUtils.isNotEmpty(wfTextbookClaimVo)) {
  218. //拆分代领人
  219. String receiveUserIdStr = wfTextbookClaimVo.getReceiveUserId();
  220. if (ObjectUtils.isNotEmpty(receiveUserIdStr) && !receiveUserIdStr.equals("")) {
  221. String[] receiveUserIdStrs = receiveUserIdStr.split(",");
  222. List<Long> receiveUserIdList = new ArrayList<>();
  223. for (String str : receiveUserIdStrs) {
  224. receiveUserIdList.add(Long.parseLong(str));
  225. }
  226. LambdaQueryWrapper<XjrUser> queryWrapper = new LambdaQueryWrapper<>();
  227. queryWrapper
  228. .in(XjrUser::getId, receiveUserIdList);
  229. List<XjrUser> xjrUserList = xjrUserMapper.selectList(queryWrapper);
  230. if (ObjectUtils.isNotEmpty(xjrUserList) && !xjrUserList.isEmpty()) {
  231. StringBuilder sb = new StringBuilder();
  232. for (XjrUser xjrUser : xjrUserList) {
  233. sb.append(",").append(xjrUser.getName());
  234. }
  235. wfTextbookClaimVo.setReceiveUserIdCN(sb.toString());
  236. }
  237. }
  238. //加上申领项
  239. List<WfTextbookClaimItemVo> wfTextbookClaimItemVoList = wfTextbookClaimWfTextbookClaimItemMapper.getListByWfTextbookClaimId(Long.parseLong(wfTextbookClaimVo.getId()));
  240. if (ObjectUtils.isNotEmpty(wfTextbookClaimItemVoList) && wfTextbookClaimItemVoList.size() > 0) {
  241. wfTextbookClaimVo.setWfTextbookClaimItemList(wfTextbookClaimItemVoList);
  242. }
  243. }
  244. return wfTextbookClaimVo;
  245. }
  246. @Override
  247. @Transactional(rollbackFor = Exception.class)
  248. public Boolean confirmDistribute(ConfirmDistributeDto dto) {
  249. WfTextbookClaim wfTextbookClaim = this.getByIdDeep(dto.getTextbookClaimId());
  250. List<WfTextbookClaimItem> wfTextbookClaimItemList = wfTextbookClaim.getWfTextbookClaimItemList();
  251. // 获取所有入库记录
  252. List<TextbookWarehouseRecord> textbookWarehouseRecordList = textbookWarehouseRecordMapper.selectList(
  253. Wrappers.lambdaQuery(TextbookWarehouseRecord.class)
  254. .eq(TextbookWarehouseRecord::getDeleteMark, DeleteMark.NODELETE.getCode())
  255. );
  256. Map<Long, TextbookWarehouseRecord> textbookWarehouseRecordMap = textbookWarehouseRecordList.stream()
  257. .collect(Collectors.toMap(TextbookWarehouseRecord::getId, t -> t, (t1,t2) -> t1));
  258. if (ObjectUtils.isEmpty(wfTextbookClaim)
  259. || ObjectUtils.isEmpty(dto.getTextbookClaimItemList())
  260. || dto.getTextbookClaimItemList().isEmpty()
  261. || wfTextbookClaimItemList.isEmpty()
  262. ) {
  263. throw new MyException("未找到申领数据");
  264. }
  265. Map<Long, WfTextbookClaimItem> wfTextbookClaimItemMap = wfTextbookClaimItemList.stream()
  266. .collect(Collectors.toMap(WfTextbookClaimItem::getId, w -> w, (w1, w2) -> w1));
  267. // 处理出库单号
  268. StringBuilder sb = new StringBuilder();
  269. sb.append("CK");
  270. LocalDateTime now = LocalDateTime.now();
  271. DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
  272. String nowStr = now.format(dateTimeFormatter);
  273. sb.append(nowStr);
  274. int oldOrderInteger = 0;
  275. int oldOrderLastInteger = 0;
  276. //操作每一个申领项
  277. for (ConfirmDistributeDto.TextbookClaimItem textbookClaimItem : dto.getTextbookClaimItemList()) {
  278. // WfTextbookClaimItem wfTextbookClaimItem = wfTextbookClaimWfTextbookClaimItemMapper.selectById(textbookClaimItem.getTextbookClaimItemId());
  279. WfTextbookClaimItem wfTextbookClaimItem = wfTextbookClaimItemMap.get(textbookClaimItem.getTextbookClaimItemId());
  280. if (ObjectUtils.isEmpty(wfTextbookClaimItem)) {
  281. throw new MyException("未找到申领项详细数据");
  282. }
  283. //判断总发放数量是否超出该申请项的申请数量
  284. int issueNumber = ObjectUtils.isEmpty(wfTextbookClaimItem.getIssueNumber()) ? 0 : wfTextbookClaimItem.getIssueNumber();//已发放
  285. int applicantNumber = ObjectUtils.isEmpty(wfTextbookClaimItem.getApplicantNumber()) ? 0 : wfTextbookClaimItem.getApplicantNumber();//申领总数量
  286. int confirmNumber = ObjectUtils.isEmpty(textbookClaimItem.getConfirmTotalNumber()) ? 0 : textbookClaimItem.getConfirmTotalNumber();//本次发放
  287. if (issueNumber + confirmNumber > applicantNumber) {
  288. throw new MyException(textbookClaimItem.getTextbookIdCn() + "发放总数量超出申领数量");
  289. }
  290. TextbookIssueRecord textbookIssueRecord;
  291. for (ConfirmDistributeDto.TextbookWarehouseRecords textbookWarehouseRecords : textbookClaimItem.getTextbookWarehouseRecords()){
  292. TextbookWarehouseRecord textbookWarehouseRecord = textbookWarehouseRecordMap.get(textbookWarehouseRecords.getTextbookWarehouseRecordId());
  293. if (ObjectUtils.isEmpty(textbookWarehouseRecord)) {
  294. throw new MyException("未找到入库详细数据");
  295. }
  296. //更新教材入库中的的库存数量
  297. textbookWarehouseRecordMapper.updateById(new TextbookWarehouseRecord() {{
  298. setModifyUserId(StpUtil.getLoginIdAsLong());
  299. setModifyDate(new Date());
  300. setId(textbookWarehouseRecord.getId());
  301. setIssuedNumber(ObjectUtils.isEmpty(textbookWarehouseRecord.getIssuedNumber()) ? 0 : textbookWarehouseRecord.getIssuedNumber()
  302. + confirmNumber);
  303. setRemainNumber(ObjectUtils.isEmpty(textbookWarehouseRecord.getRemainNumber()) ? 0 : textbookWarehouseRecord.getRemainNumber()
  304. - confirmNumber
  305. );
  306. }});
  307. oldOrderInteger += 1;
  308. String newOrder = String.format("%03d", oldOrderInteger); // 补零并格式化为三位数
  309. String oldPrex = sb + newOrder + "-";
  310. //增加出库记录
  311. textbookIssueRecord = new TextbookIssueRecord();
  312. textbookIssueRecord.setBaseSemesterId(wfTextbookClaim.getBaseSemesterId());
  313. // 处理出库单号
  314. // 根据当前申领项主键id和入库主键id查找时候已经有了出库记录
  315. LambdaQueryWrapper<TextbookIssueRecord> maxOrderNumberLambdaQueryWrapper = new LambdaQueryWrapper<>();
  316. maxOrderNumberLambdaQueryWrapper
  317. .eq(TextbookIssueRecord::getDataItemId, wfTextbookClaimItem.getId())
  318. .eq(TextbookIssueRecord::getTextbookWarehouseRecordId, textbookWarehouseRecord.getId())
  319. .eq(TextbookIssueRecord::getDeleteMark, DeleteMark.NODELETE.getCode())
  320. .orderByDesc(TextbookIssueRecord::getOrderNumber)
  321. .last("limit 1")
  322. ;
  323. TextbookIssueRecord maxOrderNumber = textbookIssueRecordMapper.selectOne(maxOrderNumberLambdaQueryWrapper);
  324. if(ObjectUtils.isNotEmpty(maxOrderNumber)
  325. && ObjectUtils.isNotEmpty(maxOrderNumber.getOrderNumber())
  326. ){
  327. String oldOrderNumber = maxOrderNumber.getOrderNumber();
  328. oldPrex = oldOrderNumber.substring(0, oldOrderNumber.length() - 3);
  329. oldOrderInteger -= 1;
  330. String oldOrder = oldOrderNumber.substring(oldOrderNumber.length() - 3);
  331. oldOrderLastInteger = Integer.parseInt(oldOrder);
  332. }
  333. oldOrderLastInteger += 1;
  334. String newLastOrder = String.format("%03d", oldOrderLastInteger); // 补零并格式化为三位数
  335. textbookIssueRecord.setOrderNumber(oldPrex + newLastOrder);
  336. if (ObjectUtils.isNotEmpty(wfTextbookClaim.getClaimType())
  337. && wfTextbookClaim.getClaimType().equals(ClaimTypeEnum.ClaimStudent.getCode())
  338. && wfTextbookClaim.getClaimType().equals(ClaimTypeEnum.ClaimClass.getCode())
  339. ) {
  340. textbookIssueRecord.setIssueMode(IssueModeEnum.Imtudent.getCode());
  341. }
  342. if (ObjectUtils.isNotEmpty(wfTextbookClaim.getClaimType())
  343. && wfTextbookClaim.getClaimType().equals(ClaimTypeEnum.ClaimTeacher.getCode())
  344. ) {
  345. textbookIssueRecord.setIssueMode(IssueModeEnum.ImTeacher.getCode());
  346. }
  347. textbookIssueRecord.setDataId(wfTextbookClaim.getId());
  348. textbookIssueRecord.setDataItemId(wfTextbookClaimItem.getId());
  349. textbookIssueRecord.setTextbookId(wfTextbookClaimItem.getTextbookId());
  350. textbookIssueRecord.setIssueNumber(confirmNumber);
  351. textbookIssueRecord.setRecedeNumber(0);
  352. textbookIssueRecord.setActualIssueNumber(confirmNumber);
  353. textbookIssueRecord.setActualTotalPrice(textbookWarehouseRecord.getSubtotal().multiply(BigDecimal.valueOf(confirmNumber)));
  354. if(ObjectUtils.isNotEmpty(dto.getReceiveUserId())){
  355. textbookIssueRecord.setReceiveUserId(dto.getReceiveUserId());
  356. }else {
  357. textbookIssueRecord.setReceiveUserId(StpUtil.getLoginIdAsLong());
  358. }
  359. textbookIssueRecord.setIssueUserId(StpUtil.getLoginIdAsLong());
  360. textbookIssueRecord.setCreateDate(new Date());;
  361. textbookIssueRecord.setRemark(dto.getRemark());
  362. int sortCode = SortCodeUtil.getMaxSortCode(textbookIssueRecordMapper, TextbookIssueRecord.class, "sort_code");
  363. textbookIssueRecord.setSortCode(sortCode + 1);
  364. textbookIssueRecordMapper.insert(textbookIssueRecord);
  365. }
  366. //更新申领项中的已经发放数量
  367. wfTextbookClaimWfTextbookClaimItemMapper.updateById(new WfTextbookClaimItem() {{
  368. setModifyUserId(StpUtil.getLoginIdAsLong());
  369. setModifyDate(new Date());
  370. setId(wfTextbookClaimItem.getId());
  371. setIssueNumber(issueNumber + confirmNumber);
  372. }});
  373. // 当申领类型为学生的时候,为班级每个学生生成领取(确认信息)认领记录
  374. // if (ObjectUtil.isNotNull(wfTextbookClaim.getClaimType()) && wfTextbookClaim.getClaimType().equals(ClaimTypeEnum.ClaimStudent.getCode())) {
  375. // //查出班上的所有学生id
  376. // List<Long> userIdList = xjrUserMapper.getUserIdByClassId(wfTextbookClaim.getClassId());
  377. //
  378. // if (ObjectUtil.isNull(userIdList) && userIdList.size() == 0) {
  379. // throw new MyException("申领班级有误,请核实");
  380. // }
  381. // //验证当前领取教材是否已经生成领取记录
  382. // LambdaQueryWrapper<TextbookStudentClaim> queryWrapperRecord = new LambdaQueryWrapper<>();
  383. // queryWrapperRecord
  384. // .eq(TextbookStudentClaim::getTextbookId, wfTextbookClaimItem.getTextbookId())
  385. // .eq(TextbookStudentClaim::getClassId, wfTextbookClaim.getClassId());
  386. // Long count = textbookStudentClaimMapper.selectCount(queryWrapperRecord);
  387. // //为0的时候表示该班级该书没有生成领取记录
  388. // if(count <= 0){
  389. // for (Long userId : userIdList) {
  390. // textbookStudentClaimMapper.insert(new TextbookStudentClaim() {{
  391. // setCreateUserId(StpUtil.getLoginIdAsLong());
  392. // setCreateDate(new Date());
  393. // setStudentUserId(userId);
  394. // setBaseSemesterId(wfTextbookClaim.getBaseSemesterId());
  395. // setClassId(wfTextbookClaim.getClassId());
  396. // setTextbookId(wfTextbookClaimItem.getTextbookId());
  397. // }});
  398. // }
  399. // }
  400. // }
  401. }
  402. return true;
  403. }
  404. @Override
  405. @Transactional
  406. public Boolean dataHandleAddClaimUserNode(Long id) {
  407. WfTextbookClaim wfTextbookClaim = this.getById(id);
  408. // 根据数据id找到所在流程得状态
  409. WorkflowFormRelation workflowFormRelation = workflowFormRelationMapper.selectOne(
  410. Wrappers.lambdaQuery(WorkflowFormRelation.class)
  411. .eq(WorkflowFormRelation::getFormKeyValue, id)
  412. );
  413. if (ObjectUtils.isNotEmpty(wfTextbookClaim)
  414. && ObjectUtils.isNotEmpty(wfTextbookClaim.getClaimType())
  415. && ObjectUtils.isNotEmpty(workflowFormRelation)
  416. && HistoricProcessInstance.STATE_COMPLETED.equals(workflowFormRelation.getCurrentState())
  417. ) {
  418. //所有需要添加的可领取人ID
  419. List<TextbookClaimUser> textbookClaimUserList = new ArrayList<>();
  420. List<String> roleList = StpUtil.getRoleList();
  421. //申领人自己可以领取
  422. textbookClaimUserList.add(new TextbookClaimUser() {{
  423. setCreateDate(new Date());
  424. setWfTextbookClaimId(wfTextbookClaim.getId());
  425. setUserId(wfTextbookClaim.getApplicantUserId());
  426. if(roleList.contains(RoleEnum.TEACHER.getCode().toString())){
  427. setUserType(2);
  428. }
  429. if(roleList.contains(RoleEnum.STUDENT.getCode().toString())){
  430. setUserType(1);
  431. }
  432. }});
  433. //申领类型是班级申领,学生代表可领取
  434. if (ClaimTypeEnum.ClaimClass.getCode().equals(wfTextbookClaim.getClaimType())
  435. && !Objects.equals(wfTextbookClaim.getApplicantUserId(), wfTextbookClaim.getStudentUserId())
  436. ) {
  437. textbookClaimUserList.add(new TextbookClaimUser() {{
  438. setCreateDate(new Date());
  439. setWfTextbookClaimId(wfTextbookClaim.getId());
  440. setUserId(wfTextbookClaim.getStudentUserId());
  441. setUserType(1);
  442. }});
  443. }
  444. //申领类型是教师申领,领取人可领取
  445. if (ClaimTypeEnum.ClaimTeacher.getCode().equals(wfTextbookClaim.getClaimType())
  446. && ObjectUtils.isNotEmpty(wfTextbookClaim.getApplicantUserId())
  447. && ObjectUtils.isNotEmpty(wfTextbookClaim.getClaimUserId())
  448. && !wfTextbookClaim.getApplicantUserId().equals(wfTextbookClaim.getClaimUserId())
  449. ) {
  450. textbookClaimUserList.add(new TextbookClaimUser() {{
  451. setCreateDate(new Date());
  452. setWfTextbookClaimId(wfTextbookClaim.getId());
  453. setUserId(wfTextbookClaim.getClaimUserId());
  454. setUserType(2);
  455. }});
  456. }
  457. for (TextbookClaimUser textbookClaimUser : textbookClaimUserList) {
  458. textbookClaimUserMapper.insert(textbookClaimUser);
  459. }
  460. }
  461. return true;
  462. }
  463. }