Procházet zdrojové kódy

/textbook/wfTextbookClaim/confirm-istribute 确认发放关联出库记录

phoenix před 1 rokem
rodič
revize
1fc362a4e5

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

@@ -0,0 +1,40 @@
+package com.xjrsoft.common.enums;
+
+/**
+ * @description: 申领类型claim_type
+ * @author: phoenix
+ * @create: 2023/12/21 11:27
+ * @Version 1.0
+ */
+public enum ClaimTypeEnum {
+    /**
+     * 笔记本
+     * */
+    ImStudent("im_student", "学生领取"),
+
+    /**
+     * 作业本
+     * */
+    ImTeacher("im_teacher", "教师领取"),
+
+    /**
+     * 笔记本
+     * */
+    ImRecede("im_recede", "退还");
+
+    final String code;
+    final String value;
+
+    public String getCode() {
+        return this.code;
+    }
+
+    public String getValue() {
+        return this.value;
+    }
+
+    ClaimTypeEnum(final String code, final String message) {
+        this.code = code;
+        this.value = message;
+    }
+}

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

@@ -0,0 +1,35 @@
+package com.xjrsoft.common.enums;
+
+/**
+ * @description: 出库方式issue_mode
+ * @author: phoenix
+ * @create: 2023/12/21 11:27
+ * @Version 1.0
+ */
+public enum IssueModeEnum {
+    /**
+     * 笔记本
+     * */
+    ClaimStudent("claim_student", "学生"),
+
+    /**
+     * 作业本
+     * */
+    ClaimTeacher("claim_teacher", "教师");
+
+    final String code;
+    final String value;
+
+    public String getCode() {
+        return this.code;
+    }
+
+    public String getValue() {
+        return this.value;
+    }
+
+    IssueModeEnum(final String code, final String message) {
+        this.code = code;
+        this.value = message;
+    }
+}

+ 2 - 1
src/main/java/com/xjrsoft/module/textbook/controller/WfTextbookClaimController.java

@@ -1,6 +1,7 @@
 package com.xjrsoft.module.textbook.controller;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.xjrsoft.common.model.result.RT;
