Ver código fonte

Merge remote-tracking branch 'origin/dev' into dev

dzx 9 meses atrás
pai
commit
a211117cbf

+ 17 - 0
src/main/java/com/xjrsoft/module/textbook/controller/WfTextbookClaimController.java

@@ -3,6 +3,7 @@ package com.xjrsoft.module.textbook.controller;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.excel.support.ExcelTypeEnum;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.model.result.RT;
@@ -21,6 +22,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.camunda.bpm.engine.history.HistoricProcessInstance;
+import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -31,6 +33,10 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
 import java.util.List;
 
 import static org.camunda.bpm.engine.impl.cmmn.execution.CaseExecutionState.COMPLETED;
@@ -170,4 +176,15 @@ public class WfTextbookClaimController {
 
     }
 
+    @PostMapping("/claim-records-export-query")
+    @ApiOperation(value = "申领记录条件导出")
+    public ResponseEntity<byte[]> claimRecordsExportQuery(@Valid @RequestBody ClaimRecordsExportQueryDto dto) throws IOException {
+//    @GetMapping("/claim-records-export-query")
+//    @ApiOperation(value = "申领记录条件导出")
+//    public ResponseEntity<byte[]> claimRecordsExportQuery(@Valid ClaimRecordsExportQueryDto dto) throws IOException {
+        ByteArrayOutputStream bot = wfTextbookClaimService.claimRecordsExportQuery(dto);
+        String fileName = "申领记录";
+        fileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8);
+        return RT.fileStream(bot.toByteArray(), fileName + ExcelTypeEnum.XLSX.getValue());
+    }
 }

+ 13 - 0
src/main/java/com/xjrsoft/module/textbook/dto/ClaimRecordsExportQueryDto.java

@@ -0,0 +1,13 @@
+package com.xjrsoft.module.textbook.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class ClaimRecordsExportQueryDto {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("学期主键编号")
+    private String baseSemesterId;
+}

+ 3 - 0
src/main/java/com/xjrsoft/module/textbook/service/IWfTextbookClaimService.java

@@ -2,6 +2,7 @@ package com.xjrsoft.module.textbook.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.textbook.dto.ClaimRecordsExportQueryDto;
 import com.xjrsoft.module.textbook.dto.ConfirmDistributeDto;
 import com.xjrsoft.module.textbook.dto.DistributePageDto;
 import com.xjrsoft.module.textbook.dto.WfTextbookClaimPageDto;
@@ -11,6 +12,7 @@ import com.xjrsoft.module.textbook.vo.DistributeRecordVo;
 import com.xjrsoft.module.textbook.vo.WfTextbookClaimPageVo;
 import com.xjrsoft.module.textbook.vo.WfTextbookClaimVo;
 
