Преглед на файлове

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

dzx преди 1 година
родител
ревизия
a070a7a5df
променени са 37 файла, в които са добавени 1991 реда и са изтрити 78 реда
  1. 35 0
      src/main/java/com/xjrsoft/common/enums/ExerciseBookeTypeEnum.java
  2. 35 0
      src/main/java/com/xjrsoft/common/enums/SubscriptionTypeEnum.java
  3. 40 0
      src/main/java/com/xjrsoft/common/enums/TextbookTypeEnum.java
  4. 30 0
      src/main/java/com/xjrsoft/module/liteflow/node/AddExerciseBookNode.java
  5. 1 1
      src/main/java/com/xjrsoft/module/liteflow/node/AddTextbookNode.java
  6. 116 0
      src/main/java/com/xjrsoft/module/textbook/controller/TextbookIssueRecordController.java
  7. 116 0
      src/main/java/com/xjrsoft/module/textbook/controller/WfExerciseBookController.java
  8. 73 0
      src/main/java/com/xjrsoft/module/textbook/dto/AddTextbookIssueRecordDto.java
  9. 64 0
      src/main/java/com/xjrsoft/module/textbook/dto/AddWfExerciseBookDto.java
  10. 58 0
      src/main/java/com/xjrsoft/module/textbook/dto/AddWfExerciseBookItemDto.java
  11. 26 0
      src/main/java/com/xjrsoft/module/textbook/dto/TextbookIssueRecordPageDto.java
  12. 32 0
      src/main/java/com/xjrsoft/module/textbook/dto/UpdateTextbookIssueRecordDto.java
  13. 33 0
      src/main/java/com/xjrsoft/module/textbook/dto/UpdateWfExerciseBookDto.java
  14. 26 0
      src/main/java/com/xjrsoft/module/textbook/dto/WfExerciseBookPageDto.java
  15. 123 0
      src/main/java/com/xjrsoft/module/textbook/entity/TextbookIssueRecord.java
  16. 115 0
      src/main/java/com/xjrsoft/module/textbook/entity/WfExerciseBook.java
  17. 108 0
      src/main/java/com/xjrsoft/module/textbook/entity/WfExerciseBookItem.java
  18. 17 0
      src/main/java/com/xjrsoft/module/textbook/mapper/TextbookIssueRecordMapper.java
  19. 17 0
      src/main/java/com/xjrsoft/module/textbook/mapper/WfExerciseBookItemMapper.java
  20. 17 0
      src/main/java/com/xjrsoft/module/textbook/mapper/WfExerciseBookMapper.java
  21. 17 0
      src/main/java/com/xjrsoft/module/textbook/service/ITextbookIssueRecordService.java
  22. 14 1
      src/main/java/com/xjrsoft/module/textbook/service/ITextbookService.java
  23. 47 0
      src/main/java/com/xjrsoft/module/textbook/service/IWfExerciseBookService.java
  24. 1 1
      src/main/java/com/xjrsoft/module/textbook/service/IWfTextbookSubscriptionService.java
  25. 25 0
      src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookIssueRecordServiceImpl.java
  26. 152 51
      src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookServiceImpl.java
  27. 100 0
      src/main/java/com/xjrsoft/module/textbook/service/impl/WfExerciseBookServiceImpl.java
  28. 18 19
      src/main/java/com/xjrsoft/module/textbook/service/impl/WfTextbookClaimServiceImpl.java
  29. 139 0
      src/main/java/com/xjrsoft/module/textbook/vo/TextbookIssueRecordPageVo.java
  30. 74 0
      src/main/java/com/xjrsoft/module/textbook/vo/TextbookIssueRecordVo.java
  31. 59 0
      src/main/java/com/xjrsoft/module/textbook/vo/WfExerciseBookItemVo.java
  32. 118 0
      src/main/java/com/xjrsoft/module/textbook/vo/WfExerciseBookPageVo.java
  33. 65 0
      src/main/java/com/xjrsoft/module/textbook/vo/WfExerciseBookVo.java
  34. 2 1
      src/main/resources/application-dev.yml
  35. 4 2
      src/main/resources/mapper/textbook/WfTextbookClaimMapper.xml
  36. 7 2
      src/test/java/com/xjrsoft/module/textbook/service/impl/TextbookServiceImplTest.java
  37. 67 0
      src/test/java/com/xjrsoft/xjrsoftboot/FreeMarkerGeneratorTest.java

+ 35 - 0
src/main/java/com/xjrsoft/common/enums/ExerciseBookeTypeEnum.java

@@ -0,0 +1,35 @@
+package com.xjrsoft.common.enums;
+
+/**
+ * @description: 作业本征订类型exercise_book_type
+ * @author: phoenix
+ * @create: 2023/12/21 11:27
+ * @Version 1.0
+ */
+public enum ExerciseBookeTypeEnum {
+    /**
+     * 笔记本
+     * */
+    ExerciseBook1("exercise_book1", "笔记本"),
+
+    /**
+     * 作业本
+     * */
+    ExerciseBook2("exercise_book2", "作业本");
+
+    final String code;
+    final String value;
+
+    public String getCode() {
+        return this.code;
+    }
+
+    public String getValue() {
+        return this.value;
+    }
+
+    ExerciseBookeTypeEnum(final String code, final String message) {
+        this.code = code;
+        this.value = message;
+    }
+}

+ 35 - 0
src/main/java/com/xjrsoft/common/enums/SubscriptionTypeEnum.java

@@ -0,0 +1,35 @@
+package com.xjrsoft.common.enums;
+
+/**
+ * @description: 教材征订类型subscription_type
+ * @author: phoenix
+ * @create: 2023/12/21 11:27
+ * @Version 1.0
+ */
+public enum SubscriptionTypeEnum {
+    /**
+     * 教材
+     * */
+    STextbook("s_textbook", "教材"),
+
+    /**
+     * 辅材
+     * */
+    SMaterials("s_materials", "辅材");
+
+    final String code;
+    final String value;
+
+    public String getCode() {
+        return this.code;
+    }
+
+    public String getValue() {
+        return this.value;
+    }
+
+    SubscriptionTypeEnum(final String code, final String message) {
+        this.code = code;
+        this.value = message;
+    }
+}

+ 40 - 0
src/main/java/com/xjrsoft/common/enums/TextbookTypeEnum.java

@@ -0,0 +1,40 @@
+package com.xjrsoft.common.enums;
+
+/**
+ * @description: 教材类型textbook_type
+ * @author: phoenix
+ * @create: 2023/12/21 11:27
+ * @Version 1.0
+ */
+public enum TextbookTypeEnum {
+    /**
+     * 教材
+     * */
+    TTextbook("t_textbook", "教材"),
+
+    /**
+     * 辅材
+     * */
+    TMaterials("t_materials", "辅材"),
+
+    /**
+     * 作业本
+     * */
+    TExerciseBook("t_exercise_book", "作业本");
+
+    final String code;
+    final String value;
+
+    public String getCode() {
+        return this.code;
+    }
+
+    public String getValue() {
+        return this.value;
+    }
+
+    TextbookTypeEnum(final String code, final String message) {
+        this.code = code;
+        this.value = message;
+    }
+}

+ 30 - 0
src/main/java/com/xjrsoft/module/liteflow/node/AddExerciseBookNode.java

@@ -0,0 +1,30 @@
+package com.xjrsoft.module.liteflow.node;
+
+import cn.hutool.core.convert.Convert;
+import com.xjrsoft.module.textbook.service.ITextbookService;
+import com.yomahub.liteflow.core.NodeComponent;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * 添加新出现的作业本数据到教材管理
+ */
+@Component("add_exercise_book_node")
+public class AddExerciseBookNode extends NodeComponent {
+    @Autowired
+    private ITextbookService textbookService;
+
+    @Override
+    public void process() throws Exception {
+        // 获取表单中数据编号
+        Map<String, Object> params = this.getFirstContextBean();
+        Object value = util.getFormDatKey(params,"id");
+        Long formId = Convert.toLong(value);
+        if (formId != null) {
+            // 数据处理
+            textbookService.dataHandleAddExerciseBookNode(formId);
+        }
+    }
+}

+ 1 - 1
src/main/java/com/xjrsoft/module/liteflow/node/AddTextbookNode.java

