Kaynağa Gözat

教材发放发放记录

大数据与最优化研究所 9 ay önce
ebeveyn
işleme
df0abc31bd

+ 8 - 5
src/main/java/com/xjrsoft/module/textbook/controller/TextbookIssueRecordController.java

@@ -11,10 +11,7 @@ import com.xjrsoft.common.page.PageOutput;
 import com.xjrsoft.module.textbook.dto.*;
 import com.xjrsoft.module.textbook.entity.TextbookIssueRecord;
 import com.xjrsoft.module.textbook.service.ITextbookIssueRecordService;
-import com.xjrsoft.module.textbook.vo.CanReturnTextbookListVo;
-import com.xjrsoft.module.textbook.vo.TextbookIssueRecordExcelVo;
-import com.xjrsoft.module.textbook.vo.TextbookIssueRecordPageVo;
-import com.xjrsoft.module.textbook.vo.TextbookIssueRecordVo;
+import com.xjrsoft.module.textbook.vo.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
@@ -52,12 +49,18 @@ public class TextbookIssueRecordController {
     @ApiOperation(value="教材出库记录列表(分页)")
     @SaCheckPermission("textbookissuerecord:detail")
     public RT<PageOutput<TextbookIssueRecordPageVo>> page(@Valid TextbookIssueRecordPageDto dto){
-
         Page<TextbookIssueRecordPageVo> page = textbookIssueRecordService.getPage(new Page<>(dto.getLimit(), dto.getSize()), dto);
         PageOutput<TextbookIssueRecordPageVo> pageOutput = ConventPage.getPageOutput(page, TextbookIssueRecordPageVo.class);
         return RT.ok(pageOutput);
     }
 
+    @GetMapping(value = "/distribute-record-page")
+    @ApiOperation(value="教材发放页面已发放申领的出库记录列表")
+    @SaCheckPermission("textbookissuerecord:detail")
+    public RT<List<DistributeRecordPageVo>> distributeRecordPage(@Valid DistributeRecordPageDto dto){
+        return RT.ok(textbookIssueRecordService.distributeRecordPage(dto));
+    }
+
     @GetMapping(value = "/can-return-textbook-list")
     @ApiOperation(value="根据教材出库记录查询可以退书的书籍列表(不分页)")
     @SaCheckPermission("textbookissuerecord:detail")

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

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

+ 5 - 1
src/main/java/com/xjrsoft/module/textbook/entity/TextbookIssueRecord.java

@@ -148,6 +148,10 @@ public class TextbookIssueRecord implements Serializable {
     */
     @ApiModelProperty("备注")
     private String remark;
-
+    /**
+     * 当前申领项发放次数
+     */
+    @ApiModelProperty("当前申领项发放次数")
+    private Integer issueTimes;
 
 }

+ 5 - 1
src/main/java/com/xjrsoft/module/textbook/entity/WfTextbookClaim.java

@@ -121,7 +121,11 @@ public class WfTextbookClaim implements Serializable {
     */
     @ApiModelProperty("状态(1:结束 0:未结束)")
     private Integer status;
-
+    /**
+     * 当前申领项发放次数
+     */
+    @ApiModelProperty("当前申领项发放次数")
+    private Integer issueTimes;
     /**
     * wfTextbookClaimItem
     */

+ 4 - 0
src/main/java/com/xjrsoft/module/textbook/service/ITextbookIssueRecordService.java

@@ -3,10 +3,12 @@ package com.xjrsoft.module.textbook.service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseService;
 import com.xjrsoft.module.textbook.dto.CanReturnTextbookListDto;
+import com.xjrsoft.module.textbook.dto.DistributeRecordPageDto;
 import com.xjrsoft.module.textbook.dto.TextbookIssueRecordExportDto;
 import com.xjrsoft.module.textbook.dto.TextbookIssueRecordPageDto;
 import com.xjrsoft.module.textbook.entity.TextbookIssueRecord;
 import com.xjrsoft.module.textbook.vo.CanReturnTextbookListVo;
+import com.xjrsoft.module.textbook.vo.DistributeRecordPageVo;
 import com.xjrsoft.module.textbook.vo.TextbookIssueRecordPageVo;
 
 import java.util.List;
@@ -22,6 +24,8 @@ public interface ITextbookIssueRecordService extends MPJBaseService<TextbookIssu
 
     Page<TextbookIssueRecordPageVo> getPage(Page<TextbookIssueRecordPageDto> page, TextbookIssueRecordPageDto dto);
 
+    List<DistributeRecordPageVo> distributeRecordPage(DistributeRecordPageDto dto);
+
     List<CanReturnTextbookListVo> canReturnTextbookList(CanReturnTextbookListDto dto);
 
     List<TextbookIssueRecordPageVo> getList(TextbookIssueRecordExportDto dto);

+ 55 - 2
src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookIssueRecordServiceImpl.java

@@ -1,19 +1,30 @@
 package com.xjrsoft.module.textbook.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.xjrsoft.common.utils.VoToColumnUtil;
+import com.xjrsoft.module.teacher.entity.XjrUser;
 import com.xjrsoft.module.textbook.dto.CanReturnTextbookListDto;
+import com.xjrsoft.module.textbook.dto.DistributeRecordPageDto;
 import com.xjrsoft.module.textbook.dto.TextbookIssueRecordExportDto;
 import com.xjrsoft.module.textbook.dto.TextbookIssueRecordPageDto;
+import com.xjrsoft.module.textbook.entity.Textbook;
 import com.xjrsoft.module.textbook.entity.TextbookIssueRecord;
+import com.xjrsoft.module.textbook.entity.WfTextbookClaim;
 import com.xjrsoft.module.textbook.mapper.TextbookIssueRecordMapper;
 import com.xjrsoft.module.textbook.service.ITextbookIssueRecordService;
-import com.xjrsoft.module.textbook.vo.CanReturnTextbookListVo;
-import com.xjrsoft.module.textbook.vo.TextbookIssueRecordPageVo;
+import com.xjrsoft.module.textbook.vo.*;
+import io.swagger.models.auth.In;
 import lombok.AllArgsConstructor;
+import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
 * @title: 教材出库记录
@@ -30,6 +41,48 @@ public class TextbookIssueRecordServiceImpl extends MPJBaseServiceImpl<TextbookI
         return textbookIssueRecordMapper.getPage(page, dto);
     }
 
+    @Override
+    public List<DistributeRecordPageVo> distributeRecordPage(DistributeRecordPageDto dto) {
+        List<DistributeRecordPageVo> result = new ArrayList<>();
+        MPJLambdaWrapper<TextbookIssueRecord> textbookIssueRecordMPJLambdaWrapper = new MPJLambdaWrapper<>();
+        textbookIssueRecordMPJLambdaWrapper
+                .disableSubLogicDel()
+                .selectAs(Textbook::getBookName, TextbookIssueRecordDistributeRecordVo::getBookName)
+                .selectAs(XjrUser::getName, TextbookIssueRecordDistributeRecordVo::getCreateUserIdCn)
+                .select(TextbookIssueRecord.class, x -> VoToColumnUtil.fieldsToColumns(TextbookIssueRecordDistributeRecordVo.class).contains(x.getProperty()))
+                .leftJoin(Textbook.class, Textbook::getId, TextbookIssueRecord::getTextbookId)
+                .leftJoin(XjrUser.class, XjrUser::getId, TextbookIssueRecord::getCreateUserId)
+                .eq(TextbookIssueRecord::getDataId, dto.getWfTextbookClaimId())
+                ;
+        List<TextbookIssueRecordDistributeRecordVo> tvs = this.selectJoinList(TextbookIssueRecordDistributeRecordVo.class, textbookIssueRecordMPJLambdaWrapper);
+        if(ObjectUtils.isEmpty(tvs)){
+            return result;
+        }
+
+        Map<Integer, List<TextbookIssueRecordDistributeRecordVo>> tvMap = tvs.stream()
+                .collect(Collectors.groupingBy(TextbookIssueRecordDistributeRecordVo::getIssueTimes));
+
+        DistributeRecordPageVo distributeRecordPageVo;
+        for (Map.Entry<Integer, List<TextbookIssueRecordDistributeRecordVo>> entry : tvMap.entrySet()){
+            Integer key = entry.getKey();
+            List<TextbookIssueRecordDistributeRecordVo> value = entry.getValue();
+            if(ObjectUtils.isEmpty(value)){
+                continue;
+            }
+            TextbookIssueRecordDistributeRecordVo first = value.get(0);
+            distributeRecordPageVo = new DistributeRecordPageVo();
+            distributeRecordPageVo.setIssueTimes(first.getIssueTimes());
+            distributeRecordPageVo.setCreateDate(first.getCreateDate());
+            distributeRecordPageVo.setCreateUserIdCn(first.getCreateUserIdCn());
+
+            List<DistributeRecordPageVo.DistributeRecordDetail> distributeRecordDetails = BeanUtil.copyToList(value, DistributeRecordPageVo.DistributeRecordDetail.class);
+            distributeRecordPageVo.setDistributeRecordDetails(distributeRecordDetails);
+            result.add(distributeRecordPageVo);
+        }
+
+        return result;
+    }
+
     @Override
     public List<CanReturnTextbookListVo> canReturnTextbookList(CanReturnTextbookListDto dto) {
 

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

@@ -55,16 +55,10 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
 
     private final XjrUserMapper xjrUserMapper;
 
-    private final TextbookMapper textbookMapper;
-
-    private final TextbookSubscriptionItemMapper textbookSubscriptionItemMapper;
-
     private final TextbookIssueRecordMapper textbookIssueRecordMapper;
 
     private final TextbookClaimUserMapper textbookClaimUserMapper;
 
-    private final ClaimItemSubscriptionItemMapper claimItemSubscriptionItemMapper;
-
     private final WorkflowFormRelationMapper workflowFormRelationMapper;
     private final TextbookWarehouseRecordMapper textbookWarehouseRecordMapper;
 
@@ -241,7 +235,7 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
         if (ObjectUtils.isNotEmpty(wfTextbookClaimVo)) {
             //拆分代领人
             String receiveUserIdStr = wfTextbookClaimVo.getReceiveUserId();
-            if (ObjectUtils.isNotEmpty(receiveUserIdStr) && !receiveUserIdStr.equals("")) {
+            if (ObjectUtils.isNotEmpty(receiveUserIdStr) && !receiveUserIdStr.isEmpty()) {
                 String[] receiveUserIdStrs = receiveUserIdStr.split(",");
                 List<Long> receiveUserIdList = new ArrayList<>();
                 for (String str : receiveUserIdStrs) {
@@ -262,7 +256,7 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
             //加上申领项
             List<WfTextbookClaimItemVo> wfTextbookClaimItemVoList = wfTextbookClaimWfTextbookClaimItemMapper.getListByWfTextbookClaimId(Long.parseLong(wfTextbookClaimVo.getId()));
 
-            if (ObjectUtils.isNotEmpty(wfTextbookClaimItemVoList) && wfTextbookClaimItemVoList.size() > 0) {
+            if (ObjectUtils.isNotEmpty(wfTextbookClaimItemVoList) && !wfTextbookClaimItemVoList.isEmpty()) {
                 wfTextbookClaimVo.setWfTextbookClaimItemList(wfTextbookClaimItemVoList);
             }
         }
@@ -274,6 +268,8 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
     public Boolean confirmDistribute(ConfirmDistributeDto dto) {
         WfTextbookClaim wfTextbookClaim = this.getByIdDeep(dto.getTextbookClaimId());
         List<WfTextbookClaimItem> wfTextbookClaimItemList = wfTextbookClaim.getWfTextbookClaimItemList();
+        int issueTimes = wfTextbookClaim.getIssueTimes() + 1;
+        Date nowDate = new Date();
 
         int claimTotalNum = 0;
         int issueTotalNum = 0;
@@ -333,6 +329,10 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
             }
 
             TextbookIssueRecord textbookIssueRecord;
+            // 出库单号前缀
+            oldOrderInteger += 1;
+            String newOrder = String.format("%03d", oldOrderInteger); // 补零并格式化为三位数
+            String oldPrex = sb + newOrder + "-";
             for (ConfirmDistributeDto.TextbookWarehouseRecords textbookWarehouseRecords : textbookClaimItem.getTextbookWarehouseRecords()){
                 TextbookWarehouseRecord textbookWarehouseRecord = textbookWarehouseRecordMap.get(textbookWarehouseRecords.getTextbookWarehouseRecordId());
                 if (ObjectUtils.isEmpty(textbookWarehouseRecord)) {
@@ -342,7 +342,7 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
                 //更新教材入库中的的库存数量
                 textbookWarehouseRecordMapper.updateById(new TextbookWarehouseRecord() {{
                     setModifyUserId(StpUtil.getLoginIdAsLong());
-                    setModifyDate(new Date());
+                    setModifyDate(nowDate);
                     setId(textbookWarehouseRecord.getId());
                     setIssuedNumber(ObjectUtils.isEmpty(textbookWarehouseRecord.getIssuedNumber()) ? 0 : textbookWarehouseRecord.getIssuedNumber()
                              + confirmNumber);
@@ -351,9 +351,6 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
                     );
                 }});
 
-                oldOrderInteger += 1;
-                String newOrder = String.format("%03d", oldOrderInteger); // 补零并格式化为三位数
-                String oldPrex = sb + newOrder + "-";
                 //增加出库记录
                 textbookIssueRecord = new TextbookIssueRecord();
                 textbookIssueRecord.setBaseSemesterId(wfTextbookClaim.getBaseSemesterId());
@@ -406,8 +403,10 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
                     textbookIssueRecord.setReceiveUserId(StpUtil.getLoginIdAsLong());
                 }
                 textbookIssueRecord.setIssueUserId(StpUtil.getLoginIdAsLong());
-                textbookIssueRecord.setCreateDate(new Date());;
+                textbookIssueRecord.setCreateDate(nowDate);;
                 textbookIssueRecord.setRemark(dto.getRemark());
+                textbookIssueRecord.setIssueTimes(issueTimes);
+
                 int sortCode = SortCodeUtil.getMaxSortCode(textbookIssueRecordMapper, TextbookIssueRecord.class, "sort_code");
                 textbookIssueRecord.setSortCode(sortCode + 1);
 
@@ -417,7 +416,7 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
 
         WfTextbookClaim updateWfTextbookClaim = new WfTextbookClaim();
         updateWfTextbookClaim.setModifyUserId(StpUtil.getLoginIdAsLong());
-        updateWfTextbookClaim.setModifyDate(new Date());
+        updateWfTextbookClaim.setModifyDate(nowDate);
         updateWfTextbookClaim.setId(wfTextbookClaim.getId());
         if(claimTotalNum > issueTotalNum){
             updateWfTextbookClaim.setStatus(2);
@@ -425,9 +424,10 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
         if(claimTotalNum > issueTotalNum){
             updateWfTextbookClaim.setStatus(3);
         }
-
+        updateWfTextbookClaim.setIssueTimes(issueTimes);
         //更新申领项中的已经发放数量
         wfTextbookClaimWfTextbookClaimMapper.updateById(updateWfTextbookClaim);
+
         return true;
     }
 

+ 38 - 0
src/main/java/com/xjrsoft/module/textbook/vo/DistributeRecordPageVo.java

@@ -0,0 +1,38 @@
+package com.xjrsoft.module.textbook.vo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class DistributeRecordPageVo {
+
+    @ApiModelProperty("当前申领项发放次数")
+    private Integer issueTimes;
+
+    @ApiModelProperty("发放时间")
+    private Date createDate;
+
+    @ApiModelProperty("发放人")
+    private String createUserIdCn;
+
+    @ApiModelProperty("发放人")
+    private List<DistributeRecordDetail> distributeRecordDetails;
+
+    @Data
+    public static class DistributeRecordDetail implements Serializable {
+
+        private static final long serialVersionUID = 1L;
+
+        private String bookName;
+
+        private String orderNumber;
+
+        private Integer issueNumber;
+    }
+}

+ 31 - 0
src/main/java/com/xjrsoft/module/textbook/vo/TextbookIssueRecordDistributeRecordVo.java

@@ -0,0 +1,31 @@
+package com.xjrsoft.module.textbook.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class TextbookIssueRecordDistributeRecordVo {
+
+    @ApiModelProperty("主键编号")
+    private Long id;
+
+    @ApiModelProperty("创建人")
+    private String createUserIdCn;
+
+    @ApiModelProperty("创建时间")
+    private Date createDate;
+
+    @ApiModelProperty("出库单号(标识+当前时间(YYYYMMDDHHmmss)+三位序号+当前申领项出库次数(-n))")
+    private String orderNumber;
+
+    @ApiModelProperty("教材管理编号")
+    private String bookName;
+
+    @ApiModelProperty("出库数量")
+    private Integer issueNumber;
+
+    @ApiModelProperty("当前申领项发放次数")
+    private Integer issueTimes;
+}

+ 4 - 0
src/main/resources/sqlScript/20250120_sql.sql

@@ -176,4 +176,8 @@ alter table textbook_warehouse_record
 alter table wf_textbook_claim
     add textbook_scope int null comment '选择教材范围(1:全部,2:本班)' after class_id;
 
+alter table wf_textbook_claim
+    add issue_times int default 0 null comment '当前申领项发放次数';
 
+alter table textbook_issue_record
+    add issue_times int default 0 null comment '当前出库对应的申领项的发放次数' after issue_user_id;