浏览代码

Merge branch 'pre'

dzx 9 月之前
父节点
当前提交
63e94cc801
共有 35 个文件被更改,包括 1151 次插入104 次删除
  1. 22 0
      src/main/java/com/xjrsoft/common/utils/AmountFormatter.java
  2. 5 0
      src/main/java/com/xjrsoft/module/organization/controller/UserController.java
  3. 3 0
      src/main/java/com/xjrsoft/module/organization/dto/UserPageDto.java
  4. 0 1
      src/main/java/com/xjrsoft/module/textbook/controller/TextbookController.java
  5. 149 0
      src/main/java/com/xjrsoft/module/textbook/controller/TextbookDiscountAlterRecordController.java
  6. 26 17
      src/main/java/com/xjrsoft/module/textbook/controller/TextbookStudentClaimController.java
  7. 8 5
      src/main/java/com/xjrsoft/module/textbook/controller/TextbookWarehouseRecordController.java
  8. 20 20
      src/main/java/com/xjrsoft/module/textbook/controller/TextbookWarehouseRecordDetailController.java
  9. 48 0
      src/main/java/com/xjrsoft/module/textbook/dto/AddTextbookDiscountAlterRecordDto.java
  10. 18 0
      src/main/java/com/xjrsoft/module/textbook/dto/HeadTeaLookClassBookDto.java
  11. 36 0
      src/main/java/com/xjrsoft/module/textbook/dto/TextbookDiscountAlterRecordListDto.java
  12. 26 0
      src/main/java/com/xjrsoft/module/textbook/dto/TextbookDiscountAlterRecordPageDto.java
  13. 15 5
      src/main/java/com/xjrsoft/module/textbook/dto/TextbookWarehouseRecordDetailPageDto.java
  14. 16 0
      src/main/java/com/xjrsoft/module/textbook/dto/UpdateDiscountDto.java
  15. 32 0
      src/main/java/com/xjrsoft/module/textbook/dto/UpdateTextbookDiscountAlterRecordDto.java
  16. 98 0
      src/main/java/com/xjrsoft/module/textbook/entity/TextbookDiscountAlterRecord.java
  17. 17 0
      src/main/java/com/xjrsoft/module/textbook/mapper/TextbookDiscountAlterRecordMapper.java
  18. 17 0
      src/main/java/com/xjrsoft/module/textbook/service/ITextbookDiscountAlterRecordService.java
  19. 15 10
      src/main/java/com/xjrsoft/module/textbook/service/ITextbookStudentClaimService.java
  20. 3 0
      src/main/java/com/xjrsoft/module/textbook/service/ITextbookWarehouseRecordService.java
  21. 25 0
      src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookDiscountAlterRecordServiceImpl.java
  22. 122 14
      src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookStudentClaimServiceImpl.java
  23. 1 1
      src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookSubscriptionServiceImpl.java
  24. 53 7
      src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookWarehouseRecordServiceImpl.java
  25. 1 0
      src/main/java/com/xjrsoft/module/textbook/service/impl/WfTextbookRecedeServiceImpl.java
  26. 29 0
      src/main/java/com/xjrsoft/module/textbook/vo/HeadTeaLookClassBookCategoryDetailVo.java
  27. 24 0
      src/main/java/com/xjrsoft/module/textbook/vo/HeadTeaLookClassBookCategoryVo.java
  28. 20 0
      src/main/java/com/xjrsoft/module/textbook/vo/HeadTeaLookClassBookSemesterVo.java
  29. 18 0
      src/main/java/com/xjrsoft/module/textbook/vo/HeadTeaLookClassBookVo.java
  30. 77 0
      src/main/java/com/xjrsoft/module/textbook/vo/TextbookDiscountAlterRecordListVo.java
  31. 104 0
      src/main/java/com/xjrsoft/module/textbook/vo/TextbookDiscountAlterRecordPageVo.java
  32. 49 0
      src/main/java/com/xjrsoft/module/textbook/vo/TextbookDiscountAlterRecordVo.java
  33. 7 0
      src/main/java/com/xjrsoft/module/textbook/vo/TextbookWarehouseRecordDetailPageVo.java
  34. 22 24
      src/main/resources/sqlScript/textbook_sql.sql
  35. 25 0
      src/test/java/com/xjrsoft/xjrsoftboot/FreeMarkerGeneratorTest.java

+ 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);
+        }
+    }
+}

+ 5 - 0
src/main/java/com/xjrsoft/module/organization/controller/UserController.java

@@ -93,6 +93,7 @@ import com.xjrsoft.module.system.entity.DictionaryDetail;
 import com.xjrsoft.module.system.entity.File;
 import com.xjrsoft.module.system.entity.File;
 import com.xjrsoft.module.system.service.IFileService;
 import com.xjrsoft.module.system.service.IFileService;
 import com.xjrsoft.module.teacher.entity.BaseTeacher;
 import com.xjrsoft.module.teacher.entity.BaseTeacher;
+import com.xjrsoft.module.teacher.entity.BaseTeacherRegular;
 import com.xjrsoft.module.teacher.entity.XjrUser;
 import com.xjrsoft.module.teacher.entity.XjrUser;
 import com.xjrsoft.module.workflow.constant.WorkflowConstant;
 import com.xjrsoft.module.workflow.constant.WorkflowConstant;
 import com.xjrsoft.module.workflow.entity.WorkflowCirculated;
 import com.xjrsoft.module.workflow.entity.WorkflowCirculated;