@@ -24,7 +24,7 @@ public class AddTextbookNode extends NodeComponent {
         Long formId = Convert.toLong(value);
         if (formId != null) {
             // 数据处理
-            textbookService.dataHandle(formId);
+            textbookService.dataHandleAddTextbookNode(formId);
         }
     }
 }

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

@@ -0,0 +1,116 @@
+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.AddTextbookIssueRecordDto;
+import com.xjrsoft.module.textbook.dto.UpdateTextbookIssueRecordDto;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.alibaba.excel.EasyExcel;
+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.TextbookIssueRecordPageDto;
+import com.xjrsoft.module.textbook.entity.TextbookIssueRecord;
+import com.xjrsoft.module.textbook.service.ITextbookIssueRecordService;
+import com.xjrsoft.module.textbook.vo.TextbookIssueRecordPageVo;
+
+import com.xjrsoft.module.textbook.vo.TextbookIssueRecordVo;
+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-27
+* @Version 1.0
+*/
+@RestController
+@RequestMapping("/textbook" + "/textbookIssueRecord")
+@Api(value = "/textbook"  + "/textbookIssueRecord",tags = "教材出库记录代码")
+@AllArgsConstructor
+public class TextbookIssueRecordController {
+
+
+    private final ITextbookIssueRecordService textbookIssueRecordService;
+
+    @GetMapping(value = "/page")
+    @ApiOperation(value="教材出库记录列表(分页)")
+    @SaCheckPermission("textbookissuerecord:detail")
+    public RT<PageOutput<TextbookIssueRecordPageVo>> page(@Valid TextbookIssueRecordPageDto dto){
+
+        LambdaQueryWrapper<TextbookIssueRecord> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper
+                    .orderByDesc(TextbookIssueRecord::getId)
+                .select(TextbookIssueRecord.class,x -> VoToColumnUtil.fieldsToColumns(TextbookIssueRecordPageVo.class).contains(x.getProperty()));
+        IPage<TextbookIssueRecord> page = textbookIssueRecordService.page(ConventPage.getPage(dto), queryWrapper);
+        PageOutput<TextbookIssueRecordPageVo> pageOutput = ConventPage.getPageOutput(page, TextbookIssueRecordPageVo.class);
+        return RT.ok(pageOutput);
+    }
+
+    @GetMapping(value = "/info")
+    @ApiOperation(value="根据id查询教材出库记录信息")
+    @SaCheckPermission("textbookissuerecord:detail")
+    public RT<TextbookIssueRecordVo> info(@RequestParam Long id){
+        TextbookIssueRecord textbookIssueRecord = textbookIssueRecordService.getById(id);
+        if (textbookIssueRecord == null) {
+           return RT.error("找不到此数据!");
+        }
+        return RT.ok(BeanUtil.toBean(textbookIssueRecord, TextbookIssueRecordVo.class));
+    }
+
+
+    @PostMapping
+    @ApiOperation(value = "新增教材出库记录")
+    @SaCheckPermission("textbookissuerecord:add")
+    public RT<Boolean> add(@Valid @RequestBody AddTextbookIssueRecordDto dto){
+        TextbookIssueRecord textbookIssueRecord = BeanUtil.toBean(dto, TextbookIssueRecord.class);
+        boolean isSuccess = textbookIssueRecordService.save(textbookIssueRecord);
+    return RT.ok(isSuccess);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "修改教材出库记录")
+    @SaCheckPermission("textbookissuerecord:edit")
+    public RT<Boolean> update(@Valid @RequestBody UpdateTextbookIssueRecordDto dto){
+
+        TextbookIssueRecord textbookIssueRecord = BeanUtil.toBean(dto, TextbookIssueRecord.class);
+        return RT.ok(textbookIssueRecordService.updateById(textbookIssueRecord));
+
+    }
+
+    @DeleteMapping
+    @ApiOperation(value = "删除教材出库记录")
+    @SaCheckPermission("textbookissuerecord:delete")
+    public RT<Boolean> delete(@Valid @RequestBody List<Long> ids){
+        return RT.ok(textbookIssueRecordService.removeBatchByIds(ids));
+
+    }
+
+    @GetMapping("/export")
+    @ApiOperation(value = "导出")
+    public ResponseEntity<byte[]> exportData(@Valid TextbookIssueRecordPageDto dto, @RequestParam(defaultValue = "false") Boolean isTemplate) {
+        List<TextbookIssueRecordPageVo> customerList = isTemplate != null && isTemplate ? new ArrayList<>() : ((PageOutput<TextbookIssueRecordPageVo>) page(dto).getData()).getList();
+        ByteArrayOutputStream bot = new ByteArrayOutputStream();
+        EasyExcel.write(bot, TextbookIssueRecordPageVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(customerList);
+
+        return RT.fileStream(bot.toByteArray(), "TextbookIssueRecord" + ExcelTypeEnum.XLSX.getValue());
+    }
+}

+ 116 - 0
src/main/java/com/xjrsoft/module/textbook/controller/WfExerciseBookController.java

@@ -0,0 +1,116 @@
+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.AddWfExerciseBookDto;
+import com.xjrsoft.module.textbook.dto.UpdateWfExerciseBookDto;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.alibaba.excel.EasyExcel;
+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.WfExerciseBookPageDto;
+import com.xjrsoft.module.textbook.entity.WfExerciseBook;
+import com.xjrsoft.module.textbook.service.IWfExerciseBookService;
+import com.xjrsoft.module.textbook.vo.WfExerciseBookPageVo;
+
+import com.xjrsoft.module.textbook.vo.WfExerciseBookVo;
+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-27
+* @Version 1.0
+*/
+@RestController
+@RequestMapping("/textbook" + "/wfExerciseBook")
+@Api(value = "/textbook"  + "/wfExerciseBook",tags = "作业本征订代码")
+@AllArgsConstructor
+public class WfExerciseBookController {
+
+
+    private final IWfExerciseBookService wfExerciseBookService;
+
+    @GetMapping(value = "/page")
+    @ApiOperation(value="作业本征订列表(分页)")
+    @SaCheckPermission("wfexercisebook:detail")
+    public RT<PageOutput<WfExerciseBookPageVo>> page(@Valid WfExerciseBookPageDto dto){
+
+        LambdaQueryWrapper<WfExerciseBook> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper
+                    .orderByDesc(WfExerciseBook::getId)
+                .select(WfExerciseBook.class,x -> VoToColumnUtil.fieldsToColumns(WfExerciseBookPageVo.class).contains(x.getProperty()));
+        IPage<WfExerciseBook> page = wfExerciseBookService.page(ConventPage.getPage(dto), queryWrapper);
+        PageOutput<WfExerciseBookPageVo> pageOutput = ConventPage.getPageOutput(page, WfExerciseBookPageVo.class);
+        return RT.ok(pageOutput);
+    }
+
+    @GetMapping(value = "/info")
+    @ApiOperation(value="根据id查询作业本征订信息")
+    @SaCheckPermission("wfexercisebook:detail")
+    public RT<WfExerciseBookVo> info(@RequestParam Long id){
+        WfExerciseBook wfExerciseBook = wfExerciseBookService.getByIdDeep(id);
+        if (wfExerciseBook == null) {
+           return RT.error("找不到此数据!");
+        }
+        return RT.ok(BeanUtil.toBean(wfExerciseBook, WfExerciseBookVo.class));
+    }
+
+
+    @PostMapping
+    @ApiOperation(value = "新增作业本征订")
+    @SaCheckPermission("wfexercisebook:add")
+    public RT<Boolean> add(@Valid @RequestBody AddWfExerciseBookDto dto){
+        WfExerciseBook wfExerciseBook = BeanUtil.toBean(dto, WfExerciseBook.class);
+        boolean isSuccess = wfExerciseBookService.add(wfExerciseBook);
+    return RT.ok(isSuccess);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "修改作业本征订")
+    @SaCheckPermission("wfexercisebook:edit")
+    public RT<Boolean> update(@Valid @RequestBody UpdateWfExerciseBookDto dto){
+
+        WfExerciseBook wfExerciseBook = BeanUtil.toBean(dto, WfExerciseBook.class);
+        return RT.ok(wfExerciseBookService.update(wfExerciseBook));
+
+    }
+
+    @DeleteMapping
+    @ApiOperation(value = "删除作业本征订")
+    @SaCheckPermission("wfexercisebook:delete")
+    public RT<Boolean> delete(@Valid @RequestBody List<Long> ids){
+        return RT.ok(wfExerciseBookService.delete(ids));
+
+    }
+
+    @GetMapping("/export")
+    @ApiOperation(value = "导出")
+    public ResponseEntity<byte[]> exportData(@Valid WfExerciseBookPageDto dto, @RequestParam(defaultValue = "false") Boolean isTemplate) {
+        List<WfExerciseBookPageVo> customerList = isTemplate != null && isTemplate ? new ArrayList<>() : ((PageOutput<WfExerciseBookPageVo>) page(dto).getData()).getList();
+        ByteArrayOutputStream bot = new ByteArrayOutputStream();
+        EasyExcel.write(bot, WfExerciseBookPageVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(customerList);
+
+        return RT.fileStream(bot.toByteArray(), "WfExerciseBook" + ExcelTypeEnum.XLSX.getValue());
+    }
+}

+ 73 - 0
src/main/java/com/xjrsoft/module/textbook/dto/AddTextbookIssueRecordDto.java

@@ -0,0 +1,73 @@
+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-27
+* @Version 1.0
+*/
+@Data
+public class AddTextbookIssueRecordDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 序号
+    */
+    @ApiModelProperty("序号")
+    private Integer sortCode;
+    /**
+    * 教材申领编号
+    */
+    @ApiModelProperty("教材申领编号")
+    private Long wfTextbookClaimId;
+    /**
+    * 教材申领项编号
+    */
+    @ApiModelProperty("教材申领项编号")
+    private Long wfTextbookClaimItemId;
+    /**
+    * 出库数量
+    */
+    @ApiModelProperty("出库数量")
+    private Integer issueNumber;
+    /**
+    * 剩余数量
+    */
+    @ApiModelProperty("剩余数量")
+    private Integer remainingNumber;
+    /**
+    * 领取用户编号
+    */
+    @ApiModelProperty("领取用户编号")
+    private Long receiveUserId;
+    /**
+    * 出库用户编号
+    */
+    @ApiModelProperty("出库用户编号")
+    private Long issueUserId;
+    /**
+    * 出库方式(xjr_dictionary_item[issue_mode])
+    */
+    @ApiModelProperty("出库方式(xjr_dictionary_item[issue_mode])")
+    private String issueMode;
+    /**
+    * 备注
+    */
+    @ApiModelProperty("备注")
+    private String remark;
+
+}

+ 64 - 0
src/main/java/com/xjrsoft/module/textbook/dto/AddWfExerciseBookDto.java

@@ -0,0 +1,64 @@
+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;
+import com.xjrsoft.module.textbook.entity.WfExerciseBookItem;
+
+
+
+/**
+* @title: 作业本征订
+* @Author szs
+* @Date: 2023-12-27
+* @Version 1.0
+*/
+@Data
+public class AddWfExerciseBookDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 序号
+    */
+    @ApiModelProperty("序号")
+    private Integer sortCode;
+    /**
+    * 申请人
+    */
+    @ApiModelProperty("申请人")
+    private Long applicantUserId;
+    /**
+    * 班级编号
+    */
+    @ApiModelProperty("班级编号")
+    private Long classId;
+    /**
+    * 学期ID(base_semester)
+    */
+    @ApiModelProperty("学期ID(base_semester)")
+    private Long baseSemesterId;
+    /**
+    * 备注
+    */
+    @ApiModelProperty("备注")
+    private String remark;
+    /**
+    * 状态(1:结束 0:未结束)
+    */
+    @ApiModelProperty("状态(1:结束 0:未结束)")
+    private Integer status;
+
+    /**
+    * wfExerciseBookItem
+    */
+    @ApiModelProperty("wfExerciseBookItem子表")
+    private List<AddWfExerciseBookItemDto> wfExerciseBookItemList;
+}

