Quellcode durchsuchen

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

dzx vor 9 Monaten
Ursprung
Commit
8f7fb6a869
18 geänderte Dateien mit 369 neuen und 81 gelöschten Zeilen
  1. 22 0
      src/main/java/com/xjrsoft/common/utils/AmountFormatter.java
  2. 0 1
      src/main/java/com/xjrsoft/module/textbook/controller/TextbookController.java
  3. 26 17
      src/main/java/com/xjrsoft/module/textbook/controller/TextbookStudentClaimController.java
  4. 8 5
      src/main/java/com/xjrsoft/module/textbook/controller/TextbookWarehouseRecordController.java
  5. 2 0
      src/main/java/com/xjrsoft/module/textbook/controller/TextbookWarehouseRecordDetailController.java
  6. 18 0
      src/main/java/com/xjrsoft/module/textbook/dto/HeadTeaLookClassBookDto.java
  7. 3 5
      src/main/java/com/xjrsoft/module/textbook/dto/TextbookWarehouseRecordDetailPageDto.java
  8. 16 0
      src/main/java/com/xjrsoft/module/textbook/dto/UpdateDiscountDto.java
  9. 15 10
      src/main/java/com/xjrsoft/module/textbook/service/ITextbookStudentClaimService.java
  10. 3 0
      src/main/java/com/xjrsoft/module/textbook/service/ITextbookWarehouseRecordService.java
  11. 122 14
      src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookStudentClaimServiceImpl.java
  12. 1 1
      src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookSubscriptionServiceImpl.java
  13. 42 4
      src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookWarehouseRecordServiceImpl.java
  14. 29 0
      src/main/java/com/xjrsoft/module/textbook/vo/HeadTeaLookClassBookCategoryDetailVo.java
  15. 24 0
      src/main/java/com/xjrsoft/module/textbook/vo/HeadTeaLookClassBookCategoryVo.java
  16. 20 0
      src/main/java/com/xjrsoft/module/textbook/vo/HeadTeaLookClassBookSemesterVo.java
  17. 18 0
      src/main/java/com/xjrsoft/module/textbook/vo/HeadTeaLookClassBookVo.java
  18. 0 24
      src/main/resources/sqlScript/textbook_sql.sql

+ 22 - 0
src/main/java/com/xjrsoft/common/utils/AmountFormatter.java

@@ -0,0 +1,22 @@
+package com.xjrsoft.common.utils;
+
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
+
+public class AmountFormatter {
+    public static String formatAmount(double amount) {
+        // 将 double 转换为 BigDecimal 以避免精度问题
+        BigDecimal bigDecimal = BigDecimal.valueOf(amount);
+
+        // 判断小数点后的位数
+        int scale = bigDecimal.scale();
+        if (scale <= 2) {
+            // 如果小数点后少于或等于两位,补全两位
+            DecimalFormat df = new DecimalFormat("#.00");
+            return df.format(amount);
+        } else {
+            // 如果小数点后超过两位,保留实际值
+            return String.valueOf(amount);
+        }
+    }
+}

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

@@ -287,5 +287,4 @@ public class TextbookController {
         fileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8);
         return R.fileStream(bot.toByteArray(), fileName + ExcelTypeEnum.XLSX.getValue());
     }
-
 }

+ 26 - 17
src/main/java/com/xjrsoft/module/textbook/controller/TextbookStudentClaimController.java

@@ -5,28 +5,15 @@ import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.PageOutput;
 import com.xjrsoft.common.utils.VoToColumnUtil;
-import com.xjrsoft.module.textbook.dto.AddTextbookStudentClaimDto;
-import com.xjrsoft.module.textbook.dto.TeacherCheckByStuDto;
-import com.xjrsoft.module.textbook.dto.TeacherCheckByclassDto;
-import com.xjrsoft.module.textbook.dto.TeacherCheckStuClaimDto;
-import com.xjrsoft.module.textbook.dto.TeacherConfirmDto;
-import com.xjrsoft.module.textbook.dto.TextbookClaimStudentConfirmDto;
-import com.xjrsoft.module.textbook.dto.TextbookStudentClaimPageDto;
-import com.xjrsoft.module.textbook.dto.UpdateTextbookStudentClaimDto;
+import com.xjrsoft.module.textbook.dto.*;
 import com.xjrsoft.module.textbook.entity.TextbookStudentClaim;
 import com.xjrsoft.module.textbook.service.ITextbookStudentClaimService;
