Quellcode durchsuchen

教材模块重构-教材基本信息,教材征订

大数据与最优化研究所 vor 11 Monaten
Ursprung
Commit
1b8281e3e0

+ 9 - 28
src/main/java/com/xjrsoft/module/textbook/controller/TextbookController.java

@@ -69,14 +69,14 @@ public class TextbookController {
         return RT.ok(pageOutput);
     }
 
-    @GetMapping(value = "/page-subscription")
-    @ApiOperation(value="教材管理列表(分页,教材征订用)")
-    @SaCheckPermission("textbook:detail")
-    public RT<PageOutput<TextbookSubscriptionListVo>> pageSubscription(@Valid TextbookSubscriptionListDto dto){
-        IPage<TextbookSubscriptionListVo> page = textbookService.getSubscriptionPageByClass(dto);
-        PageOutput<TextbookSubscriptionListVo> pageOutput = ConventPage.getPageOutput(page, TextbookSubscriptionListVo.class);
-        return RT.ok(pageOutput);
-    }
+//    @GetMapping(value = "/page-subscription")
+//    @ApiOperation(value="教材管理列表(分页,教材征订用)")
+//    @SaCheckPermission("textbook:detail")
+//    public RT<PageOutput<TextbookSubscriptionListVo>> pageSubscription(@Valid TextbookSubscriptionListDto dto){
+//        IPage<TextbookSubscriptionListVo> page = textbookService.getSubscriptionPageByClass(dto);
+//        PageOutput<TextbookSubscriptionListVo> pageOutput = ConventPage.getPageOutput(page, TextbookSubscriptionListVo.class);
+//        return RT.ok(pageOutput);
+//    }
 
     @GetMapping(value = "/page-consumption")
     @ApiOperation(value="学生确认领取教材列表(分页,学生收费用)")
@@ -107,26 +107,7 @@ public class TextbookController {
     @ApiOperation(value="教材管理列表(不分页,教材征订用)")
     @SaCheckPermission("textbook:detail")
     public RT<List<TextbookSubscriptionListVo>> listSubscription(@Valid TextbookSubscriptionListDto dto){
-        List<String> classIdList = new ArrayList<>();
-        if(dto.getClassIds() != null && !dto.getClassIds().isEmpty()){
-            String[] classIdArr =  dto.getClassIds().split(",");
-            classIdList = Arrays.asList(classIdArr);
-        }
-
-        MPJLambdaWrapper<Textbook> textbookMPJLambdaWrapper = new MPJLambdaWrapper<>();
-        textbookMPJLambdaWrapper
-                .select(Textbook::getId)
-                .selectAs(Textbook::getId,TextbookSubscriptionListVo::getTextbookId)
-                .selectAs(BaseCourseSubject::getName, TextbookSubscriptionListVo::getCourseName)
-                .selectSum(BaseClassMajorSet::getTotalStudent, TextbookSubscriptionListVo::getStudentSubscriptionNumber)
-                .select(Textbook.class, x -> VoToColumnUtil.fieldsToColumns(TextbookSubscriptionListVo.class).contains(x.getProperty()))
-                .leftJoin(TextbookClassRelation.class, TextbookClassRelation::getTextbookId, Textbook::getId)
-                .leftJoin(BaseClassMajorSet.class, BaseClassMajorSet::getClassId, TextbookClassRelation::getClassId)
-                .leftJoin(BaseCourseSubject.class, BaseCourseSubject::getId, Textbook::getCourseSubjectId)
-                .in(!classIdList.isEmpty(),TextbookClassRelation::getClassId, classIdList)
-                .groupBy(Textbook::getId)
-                ;
-        List<TextbookSubscriptionListVo> list = textbookService.selectJoinList(TextbookSubscriptionListVo.class,textbookMPJLambdaWrapper);
+        List<TextbookSubscriptionListVo> list = textbookService.getSubscriptionListByClass(dto);
         return RT.ok(list);
     }
 

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

@@ -130,5 +130,7 @@ public interface ITextbookService extends MPJBaseService<Textbook> {
 
     IPage<TextbookSubscriptionListVo> getSubscriptionPageByClass(TextbookSubscriptionListDto dto);
 
+    List<TextbookSubscriptionListVo> getSubscriptionListByClass(TextbookSubscriptionListDto dto);
+
     String textbook(MultipartFile file) throws IOException, IllegalAccessException;
 }

+ 77 - 0
src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookServiceImpl.java

@@ -1010,6 +1010,83 @@ public class TextbookServiceImpl extends MPJBaseServiceImpl<TextbookMapper, Text
         return textbookSubscriptionListVoIPage;
     }
 
