Bläddra i källkod

教材模块重构-教材确定发放

大数据与最优化研究所 11 månader sedan
förälder
incheckning
ee9799c1ae

+ 2 - 0
src/main/java/com/xjrsoft/module/base/controller/BaseClassCourseController.java

@@ -32,8 +32,10 @@ import com.xjrsoft.module.base.vo.BaseClassCourseExportListVo;
 import com.xjrsoft.module.base.vo.BaseClassCourseListVo;
 import com.xjrsoft.module.base.vo.BaseClassCoursePageVo;
 import com.xjrsoft.module.base.vo.BaseClassCourseVo;
+import com.xjrsoft.module.textbook.dto.TextbookSubscriptionExportQueryListDto;
 import com.xjrsoft.module.textbook.entity.Textbook;
 import com.xjrsoft.module.textbook.service.ITextbookService;
+import com.xjrsoft.module.textbook.vo.TextbookSubscriptionExportQueryListVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;

+ 2 - 0
src/main/java/com/xjrsoft/module/base/service/IBaseClassCourseService.java

@@ -8,6 +8,8 @@ import com.xjrsoft.module.base.entity.BaseClassCourse;
 import com.xjrsoft.module.base.entity.ClassCourseTextbook;
 import com.xjrsoft.module.base.entity.CourseBookInfo;
 import com.xjrsoft.module.base.vo.BaseClassCoursePageVo;
+import com.xjrsoft.module.textbook.dto.TextbookSubscriptionExportQueryListDto;
+import com.xjrsoft.module.textbook.vo.TextbookSubscriptionExportQueryListVo;
 
 import java.util.List;
 import java.util.Map;

+ 10 - 2
src/main/java/com/xjrsoft/module/base/service/impl/BaseClassCourseServiceImpl.java

@@ -1,24 +1,31 @@
 package com.xjrsoft.module.base.service.impl;
 
-import cn.dev33.satoken.stp.StpUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.enums.ArchivesStatusEnum;
 import com.xjrsoft.common.exception.MyException;
+import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.module.base.dto.BaseClassCoursePageDto;
 import com.xjrsoft.module.base.dto.ClassCourseReuseDto;
 import com.xjrsoft.module.base.entity.BaseClassCourse;
+import com.xjrsoft.module.base.entity.BaseCourseSubject;
 import com.xjrsoft.module.base.entity.ClassCourseTextbook;
 import com.xjrsoft.module.base.entity.CourseBookInfo;
 import com.xjrsoft.module.base.mapper.BaseClassCourseMapper;
 import com.xjrsoft.module.base.service.IBaseClassCourseService;
 import com.xjrsoft.module.base.vo.BaseClassCoursePageVo;
 import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
-import com.xjrsoft.module.student.entity.SchoolRollStudent;
 import com.xjrsoft.module.student.mapper.BaseStudentSchoolRollMapper;
+import com.xjrsoft.module.system.entity.DictionaryDetail;
+import com.xjrsoft.module.textbook.dto.TextbookSubscriptionExportQueryListDto;
+import com.xjrsoft.module.textbook.entity.Textbook;
 import com.xjrsoft.module.textbook.entity.TextbookStudentClaim;
+import com.xjrsoft.module.textbook.entity.TextbookSubscription;
+import com.xjrsoft.module.textbook.entity.WfTextbookSubscriptionItem;
 import com.xjrsoft.module.textbook.mapper.TextbookStudentClaimMapper;
