Browse Source

/textbook/wfTextbookClaim//confirm-istribute 教材确认发放

phoenix 1 year ago
parent
commit
61e15ddcfd
18 changed files with 768 additions and 25 deletions
  1. 8 0
      src/main/java/com/xjrsoft/module/teacher/mapper/XjrUserMapper.java
  2. 102 0
      src/main/java/com/xjrsoft/module/textbook/controller/TextbookStudentClaimController.java
  3. 3 5
      src/main/java/com/xjrsoft/module/textbook/controller/WfTextbookClaimController.java
  4. 63 0
      src/main/java/com/xjrsoft/module/textbook/dto/AddTextbookStudentClaimDto.java
  5. 49 0
      src/main/java/com/xjrsoft/module/textbook/dto/ConfirmDistributeDto.java
  6. 26 0
      src/main/java/com/xjrsoft/module/textbook/dto/TextbookStudentClaimPageDto.java
  7. 32 0
      src/main/java/com/xjrsoft/module/textbook/dto/UpdateTextbookStudentClaimDto.java
  8. 113 0
      src/main/java/com/xjrsoft/module/textbook/entity/TextbookStudentClaim.java
  9. 17 0
      src/main/java/com/xjrsoft/module/textbook/mapper/TextbookStudentClaimMapper.java
  10. 17 0
      src/main/java/com/xjrsoft/module/textbook/service/ITextbookStudentClaimService.java
  11. 8 0
      src/main/java/com/xjrsoft/module/textbook/service/IWfTextbookClaimService.java
  12. 25 0
      src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookStudentClaimServiceImpl.java
  13. 101 18
      src/main/java/com/xjrsoft/module/textbook/service/impl/WfTextbookClaimServiceImpl.java
  14. 94 0
      src/main/java/com/xjrsoft/module/textbook/vo/TextbookStudentClaimPageVo.java
  15. 64 0
      src/main/java/com/xjrsoft/module/textbook/vo/TextbookStudentClaimVo.java
  16. 15 0
      src/main/resources/mapper/teacher/XjrUserMapper.xml
  17. 2 2
      src/main/resources/mapper/textbook/WfTextbookClaimMapper.xml
  18. 29 0
      src/test/java/com/xjrsoft/xjrsoftboot/FreeMarkerGeneratorTest.java

+ 8 - 0
src/main/java/com/xjrsoft/module/teacher/mapper/XjrUserMapper.java

@@ -4,6 +4,8 @@ import com.github.yulichang.base.MPJBaseMapper;
 import com.xjrsoft.module.teacher.entity.XjrUser;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.List;
+
 /**
 * @title: mapper
 * @Author 管理员
@@ -13,4 +15,10 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 public interface XjrUserMapper extends MPJBaseMapper<XjrUser> {
 
+    /**
+     * 根据班级id查询学生用户编号
+     * @param classId
+     * @return
+     */
+    List<Long> getUserIdByClassId(Long classId);
 }

+ 102 - 0
src/main/java/com/xjrsoft/module/textbook/controller/TextbookStudentClaimController.java

