Przeglądaj źródła

教材发放确认

大数据与最优化研究所 9 miesięcy temu
rodzic
commit
6486ec982d

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

@@ -152,7 +152,7 @@ public class TextbookSubscriptionController {
     }
 
     @GetMapping(value = "/item-list-confirm-distribute")
-    @ApiOperation(value="教材确认发放页面使用教材征订明细(不分页)")
+    @ApiOperation(value="教材确认发放页面使用教材征订明细(不分页)")//现在从入库记录中查找
     @SaCheckPermission("textbooksubscription:detail")
     public RT<List<SubscriptionItemListDistributeVo>> itemListConfirmDistribute(@Valid SubscriptionItemListDistributeDto dto){
         List<SubscriptionItemListDistributeVo> list = textbookSubscriptionService.itemListConfirmDistribute(dto);

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

@@ -104,9 +104,9 @@ public class WfTextbookClaimController {
     }
 
     @GetMapping(value = "/info-distribute")
-    @ApiOperation(value="教材发放页详情")
+    @ApiOperation(value = "教材发放页详情")
     @SaCheckPermission("wftextbookclaim:detail")
-    public RT<WfTextbookClaimVo> infoDistribute(@RequestParam Long id){
+    public RT<WfTextbookClaimVo> infoDistribute(@RequestParam Long id) {
         WfTextbookClaimVo wfTextbookClaimVo = wfTextbookClaimService.infoDistribute(id);
         if (wfTextbookClaimVo == null) {
             return RT.error("没有发放数据!");

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

@@ -53,7 +53,11 @@ public class ConfirmDistributeDto{
          */
         @ApiModelProperty("教材主键编号")
         private Long textbookId;
-
+        /**
+         * 教材主键编号
+         */
+        @ApiModelProperty("教材主键编号")
+        private String textbookIdCn;
         /**
          * 教材申领项主键编号
          */
@@ -61,12 +65,10 @@ public class ConfirmDistributeDto{
         private Long textbookClaimItemId;
 
         /**
-         * 教材征订项主键编号
+         * 入库记录主键编号
          */
-        @ContentStyle(dataFormat = 49)
-        @ExcelProperty("教材征订项主键编号")
-        @ApiModelProperty("教材征订项主键编号")
-        private List<TextbookSubscriptionItems> textbookSubscriptionItems;
+        @ApiModelProperty("入库记录主键编号")
+        private List<TextbookWarehouseRecords> textbookWarehouseRecords;
 
         /**
          * 发放数量
@@ -76,22 +78,20 @@ public class ConfirmDistributeDto{
     }
 
     @Data
-    public static class TextbookSubscriptionItems implements Serializable {
+    public static class TextbookWarehouseRecords implements Serializable {
 
         private static final long serialVersionUID = 1L;
 
         /**
-         * 教材征订项主键编号
+         * 入库记录主键编号
          */
-        @ContentStyle(dataFormat = 49)
-        @ExcelProperty("教材征订项主键编号")
-        @ApiModelProperty("教材征订项主键编号")
-        private String textbookSubscriptionItemId;
+        @ApiModelProperty("入库记录主键编号")
+        private Long textbookWarehouseRecordId;
 
         /**
          * 发放数量
          */
-        @ApiModelProperty("本次发放本书本征订记录中的数量")
+        @ApiModelProperty("本次发放本书本入库记录中的数量")
         private Integer confirmNumber;
     }
 }

+ 114 - 54
src/main/java/com/xjrsoft/module/textbook/service/impl/WfTextbookClaimServiceImpl.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.enums.ClaimTypeEnum;
+import com.xjrsoft.common.enums.DeleteMark;
 import com.xjrsoft.common.enums.IssueModeEnum;
 import com.xjrsoft.common.enums.RoleEnum;
 import com.xjrsoft.common.exception.MyException;
@@ -33,6 +34,9 @@ import org.camunda.bpm.engine.history.HistoricProcessInstance;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -62,6 +66,7 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
     private final ClaimItemSubscriptionItemMapper claimItemSubscriptionItemMapper;
 
     private final WorkflowFormRelationMapper workflowFormRelationMapper;
+    private final TextbookWarehouseRecordMapper textbookWarehouseRecordMapper;
 
     @Override
     public IPage<DistributePageVo> distributePageVo(DistributePageDto dto) {
@@ -87,6 +92,7 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
                 .eq(WfTextbookClaim::getBaseSemesterId, dto.getBaseSemesterId())
                 .eq(StringUtils.isNotEmpty(dto.getClaimType()), WfTextbookClaim::getClaimType, dto.getClaimType())
                 .eq(ObjectUtils.isNotEmpty(dto.getDistributeStatus()), WfTextbookClaim::getStatus, dto.getDistributeStatus())
+                .ne(ObjectUtils.isEmpty(dto.getDistributeStatus()), WfTextbookClaim::getStatus, 1)
                 .and(StringUtils.isNotEmpty(dto.getName()),
                         wrapper -> wrapper
                                 .like(XjrUser::getName, dto.getName())
@@ -266,83 +272,138 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean confirmDistribute(ConfirmDistributeDto dto) {
-        WfTextbookClaim wfTextbookClaim = this.getById(dto.getTextbookClaimId());
+        WfTextbookClaim wfTextbookClaim = this.getByIdDeep(dto.getTextbookClaimId());
+        List<WfTextbookClaimItem> wfTextbookClaimItemList = wfTextbookClaim.getWfTextbookClaimItemList();
 
-        if (ObjectUtils.isEmpty(wfTextbookClaim) || ObjectUtils.isEmpty(dto.getTextbookClaimItemList()) || dto.getTextbookClaimItemList().size() == 0) {
+        // 获取所有入库记录
+        List<TextbookWarehouseRecord> textbookWarehouseRecordList = textbookWarehouseRecordMapper.selectList(
+            Wrappers.lambdaQuery(TextbookWarehouseRecord.class)
+                    .eq(TextbookWarehouseRecord::getDeleteMark, DeleteMark.NODELETE.getCode())
+        );
+
+        Map<Long, TextbookWarehouseRecord> textbookWarehouseRecordMap = textbookWarehouseRecordList.stream()
+                .collect(Collectors.toMap(TextbookWarehouseRecord::getId, t -> t, (t1,t2) -> t1));
+
+        if (ObjectUtils.isEmpty(wfTextbookClaim)
+                || ObjectUtils.isEmpty(dto.getTextbookClaimItemList())
+                || dto.getTextbookClaimItemList().isEmpty()
+                || wfTextbookClaimItemList.isEmpty()
+        ) {
             throw new MyException("未找到申领数据");
         }
 
+        Map<Long, WfTextbookClaimItem> wfTextbookClaimItemMap = wfTextbookClaimItemList.stream()
+                .collect(Collectors.toMap(WfTextbookClaimItem::getId, w -> w, (w1, w2) -> w1));
+
+        // 处理出库单号
+        StringBuilder sb = new StringBuilder();
+        sb.append("CK");
+        LocalDateTime now = LocalDateTime.now();
+        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
+        String nowStr = now.format(dateTimeFormatter);
+        sb.append(nowStr);
+        int oldOrderInteger = 0;
+        int oldOrderLastInteger = 0;
+
+
         //操作每一个申领项
         for (ConfirmDistributeDto.TextbookClaimItem textbookClaimItem : dto.getTextbookClaimItemList()) {
-
-            WfTextbookClaimItem wfTextbookClaimItem = wfTextbookClaimWfTextbookClaimItemMapper.selectById(textbookClaimItem.getTextbookClaimItemId());
+//            WfTextbookClaimItem wfTextbookClaimItem = wfTextbookClaimWfTextbookClaimItemMapper.selectById(textbookClaimItem.getTextbookClaimItemId());
+            WfTextbookClaimItem wfTextbookClaimItem = wfTextbookClaimItemMap.get(textbookClaimItem.getTextbookClaimItemId());
 
             if (ObjectUtils.isEmpty(wfTextbookClaimItem)) {
                 throw new MyException("未找到申领项详细数据");
             }
 
-            Textbook textbook = textbookMapper.selectById(textbookClaimItem.getTextbookId());
-            if (ObjectUtils.isEmpty(textbook)) {
-                throw new MyException("未找到相关教材数据");
-            }
-
             //判断总发放数量是否超出该申请项的申请数量
-            Integer issueNumber = ObjectUtils.isEmpty(wfTextbookClaimItem.getIssueNumber()) ? 0 : wfTextbookClaimItem.getIssueNumber();//已发放
-            Integer applicantNumber = ObjectUtils.isEmpty(wfTextbookClaimItem.getApplicantNumber()) ? 0 : wfTextbookClaimItem.getApplicantNumber();//申领总数量
-            Integer confirmNumber = ObjectUtils.isEmpty(textbookClaimItem.getConfirmTotalNumber()) ? 0 : textbookClaimItem.getConfirmTotalNumber();//本次发放
+            int issueNumber = ObjectUtils.isEmpty(wfTextbookClaimItem.getIssueNumber()) ? 0 : wfTextbookClaimItem.getIssueNumber();//已发放
+            int applicantNumber = ObjectUtils.isEmpty(wfTextbookClaimItem.getApplicantNumber()) ? 0 : wfTextbookClaimItem.getApplicantNumber();//申领总数量
+            int confirmNumber = ObjectUtils.isEmpty(textbookClaimItem.getConfirmTotalNumber()) ? 0 : textbookClaimItem.getConfirmTotalNumber();//本次发放
             if (issueNumber + confirmNumber > applicantNumber) {
-                throw new MyException(textbook.getBookName() + "发放总数量超出申领数量");
+                throw new MyException(textbookClaimItem.getTextbookIdCn() + "发放总数量超出申领数量");
             }
 
-            for (ConfirmDistributeDto.TextbookSubscriptionItems textbookSubscriptionItems : textbookClaimItem.getTextbookSubscriptionItems()){
-                TextbookSubscriptionItem textbookSubscriptionItem = textbookSubscriptionItemMapper.selectById(textbookSubscriptionItems.getTextbookSubscriptionItemId());
-                if (ObjectUtils.isEmpty(textbookSubscriptionItem)) {
-                    throw new MyException("未找到征订项详细数据");
+            TextbookIssueRecord textbookIssueRecord;
+            for (ConfirmDistributeDto.TextbookWarehouseRecords textbookWarehouseRecords : textbookClaimItem.getTextbookWarehouseRecords()){
+                TextbookWarehouseRecord textbookWarehouseRecord = textbookWarehouseRecordMap.get(textbookWarehouseRecords.getTextbookWarehouseRecordId());
+                if (ObjectUtils.isEmpty(textbookWarehouseRecord)) {
+                    throw new MyException("未找到入库详细数据");
                 }
 
-                //更新教材征订中的的库存数量
-                textbookSubscriptionItemMapper.updateById(new TextbookSubscriptionItem() {{
+                //更新教材入库中的的库存数量
+                textbookWarehouseRecordMapper.updateById(new TextbookWarehouseRecord() {{
                     setModifyUserId(StpUtil.getLoginIdAsLong());
                     setModifyDate(new Date());
-                    setId(textbookSubscriptionItem.getId());
-                    setOutStockNum(ObjectUtils.isEmpty(textbookSubscriptionItem.getOutStockNum()) ? 0 : textbookSubscriptionItem.getOutStockNum()
+                    setId(textbookWarehouseRecord.getId());
+                    setIssuedNumber(ObjectUtils.isEmpty(textbookWarehouseRecord.getIssuedNumber()) ? 0 : textbookWarehouseRecord.getIssuedNumber()
                              + confirmNumber);
+                    setRemainNumber(ObjectUtils.isEmpty(textbookWarehouseRecord.getRemainNumber()) ? 0 : textbookWarehouseRecord.getRemainNumber()
+                            - confirmNumber
+                    );
                 }});
 
-                claimItemSubscriptionItemMapper.insert(new ClaimItemSubscriptionItem(){{
-                    setWfTextbookClaimItemId(wfTextbookClaimItem.getId());
-                    setTextbookSubscriptionItemId(textbookSubscriptionItem.getId());
-                    setIssueNumber(confirmNumber);
-                }});
-            }
-
-            //增加出库记录
-            textbookIssueRecordMapper.insert(new TextbookIssueRecord() {{
-                setCreateDate(new Date());
-                if (ObjectUtils.isNotEmpty(wfTextbookClaim.getClaimType()) && wfTextbookClaim.getClaimType().equals(ClaimTypeEnum.ClaimStudent.getCode())) {
-                    setIssueMode(IssueModeEnum.Imtudent.getCode());
+                oldOrderInteger += 1;
+                String newOrder = String.format("%03d", oldOrderInteger); // 补零并格式化为三位数
+                String oldPrex = sb + newOrder + "-";
+                //增加出库记录
+                textbookIssueRecord = new TextbookIssueRecord();
+                textbookIssueRecord.setBaseSemesterId(wfTextbookClaim.getBaseSemesterId());
+
+                // 处理出库单号
+                // 根据当前申领项主键id和入库主键id查找时候已经有了出库记录
+                LambdaQueryWrapper<TextbookIssueRecord> maxOrderNumberLambdaQueryWrapper = new LambdaQueryWrapper<>();
+                maxOrderNumberLambdaQueryWrapper
+                        .eq(TextbookIssueRecord::getDataItemId, wfTextbookClaimItem.getId())
+                        .eq(TextbookIssueRecord::getTextbookWarehouseRecordId, textbookWarehouseRecord.getId())
+                        .eq(TextbookIssueRecord::getDeleteMark, DeleteMark.NODELETE.getCode())
+                        .orderByDesc(TextbookIssueRecord::getOrderNumber)
+                        .last("limit 1")
+                ;
+                TextbookIssueRecord maxOrderNumber = textbookIssueRecordMapper.selectOne(maxOrderNumberLambdaQueryWrapper);
+                if(ObjectUtils.isNotEmpty(maxOrderNumber)
+                        && ObjectUtils.isNotEmpty(maxOrderNumber.getOrderNumber())
+                ){
+                    String oldOrderNumber = maxOrderNumber.getOrderNumber();
+                    oldPrex = oldOrderNumber.substring(0, oldOrderNumber.length() - 3);
+                    oldOrderInteger -= 1;
+                    String oldOrder = oldOrderNumber.substring(oldOrderNumber.length() - 3);
+                    oldOrderLastInteger = Integer.parseInt(oldOrder);
                 }
-                if (ObjectUtils.isNotEmpty(wfTextbookClaim.getClaimType()) && wfTextbookClaim.getClaimType().equals(ClaimTypeEnum.ClaimTeacher.getCode())) {
-                    setIssueMode(IssueModeEnum.ImTeacher.getCode());
+                oldOrderLastInteger += 1;
+                String newLastOrder = String.format("%03d", oldOrderLastInteger); // 补零并格式化为三位数
+
+                textbookIssueRecord.setOrderNumber(oldPrex + newLastOrder);
+                if (ObjectUtils.isNotEmpty(wfTextbookClaim.getClaimType())
+                        && wfTextbookClaim.getClaimType().equals(ClaimTypeEnum.ClaimStudent.getCode())
+                        && wfTextbookClaim.getClaimType().equals(ClaimTypeEnum.ClaimClass.getCode())
+                ) {
+                    textbookIssueRecord.setIssueMode(IssueModeEnum.Imtudent.getCode());
                 }
-
-                setDataId(wfTextbookClaim.getId());
-                setDataItemId(wfTextbookClaimItem.getId());
-
-                setTextbookId(wfTextbookClaimItem.getTextbookId());
-                setIssueNumber(confirmNumber);
-
-//                setRemainingNumber(applicantNumber - issueNumber - confirmNumber);
-
-                setReceiveUserId(dto.getReceiveUserId());
-                setIssueUserId(StpUtil.getLoginIdAsLong());
-
-                setRemark(dto.getRemark());
-
+                if (ObjectUtils.isNotEmpty(wfTextbookClaim.getClaimType())
+                        && wfTextbookClaim.getClaimType().equals(ClaimTypeEnum.ClaimTeacher.getCode())
+                ) {
+                    textbookIssueRecord.setIssueMode(IssueModeEnum.ImTeacher.getCode());
+                }
+                textbookIssueRecord.setDataId(wfTextbookClaim.getId());
+                textbookIssueRecord.setDataItemId(wfTextbookClaimItem.getId());
+                textbookIssueRecord.setTextbookId(wfTextbookClaimItem.getTextbookId());
+                textbookIssueRecord.setIssueNumber(confirmNumber);
+                textbookIssueRecord.setRecedeNumber(0);
+                textbookIssueRecord.setActualIssueNumber(confirmNumber);
+                textbookIssueRecord.setActualTotalPrice(textbookWarehouseRecord.getSubtotal().multiply(BigDecimal.valueOf(confirmNumber)));
+                if(ObjectUtils.isNotEmpty(dto.getReceiveUserId())){
+                    textbookIssueRecord.setReceiveUserId(dto.getReceiveUserId());
+                }else {
+                    textbookIssueRecord.setReceiveUserId(StpUtil.getLoginIdAsLong());
+                }
+                textbookIssueRecord.setIssueUserId(StpUtil.getLoginIdAsLong());
+                textbookIssueRecord.setCreateDate(new Date());;
+                textbookIssueRecord.setRemark(dto.getRemark());
                 int sortCode = SortCodeUtil.getMaxSortCode(textbookIssueRecordMapper, TextbookIssueRecord.class, "sort_code");
+                textbookIssueRecord.setSortCode(sortCode + 1);
 
-                setSortCode(sortCode + 1);
-            }});
+                textbookIssueRecordMapper.insert(textbookIssueRecord);
+            }
 
             //更新申领项中的已经发放数量
             wfTextbookClaimWfTextbookClaimItemMapper.updateById(new WfTextbookClaimItem() {{
@@ -405,16 +466,15 @@ public class WfTextbookClaimServiceImpl extends MPJBaseServiceImpl<WfTextbookCla
 
             List<String> roleList = StpUtil.getRoleList();
 
-
             //申领人自己可以领取
             textbookClaimUserList.add(new TextbookClaimUser() {{
                 setCreateDate(new Date());
                 setWfTextbookClaimId(wfTextbookClaim.getId());
                 setUserId(wfTextbookClaim.getApplicantUserId());
-                if(roleList.contains(RoleEnum.TEACHER.getCode())){
+                if(roleList.contains(RoleEnum.TEACHER.getCode().toString())){
                     setUserType(2);
                 }
-                if(roleList.contains(RoleEnum.STUDENT.getCode())){
+                if(roleList.contains(RoleEnum.STUDENT.getCode().toString())){
                     setUserType(1);
                 }
             }});

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

@@ -173,4 +173,7 @@ create table `textbook_warehouse_record_detail`
 alter table textbook_warehouse_record
     add base_semester_id bigint null comment '学期主键id' after sort_code;
 
+alter table wf_textbook_claim
+    add textbook_scope int null comment '选择教材范围(1:全部,2:本班)' after class_id;
+
 

+ 2 - 1
src/test/java/com/xjrsoft/module/textbook/service/impl/WfTextbookClaimServiceImplTest.java

@@ -18,6 +18,7 @@ class WfTextbookClaimServiceImplTest {
     private IWfTextbookClaimService wfTextbookClaimService;
     @Test
     void dataHandleAddClaimUserNode() {
-        wfTextbookClaimService.dataHandleAddClaimUserNode(1743210949226065920L);
+        wfTextbookClaimService.dataHandleAddClaimUserNode(1889234925486391296L);
     }
+
 }