Procházet zdrojové kódy

2.申领详情记录列表,发放记录

大数据与最优化研究所 před 5 měsíci
rodič
revize
56acf37214

+ 99 - 84
src/main/java/com/xjrsoft/module/textbook/service/impl/WfTextbookClaimServiceImpl.java

@@ -45,6 +45,7 @@ import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -74,6 +75,7 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
 
     @Override
     public IPage<DistributePageVo> distributePage(DistributePageDto dto) {
+        // 申领主表记录
         MPJLambdaWrapper<WfTextbookClaim> wfTextbookClaimMPJLambdaWrapper = new MPJLambdaWrapper<>();
         wfTextbookClaimMPJLambdaWrapper
                 .disableSubLogicDel()
@@ -100,7 +102,6 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
                                 .selectAs(XjrUser::getName, DistributePageVo::getStudentUserIdCn)
                 )
                 .eq(WfTextbookClaim::getBaseSemesterId, dto.getBaseSemesterId())
-                .eq(WfTextbookClaim::getWorkflowStatus, 1)
                 .eq(StringUtils.isNotEmpty(dto.getClaimType()), WfTextbookClaim::getClaimType, dto.getClaimType())
                 .and(StringUtils.isNotEmpty(dto.getName()),
                         wrapper -> wrapper
@@ -109,7 +110,10 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
                                 .like(BaseClass::getName, dto.getName())
                 )
         ;
+
+        // 发放状态(是否有过发放(1:未发放,2:部分发放,3:全部发放,4:有发放))
         if (ObjectUtils.isNotEmpty(dto.getDistributeStatus())) {
+            // 有发放,除了未发放其他所有的状态
             if (dto.getDistributeStatus() == 4) {
                 wfTextbookClaimMPJLambdaWrapper
                         .ne(WfTextbookClaim::getStatus, 1)
@@ -119,8 +123,9 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
                         .eq(WfTextbookClaim::getStatus, dto.getDistributeStatus())
                 ;
             }
-
         }
+
+        // 流程状态(0:未结束,1:已结束,正常通过,2:已结束,未通过,3:作废)
         if (ObjectUtils.isNotEmpty(dto.getWorkflowStatus())) {
             wfTextbookClaimMPJLambdaWrapper
                     .eq(WfTextbookClaim::getWorkflowStatus, dto.getWorkflowStatus())
@@ -134,85 +139,95 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
                     )
             ;
         }
-        IPage<DistributePageVo> page = this.selectJoinListPage(ConventPage.getPage(dto), DistributePageVo.class, wfTextbookClaimMPJLambdaWrapper);
-
-        List<DistributePageVo> distributePageVos = page.getRecords();
 