@@ -210,6 +211,7 @@ public class UserController {
                     .like(StrUtil.isNotBlank(dto.getUserName()), User::getUserName, dto.getUserName())
                     .like(StrUtil.isNotBlank(dto.getUserName()), User::getUserName, dto.getUserName())
                     .like(StrUtil.isNotBlank(dto.getCode()), User::getCode, dto.getCode())
                     .like(StrUtil.isNotBlank(dto.getCode()), User::getCode, dto.getCode())
                     .like(StrUtil.isNotBlank(dto.getName()), User::getName, dto.getName())
                     .like(StrUtil.isNotBlank(dto.getName()), User::getName, dto.getName())
+                    .like(StrUtil.isNotBlank(dto.getTeachingStatus()), BaseTeacherRegular::getTeachingStatus, dto.getTeachingStatus())
                     .like(StrUtil.isNotBlank(dto.getMobile()), User::getMobile, dto.getMobile())
                     .like(StrUtil.isNotBlank(dto.getMobile()), User::getMobile, dto.getMobile())
                     .eq((ObjectUtil.isNotNull(dto.getTreeType()) && dto.getTreeType() == 1), Role::getId, dto.getTreeId())
                     .eq((ObjectUtil.isNotNull(dto.getTreeType()) && dto.getTreeType() == 1), Role::getId, dto.getTreeId())
                     .eq((ObjectUtil.isNotNull(dto.getTreeType()) && dto.getTreeType() == 2), UserDeptRelation::getDeptId, dto.getTreeId())
                     .eq((ObjectUtil.isNotNull(dto.getTreeType()) && dto.getTreeType() == 2), UserDeptRelation::getDeptId, dto.getTreeId())
@@ -229,6 +231,7 @@ public class UserController {
                     .leftJoin(UserDeptRelation.class, UserDeptRelation::getUserId, User::getId)
                     .leftJoin(UserDeptRelation.class, UserDeptRelation::getUserId, User::getId)
                     .leftJoin(UserRoleRelation.class, UserRoleRelation::getUserId, User::getId)
                     .leftJoin(UserRoleRelation.class, UserRoleRelation::getUserId, User::getId)
                     .leftJoin(BaseTeacher.class, BaseTeacher::getUserId, User::getId)
                     .leftJoin(BaseTeacher.class, BaseTeacher::getUserId, User::getId)
+                    .leftJoin(BaseTeacherRegular.class, BaseTeacherRegular::getUserId, User::getId)
                     .leftJoin(BaseStudentSchoolRoll.class, BaseStudentSchoolRoll::getUserId, User::getId)
                     .leftJoin(BaseStudentSchoolRoll.class, BaseStudentSchoolRoll::getUserId, User::getId)
                     .leftJoin(DictionaryDetail.class, "d1", DictionaryDetail::getCode, BaseTeacher::getEmployWay)
                     .leftJoin(DictionaryDetail.class, "d1", DictionaryDetail::getCode, BaseTeacher::getEmployWay)
                     .leftJoin(DictionaryDetail.class, "d2", DictionaryDetail::getCode, BaseTeacher::getEmployType)
                     .leftJoin(DictionaryDetail.class, "d2", DictionaryDetail::getCode, BaseTeacher::getEmployType)
@@ -274,6 +277,7 @@ public class UserController {
                             .like(StrUtil.isNotBlank(dto.getCode()), User::getCode, dto.getCode())
                             .like(StrUtil.isNotBlank(dto.getCode()), User::getCode, dto.getCode())
                             .like(StrUtil.isNotBlank(dto.getName()), User::getName, dto.getName())
                             .like(StrUtil.isNotBlank(dto.getName()), User::getName, dto.getName())
                             .like(StrUtil.isNotBlank(dto.getMobile()), User::getMobile, dto.getMobile())
                             .like(StrUtil.isNotBlank(dto.getMobile()), User::getMobile, dto.getMobile())
+                            .like(StrUtil.isNotBlank(dto.getTeachingStatus()), BaseTeacherRegular::getTeachingStatus, dto.getTeachingStatus())
                             .eq(ObjectUtil.isNotNull(dto.getUserType()), Role::getId, dto.getUserType())
                             .eq(ObjectUtil.isNotNull(dto.getUserType()), Role::getId, dto.getUserType())
                             .eq((ObjectUtil.isNotNull(dto.getTreeType()) && dto.getTreeType() == 1), Role::getId, dto.getTreeId())
                             .eq((ObjectUtil.isNotNull(dto.getTreeType()) && dto.getTreeType() == 1), Role::getId, dto.getTreeId())
                             .eq((ObjectUtil.isNotNull(dto.getTreeType()) && dto.getTreeType() == 2), UserDeptRelation::getDeptId, dto.getTreeId())
                             .eq((ObjectUtil.isNotNull(dto.getTreeType()) && dto.getTreeType() == 2), UserDeptRelation::getDeptId, dto.getTreeId())
@@ -293,6 +297,7 @@ public class UserController {
                             .leftJoin(BaseStudentSchoolRoll.class, BaseStudentSchoolRoll::getUserId, User::getId)
                             .leftJoin(BaseStudentSchoolRoll.class, BaseStudentSchoolRoll::getUserId, User::getId)
                             .leftJoin(UserDeptRelation.class, UserDeptRelation::getUserId, User::getId)
                             .leftJoin(UserDeptRelation.class, UserDeptRelation::getUserId, User::getId)
                             .leftJoin(BaseTeacher.class, BaseTeacher::getUserId, User::getId)
                             .leftJoin(BaseTeacher.class, BaseTeacher::getUserId, User::getId)
+                            .leftJoin(BaseTeacherRegular.class, BaseTeacherRegular::getUserId, User::getId)
                             .leftJoin(DictionaryDetail.class, "d1", DictionaryDetail::getCode, BaseTeacher::getEmployWay)
                             .leftJoin(DictionaryDetail.class, "d1", DictionaryDetail::getCode, BaseTeacher::getEmployWay)
                             .leftJoin(DictionaryDetail.class, "d2", DictionaryDetail::getCode, BaseTeacher::getEmployType)
                             .leftJoin(DictionaryDetail.class, "d2", DictionaryDetail::getCode, BaseTeacher::getEmployType)
                             .leftJoin(Role.class, Role::getId, UserRoleRelation::getRoleId);
                             .leftJoin(Role.class, Role::getId, UserRoleRelation::getRoleId);

+ 3 - 0
src/main/java/com/xjrsoft/module/organization/dto/UserPageDto.java

@@ -46,4 +46,7 @@ public class UserPageDto extends PageInput {
 
 
     @ApiModelProperty("班级id")
     @ApiModelProperty("班级id")
     private Long classId;
     private Long classId;
+
+    @ApiModelProperty("教学状态")
+    private String teachingStatus;
 }
 }

+ 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);
         fileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8);
         return R.fileStream(bot.toByteArray(), fileName + ExcelTypeEnum.XLSX.getValue());
         return R.fileStream(bot.toByteArray(), fileName + ExcelTypeEnum.XLSX.getValue());
     }
     }
-
 }
 }

+ 149 - 0
src/main/java/com/xjrsoft/module/textbook/controller/TextbookDiscountAlterRecordController.java