+import com.xjrsoft.module.textbook.vo.TextbookSubscriptionExportQueryListVo;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -40,6 +47,7 @@ import java.util.stream.Collectors;
 @Service
 @AllArgsConstructor
 public class BaseClassCourseServiceImpl extends MPJBaseServiceImpl<BaseClassCourseMapper, BaseClassCourse> implements IBaseClassCourseService {
+
     private final BaseClassCourseMapper baseClassCourseMapper;
 
     private final BaseStudentSchoolRollMapper baseStudentSchoolRollMapper;

+ 0 - 1
src/main/java/com/xjrsoft/module/textbook/controller/TextbookIssueRecordController.java

@@ -72,7 +72,6 @@ public class TextbookIssueRecordController {
         return RT.ok(BeanUtil.toBean(textbookIssueRecord, TextbookIssueRecordVo.class));
     }
 
-
     @PostMapping
     @ApiOperation(value = "新增教材出库记录")
     @SaCheckPermission("textbookissuerecord:add")

+ 14 - 1
src/main/java/com/xjrsoft/module/textbook/controller/TextbookSubscriptionController.java

@@ -144,7 +144,7 @@ public class TextbookSubscriptionController {
     }
 
     @GetMapping(value = "/item-list-confirm-distribute")
-    @ApiOperation(value="确认教材页面使用教材征订明细(不分页)")
+    @ApiOperation(value="教材确认发放页面使用教材征订明细(不分页)")
     @SaCheckPermission("textbooksubscription:detail")
     public RT<List<SubscriptionItemListDistributeVo>> itemListConfirmDistribute(@Valid SubscriptionItemListDistributeDto dto){
         List<SubscriptionItemListDistributeVo> list = textbookSubscriptionService.itemListConfirmDistribute(dto);
@@ -213,6 +213,19 @@ public class TextbookSubscriptionController {
         ByteArrayOutputStream bot = new ByteArrayOutputStream();
         EasyExcel.write(bot, TextbookSubscriptionListVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(customerList);
 
+        return RT.fileStream(bot.toByteArray(), "TextbookSubscription" + ExcelTypeEnum.XLSX.getValue());
+    }
+
+//    @PostMapping("/textbook-subscription-export-query")
+//    @ApiOperation(value = "教材征订条件导出")
+//    public ResponseEntity<byte[]> textbookSubscriptionExportQuery(@Valid @RequestBody TextbookSubscriptionExportQueryListDto dto) {
+    @GetMapping("/textbook-subscription-export-query")
+    @ApiOperation(value = "教材征订条件导出")
+    public ResponseEntity<byte[]> textbookSubscriptionExportQuery(@Valid TextbookSubscriptionExportQueryListDto dto) {
+        List<TextbookSubscriptionExportQueryListVo> customerList = textbookSubscriptionService.textbookSubscriptionExportQuery(dto);
+        ByteArrayOutputStream bot = new ByteArrayOutputStream();
+        EasyExcel.write(bot, TextbookSubscriptionExportQueryListVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(customerList);
+
         return RT.fileStream(bot.toByteArray(), "TextbookSubscription" + ExcelTypeEnum.XLSX.getValue());
     }
 }

+ 27 - 1
src/main/java/com/xjrsoft/module/textbook/dto/ConfirmDistributeDto.java

@@ -48,12 +48,38 @@ public class ConfirmDistributeDto{
 
         private static final long serialVersionUID = 1L;
 
+        /**
+         * 教材主键编号
+         */
+        @ApiModelProperty("教材主键编号")
+        private Long textbookId;
+
         /**
          * 教材申领项主键编号
          */
         @ApiModelProperty("教材申领项主键编号")
         private Long textbookClaimItemId;
 
+        /**
+         * 教材征订项主键编号
+         */
+        @ContentStyle(dataFormat = 49)
+        @ExcelProperty("教材征订项主键编号")
+        @ApiModelProperty("教材征订项主键编号")
+        private List<TextbookSubscriptionItems> textbookSubscriptionItems;
+
+        /**
+         * 发放数量
+         */
+        @ApiModelProperty("本次发放本书总数量")
+        private Integer confirmTotalNumber;
+    }
+
+    @Data
+    public static class TextbookSubscriptionItems implements Serializable {
+
+        private static final long serialVersionUID = 1L;
+
         /**
          * 教材征订项主键编号
          */
@@ -65,7 +91,7 @@ public class ConfirmDistributeDto{
         /**
          * 发放数量
          */
-        @ApiModelProperty("本次发放数量")
+        @ApiModelProperty("本次发放本书本征订记录中的数量")
         private Integer confirmNumber;
     }
 }

+ 1 - 1
src/main/java/com/xjrsoft/module/textbook/dto/TextbookSubscriptionExportQueryListDto.java

@@ -16,5 +16,5 @@ public class TextbookSubscriptionExportQueryListDto {
      * 教材教辅征订编号
      */
     @ApiModelProperty("教材教辅征订编号")
-    private Long wfTextbookSubscriptionId;
+    private Long textbookSubscriptionId;
 }

+ 2 - 0
src/main/java/com/xjrsoft/module/textbook/service/ITextbookSubscriptionService.java

@@ -76,4 +76,6 @@ public interface ITextbookSubscriptionService extends MPJBaseService<TextbookSub
     * @return
     */
     Boolean delete(List<Long> ids);
+
+    List<TextbookSubscriptionExportQueryListVo> textbookSubscriptionExportQuery(TextbookSubscriptionExportQueryListDto dto);
 }

+ 57 - 0
src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookSubscriptionServiceImpl.java

@@ -504,4 +504,61 @@ public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<Textbook
         textbookSubscriptionClassMapper.delete(Wrappers.lambdaQuery(TextbookSubscriptionClass.class).in(TextbookSubscriptionClass::getTextbookSubscriptionId, ids));
         return true;
     }
+
+    @Override
+    public List<TextbookSubscriptionExportQueryListVo> textbookSubscriptionExportQuery(TextbookSubscriptionExportQueryListDto dto) {
+        TextbookSubscription textbookSubscription = this.getById(dto.getTextbookSubscriptionId());
+        if (textbookSubscription == null) {
+            return null;
+        }
+
+        MPJLambdaWrapper<TextbookSubscriptionItem> textbookSubscriptionItemMPJLambdaWrapper = new MPJLambdaWrapper<>();
+        textbookSubscriptionItemMPJLambdaWrapper
+                .selectAs(BaseCourseSubject::getName, TextbookSubscriptionExportQueryListVo::getCourseName)
+                .selectAs(TextbookSubscriptionItem::getStudentNum, TextbookSubscriptionExportQueryListVo::getStudentSubscriptionNumber)
+                .selectAs(TextbookSubscriptionItem::getTeacherNum, TextbookSubscriptionExportQueryListVo::getTeacherSubscriptionNumber)
+                .selectAs(TextbookSubscriptionItem::getInStockNum, TextbookSubscriptionExportQueryListVo::getInStockroomNum)
+                .selectAs(TextbookSubscription::getBaseClassIds, TextbookSubscriptionExportQueryListVo::getClassIds)
+                .select("t.student_num + t.teacher_num as subscription_sum")
+                .select(TextbookSubscriptionItem.class, x -> VoToColumnUtil.fieldsToColumns(TextbookSubscriptionExportQueryListVo.class).contains(x.getProperty()))
+                .select(Textbook.class, x -> VoToColumnUtil.fieldsToColumns(TextbookSubscriptionExportQueryListVo.class).contains(x.getProperty()))
+                .leftJoin(TextbookSubscription.class, TextbookSubscription::getId, TextbookSubscriptionItem::getTextbookSubscriptionId)
+                .leftJoin(Textbook.class, Textbook::getId, TextbookSubscriptionItem::getTextbookId)
+                .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, Textbook::getTextbookType,
+                        ext -> ext.selectAs(DictionaryDetail::getName, TextbookSubscriptionExportQueryListVo::getTextbookTypeCn))
+                .leftJoin(BaseCourseSubject.class, BaseCourseSubject::getId, Textbook::getCourseSubjectId)
+                .eq(TextbookSubscriptionItem::getTextbookSubscriptionId, textbookSubscription.getId())
+        ;
+        List<TextbookSubscriptionExportQueryListVo> itemList = textbookSubscriptionTextbookSubscriptionItemMapper.selectJoinList(TextbookSubscriptionExportQueryListVo.class, textbookSubscriptionItemMPJLambdaWrapper);
+
+        //处理班级
+        String classIds = "";
+        List<String> classIdList = new ArrayList<>();
+        StringBuilder sb = new StringBuilder();
+        if (!itemList.isEmpty() && itemList.get(0).getClassIds() != null && !itemList.get(0).getClassIds().equals("")) {
+            classIds = itemList.get(0).getClassIds();
+            String[] classIdArr = classIds.split(",");
+            classIdList = Arrays.asList(classIdArr);
+            /*if(!classIdList.isEmpty()){
+                List<BaseClass> baseClassList = baseClassMapper.selectList(Wrappers.<BaseClass>query().lambda().in(BaseClass::getId, classIdList));
+                Map<Long, BaseClass> baseClassMap = baseClassList.stream()
+                        .collect(Collectors.toMap(BaseClass::getId, baseClass -> baseClass));
+
+                for (String classId : classIdList){
+                    BaseClass baseClass = baseClassMap.get(Long.parseLong(classId));
+                    if(baseClass != null){
+                        sb.append(baseClass.getName());
+                        sb.append(",");
+                    }
+                }
+                sb.deleteCharAt(sb.length() - 1);
+            }*/
+        }
+
+        for (TextbookSubscriptionExportQueryListVo w : itemList) {
+            w.setClassNum(classIdList.size());
+        }
+
+        return itemList;
+    }
 }

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