+    @Override
+    public List<TextbookSubscriptionListVo> getSubscriptionListByClass(TextbookSubscriptionListDto dto) {
+        List<String> classIdList = new ArrayList<>();
+        if(dto.getClassIds() != null && !"".equals(dto.getClassIds())){
+            String[] classIdArr =  dto.getClassIds().split(",");
+            classIdList = Arrays.asList(classIdArr);
+        }
+        dto.setClassIdList(classIdList);
+
+        // 找到可以使用多个学期且已经征订的教材
+        MPJLambdaWrapper<BaseClassCourse> subscribedTextbook = new MPJLambdaWrapper<>();
+        subscribedTextbook
+                .distinct()
+                .select(BaseClassCourse::getId)
+                .innerJoin(TextbookSubscriptionClass.class, TextbookSubscriptionClass::getBaseClassId, BaseClassCourse::getClassId)
+                .innerJoin(TextbookSubscriptionItem.class, wrapper -> wrapper
+                        .eq(TextbookSubscriptionItem::getTextbookSubscriptionId, TextbookSubscriptionClass::getTextbookSubscriptionId)
+                        .eq(TextbookSubscriptionItem::getTextbookId, BaseClassCourse::getTextbookId)
+                )
+
+                .innerJoin(Textbook.class, Textbook::getId, BaseClassCourse::getTextbookId)
+                .gt(Textbook::getUseType, 1)
+                .eq(BaseClassCourse::getBaseSemesterId, dto.getBaseSemesterId())
+                .in(BaseClassCourse::getClassId, dto.getClassIdList())
+        ;
+        List<BaseClassCourse> baseClassCourses = baseClassCourseMapper.selectJoinList(BaseClassCourse.class, subscribedTextbook);
+
+        List<Long> baseClassCourseIds = baseClassCourses.stream()
+                .map(BaseClassCourse::getId)
+                .collect(Collectors.toList());
+
+        MPJLambdaWrapper<BaseClassCourse> baseClassCourseMPJLambdaWrapper = new MPJLambdaWrapper<>();
+        baseClassCourseMPJLambdaWrapper
+                .disableSubLogicDel()
+                .distinct()
+                .selectAs(BaseClassCourse::getCourseId, TextbookSubscriptionListVo::getCourseSubjectId)
+                .selectAs(BaseClassCourse::getTextbookId, TextbookSubscriptionListVo::getTextbookId)
+                .selectAs(BaseCourseSubject::getName, TextbookSubscriptionListVo::getCourseName)
+                .select(Textbook.class, x -> VoToColumnUtil.fieldsToColumns(TextbookSubscriptionListVo.class).contains(x.getProperty()))
+                .innerJoin(Textbook.class, Textbook::getId, BaseClassCourse::getTextbookId)
+                .leftJoin(BaseCourseSubject.class, BaseCourseSubject::getId, BaseClassCourse::getCourseId)
+                .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, Textbook::getTextbookType,
+                        wrapper -> wrapper
+                                .selectAs(DictionaryDetail::getName, TextbookSubscriptionListVo::getTextbookTypeCn)
+                )
+                .eq(BaseClassCourse::getBaseSemesterId, dto.getBaseSemesterId())
+                .in(BaseClassCourse::getClassId, dto.getClassIdList())
+                .notIn(!baseClassCourseIds.isEmpty(), BaseClassCourse::getId, baseClassCourseIds)
+                .eq(BaseClassCourse::getDeleteMark, DeleteMark.NODELETE.getCode())
+                .eq(Textbook::getDeleteMark, DeleteMark.NODELETE.getCode())
+        ;
+        List<TextbookSubscriptionListVo> textbookSubscriptionListVoList = baseClassCourseMapper.selectJoinList(TextbookSubscriptionListVo.class, baseClassCourseMPJLambdaWrapper);
+//        IPage<TextbookSubscriptionListVo> page = this.baseMapper.getSubscriptionPageByClass(new Page<>(dto.getLimit(), dto.getSize()), dto);
+
+        // 处理每本教材使用的人数
+        if(!classIdList.isEmpty()) {
+            for(TextbookSubscriptionListVo t : textbookSubscriptionListVoList){
+                MPJLambdaWrapper<BaseClassCourse> countNum = new MPJLambdaWrapper<>();
+                countNum
+                        .innerJoin(BaseStudentSchoolRoll.class, BaseStudentSchoolRoll::getClassId, BaseClassCourse::getClassId)
+                        .eq(BaseStudentSchoolRoll::getArchivesStatus, ArchivesStatusEnum.FB2901.getCode())
+                        .eq(BaseClassCourse::getTextbookId, t.getTextbookId())
+                        .eq(BaseClassCourse::getBaseSemesterId, dto.getBaseSemesterId())
+                        .in(BaseClassCourse::getClassId, dto.getClassIdList())
+                        .notIn(!baseClassCourseIds.isEmpty(), BaseClassCourse::getId, baseClassCourseIds)
+                        .eq(BaseClassCourse::getDeleteMark, DeleteMark.NODELETE.getCode())
+                ;
+                Long num = baseClassCourseMapper.selectCount(countNum);
+                t.setStudentSubscriptionNumber(num.intValue());
+
+                t.setClassIds(dto.getClassIds());
+            }
+        }
+
+        return textbookSubscriptionListVoList;
+    }
+
 //    private void saveData(List<TextbookImportDto> dataList) {
 //        //查询所有需要的数据
 //        //学科组