@@ -0,0 +1,149 @@
+package com.xjrsoft.module.textbook.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.hutool.core.bean.BeanUtil;
+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.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.teacher.entity.XjrUser;
+import com.xjrsoft.module.textbook.dto.AddTextbookDiscountAlterRecordDto;
+import com.xjrsoft.module.textbook.dto.TextbookDiscountAlterRecordListDto;
+import com.xjrsoft.module.textbook.dto.TextbookDiscountAlterRecordPageDto;
+import com.xjrsoft.module.textbook.dto.UpdateTextbookDiscountAlterRecordDto;
+import com.xjrsoft.module.textbook.entity.TextbookDiscountAlterRecord;
+import com.xjrsoft.module.textbook.service.ITextbookDiscountAlterRecordService;
+import com.xjrsoft.module.textbook.vo.TextbookDiscountAlterRecordListVo;
+import com.xjrsoft.module.textbook.vo.TextbookDiscountAlterRecordPageVo;
+import com.xjrsoft.module.textbook.vo.TextbookDiscountAlterRecordVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+* @title: 教材折扣变更记录
+* @Author phoenix
+* @Date: 2025-02-17
+* @Version 1.0
+*/
+@RestController
+@RequestMapping("/textbook" + "/textbookDiscountAlterRecord")
+@Api(value = "/textbook"  + "/textbookDiscountAlterRecord",tags = "教材折扣变更记录代码")
+@AllArgsConstructor
+public class TextbookDiscountAlterRecordController {
+
+
+    private final ITextbookDiscountAlterRecordService textbookDiscountAlterRecordService;
+
+    @GetMapping(value = "/page")
+    @ApiOperation(value="教材折扣变更记录列表(分页)")
+    @SaCheckPermission("textbookdiscountalterrecord:detail")
+    public RT<PageOutput<TextbookDiscountAlterRecordPageVo>> page(@Valid TextbookDiscountAlterRecordPageDto dto){
+
+        LambdaQueryWrapper<TextbookDiscountAlterRecord> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper
+                    .orderByDesc(TextbookDiscountAlterRecord::getId)
+                .select(TextbookDiscountAlterRecord.class,x -> VoToColumnUtil.fieldsToColumns(TextbookDiscountAlterRecordPageVo.class).contains(x.getProperty()));
+        IPage<TextbookDiscountAlterRecord> page = textbookDiscountAlterRecordService.page(ConventPage.getPage(dto), queryWrapper);
+        PageOutput<TextbookDiscountAlterRecordPageVo> pageOutput = ConventPage.getPageOutput(page, TextbookDiscountAlterRecordPageVo.class);
+        return RT.ok(pageOutput);
+    }
+
+    @GetMapping(value = "/list")
+    @ApiOperation(value="教材折扣变更记录列表(不分页)")
+    @SaCheckPermission("textbookdiscountalterrecord:detail")
+    public RT<List<TextbookDiscountAlterRecordListVo>> list(@Valid TextbookDiscountAlterRecordListDto dto){
+
+        MPJLambdaWrapper<TextbookDiscountAlterRecord> queryWrapper = new MPJLambdaWrapper<>();
+        queryWrapper
+                .disableSubLogicDel()
+                .select(TextbookDiscountAlterRecord::getId)
+                .select(TextbookDiscountAlterRecord.class,x -> VoToColumnUtil.fieldsToColumns(TextbookDiscountAlterRecordListVo.class).contains(x.getProperty()))
+                .leftJoin(XjrUser.class, XjrUser::getId, TextbookDiscountAlterRecord::getCreateUserId,
+                        wrapper -> wrapper
+                                .selectAs(XjrUser::getName, TextbookDiscountAlterRecordListVo::getCreateUserIdCn)
+                                .like(StringUtils.isNotEmpty(dto.getCreateUserIdCn()), XjrUser::getName, dto.getCreateUserIdCn())
+                        )
+                .eq(TextbookDiscountAlterRecord::getTextbookWarehouseRecordId, dto.getTextbookWarehouseRecordId())
+                .ge(ObjectUtils.isNotEmpty(dto.getStartCreateDate()), TextbookDiscountAlterRecord::getCreateDate, dto.getStartCreateDate())
+                .le(ObjectUtils.isNotEmpty(dto.getEndCreateDate()), TextbookDiscountAlterRecord::getCreateDate, dto.getEndCreateDate())
+                .orderByDesc(TextbookDiscountAlterRecord::getId)
+        ;
+
+        List<TextbookDiscountAlterRecordListVo> list = textbookDiscountAlterRecordService.selectJoinList(TextbookDiscountAlterRecordListVo.class, queryWrapper);
+        List<TextbookDiscountAlterRecordListVo> listVos = BeanUtil.copyToList(list, TextbookDiscountAlterRecordListVo.class);
+        return RT.ok(listVos);
+    }
+
+    @GetMapping(value = "/info")
+    @ApiOperation(value="根据id查询教材折扣变更记录信息")
+    @SaCheckPermission("textbookdiscountalterrecord:detail")
+    public RT<TextbookDiscountAlterRecordVo> info(@RequestParam Long id){
+        TextbookDiscountAlterRecord textbookDiscountAlterRecord = textbookDiscountAlterRecordService.getById(id);
+        if (textbookDiscountAlterRecord == null) {
+           return RT.error("找不到此数据!");
+        }
+        return RT.ok(BeanUtil.toBean(textbookDiscountAlterRecord, TextbookDiscountAlterRecordVo.class));
+    }
+
+
+    @PostMapping
+    @ApiOperation(value = "新增教材折扣变更记录")
+    @SaCheckPermission("textbookdiscountalterrecord:add")
+    public RT<Boolean> add(@Valid @RequestBody AddTextbookDiscountAlterRecordDto dto){
+        TextbookDiscountAlterRecord textbookDiscountAlterRecord = BeanUtil.toBean(dto, TextbookDiscountAlterRecord.class);
+        boolean isSuccess = textbookDiscountAlterRecordService.save(textbookDiscountAlterRecord);
+    return RT.ok(isSuccess);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "修改教材折扣变更记录")
+    @SaCheckPermission("textbookdiscountalterrecord:edit")
+    public RT<Boolean> update(@Valid @RequestBody UpdateTextbookDiscountAlterRecordDto dto){
+
+        TextbookDiscountAlterRecord textbookDiscountAlterRecord = BeanUtil.toBean(dto, TextbookDiscountAlterRecord.class);
+        return RT.ok(textbookDiscountAlterRecordService.updateById(textbookDiscountAlterRecord));
+
+    }
+
+    @DeleteMapping
+    @ApiOperation(value = "删除教材折扣变更记录")
+    @SaCheckPermission("textbookdiscountalterrecord:delete")
+    public RT<Boolean> delete(@Valid @RequestBody List<Long> ids){
+        return RT.ok(textbookDiscountAlterRecordService.removeBatchByIds(ids));
+
+    }
+    @PostMapping("/import")
+    @ApiOperation(value = "导入")
+    public RT<Boolean> importData(@RequestParam MultipartFile file) throws IOException {
+        List<TextbookDiscountAlterRecordPageVo> savedDataList = EasyExcel.read(file.getInputStream()).head(TextbookDiscountAlterRecordPageVo.class).sheet().doReadSync();
+        Boolean result = textbookDiscountAlterRecordService.saveBatch(BeanUtil.copyToList(savedDataList, TextbookDiscountAlterRecord.class));
+        return RT.ok(result);
+    }
+
+    @GetMapping("/export")
+    @ApiOperation(value = "导出")
+    public ResponseEntity<byte[]> exportData(@Valid TextbookDiscountAlterRecordPageDto dto, @RequestParam(defaultValue = "false") Boolean isTemplate) {
+        List<TextbookDiscountAlterRecordPageVo> customerList = isTemplate != null && isTemplate ? new ArrayList<>() : ((PageOutput<TextbookDiscountAlterRecordPageVo>) page(dto).getData()).getList();
+        ByteArrayOutputStream bot = new ByteArrayOutputStream();
+        EasyExcel.write(bot, TextbookDiscountAlterRecordPageVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(customerList);
+
+        return RT.fileStream(bot.toByteArray(), "TextbookDiscountAlterRecord" + 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 cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.PageOutput;
 import com.xjrsoft.common.page.PageOutput;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 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.entity.TextbookStudentClaim;
 import com.xjrsoft.module.textbook.service.ITextbookStudentClaimService;
 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.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
@@ -55,9 +42,22 @@ import java.util.List;
 @AllArgsConstructor
 @AllArgsConstructor
 public class TextbookStudentClaimController {
 public class TextbookStudentClaimController {
 
 
-
     private final ITextbookStudentClaimService textbookStudentClaimService;
     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")
     @GetMapping(value = "/page")
     @ApiOperation(value="学生教材认领记录列表(分页)")
     @ApiOperation(value="学生教材认领记录列表(分页)")
     @SaCheckPermission("textbookstudentclaim:detail")
     @SaCheckPermission("textbookstudentclaim:detail")
@@ -99,6 +99,15 @@ public class TextbookStudentClaimController {
         return RT.ok(pageOutput);
         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")
     @GetMapping(value = "/teacher-check-byStu-list")
     @ApiOperation(value="教师教材领取按学生查看页面")
     @ApiOperation(value="教师教材领取按学生查看页面")
     @SaCheckPermission("textbookstudentclaim:detail")
     @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.model.result.RT;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.PageOutput;
 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.entity.TextbookWarehouseRecord;
 import com.xjrsoft.module.textbook.service.ITextbookWarehouseRecordService;
 import com.xjrsoft.module.textbook.service.ITextbookWarehouseRecordService;
 import com.xjrsoft.module.textbook.vo.TextbookWarehouseRecordExcelVo;
 import com.xjrsoft.module.textbook.vo.TextbookWarehouseRecordExcelVo;
@@ -81,12 +78,18 @@ public class TextbookWarehouseRecordController {
     @ApiOperation(value = "修改教材入库")
     @ApiOperation(value = "修改教材入库")
     @SaCheckPermission("textbookclasswarehouse:edit")
     @SaCheckPermission("textbookclasswarehouse:edit")
     public RT<Boolean> update(@Valid @RequestBody UpdateTextbookWarehouseRecordDto dto){
     public RT<Boolean> update(@Valid @RequestBody UpdateTextbookWarehouseRecordDto dto){
-
         TextbookWarehouseRecord textbookWarehouseRecord = BeanUtil.toBean(dto, TextbookWarehouseRecord.class);
         TextbookWarehouseRecord textbookWarehouseRecord = BeanUtil.toBean(dto, TextbookWarehouseRecord.class);
         return RT.ok(textbookClassWarehouseService.updateById(textbookWarehouseRecord));
         return RT.ok(textbookClassWarehouseService.updateById(textbookWarehouseRecord));
 
 
     }
     }
 
 
+    @PostMapping("/update-discount")
+    @ApiOperation(value = "修改入库后的折扣")
+    @SaCheckPermission("textbookclasswarehouse:edit")
+    public RT<Boolean> updateDiscount(@Valid @RequestBody UpdateDiscountDto dto){
+        return RT.ok(textbookClassWarehouseService.updateDiscount(dto));
+    }
+
     @DeleteMapping
     @DeleteMapping
     @ApiOperation(value = "删除教材入库")
     @ApiOperation(value = "删除教材入库")
     @SaCheckPermission("textbookclasswarehouse:delete")
     @SaCheckPermission("textbookclasswarehouse:delete")

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

@@ -1,45 +1,38 @@
 package com.xjrsoft.module.textbook.controller;
 package com.xjrsoft.module.textbook.controller;
 
 
+import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.support.ExcelTypeEnum;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
-import com.xjrsoft.common.constant.GlobalConstant;
-import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import com.xjrsoft.common.enums.WarehouseModeEnum;
+import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.PageOutput;
 import com.xjrsoft.common.page.PageOutput;
-import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.module.system.entity.DictionaryDetail;
 import com.xjrsoft.module.system.entity.DictionaryDetail;
 import com.xjrsoft.module.teacher.entity.XjrUser;
 import com.xjrsoft.module.teacher.entity.XjrUser;
 import com.xjrsoft.module.textbook.dto.AddTextbookWarehouseRecordDetailDto;
 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.springframework.web.multipart.MultipartFile;
-import java.io.IOException;
-import com.alibaba.excel.support.ExcelTypeEnum;
-import org.springframework.http.ResponseEntity;
-import java.io.ByteArrayOutputStream;
-import java.util.ArrayList;
-
 import com.xjrsoft.module.textbook.dto.TextbookWarehouseRecordDetailPageDto;
 import com.xjrsoft.module.textbook.dto.TextbookWarehouseRecordDetailPageDto;
+import com.xjrsoft.module.textbook.dto.UpdateTextbookWarehouseRecordDetailDto;
 import com.xjrsoft.module.textbook.entity.TextbookWarehouseRecordDetail;
 import com.xjrsoft.module.textbook.entity.TextbookWarehouseRecordDetail;
 import com.xjrsoft.module.textbook.service.ITextbookWarehouseRecordDetailService;
 import com.xjrsoft.module.textbook.service.ITextbookWarehouseRecordDetailService;
 import com.xjrsoft.module.textbook.vo.TextbookWarehouseRecordDetailPageVo;
 import com.xjrsoft.module.textbook.vo.TextbookWarehouseRecordDetailPageVo;
-
 import com.xjrsoft.module.textbook.vo.TextbookWarehouseRecordDetailVo;
 import com.xjrsoft.module.textbook.vo.TextbookWarehouseRecordDetailVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 
 import javax.validation.Valid;
 import javax.validation.Valid;
-import javax.validation.constraints.NotNull;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
@@ -63,17 +56,24 @@ public class TextbookWarehouseRecordDetailController {
     public RT<PageOutput<TextbookWarehouseRecordDetailPageVo>> page(@Valid TextbookWarehouseRecordDetailPageDto dto){
     public RT<PageOutput<TextbookWarehouseRecordDetailPageVo>> page(@Valid TextbookWarehouseRecordDetailPageDto dto){
         MPJLambdaWrapper<TextbookWarehouseRecordDetail> queryWrapper = new MPJLambdaWrapper<>();
         MPJLambdaWrapper<TextbookWarehouseRecordDetail> queryWrapper = new MPJLambdaWrapper<>();
         queryWrapper
         queryWrapper
+                .disableSubLogicDel()
                 .select(TextbookWarehouseRecordDetail::getId)
                 .select(TextbookWarehouseRecordDetail::getId)
                 .select(TextbookWarehouseRecordDetail.class,x -> VoToColumnUtil.fieldsToColumns(TextbookWarehouseRecordDetailPageVo.class).contains(x.getProperty()))
                 .select(TextbookWarehouseRecordDetail.class,x -> VoToColumnUtil.fieldsToColumns(TextbookWarehouseRecordDetailPageVo.class).contains(x.getProperty()))
                 .leftJoin(XjrUser.class, XjrUser::getId, TextbookWarehouseRecordDetail::getCreateUserId,
                 .leftJoin(XjrUser.class, XjrUser::getId, TextbookWarehouseRecordDetail::getCreateUserId,
                         wrapper -> wrapper
                         wrapper -> wrapper
                                 .selectAs(XjrUser::getName, TextbookWarehouseRecordDetailPageVo::getCreateUserIdCn)
                                 .selectAs(XjrUser::getName, TextbookWarehouseRecordDetailPageVo::getCreateUserIdCn)
+                                .like(StringUtils.isNotEmpty(dto.getCreateUserIdCn()), XjrUser::getName, dto.getCreateUserIdCn())
                         )
                         )
                 .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, TextbookWarehouseRecordDetail::getWarehouseMode,
                 .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, TextbookWarehouseRecordDetail::getWarehouseMode,
                         wrapper -> wrapper
                         wrapper -> wrapper
                                 .selectAs(DictionaryDetail::getName, TextbookWarehouseRecordDetailPageVo::getWarehouseModeCn)
                                 .selectAs(DictionaryDetail::getName, TextbookWarehouseRecordDetailPageVo::getWarehouseModeCn)
                 )
                 )
                 .eq(ObjectUtils.isNotEmpty(dto.getTextbookWarehouseRecordId()), TextbookWarehouseRecordDetail::getTextbookWarehouseRecordId, dto.getTextbookWarehouseRecordId())
                 .eq(ObjectUtils.isNotEmpty(dto.getTextbookWarehouseRecordId()), TextbookWarehouseRecordDetail::getTextbookWarehouseRecordId, dto.getTextbookWarehouseRecordId())
+                .eq(ObjectUtils.isNotEmpty(dto.getWarehouseModeInt()) && dto.getWarehouseModeInt() == 1, TextbookWarehouseRecordDetail::getWarehouseMode, WarehouseModeEnum.WmRecede)
+                .ne(ObjectUtils.isNotEmpty(dto.getWarehouseModeInt()) && dto.getWarehouseModeInt() != 1, TextbookWarehouseRecordDetail::getWarehouseMode, WarehouseModeEnum.WmRecede)
+                .eq(StringUtils.isNotEmpty(dto.getWarehouseMode()), TextbookWarehouseRecordDetail::getWarehouseMode, dto.getWarehouseMode())
+                .ge(ObjectUtils.isNotEmpty(dto.getStartCreateDate()), TextbookWarehouseRecordDetail::getCreateDate, dto.getStartCreateDate())
+                .le(ObjectUtils.isNotEmpty(dto.getEndCreateDate()), TextbookWarehouseRecordDetail::getCreateDate, dto.getEndCreateDate())
                 .orderByDesc(TextbookWarehouseRecordDetail::getId)
                 .orderByDesc(TextbookWarehouseRecordDetail::getId)
         ;
         ;
         IPage<TextbookWarehouseRecordDetailPageVo> page = textbookWarehouseRecordDetailService.selectJoinListPage(ConventPage.getPage(dto), TextbookWarehouseRecordDetailPageVo.class, queryWrapper);
         IPage<TextbookWarehouseRecordDetailPageVo> page = textbookWarehouseRecordDetailService.selectJoinListPage(ConventPage.getPage(dto), TextbookWarehouseRecordDetailPageVo.class, queryWrapper);

+ 48 - 0
src/main/java/com/xjrsoft/module/textbook/dto/AddTextbookDiscountAlterRecordDto.java

@@ -0,0 +1,48 @@
+package com.xjrsoft.module.textbook.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Date;
+
+
+
+/**
+* @title: 教材折扣变更记录
+* @Author phoenix
+* @Date: 2025-02-17
+* @Version 1.0
+*/
+@Data
+public class AddTextbookDiscountAlterRecordDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 序号
+    */
+    @ApiModelProperty("序号")
+    private Integer sortCode;
+    /**
+    * 入库编号
+    */
+    @ApiModelProperty("入库编号")
+    private Long textbookWarehouseRecordId;
+    /**
+    * 旧的折扣
+    */
+    @ApiModelProperty("旧的折扣")
+    private Double oldDiscount;
+    /**
+    * 新的折扣
+    */
+    @ApiModelProperty("新的折扣")
+    private Double newDiscount;
+
+}

+ 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;
+}

+ 36 - 0
src/main/java/com/xjrsoft/module/textbook/dto/TextbookDiscountAlterRecordListDto.java

@@ -0,0 +1,36 @@
+package com.xjrsoft.module.textbook.dto;
+
+import com.xjrsoft.common.page.ListInput;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.Date;
+
+
+/**
+* @title: 教材折扣变更记录列表查询入参
+* @Author phoenix
+* @Date: 2025-02-17
+* @Version 1.0
+*/
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class TextbookDiscountAlterRecordListDto extends ListInput {
+
+    @ApiModelProperty("入库编号")
+    private Long textbookWarehouseRecordId;
+
+    @ApiModelProperty("创建人")
+    private String createUserIdCn;
+
+    @ApiModelProperty("创建时间")
+    private LocalDateTime startCreateDate;
+
+    @ApiModelProperty("创建时间")
+    private LocalDateTime endCreateDate;
+}

+ 26 - 0
src/main/java/com/xjrsoft/module/textbook/dto/TextbookDiscountAlterRecordPageDto.java

@@ -0,0 +1,26 @@
+package com.xjrsoft.module.textbook.dto;
+
+import com.xjrsoft.common.page.PageInput;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.Date;
+
+
+/**
+* @title: 教材折扣变更记录分页查询入参
+* @Author phoenix
+* @Date: 2025-02-17
+* @Version 1.0
+*/
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class TextbookDiscountAlterRecordPageDto extends PageInput {
+
+
+}

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

@@ -24,11 +24,21 @@ import java.util.Date;
 @EqualsAndHashCode(callSuper = false)
 @EqualsAndHashCode(callSuper = false)
 public class TextbookWarehouseRecordDetailPageDto extends PageInput {
 public class TextbookWarehouseRecordDetailPageDto extends PageInput {
 
 
-    /**
-     * 教材入库记录主键id(textbook_warehouse_record)
-     */
-    @ContentStyle(dataFormat = 49)
-    @ExcelProperty("教材入库记录主键id(textbook_warehouse_record)")
     @ApiModelProperty("教材入库记录主键id(textbook_warehouse_record)")
     @ApiModelProperty("教材入库记录主键id(textbook_warehouse_record)")
     private Long textbookWarehouseRecordId;
     private Long textbookWarehouseRecordId;
+
+    @ApiModelProperty("入库方式,1:退书,2:非退书的其他")
+    private Integer warehouseModeInt;
+
+    @ApiModelProperty("入库方式(xjr_dictionary_item[warehouse_mode])")
+    private String warehouseMode;
+
+    @ApiModelProperty("创建时间")
+    private LocalDateTime startCreateDate;
+
+    @ApiModelProperty("创建时间")
+    private LocalDateTime endCreateDate;
+
+    @ApiModelProperty("创建人")
+    private String createUserIdCn;
 }
 }

+ 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;
+}

+ 32 - 0
src/main/java/com/xjrsoft/module/textbook/dto/UpdateTextbookDiscountAlterRecordDto.java

@@ -0,0 +1,32 @@
+package com.xjrsoft.module.textbook.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.List;
+import java.util.Date;
+
+
+
+/**
+* @title: 教材折扣变更记录
+* @Author phoenix
+* @Date: 2025-02-17
+* @Version 1.0
+*/
+@Data
+public class UpdateTextbookDiscountAlterRecordDto extends AddTextbookDiscountAlterRecordDto {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 主键编号
+    */
+    @ApiModelProperty("主键编号")
+    private Long id;
+}

+ 98 - 0
src/main/java/com/xjrsoft/module/textbook/entity/TextbookDiscountAlterRecord.java

@@ -0,0 +1,98 @@
+package com.xjrsoft.module.textbook.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.github.yulichang.annotation.EntityMapping;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Date;
+
+
+/**
+* @title: 教材折扣变更记录
+* @Author phoenix
+* @Date: 2025-02-17
+* @Version 1.0
+*/
+@Data
+@TableName("textbook_discount_alter_record")
+@ApiModel(value = "textbook_discount_alter_record", description = "教材折扣变更记录")
+public class TextbookDiscountAlterRecord implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 主键编号
+    */
+    @ApiModelProperty("主键编号")
+    @TableId
+    private Long id;
+    /**
+    * 创建人
+    */
+    @ApiModelProperty("创建人")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUserId;
+    /**
+    * 创建时间
+    */
+    @ApiModelProperty("创建时间")
+    @TableField(fill = FieldFill.INSERT)
+    private Date createDate;
+    /**
+    * 修改人
+    */
+    @ApiModelProperty("修改人")
+    @TableField(fill = FieldFill.UPDATE)
+    private Long modifyUserId;
+    /**
+    * 修改时间
+    */
+    @ApiModelProperty("修改时间")
+    @TableField(fill = FieldFill.UPDATE)
+    private Date modifyDate;
+    /**
+    * 删除标记
+    */
+    @ApiModelProperty("删除标记")
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer deleteMark;
+    /**
+    * 有效标志
+    */
+    @ApiModelProperty("有效标志")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer enabledMark;
+    /**
+    * 序号
+    */
+    @ApiModelProperty("序号")
+    private Integer sortCode;
+    /**
+    * 入库编号
+    */
+    @ApiModelProperty("入库编号")
+    private Long textbookWarehouseRecordId;
+    /**
+    * 旧的折扣
+    */
+    @ApiModelProperty("旧的折扣")
+    private Double oldDiscount;
+    /**
+    * 新的折扣
+    */
+    @ApiModelProperty("新的折扣")
+    private Double newDiscount;
+
+
+}

+ 17 - 0
src/main/java/com/xjrsoft/module/textbook/mapper/TextbookDiscountAlterRecordMapper.java

@@ -0,0 +1,17 @@
+package com.xjrsoft.module.textbook.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.textbook.entity.TextbookDiscountAlterRecord;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @title: 教材折扣变更记录
+* @Author phoenix
+* @Date: 2025-02-17
+* @Version 1.0
+*/
+@Mapper
+public interface TextbookDiscountAlterRecordMapper extends MPJBaseMapper<TextbookDiscountAlterRecord> {
+
+}

+ 17 - 0
src/main/java/com/xjrsoft/module/textbook/service/ITextbookDiscountAlterRecordService.java

@@ -0,0 +1,17 @@
+package com.xjrsoft.module.textbook.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.textbook.entity.TextbookDiscountAlterRecord;
+import lombok.Data;
+import java.util.List;
+
+/**
+* @title: 教材折扣变更记录
+* @Author phoenix
+* @Date: 2025-02-17
+* @Version 1.0
+*/
+
+public interface ITextbookDiscountAlterRecordService extends MPJBaseService<TextbookDiscountAlterRecord> {
+}

+ 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.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.yulichang.base.MPJBaseService;
 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.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;
 import java.util.List;
 
 
@@ -24,6 +16,19 @@ import java.util.List;
 */
 */
 
 
 public interface ITextbookStudentClaimService extends MPJBaseService<TextbookStudentClaim> {
 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.AddTextbookWarehouseRecordDto;
 import com.xjrsoft.module.textbook.dto.TextbookWarehouseRecordExportDto;
 import com.xjrsoft.module.textbook.dto.TextbookWarehouseRecordExportDto;
 import com.xjrsoft.module.textbook.dto.TextbookWarehouseRecordPageDto;
 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.entity.TextbookWarehouseRecord;
 import com.xjrsoft.module.textbook.vo.TextbookWarehouseRecordPageVo;
 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(TextbookWarehouseRecordExportDto dto);
 
 
     List<TextbookWarehouseRecordPageVo> getList();
     List<TextbookWarehouseRecordPageVo> getList();
+
+    Boolean updateDiscount(UpdateDiscountDto dto);
 }
 }

+ 25 - 0
src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookDiscountAlterRecordServiceImpl.java

@@ -0,0 +1,25 @@
+package com.xjrsoft.module.textbook.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.module.textbook.entity.TextbookDiscountAlterRecord;
+import com.xjrsoft.module.textbook.mapper.TextbookDiscountAlterRecordMapper;
+import com.xjrsoft.module.textbook.service.ITextbookDiscountAlterRecordService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+
+/**
+* @title: 教材折扣变更记录
+* @Author phoenix
+* @Date: 2025-02-17
+* @Version 1.0
+*/
+@Service
+@AllArgsConstructor
+public class TextbookDiscountAlterRecordServiceImpl extends MPJBaseServiceImpl<TextbookDiscountAlterRecordMapper, TextbookDiscountAlterRecord> implements ITextbookDiscountAlterRecordService {
+}

+ 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.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.xjrsoft.common.enums.ClaimTypeEnum;
 import com.xjrsoft.common.exception.MyException;
 import com.xjrsoft.common.exception.MyException;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.module.base.entity.BaseClass;
 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.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.IBaseClassService;
 import com.xjrsoft.module.base.service.IBaseSemesterService;
 import com.xjrsoft.module.base.service.IBaseSemesterService;
 import com.xjrsoft.module.student.entity.BaseStudent;
 import com.xjrsoft.module.student.entity.BaseStudent;
 import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
 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.AttendanceRecord;
 import com.xjrsoft.module.teacher.entity.XjrUser;
 import com.xjrsoft.module.teacher.entity.XjrUser;
 import com.xjrsoft.module.teacher.mapper.XjrUserMapper;
 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.TextbookStudentClaimMapper;
 import com.xjrsoft.module.textbook.mapper.WfTextbookClaimItemMapper;
 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.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 lombok.AllArgsConstructor;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.Date;
 import java.util.List;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 
 /**
 /**
  * @title: 学生教材认领记录
  * @title: 学生教材认领记录
@@ -61,10 +62,117 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
 
 
     private final IBaseClassService baseClassService;
     private final IBaseClassService baseClassService;
 
 
-    private final WfTextbookClaimMapper wfTextbookClaimMapper;
+    private final BaseClassAdminCourseMapper baseClassAdminCourseMapper;
+
+    private final BaseClassCourseMapper baseClassCourseMapper;
 
 
     private final WfTextbookClaimItemMapper wfTextbookClaimItemMapper;
     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
     @Override
     public TextbookClaimStudentConfirmVo getStudentConfirmList(TextbookClaimStudentConfirmDto dto) {
     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())
                 .eq(TextbookWarehouseRecord::getTextbookId, dto.getTextbookId())
                 .gt(TextbookWarehouseRecord::getRemainNumber, 0)
                 .gt(TextbookWarehouseRecord::getRemainNumber, 0)
-                .orderByAsc(TextbookSubscriptionItem::getCreateDate)
+                .orderByAsc(TextbookWarehouseRecord::getCreateDate)
         ;
         ;
         return textbookWarehouseRecordMapper.selectJoinList(SubscriptionItemListDistributeVo.class, textbookWarehouseRecordMPJLambdaWrapper);
         return textbookWarehouseRecordMapper.selectJoinList(SubscriptionItemListDistributeVo.class, textbookWarehouseRecordMPJLambdaWrapper);
     }
     }

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

@@ -19,14 +19,9 @@ import com.xjrsoft.module.base.entity.BaseSemester;
 import com.xjrsoft.module.base.entity.CourseSubjectDetail;
 import com.xjrsoft.module.base.entity.CourseSubjectDetail;
 import com.xjrsoft.module.system.entity.DictionaryDetail;
 import com.xjrsoft.module.system.entity.DictionaryDetail;
 import com.xjrsoft.module.teacher.entity.XjrUser;
 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.entity.*;
-import com.xjrsoft.module.textbook.mapper.TextbookMapper;
-import com.xjrsoft.module.textbook.mapper.TextbookWarehouseRecordDetailMapper;
-import com.xjrsoft.module.textbook.mapper.TextbookWarehouseRecordMapper;
+import com.xjrsoft.module.textbook.mapper.*;
 import com.xjrsoft.module.textbook.service.ITextbookWarehouseRecordService;
 import com.xjrsoft.module.textbook.service.ITextbookWarehouseRecordService;
 import com.xjrsoft.module.textbook.vo.SubscriptionItemListDistributeVo;
 import com.xjrsoft.module.textbook.vo.SubscriptionItemListDistributeVo;
 import com.xjrsoft.module.textbook.vo.TextbookSubscriptionPageVo;
 import com.xjrsoft.module.textbook.vo.TextbookSubscriptionPageVo;
@@ -57,6 +52,10 @@ public class TextbookWarehouseRecordServiceImpl extends MPJBaseServiceImpl<Textb
 
 
     private final TextbookWarehouseRecordDetailMapper textbookWarehouseRecordDetailMapper;
     private final TextbookWarehouseRecordDetailMapper textbookWarehouseRecordDetailMapper;
 
 
+    private final TextbookSubscriptionItemMapper textbookSubscriptionItemMapper;
+
+    private final TextbookDiscountAlterRecordMapper textbookDiscountAlterRecordMapper;
+
     @Override
     @Override
     public IPage<TextbookWarehouseRecordPageVo> getPage(TextbookWarehouseRecordPageDto dto) {
     public IPage<TextbookWarehouseRecordPageVo> getPage(TextbookWarehouseRecordPageDto dto) {
         MPJLambdaWrapper<TextbookWarehouseRecord> textbookWarehouseRecordMPJLambdaWrapper = new MPJLambdaWrapper<>();
         MPJLambdaWrapper<TextbookWarehouseRecord> textbookWarehouseRecordMPJLambdaWrapper = new MPJLambdaWrapper<>();
@@ -190,4 +189,51 @@ public class TextbookWarehouseRecordServiceImpl extends MPJBaseServiceImpl<Textb
     public List<TextbookWarehouseRecordPageVo> getList() {
     public List<TextbookWarehouseRecordPageVo> getList() {
         return getList(new TextbookWarehouseRecordExportDto());
         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)));
+            updateTextbookSubscriptionItem.setModifyDate(new Date());
+            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())));
+        updateTextbookWarehouseRecord.setModifyDate(new Date());
+        textbookWarehouseRecordMapper.updateById(updateTextbookWarehouseRecord);
+
+        TextbookDiscountAlterRecord textbookDiscountAlterRecord = new TextbookDiscountAlterRecord();
+        textbookDiscountAlterRecord.setTextbookWarehouseRecordId(textbookWarehouseRecord.getId());
+        textbookDiscountAlterRecord.setOldDiscount(textbookWarehouseRecord.getDiscount());
+        textbookDiscountAlterRecord.setNewDiscount(dto.getDiscount());
+        textbookDiscountAlterRecord.setCreateDate(new Date());
+        textbookDiscountAlterRecordMapper.insert(textbookDiscountAlterRecord);
+
+        return true;
+    }
 }
 }

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

@@ -172,6 +172,7 @@ public class WfTextbookRecedeServiceImpl extends MPJBaseServiceImpl<WfTextbookRe
                         textbookWarehouseRecordDetail.setWarehouseMode(WarehouseModeEnum.WmRecede.getCode());
                         textbookWarehouseRecordDetail.setWarehouseMode(WarehouseModeEnum.WmRecede.getCode());
                         textbookWarehouseRecordDetail.setWarehouseNumber(ObjectUtils.isEmpty(wfTextbookRecedeItem.getNumber()) ? 0 : wfTextbookRecedeItem.getNumber());
                         textbookWarehouseRecordDetail.setWarehouseNumber(ObjectUtils.isEmpty(wfTextbookRecedeItem.getNumber()) ? 0 : wfTextbookRecedeItem.getNumber());
                         textbookWarehouseRecordDetail.setCreateDate(new Date());
                         textbookWarehouseRecordDetail.setCreateDate(new Date());
+                        textbookWarehouseRecordDetail.setCreateUserId(wfTextbookRecede.getApplicantUserId());
                         textbookWarehouseRecordDetailMapper.insert(textbookWarehouseRecordDetail);
                         textbookWarehouseRecordDetailMapper.insert(textbookWarehouseRecordDetail);
 
 
                         // 修改入库记录
                         // 修改入库记录

+ 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;
+}

+ 77 - 0
src/main/java/com/xjrsoft/module/textbook/vo/TextbookDiscountAlterRecordListVo.java

@@ -0,0 +1,77 @@
+package com.xjrsoft.module.textbook.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import com.xjrsoft.common.annotation.Trans;
+import com.xjrsoft.common.enums.TransType;
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+* @title: 教材折扣变更记录列表列表入参
+* @Author phoenix
+* @Date: 2025-02-17
+* @Version 1.0
+*/
+@Data
+public class TextbookDiscountAlterRecordListVo {
+
+    /**
+    * 主键编号
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("主键编号")
+    @ApiModelProperty("主键编号")
+    private String id;
+    /**
+    * 创建人
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("创建人")
+    @ApiModelProperty("创建人")
+    private Long createUserId;
+
+    /**
+     * 创建人
+     */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("创建人")
+    @ApiModelProperty("创建人")
+    private String createUserIdCn;
+    /**
+    * 创建时间
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("创建时间")
+    @ApiModelProperty("创建时间")
+    private Date createDate;
+    /**
+    * 入库编号
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("入库编号")
+    @ApiModelProperty("入库编号")
+    private Long textbookWarehouseRecordId;
+    /**
+    * 旧的折扣
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("旧的折扣")
+    @ApiModelProperty("旧的折扣")
+    private Double oldDiscount;
+    /**
+    * 新的折扣
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("新的折扣")
+    @ApiModelProperty("新的折扣")
+    private Double newDiscount;
+
+}

+ 104 - 0
src/main/java/com/xjrsoft/module/textbook/vo/TextbookDiscountAlterRecordPageVo.java

@@ -0,0 +1,104 @@
+package com.xjrsoft.module.textbook.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import com.xjrsoft.common.annotation.Trans;
+import com.xjrsoft.common.enums.TransType;
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+* @title: 教材折扣变更记录分页列表出参
+* @Author phoenix
+* @Date: 2025-02-17
+* @Version 1.0
+*/
+@Data
+public class TextbookDiscountAlterRecordPageVo {
+
+    /**
+    * 主键编号
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("主键编号")
+    @ApiModelProperty("主键编号")
+    private String id;
+    /**
+    * 创建人
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("创建人")
+    @ApiModelProperty("创建人")
+    private Long createUserId;
+    /**
+    * 创建时间
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("创建时间")
+    @ApiModelProperty("创建时间")
+    private Date createDate;
+    /**
+    * 修改人
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("修改人")
+    @ApiModelProperty("修改人")
+    private Long modifyUserId;
+    /**
+    * 修改时间
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("修改时间")
+    @ApiModelProperty("修改时间")
+    private Date modifyDate;
+    /**
+    * 删除标记
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("删除标记")
+    @ApiModelProperty("删除标记")
+    private Integer deleteMark;
+    /**
+    * 有效标志
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("有效标志")
+    @ApiModelProperty("有效标志")
+    private Integer enabledMark;
+    /**
+    * 序号
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("序号")
+    @ApiModelProperty("序号")
+    private Integer sortCode;
+    /**
+    * 入库编号
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("入库编号")
+    @ApiModelProperty("入库编号")
+    private Long textbookWarehouseRecordId;
+    /**
+    * 旧的折扣
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("旧的折扣")
+    @ApiModelProperty("旧的折扣")
+    private Double oldDiscount;
+    /**
+    * 新的折扣
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("新的折扣")
+    @ApiModelProperty("新的折扣")
+    private Double newDiscount;
+
+}

+ 49 - 0
src/main/java/com/xjrsoft/module/textbook/vo/TextbookDiscountAlterRecordVo.java

@@ -0,0 +1,49 @@
+package com.xjrsoft.module.textbook.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Date;
+
+/**
+* @title: 教材折扣变更记录表单出参
+* @Author phoenix
+* @Date: 2025-02-17
+* @Version 1.0
+*/
+@Data
+public class TextbookDiscountAlterRecordVo {
+
+    /**
+    * 主键编号
+    */
+    @ApiModelProperty("主键编号")
+    private Long id;
+    /**
+    * 序号
+    */
+    @ApiModelProperty("序号")
+    private Integer sortCode;
+    /**
+    * 入库编号
+    */
+    @ApiModelProperty("入库编号")
+    private Long textbookWarehouseRecordId;
+    /**
+    * 旧的折扣
+    */
+    @ApiModelProperty("旧的折扣")
+    private Double oldDiscount;
+    /**
+    * 新的折扣
+    */
+    @ApiModelProperty("新的折扣")
+    private Double newDiscount;
+
+
+
+}

+ 7 - 0
src/main/java/com/xjrsoft/module/textbook/vo/TextbookWarehouseRecordDetailPageVo.java

@@ -30,6 +30,13 @@ public class TextbookWarehouseRecordDetailPageVo {
     @ExcelProperty("主键编号")
     @ExcelProperty("主键编号")
     @ApiModelProperty("主键编号")
     @ApiModelProperty("主键编号")
     private String id;
     private String id;
+    /**
+     * 创建人
+     */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("创建人")
+    @ApiModelProperty("创建人")
+    private Long createUserId;
     /**
     /**
     * 创建人
     * 创建人
     */
     */

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

@@ -285,30 +285,6 @@ create table `wf_textbook_claim_item`
   default charset = utf8mb4
   default charset = utf8mb4
   collate = utf8mb4_0900_ai_ci comment ='教材申领项';
   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
 -- 2024-12-13 14:36
 -- 教材领取人员
 -- 教材领取人员
@@ -457,7 +433,29 @@ create table `wf_textbook_recede_item`
   collate = utf8mb4_0900_ai_ci comment ='退书申请项';
   collate = utf8mb4_0900_ai_ci comment ='退书申请项';
 
 
 
 
+-- ----------------------------
+-- 2025-02-17 14:36
+-- 教材折扣变更记录
+-- ----------------------------
+drop table if exists textbook_discount_alter_record;
+create table `textbook_discount_alter_record`
+(
+    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 '序号',
 
 
+    textbook_warehouse_record_id bigint   null comment '入库编号',
+    old_discount                 double null default 10 comment '旧的折扣',
+    new_discount                 double null default 10 comment '新的折扣'
+) engine = innodb
+  default charset = utf8mb4
+  collate = utf8mb4_0900_ai_ci comment ='教材折扣变更记录';
 
 
 
 
 
 

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

@@ -4385,4 +4385,29 @@ public class FreeMarkerGeneratorTest {
 
 
         apiGeneratorService.generateCodes(params);
         apiGeneratorService.generateCodes(params);
     }
     }
+
+    @Test
+    public void gcTextbookDiscountAlterRecord() throws IOException {
+        List<TableConfig> tableConfigs = new ArrayList<>();
+        TableConfig mainTable = new TableConfig();
+        mainTable.setTableName("textbook_discount_alter_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("phoenix");//作者名称
+        params.setPackageName("textbook");//包名
+        params.setTableConfigs(tableConfigs);
+        params.setPage(false);//是否生成分页接口
+        params.setImport(true);//是否生成导入接口
+        params.setExport(true);//是否生成导出接口
+        params.setOutMainDir(false);//是否生成在主目录,前期测试可设置成false
+        params.setDs(ds);
+
+        IApiGeneratorService apiGeneratorService = new ApiGeneratorServiceImpl();
+
+        apiGeneratorService.generateCodes(params);
+    }
 }
 }