+ 58 - 0
src/main/java/com/xjrsoft/module/textbook/dto/AddWfExerciseBookItemDto.java

@@ -0,0 +1,58 @@
+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-27
+* @Version 1.0
+*/
+@Data
+public class AddWfExerciseBookItemDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 序号
+    */
+    @ApiModelProperty("序号")
+    private Integer sortCode;
+    /**
+    * 作业本征订编号
+    */
+    @ApiModelProperty("作业本征订编号")
+    private Long wfExerciseBookId;
+    /**
+    * 作业本征订类型(xjr_dictionary_item[exercise_book_type])
+    */
+    @ApiModelProperty("作业本征订类型(xjr_dictionary_item[exercise_book_type])")
+    private String subscriptionType;
+    /**
+    * 规格型号
+    */
+    @ApiModelProperty("规格型号")
+    private String specificationsModels;
+    /**
+    * 估价(元)
+    */
+    @ApiModelProperty("估价(元)")
+    private BigDecimal appraisalPrice;
+    /**
+    * 征订数量
+    */
+    @ApiModelProperty("征订数量")
+    private Integer subscriptionNumber;
+
+}

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

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

+ 33 - 0
src/main/java/com/xjrsoft/module/textbook/dto/UpdateWfExerciseBookDto.java

@@ -0,0 +1,33 @@
+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;
+import com.xjrsoft.module.textbook.entity.WfExerciseBookItem;
+
+
+
+/**
+* @title: 作业本征订
+* @Author szs
+* @Date: 2023-12-27
+* @Version 1.0
+*/
+@Data
+public class UpdateWfExerciseBookDto extends AddWfExerciseBookDto {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 主键编号
+    */
+    @ApiModelProperty("主键编号")
+    private Long id;
+}

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

+ 123 - 0
src/main/java/com/xjrsoft/module/textbook/entity/TextbookIssueRecord.java

@@ -0,0 +1,123 @@
+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-27
+* @Version 1.0
+*/
+@Data
+@TableName("textbook_issue_record")
+@ApiModel(value = "textbook_issue_record", description = "教材出库记录")
+public class TextbookIssueRecord 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 wfTextbookClaimId;
+    /**
+    * 教材申领项编号
+    */
+    @ApiModelProperty("教材申领项编号")
+    private Long wfTextbookClaimItemId;
+    /**
+    * 出库数量
+    */
+    @ApiModelProperty("出库数量")
+    private Integer issueNumber;
+    /**
+    * 剩余数量
+    */
+    @ApiModelProperty("剩余数量")
+    private Integer remainingNumber;
+    /**
+    * 领取用户编号
+    */
+    @ApiModelProperty("领取用户编号")
+    private Long receiveUserId;
+    /**
+    * 出库用户编号
+    */
+    @ApiModelProperty("出库用户编号")
+    private Long issueUserId;
+    /**
+    * 出库方式(xjr_dictionary_item[issue_mode])
+    */
+    @ApiModelProperty("出库方式(xjr_dictionary_item[issue_mode])")
+    private String issueMode;
+    /**
+    * 备注
+    */
+    @ApiModelProperty("备注")
+    private String remark;
+
+
+}

+ 115 - 0
src/main/java/com/xjrsoft/module/textbook/entity/WfExerciseBook.java

@@ -0,0 +1,115 @@
+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-27
+* @Version 1.0
+*/
+@Data
+@TableName("wf_exercise_book")
+@ApiModel(value = "wf_exercise_book", description = "作业本征订")
+public class WfExerciseBook 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 applicantUserId;
+    /**
+    * 班级编号
+    */
+    @ApiModelProperty("班级编号")
+    private Long classId;
+    /**
+    * 学期ID(base_semester)
+    */
+    @ApiModelProperty("学期ID(base_semester)")
+    private Long baseSemesterId;
+    /**
+    * 备注
+    */
+    @ApiModelProperty("备注")
+    private String remark;
+    /**
+    * 状态(1:结束 0:未结束)
+    */
+    @ApiModelProperty("状态(1:结束 0:未结束)")
+    private Integer status;
+
+    /**
+    * wfExerciseBookItem
+    */
+    @ApiModelProperty("wfExerciseBookItem子表")
+    @TableField(exist = false)
+    @EntityMapping(thisField = "id", joinField = "wfExerciseBookId")
+    private List<WfExerciseBookItem> wfExerciseBookItemList;
+
+}

+ 108 - 0
src/main/java/com/xjrsoft/module/textbook/entity/WfExerciseBookItem.java

