Prechádzať zdrojové kódy

教材入库数量修改应该符合实际情况,判断各种可能出现的负值

大数据与最优化研究所 5 mesiacov pred
rodič
commit
89feefc233

+ 5 - 1
src/main/java/com/xjrsoft/module/textbook/dto/SubscriptionItemListDistributeDto.java

@@ -20,5 +20,9 @@ public class SubscriptionItemListDistributeDto {
      */
     @ApiModelProperty("教材管理编号")
     private Long textbookId;
-
+    /**
+     * 班级管理编号
+     */
+    @ApiModelProperty("班级管理编号")
+    private Long classId;
 }

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

@@ -352,7 +352,9 @@ public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<Textbook
                         wrapper -> wrapper
                                 .selectAs(DictionaryDetail::getName, SubscriptionItemListDistributeVo::getWarehouseModeCn)
                 )
+                .leftJoin(TextbookSubscriptionItemClass.class, TextbookSubscriptionItemClass::getTextbookSubscriptionItemId, TextbookWarehouseRecord::getDataItemId)
                 .eq(TextbookWarehouseRecord::getTextbookId, dto.getTextbookId())
+                .eq(ObjectUtils.isNotEmpty(dto.getClassId()), TextbookSubscriptionItemClass::getBaseClassId, dto.getClassId())
                 .gt(TextbookWarehouseRecord::getRemainNumber, 0)
                 .orderByAsc(TextbookWarehouseRecord::getCreateDate)
         ;
@@ -602,6 +604,10 @@ public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<Textbook
                 throw new MyException("第" + (i+1) + "本教材征订信息被修改,请刷新重试");
             }
 
+            if((old.getInStockNum() + dto.getInNum()) < 0){
+                throw new MyException("第" + (i+1) + "本教材已入库数量产生负数,请输入合理的入库数量");
+            }
+
             // 现在入库价格改动不影响征订项的价格相关属性
             updateItem = new TextbookSubscriptionItem();
             updateItem.setId(old.getId());
@@ -643,12 +649,26 @@ public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<Textbook
                 textbookWarehouseRecordMapper.insert(textbookWarehouseRecord);
             } else {
                 textbookWarehouseRecordId = oldTextbookWarehouseRecord.getId();
-                textbookWarehouseRecord = BeanUtil.toBean(oldTextbookWarehouseRecord, TextbookWarehouseRecord.class);
-                textbookWarehouseRecord.setWarehouseNumber(textbookWarehouseRecord.getWarehouseNumber() + dto.getInNum());
+                textbookWarehouseRecord = new TextbookWarehouseRecord();
+                textbookWarehouseRecord.setId(textbookWarehouseRecordId);
+
+                if(oldTextbookWarehouseRecord.getWarehouseNumber() + dto.getInNum() < 0){
+                    throw new MyException("第" + (i+1) + "本教材已入库数量产生负数,请输入合理的入库数量");
+                }
+                textbookWarehouseRecord.setWarehouseNumber(oldTextbookWarehouseRecord.getWarehouseNumber() + dto.getInNum());
                 textbookWarehouseRecord.setTotalPrice(textbookWarehouseRecord.getSubtotal().multiply(BigDecimal.valueOf(textbookWarehouseRecord.getWarehouseNumber())));
-                textbookWarehouseRecord.setActualWarehouseNumber(textbookWarehouseRecord.getActualWarehouseNumber() + dto.getInNum());
+
+                if(oldTextbookWarehouseRecord.getActualWarehouseNumber() + dto.getInNum() < 0){
+                    throw new MyException("第" + (i+1) + "本教材实际入库数量产生负数,请输入合理的入库数量");
+                }
+                textbookWarehouseRecord.setActualWarehouseNumber(oldTextbookWarehouseRecord.getActualWarehouseNumber() + dto.getInNum());
                 textbookWarehouseRecord.setActualTotalPrice(textbookWarehouseRecord.getSubtotal().multiply(BigDecimal.valueOf(textbookWarehouseRecord.getActualWarehouseNumber())));
-                textbookWarehouseRecord.setRemainNumber(textbookWarehouseRecord.getRemainNumber() + dto.getInNum());
+
+                if(oldTextbookWarehouseRecord.getRemainNumber() + dto.getInNum() < 0){
+                    throw new MyException("第" + (i+1) + "本教材剩余库存数量产生负数,请输入合理的入库数量");
+                }
+                textbookWarehouseRecord.setRemainNumber(oldTextbookWarehouseRecord.getRemainNumber() + dto.getInNum());
+
                 textbookWarehouseRecord.setModifyDate(new Date());
                 textbookWarehouseRecord.setModifyUserId(StpUtil.getLoginIdAsLong());
                 textbookWarehouseRecordMapper.updateById(textbookWarehouseRecord);
@@ -662,7 +682,6 @@ public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<Textbook
             textbookWarehouseRecordDetail.setCreateDate(new Date());
             textbookWarehouseRecordDetailMapper.insert(textbookWarehouseRecordDetail);
         }
