瀏覽代碼

教材确认领取统计

大数据与最优化研究所 7 月之前
父節點
當前提交
737560f0cc

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

@@ -6,6 +6,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.Date;
 
 
@@ -90,6 +91,11 @@ public class TextbookStudentClaim implements Serializable {
      */
     @ApiModelProperty("教材管理编号")
     private Long textbookId;
+    /**
+     * 教材确认领取的价格
+     */
+    @ApiModelProperty("教材确认领取的价格")
+    private BigDecimal price;
     /**
      * 是否领取(1:已领取 0:未领取 2:领取后退还教务处了)
      */

+ 127 - 20
src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookStudentClaimServiceImpl.java

@@ -29,10 +29,7 @@ import com.xjrsoft.module.system.entity.DictionaryDetail;
 import com.xjrsoft.module.teacher.entity.XjrUser;
 import com.xjrsoft.module.teacher.mapper.XjrUserMapper;
 import com.xjrsoft.module.textbook.dto.*;
-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.TextbookMapper;
 import com.xjrsoft.module.textbook.mapper.TextbookStudentClaimMapper;
 import com.xjrsoft.module.textbook.mapper.WfTextbookClaimItemMapper;
@@ -41,6 +38,8 @@ import com.xjrsoft.module.textbook.service.ITextbookStudentClaimService;
 import com.xjrsoft.module.textbook.vo.*;
 import com.xjrsoft.module.workflow.entity.WorkflowFormRelation;
 import lombok.AllArgsConstructor;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.camunda.bpm.engine.history.HistoricProcessInstance;
@@ -226,7 +225,7 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
         MPJLambdaWrapper<BaseClassAdminCourse> courseMPJLambdaWrapper = new MPJLambdaWrapper<>();
         courseMPJLambdaWrapper
                 .disableSubLogicDel()
-                .selectAs(WfTextbookClaimItem::getTextbookId, HeadTeaLookClassBookCategoryDetailVo::getTextbookId)
+                .selectAs(BaseClassCourse::getTextbookId, HeadTeaLookClassBookCategoryDetailVo::getTextbookId)
                 .selectAs(Textbook::getBookName, HeadTeaLookClassBookCategoryDetailVo::getBookName)
                 .selectAs(Textbook::getPrice, HeadTeaLookClassBookCategoryDetailVo::getPrice)
                 .selectAs(Textbook::getTextbookType, HeadTeaLookClassBookCategoryDetailVo::getTextbookType)
@@ -236,24 +235,19 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
                         wrapper -> wrapper
                                 .selectAs(DictionaryDetail::getName, HeadTeaLookClassBookCategoryDetailVo::getTextbookTypeCn)
                 )
-                .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, WfTextbookClaim::getClaimType,
-                        wrapper -> wrapper
-                                .selectAs(DictionaryDetail::getName, HeadTeaLookClassBookCategoryDetailVo::getClaimTypeCn)
-                )
-                .eq(WfTextbookClaim::getBaseSemesterId, dto.getBaseSemesterId())
-                .eq(WfTextbookClaim::getClassId, result.getClassId())
+                .eq(BaseClassAdminCourse::getBaseSemesterId, dto.getBaseSemesterId())
+                .eq(BaseClassAdminCourse::getClassId, result.getClassId())
         ;
         List<HeadTeaLookClassBookCategoryDetailVo> courselList = baseClassAdminCourseMapper.selectJoinList(HeadTeaLookClassBookCategoryDetailVo.class, courseMPJLambdaWrapper);
 
-
-        // 学生查看自己的教材来源于两个方面,一个是班级申领教材,一个是个人申领的教材
+        // 学生查看自己待领取的教材来源于两个方面,一个是班级申领教材,一个是个人申领的教材
         // 班级申领教材
         MPJLambdaWrapper<WfTextbookClaimItem> classMPJLambdaWrapper = new MPJLambdaWrapper<>();
         classMPJLambdaWrapper
                 .disableSubLogicDel()
                 .selectAs(WfTextbookClaimItem::getTextbookId, HeadTeaLookClassBookCategoryDetailVo::getTextbookId)
                 .selectAs(Textbook::getBookName, HeadTeaLookClassBookCategoryDetailVo::getBookName)