@@ -0,0 +1,108 @@
+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-27
+* @Version 1.0
+*/
+@Data
+@TableName("wf_exercise_book_item")
+@ApiModel(value = "wf_exercise_book_item", description = "作业本征订项")
+public class WfExerciseBookItem 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 wfExerciseBookId;
+    /**
+    * 作业本征订类型(xjr_dictionary_item[exercise_book_type])
+    */
+    @ApiModelProperty("作业本征订类型(xjr_dictionary_item[exercise_book_type])")
+    private String subscriptionType;
+    /**
+    * 规格型号
+    */
+    @ApiModelProperty("规格型号")
+    private String specificationsModels;
+    /**
+    * 估价(元)
+    */
+    @ApiModelProperty("估价(元)")
+    private BigDecimal appraisalPrice;
+    /**
+    * 征订数量
+    */
+    @ApiModelProperty("征订数量")
+    private Integer subscriptionNumber;
+
+
+}

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

+ 17 - 0
src/main/java/com/xjrsoft/module/textbook/mapper/WfExerciseBookItemMapper.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.WfExerciseBookItem;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @title: 作业本征订项
+* @Author szs
+* @Date: 2023-12-27
+* @Version 1.0
+*/
+@Mapper
+public interface WfExerciseBookItemMapper extends MPJBaseMapper<WfExerciseBookItem> {
+
+}

+ 17 - 0
src/main/java/com/xjrsoft/module/textbook/mapper/WfExerciseBookMapper.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.WfExerciseBook;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @title: 作业本征订
+* @Author szs
+* @Date: 2023-12-27
+* @Version 1.0
+*/
+@Mapper
+public interface WfExerciseBookMapper extends MPJBaseMapper<WfExerciseBook> {
+
+}

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

+ 14 - 1
src/main/java/com/xjrsoft/module/textbook/service/ITextbookService.java

@@ -6,6 +6,7 @@ import com.xjrsoft.module.textbook.dto.AddTextbookWarehouseRecordDto;
 import com.xjrsoft.module.textbook.dto.TextbookPageDto;
 import com.xjrsoft.module.textbook.entity.Textbook;
 import com.xjrsoft.module.textbook.entity.TextbookClassRelation;
+import com.xjrsoft.module.textbook.vo.*;
 import com.xjrsoft.module.textbook.vo.TextbookWarehouseRecordListVo;
 import com.xjrsoft.module.textbook.vo.TextbookIssueRecordListVo;
 import com.xjrsoft.module.textbook.vo.TextbookPageVo;
@@ -55,7 +56,19 @@ public interface ITextbookService extends MPJBaseService<Textbook> {
      */
     Page<TextbookPageVo> getPage(Page<TextbookPageDto> page, TextbookPageDto dto);
 
-    Boolean dataHandle(Long dataId);
+    /**
+     * 添加教材教辅规则
+     * @param dataId
+     * @return
+     */
+    Boolean dataHandleAddTextbookNode(Long dataId);
+
+    /**
+     * 添加作业本规则
+     * @param dataId
+     * @return
+     */
+    Boolean dataHandleAddExerciseBookNode(Long dataId);
 
     /**
      *

+ 47 - 0
src/main/java/com/xjrsoft/module/textbook/service/IWfExerciseBookService.java

@@ -0,0 +1,47 @@
+package com.xjrsoft.module.textbook.service;
+
+import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.textbook.entity.WfExerciseBook;
+
+import java.util.List;
+
+/**
+* @title: 作业本征订
+* @Author szs
+* @Date: 2023-12-27
+* @Version 1.0
+*/
+
+public interface IWfExerciseBookService extends MPJBaseService<WfExerciseBook> {
+    /**
+    * 新增
+    *
+    * @param wfExerciseBook
+    * @return
+    */
+    Boolean add(WfExerciseBook wfExerciseBook);
+
+    /**
+    * 更新
+    *
+    * @param wfExerciseBook
+    * @return
+    */
+    Boolean update(WfExerciseBook wfExerciseBook);
+
+    /**
+    * 删除
+    *
+    * @param ids
+    * @return
+    */
+    Boolean delete(List<Long> ids);
+
+    /**
+     * 根据Id查询征订项
+     *
+     * @param id
+     * @return
+     */
+    WfExerciseBook selectById(Long id);
+}

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

@@ -38,7 +38,7 @@ public interface IWfTextbookSubscriptionService extends MPJBaseService<WfTextboo
     Boolean delete(List<Long> ids);
 
     /**
-     * 根据Id
+     * 根据Id查询征订项
      *
      * @param id
      * @return

+ 25 - 0
src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookIssueRecordServiceImpl.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.TextbookIssueRecord;
+import com.xjrsoft.module.textbook.mapper.TextbookIssueRecordMapper;
+import com.xjrsoft.module.textbook.service.ITextbookIssueRecordService;
+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-27
+* @Version 1.0
+*/
+@Service
+@AllArgsConstructor
+public class TextbookIssueRecordServiceImpl extends MPJBaseServiceImpl<TextbookIssueRecordMapper, TextbookIssueRecord> implements ITextbookIssueRecordService {
+}

+ 152 - 51
src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookServiceImpl.java

@@ -7,30 +7,22 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.common.enums.SubscriptionTypeEnum;
+import com.xjrsoft.common.enums.TextbookTypeEnum;
 import com.xjrsoft.common.exception.MyException;
 import com.xjrsoft.module.base.entity.BaseClass;
 import com.xjrsoft.module.base.service.IBaseClassService;
 import com.xjrsoft.module.textbook.dto.AddTextbookWarehouseRecordDto;
 import com.xjrsoft.module.textbook.dto.TextbookPageDto;
-import com.xjrsoft.module.textbook.entity.Textbook;
-import com.xjrsoft.module.textbook.entity.TextbookClassRelation;
-import com.xjrsoft.module.textbook.entity.TextbookSubscriptionRecord;
-import com.xjrsoft.module.textbook.entity.TextbookWarehouseRecord;
-import com.xjrsoft.module.textbook.entity.WfTextbookSubscription;
-import com.xjrsoft.module.textbook.entity.WfTextbookSubscriptionItem;
+import com.xjrsoft.module.textbook.entity.*;
 import com.xjrsoft.module.textbook.mapper.TextbookClassRelationMapper;
 import com.xjrsoft.module.textbook.mapper.TextbookMapper;
 import com.xjrsoft.module.textbook.mapper.TextbookSubscriptionRecordMapper;
 import com.xjrsoft.module.textbook.service.ITextbookClassWarehouseService;
 import com.xjrsoft.module.textbook.service.ITextbookService;
+import com.xjrsoft.module.textbook.service.IWfExerciseBookService;
 import com.xjrsoft.module.textbook.service.IWfTextbookSubscriptionService;
-import com.xjrsoft.module.textbook.vo.TextbookIssueRecordListVo;
-import com.xjrsoft.module.textbook.vo.TextbookPageVo;
-import com.xjrsoft.module.textbook.vo.TextbookSubscriptionClassVo;
-import com.xjrsoft.module.textbook.vo.TextbookSubscriptionRecordVo;
-import com.xjrsoft.module.textbook.vo.TextbookVo;
-import com.xjrsoft.module.textbook.vo.TextbookWarehouseRecordListVo;
-import com.xjrsoft.module.textbook.vo.WfTextbookClaimListVo;
+import com.xjrsoft.module.textbook.vo.*;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -56,6 +48,8 @@ public class TextbookServiceImpl extends MPJBaseServiceImpl<TextbookMapper, Text
 
     private final IWfTextbookSubscriptionService iWfTextbookSubscriptionService;
 
+    private final IWfExerciseBookService wfExerciseBookService;
+
     private final IBaseClassService baseClassService;
 
     private final ITextbookClassWarehouseService textbookClassWarehouseService;
@@ -182,47 +176,51 @@ public class TextbookServiceImpl extends MPJBaseServiceImpl<TextbookMapper, Text
     }
 
     @Override