@@ -0,0 +1,102 @@
+package com.xjrsoft.module.textbook.controller;
+
+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.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.xjrsoft.common.constant.GlobalConstant;
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import com.xjrsoft.common.page.ConventPage;
+import com.xjrsoft.common.page.PageOutput;
+import com.xjrsoft.common.model.result.RT;
+import com.xjrsoft.common.utils.VoToColumnUtil;
+import com.xjrsoft.module.textbook.dto.AddTextbookStudentClaimDto;
+import com.xjrsoft.module.textbook.dto.UpdateTextbookStudentClaimDto;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+
+import com.xjrsoft.module.textbook.dto.TextbookStudentClaimPageDto;
+import com.xjrsoft.module.textbook.entity.TextbookStudentClaim;
+import com.xjrsoft.module.textbook.service.ITextbookStudentClaimService;
+import com.xjrsoft.module.textbook.vo.TextbookStudentClaimPageVo;
+
+import com.xjrsoft.module.textbook.vo.TextbookStudentClaimVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+* @title: 学生教材认领记录
+* @Author szs
+* @Date: 2023-12-26
+* @Version 1.0
+*/
+@RestController
+@RequestMapping("/textbook" + "/textbookStudentClaim")
+@Api(value = "/textbook"  + "/textbookStudentClaim",tags = "学生教材认领记录代码")
+@AllArgsConstructor
+public class TextbookStudentClaimController {
+
+
+    private final ITextbookStudentClaimService textbookStudentClaimService;
+
+    @GetMapping(value = "/page")
+    @ApiOperation(value="学生教材认领记录列表(分页)")
+    @SaCheckPermission("textbookstudentclaim:detail")
+    public RT<PageOutput<TextbookStudentClaimPageVo>> page(@Valid TextbookStudentClaimPageDto dto){
+
+        LambdaQueryWrapper<TextbookStudentClaim> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper
+                    .orderByDesc(TextbookStudentClaim::getId)
+                .select(TextbookStudentClaim.class,x -> VoToColumnUtil.fieldsToColumns(TextbookStudentClaimPageVo.class).contains(x.getProperty()));
+        IPage<TextbookStudentClaim> page = textbookStudentClaimService.page(ConventPage.getPage(dto), queryWrapper);
+        PageOutput<TextbookStudentClaimPageVo> pageOutput = ConventPage.getPageOutput(page, TextbookStudentClaimPageVo.class);
+        return RT.ok(pageOutput);
+    }
+
+    @GetMapping(value = "/info")
+    @ApiOperation(value="根据id查询学生教材认领记录信息")
+    @SaCheckPermission("textbookstudentclaim:detail")
+    public RT<TextbookStudentClaimVo> info(@RequestParam Long id){
+        TextbookStudentClaim textbookStudentClaim = textbookStudentClaimService.getById(id);
+        if (textbookStudentClaim == null) {
+           return RT.error("找不到此数据!");
+        }
+        return RT.ok(BeanUtil.toBean(textbookStudentClaim, TextbookStudentClaimVo.class));
+    }
+
+
+    @PostMapping
+    @ApiOperation(value = "新增学生教材认领记录")
+    @SaCheckPermission("textbookstudentclaim:add")
+    public RT<Boolean> add(@Valid @RequestBody AddTextbookStudentClaimDto dto){
+        TextbookStudentClaim textbookStudentClaim = BeanUtil.toBean(dto, TextbookStudentClaim.class);
+        boolean isSuccess = textbookStudentClaimService.save(textbookStudentClaim);
+    return RT.ok(isSuccess);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "修改学生教材认领记录")
+    @SaCheckPermission("textbookstudentclaim:edit")
+    public RT<Boolean> update(@Valid @RequestBody UpdateTextbookStudentClaimDto dto){
+
+        TextbookStudentClaim textbookStudentClaim = BeanUtil.toBean(dto, TextbookStudentClaim.class);
+        return RT.ok(textbookStudentClaimService.updateById(textbookStudentClaim));
+
+    }
+
+    @DeleteMapping
+    @ApiOperation(value = "删除学生教材认领记录")
+    @SaCheckPermission("textbookstudentclaim:delete")
+    public RT<Boolean> delete(@Valid @RequestBody List<Long> ids){
+        return RT.ok(textbookStudentClaimService.removeBatchByIds(ids));
+
+    }
+
+}

+ 3 - 5
src/main/java/com/xjrsoft/module/textbook/controller/WfTextbookClaimController.java

@@ -9,6 +9,7 @@ import com.xjrsoft.common.page.PageOutput;
 import com.xjrsoft.common.utils.QrCodeUtil;
 import com.xjrsoft.config.CommonPropertiesConfig;
 import com.xjrsoft.module.textbook.dto.AddWfTextbookClaimDto;
+import com.xjrsoft.module.textbook.dto.ConfirmDistributeDto;
 import com.xjrsoft.module.textbook.dto.UpdateWfTextbookClaimDto;
 import com.xjrsoft.module.textbook.dto.WfTextbookClaimPageDto;
 import com.xjrsoft.module.textbook.entity.WfTextbookClaim;