+ 7 - 0
src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookWarehouseRecordServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 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.WarehouseModeEnum;
 import com.xjrsoft.common.exception.MyException;
 import com.xjrsoft.module.textbook.dto.AddTextbookWarehouseRecordDto;
@@ -37,6 +38,12 @@ public class TextbookWarehouseRecordServiceImpl extends MPJBaseServiceImpl<Textb
 
     @Override
     public Page<TextbookWarehouseRecordPageVo> getPage(Page<TextbookWarehouseRecordPageDto> page, TextbookWarehouseRecordPageDto dto) {
+//        MPJLambdaWrapper<TextbookWarehouseRecord> textbookWarehouseRecordMPJLambdaWrapper = new MPJLambdaWrapper<>();
+//        textbookWarehouseRecordMPJLambdaWrapper
+//                .leftJoin()
+//                ;
+
+
         return textbookWarehouseRecordMapper.getPage(page, dto);
     }
 

+ 12 - 0
src/main/java/com/xjrsoft/module/textbook/vo/TextbookSubscriptionListVo.java

@@ -5,6 +5,8 @@ import com.alibaba.excel.annotation.write.style.ContentStyle;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.math.BigDecimal;
+
 /**
 * @title: 教材管理表单出参
 * @Author szs
@@ -74,6 +76,16 @@ public class TextbookSubscriptionListVo {
      */
     @ApiModelProperty("使用类型(单位:学期)")
     private Integer useType;
+    /**
+     * 定价(元)
+     */
+    @ApiModelProperty("定价(元)")
+    private BigDecimal price;
+    /**
+     * 预估折扣
+     */
+    @ApiModelProperty("预估折扣")
+    private Double discount;
     /**
      * 学生用书征订数量
      */

+ 25 - 0
src/test/java/com/xjrsoft/xjrsoftboot/FreeMarkerGeneratorTest.java

@@ -4146,4 +4146,29 @@ public class FreeMarkerGeneratorTest {
 
         apiGeneratorService.generateCodes(params);
     }
+
+    @Test
+    public void gcTextbookWarehouseRecord() throws IOException {
+        List<TableConfig> tableConfigs = new ArrayList<>();
+        TableConfig mainTable = new TableConfig();
+        mainTable.setTableName("textbook_warehouse_record");//init_sql中的表名
+        mainTable.setIsMain(true);//是否是主表,一般默认为true
+        mainTable.setPkField(GlobalConstant.DEFAULT_PK);//设置主键
+        mainTable.setPkType(GlobalConstant.DEFAULT_PK_TYPE);//设置主键类型
+        tableConfigs.add(mainTable);
+
+        ApiGenerateCodesDto params = new ApiGenerateCodesDto();
+        params.setAuthor("dzx");//作者名称
+        params.setPackageName("textbook");//包名
+        params.setTableConfigs(tableConfigs);
+        params.setPage(true);//是否生成分页接口
+        params.setImport(true);//是否生成导入接口
+        params.setExport(true);//是否生成导出接口
+        params.setOutMainDir(false);//是否生成在主目录,前期测试可设置成false
+        params.setDs(ds);
+
+        IApiGeneratorService apiGeneratorService = new ApiGeneratorServiceImpl();
+
+        apiGeneratorService.generateCodes(params);
+    }
 }