-                .selectAs(Textbook::getPrice, HeadTeaLookClassBookCategoryDetailVo::getPrice)
+//                .selectAs(Textbook::getPrice, HeadTeaLookClassBookCategoryDetailVo::getPrice)
                 .selectAs(Textbook::getTextbookType, HeadTeaLookClassBookCategoryDetailVo::getTextbookType)
                 .selectAs(WfTextbookClaimItem::getCreateDate, HeadTeaLookClassBookCategoryDetailVo::getClaimTime)
                 .selectAs(WfTextbookClaim::getClaimType, HeadTeaLookClassBookCategoryDetailVo::getClaimType)
@@ -282,7 +276,7 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
                 .disableSubLogicDel()
                 .selectAs(WfTextbookClaimItem::getTextbookId, HeadTeaLookClassBookCategoryDetailVo::getTextbookId)
                 .selectAs(Textbook::getBookName, HeadTeaLookClassBookCategoryDetailVo::getBookName)
-                .selectAs(Textbook::getPrice, HeadTeaLookClassBookCategoryDetailVo::getPrice)
+//                .selectAs(Textbook::getPrice, HeadTeaLookClassBookCategoryDetailVo::getPrice)
                 .selectAs(Textbook::getTextbookType, HeadTeaLookClassBookCategoryDetailVo::getTextbookType)
                 .selectAs(WfTextbookClaimItem::getCreateDate, HeadTeaLookClassBookCategoryDetailVo::getClaimTime)
                 .selectAs(WfTextbookClaim::getClaimType, HeadTeaLookClassBookCategoryDetailVo::getClaimType)
@@ -305,7 +299,7 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
         ;
         List<HeadTeaLookClassBookCategoryDetailVo> personalList = wfTextbookClaimItemMapper.selectJoinList(HeadTeaLookClassBookCategoryDetailVo.class, personalMPJLambdaWrapper);
 
-        // 合并两个列表,如果有个人领记录,应该保留个人的,移除班级的
+        // 合并两个列表,如果有个人领记录,应该保留个人的,移除班级的
         List<HeadTeaLookClassBookCategoryDetailVo> mergedDistinctList = new ArrayList<>(Stream.concat(classList.stream(), personalList.stream())
                 .collect(Collectors.toMap(
                         // 使用唯一标识作为 key
@@ -316,6 +310,11 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
                 ))
                 .values()); // 转换回 List
 
+        // 如果申领教材列表为空,应该使用基础数据维护的
+        if(CollectionUtils.isEmpty(mergedDistinctList)){
+            mergedDistinctList = courselList;
+        }
+
         // 获取当前学生当前学期所有已经领取的数据
         LambdaQueryWrapper<TextbookStudentClaim> textbookStudentClaimLambdaQueryWrapper = new LambdaQueryWrapper<>();
         textbookStudentClaimLambdaQueryWrapper