@@ -85,11 +86,8 @@ public class WfTextbookClaimController {
     @PutMapping("/confirm-istribute")
     @ApiOperation(value = "确认发放")
     @SaCheckPermission("wftextbookclaim:edit")
-    public RT<Boolean> confirmDistribute(@Valid @RequestBody UpdateWfTextbookClaimDto dto){
-
-        WfTextbookClaim wfTextbookClaim = BeanUtil.toBean(dto, WfTextbookClaim.class);
-        return RT.ok(wfTextbookClaimService.update(wfTextbookClaim));
-
+    public RT<Boolean> confirmDistribute(@Valid @RequestBody ConfirmDistributeDto dto){
+        return RT.ok(wfTextbookClaimService.confirmDistribute(dto));
     }
 
     @PutMapping

+ 63 - 0
src/main/java/com/xjrsoft/module/textbook/dto/AddTextbookStudentClaimDto.java

@@ -0,0 +1,63 @@
+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 szs
+* @Date: 2023-12-26
+* @Version 1.0
+*/
+@Data
+public class AddTextbookStudentClaimDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 序号
+    */
+    @ApiModelProperty("序号")
+    private Integer sortCode;
+    /**
+    * 学期ID(base_semester)
+    */
+    @ApiModelProperty("学期ID(base_semester)")
+    private Long baseSemesterId;
+    /**
+    * 班级编号
+    */
+    @ApiModelProperty("班级编号")
+    private Long classId;
+    /**
+    * 学生用户编号
+    */
+    @ApiModelProperty("学生用户编号")
+    private Long studentUserId;
+    /**
+    * 教材管理编号
+    */
+    @ApiModelProperty("教材管理编号")
+    private Long textbookId;
+    /**
+    * 是否领取(1:已领取 0:未领取)
+    */
+    @ApiModelProperty("是否领取(1:已领取 0:未领取)")
+    private Integer isClaim;
+    /**
+    * 备注
+    */
+    @ApiModelProperty("备注")
+    private String remark;
+
+}

+ 49 - 0
src/main/java/com/xjrsoft/module/textbook/dto/ConfirmDistributeDto.java

@@ -0,0 +1,49 @@
+package com.xjrsoft.module.textbook.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+
+/**
+* @title: 教材发放之确认发放入参
+* @Author szs
+* @Date: 2023-12-26
+* @Version 1.0
+*/
+@Data
+public class ConfirmDistributeDto{
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 教材申领主键编号
+    */
+    @ApiModelProperty("教材申领主键编号")
+    private Long textbookClaimId;
+
+    /**
+     * 教材申领项
+     */
+    List<TextbookClaimItem> textbookClaimItemList;
+
+    @Data
+    public static class TextbookClaimItem implements Serializable {
+
+        private static final long serialVersionUID = 1L;
+
+        /**
+         * 教材申领项主键编号
+         */
+        @ApiModelProperty("教材申领项主键编号")
+        private Long TextbookClaimItemId;
+
+        /**
+         * 发放数量
+         */
+        @ApiModelProperty("本次发放数量")
+        private Integer confirmNumber;
+    }
+}

+ 26 - 0
src/main/java/com/xjrsoft/module/textbook/dto/TextbookStudentClaimPageDto.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 szs
+* @Date: 2023-12-26
+* @Version 1.0
+*/
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class TextbookStudentClaimPageDto extends PageInput {
+
+
+}

+ 32 - 0
src/main/java/com/xjrsoft/module/textbook/dto/UpdateTextbookStudentClaimDto.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 szs
+* @Date: 2023-12-26
+* @Version 1.0
+*/
+@Data
+public class UpdateTextbookStudentClaimDto extends AddTextbookStudentClaimDto {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 主键编号
+    */
+    @ApiModelProperty("主键编号")
+    private Long id;
+}

+ 113 - 0
src/main/java/com/xjrsoft/module/textbook/entity/TextbookStudentClaim.java

@@ -0,0 +1,113 @@
+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 szs
+* @Date: 2023-12-26
+* @Version 1.0
+*/
+@Data
+@TableName("textbook_student_claim")
+@ApiModel(value = "textbook_student_claim", description = "学生教材认领记录")
+public class TextbookStudentClaim 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;
+    /**
+    * 学期ID(base_semester)
+    */
+    @ApiModelProperty("学期ID(base_semester)")
+    private Long baseSemesterId;
+    /**
+    * 班级编号
+    */
+    @ApiModelProperty("班级编号")
+    private Long classId;
+    /**
+    * 学生用户编号
+    */
+    @ApiModelProperty("学生用户编号")
+    private Long studentUserId;
+    /**
+    * 教材管理编号
+    */
+    @ApiModelProperty("教材管理编号")
+    private Long textbookId;
+    /**
+    * 是否领取(1:已领取 0:未领取)
+    */
+    @ApiModelProperty("是否领取(1:已领取 0:未领取)")
+    private Integer isClaim;
+    /**
+    * 备注
+    */
+    @ApiModelProperty("备注")
+    private String remark;
+
+
+}