@@ -30,6 +30,7 @@ import lombok.AllArgsConstructor;
 import org.glassfish.jersey.server.internal.process.MappableException;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.ObjectUtils;
 
 import java.util.ArrayList;
 import java.util.Date;
@@ -62,6 +63,8 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
 
     private final TextbookClaimUserMapper textbookClaimUserMapper;
 
+    private final ClaimItemSubscriptionItemMapper claimItemSubscriptionItemMapper;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean add(WfTextbookClaim wfTextbookClaim) {
@@ -211,24 +214,41 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
                 throw new MyException("未找到申领项详细数据");
             }
 
-            TextbookSubscriptionItem textbookSubscriptionItem = textbookSubscriptionItemMapper.selectById(textbookClaimItem.getTextbookSubscriptionItemId());
-            if (ObjectUtil.isNull(textbookSubscriptionItem)) {
-                throw new MyException("未找到征订项详细数据");
-            }
-
-            Textbook textbook = textbookMapper.selectById(textbookSubscriptionItem.getTextbookId());
+            Textbook textbook = textbookMapper.selectById(textbookClaimItem.getTextbookId());
             if (ObjectUtil.isNull(textbook)) {
                 throw new MyException("未找到相关教材数据");
             }
 
             //判断总发放数量是否超出该申请项的申请数量
             Integer issueNumber = ObjectUtil.isNull(wfTextbookClaimItem.getIssueNumber()) ? 0 : wfTextbookClaimItem.getIssueNumber();//已发放