-    public Boolean dataHandle(Long dataId) {
+    @Transactional
+    public Boolean dataHandleAddTextbookNode(Long dataId) {
         WfTextbookSubscription wfTextbookSubscription = iWfTextbookSubscriptionService.selectById(dataId);
         if (ObjectUtil.isNotNull(wfTextbookSubscription) && ObjectUtil.isNotNull(wfTextbookSubscription.getWfTextbookSubscriptionItemList()) && wfTextbookSubscription.getWfTextbookSubscriptionItemList().size() > 0) {
             for (WfTextbookSubscriptionItem wfTextbookSubscriptionItem : wfTextbookSubscription.getWfTextbookSubscriptionItemList()) {
-                String issn = wfTextbookSubscriptionItem.getIssn();
                 Long semesterId = wfTextbookSubscription.getBaseSemesterId();
-                Long subjectGroupId = wfTextbookSubscription.getSubjectGroupId();
+                String issn = wfTextbookSubscriptionItem.getIssn();
                 LambdaQueryWrapper<Textbook> queryWrapper = new LambdaQueryWrapper<>();
                 queryWrapper
                         .eq(Textbook::getIssn, issn)
-                        .eq(Textbook::getBaseSemesterId, semesterId)
-                        .eq(Textbook::getSubjectGroupId, subjectGroupId);
-                Long count = this.count(queryWrapper);
-                if (count <= 0) {//该书不存在教材管理
-                    Textbook textbook = new Textbook();
-                    textbook.setIssn(wfTextbookSubscriptionItem.getIssn());
-                    textbook.setIsbn(wfTextbookSubscriptionItem.getIsbn());
-                    textbook.setBookName(wfTextbookSubscriptionItem.getBookName());
-                    textbook.setPublishingHouse(wfTextbookSubscriptionItem.getPublishingHouse());
-                    textbook.setEditorInChief(wfTextbookSubscriptionItem.getEditorInChief());
-                    textbook.setSubjectGroupId(wfTextbookSubscription.getSubjectGroupId());
-                    textbook.setBaseSemesterId(wfTextbookSubscription.getBaseSemesterId());
-                    textbook.setCourseSubjectId(wfTextbookSubscriptionItem.getCourseSubjectId());
-                    textbook.setVersion(wfTextbookSubscriptionItem.getVersion());
-                    textbook.setIsTextbookPlan(wfTextbookSubscriptionItem.getIsTextbookPlan());
-                    textbook.setTextbookType(wfTextbookSubscriptionItem.getSubscriptionType());
-                    textbook.setAppraisalPrice(wfTextbookSubscriptionItem.getAppraisalPrice());
-                    textbookTextbookMapper.insert(textbook);
+                        .eq(Textbook::getBaseSemesterId, semesterId);
+                List<Textbook> textbookList = this.list(queryWrapper);
+                //征订的教材没有在教材管理
+                if (ObjectUtil.isNull(textbookList) || textbookList.size() <= 0) {//该书不存在于教材管理
+                    Textbook textbook = new Textbook() {{
+                        setIssn(wfTextbookSubscriptionItem.getIssn());
+                        setIsbn(wfTextbookSubscriptionItem.getIsbn());
+                        setBookName(wfTextbookSubscriptionItem.getBookName());
+                        setPublishingHouse(wfTextbookSubscriptionItem.getPublishingHouse());
+                        setEditorInChief(wfTextbookSubscriptionItem.getEditorInChief());
+                        setSubjectGroupId(wfTextbookSubscription.getSubjectGroupId());
+                        setBaseSemesterId(wfTextbookSubscription.getBaseSemesterId());
+                        setCourseSubjectId(wfTextbookSubscriptionItem.getCourseSubjectId());
+                        setVersion(wfTextbookSubscriptionItem.getVersion());
+                        setIsTextbookPlan(wfTextbookSubscriptionItem.getIsTextbookPlan());
+                        if (wfTextbookSubscriptionItem.getSubscriptionType().equals(SubscriptionTypeEnum.STextbook.getCode())) {
+                            setTextbookType(TextbookTypeEnum.TTextbook.getCode());
+                        }
+                        if (wfTextbookSubscriptionItem.getSubscriptionType().equals(SubscriptionTypeEnum.SMaterials.getCode())) {
+                            setTextbookType(TextbookTypeEnum.TMaterials.getCode());
+                        }
+                        setAppraisalPrice(wfTextbookSubscriptionItem.getAppraisalPrice());
+                    }};
+
+                    //班级不为空
                     if (ObjectUtil.isNotNull(wfTextbookSubscriptionItem.getClassIds()) && !wfTextbookSubscriptionItem.getClassIds().equals("")) {
+                        //将班级ids转换为List
                         String classIds = wfTextbookSubscriptionItem.getClassIds();
                         String[] classIdStrs = classIds.split(",");
                         List<Long> classIdList = new ArrayList<>();
                         for (String classIdStr : classIdStrs) {
-                            Long classId = Long.parseLong(classIdStr);
-                            classIdList.add(classId);
-                            TextbookClassRelation textbookClassRelation = new TextbookClassRelation();
-                            textbookClassRelation.setTextbookId(textbook.getId());
-                            textbookClassRelation.setClassId(classId);
-                            textbookTextbookClassRelationMapper.insert(textbookClassRelation);
+                            classIdList.add(Long.parseLong(classIdStr));
                         }
-                        //查询年级
+
+                        //查询年级,如果添加的班级只存在一个年级,添加年级字段值
                         LambdaQueryWrapper<BaseClass> queryWrapper1 = new LambdaQueryWrapper<>();
                         queryWrapper1
                                 .in(BaseClass::getId, classIdList)
@@ -231,12 +229,115 @@ public class TextbookServiceImpl extends MPJBaseServiceImpl<TextbookMapper, Text
                         if (ObjectUtil.isNotNull(baseClassList) && baseClassList.size() == 1) {
                             textbook.setGradeId(baseClassList.get(0).getGradeId());
                         }
+
+                        //插入教材数据
+                        textbookTextbookMapper.insert(textbook);
+
+                        //插入班级和教材关系
+                        for (Long classId : classIdList) {
+                            textbookTextbookClassRelationMapper.insert(new TextbookClassRelation() {{
+                                setTextbookId(textbook.getId());
+                                setClassId(classId);
+                            }});
+                        }
                     }
-                    TextbookSubscriptionRecord textbookSubscriptionRecord = new TextbookSubscriptionRecord();
-                    textbookSubscriptionRecord.setWfTextbookSubscriptionId(textbook.getId());
-                    textbookSubscriptionRecord.setWfTextbookSubscriptionId(wfTextbookSubscription.getId());
-                    textbookTextbookSubscriptionRecordMapper.insert(textbookSubscriptionRecord);
+                    //添加教材征订记录
+                    textbookTextbookSubscriptionRecordMapper.insert(new TextbookSubscriptionRecord() {{
+                        setWfTextbookSubscriptionId(textbook.getId());
+                        setWfTextbookSubscriptionId(wfTextbookSubscription.getId());
+                    }});
                 }
+
+                //征订的教材在教材管理,进行班级的和记录的管理
+                Textbook textbook = textbookList.get(0);
+
+                //班级不为空
+                if (ObjectUtil.isNotNull(wfTextbookSubscriptionItem.getClassIds()) && !wfTextbookSubscriptionItem.getClassIds().equals("")) {
+                    //将班级ids转换为List
+                    String classIds = wfTextbookSubscriptionItem.getClassIds();
+                    String[] classIdStrs = classIds.split(",");
+                    for (String classIdStr : classIdStrs) {
+                        textbookTextbookClassRelationMapper.insert(new TextbookClassRelation() {{
+                            setTextbookId(textbook.getId());
+                            setClassId(Long.parseLong(classIdStr));
+                        }});
+                    }
+                }
+                //添加教材征订记录
+                textbookTextbookSubscriptionRecordMapper.insert(new TextbookSubscriptionRecord() {{
+                    setWfTextbookSubscriptionId(textbook.getId());
+                    setWfTextbookSubscriptionId(wfTextbookSubscription.getId());
+                }});
+            }
+        }
+        return true;
+    }
+
+    /**
+     * 添加作业本规则
+     *
+     * @param dataId
+     * @return
+     */
+    @Override
+    public Boolean dataHandleAddExerciseBookNode(Long dataId) {
+        WfExerciseBook wfExerciseBook = wfExerciseBookService.selectById(dataId);
+        if (ObjectUtil.isNotNull(wfExerciseBook) && ObjectUtil.isNotNull(wfExerciseBook.getWfExerciseBookItemList()) && wfExerciseBook.getWfExerciseBookItemList().size() > 0) {
+            for (WfExerciseBookItem wfExerciseBookItem : wfExerciseBook.getWfExerciseBookItemList()) {
+                Long semesterId = wfExerciseBook.getBaseSemesterId();
+                String bookName = wfExerciseBookItem.getSubscriptionType();//作业本的选择类型对应教材管理的书名
+                LambdaQueryWrapper<Textbook> queryWrapper = new LambdaQueryWrapper<>();
+                queryWrapper
+                        .eq(Textbook::getBookName, bookName)
+                        .eq(Textbook::getBaseSemesterId, semesterId);
+                List<Textbook> textbookList = this.list(queryWrapper);
+                //征订的作业本没有在教材管理
+                if (ObjectUtil.isNull(textbookList) || textbookList.size() <= 0) {
+                    Textbook textbook = new Textbook() {{
+                        setBaseSemesterId(wfExerciseBook.getBaseSemesterId());
+                        setBookName(wfExerciseBookItem.getSubscriptionType());
+                        setTextbookType(TextbookTypeEnum.TExerciseBook.getCode());
+                        //年级id
+                        LambdaQueryWrapper<BaseClass> queryWrapper1 = new LambdaQueryWrapper<>();
+                        queryWrapper1
+                                .eq(BaseClass::getId, wfExerciseBook.getClassId());
+                        BaseClass baseClass = baseClassService.getOne(queryWrapper1);
+                        setGradeId(baseClass.getGradeId());
+                        setAppraisalPrice(wfExerciseBookItem.getAppraisalPrice());
+                    }};
+
+                    //插入教材数据
+                    textbookTextbookMapper.insert(textbook);
+
+                    //插入班级和教材关系
+                    textbookTextbookClassRelationMapper.insert(new TextbookClassRelation() {{
+                        setTextbookId(textbook.getId());
+                        setClassId(wfExerciseBook.getClassId());
+                    }});
+
+                    //添加教材征订记录
+                    textbookTextbookSubscriptionRecordMapper.insert(new TextbookSubscriptionRecord() {{
+                        setTextbookId(textbook.getId());
+                        setWfTextbookSubscriptionId(wfExerciseBook.getId());
+                    }});
+                }
+
+                //征订的教材在教材管理,进行班级的和记录的管理
+                Textbook textbook = textbookList.get(0);
+
+                //班级不为空
+                if (ObjectUtil.isNotNull(wfExerciseBook.getClassId()) && !wfExerciseBook.getClassId().equals("")) {
+                    textbookTextbookClassRelationMapper.insert(new TextbookClassRelation() {{
+                        setTextbookId(textbook.getId());
+                        setClassId(wfExerciseBook.getClassId());
+                    }});
+
+                }
+                //添加教材征订记录
+                textbookTextbookSubscriptionRecordMapper.insert(new TextbookSubscriptionRecord() {{
+                    setTextbookId(textbook.getId());
+                    setWfTextbookSubscriptionId(wfExerciseBook.getId());
+                }});
             }
         }
         return true;
@@ -246,7 +347,7 @@ public class TextbookServiceImpl extends MPJBaseServiceImpl<TextbookMapper, Text
     public List<TextbookSubscriptionRecordVo> subscriptionList(Long id) {
         List<TextbookSubscriptionRecordVo> recordVos = textbookTextbookMapper.subscriptionList(id);
         for (TextbookSubscriptionRecordVo recordVo : recordVos) {
-            if(ObjectUtil.isNull(recordVo) || StrUtil.isEmpty(recordVo.getClassIds())){
+            if (ObjectUtil.isNull(recordVo) || StrUtil.isEmpty(recordVo.getClassIds())) {
                 continue;
             }
             String[] split = recordVo.getClassIds().split(",");
@@ -256,8 +357,8 @@ public class TextbookServiceImpl extends MPJBaseServiceImpl<TextbookMapper, Text
             }
             List<TextbookSubscriptionClassVo> classInfo = textbookTextbookMapper.getClassInfo(ids);
             String useClass = "";
-            for (int i = 0; i < classInfo.size(); i ++){
-                if(i >= 1){
+            for (int i = 0; i < classInfo.size(); i++) {
+                if (i >= 1) {
                     useClass += ",";
                 }
                 TextbookSubscriptionClassVo classVo = classInfo.get(i);
@@ -276,7 +377,7 @@ public class TextbookServiceImpl extends MPJBaseServiceImpl<TextbookMapper, Text
     @Override
     public List<TextbookWarehouseRecordListVo> warehouseList(Long id) {
         List<TextbookWarehouseRecordListVo> result = textbookTextbookMapper.warehouseList(id);
-        if(!result.isEmpty()){
+        if (!result.isEmpty()) {
             return result;
         }
         return new ArrayList<>();
@@ -285,7 +386,7 @@ public class TextbookServiceImpl extends MPJBaseServiceImpl<TextbookMapper, Text
     @Override
     public List<TextbookClassRelation> getClassRelation(Long id) {
         List<TextbookClassRelation> classRelation = textbookTextbookMapper.getClassRelation(id);
-        if(!classRelation.isEmpty()){
+        if (!classRelation.isEmpty()) {
             return classRelation;
         }
         return new ArrayList<>();
@@ -294,7 +395,7 @@ public class TextbookServiceImpl extends MPJBaseServiceImpl<TextbookMapper, Text
     @Override
     public List<TextbookIssueRecordListVo> issueList(Long id) {
         List<TextbookIssueRecordListVo> result = textbookTextbookMapper.issueList(id);
-        if(!result.isEmpty()){
+        if (!result.isEmpty()) {
             return result;
         }
         return new ArrayList<>();

+ 100 - 0
src/main/java/com/xjrsoft/module/textbook/service/impl/WfExerciseBookServiceImpl.java

@@ -0,0 +1,100 @@
+package com.xjrsoft.module.textbook.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.module.textbook.entity.WfExerciseBook;
+import com.xjrsoft.module.textbook.entity.WfExerciseBookItem;
+import com.xjrsoft.module.textbook.mapper.WfExerciseBookItemMapper;
+import com.xjrsoft.module.textbook.mapper.WfExerciseBookMapper;
+import com.xjrsoft.module.textbook.service.IWfExerciseBookService;
+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;
+
+/**
+* @title: 作业本征订
+* @Author szs
+* @Date: 2023-12-27
+* @Version 1.0
+*/
+@Service
+@AllArgsConstructor
+public class WfExerciseBookServiceImpl extends MPJBaseServiceImpl<WfExerciseBookMapper, WfExerciseBook> implements IWfExerciseBookService {
+    private final WfExerciseBookMapper wfExerciseBookWfExerciseBookMapper;
+
+    private final WfExerciseBookItemMapper wfExerciseBookWfExerciseBookItemMapper;
+
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean add(WfExerciseBook wfExerciseBook) {
+        wfExerciseBookWfExerciseBookMapper.insert(wfExerciseBook);
+        for (WfExerciseBookItem wfExerciseBookItem : wfExerciseBook.getWfExerciseBookItemList()) {
+            wfExerciseBookItem.setWfExerciseBookId(wfExerciseBook.getId());
+            wfExerciseBookWfExerciseBookItemMapper.insert(wfExerciseBookItem);
+        }
+
+        return true;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean update(WfExerciseBook wfExerciseBook) {
+        wfExerciseBookWfExerciseBookMapper.updateById(wfExerciseBook);
+        //********************************* WfExerciseBookItem  增删改  开始 *******************************************/
+        {
+            // 查出所有子级的id
+            List<WfExerciseBookItem> wfExerciseBookItemList = wfExerciseBookWfExerciseBookItemMapper.selectList(Wrappers.lambdaQuery(WfExerciseBookItem.class).eq(WfExerciseBookItem::getWfExerciseBookId, wfExerciseBook.getId()).select(WfExerciseBookItem::getId));
+            List<Long> wfExerciseBookItemIds = wfExerciseBookItemList.stream().map(WfExerciseBookItem::getId).collect(Collectors.toList());
+            //原有子表单 没有被删除的主键
+            List<Long> wfExerciseBookItemOldIds = wfExerciseBook.getWfExerciseBookItemList().stream().map(WfExerciseBookItem::getId).filter(Objects::nonNull).collect(Collectors.toList());
+            //找到需要删除的id
+            List<Long> wfExerciseBookItemRemoveIds = wfExerciseBookItemIds.stream().filter(item -> !wfExerciseBookItemOldIds.contains(item)).collect(Collectors.toList());
+
+            for (WfExerciseBookItem wfExerciseBookItem : wfExerciseBook.getWfExerciseBookItemList()) {
+                //如果不等于空则修改
+                if (wfExerciseBookItem.getId() != null) {
+                    wfExerciseBookWfExerciseBookItemMapper.updateById(wfExerciseBookItem);
+                }
+                //如果等于空 则新增
+                else {
+                    //已经不存在的id 删除
+                    wfExerciseBookItem.setWfExerciseBookId(wfExerciseBook.getId());
+                    wfExerciseBookWfExerciseBookItemMapper.insert(wfExerciseBookItem);
+                }
+            }
+            //已经不存在的id 删除
+            if(wfExerciseBookItemRemoveIds.size() > 0){
+                wfExerciseBookWfExerciseBookItemMapper.deleteBatchIds(wfExerciseBookItemRemoveIds);
+            }
+        }
+        //********************************* WfExerciseBookItem  增删改  结束 *******************************************/
+
+        return true;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean delete(List<Long> ids) {
+        wfExerciseBookWfExerciseBookMapper.deleteBatchIds(ids);
+        wfExerciseBookWfExerciseBookItemMapper.delete(Wrappers.lambdaQuery(WfExerciseBookItem.class).in(WfExerciseBookItem::getWfExerciseBookId, ids));
+
+        return true;
+    }
+
+    @Override
+    public WfExerciseBook selectById(Long id) {
+        WfExerciseBook wfExerciseBook = this.getById(id);
+        LambdaQueryWrapper<WfExerciseBookItem> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper
+                .eq(WfExerciseBookItem::getWfExerciseBookId,id);
+        List<WfExerciseBookItem> wfExerciseBookItemList = wfExerciseBookWfExerciseBookItemMapper.selectList(queryWrapper);
+        wfExerciseBook.setWfExerciseBookItemList(wfExerciseBookItemList);
+        return wfExerciseBook;
+    }
+}

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

@@ -203,29 +203,31 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
             }
 
             //判断总发放数量是否超出该申请项的申请数量
-            if (wfTextbookClaimItem.getIssueNumber() + textbookClaimItem.getConfirmNumber() > wfTextbookClaimItem.getApplicantNumber()) {
+            Integer issueNumber = ObjectUtil.isNull(wfTextbookClaimItem.getIssueNumber())? 0 : wfTextbookClaimItem.getIssueNumber();
+            if (issueNumber + textbookClaimItem.getConfirmNumber() > wfTextbookClaimItem.getApplicantNumber()) {
                 throw new MyException(textbook.getBookName() + "发放总数量超出申领数量");
             }
 
             //判断总发放数量是否超出该申请像的申请数量
-            Integer stock = textbook.getStock();
+            Integer stock = ObjectUtil.isNull(textbook.getStock()) ? 0 : 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);
+            textbookService.updateById(new Textbook(){{
+                setId(textbook.getId());
+                setStock(stock - textbookClaimItem.getConfirmNumber());
+            }});
 
             //TODO 增加出库记录
 
             //更新申领项中的已经发放数量
-            WfTextbookClaimItem newWfTextbookClaimItem = new WfTextbookClaimItem();
-            newWfTextbookClaimItem.setId(wfTextbookClaimItem.getId());
-            newWfTextbookClaimItem.setIssueNumber(wfTextbookClaimItem.getIssueNumber() + textbookClaimItem.getConfirmNumber());
-            wfTextbookClaimWfTextbookClaimItemMapper.updateById(newWfTextbookClaimItem);
+            wfTextbookClaimWfTextbookClaimItemMapper.updateById(new WfTextbookClaimItem(){{
+                setId(wfTextbookClaimItem.getId());
+                        setIssueNumber(issueNumber + textbookClaimItem.getConfirmNumber());
+            }});
+
 
             //为班级每个学生生成领取(确认信息)认领记录
             //查出班上的所有学生id
@@ -235,17 +237,14 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
                 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.save(new TextbookStudentClaim(){{
+                    setStudentUserId(userId);
+                    setBaseSemesterId(wfTextbookClaim.getBaseSemesterId());
+                    setClassId(wfTextbookClaim.getClassId());
+                    setTextbookId(wfTextbookClaimItem.getTextbookId());
+                }});
             }
-            textbookStudentClaimService.saveBatch(textbookStudentClaimsList);
         }
         return true;
     }

+ 139 - 0
src/main/java/com/xjrsoft/module/textbook/vo/TextbookIssueRecordPageVo.java

@@ -0,0 +1,139 @@
+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 szs
+* @Date: 2023-12-27
+* @Version 1.0
+*/
+@Data
+public class TextbookIssueRecordPageVo {
+
+    /**
+    * 主键编号
+    */
+    @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 wfTextbookClaimId;
+    /**
+    * 教材申领项编号
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("教材申领项编号")
+    @ApiModelProperty("教材申领项编号")
+    private Long wfTextbookClaimItemId;
+    /**
+    * 出库数量
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("出库数量")
+    @ApiModelProperty("出库数量")
+    private Integer issueNumber;
+    /**
+    * 剩余数量
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("剩余数量")
+    @ApiModelProperty("剩余数量")
+    private Integer remainingNumber;
+    /**
+    * 领取用户编号
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("领取用户编号")
+    @ApiModelProperty("领取用户编号")
+    private Long receiveUserId;
+    /**
+    * 出库用户编号
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("出库用户编号")
+    @ApiModelProperty("出库用户编号")
+    private Long issueUserId;
+    /**
+    * 出库方式(xjr_dictionary_item[issue_mode])
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("出库方式(xjr_dictionary_item[issue_mode])")
+    @ApiModelProperty("出库方式(xjr_dictionary_item[issue_mode])")
+    private String issueMode;
+    /**
+    * 备注
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("备注")
+    @ApiModelProperty("备注")
+    private String remark;
+
+}

+ 74 - 0
src/main/java/com/xjrsoft/module/textbook/vo/TextbookIssueRecordVo.java

@@ -0,0 +1,74 @@
+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-27
+* @Version 1.0
+*/
+@Data
+public class TextbookIssueRecordVo {
+
+    /**
+    * 主键编号
+    */
+    @ApiModelProperty("主键编号")
+    private Long id;
+    /**
+    * 序号
+    */
+    @ApiModelProperty("序号")
+    private Integer sortCode;
+    /**
+    * 教材申领编号
+    */
+    @ApiModelProperty("教材申领编号")
+    private Long wfTextbookClaimId;
+    /**
+    * 教材申领项编号
+    */
+    @ApiModelProperty("教材申领项编号")
+    private Long wfTextbookClaimItemId;
+    /**
+    * 出库数量
+    */
+    @ApiModelProperty("出库数量")
+    private Integer issueNumber;
+    /**
+    * 剩余数量
+    */
+    @ApiModelProperty("剩余数量")
+    private Integer remainingNumber;
+    /**
+    * 领取用户编号
+    */
+    @ApiModelProperty("领取用户编号")
+    private Long receiveUserId;
+    /**
+    * 出库用户编号
+    */
+    @ApiModelProperty("出库用户编号")
+    private Long issueUserId;
+    /**
+    * 出库方式(xjr_dictionary_item[issue_mode])
+    */
+    @ApiModelProperty("出库方式(xjr_dictionary_item[issue_mode])")
+    private String issueMode;
+    /**
+    * 备注
+    */
+    @ApiModelProperty("备注")
+    private String remark;
+
+
+
+}

+ 59 - 0
src/main/java/com/xjrsoft/module/textbook/vo/WfExerciseBookItemVo.java

@@ -0,0 +1,59 @@
+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-27
+* @Version 1.0
+*/
+@Data
+public class WfExerciseBookItemVo {
+
+    /**
+    * 主键编号
+    */
+    @ApiModelProperty("主键编号")
+    private Long id;
+    /**
+    * 序号
+    */
+    @ApiModelProperty("序号")
+    private Integer sortCode;
+    /**
+    * 作业本征订编号
+    */
+    @ApiModelProperty("作业本征订编号")
+    private Long wfExerciseBookId;
+    /**
+    * 作业本征订类型(xjr_dictionary_item[exercise_book_type])
+    */
+    @ApiModelProperty("作业本征订类型(xjr_dictionary_item[exercise_book_type])")
+    private String subscriptionType;
+    /**
+    * 规格型号
+    */
+    @ApiModelProperty("规格型号")
+    private String specificationsModels;
+    /**
+    * 估价(元)
+    */
+    @ApiModelProperty("估价(元)")
+    private BigDecimal appraisalPrice;
+    /**
+    * 征订数量
+    */
+    @ApiModelProperty("征订数量")
+    private Integer subscriptionNumber;
+
+
+
+}

+ 118 - 0
src/main/java/com/xjrsoft/module/textbook/vo/WfExerciseBookPageVo.java

@@ -0,0 +1,118 @@
+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 szs
+* @Date: 2023-12-27
+* @Version 1.0
+*/
+@Data
+public class WfExerciseBookPageVo {
+
+    /**
+    * 主键编号
+    */
+    @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 applicantUserId;
+    /**
+    * 班级编号
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("班级编号")
+    @ApiModelProperty("班级编号")
+    private Long classId;
+    /**
+    * 学期ID(base_semester)
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("学期ID(base_semester)")
+    @ApiModelProperty("学期ID(base_semester)")
+    private Long baseSemesterId;
+    /**
+    * 备注
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("备注")
+    @ApiModelProperty("备注")
+    private String remark;
+    /**
+    * 状态(1:结束 0:未结束)
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("状态(1:结束 0:未结束)")
+    @ApiModelProperty("状态(1:结束 0:未结束)")
+    private Integer status;
+
+}

+ 65 - 0
src/main/java/com/xjrsoft/module/textbook/vo/WfExerciseBookVo.java

@@ -0,0 +1,65 @@
+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;
+import com.xjrsoft.module.textbook.entity.WfExerciseBookItem;
+
+/**
+* @title: 作业本征订表单出参
+* @Author szs
+* @Date: 2023-12-27
+* @Version 1.0
+*/
+@Data
+public class WfExerciseBookVo {
+
+    /**
+    * 主键编号
+    */
+    @ApiModelProperty("主键编号")
+    private Long id;
+    /**
+    * 序号
+    */
+    @ApiModelProperty("序号")
+    private Integer sortCode;
+    /**
+    * 申请人
+    */
+    @ApiModelProperty("申请人")
+    private Long applicantUserId;
+    /**
+    * 班级编号
+    */
+    @ApiModelProperty("班级编号")
+    private Long classId;
+    /**
+    * 学期ID(base_semester)
+    */
+    @ApiModelProperty("学期ID(base_semester)")
+    private Long baseSemesterId;
+    /**
+    * 备注
+    */
+    @ApiModelProperty("备注")
+    private String remark;
+    /**
+    * 状态(1:结束 0:未结束)
+    */
+    @ApiModelProperty("状态(1:结束 0:未结束)")
+    private Integer status;
+
+
+    /**
+    * wfExerciseBookItem
+    */
+    @ApiModelProperty("wfExerciseBookItem子表")
+    private List<WfExerciseBookItemVo> wfExerciseBookItemList;
+
+}

+ 2 - 1
src/main/resources/application-dev.yml

@@ -64,7 +64,8 @@ xjrsoft:
     druid-password: admin # druid 监控密码
     default-password: "cqtlzjzx2023" #默认密码(用户重置密码后为该密码)
     domain-api: http://10.150.10.139:8888/api #api域名地址
-    domain-app: https://yxh-web.ngrok.yingcaibx.com/# #app域名地址
+#    domain-app: https://yxh-web.ngrok.yingcaibx.com/# #app域名地址
+    domain-app: http://172.19.17.106:5173/app/# #app域名地址
     domain-web: http://10.150.10.139:8888 #web域名地址
 #    domain-api: http://127.0.0.1:9000/api #api域名地址
 #    domain-web: http://127.0.0.1:9000 #web域名地址

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

@@ -12,7 +12,7 @@
             t3.name as baseSemesterIdCN,
             t4.name as studentUserIdCN,
             t5.name as claimTypeCN,
-            t6.name as claimUserIdCN
+            t7.name as claimUserIdCN
         FROM wf_textbook_claim t
              LEFT JOIN xjr_user t1 ON (t1.id = t.applicant_user_id)
              LEFT JOIN base_class t2 ON (t2.id = t.class_id)
@@ -20,6 +20,7 @@
              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 textbook_claim_user t6 ON (t6.id = t.claim_user_id)
+             LEFT JOIN xjr_user t7 ON (t7.id = t6.user_id)
         WHERE t.delete_mark = 0
         order by t.id;
     </select>
@@ -33,7 +34,7 @@
             t3.name as baseSemesterIdCN,
             t4.name as studentUserIdCN,
             t5.name as claimTypeCN,
-            t6.name as claimUserIdCN
+            t7.name as claimUserIdCN
         FROM wf_textbook_claim t
                  LEFT JOIN xjr_user t1 ON (t1.id = t.applicant_user_id)
                  LEFT JOIN base_class t2 ON (t2.id = t.class_id)
@@ -41,6 +42,7 @@
                  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 textbook_claim_user t6 ON (t6.id = t.claim_user_id)
+                 LEFT JOIN xjr_user t7 ON (t7.id = t6.user_id)
         WHERE t.delete_mark = 0 and t.id = #{id}
         order by t.id;
     </select>

+ 7 - 2
src/test/java/com/xjrsoft/module/textbook/service/impl/TextbookServiceImplTest.java

@@ -17,7 +17,12 @@ class TextbookServiceImplTest {
     private ITextbookService textbookService;
 
     @Test
-    void dataHandle() {
-        textbookService.dataHandle(1739238143509458944L);
+    void dataHandleAddTextbookNode() {
+        textbookService.dataHandleAddTextbookNode(1739238143509458944L);
+    }
+
+    @Test
+    void dataHandleAddExerciseBookNode() {
+        textbookService.dataHandleAddExerciseBookNode(1739576230844362752L);
     }
 }

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

@@ -1405,6 +1405,73 @@ public class FreeMarkerGeneratorTest {
         apiGeneratorService.generateCodes(params);
     }
 
+    /**
+     * 教材出库记录
+     *
+     */
+    @Test
+    public void gcTextbookIssueRecord() throws IOException {
+        List<TableConfig> tableConfigs = new ArrayList<>();
+        TableConfig mainTable = new TableConfig();
+        mainTable.setTableName("textbook_issue_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("szs");//作者名称
+        params.setPackageName("textbook");//包名
+        params.setTableConfigs(tableConfigs);
+        params.setPage(true);//是否生成分页接口
+        params.setImport(false);//是否生成导入接口
+        params.setExport(true);//是否生成导出接口
+        params.setOutMainDir(true);//是否生成在主目录,前期测试可设置成false
+        params.setDs(ds);
+
+        IApiGeneratorService apiGeneratorService = new ApiGeneratorServiceImpl();
+
+        apiGeneratorService.generateCodes(params);
+    }
+
+    /**
+     * 作业本征订
+     *
+     */
+    @Test
+    public void gcWfExerciseBook() throws IOException {
+        List<TableConfig> tableConfigs = new ArrayList<>();
+        TableConfig mainTable = new TableConfig();
+        mainTable.setTableName("wf_exercise_book");//init_sql中的表名
+        mainTable.setIsMain(true);//是否是主表,一般默认为true
+        mainTable.setPkField(GlobalConstant.DEFAULT_PK);//设置主键
+        mainTable.setPkType(GlobalConstant.DEFAULT_PK_TYPE);//设置主键类型
+        tableConfigs.add(mainTable);
+
+        mainTable = new TableConfig();
+        mainTable.setTableName("wf_exercise_book_item");//init_sql中的表名
+        mainTable.setIsMain(false);//是否是主表,一般默认为true
+        mainTable.setPkField(GlobalConstant.DEFAULT_PK);//设置主键
+        mainTable.setPkType(GlobalConstant.DEFAULT_PK_TYPE);//设置主键类型
+        mainTable.setRelationField("wf_exercise_book_id");//设置外键
+        mainTable.setRelationTableField(GlobalConstant.DEFAULT_PK);//设置外键
+        tableConfigs.add(mainTable);
+
+        ApiGenerateCodesDto params = new ApiGenerateCodesDto();
+        params.setAuthor("szs");//作者名称
+        params.setPackageName("textbook");//包名
+        params.setTableConfigs(tableConfigs);
+        params.setPage(true);//是否生成分页接口
+        params.setImport(false);//是否生成导入接口
+        params.setExport(true);//是否生成导出接口
+        params.setOutMainDir(true);//是否生成在主目录,前期测试可设置成false
+        params.setDs(ds);
+
+        IApiGeneratorService apiGeneratorService = new ApiGeneratorServiceImpl();
+
+        apiGeneratorService.generateCodes(params);
+    }
+
     /**
      * 寝室维护
      * @throws IOException