+ 17 - 0
src/main/java/com/xjrsoft/module/textbook/mapper/TextbookStudentClaimMapper.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.TextbookStudentClaim;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @title: 学生教材认领记录
+* @Author szs
+* @Date: 2023-12-26
+* @Version 1.0
+*/
+@Mapper
+public interface TextbookStudentClaimMapper extends MPJBaseMapper<TextbookStudentClaim> {
+
+}

+ 17 - 0
src/main/java/com/xjrsoft/module/textbook/service/ITextbookStudentClaimService.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.TextbookStudentClaim;
+import lombok.Data;
+import java.util.List;
+
+/**
+* @title: 学生教材认领记录
+* @Author szs
+* @Date: 2023-12-26
+* @Version 1.0
+*/
+
+public interface ITextbookStudentClaimService extends MPJBaseService<TextbookStudentClaim> {
+}

+ 8 - 0
src/main/java/com/xjrsoft/module/textbook/service/IWfTextbookClaimService.java

@@ -2,6 +2,7 @@ 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.ConfirmDistributeDto;
 import com.xjrsoft.module.textbook.dto.WfTextbookClaimPageDto;
 import com.xjrsoft.module.textbook.entity.WfTextbookClaim;
 import com.xjrsoft.module.textbook.vo.WfTextbookClaimPageVo;
@@ -55,4 +56,11 @@ public interface IWfTextbookClaimService extends MPJBaseService<WfTextbookClaim>
      */
     WfTextbookClaimVo infoDistribute(Long id);
 
+    /**
+     * 确认发放
+     * @param dto
+     * @return
+     */
+    Boolean confirmDistribute(ConfirmDistributeDto dto);
+
 }

+ 25 - 0
src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookStudentClaimServiceImpl.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.TextbookStudentClaim;
+import com.xjrsoft.module.textbook.mapper.TextbookStudentClaimMapper;
+import com.xjrsoft.module.textbook.service.ITextbookStudentClaimService;
+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 szs
+* @Date: 2023-12-26
+* @Version 1.0
+*/
+@Service
+@AllArgsConstructor
+public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<TextbookStudentClaimMapper, TextbookStudentClaim> implements ITextbookStudentClaimService {
+}

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

@@ -5,14 +5,20 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.common.exception.MyException;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.module.teacher.entity.XjrUser;
 import com.xjrsoft.module.teacher.mapper.XjrUserMapper;
+import com.xjrsoft.module.textbook.dto.ConfirmDistributeDto;
 import com.xjrsoft.module.textbook.dto.WfTextbookClaimPageDto;
+import com.xjrsoft.module.textbook.entity.Textbook;
+import com.xjrsoft.module.textbook.entity.TextbookStudentClaim;
 import com.xjrsoft.module.textbook.entity.WfTextbookClaim;
 import com.xjrsoft.module.textbook.entity.WfTextbookClaimItem;
 import com.xjrsoft.module.textbook.mapper.WfTextbookClaimItemMapper;
 import com.xjrsoft.module.textbook.mapper.WfTextbookClaimMapper;