-
         return true;
     }
 

+ 24 - 5
src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookWarehouseRecordServiceImpl.java

@@ -244,16 +244,35 @@ public class TextbookWarehouseRecordServiceImpl extends MPJBaseServiceImpl<Textb
 
         TextbookWarehouseRecord updateTextbookWarehouseRecord = new TextbookWarehouseRecord();
         updateTextbookWarehouseRecord.setId(textbookWarehouseRecord.getId());
-        updateTextbookWarehouseRecord.setActualWarehouseNumber(dto.getWarehouseNumber() - (textbookWarehouseRecord.getWarehouseNumber() - textbookWarehouseRecord.getActualWarehouseNumber()));
-        if(updateTextbookWarehouseRecord.getActualWarehouseNumber() < 0){
-            throw new MyException("该教材存在退书等操作,修改的入库数量不能少于已发放数量和退书等操作数量的总和。");
+
+        if(dto.getWarehouseNumber() - textbookWarehouseRecord.getIssuedNumber() < 0){
+            throw new MyException(String.format("当前教材已经出库[%s],请输入合理的入库数量",
+                            textbookWarehouseRecord.getIssuedNumber()
+                    ));
+        }
+
+        if(dto.getWarehouseNumber() < 0){
+            throw new MyException("入库数量不能为负,请输入合理的入库数量");
         }
         updateTextbookWarehouseRecord.setWarehouseNumber(dto.getWarehouseNumber());
+
+        if(textbookWarehouseRecord.getActualWarehouseNumber() - (textbookWarehouseRecord.getWarehouseNumber() - dto.getWarehouseNumber()) < 0){
+            throw new MyException("修改入库数量导致实际入库数量为负,请输入合理的入库数量");
+        }
+        updateTextbookWarehouseRecord.setActualWarehouseNumber(textbookWarehouseRecord.getActualWarehouseNumber() - (textbookWarehouseRecord.getWarehouseNumber() - dto.getWarehouseNumber()));
+
         updateTextbookWarehouseRecord.setPrice(ObjectUtils.isNotEmpty(dto.getPrice()) ? dto.getPrice() : BigDecimal.ZERO);
         updateTextbookWarehouseRecord.setDiscount(ObjectUtils.isNotEmpty(dto.getDiscount()) ? dto.getDiscount() : 10);
         updateTextbookWarehouseRecord.setSubtotal(updateTextbookWarehouseRecord.getPrice().multiply(BigDecimal.valueOf(dto.getDiscount() / 10)));
-        updateTextbookWarehouseRecord.setTotalPrice(updateTextbookWarehouseRecord.getSubtotal().multiply(BigDecimal.valueOf(textbookWarehouseRecord.getWarehouseNumber())));
-        updateTextbookWarehouseRecord.setActualTotalPrice(updateTextbookWarehouseRecord.getSubtotal().multiply(BigDecimal.valueOf(textbookWarehouseRecord.getActualWarehouseNumber())));
+
+        updateTextbookWarehouseRecord.setTotalPrice(updateTextbookWarehouseRecord.getSubtotal().multiply(BigDecimal.valueOf(updateTextbookWarehouseRecord.getWarehouseNumber())));
+        updateTextbookWarehouseRecord.setActualTotalPrice(updateTextbookWarehouseRecord.getSubtotal().multiply(BigDecimal.valueOf(updateTextbookWarehouseRecord.getActualWarehouseNumber())));
+
+        if(textbookWarehouseRecord.getRemainNumber() - (textbookWarehouseRecord.getWarehouseNumber() - dto.getWarehouseNumber()) < 0){
+            throw new MyException("修改入库数量导致剩余库存数量为负,请输入合理的入库数量");
+        }
+        updateTextbookWarehouseRecord.setRemainNumber(textbookWarehouseRecord.getRemainNumber() - (textbookWarehouseRecord.getWarehouseNumber() - dto.getWarehouseNumber()));
+
         updateTextbookWarehouseRecord.setModifyDate(new Date());
         textbookWarehouseRecordMapper.updateById(updateTextbookWarehouseRecord);
 

+ 11 - 4
src/main/java/com/xjrsoft/module/textbook/vo/TextbookDiscountAlterRecordListVo.java

@@ -66,16 +66,23 @@ public class TextbookDiscountAlterRecordListVo {
     /**
      * 旧的折扣
      */
-    @ContentStyle(dataFormat = 49)
-    @ExcelProperty("旧的折扣")
     @ApiModelProperty("旧的折扣")
     private Double oldDiscount;
     /**
      * 新的折扣
      */
-    @ContentStyle(dataFormat = 49)
-    @ExcelProperty("新的折扣")
     @ApiModelProperty("新的折扣")
     private Double newDiscount;
 
+    /**
+     * 旧的入库数量
+     */
+    @ApiModelProperty("旧的入库数量")
+    private Integer oldWarehouseNum;
+    /**
+     * 新的入库数量
+     */
+    @ApiModelProperty("新的入库数量")
+    private Integer newWarehouseNum;
+
 }