-        // 处理申领总数量和已经发放总数量
-        if (ObjectUtils.isNotEmpty(distributePageVos)) {
-            List<Long> textbookClaimIds = distributePageVos.stream()
-                    .map(DistributePageVo::getId)
-                    .collect(Collectors.toList());
-            Map<Long, WfTextbookClaimItem> applicantTatolNumberMap = new HashMap<>();
-
-            // 处理所有的子项
-            Map<Long, List<DistributeRecordVo>> distributeRecordVoMap = new HashMap<>();
+        IPage<DistributePageVo> page = this.selectJoinListPage(ConventPage.getPage(dto), DistributePageVo.class, wfTextbookClaimMPJLambdaWrapper);
 
-            WfTextbookClaimItem wfTextbookClaimItem;
-            List<DistributeRecordVo> distributeRecordVoList;
-            if (ObjectUtils.isNotEmpty(textbookClaimIds)) {
-                MPJLambdaWrapper<WfTextbookClaimItem> wfTextbookClaimItemVoLambdaQueryWrapper = new MPJLambdaWrapper<>();
-                wfTextbookClaimItemVoLambdaQueryWrapper
-                        .disableSubLogicDel()
-                        .select(WfTextbookClaimItem::getId)
-                        .select(WfTextbookClaimItem.class, x -> VoToColumnUtil.fieldsToColumns(DistributeRecordVo.class).contains(x.getProperty()))
-                        .leftJoin(Textbook.class, Textbook::getId, WfTextbookClaimItem::getTextbookId,
-                        wrapper -> wrapper
+        // 当申领记录为空
+        List<DistributePageVo> records = page.getRecords();
+
+
+        List<Long> claimIds = records.stream()
+                .map(DistributePageVo::getId)
+                .collect(Collectors.toList());
+
+        // 查询统计数据
+        MPJLambdaWrapper<WfTextbookClaimItem> statsWrapper = new MPJLambdaWrapper<>();
+        statsWrapper
+                .selectAs(WfTextbookClaimItem::getWfTextbookClaimId, WfTextbookClaimItem::getWfTextbookClaimId)
+                .selectSum(WfTextbookClaimItem::getApplicantNumber, WfTextbookClaimItem::getApplicantNumber)
+                .selectSum(WfTextbookClaimItem::getIssueNumber, WfTextbookClaimItem::getIssueNumber)
+                .in(WfTextbookClaimItem::getWfTextbookClaimId, claimIds)
+                .groupBy(WfTextbookClaimItem::getWfTextbookClaimId);
+
+        List<WfTextbookClaimItem> statsList = wfTextbookClaimWfTextbookClaimItemMapper.selectJoinList(WfTextbookClaimItem.class, statsWrapper);
+        Map<Long, WfTextbookClaimItem> statsMap = statsList.stream()
+                .collect(Collectors.toMap(
+                        WfTextbookClaimItem::getWfTextbookClaimId,
+                        Function.identity(),
+                        (w1, w2) -> w1)); // 可视情况记录冲突日志
+
+        // 查询子项数据
+        MPJLambdaWrapper<WfTextbookClaimItem> itemWrapper = new MPJLambdaWrapper<>();
+        itemWrapper.disableSubLogicDel()
+                .select(WfTextbookClaimItem::getId)
+                .selectAs(WfTextbookClaimItem::getApplicantNumber, WfTextbookClaimItemVo::getApplicantNumber)
+                .selectAs(WfTextbookClaimItem::getIssueNumber, WfTextbookClaimItemVo::getIssueNumber)
+                .select(WfTextbookClaimItem.class, x -> VoToColumnUtil.fieldsToColumns(WfTextbookClaimItemVo.class).contains(x.getProperty()))
+                .leftJoin(Textbook.class, Textbook::getId, WfTextbookClaimItem::getTextbookId,
+                        w -> w
                                 .selectAs(Textbook::getBookName, DistributeRecordVo::getTextbookIdCn)
-                                .selectAs(Textbook::getIssn, DistributeRecordVo::getIssn)
-                        )
-                        .leftJoin(TextbookIssueRecord.class, TextbookIssueRecord::getDataItemId, WfTextbookClaimItem::getId,
-                                wrapper -> wrapper
-                                        .selectAs(TextbookIssueRecord::getCreateDate, DistributeRecordVo::getIssueDate)
-                                        .selectAs(TextbookIssueRecord::getIssueNumber, DistributeRecordVo::getIssueNumber)
-                                        .selectAs(TextbookIssueRecord::getOrderNumber, DistributeRecordVo::getOrderNumber)
-                                        .selectAs(TextbookIssueRecord::getRemark, DistributeRecordVo::getRemark)
-                                        .leftJoin(XjrUser.class, XjrUser::getId, TextbookIssueRecord::getIssueUserId,
-                                                wrap -> wrap
-                                                        .selectAs(XjrUser::getName, DistributeRecordVo::getIssueUser)
-                                        )
-                        )
-                        .in(WfTextbookClaimItem::getWfTextbookClaimId, textbookClaimIds)
-                ;
-                List<DistributeRecordVo> distributeRecordVos = wfTextbookClaimWfTextbookClaimItemMapper.selectJoinList(DistributeRecordVo.class, wfTextbookClaimItemVoLambdaQueryWrapper);
-                if (ObjectUtils.isNotEmpty(distributeRecordVos)) {
-                    distributeRecordVoMap = distributeRecordVos.stream()
-                            .collect(Collectors.groupingBy(DistributeRecordVo::getWfTextbookClaimId))
-                    ;
-                }
-
-                MPJLambdaWrapper<WfTextbookClaimItem> wfTextbookClaimItemLambdaQueryWrapper = new MPJLambdaWrapper<>();
-                wfTextbookClaimItemLambdaQueryWrapper
-                        .selectAs(WfTextbookClaimItem::getWfTextbookClaimId, WfTextbookClaimItem::getWfTextbookClaimId)
-                        .selectSum(WfTextbookClaimItem::getApplicantNumber, WfTextbookClaimItem::getApplicantNumber)
-                        .selectSum(WfTextbookClaimItem::getIssueNumber, WfTextbookClaimItem::getIssueNumber)
-                        .in(WfTextbookClaimItem::getWfTextbookClaimId, textbookClaimIds)
-                        .groupBy(WfTextbookClaimItem::getWfTextbookClaimId)
-                ;
-                List<WfTextbookClaimItem> wfTextbookClaimItemList = wfTextbookClaimWfTextbookClaimItemMapper.selectJoinList(WfTextbookClaimItem.class, wfTextbookClaimItemLambdaQueryWrapper);
-                if (ObjectUtils.isNotEmpty(wfTextbookClaimItemList)) {
-                    applicantTatolNumberMap = wfTextbookClaimItemList.stream()
-                            .collect(Collectors.toMap(WfTextbookClaimItem::getWfTextbookClaimId, w -> w, (w1, w2) -> w1));
-                }
-            }
-            if (ObjectUtils.isNotEmpty(applicantTatolNumberMap)) {
-                for (DistributePageVo distributePageVo : page.getRecords()) {
-                    wfTextbookClaimItem = applicantTatolNumberMap.get(distributePageVo.getId());
-                    if (ObjectUtils.isNotEmpty(wfTextbookClaimItem)) {
-                        distributePageVo.setApplicantTatolNumber(wfTextbookClaimItem.getApplicantNumber());
-                        distributePageVo.setIssueTatolNumber(wfTextbookClaimItem.getIssueNumber());
-                    }
-                }
+                                .selectAs(Textbook::getIssn, DistributeRecordVo::getIssn))
+                .in(WfTextbookClaimItem::getWfTextbookClaimId, claimIds);
+
+        List<WfTextbookClaimItemVo> itemList = wfTextbookClaimWfTextbookClaimItemMapper.selectJoinList(WfTextbookClaimItemVo.class, itemWrapper);
+        Map<Long, List<WfTextbookClaimItemVo>> itemMap = itemList.stream()
+                .collect(Collectors.groupingBy(WfTextbookClaimItemVo::getWfTextbookClaimId));
+
+        // 查询发放记录
+        MPJLambdaWrapper<TextbookIssueRecord> recordWrapper = new MPJLambdaWrapper<>();
+        recordWrapper.disableSubLogicDel()
+                .selectAs(TextbookIssueRecord::getDataId, DistributeRecordVo::getWfTextbookClaimId)
+                .selectAs(TextbookIssueRecord::getDataItemId, DistributeRecordVo::getWfTextbookClaimItemId)
+                .selectAs(TextbookIssueRecord::getCreateDate, DistributeRecordVo::getIssueDate)
+                .selectAs(TextbookIssueRecord::getIssueNumber, DistributeRecordVo::getIssueNumber)
+                .selectAs(TextbookIssueRecord::getOrderNumber, DistributeRecordVo::getOrderNumber)
+                .selectAs(TextbookIssueRecord::getRemark, DistributeRecordVo::getRemark)
+                .leftJoin(Textbook.class, Textbook::getId, TextbookIssueRecord::getTextbookId,
+                        w -> w
+                                .selectAs(Textbook::getBookName, DistributeRecordVo::getTextbookIdCn)
+                                .selectAs(Textbook::getIssn, DistributeRecordVo::getIssn))
+                .leftJoin(XjrUser.class, XjrUser::getId, TextbookIssueRecord::getIssueUserId,
+                        w -> w
+                                .selectAs(XjrUser::getName, DistributeRecordVo::getIssueUser))
+                .in(TextbookIssueRecord::getDataId, claimIds);
+
+        List<DistributeRecordVo> recordList = textbookIssueRecordMapper.selectJoinList(DistributeRecordVo.class, recordWrapper);
+        Map<Long, List<DistributeRecordVo>> recordMap = recordList.stream()
+                .collect(Collectors.groupingBy(DistributeRecordVo::getWfTextbookClaimItemId));
+
+        // 组装数据
+        for (DistributePageVo vo : records) {
+            Long claimId = vo.getId();
+
+            // 填充统计信息
+            if (MapUtils.isNotEmpty(statsMap) && statsMap.containsKey(claimId)) {
+                WfTextbookClaimItem stat = statsMap.get(claimId);
+                vo.setApplicantTatolNumber(stat.getApplicantNumber());
+                vo.setIssueTatolNumber(stat.getIssueNumber());
             }
-            if (MapUtils.isNotEmpty(distributeRecordVoMap)) {
-                for (DistributePageVo distributePageVo : page.getRecords()) {
-                    distributeRecordVoList = distributeRecordVoMap.get(distributePageVo.getId());
-                    if(CollectionUtils.isNotEmpty(distributeRecordVoList)){
-                        distributePageVo.setDistributeRecordVos(distributeRecordVoList);
+
+            // 填充子项及发放记录
+            if (MapUtils.isNotEmpty(itemMap) && CollectionUtils.isNotEmpty(itemMap.get(claimId))) {
+                List<WfTextbookClaimItemVo> items = itemMap.get(claimId);
+                for (WfTextbookClaimItemVo item : items) {
+                    if (recordMap.containsKey(item.getId())) {
+                        item.setDistributeRecordVos(recordMap.get(item.getId()));
                     }
                 }
+                vo.setWfTextbookClaimItemVoList(items);
             }
         }
+
         return page;
     }
 
@@ -828,7 +843,7 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
             if (MapUtils.isNotEmpty(wfTextbookClaimItemVoMap)) {
                 for (ClaimRecordsExportQueryVo vo : dataList) {
                     wfTextbookClaimItemVoList = wfTextbookClaimItemVoMap.get(vo.getId());
-                    if(CollectionUtils.isNotEmpty(wfTextbookClaimItemVoList)){
+                    if (CollectionUtils.isNotEmpty(wfTextbookClaimItemVoList)) {
                         vo.setWfTextbookClaimItemVoList(wfTextbookClaimItemVoList);
                     }
                 }
@@ -897,17 +912,17 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
         // 构建数据
         List<List<String>> result;
         List<String> oneResult;
-        for (ClaimRecordsExportQueryVo vo : dataList){
+        for (ClaimRecordsExportQueryVo vo : dataList) {
             result = new ArrayList<>();
-            if(CollectionUtils.isNotEmpty(vo.getWfTextbookClaimItemVoList())){
-                for (WfTextbookClaimItemVo item : vo.getWfTextbookClaimItemVoList()){
+            if (CollectionUtils.isNotEmpty(vo.getWfTextbookClaimItemVoList())) {
+                for (WfTextbookClaimItemVo item : vo.getWfTextbookClaimItemVoList()) {
                     oneResult = new ArrayList<>();
                     oneResult.add(vo.getBaseSemesterIdCn());
                     oneResult.add(vo.getClaimTypeCn());
                     oneResult.add(vo.getReceiver());
-                    if(StringUtils.isNotEmpty(vo.getClassIdCn())){
+                    if (StringUtils.isNotEmpty(vo.getClassIdCn())) {
                         oneResult.add(vo.getClassIdCn());
-                    }else {
+                    } else {
                         oneResult.add("无");
                     }
                     oneResult.add(vo.getApplicantTatolNumber() + "");
@@ -919,14 +934,14 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
                     oneResult.add(item.getIssueNumber() + "");
                     result.add(oneResult);
                 }
-            }else {
+            } else {
                 oneResult = new ArrayList<>();
                 oneResult.add(vo.getBaseSemesterIdCn());
                 oneResult.add(vo.getClaimTypeCn());
                 oneResult.add(vo.getReceiver());
-                if(StringUtils.isNotEmpty(vo.getClassIdCn())){
+                if (StringUtils.isNotEmpty(vo.getClassIdCn())) {
                     oneResult.add(vo.getClassIdCn());
-                }else {
+                } else {
                     oneResult.add("无");
                 }
                 oneResult.add(vo.getApplicantTatolNumber() + "");
@@ -948,8 +963,8 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
                 rowNumber++;
             }
 
-            if(rowNumber - startRowNumber > 1){
-                for (int k = 0; k < 7; k++){
+            if (rowNumber - startRowNumber > 1) {
+                for (int k = 0; k < 7; k++) {
                     sheet.addMergedRegion(new CellRangeAddress(startRowNumber, rowNumber - 1, k, k));
                 }
             }

+ 0 - 3
src/main/java/com/xjrsoft/module/textbook/vo/DistributePageVo.java

@@ -65,7 +65,4 @@ public class DistributePageVo {
 
     @ApiModelProperty("申领子项集合")
     List<WfTextbookClaimItemVo> wfTextbookClaimItemVoList;
-
-    @ApiModelProperty("申领子项集合(附带领取情况)")
-    List<DistributeRecordVo> distributeRecordVos;
 }

+ 5 - 0
src/main/java/com/xjrsoft/module/textbook/vo/DistributeRecordVo.java

@@ -18,6 +18,11 @@ public class DistributeRecordVo {
      */
     @ApiModelProperty("教材申领编号")
     private Long wfTextbookClaimId;
+    /**
+     * 教材申领子项编号
+     */
+    @ApiModelProperty("教材申领子项编号")
+    private Long wfTextbookClaimItemId;
     /**
      * 出库时间
      */

+ 5 - 5
src/main/java/com/xjrsoft/module/textbook/vo/WfTextbookClaimItemVo.java

@@ -5,6 +5,8 @@ import com.alibaba.excel.annotation.write.style.ContentStyle;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.List;
+
 /**
  * @title: 教材申领项表单出参
  * @Author szs
@@ -19,11 +21,6 @@ public class WfTextbookClaimItemVo {
      */
     @ApiModelProperty("主键编号")
     private Long id;
-    /**
-     * 序号
-     */
-    @ApiModelProperty("序号")
-    private Integer sortCode;
     /**
      * 教材申领编号
      */
@@ -54,4 +51,7 @@ public class WfTextbookClaimItemVo {
      */
     @ApiModelProperty("已发放数量")
     private Integer issueNumber;
+
+    @ApiModelProperty("当前申领子项领取情况")
+    List<DistributeRecordVo> distributeRecordVos;
 }