+import com.xjrsoft.module.textbook.service.ITextbookService;
+import com.xjrsoft.module.textbook.service.ITextbookStudentClaimService;
 import com.xjrsoft.module.textbook.service.IWfTextbookClaimService;
 import com.xjrsoft.module.textbook.vo.WfTextbookClaimItemVo;
 import com.xjrsoft.module.textbook.vo.WfTextbookClaimPageVo;
@@ -27,11 +33,11 @@ import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
-* @title: 教材申领
-* @Author szs
-* @Date: 2023-12-26
-* @Version 1.0
-*/
+ * @title: 教材申领
+ * @Author szs
+ * @Date: 2023-12-26
+ * @Version 1.0
+ */
 @Service
 @AllArgsConstructor
 public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookClaimMapper, WfTextbookClaim> implements IWfTextbookClaimService {
@@ -41,6 +47,10 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
 
     private final XjrUserMapper xjrUserMapper;
 
+    private final ITextbookService textbookService;
+
+    private final ITextbookStudentClaimService textbookStudentClaimService;
+
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -81,7 +91,7 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
                 }
             }
             //已经不存在的id 删除
-            if(wfTextbookClaimItemRemoveIds.size() > 0){
+            if (wfTextbookClaimItemRemoveIds.size() > 0) {
                 wfTextbookClaimWfTextbookClaimItemMapper.deleteBatchIds(wfTextbookClaimItemRemoveIds);
             }
         }