@@ -112,7 +113,7 @@ public class WfTextbookClaimController {
     @ApiOperation(value="教材领取-生成二维码")
     @SaCheckPermission("wfstudenttextbookclaim:detail")
     public RT<String> qrcode(@RequestParam Long id) throws Exception {
-        String url = commonPropertiesConfig.getDomainApp() + "/pages/material/grant?id=" + id;
+        String url = commonPropertiesConfig.getDomainApp() + "/pages/material/grant?id=" + id + "&userId=" + StpUtil.getLoginIdAsLong();
         int width = 200;
         int height = 200;
         int margin = 1;

+ 13 - 1
src/main/java/com/xjrsoft/module/textbook/dto/ConfirmDistributeDto.java

@@ -24,11 +24,23 @@ public class ConfirmDistributeDto{
     @ApiModelProperty("教材申领主键编号")
     private Long textbookClaimId;
 
+    /**
+     * 领取用户编号
+     */
+    @ApiModelProperty("领取用户编号")
+    private Long receiveUserId;
+
     /**
      * 教材申领项
      */
     List<TextbookClaimItem> textbookClaimItemList;
 
+    /**
+     * 备注
+     */
+    @ApiModelProperty("备注")
+    private String remark;
+
     @Data
     public static class TextbookClaimItem implements Serializable {
 
@@ -38,7 +50,7 @@ public class ConfirmDistributeDto{
          * 教材申领项主键编号
          */
         @ApiModelProperty("教材申领项主键编号")
-        private Long TextbookClaimItemId;
+        private Long textbookClaimItemId;
 
         /**
          * 发放数量

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

@@ -201,10 +201,10 @@ public class TextbookServiceImpl extends MPJBaseServiceImpl<TextbookMapper, Text
                         setCourseSubjectId(wfTextbookSubscriptionItem.getCourseSubjectId());
                         setVersion(wfTextbookSubscriptionItem.getVersion());
                         setIsTextbookPlan(wfTextbookSubscriptionItem.getIsTextbookPlan());
-                        if (wfTextbookSubscriptionItem.getSubscriptionType().equals(SubscriptionTypeEnum.STextbook.getCode())) {
+                        if (ObjectUtil.isNotNull(wfTextbookSubscriptionItem.getSubscriptionType()) && wfTextbookSubscriptionItem.getSubscriptionType().equals(SubscriptionTypeEnum.STextbook.getCode())) {
                             setTextbookType(TextbookTypeEnum.TTextbook.getCode());
                         }
-                        if (wfTextbookSubscriptionItem.getSubscriptionType().equals(SubscriptionTypeEnum.SMaterials.getCode())) {
+                        if (ObjectUtil.isNotNull(wfTextbookSubscriptionItem.getSubscriptionType()) && wfTextbookSubscriptionItem.getSubscriptionType().equals(SubscriptionTypeEnum.SMaterials.getCode())) {
                             setTextbookType(TextbookTypeEnum.TMaterials.getCode());
                         }
                         setAppraisalPrice(wfTextbookSubscriptionItem.getAppraisalPrice());
@@ -243,7 +243,7 @@ public class TextbookServiceImpl extends MPJBaseServiceImpl<TextbookMapper, Text
                     }
                     //添加教材征订记录
                     textbookTextbookSubscriptionRecordMapper.insert(new TextbookSubscriptionRecord() {{
-                        setWfTextbookSubscriptionId(textbook.getId());
+                        setTextbookId(textbook.getId());
                         setWfTextbookSubscriptionId(wfTextbookSubscription.getId());
                     }});
                 }
@@ -265,7 +265,7 @@ public class TextbookServiceImpl extends MPJBaseServiceImpl<TextbookMapper, Text
                 }
                 //添加教材征订记录
                 textbookTextbookSubscriptionRecordMapper.insert(new TextbookSubscriptionRecord() {{
-                    setWfTextbookSubscriptionId(textbook.getId());
+                    setTextbookId(textbook.getId());
                     setWfTextbookSubscriptionId(wfTextbookSubscription.getId());
                 }});
             }

+ 36 - 16
src/main/java/com/xjrsoft/module/textbook/service/impl/WfTextbookClaimServiceImpl.java

@@ -1,22 +1,23 @@
 package com.xjrsoft.module.textbook.service.impl;
 
+import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.util.ObjectUtil;
 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.enums.ClaimTypeEnum;
+import com.xjrsoft.common.enums.IssueModeEnum;
 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.entity.*;
 import com.xjrsoft.module.textbook.mapper.WfTextbookClaimItemMapper;
 import com.xjrsoft.module.textbook.mapper.WfTextbookClaimMapper;
+import com.xjrsoft.module.textbook.service.ITextbookIssueRecordService;
 import com.xjrsoft.module.textbook.service.ITextbookService;
 import com.xjrsoft.module.textbook.service.ITextbookStudentClaimService;
 import com.xjrsoft.module.textbook.service.IWfTextbookClaimService;
@@ -51,6 +52,8 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
 
     private final ITextbookStudentClaimService textbookStudentClaimService;
 
+    private final ITextbookIssueRecordService textbookIssueRecordService;
+
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -203,29 +206,46 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
             }
 
             //判断总发放数量是否超出该申请项的申请数量
-            Integer issueNumber = ObjectUtil.isNull(wfTextbookClaimItem.getIssueNumber())? 0 : wfTextbookClaimItem.getIssueNumber();
-            if (issueNumber + textbookClaimItem.getConfirmNumber() > wfTextbookClaimItem.getApplicantNumber()) {
+            Integer issueNumber = ObjectUtil.isNull(wfTextbookClaimItem.getIssueNumber()) ? 0 : wfTextbookClaimItem.getIssueNumber();//已发放
+            Integer confirmNumber = ObjectUtil.isNull(textbookClaimItem.getConfirmNumber()) ? 0 : textbookClaimItem.getConfirmNumber();//本次发放
+            Integer applicantNumber = ObjectUtil.isNull(wfTextbookClaimItem.getApplicantNumber()) ? 0 : wfTextbookClaimItem.getApplicantNumber();//申领总数量
+            if (issueNumber + confirmNumber > applicantNumber) {
                 throw new MyException(textbook.getBookName() + "发放总数量超出申领数量");
             }
 
             //判断总发放数量是否超出该申请像的申请数量
-            Integer stock = ObjectUtil.isNull(textbook.getStock()) ? 0 : textbook.getStock() ;
-            if (stock < textbookClaimItem.getConfirmNumber()) {
+            Integer stock = ObjectUtil.isNull(textbook.getStock()) ? 0 : textbook.getStock();
+            if (stock < confirmNumber) {
                 throw new MyException(textbook.getBookName() + "库存不足");
             }
 
+            //增加出库记录
+            textbookIssueRecordService.save(new TextbookIssueRecord() {{
+                setWfTextbookClaimId(wfTextbookClaim.getId());
+                setWfTextbookClaimItemId(wfTextbookClaimItem.getId());
+                setIssueNumber(confirmNumber);
+                setRemainingNumber(applicantNumber - issueNumber - confirmNumber);
+                setReceiveUserId(dto.getReceiveUserId());
+                setIssueUserId(StpUtil.getLoginIdAsLong());
+                if (ObjectUtil.isNotNull(wfTextbookClaim.getClaimType()) && wfTextbookClaim.getClaimType().equals(ClaimTypeEnum.ImStudent.getCode())) {
+                    setIssueMode(IssueModeEnum.ClaimStudent.getCode());
+                }
+                if (ObjectUtil.isNotNull(wfTextbookClaim.getClaimType()) && wfTextbookClaim.getClaimType().equals(ClaimTypeEnum.ImTeacher.getCode())) {
+                    setIssueMode(IssueModeEnum.ClaimTeacher.getCode());
+                }
+                setRemark(dto.getRemark());
+            }});
+
             //更新教材管理中的库存数量
-            textbookService.updateById(new Textbook(){{
+            textbookService.updateById(new Textbook() {{
                 setId(textbook.getId());
-                setStock(stock - textbookClaimItem.getConfirmNumber());
+                setStock(stock - confirmNumber);
             }});
 
-            //TODO 增加出库记录
-
             //更新申领项中的已经发放数量
-            wfTextbookClaimWfTextbookClaimItemMapper.updateById(new WfTextbookClaimItem(){{
+            wfTextbookClaimWfTextbookClaimItemMapper.updateById(new WfTextbookClaimItem() {{
                 setId(wfTextbookClaimItem.getId());
-                        setIssueNumber(issueNumber + textbookClaimItem.getConfirmNumber());
+                setIssueNumber(issueNumber + confirmNumber);
             }});
 
 
@@ -233,12 +253,12 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
             //查出班上的所有学生id
             List<Long> userIdList = xjrUserMapper.getUserIdByClassId(wfTextbookClaim.getClassId());
 
-            if(ObjectUtil.isNull(userIdList)){
+            if (ObjectUtil.isNull(userIdList) && userIdList.size() <= 0) {
                 throw new MyException("申领班级有误,请核实");
             }
 
             for (Long userId : userIdList) {
-                textbookStudentClaimService.save(new TextbookStudentClaim(){{
+                textbookStudentClaimService.save(new TextbookStudentClaim() {{
                     setStudentUserId(userId);
                     setBaseSemesterId(wfTextbookClaim.getBaseSemesterId());
                     setClassId(wfTextbookClaim.getClassId());

+ 30 - 26
src/main/resources/sqlScript/20231218_sql.sql

@@ -420,30 +420,6 @@ CREATE TABLE textbook_class_relation
     PRIMARY KEY (`id`)
 ) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT '教材班级引用';
 
--- ----------------------------
--- 教材入库
--- ----------------------------
-DROP TABLE IF EXISTS textbook_class_warehouse;
-CREATE TABLE textbook_class_warehouse
-(
-    id BIGINT NOT NULL COMMENT '主键编号',
-    `create_user_id` BIGINT NULL DEFAULT NULL COMMENT '创建人',
-    `create_date` datetime NULL DEFAULT NULL COMMENT '创建时间',
-    `modify_user_id` BIGINT NULL DEFAULT NULL COMMENT '修改人',
-    `modify_date` datetime NULL DEFAULT NULL COMMENT '修改时间',
-    `delete_mark` INT NOT NULL COMMENT '删除标记',
-    `enabled_mark` INT NOT NULL COMMENT '有效标志',
-    `sort_code` INT NULL DEFAULT NULL COMMENT '序号',
-    `textbook_id` bigint NULL DEFAULT NULL COMMENT '教材管理编号',
-    `warehouse_number` int NULL DEFAULT NULL COMMENT '入库数量',
-    `source` varchar(200) NULL DEFAULT NULL COMMENT '来源',
-    `price` decimal(10,2) NULL DEFAULT NULL COMMENT '定价(元)',
-    `discount` float NULL DEFAULT NULL COMMENT '折扣',
-    `subtotal` decimal(10,2) NULL DEFAULT NULL COMMENT '小计(元)',
-    `total_price` decimal(10,2) NULL DEFAULT NULL COMMENT '总价(元)',
-    PRIMARY KEY (`id`)
-) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT '教材入库';
-
 -- ----------------------------
 -- 教材申领
 -- ----------------------------
@@ -486,8 +462,8 @@ CREATE TABLE wf_textbook_claim_item
     `sort_code` INT NULL DEFAULT NULL COMMENT '序号',
     `wf_textbook_claim_id` bigint NULL DEFAULT NULL COMMENT '教材申领编号',
     `textbook_id` bigint NULL DEFAULT NULL COMMENT '教材管理编号',
-    `applicant_number` int NULL DEFAULT NULL COMMENT '申请数量',
-    `issue_number` int NULL DEFAULT NULL COMMENT '已发放数量',
+    `applicant_number` int NULL DEFAULT 0 COMMENT '申请数量',
+    `issue_number` int NULL DEFAULT 0 COMMENT '已发放数量',
     PRIMARY KEY (`id`)
 ) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT '教材申领项';
 
@@ -511,6 +487,32 @@ CREATE TABLE textbook_claim_user
     PRIMARY KEY (`id`)
 ) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT '教材领取人员';
 
+-- ----------------------------
+-- 教材入库
+-- ----------------------------
+DROP TABLE IF EXISTS textbook_warehouse_record;
+CREATE TABLE textbook_warehouse_record
+(
+    id BIGINT NOT NULL COMMENT '主键编号',
+    `create_user_id` BIGINT NULL DEFAULT NULL COMMENT '创建人',
+    `create_date` datetime NULL DEFAULT NULL COMMENT '创建时间',
+    `modify_user_id` BIGINT NULL DEFAULT NULL COMMENT '修改人',
+    `modify_date` datetime NULL DEFAULT NULL COMMENT '修改时间',
+    `delete_mark` INT NOT NULL COMMENT '删除标记',
+    `enabled_mark` INT NOT NULL COMMENT '有效标志',
+    `sort_code` INT NULL DEFAULT NULL COMMENT '序号',
+    `textbook_id` bigint NULL DEFAULT NULL COMMENT '教材管理编号',
+    `warehouse_number` int NULL DEFAULT NULL COMMENT '入库数量',
+    `source` varchar(200) NULL DEFAULT NULL COMMENT '来源',
+    `price` decimal(10,2) NULL DEFAULT NULL COMMENT '定价(元)',
+    `discount` float NULL DEFAULT NULL COMMENT '折扣',
+    `subtotal` decimal(10,2) NULL DEFAULT NULL COMMENT '小计(元)',
+    `total_price` decimal(10,2) NULL DEFAULT NULL COMMENT '总价(元)',
+    `warehouse_mode` varchar(20) NULL DEFAULT NULL COMMENT '入库方式(xjr_dictionary_item[warehouse_mode])',
+    `remark` varchar(1000) COMMENT '备注',
+    PRIMARY KEY (`id`)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT '教材入库';
+
 -- ----------------------------
 -- 教材出库记录
 -- ----------------------------
@@ -531,6 +533,8 @@ CREATE TABLE textbook_issue_record
     `remaining_number` int NULL DEFAULT NULL COMMENT '剩余数量',
     `receive_user_id` bigint NULL DEFAULT NULL COMMENT '领取用户编号',
     `issue_user_id` bigint NULL DEFAULT NULL COMMENT '出库用户编号',
+    `issue_mode` varchar(20) NULL DEFAULT NULL COMMENT '出库方式(xjr_dictionary_item[issue_mode])',
+    `remark` varchar(1000) COMMENT '备注',
     PRIMARY KEY (`id`)
 ) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT '教材出库记录';