+import java.io.ByteArrayOutputStream;
 import java.util.List;
 
 /**
@@ -73,4 +75,5 @@ public interface IWfTextbookClaimService extends MPJBaseService<WfTextbookClaim>
 
     Boolean dataHandleAddClaimUserNode(Long id);
 
+    ByteArrayOutputStream claimRecordsExportQuery(ClaimRecordsExportQueryDto dto);
 }

+ 90 - 1
src/main/java/com/xjrsoft/module/textbook/service/impl/WfTextbookClaimServiceImpl.java

@@ -1,6 +1,8 @@
 package com.xjrsoft.module.textbook.service.impl;
 
 import cn.dev33.satoken.stp.StpUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.support.ExcelTypeEnum;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -22,6 +24,7 @@ import com.xjrsoft.module.organization.mapper.RoleMapper;
 import com.xjrsoft.module.system.entity.DictionaryDetail;
 import com.xjrsoft.module.teacher.entity.XjrUser;
 import com.xjrsoft.module.teacher.mapper.XjrUserMapper;
+import com.xjrsoft.module.textbook.dto.ClaimRecordsExportQueryDto;
 import com.xjrsoft.module.textbook.dto.ConfirmDistributeDto;
 import com.xjrsoft.module.textbook.dto.DistributePageDto;
 import com.xjrsoft.module.textbook.dto.WfTextbookClaimPageDto;
@@ -38,6 +41,7 @@ import org.camunda.bpm.engine.history.HistoricProcessInstance;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.io.ByteArrayOutputStream;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
@@ -119,7 +123,7 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
                     .collect(Collectors.toList());
             Map<Long, WfTextbookClaimItem> applicantTatolNumberMap = new HashMap<>();
             WfTextbookClaimItem wfTextbookClaimItem;
-            if(ObjectUtils.isNotEmpty(distributePageVos)){
+            if(ObjectUtils.isNotEmpty(textbookClaimIds)){
                 MPJLambdaWrapper<WfTextbookClaimItem> wfTextbookClaimItemLambdaQueryWrapper = new MPJLambdaWrapper<>();
                 wfTextbookClaimItemLambdaQueryWrapper
                         .selectAs(WfTextbookClaimItem::getWfTextbookClaimId, WfTextbookClaimItem::getWfTextbookClaimId)
@@ -572,4 +576,89 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
         }
         return true;
     }
+
+    @Override
+    public ByteArrayOutputStream claimRecordsExportQuery(ClaimRecordsExportQueryDto dto) {
+        MPJLambdaWrapper<WfTextbookClaim> wfTextbookClaimMPJLambdaWrapper = new MPJLambdaWrapper<>();
+        wfTextbookClaimMPJLambdaWrapper
+                .disableSubLogicDel()
+                .select(WfTextbookClaim::getId)
+                .select(WfTextbookClaim.class,x -> VoToColumnUtil.fieldsToColumns(ClaimRecordsExportQueryVo.class).contains(x.getProperty()))
+                .innerJoin(WorkflowFormRelation.class, WorkflowFormRelation::getFormKeyValue, WfTextbookClaim::getId)
+                .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, WfTextbookClaim::getClaimType,
+                        wrapper -> wrapper
+                                .selectAs(DictionaryDetail::getName, ClaimRecordsExportQueryVo::getClaimTypeCn)
+                )
+                .leftJoin(XjrUser.class, XjrUser::getId, WfTextbookClaim::getApplicantUserId,
+                        wrapper -> wrapper
+                                .selectAs(XjrUser::getName, ClaimRecordsExportQueryVo::getApplicantUserIdCn)
+                )
+                .leftJoin(BaseClass.class, BaseClass::getId, WfTextbookClaim::getClassId,
+                        wrapper -> wrapper
+                                .selectAs(BaseClass::getName, ClaimRecordsExportQueryVo::getClassIdCn)
+                )
+                .leftJoin(BaseSemester.class, BaseSemester::getId, WfTextbookClaim::getBaseSemesterId,
+                        wrapper -> wrapper
+                                .selectAs(BaseSemester::getName, ClaimRecordsExportQueryVo::getBaseSemesterIdCn)
+                )
+                .eq(WorkflowFormRelation::getCurrentState, HistoricProcessInstance.STATE_COMPLETED)
+                .eq(ObjectUtils.isNotEmpty(dto.getBaseSemesterId()), WfTextbookClaim::getBaseSemesterId, dto.getBaseSemesterId())
+        ;
+        List<ClaimRecordsExportQueryVo> dataList = this.selectJoinList(ClaimRecordsExportQueryVo.class, wfTextbookClaimMPJLambdaWrapper);
+
+        // 处理申领总数量和已经发放总数量
+        if(ObjectUtils.isNotEmpty(dataList)){
+            List<Long> textbookClaimIds = dataList.stream()
+                    .map(ClaimRecordsExportQueryVo::getId)
+                    .collect(Collectors.toList());
+            Map<Long, WfTextbookClaimItem> applicantTatolNumberMap = new HashMap<>();
+            WfTextbookClaimItem wfTextbookClaimItem;
+            if(ObjectUtils.isNotEmpty(textbookClaimIds)){
+                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(ClaimRecordsExportQueryVo vo : dataList){
+                    wfTextbookClaimItem = applicantTatolNumberMap.get(vo.getId());
+                    if(ObjectUtils.isNotEmpty(wfTextbookClaimItem)){
+                        vo.setApplicantTatolNumber(wfTextbookClaimItem.getApplicantNumber());
+                        vo.setIssueTatolNumber(wfTextbookClaimItem.getIssueNumber());
+                    }
+                }
+            }
+        }
+
+        for(ClaimRecordsExportQueryVo vo : dataList){
+            if(ObjectUtils.isNotEmpty(vo.getClaimType()) && ClaimTypeEnum.ClaimClass.getCode().equals(vo.getClaimType())){
+                vo.setReceiver(vo.getClassIdCn());
+            }else {
+                vo.setReceiver(vo.getApplicantUserIdCn());
+            }
+
+            // 1:未发放,2:部分发放,3:全部发放)
+            if (vo.getStatus() == 2) {
+                vo.setStatusStr("部分发放");
+            }else if (vo.getStatus() == 3) {
+                vo.setStatusStr("全部发放");
+            }else {
+                vo.setStatusStr("未发放");
+            }
+        }
+
+        ByteArrayOutputStream bot = new ByteArrayOutputStream();
+        EasyExcel.write(bot, ClaimRecordsExportQueryVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(dataList);
+
+        return bot;
+    }
 }

+ 64 - 0
src/main/java/com/xjrsoft/module/textbook/vo/ClaimRecordsExportQueryVo.java

@@ -0,0 +1,64 @@
+package com.xjrsoft.module.textbook.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class ClaimRecordsExportQueryVo {
+    @ExcelIgnore
+    @ApiModelProperty("主键编号")
+    private Long id;
+
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("学期")
+    @ApiModelProperty("学期ID(base_semester)")
+    private String baseSemesterIdCn;
+
+    @ContentStyle(dataFormat = 49)
+    @ExcelIgnore
+    @ApiModelProperty("申领类型(xjr_dictionary_item[claim_type])")
+    private String claimType;
+
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("申领类型")
+    @ApiModelProperty("申领类型(xjr_dictionary_item[claim_type])")
+    private String claimTypeCn;
+
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("领取人")
+    @ApiModelProperty("领取人")
+    private String receiver;
+
+    @ContentStyle(dataFormat = 49)
+    @ExcelIgnore
+    @ApiModelProperty("申请人")
+    private String applicantUserIdCn;
+
+    @ContentStyle(dataFormat = 49)
+    @ExcelIgnore
+    @ApiModelProperty("班级编号")
+    private String classIdCn;
+
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("申请数量")
+    @ApiModelProperty("申请总数量")
+    private Integer applicantTatolNumber;
+
+    @ContentStyle(dataFormat = 49)
+    @ExcelIgnore
+    @ApiModelProperty("状态()")
+    private Integer status;
+
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("发放状态")
+    @ApiModelProperty("状态()")
+    private String statusStr;
+
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("发放数量")
+    @ApiModelProperty("已经发放总数量")
+    private Integer issueTatolNumber;
+}