@@ -101,12 +111,12 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
 
     @Override
     public IPage<WfTextbookClaimPageVo> getPage(WfTextbookClaimPageDto dto) {
-        IPage<WfTextbookClaimPageVo> page = wfTextbookClaimWfTextbookClaimMapper.getPage(ConventPage.getPage(dto),dto);
+        IPage<WfTextbookClaimPageVo> page = wfTextbookClaimWfTextbookClaimMapper.getPage(ConventPage.getPage(dto), dto);
 
         for (WfTextbookClaimPageVo wfTextbookClaimPageVo : page.getRecords()) {
             //拆分代领人
             String receiveUserIdStr = wfTextbookClaimPageVo.getReceiveUserId();
-            if(ObjectUtil.isNotNull(receiveUserIdStr) && !receiveUserIdStr.equals("")){
+            if (ObjectUtil.isNotNull(receiveUserIdStr) && !receiveUserIdStr.equals("")) {
                 String[] receiveUserIdStrs = receiveUserIdStr.split(",");
                 List<Long> receiveUserIdList = new ArrayList<>();
                 for (String str : receiveUserIdStrs) {
@@ -114,12 +124,12 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
                 }
                 LambdaQueryWrapper<XjrUser> queryWrapper = new LambdaQueryWrapper<>();
                 queryWrapper
-                        .in(XjrUser::getId,receiveUserIdStr);
+                        .in(XjrUser::getId, receiveUserIdStr);
                 List<XjrUser> xjrUserList = xjrUserMapper.selectList(queryWrapper);
-                if (ObjectUtil.isNotNull(xjrUserList) && xjrUserList.size() > 0){
+                if (ObjectUtil.isNotNull(xjrUserList) && xjrUserList.size() > 0) {
                     StringBuilder sb = new StringBuilder();
                     for (XjrUser xjrUser : xjrUserList) {
-                        sb.append(","+xjrUser.getName());
+                        sb.append("," + xjrUser.getName());
                     }
                     wfTextbookClaimPageVo.setReceiveUserIdCN(sb.toString());
                 }
@@ -127,7 +137,7 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
             //加上申领项
             List<WfTextbookClaimItemVo> wfTextbookClaimItemVoList = wfTextbookClaimWfTextbookClaimItemMapper.getListByWfTextbookClaimId(Long.parseLong(wfTextbookClaimPageVo.getId()));
 
-            if(ObjectUtil.isNotNull(wfTextbookClaimItemVoList) && wfTextbookClaimItemVoList.size() > 0){
+            if (ObjectUtil.isNotNull(wfTextbookClaimItemVoList) && wfTextbookClaimItemVoList.size() > 0) {
                 wfTextbookClaimPageVo.setWfTextbookClaimItemList(wfTextbookClaimItemVoList);
             }
         }
@@ -137,10 +147,10 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
     @Override
     public WfTextbookClaimVo infoDistribute(Long id) {
         WfTextbookClaimVo wfTextbookClaimVo = wfTextbookClaimWfTextbookClaimMapper.infoDistribute(id);
-        if(ObjectUtil.isNotNull(wfTextbookClaimVo)){
+        if (ObjectUtil.isNotNull(wfTextbookClaimVo)) {
             //拆分代领人
             String receiveUserIdStr = wfTextbookClaimVo.getReceiveUserId();
-            if(ObjectUtil.isNotNull(receiveUserIdStr) && !receiveUserIdStr.equals("")){
+            if (ObjectUtil.isNotNull(receiveUserIdStr) && !receiveUserIdStr.equals("")) {
                 String[] receiveUserIdStrs = receiveUserIdStr.split(",");
                 List<Long> receiveUserIdList = new ArrayList<>();
                 for (String str : receiveUserIdStrs) {
@@ -148,12 +158,12 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
                 }
                 LambdaQueryWrapper<XjrUser> queryWrapper = new LambdaQueryWrapper<>();
                 queryWrapper
-                        .in(XjrUser::getId,receiveUserIdList);
+                        .in(XjrUser::getId, receiveUserIdList);
                 List<XjrUser> xjrUserList = xjrUserMapper.selectList(queryWrapper);
-                if (ObjectUtil.isNotNull(xjrUserList) && xjrUserList.size() > 0){
+                if (ObjectUtil.isNotNull(xjrUserList) && xjrUserList.size() > 0) {
                     StringBuilder sb = new StringBuilder();
                     for (XjrUser xjrUser : xjrUserList) {
-                        sb.append(","+xjrUser.getName());
+                        sb.append("," + xjrUser.getName());
                     }
                     wfTextbookClaimVo.setReceiveUserIdCN(sb.toString());
                 }
@@ -161,10 +171,83 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
             //加上申领项
             List<WfTextbookClaimItemVo> wfTextbookClaimItemVoList = wfTextbookClaimWfTextbookClaimItemMapper.getListByWfTextbookClaimId(Long.parseLong(wfTextbookClaimVo.getId()));
 
-            if(ObjectUtil.isNotNull(wfTextbookClaimItemVoList) && wfTextbookClaimItemVoList.size() > 0){
+            if (ObjectUtil.isNotNull(wfTextbookClaimItemVoList) && wfTextbookClaimItemVoList.size() > 0) {
                 wfTextbookClaimVo.setWfTextbookClaimItemList(wfTextbookClaimItemVoList);
             }
         }
         return wfTextbookClaimVo;
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean confirmDistribute(ConfirmDistributeDto dto) {
+        WfTextbookClaim wfTextbookClaim = this.getById(dto.getTextbookClaimId());
+
+        if (ObjectUtil.isNull(wfTextbookClaim) || ObjectUtil.isNull(dto.getTextbookClaimItemList()) || dto.getTextbookClaimItemList().size() <= 0) {
+            throw new MyException("未找到申领数据");
+        }
+
+        //操作每一个申领项
+        for (ConfirmDistributeDto.TextbookClaimItem textbookClaimItem : dto.getTextbookClaimItemList()) {
+
+            WfTextbookClaimItem wfTextbookClaimItem = wfTextbookClaimWfTextbookClaimItemMapper.selectById(textbookClaimItem.getTextbookClaimItemId());
+
+            if (ObjectUtil.isNull(wfTextbookClaimItem)) {
+                throw new MyException("未找到申领数据");
+            }
+
+            Textbook textbook = textbookService.getById(wfTextbookClaimItem.getTextbookId());
+
+            if (ObjectUtil.isNull(textbook)) {
+                throw new MyException("未找到相关教材数据");
+            }
+
+            //判断总发放数量是否超出该申请项的申请数量
+            if (wfTextbookClaimItem.getIssueNumber() + textbookClaimItem.getConfirmNumber() > wfTextbookClaimItem.getApplicantNumber()) {
+                throw new MyException(textbook.getBookName() + "发放总数量超出申领数量");
+            }
+
+            //判断总发放数量是否超出该申请像的申请数量
+            Integer stock = textbook.getStock();
+            if (stock < textbookClaimItem.getConfirmNumber()) {
+                throw new MyException(textbook.getBookName() + "库存不足");
+            }
+
+            //更新教材管理中的库存数量
+            Textbook newTextbook = new Textbook();
+            newTextbook.setId(textbook.getId());
+            newTextbook.setStock(stock - textbookClaimItem.getConfirmNumber());
+            textbookService.updateById(newTextbook);
+
+            //TODO 增加出库记录
+
+            //更新申领项中的已经发放数量
+            WfTextbookClaimItem newWfTextbookClaimItem = new WfTextbookClaimItem();
+            newWfTextbookClaimItem.setId(wfTextbookClaimItem.getId());
+            newWfTextbookClaimItem.setIssueNumber(wfTextbookClaimItem.getIssueNumber() + textbookClaimItem.getConfirmNumber());
+            wfTextbookClaimWfTextbookClaimItemMapper.updateById(newWfTextbookClaimItem);
+
+            //为班级每个学生生成领取(确认信息)认领记录
+            //查出班上的所有学生id
+            List<Long> userIdList = xjrUserMapper.getUserIdByClassId(wfTextbookClaim.getClassId());
+
+            if(ObjectUtil.isNull(userIdList)){
+                throw new MyException("申领班级有误,请核实");
+            }
+
+            List<TextbookStudentClaim> textbookStudentClaimsList = new ArrayList<>();
+            for (Long userId : userIdList) {
+                TextbookStudentClaim textbookStudentClaim = new TextbookStudentClaim();
+                textbookStudentClaim.setStudentUserId(userId);
+                textbookStudentClaim.setBaseSemesterId(wfTextbookClaim.getBaseSemesterId());
+                textbookStudentClaim.setClassId(wfTextbookClaim.getClassId());
+                textbookStudentClaim.setTextbookId(wfTextbookClaimItem.getTextbookId());
+
+                textbookStudentClaimsList.add(textbookStudentClaim);
+            }
+            textbookStudentClaimService.saveBatch(textbookStudentClaimsList);
+        }
+        return true;
+    }
+
 }

+ 94 - 0
src/main/java/com/xjrsoft/module/textbook/vo/TextbookStudentClaimPageVo.java

@@ -0,0 +1,94 @@
+package com.xjrsoft.module.textbook.vo;
+
+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 szs
+* @Date: 2023-12-26
+* @Version 1.0
+*/
+@Data
+public class TextbookStudentClaimPageVo {
+
+    /**
+    * 主键编号
+    */
+    @ApiModelProperty("主键编号")
+    private String id;
+    /**
+    * 创建人
+    */
+    @ApiModelProperty("创建人")
+    private Long createUserId;
+    /**
+    * 创建时间
+    */
+    @ApiModelProperty("创建时间")
+    private Date createDate;
+    /**
+    * 修改人
+    */
+    @ApiModelProperty("修改人")
+    private Long modifyUserId;
+    /**
+    * 修改时间
+    */
+    @ApiModelProperty("修改时间")
+    private Date modifyDate;
+    /**
+    * 删除标记
+    */
+    @ApiModelProperty("删除标记")
+    private Integer deleteMark;
+    /**
+    * 有效标志
+    */
+    @ApiModelProperty("有效标志")
+    private Integer enabledMark;
+    /**
+    * 序号
+    */
+    @ApiModelProperty("序号")
+    private Integer sortCode;
+    /**
+    * 学期ID(base_semester)
+    */
+    @ApiModelProperty("学期ID(base_semester)")
+    private Long baseSemesterId;
+    /**
+    * 班级编号
+    */
+    @ApiModelProperty("班级编号")
+    private Long classId;
+    /**
+    * 学生用户编号
+    */
+    @ApiModelProperty("学生用户编号")
+    private Long studentUserId;
+    /**
+    * 教材管理编号
+    */
+    @ApiModelProperty("教材管理编号")
+    private Long textbookId;
+    /**
+    * 是否领取(1:已领取 0:未领取)
+    */
+    @ApiModelProperty("是否领取(1:已领取 0:未领取)")
+    private Integer isClaim;
+    /**
+    * 备注
+    */
+    @ApiModelProperty("备注")
+    private String remark;
+
+}

+ 64 - 0
src/main/java/com/xjrsoft/module/textbook/vo/TextbookStudentClaimVo.java

@@ -0,0 +1,64 @@
+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 szs
+* @Date: 2023-12-26
+* @Version 1.0
+*/
+@Data
+public class TextbookStudentClaimVo {
+
+    /**
+    * 主键编号
+    */
+    @ApiModelProperty("主键编号")
+    private Long id;
+    /**
+    * 序号
+    */
+    @ApiModelProperty("序号")
+    private Integer sortCode;
+    /**
+    * 学期ID(base_semester)
+    */
+    @ApiModelProperty("学期ID(base_semester)")
+    private Long baseSemesterId;
+    /**
+    * 班级编号
+    */
+    @ApiModelProperty("班级编号")
+    private Long classId;
+    /**
+    * 学生用户编号
+    */
+    @ApiModelProperty("学生用户编号")
+    private Long studentUserId;
+    /**
+    * 教材管理编号
+    */
+    @ApiModelProperty("教材管理编号")
+    private Long textbookId;
+    /**
+    * 是否领取(1:已领取 0:未领取)
+    */
+    @ApiModelProperty("是否领取(1:已领取 0:未领取)")
+    private Integer isClaim;
+    /**
+    * 备注
+    */
+    @ApiModelProperty("备注")
+    private String remark;
+
+
+
+}

+ 15 - 0
src/main/resources/mapper/teacher/XjrUserMapper.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xjrsoft.module.teacher.mapper.XjrUserMapper">
+    <select id="getUserIdByClassId" parameterType="java.lang.Long"
+            resultType="java.lang.Long">
+        SELECT
+            t.id
+        FROM xjr_user t
+                 LEFT JOIN base_student_school_roll t1 ON (t1.user_id = t.id)
+        WHERE t.delete_mark = 0 and t1.class_id = #{classId}
+        order by t.id;
+    </select>
+</mapper>

+ 2 - 2
src/main/resources/mapper/textbook/WfTextbookClaimMapper.xml

@@ -19,7 +19,7 @@
              LEFT JOIN base_semester t3 ON (t3.id = t.base_semester_id)
              LEFT JOIN xjr_user t4 ON (t4.id = t.student_user_id)
              LEFT JOIN xjr_dictionary_detail t5 ON (t5.code = t.claim_type)
-             LEFT JOIN xjr_user t6 ON (t6.id = t.claim_user_id)
+             LEFT JOIN textbook_claim_user t6 ON (t6.id = t.claim_user_id)
         WHERE t.delete_mark = 0
         order by t.id;
     </select>
@@ -40,7 +40,7 @@
                  LEFT JOIN base_semester t3 ON (t3.id = t.base_semester_id)
                  LEFT JOIN xjr_user t4 ON (t4.id = t.student_user_id)
                  LEFT JOIN xjr_dictionary_detail t5 ON (t5.code = t.claim_type)
-                 LEFT JOIN xjr_user t6 ON (t6.id = t.claim_user_id)
+                 LEFT JOIN textbook_claim_user t6 ON (t6.id = t.claim_user_id)
         WHERE t.delete_mark = 0 and t.id = #{id}
         order by t.id;
     </select>

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

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