-            Integer confirmNumber = ObjectUtil.isNull(textbookClaimItem.getConfirmNumber()) ? 0 : textbookClaimItem.getConfirmNumber();//本次发放
             Integer applicantNumber = ObjectUtil.isNull(wfTextbookClaimItem.getApplicantNumber()) ? 0 : wfTextbookClaimItem.getApplicantNumber();//申领总数量
+            Integer confirmNumber = ObjectUtil.isNull(textbookClaimItem.getConfirmTotalNumber()) ? 0 : textbookClaimItem.getConfirmTotalNumber();//本次发放
             if (issueNumber + confirmNumber > applicantNumber) {
                 throw new MyException(textbook.getBookName() + "发放总数量超出申领数量");
             }
 
+            for (ConfirmDistributeDto.TextbookSubscriptionItems textbookSubscriptionItems : textbookClaimItem.getTextbookSubscriptionItems()){
+                TextbookSubscriptionItem textbookSubscriptionItem = textbookSubscriptionItemMapper.selectById(textbookSubscriptionItems.getTextbookSubscriptionItemId());
+                if (ObjectUtils.isEmpty(textbookSubscriptionItem)) {
+                    throw new MyException("未找到征订项详细数据");
+                }
+
+                //更新教材征订中的的库存数量
+                textbookSubscriptionItemMapper.updateById(new TextbookSubscriptionItem() {{
+                    setModifyUserId(StpUtil.getLoginIdAsLong());
+                    setModifyDate(new Date());
+                    setId(textbookSubscriptionItem.getId());
+                    setOutStockNum(ObjectUtil.isNull(textbookSubscriptionItem.getOutStockNum()) ? 0 : textbookSubscriptionItem.getOutStockNum()
+                             + confirmNumber);
+                }});
+
+                claimItemSubscriptionItemMapper.insert(new ClaimItemSubscriptionItem(){{
+                    setWfTextbookClaimItemId(wfTextbookClaimItem.getId());
+                    setTextbookSubscriptionItemId(textbookSubscriptionItem.getId());
+                    setIssueNumber(confirmNumber);
+                }});
+            }
+
             //增加出库记录
             textbookIssueRecordMapper.insert(new TextbookIssueRecord() {{
                 setCreateDate(new Date());
@@ -258,14 +278,6 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
 
             }});
 
-            //更新教材管理中的库存数量
-            textbookSubscriptionItemMapper.updateById(new TextbookSubscriptionItem() {{
-                setModifyUserId(StpUtil.getLoginIdAsLong());
-                setModifyDate(new Date());
-                setId(textbookSubscriptionItem.getId());
-                setOutStockNum(confirmNumber);
-            }});
-
             //更新申领项中的已经发放数量
             wfTextbookClaimWfTextbookClaimItemMapper.updateById(new WfTextbookClaimItem() {{
                 setModifyUserId(StpUtil.getLoginIdAsLong());

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

@@ -284,7 +284,7 @@ public class WfTextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<WfText
 
     @Override
     public List<TextbookSubscriptionExportQueryListVo> textbookSubscriptionExportQuery(TextbookSubscriptionExportQueryListDto dto) {
-        WfTextbookSubscription wfTextbookSubscription = this.getById(dto.getWfTextbookSubscriptionId());
+        WfTextbookSubscription wfTextbookSubscription = this.getById(dto.getTextbookSubscriptionId());
         if (wfTextbookSubscription == null) {
             return null;
         }

+ 1 - 1
src/main/resources/sqlScript/textbook_sql.sql

@@ -323,7 +323,7 @@ create table `textbook_issue_record`
 
     textbook_id      bigint        null comment '教材管理编号',
     issue_number     int           null comment '出库数量',
-    remaining_number int           null comment '剩余未出库数量',
+    remaining_number int           null comment '申领中剩余未出库数量',
 
     receive_user_id  bigint        null comment '领取用户编号',
     issue_user_id    bigint        null comment '出库用户编号',