@@ -356,8 +355,10 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
                         if (ObjectUtils.isNotEmpty(textbookStudentClaim)) {
                             vo.setTextbookStudentClaimId(textbookStudentClaim.getId());
                             vo.setIsClaim(textbookStudentClaim.getIsClaim());
+                            vo.setPrice(textbookStudentClaim.getPrice());
                         } else {
                             vo.setIsClaim(0);
+                            vo.setPrice(BigDecimal.ZERO);
                         }
                         if (ObjectUtils.isEmpty(vo.getPrice())) {
                             vo.setPrice(BigDecimal.ZERO);
@@ -512,9 +513,7 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
                     .collect(Collectors.toList()); // 转换为 List
 
             for(Long textbookId : mergedKeyList){
-                StudentSemesterTextbookVo studentClaimVo = studentClaimSemesterMap.get(textbookId);
-                // 当教材没有确认领取记录的时候当前学期状态应该是待领取
-                if(ObjectUtils.isEmpty(studentClaimVo)){
+                if(ObjectUtils.isEmpty(studentClaimSemesterMap) || ObjectUtils.isEmpty(studentClaimSemesterMap.get(textbookId))){
                     status = 1;
                     break;
                 }
@@ -820,6 +819,22 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
         Map<String, TextbookStudentClaim> byUserIdAndTextbookId = textbookStudentClaimList.stream()
                 .collect(Collectors.toMap(t -> "" + t.getStudentUserId() + t.getTextbookId(), t -> t, (t1, t2) -> t1));
 
+        // 处理确认领取教材的价格
+        // 根据学期,班级获取申领教材信息
+        MPJLambdaWrapper<WfTextbookClaim> wfTextbookClaimLambdaQueryWrapper = new MPJLambdaWrapper<>();
+        wfTextbookClaimLambdaQueryWrapper
+                .selectAs(WfTextbookClaimItem::getTextbookId, ClassClaimTextbookIssuePrice::getTextbookId)
+                .selectAs(TextbookWarehouseRecord::getSubtotal, ClassClaimTextbookIssuePrice::getPrice)
+                .innerJoin(WfTextbookClaimItem.class, WfTextbookClaimItem::getWfTextbookClaimId, WfTextbookClaim::getId)
+                .innerJoin(TextbookIssueRecord.class, TextbookIssueRecord::getDataItemId, WfTextbookClaimItem::getId)
+                .innerJoin(TextbookWarehouseRecord.class, TextbookWarehouseRecord::getId, WfTextbookClaimItem::getWfTextbookClaimId)
+                .eq(WfTextbookClaim::getBaseSemesterId, dto.getBaseSemesterId())
+                .eq(WfTextbookClaim::getClassId, dto.getClassId())
+        ;
+        List<ClassClaimTextbookIssuePrice> classClaimTextbookIssuePrices = wfTextbookClaimMapper.selectJoinList(ClassClaimTextbookIssuePrice.class, wfTextbookClaimLambdaQueryWrapper);
+
+        Map<Long, BigDecimal> textBookPriceMap = classClaimTextbookIssuePrices.stream()
+                .collect(Collectors.toMap(ClassClaimTextbookIssuePrice::getTextbookId, ClassClaimTextbookIssuePrice::getPrice, (p1, p2) -> p2));
 
         List<TextbookStudentClaim> insertList = new ArrayList<>();
         List<TextbookStudentClaim> updateList = new ArrayList<>();
@@ -830,6 +845,10 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
         Long loginUserId = StpUtil.getLoginIdAsLong();
         for (Long textbookId : dto.getTextbookIds()) {
             for (Long userId : dto.getUserIds()) {
+                BigDecimal price = BigDecimal.ZERO;
+                if(MapUtils.isNotEmpty(textBookPriceMap) && ObjectUtils.isNotEmpty(textBookPriceMap.get(textbookId))){
+                    price = textBookPriceMap.get(textbookId);
+                }
                 oldTextbookStudentClaim = byUserIdAndTextbookId.get("" + userId + textbookId);
                 if (ObjectUtils.isNotEmpty(oldTextbookStudentClaim)) {
                     updateTextbookStudentClaim = new TextbookStudentClaim();
@@ -837,6 +856,12 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
                     updateTextbookStudentClaim.setIsClaim(dto.getIsClaim());
                     updateTextbookStudentClaim.setModifyDate(nowDate);
                     updateTextbookStudentClaim.setModifyUserId(loginUserId);
+                    if(dto.getIsClaim() == 0){
+                        updateTextbookStudentClaim.setPrice(BigDecimal.ZERO);
+                    }
+                    if(dto.getIsClaim() == 1){
+                        updateTextbookStudentClaim.setPrice(price);
+                    }
                     updateList.add(updateTextbookStudentClaim);
                 } else {
                     insertTextbookStudentClaim = new TextbookStudentClaim();
@@ -847,6 +872,12 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
                     insertTextbookStudentClaim.setIsClaim(dto.getIsClaim());
                     insertTextbookStudentClaim.setCreateDate(nowDate);
                     insertTextbookStudentClaim.setCreateUserId(loginUserId);
+                    if(dto.getIsClaim() == 0){
+                        insertTextbookStudentClaim.setPrice(BigDecimal.ZERO);
+                    }
+                    if(dto.getIsClaim() == 1){
+                        insertTextbookStudentClaim.setPrice(price);
+                    }
                     insertList.add(insertTextbookStudentClaim);
                 }
             }
@@ -903,6 +934,22 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
         Map<String, TextbookStudentClaim> byUserIdAndTextbookId = textbookStudentClaimList.stream()
                 .collect(Collectors.toMap(t -> "" + t.getBaseSemesterId() + t.getClassId() + t.getStudentUserId() + t.getTextbookId(), t -> t, (t1, t2) -> t1));
 
+        // 根据学期,班级获取申领教材信息
+        MPJLambdaWrapper<WfTextbookClaim> wfTextbookClaimLambdaQueryWrapper = new MPJLambdaWrapper<>();
+        wfTextbookClaimLambdaQueryWrapper
+                .selectAs(WfTextbookClaimItem::getTextbookId, ClassClaimTextbookIssuePrice::getTextbookId)
+                .selectAs(TextbookWarehouseRecord::getSubtotal, ClassClaimTextbookIssuePrice::getPrice)
+                .innerJoin(WfTextbookClaimItem.class, WfTextbookClaimItem::getWfTextbookClaimId, WfTextbookClaim::getId)
+                .innerJoin(TextbookIssueRecord.class, TextbookIssueRecord::getDataItemId, WfTextbookClaimItem::getId)
+                .innerJoin(TextbookWarehouseRecord.class, TextbookWarehouseRecord::getId, WfTextbookClaimItem::getWfTextbookClaimId)
+                .in(WfTextbookClaim::getBaseSemesterId, baseSemesterIds)
+                .in(WfTextbookClaim::getClassId, classIds)
+        ;
+
+        List<ClassClaimTextbookIssuePrice> classClaimTextbookIssuePrices = wfTextbookClaimMapper.selectJoinList(ClassClaimTextbookIssuePrice.class, wfTextbookClaimLambdaQueryWrapper);
+
+        Map<Long, BigDecimal> textBookPriceMap = classClaimTextbookIssuePrices.stream()
+                .collect(Collectors.toMap(ClassClaimTextbookIssuePrice::getTextbookId, ClassClaimTextbookIssuePrice::getPrice, (p1, p2) -> p2));
 
         List<TextbookStudentClaim> insertList = new ArrayList<>();
         List<TextbookStudentClaim> updateList = new ArrayList<>();
@@ -912,12 +959,22 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
         Date nowDate = new Date();
         Long loginUserId = StpUtil.getLoginIdAsLong();
         for (TeacherConfirmDto dto : dtos) {
+            BigDecimal price = BigDecimal.ZERO;
+            if(MapUtils.isNotEmpty(textBookPriceMap) && ObjectUtils.isNotEmpty(textBookPriceMap.get(dto.getTextbookId()))){
+                price = textBookPriceMap.get(dto.getTextbookId());
+            }
             if (ObjectUtils.isNotEmpty(dto.getTextbookStudentClaimId()) && dto.getTextbookStudentClaimId() != 0) {
                 updateTextbookStudentClaim = new TextbookStudentClaim();
                 updateTextbookStudentClaim.setId(dto.getTextbookStudentClaimId());
                 updateTextbookStudentClaim.setIsClaim(dto.getIsClaim());
                 updateTextbookStudentClaim.setModifyUserId(loginUserId);
                 updateTextbookStudentClaim.setModifyDate(nowDate);
+                if(dto.getIsClaim() == 0){
+                    updateTextbookStudentClaim.setPrice(BigDecimal.ZERO);
+                }
+                if(dto.getIsClaim() == 1){
+                    updateTextbookStudentClaim.setPrice(price);
+                }
                 updateList.add(updateTextbookStudentClaim);
             } else {
                 oldTextbookStudentClaim = byUserIdAndTextbookId.get("" + dto.getBaseSemesterId() + dto.getClassId() + dto.getStudentUserId() + dto.getTextbookId());
@@ -927,6 +984,12 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
                     updateTextbookStudentClaim.setIsClaim(dto.getIsClaim());
                     updateTextbookStudentClaim.setModifyDate(nowDate);
                     updateTextbookStudentClaim.setModifyUserId(loginUserId);
+                    if(dto.getIsClaim() == 0){
+                        updateTextbookStudentClaim.setPrice(BigDecimal.ZERO);
+                    }
+                    if(dto.getIsClaim() == 1){
+                        updateTextbookStudentClaim.setPrice(price);
+                    }
                     updateList.add(updateTextbookStudentClaim);
                 } else {
                     insertTextbookStudentClaim = new TextbookStudentClaim();
@@ -937,6 +1000,12 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
                     insertTextbookStudentClaim.setIsClaim(dto.getIsClaim());
                     insertTextbookStudentClaim.setCreateDate(nowDate);
                     insertTextbookStudentClaim.setCreateUserId(loginUserId);
+                    if(dto.getIsClaim() == 0){
+                        insertTextbookStudentClaim.setPrice(BigDecimal.ZERO);
+                    }
+                    if(dto.getIsClaim() == 1){
+                        insertTextbookStudentClaim.setPrice(price);
+                    }
                     insertList.add(insertTextbookStudentClaim);
                 }
             }
@@ -994,6 +1063,22 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
         Map<String, TextbookStudentClaim> byUserIdAndTextbookId = textbookStudentClaimList.stream()
                 .collect(Collectors.toMap(t -> "" + t.getStudentUserId() + t.getTextbookId(), t -> t, (t1, t2) -> t1));
 
+        // 根据学期,班级获取申领教材信息
+        MPJLambdaWrapper<WfTextbookClaim> wfTextbookClaimLambdaQueryWrapper = new MPJLambdaWrapper<>();
+        wfTextbookClaimLambdaQueryWrapper
+                .selectAs(WfTextbookClaimItem::getTextbookId, ClassClaimTextbookIssuePrice::getTextbookId)
+                .selectAs(TextbookWarehouseRecord::getSubtotal, ClassClaimTextbookIssuePrice::getPrice)
+                .innerJoin(WfTextbookClaimItem.class, WfTextbookClaimItem::getWfTextbookClaimId, WfTextbookClaim::getId)
+                .innerJoin(TextbookIssueRecord.class, TextbookIssueRecord::getDataItemId, WfTextbookClaimItem::getId)
+                .innerJoin(TextbookWarehouseRecord.class, TextbookWarehouseRecord::getId, WfTextbookClaimItem::getWfTextbookClaimId)
+                .eq(WfTextbookClaim::getBaseSemesterId, dto.getBaseSemesterId())
+                .eq(WfTextbookClaim::getClassId, baseStudentSchoolRoll.getClassId())
+        ;
+        List<ClassClaimTextbookIssuePrice> classClaimTextbookIssuePrices = wfTextbookClaimMapper.selectJoinList(ClassClaimTextbookIssuePrice.class, wfTextbookClaimLambdaQueryWrapper);
+
+        Map<Long, BigDecimal> textBookPriceMap = classClaimTextbookIssuePrices.stream()
+                .collect(Collectors.toMap(ClassClaimTextbookIssuePrice::getTextbookId, ClassClaimTextbookIssuePrice::getPrice, (p1, p2) -> p2));
+
         List<TextbookStudentClaim> insertList = new ArrayList<>();
         List<TextbookStudentClaim> updateList = new ArrayList<>();
         TextbookStudentClaim oldTextbookStudentClaim;
@@ -1002,12 +1087,22 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
         Date nowDate = new Date();
         Long loginUserId = StpUtil.getLoginIdAsLong();
         for (StudentConfirmDetailDto studentConfirmDetailDto : dto.getStudentConfirmDetail()) {
+            BigDecimal price = BigDecimal.ZERO;
+            if(MapUtils.isNotEmpty(textBookPriceMap) && ObjectUtils.isNotEmpty(textBookPriceMap.get(studentConfirmDetailDto.getTextbookId()))){
+                price = textBookPriceMap.get(studentConfirmDetailDto.getTextbookId());
+            }
             if (ObjectUtils.isNotEmpty(studentConfirmDetailDto.getTextbookStudentClaimId()) && studentConfirmDetailDto.getTextbookStudentClaimId() != 0) {
                 updateTextbookStudentClaim = new TextbookStudentClaim();
                 updateTextbookStudentClaim.setId(studentConfirmDetailDto.getTextbookStudentClaimId());
                 updateTextbookStudentClaim.setIsClaim(dto.getIsClaim());
                 updateTextbookStudentClaim.setModifyUserId(loginUserId);
                 updateTextbookStudentClaim.setModifyDate(nowDate);
+                if(dto.getIsClaim() == 0){
+                    updateTextbookStudentClaim.setPrice(BigDecimal.ZERO);
+                }
+                if(dto.getIsClaim() == 1){
+                    updateTextbookStudentClaim.setPrice(price);
+                }
                 updateList.add(updateTextbookStudentClaim);
             } else {
                 oldTextbookStudentClaim = byUserIdAndTextbookId.get("" + baseStudentSchoolRoll.getUserId() + studentConfirmDetailDto.getTextbookId());
@@ -1017,6 +1112,12 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
                     updateTextbookStudentClaim.setIsClaim(dto.getIsClaim());
                     updateTextbookStudentClaim.setModifyDate(nowDate);
                     updateTextbookStudentClaim.setModifyUserId(loginUserId);
+                    if(dto.getIsClaim() == 0){
+                        updateTextbookStudentClaim.setPrice(BigDecimal.ZERO);
+                    }
+                    if(dto.getIsClaim() == 1){
+                        updateTextbookStudentClaim.setPrice(price);
+                    }
                     updateList.add(updateTextbookStudentClaim);
                 } else {
                     insertTextbookStudentClaim = new TextbookStudentClaim();
@@ -1027,6 +1128,12 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
                     insertTextbookStudentClaim.setIsClaim(dto.getIsClaim());
                     insertTextbookStudentClaim.setCreateDate(nowDate);
                     insertTextbookStudentClaim.setCreateUserId(loginUserId);
+                    if(dto.getIsClaim() == 0){
+                        insertTextbookStudentClaim.setPrice(BigDecimal.ZERO);
+                    }
+                    if(dto.getIsClaim() == 1){
+                        insertTextbookStudentClaim.setPrice(price);
+                    }
                     insertList.add(insertTextbookStudentClaim);
                 }
             }
@@ -1044,7 +1151,7 @@ public class TextbookStudentClaimServiceImpl extends MPJBaseServiceImpl<Textbook
             }
         }
 
-        return null;
+        return true;
     }
 
     @Override

+ 58 - 1
src/main/java/com/xjrsoft/module/textbook/service/impl/WfTextbookClaimServiceImpl.java

@@ -31,6 +31,7 @@ import com.xjrsoft.module.textbook.vo.*;
 import com.xjrsoft.module.workflow.entity.WorkflowFormRelation;
 import com.xjrsoft.module.workflow.mapper.WorkflowFormRelationMapper;
 import lombok.AllArgsConstructor;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.camunda.bpm.engine.history.HistoricProcessInstance;
@@ -67,6 +68,7 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
     private final WorkflowFormRelationMapper workflowFormRelationMapper;
 
     private final TextbookWarehouseRecordMapper textbookWarehouseRecordMapper;
+    private final TextbookStudentClaimMapper textbookStudentClaimMapper;
 
     @Override
     public IPage<DistributePageVo> distributePage(DistributePageDto dto) {
@@ -347,6 +349,17 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
         Map<Long, WfTextbookClaimItem> wfTextbookClaimItemMap = wfTextbookClaimItemList.stream()
                 .collect(Collectors.toMap(WfTextbookClaimItem::getId, w -> w, (w1, w2) -> w1));
 
+        // 根据学期,班级获取学生确认领取记录
+        LambdaQueryWrapper<TextbookStudentClaim> textbookStudentClaimLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        textbookStudentClaimLambdaQueryWrapper
+                .eq(TextbookStudentClaim::getBaseSemesterId, wfTextbookClaim.getBaseSemesterId())
+                .eq(TextbookStudentClaim::getClassId, wfTextbookClaim.getClassId())
+        ;
+        List<TextbookStudentClaim> textbookStudentClaimList = textbookStudentClaimMapper.selectList(textbookStudentClaimLambdaQueryWrapper);
+
+        Map<String, TextbookStudentClaim> byUserIdAndTextbookId = textbookStudentClaimList.stream()
+                .collect(Collectors.toMap(t -> "" + t.getStudentUserId() + t.getTextbookId(), t -> t, (t1, t2) -> t1));
+
         // 处理出库单号
         StringBuilder sb = new StringBuilder();
         sb.append("CK");
@@ -357,8 +370,15 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
         int oldOrderInteger = 0;
         int oldOrderLastInteger = 0;
 
-        //操作每一个申领项
+        // 操作每一个申领项
         WfTextbookClaimItem updateWfTextbookClaimItem;
+        // 学生确认处理
+        List<TextbookStudentClaim> insertList = new ArrayList<>();
+        List<TextbookStudentClaim> updateList = new ArrayList<>();
+        TextbookStudentClaim oldTextbookStudentClaim;
+        TextbookStudentClaim insertTextbookStudentClaim;
+        TextbookStudentClaim updateTextbookStudentClaim;
+        Long loginUserId = StpUtil.getLoginIdAsLong();
         for (ConfirmDistributeDto.TextbookClaimItem textbookClaimItem : dto.getTextbookClaimItemList()) {
 //            WfTextbookClaimItem wfTextbookClaimItem = wfTextbookClaimWfTextbookClaimItemMapper.selectById(textbookClaimItem.getTextbookClaimItemId());
             WfTextbookClaimItem wfTextbookClaimItem = wfTextbookClaimItemMap.get(textbookClaimItem.getTextbookClaimItemId());
@@ -466,6 +486,31 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
                 textbookIssueRecord.setIssueTimes(issueTimes);
 
                 textbookIssueRecordMapper.insert(textbookIssueRecord);
+
+                // 如果申领项是个人申领,发放的时候应该直接帮助学生确认领取
+                if(ClaimTypeEnum.ClaimStudent.getCode().equals(wfTextbookClaim.getClaimType())){
+                    oldTextbookStudentClaim = byUserIdAndTextbookId.get("" + wfTextbookClaim.getApplicantUserId() + wfTextbookClaimItem.getTextbookId());
+                    if (ObjectUtils.isNotEmpty(oldTextbookStudentClaim)) {
+                        updateTextbookStudentClaim = new TextbookStudentClaim();
+                        updateTextbookStudentClaim.setId(oldTextbookStudentClaim.getId());
+                        updateTextbookStudentClaim.setIsClaim(1);
+                        updateTextbookStudentClaim.setModifyDate(nowDate);
+                        updateTextbookStudentClaim.setModifyUserId(loginUserId);
+                        updateTextbookStudentClaim.setPrice(textbookWarehouseRecord.getSubtotal());
+                        updateList.add(updateTextbookStudentClaim);
+                    } else {
+                        insertTextbookStudentClaim = new TextbookStudentClaim();
+                        insertTextbookStudentClaim.setBaseSemesterId(wfTextbookClaim.getBaseSemesterId());
+                        insertTextbookStudentClaim.setClassId(wfTextbookClaim.getClassId());
+                        insertTextbookStudentClaim.setStudentUserId(wfTextbookClaim.getApplicantUserId());
+                        insertTextbookStudentClaim.setTextbookId(wfTextbookClaimItem.getTextbookId());
+                        insertTextbookStudentClaim.setIsClaim(1);
+                        insertTextbookStudentClaim.setCreateDate(nowDate);
+                        insertTextbookStudentClaim.setCreateUserId(loginUserId);
+                        insertTextbookStudentClaim.setPrice(textbookWarehouseRecord.getSubtotal());
+                        insertList.add(insertTextbookStudentClaim);
+                    }
+                }
             }
 
             // 修改征订项发放数量
@@ -478,6 +523,18 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
             wfTextbookClaimWfTextbookClaimItemMapper.updateById(updateWfTextbookClaimItem);
         }
 
+        if (CollectionUtils.isNotEmpty(insertList)) {
+            for (TextbookStudentClaim insert : insertList) {
+                textbookStudentClaimMapper.insert(insert);
+            }
+        }
+
+        if (CollectionUtils.isNotEmpty(updateList)) {
+            for (TextbookStudentClaim update : updateList) {
+                textbookStudentClaimMapper.updateById(update);
+            }
+        }
+
         // 查询当前申领所有子项是否已经完成, 发放数量大于申领数量
         MPJLambdaWrapper<WfTextbookClaimItem> wfTextbookClaimItemMPJLambdaWrapper = new MPJLambdaWrapper<>();
         wfTextbookClaimItemMPJLambdaWrapper

+ 22 - 0
src/main/java/com/xjrsoft/module/textbook/vo/ClassClaimTextbookIssuePrice.java

@@ -0,0 +1,22 @@
+package com.xjrsoft.module.textbook.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @title: 班级申领教材发放价格
+ * @Author szs
+ * @Date: 2023-12-26
+ * @Version 1.0
+ */
+@Data
+public class ClassClaimTextbookIssuePrice {
+
+    @ApiModelProperty("教材管理编号")
+    private Long textbookId;
+
+    @ApiModelProperty("教材发放的入库的价格")
+    private BigDecimal price;
+}

+ 38 - 0
src/main/resources/sqlScript/20250414_sql.sql

@@ -0,0 +1,38 @@
+alter table wf_meeting_apply
+    modify meeting_room_id varchar (32) null comment '会议室管理主键id(meeting_room)';
+
+-- ---------------------------------------------------------------
+-- 教职工职称信息
+-- ---------------------------------------------------------------
+drop table if exists `professional_title`;
+create table `professional_title`
+(
+    id                            bigint       not null comment '主键编号'
+        primary key,
+    create_user_id                bigint null comment '创建人',
+    create_date                   datetime null comment '创建时间',
+    modify_user_id                bigint null comment '修改人',
+    modify_date                   datetime null comment '修改时间',
+    delete_mark                   int          not null comment '删除标记',
+    enabled_mark                  int          not null comment '有效标志',
+
+    `user_id`                     bigint       not null comment '教职工主键id(xjr_user)',
+    `user_name`                   varchar(32)  default null comment '工号',
+    `dept_id`                     varchar(512) default null comment '部门主键id(xjr_dept)',
+    `name`                        varchar(256) not null comment '职称名称',
+    `professional_title_no`       varchar(256) not null comment '证书编号',
+    `get_date`                    date         default null comment '取得时间',
+    `subject_category`            varchar(256) default null comment '学科类别',
+    `be_honored_date`             date         default null comment '授予时间',
+    `issuance_date`               date         default null comment '发证时间',
+    `qualification_start_date`    date         default null comment '任职资格开始时间',
+    `qualification_end_date`      date         default null comment '任职资格结束时间',
+    `notice_date`                 date         default null comment '发文时间',
+    `professional_title_category` varchar(256) default null comment '职称类别',
+    `job_status`                 char(1)          default null comment '是否现任(0:否;1:是)',
+    `accord_file_id`              bigint       default null comment '依据附件id'
+) engine = innodb
+  default charset = utf8mb4 comment = '教职工职称信息';
+
+alter table textbook_student_claim
+    add price decimal(15, 6) default 0 null comment '教材确认领取的价格' after textbook_id;