Browse Source

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

dzx 9 months ago
parent
commit
26c5cfee16

+ 4 - 4
src/main/java/com/xjrsoft/common/enums/RecedeTypeEnum.java

@@ -8,14 +8,14 @@ package com.xjrsoft.common.enums;
  */
 public enum RecedeTypeEnum {
     /**
-     * 退到教务处
+     *
      * */
-    RecedeDeansOffice("recede_deans_office", "退到教务处"),
+    PersonalRecede("personal_recede", "个人退书"),
 
     /**
-     * 退到书店
+     *
      * */
-    RecedeBookstore("recede_bookstore", "退");
+    ClassRecede("class_recede", "班级退书");
 
     final String code;
     final String value;

+ 34 - 1
src/main/java/com/xjrsoft/module/base/service/impl/BaseClassCourseServiceImpl.java

@@ -132,7 +132,40 @@ public class BaseClassCourseServiceImpl extends MPJBaseServiceImpl<BaseClassCour
     @Override
     @Transactional
     public Boolean oneUpdateClassCoursesAndTextbooks(ClassCourseTextbook dto) {
-        return updateAddCourseBook(dto);
+        if (dto.getBaseClassAdminCourseIds() == null || dto.getBaseClassAdminCourseIds().isEmpty() || dto.getBaseSemesterId() == null || dto.getBaseSemesterId() == 0) {
+            return false;
+        }
+
+        BaseClassAdminCourse baseClassAdminCourse = baseClassAdminCourseMapper.selectById(dto.getBaseClassAdminCourseIds().get(0));
+
+        if(ObjectUtils.isEmpty(baseClassAdminCourse)){
+            throw new MyException("当前班级错误");
+        }
+
+        //删除班级的这学期的所有课程教材
+        LambdaUpdateWrapper<BaseClassCourse> baseClassCourseLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
+        baseClassCourseLambdaUpdateWrapper
+                .in(BaseClassCourse::getClassId, baseClassAdminCourse.getId())
+        ;
+        this.remove(baseClassCourseLambdaUpdateWrapper);
+
+
+        List<BaseClassCourse> baseClassCourseList = new ArrayList<>();
+        for (String id : dto.getIds()) {
+            String[] idArr = id.split("_");
+            if (idArr[0].isEmpty() || idArr[1].isEmpty()) {
+                continue;
+            }
+            Long courseId = Long.parseLong(idArr[0]);
+            Long textbookId = Long.parseLong(idArr[1]);
+            baseClassCourseList.add(new BaseClassCourse() {{
+                setClassId(baseClassAdminCourse.getId());
+                setCourseId(courseId);
+                setTextbookId(textbookId);
+            }});
+        }
+
+        return this.saveBatch(baseClassCourseList);
     }
 
     @Override

+ 2 - 4
src/main/java/com/xjrsoft/module/textbook/dto/CanReturnTextbookListDto.java

@@ -3,14 +3,12 @@ package com.xjrsoft.module.textbook.dto;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
-import java.util.List;
-
 @Data
 public class CanReturnTextbookListDto {
 
     private static final long serialVersionUID = 1L;
-    @ApiModelProperty("当前登录用户主键编号")
-    private Long userId;
+    @ApiModelProperty("申请人用户主键编号")
+    private Long applicantUserId;
 
     @ApiModelProperty("退还类型")
     private String recordType;

+ 5 - 0
src/main/java/com/xjrsoft/module/textbook/entity/WfTextbookRecedeItem.java

@@ -79,6 +79,11 @@ public class WfTextbookRecedeItem implements Serializable {
     */
     @ApiModelProperty("退书申请编号")
     private Long wfTextbookRecedeId;
+    /**
+     * 出库主键id
+     */
+    @ApiModelProperty("出库主键id")
+    private Long textbookIssueRecordId;
     /**
     * 教材管理编号
     */

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

@@ -4,7 +4,11 @@ import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.xjrsoft.common.enums.ClaimTypeEnum;
+import com.xjrsoft.common.enums.RecedeTypeEnum;
+import com.xjrsoft.common.exception.MyException;
 import com.xjrsoft.common.utils.VoToColumnUtil;
+import com.xjrsoft.module.base.entity.BaseClass;
 import com.xjrsoft.module.teacher.entity.XjrUser;
 import com.xjrsoft.module.textbook.dto.CanReturnTextbookListDto;
 import com.xjrsoft.module.textbook.dto.DistributeRecordPageDto;
@@ -85,8 +89,41 @@ public class TextbookIssueRecordServiceImpl extends MPJBaseServiceImpl<TextbookI
 
     @Override
     public List<CanReturnTextbookListVo> canReturnTextbookList(CanReturnTextbookListDto dto) {
+        if(ObjectUtils.isEmpty(dto.getRecordType())){
+            throw new MyException("请选择退还类型");
+        }
+
+        MPJLambdaWrapper<TextbookIssueRecord> textbookIssueRecordMPJLambdaWrapper = new MPJLambdaWrapper<>();
+        textbookIssueRecordMPJLambdaWrapper
+                .select(TextbookIssueRecord::getTextbookId)
+                .selectAs(TextbookIssueRecord::getOrderNumber, CanReturnTextbookListVo::getOrderNumber)
+                .selectAs(TextbookIssueRecord::getTextbookId, CanReturnTextbookListVo::getTextbookId)
+                .selectAs(Textbook::getBookName, CanReturnTextbookListVo::getTextbookIdCn)
+                .selectAs(TextbookIssueRecord::getActualIssueNumber, CanReturnTextbookListVo::getActualIssueNumber)
+                .leftJoin(Textbook.class, Textbook::getId, TextbookIssueRecord::getTextbookId)
+                .eq(ObjectUtils.isNotEmpty(dto.getBaseSemesterId()), TextbookIssueRecord::getBaseSemesterId, dto.getBaseSemesterId())
+                ;
+
+        // 个人退书
+        if(RecedeTypeEnum.PersonalRecede.getCode().equals(dto.getRecordType())){
+            textbookIssueRecordMPJLambdaWrapper
+                    .leftJoin(WfTextbookClaim.class, WfTextbookClaim::getId, TextbookIssueRecord::getDataId)
+                    .ne(WfTextbookClaim::getClaimType, ClaimTypeEnum.ClaimClass.getCode())
+                    .eq(WfTextbookClaim::getApplicantUserId, dto.getApplicantUserId())
+                    ;
+        }
+
+        // 个人退书
+        if(RecedeTypeEnum.ClassRecede.getCode().equals(dto.getRecordType())){
+            textbookIssueRecordMPJLambdaWrapper
+                    .leftJoin(WfTextbookClaim.class, WfTextbookClaim::getId, TextbookIssueRecord::getDataId)
+                    .leftJoin(BaseClass.class, BaseClass::getId, WfTextbookClaim::getClassId)
+                    .eq(WfTextbookClaim::getClaimType, ClaimTypeEnum.ClaimClass.getCode())
+                    .eq(BaseClass::getTeacherId, dto.getApplicantUserId())
+            ;
+        }
 
-        return List.of();
+        return this.selectJoinList(CanReturnTextbookListVo.class, textbookIssueRecordMPJLambdaWrapper);
     }
 
     @Override

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

@@ -133,15 +133,18 @@ public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<Textbook
     public List<TextbookInstockroomListVo> instockroomList(TextbookInstockroomListDto dto) {
         MPJLambdaWrapper<TextbookSubscriptionItem> queryWrapper = new MPJLambdaWrapper<>();
         queryWrapper
+                .disableSubLogicDel()
                 .selectAs(TextbookSubscriptionItem::getId, TextbookInstockroomListVo::getTextbookSubscriptionItemId)
                 .select(Textbook.class, x -> VoToColumnUtil.fieldsToColumns(TextbookInstockroomListVo.class).contains(x.getProperty()))
                 .select(TextbookSubscriptionItem.class, x -> VoToColumnUtil.fieldsToColumns(TextbookInstockroomListVo.class).contains(x.getProperty()))
                 .selectAs(TextbookSubscriptionItem::getStudentNum, TextbookInstockroomListVo::getStudentSubscriptionNumber)
                 .selectAs(TextbookSubscriptionItem::getTeacherNum, TextbookInstockroomListVo::getTeacherSubscriptionNumber)
-                .selectAs(TextbookSubscriptionItem::getPrice, TextbookInstockroomListVo::getActualPrice)
-                .selectAs(TextbookSubscriptionItem::getDiscount, TextbookInstockroomListVo::getDiscount)
+//                .selectAs(TextbookSubscriptionItem::getPrice, TextbookInstockroomListVo::getActualPrice)
+//                .selectAs(TextbookSubscriptionItem::getDiscount, TextbookInstockroomListVo::getDiscount)
                 .leftJoin(Textbook.class, Textbook::getId, TextbookSubscriptionItem::getTextbookId)
 
+                .leftJoin(TextbookWarehouseRecord.class, TextbookWarehouseRecord::getDataItemId, TextbookSubscriptionItem::getId)
+
                 .leftJoin(BaseCourseSubject.class, BaseCourseSubject::getId, Textbook::getCourseSubjectId,
                         wrapper -> wrapper
                                 .selectAs(BaseCourseSubject::getName, TextbookInstockroomListVo::getCourseName)

+ 90 - 82
src/main/java/com/xjrsoft/module/textbook/service/impl/WfTextbookRecedeServiceImpl.java

@@ -1,33 +1,20 @@
 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.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.yulichang.base.MPJBaseServiceImpl;
-import com.xjrsoft.common.enums.IssueModeEnum;
-import com.xjrsoft.common.enums.RecedeTypeEnum;
-import com.xjrsoft.common.enums.WarehouseModeEnum;
-import com.xjrsoft.module.base.entity.BaseClass;
-import com.xjrsoft.module.base.mapper.BaseClassMapper;
-import com.xjrsoft.module.textbook.entity.Textbook;
-import com.xjrsoft.module.textbook.entity.TextbookIssueRecord;
-import com.xjrsoft.module.textbook.entity.TextbookWarehouseRecord;
-import com.xjrsoft.module.textbook.entity.WfTextbookRecede;
-import com.xjrsoft.module.textbook.entity.WfTextbookRecedeItem;
-import com.xjrsoft.module.textbook.mapper.TextbookIssueRecordMapper;
-import com.xjrsoft.module.textbook.mapper.TextbookMapper;
-import com.xjrsoft.module.textbook.mapper.TextbookWarehouseRecordMapper;
-import com.xjrsoft.module.textbook.mapper.WfTextbookRecedeItemMapper;
-import com.xjrsoft.module.textbook.mapper.WfTextbookRecedeMapper;
+import com.xjrsoft.common.enums.DeleteMark;
+import com.xjrsoft.module.textbook.entity.*;
+import com.xjrsoft.module.textbook.mapper.*;
 import com.xjrsoft.module.textbook.service.IWfTextbookRecedeService;
 import lombok.AllArgsConstructor;
+import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.Date;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.stream.Collectors;
 
@@ -46,8 +33,6 @@ public class WfTextbookRecedeServiceImpl extends MPJBaseServiceImpl<WfTextbookRe
 
     private final TextbookMapper textbookTextbookMapper;
 
-    private final BaseClassMapper baseClassMapper;
-
     private final TextbookWarehouseRecordMapper textbookWarehouseRecordMapper;
 
     private final TextbookIssueRecordMapper textbookIssueRecordMapper;
@@ -112,70 +97,93 @@ public class WfTextbookRecedeServiceImpl extends MPJBaseServiceImpl<WfTextbookRe
     @Override
     @Transactional
     public Boolean dataHandle(Long formId) {
-        WfTextbookRecede wfTextbookRecede = this.getById(formId);
-        if(ObjectUtil.isNotNull(wfTextbookRecede)){
-            LambdaQueryWrapper<WfTextbookRecedeItem> queryWrapperItem = new LambdaQueryWrapper<>();
-            queryWrapperItem
-                    .eq(WfTextbookRecedeItem::getWfTextbookRecedeId, wfTextbookRecede.getId());
-            List<WfTextbookRecedeItem> wfTextbookRecedeItemList = wfTextbookRecedeWfTextbookRecedeItemMapper.selectList(queryWrapperItem);
-            if(ObjectUtil.isNotNull(wfTextbookRecedeItemList)){
+        WfTextbookRecede wfTextbookRecede = this.getByIdDeep(formId);
+
+        if(ObjectUtils.isNotEmpty(wfTextbookRecede)){
+            List<WfTextbookRecedeItem> wfTextbookRecedeItemList = wfTextbookRecede.getWfTextbookRecedeItemList();
+            if(ObjectUtils.isNotEmpty(wfTextbookRecedeItemList)){
+                // 获取本学期所有的入库记录
+                List<TextbookWarehouseRecord> textbookWarehouseRecords = textbookWarehouseRecordMapper.selectList(
+                        Wrappers.lambdaQuery(TextbookWarehouseRecord.class)
+                                .eq(TextbookWarehouseRecord::getBaseSemesterId, wfTextbookRecede.getBaseSemesterId())
+                                .eq(TextbookWarehouseRecord::getDeleteMark, DeleteMark.NODELETE.getCode())
+                );
+
+                Map<Long, TextbookWarehouseRecord> textbookWarehouseRecordMap = textbookWarehouseRecords.stream()
+                        .collect(Collectors.toMap(TextbookWarehouseRecord::getId, t -> t, (t1, t2) -> t1))
+                        ;
+
+                // 获取本学期所有的入库记录
+                List<TextbookIssueRecord> textbookIssueRecords = textbookIssueRecordMapper.selectList(
+                        Wrappers.lambdaQuery(TextbookIssueRecord.class)
+                                .eq(TextbookIssueRecord::getBaseSemesterId, wfTextbookRecede.getBaseSemesterId())
+                                .eq(TextbookIssueRecord::getDeleteMark, DeleteMark.NODELETE.getCode())
+                );
+
+                Map<Long, TextbookIssueRecord> textbookIssueRecordMap = textbookIssueRecords.stream()
+                        .collect(Collectors.toMap(TextbookIssueRecord::getId, t -> t, (t1, t2) -> t1))
+                        ;
+
                 //遍历每一个退书申请项
+                TextbookWarehouseRecord textbookWarehouseRecord;
+                TextbookIssueRecord textbookIssueRecord;
                 for (WfTextbookRecedeItem wfTextbookRecedeItem : wfTextbookRecedeItemList) {
-                    //获取所退书籍的信息
-                    Textbook textbook = textbookTextbookMapper.selectById(wfTextbookRecedeItem.getTextbookId());
-                    //退书类型是到教务处
-                    if(ObjectUtil.isNotNull(textbook) && wfTextbookRecede.getRecedeType().equals(RecedeTypeEnum.RecedeDeansOffice.getCode())){
-                        //修改库存
-                        textbookTextbookMapper.updateById(new Textbook(){{
-                            setModifyUserId(StpUtil.getLoginIdAsLong());
-                            setModifyDate(new Date());
-                            setId(wfTextbookRecedeItem.getTextbookId());
-//                            setStock((ObjectUtil.isNull(textbook.getStock())?0:textbook.getStock()) + (ObjectUtil.isNull(wfTextbookRecedeItem.getNumber())?0:wfTextbookRecedeItem.getNumber()));
-                        }});
-                        //增加入库记录
-                        textbookWarehouseRecordMapper.insert(new TextbookWarehouseRecord(){{
-                            setCreateUserId(StpUtil.getLoginIdAsLong());
-                            setCreateDate(new Date());
-                            setTextbookId(wfTextbookRecedeItem.getTextbookId());
-                            setDataId(wfTextbookRecede.getId());
-                            setDataItemId(wfTextbookRecedeItem.getId());
-                            setWarehouseMode(WarehouseModeEnum.WmRecede.getCode());
-                            setWarehouseNumber(ObjectUtil.isNull(wfTextbookRecedeItem.getNumber())?0:wfTextbookRecedeItem.getNumber());
-                            if(wfTextbookRecede.getClassId() != null && wfTextbookRecede.getClassId() > 0){
-                                BaseClass c = baseClassMapper.selectById(wfTextbookRecede.getClassId());
-                                setSource(c.getName());
-                            }
-                            QueryWrapper<TextbookWarehouseRecord> queryWrapperSortcode = new QueryWrapper<>();
-                            queryWrapperSortcode.select("IFNULL(MAX(sort_code),0) as sortCode");
-                            TextbookWarehouseRecord t = textbookWarehouseRecordMapper.selectOne(queryWrapperSortcode);
-                            setSortCode(t.getSortCode()+1);
-                        }});
-                    }
-
-                    //退书类型是到书店
-                    if(ObjectUtil.isNotNull(textbook) && wfTextbookRecede.getRecedeType().equals(RecedeTypeEnum.RecedeBookstore.getCode())){
-                        //修改库存
-                        textbookTextbookMapper.updateById(new Textbook(){{
-                            setModifyUserId(StpUtil.getLoginIdAsLong());
-                            setModifyDate(new Date());
-                            setId(wfTextbookRecedeItem.getTextbookId());
-//                            setStock((ObjectUtil.isNull(textbook.getStock())?0:textbook.getStock()) - (ObjectUtil.isNull(wfTextbookRecedeItem.getNumber())?0:wfTextbookRecedeItem.getNumber()) );
-                        }});
-                        //增加出库记录
-                        textbookIssueRecordMapper.insert(new TextbookIssueRecord(){{
-                            setCreateUserId(StpUtil.getLoginIdAsLong());
-                            setCreateDate(new Date());
-                            setTextbookId(wfTextbookRecedeItem.getTextbookId());
-                            setDataId(wfTextbookRecede.getId());
-                            setDataItemId(wfTextbookRecedeItem.getId());
-                            setIssueMode(IssueModeEnum.ImRecede.getCode());
-                            setIssueNumber(ObjectUtil.isNull(wfTextbookRecedeItem.getNumber())?0:wfTextbookRecedeItem.getNumber());
-                            QueryWrapper<TextbookIssueRecord> queryWrapperSortcode = new QueryWrapper<>();
-                            queryWrapperSortcode.select("IFNULL(MAX(sort_code),0) as sortCode");
-                            TextbookIssueRecord t = textbookIssueRecordMapper.selectOne(queryWrapperSortcode);
-                            setSortCode(t.getSortCode()+1);
-                        }});
-                    }
+                    textbookIssueRecord = textbookIssueRecordMap.get(wfTextbookRecedeItem.getTextbookIssueRecordId());
+
+
+//                    //退书类型是到教务处
+//                    if(ObjectUtil.isNotNull(textbook) && wfTextbookRecede.getRecedeType().equals(RecedeTypeEnum.RecedeDeansOffice.getCode())){
+//                        //修改库存
+//                        textbookTextbookMapper.updateById(new Textbook(){{
+//                            setModifyUserId(StpUtil.getLoginIdAsLong());
+//                            setModifyDate(new Date());
+//                            setId(wfTextbookRecedeItem.getTextbookId());
+////                            setStock((ObjectUtil.isNull(textbook.getStock())?0:textbook.getStock()) + (ObjectUtil.isNull(wfTextbookRecedeItem.getNumber())?0:wfTextbookRecedeItem.getNumber()));
+//                        }});
+//                        //增加入库记录
+//                        textbookWarehouseRecordMapper.insert(new TextbookWarehouseRecord(){{
+//                            setCreateUserId(StpUtil.getLoginIdAsLong());
+//                            setCreateDate(new Date());
+//                            setTextbookId(wfTextbookRecedeItem.getTextbookId());
+//                            setDataId(wfTextbookRecede.getId());
+//                            setDataItemId(wfTextbookRecedeItem.getId());
+//                            setWarehouseMode(WarehouseModeEnum.WmRecede.getCode());
+//                            setWarehouseNumber(ObjectUtil.isNull(wfTextbookRecedeItem.getNumber())?0:wfTextbookRecedeItem.getNumber());
+//                            if(wfTextbookRecede.getClassId() != null && wfTextbookRecede.getClassId() > 0){
+//                                BaseClass c = baseClassMapper.selectById(wfTextbookRecede.getClassId());
+//                                setSource(c.getName());
+//                            }
+//                            QueryWrapper<TextbookWarehouseRecord> queryWrapperSortcode = new QueryWrapper<>();
+//                            queryWrapperSortcode.select("IFNULL(MAX(sort_code),0) as sortCode");
+//                            TextbookWarehouseRecord t = textbookWarehouseRecordMapper.selectOne(queryWrapperSortcode);
+//                            setSortCode(t.getSortCode()+1);
+//                        }});
+//                    }
+//
+//                    //退书类型是到书店
+//                    if(ObjectUtil.isNotNull(textbook) && wfTextbookRecede.getRecedeType().equals(RecedeTypeEnum.RecedeBookstore.getCode())){
+//                        //修改库存
+//                        textbookTextbookMapper.updateById(new Textbook(){{
+//                            setModifyUserId(StpUtil.getLoginIdAsLong());
+//                            setModifyDate(new Date());
+//                            setId(wfTextbookRecedeItem.getTextbookId());
+////                            setStock((ObjectUtil.isNull(textbook.getStock())?0:textbook.getStock()) - (ObjectUtil.isNull(wfTextbookRecedeItem.getNumber())?0:wfTextbookRecedeItem.getNumber()) );
+//                        }});
+//                        //增加出库记录
+//                        textbookIssueRecordMapper.insert(new TextbookIssueRecord(){{
+//                            setCreateUserId(StpUtil.getLoginIdAsLong());
+//                            setCreateDate(new Date());
+//                            setTextbookId(wfTextbookRecedeItem.getTextbookId());
+//                            setDataId(wfTextbookRecede.getId());
+//                            setDataItemId(wfTextbookRecedeItem.getId());
+//                            setIssueMode(IssueModeEnum.ImRecede.getCode());
+//                            setIssueNumber(ObjectUtil.isNull(wfTextbookRecedeItem.getNumber())?0:wfTextbookRecedeItem.getNumber());
+//                            QueryWrapper<TextbookIssueRecord> queryWrapperSortcode = new QueryWrapper<>();
+//                            queryWrapperSortcode.select("IFNULL(MAX(sort_code),0) as sortCode");
+//                            TextbookIssueRecord t = textbookIssueRecordMapper.selectOne(queryWrapperSortcode);
+//                            setSortCode(t.getSortCode()+1);
+//                        }});
+//                    }
                 }
             }
         }

+ 15 - 0
src/main/java/com/xjrsoft/module/textbook/vo/CanReturnTextbookListVo.java

@@ -1,8 +1,23 @@
 package com.xjrsoft.module.textbook.vo;
 
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 @Data
 public class CanReturnTextbookListVo {
 
+    @ApiModelProperty("出库主键编号")
+    private String id;
+
+    @ApiModelProperty("出库单号")
+    public String orderNumber;
+
+    @ApiModelProperty("教材主键id")
+    private String textbookId;
+
+    @ApiModelProperty("教材主键id")
+    private String textbookIdCn;
+
+    @ApiModelProperty("实际出库数量")
+    private Integer actualIssueNumber;
 }

+ 5 - 0
src/main/resources/sqlScript/20250120_sql.sql

@@ -181,3 +181,8 @@ alter table wf_textbook_claim
 
 alter table textbook_issue_record
     add issue_times int default 0 null comment '当前出库对应的申领项的发放次数' after issue_user_id;
+
+alter table wf_textbook_recede_item
+    add textbook_issue_record_id bigint null comment '出库主键id(textbook_issue_record)' after wf_textbook_recede_id;
+
+