-import com.xjrsoft.module.textbook.vo.TeacherCheckByStuVo;
-import com.xjrsoft.module.textbook.vo.TeacherCheckByclassVo;
-import com.xjrsoft.module.textbook.vo.TeacherCheckStuClaimVo;
-import com.xjrsoft.module.textbook.vo.TextbookClaimStudentConfirmVo;
-import com.xjrsoft.module.textbook.vo.TextbookClaimVO;
-import com.xjrsoft.module.textbook.vo.TextbookStudentClaimPageVo;
-import com.xjrsoft.module.textbook.vo.TextbookStudentClaimVo;
-import com.xjrsoft.module.textbook.vo.TextbookStudentSemesterVo;
+import com.xjrsoft.module.textbook.vo.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
@@ -55,9 +42,22 @@ import java.util.List;
 @AllArgsConstructor
 public class TextbookStudentClaimController {
 
-
     private final ITextbookStudentClaimService textbookStudentClaimService;
 
+    @GetMapping(value = "/head-tea-look-class-book-semester")
+    @ApiOperation(value="班主任查看班级教材学期页面")
+    @SaCheckPermission("textbookstudentclaim:detail")
+    public RT<List<HeadTeaLookClassBookSemesterVo>> headTeaLookClassBookSemester(){
+        return RT.ok(textbookStudentClaimService.headTeaLookClassBookSemester());
+    }
+
+    @GetMapping(value = "/head-tea-look-class-book")
+    @ApiOperation(value="班主任查看班级教材页面")
+    @SaCheckPermission("textbookstudentclaim:detail")
+    public RT<HeadTeaLookClassBookVo> headTeaLookClassBook(@Valid HeadTeaLookClassBookDto dto){
+        return RT.ok(textbookStudentClaimService.headTeaLookClassBook(dto));
+    }
+
     @GetMapping(value = "/page")
     @ApiOperation(value="学生教材认领记录列表(分页)")
     @SaCheckPermission("textbookstudentclaim:detail")
@@ -99,6 +99,15 @@ public class TextbookStudentClaimController {
         return RT.ok(pageOutput);
     }
 
+//    @GetMapping(value = "/teacher-check-byClass-list")
+//    @ApiOperation(value="班主任为学生教材领取按班级查看页面")
+//    @SaCheckPermission("textbookstudentclaim:detail")
+//    public RT<PageOutput<TeacherCheckByclassVo>> teacherCheckByClassList(@Valid TeacherCheckByclassDto dto){
+//        IPage<TeacherCheckByclassVo> page = textbookStudentClaimService.getTeacherCheckByclassList(dto);
+//        PageOutput<TeacherCheckByclassVo> pageOutput = ConventPage.getPageOutput(page, TeacherCheckByclassVo.class);
+//        return RT.ok(pageOutput);
+//    }
+
     @GetMapping(value = "/teacher-check-byStu-list")
     @ApiOperation(value="教师教材领取按学生查看页面")
     @SaCheckPermission("textbookstudentclaim:detail")

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

@@ -9,10 +9,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.PageOutput;
-import com.xjrsoft.module.textbook.dto.AddTextbookWarehouseRecordDto;
-import com.xjrsoft.module.textbook.dto.TextbookWarehouseRecordExportDto;
-import com.xjrsoft.module.textbook.dto.TextbookWarehouseRecordPageDto;
-import com.xjrsoft.module.textbook.dto.UpdateTextbookWarehouseRecordDto;
+import com.xjrsoft.module.textbook.dto.*;
 import com.xjrsoft.module.textbook.entity.TextbookWarehouseRecord;
 import com.xjrsoft.module.textbook.service.ITextbookWarehouseRecordService;
 import com.xjrsoft.module.textbook.vo.TextbookWarehouseRecordExcelVo;
@@ -81,12 +78,18 @@ public class TextbookWarehouseRecordController {
     @ApiOperation(value = "修改教材入库")
     @SaCheckPermission("textbookclasswarehouse:edit")
     public RT<Boolean> update(@Valid @RequestBody UpdateTextbookWarehouseRecordDto dto){
-
         TextbookWarehouseRecord textbookWarehouseRecord = BeanUtil.toBean(dto, TextbookWarehouseRecord.class);
         return RT.ok(textbookClassWarehouseService.updateById(textbookWarehouseRecord));
 
     }
 
+    @PutMapping("/update-discount")
+    @ApiOperation(value = "修改入库后的折扣")
+    @SaCheckPermission("textbookclasswarehouse:edit")
+    public RT<Boolean> updateDiscount(@Valid @RequestBody UpdateDiscountDto dto){
+        return RT.ok(textbookClassWarehouseService.updateDiscount(dto));
+    }
+
     @DeleteMapping
     @ApiOperation(value = "删除教材入库")
     @SaCheckPermission("textbookclasswarehouse:delete")

+ 2 - 0
src/main/java/com/xjrsoft/module/textbook/controller/TextbookWarehouseRecordDetailController.java

@@ -20,6 +20,7 @@ import com.xjrsoft.module.textbook.dto.AddTextbookWarehouseRecordDetailDto;
 import com.xjrsoft.module.textbook.dto.UpdateTextbookWarehouseRecordDetailDto;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import com.alibaba.excel.EasyExcel;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.web.multipart.MultipartFile;
 import java.io.IOException;
 import com.alibaba.excel.support.ExcelTypeEnum;
@@ -74,6 +75,7 @@ public class TextbookWarehouseRecordDetailController {
                                 .selectAs(DictionaryDetail::getName, TextbookWarehouseRecordDetailPageVo::getWarehouseModeCn)
                 )
                 .eq(ObjectUtils.isNotEmpty(dto.getTextbookWarehouseRecordId()), TextbookWarehouseRecordDetail::getTextbookWarehouseRecordId, dto.getTextbookWarehouseRecordId())
+                .eq(StringUtils.isNotEmpty(dto.getWarehouseMode()), TextbookWarehouseRecordDetail::getWarehouseMode, dto.getWarehouseMode())
                 .orderByDesc(TextbookWarehouseRecordDetail::getId)
         ;
         IPage<TextbookWarehouseRecordDetailPageVo> page = textbookWarehouseRecordDetailService.selectJoinListPage(ConventPage.getPage(dto), TextbookWarehouseRecordDetailPageVo.class, queryWrapper);

+ 18 - 0
src/main/java/com/xjrsoft/module/textbook/dto/HeadTeaLookClassBookDto.java

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

+ 3 - 5
src/main/java/com/xjrsoft/module/textbook/dto/TextbookWarehouseRecordDetailPageDto.java

@@ -24,11 +24,9 @@ import java.util.Date;
 @EqualsAndHashCode(callSuper = false)
 public class TextbookWarehouseRecordDetailPageDto extends PageInput {
 
-    /**
-     * 教材入库记录主键id(textbook_warehouse_record)
-     */
-    @ContentStyle(dataFormat = 49)
-    @ExcelProperty("教材入库记录主键id(textbook_warehouse_record)")
     @ApiModelProperty("教材入库记录主键id(textbook_warehouse_record)")
     private Long textbookWarehouseRecordId;
+
+    @ApiModelProperty("入库方式(xjr_dictionary_item[warehouse_mode])")
+    private String warehouseMode;
 }

+ 16 - 0
src/main/java/com/xjrsoft/module/textbook/dto/UpdateDiscountDto.java

@@ -0,0 +1,16 @@
+package com.xjrsoft.module.textbook.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class UpdateDiscountDto {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("入库记录主键id")
+    private Long id;
+
+    @ApiModelProperty("新的折扣")
+    private Double discount;
+}

+ 15 - 10
src/main/java/com/xjrsoft/module/textbook/service/ITextbookStudentClaimService.java

@@ -2,17 +2,9 @@ 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.TeacherCheckByStuDto;
-import com.xjrsoft.module.textbook.dto.TeacherCheckByclassDto;
-import com.xjrsoft.module.textbook.dto.TeacherCheckStuClaimDto;
-import com.xjrsoft.module.textbook.dto.TextbookClaimStudentConfirmDto;
+import com.xjrsoft.module.textbook.dto.*;
 import com.xjrsoft.module.textbook.entity.TextbookStudentClaim;
-import com.xjrsoft.module.textbook.vo.TeacherCheckByStuVo;
-import com.xjrsoft.module.textbook.vo.TeacherCheckByclassVo;
-import com.xjrsoft.module.textbook.vo.TeacherCheckStuClaimVo;
-import com.xjrsoft.module.textbook.vo.TextbookClaimStudentConfirmVo;
-import com.xjrsoft.module.textbook.vo.TextbookClaimVO;
-import com.xjrsoft.module.textbook.vo.TextbookStudentSemesterVo;
+import com.xjrsoft.module.textbook.vo.*;
 
 import java.util.List;
 
@@ -24,6 +16,19 @@ import java.util.List;
 */
 
 public interface ITextbookStudentClaimService extends MPJBaseService<TextbookStudentClaim> {
+    /**
+     * 班主任查看班级教材页面
+     * @param dto
+     * @return
+     */
+    HeadTeaLookClassBookVo headTeaLookClassBook(HeadTeaLookClassBookDto dto);
+
+    /**
+     * 班主任查看班级教材学期页面
+     * @param
+     * @return
+     */
+    List<HeadTeaLookClassBookSemesterVo> headTeaLookClassBookSemester();
 
     /**
      * 获取页面

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

@@ -5,6 +5,7 @@ import com.github.yulichang.base.MPJBaseService;
 import com.xjrsoft.module.textbook.dto.AddTextbookWarehouseRecordDto;
 import com.xjrsoft.module.textbook.dto.TextbookWarehouseRecordExportDto;
 import com.xjrsoft.module.textbook.dto.TextbookWarehouseRecordPageDto;
+import com.xjrsoft.module.textbook.dto.UpdateDiscountDto;
 import com.xjrsoft.module.textbook.entity.TextbookWarehouseRecord;
 import com.xjrsoft.module.textbook.vo.TextbookWarehouseRecordPageVo;
 
@@ -26,4 +27,6 @@ public interface ITextbookWarehouseRecordService extends MPJBaseService<Textbook
     List<TextbookWarehouseRecordPageVo> getList(TextbookWarehouseRecordExportDto dto);
 
     List<TextbookWarehouseRecordPageVo> getList();
+
+    Boolean updateDiscount(UpdateDiscountDto dto);
 }

+ 122 - 14
src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookStudentClaimServiceImpl.java

@@ -7,41 +7,42 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.xjrsoft.common.enums.ClaimTypeEnum;
 import com.xjrsoft.common.exception.MyException;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.module.base.entity.BaseClass;
+import com.xjrsoft.module.base.entity.BaseClassAdminCourse;
+import com.xjrsoft.module.base.entity.BaseClassCourse;
 import com.xjrsoft.module.base.entity.BaseSemester;
+import com.xjrsoft.module.base.mapper.BaseClassAdminCourseMapper;
+import com.xjrsoft.module.base.mapper.BaseClassCourseMapper;
 import com.xjrsoft.module.base.service.IBaseClassService;
 import com.xjrsoft.module.base.service.IBaseSemesterService;
 import com.xjrsoft.module.student.entity.BaseStudent;
 import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
+import com.xjrsoft.module.system.entity.DictionaryDetail;
 import com.xjrsoft.module.teacher.entity.AttendanceRecord;
 import com.xjrsoft.module.teacher.entity.XjrUser;
 import com.xjrsoft.module.teacher.mapper.XjrUserMapper;
-import com.xjrsoft.module.textbook.dto.TeacherCheckByStuDto;
-import com.xjrsoft.module.textbook.dto.TeacherCheckByclassDto;
-import com.xjrsoft.module.textbook.dto.TeacherCheckStuClaimDto;
-import com.xjrsoft.module.textbook.dto.TextbookClaimStudentConfirmDto;
-import com.xjrsoft.module.textbook.entity.Textbook;
-import com.xjrsoft.module.textbook.entity.TextbookStudentClaim;
+import com.xjrsoft.module.textbook.dto.*;
+import com.xjrsoft.module.textbook.entity.*;
 import com.xjrsoft.module.textbook.mapper.TextbookStudentClaimMapper;
 import com.xjrsoft.module.textbook.mapper.WfTextbookClaimItemMapper;
-import com.xjrsoft.module.textbook.mapper.WfTextbookClaimMapper;
 import com.xjrsoft.module.textbook.service.ITextbookStudentClaimService;
-import com.xjrsoft.module.textbook.vo.TeacherCheckByStuVo;
-import com.xjrsoft.module.textbook.vo.TeacherCheckByclassVo;
-import com.xjrsoft.module.textbook.vo.TeacherCheckStuClaimVo;
-import com.xjrsoft.module.textbook.vo.TextbookClaimStudentConfirmVo;
-import com.xjrsoft.module.textbook.vo.TextbookClaimVO;
-import com.xjrsoft.module.textbook.vo.TextbookStudentSemesterVo;
+import com.xjrsoft.module.textbook.vo.*;
 import lombok.AllArgsConstructor;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @title: 学生教材认领记录
@@ -61,10 +62,117 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
 
     private final IBaseClassService baseClassService;
 
-    private final WfTextbookClaimMapper wfTextbookClaimMapper;
+    private final BaseClassAdminCourseMapper baseClassAdminCourseMapper;
+
+    private final BaseClassCourseMapper baseClassCourseMapper;
 
     private final WfTextbookClaimItemMapper wfTextbookClaimItemMapper;
 
+    @Override
+    public HeadTeaLookClassBookVo headTeaLookClassBook(HeadTeaLookClassBookDto dto) {
+        HeadTeaLookClassBookVo result = new HeadTeaLookClassBookVo();
+
+        // 先去申领中找,如果申领中没有数据,那么就到班级课程中找
+        MPJLambdaWrapper<WfTextbookClaimItem> wfTextbookClaimItemMPJLambdaWrapper = new MPJLambdaWrapper<>();
+        wfTextbookClaimItemMPJLambdaWrapper
+                .disableSubLogicDel()
+                .selectAs(Textbook::getBookName, HeadTeaLookClassBookCategoryDetailVo::getBookName)
+                .selectAs(Textbook::getPrice, HeadTeaLookClassBookCategoryDetailVo::getPrice)
+                .selectAs(Textbook::getTextbookType, HeadTeaLookClassBookCategoryDetailVo::getTextbookType)
+                .selectAs(WfTextbookClaimItem::getCreateDate, HeadTeaLookClassBookCategoryDetailVo::getClaimTime)
+                .select("1 as claim_num")
+                .innerJoin(WfTextbookClaim.class, WfTextbookClaim::getId, WfTextbookClaimItem::getWfTextbookClaimId)
+                .innerJoin(Textbook.class, Textbook::getId, WfTextbookClaimItem::getTextbookId)
+                .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, Textbook::getTextbookType,
+                        wrapper -> wrapper
+                                .selectAs(DictionaryDetail::getName, HeadTeaLookClassBookCategoryDetailVo::getTextbookTypeCn)
+                )
+                .eq(WfTextbookClaim::getBaseSemesterId, dto.getBaseSemesterId())
+                .eq(WfTextbookClaim::getClassId, dto.getBaseClassId())
+                .eq(WfTextbookClaim::getClaimType, ClaimTypeEnum.ClaimClass.getCode())
+                ;
+        List<HeadTeaLookClassBookCategoryDetailVo> claimResultList = wfTextbookClaimItemMapper.selectJoinList(HeadTeaLookClassBookCategoryDetailVo.class, wfTextbookClaimItemMPJLambdaWrapper);
+
+        if(ObjectUtils.isEmpty(claimResultList)){
+            MPJLambdaWrapper<BaseClassCourse> baseClassCourseMPJLambdaWrapper = new MPJLambdaWrapper<>();
+            baseClassCourseMPJLambdaWrapper
+                    .disableSubLogicDel()
+                    .selectAs(Textbook::getBookName, HeadTeaLookClassBookCategoryDetailVo::getBookName)
+                    .selectAs(Textbook::getPrice, HeadTeaLookClassBookCategoryDetailVo::getPrice)
+                    .selectAs(Textbook::getTextbookType, HeadTeaLookClassBookCategoryDetailVo::getTextbookType)
+                    .select("1 as claim_num")
+                    .innerJoin(BaseClassAdminCourse.class, BaseClassAdminCourse::getId, BaseClassCourse::getClassId)
+                    .innerJoin(Textbook.class, Textbook::getId, BaseClassCourse::getTextbookId)
+                    .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, Textbook::getTextbookType,
+                        wrapper -> wrapper
+                                .selectAs(DictionaryDetail::getName, HeadTeaLookClassBookCategoryDetailVo::getTextbookTypeCn)
+                    )
+                    .eq(BaseClassAdminCourse::getBaseSemesterId, dto.getBaseSemesterId())
+                    .eq(BaseClassAdminCourse::getClassId, dto.getBaseClassId())
+            ;
+            claimResultList = baseClassCourseMapper.selectJoinList(HeadTeaLookClassBookCategoryDetailVo.class, baseClassCourseMPJLambdaWrapper);
+        }
+
+        if(ObjectUtils.isNotEmpty(claimResultList)){
+            // 处理数据
+            // 根据类型分组
+            Map<String, List<HeadTeaLookClassBookCategoryDetailVo>> detailByCategoryMap = claimResultList.stream()
+                    .filter(detail -> StringUtils.isNotEmpty(detail.getTextbookType())) // Exclude entries where textbookType is null
+                    .collect(Collectors.groupingBy(HeadTeaLookClassBookCategoryDetailVo::getTextbookType));
+
+            BigDecimal totalPrice = BigDecimal.ZERO;
+            List<HeadTeaLookClassBookCategoryVo> categoryVos = new ArrayList<>();
+            BigDecimal categoryTotalPrice;
+            HeadTeaLookClassBookCategoryVo headTeaLookClassBookCategoryVo;
+            for (Map.Entry<String, List<HeadTeaLookClassBookCategoryDetailVo>> entry : detailByCategoryMap.entrySet()){
+                String key = entry.getKey();
+                List<HeadTeaLookClassBookCategoryDetailVo> value = entry.getValue();
+
+                if(ObjectUtils.isNotEmpty(value)){
+                    headTeaLookClassBookCategoryVo = new HeadTeaLookClassBookCategoryVo();
+                    headTeaLookClassBookCategoryVo.setTextbookType(key);
+                    headTeaLookClassBookCategoryVo.setTextbookTypeCn(value.get(0).getTextbookTypeCn());
+                    headTeaLookClassBookCategoryVo.setCategoryDetailVos(value);
+
+                    categoryTotalPrice = BigDecimal.ZERO;
+                    for (HeadTeaLookClassBookCategoryDetailVo vo : value){
+                        if(ObjectUtils.isEmpty(vo.getPrice())){
+                            vo.setPrice(BigDecimal.ZERO);
+                        }
+                        categoryTotalPrice = categoryTotalPrice.add(vo.getPrice().multiply(BigDecimal.valueOf(vo.getClaimNum())));
+                        totalPrice = totalPrice.add(vo.getPrice().multiply(BigDecimal.valueOf(vo.getClaimNum())));
+                    }
+                    headTeaLookClassBookCategoryVo.setCategoryTotalPrice(categoryTotalPrice);
+
+                    categoryVos.add(headTeaLookClassBookCategoryVo);
+                }
+
+                result.setTotalPrice(totalPrice);
+                result.setCategoryVos(categoryVos);
+            }
+        }
+        return result;
+    }
+
+    @Override
+    public List<HeadTeaLookClassBookSemesterVo> headTeaLookClassBookSemester() {
+        Long loginId = StpUtil.getLoginIdAsLong();
+
+        MPJLambdaWrapper<BaseClassAdminCourse> baseClassAdminCourseMPJLambdaWrapper = new MPJLambdaWrapper<>();
+        baseClassAdminCourseMPJLambdaWrapper
+                .disableSubLogicDel()
+                .selectAs(BaseClassAdminCourse::getBaseSemesterId, HeadTeaLookClassBookSemesterVo::getBaseSemesterId)
+                .selectAs(BaseSemester::getName, HeadTeaLookClassBookSemesterVo::getBaseSemesterIdCn)
+                .selectAs(BaseClassAdminCourse::getClassId, HeadTeaLookClassBookSemesterVo::getBaseClassId)
+                .selectAs(BaseClass::getName, HeadTeaLookClassBookSemesterVo::getBaseClassIdCn)
+                .innerJoin(BaseClass.class, BaseClass::getId, BaseClassAdminCourse::getClassId)
+                .leftJoin(BaseSemester.class, BaseSemester::getId, BaseClassAdminCourse::getBaseSemesterId)
+                .eq(BaseClass::getTeacherId, loginId)
+                .orderByDesc(BaseSemester::getName)
+                ;
+        return baseClassAdminCourseMapper.selectJoinList(HeadTeaLookClassBookSemesterVo.class, baseClassAdminCourseMPJLambdaWrapper);
+    }
+
     @Override
     public TextbookClaimStudentConfirmVo getStudentConfirmList(TextbookClaimStudentConfirmDto dto) {
         //获取当前登录学生的信息

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

@@ -328,7 +328,7 @@ public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<Textbook
                 )
                 .eq(TextbookWarehouseRecord::getTextbookId, dto.getTextbookId())
                 .gt(TextbookWarehouseRecord::getRemainNumber, 0)
-                .orderByAsc(TextbookSubscriptionItem::getCreateDate)
+                .orderByAsc(TextbookWarehouseRecord::getCreateDate)
         ;
         return textbookWarehouseRecordMapper.selectJoinList(SubscriptionItemListDistributeVo.class, textbookWarehouseRecordMPJLambdaWrapper);
     }

+ 42 - 4
src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookWarehouseRecordServiceImpl.java

@@ -19,12 +19,10 @@ import com.xjrsoft.module.base.entity.BaseSemester;
 import com.xjrsoft.module.base.entity.CourseSubjectDetail;
 import com.xjrsoft.module.system.entity.DictionaryDetail;
 import com.xjrsoft.module.teacher.entity.XjrUser;
-import com.xjrsoft.module.textbook.dto.AddTextbookWarehouseRecordDto;
-import com.xjrsoft.module.textbook.dto.TextbookWarehouseRecordExportDto;
-import com.xjrsoft.module.textbook.dto.TextbookWarehouseRecordPageDto;
-import com.xjrsoft.module.textbook.dto.TextbookWarehouseTextbooksDto;
+import com.xjrsoft.module.textbook.dto.*;
 import com.xjrsoft.module.textbook.entity.*;
 import com.xjrsoft.module.textbook.mapper.TextbookMapper;
+import com.xjrsoft.module.textbook.mapper.TextbookSubscriptionItemMapper;
 import com.xjrsoft.module.textbook.mapper.TextbookWarehouseRecordDetailMapper;
 import com.xjrsoft.module.textbook.mapper.TextbookWarehouseRecordMapper;
 import com.xjrsoft.module.textbook.service.ITextbookWarehouseRecordService;
@@ -57,6 +55,8 @@ public class TextbookWarehouseRecordServiceImpl extends MPJBaseServiceImpl<Textb
 
     private final TextbookWarehouseRecordDetailMapper textbookWarehouseRecordDetailMapper;
 
+    private final TextbookSubscriptionItemMapper textbookSubscriptionItemMapper;
+
     @Override
     public IPage<TextbookWarehouseRecordPageVo> getPage(TextbookWarehouseRecordPageDto dto) {
         MPJLambdaWrapper<TextbookWarehouseRecord> textbookWarehouseRecordMPJLambdaWrapper = new MPJLambdaWrapper<>();
@@ -190,4 +190,42 @@ public class TextbookWarehouseRecordServiceImpl extends MPJBaseServiceImpl<Textb
     public List<TextbookWarehouseRecordPageVo> getList() {
         return getList(new TextbookWarehouseRecordExportDto());
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean updateDiscount(UpdateDiscountDto dto) {
+        TextbookWarehouseRecord textbookWarehouseRecord = this.getById(dto.getId());
+        if(ObjectUtils.isEmpty(textbookWarehouseRecord)){
+            throw new MyException("当前入库记录已经被修改,请重新选择");
+        }
+
+        // 如果是征订入库
+        // 根据入库记录找到对应的征订
+        MPJLambdaWrapper<TextbookWarehouseRecord> textbookWarehouseRecordMPJLambdaWrapper = new MPJLambdaWrapper<>();
+        textbookWarehouseRecordMPJLambdaWrapper
+                .disableSubLogicDel()
+                .select(TextbookSubscriptionItem::getId)
+                .select(TextbookSubscriptionItem.class,x -> VoToColumnUtil.fieldsToColumns(TextbookSubscriptionItem.class).contains(x.getProperty()))
+                .innerJoin(TextbookSubscriptionItem.class, TextbookSubscriptionItem::getId, TextbookWarehouseRecord::getDataItemId)
+                .eq(TextbookWarehouseRecord::getId, dto.getId())
+                ;
+        TextbookSubscriptionItem textbookSubscriptionItem = textbookWarehouseRecordMapper.selectJoinOne(TextbookSubscriptionItem.class, textbookWarehouseRecordMPJLambdaWrapper);
+        if(ObjectUtils.isNotEmpty(textbookSubscriptionItem)){
+            TextbookSubscriptionItem updateTextbookSubscriptionItem = new TextbookSubscriptionItem();
+            updateTextbookSubscriptionItem.setId(textbookSubscriptionItem.getId());
+            updateTextbookSubscriptionItem.setDiscount(dto.getDiscount());
+            updateTextbookSubscriptionItem.setPrice(textbookWarehouseRecord.getPrice().multiply(BigDecimal.valueOf(dto.getDiscount() / 10)));
+            textbookSubscriptionItemMapper.updateById(updateTextbookSubscriptionItem);
+        }
+
+        TextbookWarehouseRecord updateTextbookWarehouseRecord = new TextbookWarehouseRecord();
+        updateTextbookWarehouseRecord.setId(textbookWarehouseRecord.getId());
+        updateTextbookWarehouseRecord.setDiscount(dto.getDiscount());
+        updateTextbookWarehouseRecord.setSubtotal(textbookWarehouseRecord.getPrice().multiply(BigDecimal.valueOf(dto.getDiscount() / 10)));
+        updateTextbookWarehouseRecord.setTotalPrice(updateTextbookWarehouseRecord.getSubtotal().multiply(BigDecimal.valueOf(textbookWarehouseRecord.getWarehouseNumber())));
+        updateTextbookWarehouseRecord.setActualTotalPrice(updateTextbookWarehouseRecord.getSubtotal().multiply(BigDecimal.valueOf(textbookWarehouseRecord.getActualWarehouseNumber())));
+        textbookWarehouseRecordMapper.updateById(updateTextbookWarehouseRecord);
+
+        return true;
+    }
 }

+ 29 - 0
src/main/java/com/xjrsoft/module/textbook/vo/HeadTeaLookClassBookCategoryDetailVo.java

@@ -0,0 +1,29 @@
+package com.xjrsoft.module.textbook.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+public class HeadTeaLookClassBookCategoryDetailVo {
+
+    @ApiModelProperty("书名")
+    private String bookName;
+
+    @ApiModelProperty("价格")
+    private BigDecimal price;
+
+    @ApiModelProperty("教材分类(xjr_dictionary_item[textbook_type])")
+    private String textbookType;
+
+    @ApiModelProperty("教材分类(xjr_dictionary_item[textbook_type])")
+    private String textbookTypeCn;
+
+    @ApiModelProperty("申领时间")
+    private LocalDateTime claimTime;
+
+    @ApiModelProperty("申领数量")
+    private Integer claimNum;
+}

+ 24 - 0
src/main/java/com/xjrsoft/module/textbook/vo/HeadTeaLookClassBookCategoryVo.java

@@ -0,0 +1,24 @@
+package com.xjrsoft.module.textbook.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+@Data
+public class HeadTeaLookClassBookCategoryVo {
+
+    @ApiModelProperty("教材分类(xjr_dictionary_item[textbook_type])")
+    private String textbookType;
+
+    @ApiModelProperty("教材分类(xjr_dictionary_item[textbook_type])")
+    private String textbookTypeCn;
+
+    @ApiModelProperty("分类合计总价")
+    private BigDecimal categoryTotalPrice;
+
+    @ApiModelProperty("分类合计总价")
+    private List<HeadTeaLookClassBookCategoryDetailVo> categoryDetailVos;
+}

+ 20 - 0
src/main/java/com/xjrsoft/module/textbook/vo/HeadTeaLookClassBookSemesterVo.java

@@ -0,0 +1,20 @@
+package com.xjrsoft.module.textbook.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class HeadTeaLookClassBookSemesterVo {
+
+    @ApiModelProperty("学期主键编号")
+    private String baseSemesterId;
+
+    @ApiModelProperty("学期主键编号")
+    private String baseSemesterIdCn;
+
+    @ApiModelProperty("班级主键编号")
+    private String baseClassId;
+
+    @ApiModelProperty("班级主键编号")
+    private String baseClassIdCn;
+}

+ 18 - 0
src/main/java/com/xjrsoft/module/textbook/vo/HeadTeaLookClassBookVo.java

@@ -0,0 +1,18 @@
+package com.xjrsoft.module.textbook.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+@Data
+public class HeadTeaLookClassBookVo {
+
+    @ApiModelProperty("教材教辅合计总价")
+    private BigDecimal totalPrice;
+
+    @ApiModelProperty("教材教辅详细列表")
+    List<HeadTeaLookClassBookCategoryVo> categoryVos;
+}

+ 0 - 24
src/main/resources/sqlScript/textbook_sql.sql

@@ -285,30 +285,6 @@ create table `wf_textbook_claim_item`
   default charset = utf8mb4
   collate = utf8mb4_0900_ai_ci comment ='教材申领项';
 
-# -- ----------------------------
-# -- 2024-12-13 14:36
-# -- 教材申领项与教材征订项关联表
-# -- ----------------------------
-# drop table if exists claim_item_subscription_item;
-# create table `claim_item_subscription_item`
-# (
-#     id                            bigint        not null comment '主键编号'
-#         primary key,
-#     create_user_id                bigint        null comment '创建人',
-#     create_date                   datetime      null comment '创建时间',
-#     modify_user_id                bigint        null comment '修改人',
-#     modify_date                   datetime      null comment '修改时间',
-#     delete_mark                   int           not null comment '删除标记',
-#     enabled_mark                  int           not null comment '有效标志',
-#     sort_code                     int           null comment '序号',
-#
-#     wf_textbook_claim_item_id     bigint        null comment '教材申领编号',
-#     textbook_subscription_item_id bigint        null comment '教材征订编号',
-#     issue_number                  int default 0 null comment '已发放数量'
-# ) engine = innodb
-#   default charset = utf8mb4
-#   collate = utf8mb4_0900_ai_ci comment ='教材申领项与教材征订项关联表';
-
 -- ----------------------------
 -- 2024-12-13 14:36
 -- 教材领取人员