|
|
@@ -2,6 +2,7 @@ package com.xjrsoft.module.textbook.service.impl;
|
|
|
|
|
|
import cn.dev33.satoken.stp.StpUtil;
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
+import cn.hutool.core.util.IdUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
import com.alibaba.excel.EasyExcel;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
@@ -37,6 +38,8 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
import java.io.InputStream;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
|
import java.util.regex.Matcher;
|
|
|
@@ -65,6 +68,8 @@ public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<Textbook
|
|
|
|
|
|
private final TextbookSubscriptionItemHistoryMapper textbookSubscriptionItemHistoryMapper;
|
|
|
|
|
|
+ private final TextbookWarehouseRecordDetailMapper textbookWarehouseRecordDetailMapper;
|
|
|
+
|
|
|
@Override
|
|
|
public IPage<TextbookSubscriptionPageVo> pageRubAndHand(TextbookSubscriptionPageDto dto) {
|
|
|
MPJLambdaWrapper<TextbookSubscription> queryWrapper = new MPJLambdaWrapper<>();
|
|
|
@@ -78,8 +83,7 @@ public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<Textbook
|
|
|
.eq(StringUtils.isNotBlank(dto.getId()), TextbookSubscription::getId, dto.getId())
|
|
|
.orderByDesc(TextbookSubscription::getCreateDate)
|
|
|
;
|
|
|
- IPage<TextbookSubscriptionPageVo> page = this.selectJoinListPage(ConventPage.getPage(dto), TextbookSubscriptionPageVo.class, queryWrapper);
|
|
|
- return page;
|
|
|
+ return this.selectJoinListPage(ConventPage.getPage(dto), TextbookSubscriptionPageVo.class, queryWrapper);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -293,6 +297,35 @@ public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<Textbook
|
|
|
}
|
|
|
textbookSubscription.setSum(sum);
|
|
|
textbookSubscription.setCreateDate(new Date());
|
|
|
+
|
|
|
+ // 处理征订单号
|
|
|
+ StringBuilder sb = new StringBuilder();
|
|
|
+ sb.append("ZD");
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+ DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
|
|
|
+ String nowStr = now.format(dateTimeFormatter);
|
|
|
+ sb.append(nowStr);
|
|
|
+ // 根据当前征订编号前缀去数据库找是否已经存在了
|
|
|
+ LambdaQueryWrapper<TextbookSubscription> textbookSubscriptionLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ textbookSubscriptionLambdaQueryWrapper
|
|
|
+ .like(TextbookSubscription::getOrderNumber, sb.toString() + "%")
|
|
|
+ .eq(TextbookSubscription::getDeleteMark, DeleteMark.NODELETE.getCode())
|
|
|
+ .orderByDesc(TextbookSubscription::getOrderNumber)
|
|
|
+ .last("limit 1")
|
|
|
+ ;
|
|
|
+ TextbookSubscription maxOrderNumber = textbookSubscriptionTextbookSubscriptionMapper.selectOne(textbookSubscriptionLambdaQueryWrapper);
|
|
|
+ if(ObjectUtils.isNotEmpty(maxOrderNumber) && ObjectUtils.isNotEmpty(maxOrderNumber.getOrderNumber())){
|
|
|
+ String oldOrderNumber = maxOrderNumber.getOrderNumber();
|
|
|
+ String oldOrder = oldOrderNumber.substring(oldOrderNumber.length() - 3);
|
|
|
+ int oldOrderInteger = Integer.parseInt(oldOrder);
|
|
|
+ oldOrderInteger += 1;
|
|
|
+ String newOrder = String.format("%03d", oldOrderInteger); // 补零并格式化为三位数
|
|
|
+ sb.append(newOrder);
|
|
|
+ }else {
|
|
|
+ sb.append("001");
|
|
|
+ }
|
|
|
+ textbookSubscription.setOrderNumber(sb.toString());
|
|
|
+
|
|
|
textbookSubscriptionTextbookSubscriptionMapper.insert(textbookSubscription);
|
|
|
|
|
|
// // 处理征订和班级关联表
|
|
|
@@ -346,6 +379,12 @@ public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<Textbook
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+ TextbookSubscription textbookSubscription = this.getById(dtos.get(0).getTextbookSubscriptionId());
|
|
|
+
|
|
|
+ if (ObjectUtils.isEmpty(textbookSubscription)) {
|
|
|
+ throw new MyException("请选择需要入库的征订记录");
|
|
|
+ }
|
|
|
+
|
|
|
List<Long> textbookSubscriptionItemIds = new ArrayList<>();
|
|
|
for (TextbookInstockroomDto dto : dtos) {
|
|
|
if(ObjectUtils.isNotEmpty(dto.getTextbookSubscriptionItemId())){
|
|
|
@@ -367,11 +406,9 @@ public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<Textbook
|
|
|
.eq(TextbookSubscriptionItem::getDeleteMark, DeleteMark.NODELETE.getCode())
|
|
|
;
|
|
|
List<TextbookSubscriptionItem> textbookSubscriptionItemList = textbookSubscriptionTextbookSubscriptionItemMapper.selectJoinList(TextbookSubscriptionItem.class, queryWrapper);
|
|
|
-
|
|
|
if (textbookSubscriptionItemList.isEmpty()) {
|
|
|
- throw new MyException("证订信息已经修改,请刷新重试");
|
|
|
+ throw new MyException("证订项已经变更,请刷新重试");
|
|
|
}
|
|
|
-
|
|
|
Map<Long, TextbookSubscriptionItem> itemByIdMap = new HashMap<>();
|
|
|
for (TextbookSubscriptionItem el : textbookSubscriptionItemList) {
|
|
|
if(ObjectUtils.isNotEmpty(el.getId()) && !itemByIdMap.containsKey(el.getId())){
|
|
|
@@ -379,17 +416,60 @@ public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<Textbook
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // 获取当前征订已经产生的入库记录
|
|
|
+ LambdaQueryWrapper<TextbookWarehouseRecord> textbookWarehouseRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ textbookWarehouseRecordLambdaQueryWrapper
|
|
|
+ .in(TextbookWarehouseRecord::getDataId, textbookSubscription.getId())
|
|
|
+ .eq(TextbookWarehouseRecord::getDeleteMark, DeleteMark.NODELETE.getCode())
|
|
|
+ ;
|
|
|
+ List<TextbookWarehouseRecord> textbookWarehouseRecords = textbookWarehouseRecordMapper.selectList(textbookWarehouseRecordLambdaQueryWrapper);
|
|
|
+ Map<Long, TextbookWarehouseRecord> textbookWarehouseRecordByItemIdMap = new HashMap<>();
|
|
|
+ for (TextbookWarehouseRecord twr : textbookWarehouseRecords) {
|
|
|
+ if(ObjectUtils.isNotEmpty(twr.getDataItemId()) && !textbookWarehouseRecordByItemIdMap.containsKey(twr.getDataItemId())){
|
|
|
+ textbookWarehouseRecordByItemIdMap.put(twr.getDataItemId(), twr);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 处理入库单号
|
|
|
+ StringBuilder sb = new StringBuilder();
|
|
|
+ sb.append("RK");
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+ DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
|
|
|
+ String nowStr = now.format(dateTimeFormatter);
|
|
|
+ sb.append(nowStr);
|
|
|
+ // 根据当前征订编号前缀去数据库找是否已经存在了
|
|
|
+ LambdaQueryWrapper<TextbookWarehouseRecord> maxOrderNumberLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ maxOrderNumberLambdaQueryWrapper
|
|
|
+ .like(TextbookWarehouseRecord::getOrderNumber, sb.toString() + "%")
|
|
|
+ .eq(TextbookWarehouseRecord::getDeleteMark, DeleteMark.NODELETE.getCode())
|
|
|
+ .orderByDesc(TextbookWarehouseRecord::getOrderNumber)
|
|
|
+ .last("limit 1")
|
|
|
+ ;
|
|
|
+ TextbookWarehouseRecord maxOrderNumber = textbookWarehouseRecordMapper.selectOne(maxOrderNumberLambdaQueryWrapper);
|
|
|
+ int oldOrderInteger = 0;
|
|
|
+ if(ObjectUtils.isNotEmpty(maxOrderNumber) && ObjectUtils.isNotEmpty(maxOrderNumber.getOrderNumber())){
|
|
|
+ String oldOrderNumber = maxOrderNumber.getOrderNumber();
|
|
|
+ String oldOrder = oldOrderNumber.substring(oldOrderNumber.length() - 3);
|
|
|
+ oldOrderInteger = Integer.parseInt(oldOrder);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 处理入库细节
|
|
|
TextbookSubscriptionItem old = null;
|
|
|
+ TextbookSubscriptionItem updateItem;
|
|
|
+ TextbookWarehouseRecord textbookWarehouseRecord;
|
|
|
+ TextbookWarehouseRecord oldTextbookWarehouseRecord = null;
|
|
|
+ TextbookWarehouseRecordDetail textbookWarehouseRecordDetail;
|
|
|
for (TextbookInstockroomDto dto : dtos) {
|
|
|
if (ObjectUtils.isNotEmpty(dto.getTextbookSubscriptionItemId())) {
|
|
|
old = itemByIdMap.get(dto.getTextbookSubscriptionItemId());
|
|
|
+ oldTextbookWarehouseRecord = textbookWarehouseRecordByItemIdMap.get(dto.getTextbookSubscriptionItemId());
|
|
|
}
|
|
|
|
|
|
if (ObjectUtils.isEmpty(old)) {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- TextbookSubscriptionItem updateItem = new TextbookSubscriptionItem();
|
|
|
+ updateItem = new TextbookSubscriptionItem();
|
|
|
updateItem.setId(old.getId());
|
|
|
updateItem.setDiscount(dto.getDiscount());
|
|
|
updateItem.setPrice(old.getPrice().multiply(BigDecimal.valueOf(dto.getDiscount() / 10)));
|
|
|
@@ -398,20 +478,54 @@ public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<Textbook
|
|
|
updateItem.setModifyUserId(StpUtil.getLoginIdAsLong());
|
|
|
textbookSubscriptionTextbookSubscriptionItemMapper.updateById(updateItem);
|
|
|
|
|
|
- //新增入库记录
|
|
|
- TextbookWarehouseRecord textbookWarehouseRecord = new TextbookWarehouseRecord();
|
|
|
- textbookWarehouseRecord.setTextbookId(old.getTextbookId());
|
|
|
- textbookWarehouseRecord.setDataId(dto.getTextbookSubscriptionId());
|
|
|
- textbookWarehouseRecord.setDataItemId(dto.getTextbookSubscriptionItemId());
|
|
|
- textbookWarehouseRecord.setWarehouseNumber(dto.getInNum());
|
|
|
- textbookWarehouseRecord.setPrice(old.getPrice());
|
|
|
- textbookWarehouseRecord.setDiscount(dto.getDiscount());
|
|
|
- textbookWarehouseRecord.setSubtotal(old.getPrice().multiply(BigDecimal.valueOf(dto.getDiscount() / 10)));
|
|
|
- textbookWarehouseRecord.setTotalPrice(textbookWarehouseRecord.getSubtotal().multiply(BigDecimal.valueOf(dto.getInNum())));
|
|
|
- textbookWarehouseRecord.setWarehouseMode(WarehouseModeEnum.WmManual.getCode());
|
|
|
- updateItem.setCreateDate(new Date());
|
|
|
- updateItem.setCreateUserId(StpUtil.getLoginIdAsLong());
|
|
|
- textbookWarehouseRecordMapper.insert(textbookWarehouseRecord);
|
|
|
+ // 判断当前征订中的当前教材是否已经有了入库记录
|
|
|
+ // 当前征订项第一次入库
|
|
|
+ long textbookWarehouseRecordId = IdUtil.getSnowflakeNextId();
|
|
|
+ if (ObjectUtils.isEmpty(oldTextbookWarehouseRecord)) {
|
|
|
+ //新增入库记录
|
|
|
+ textbookWarehouseRecord = new TextbookWarehouseRecord();
|
|
|
+ textbookWarehouseRecord.setId(textbookWarehouseRecordId);
|
|
|
+ textbookWarehouseRecord.setTextbookId(old.getTextbookId());
|
|
|
+ textbookWarehouseRecord.setDataId(dto.getTextbookSubscriptionId());
|
|
|
+ textbookWarehouseRecord.setDataItemId(dto.getTextbookSubscriptionItemId());
|
|
|
+ textbookWarehouseRecord.setWarehouseNumber(dto.getInNum());
|
|
|
+ textbookWarehouseRecord.setPrice(old.getPrice());
|
|
|
+ textbookWarehouseRecord.setDiscount(dto.getDiscount());
|
|
|
+ textbookWarehouseRecord.setSubtotal(old.getPrice().multiply(BigDecimal.valueOf(dto.getDiscount() / 10)));
|
|
|
+ textbookWarehouseRecord.setTotalPrice(textbookWarehouseRecord.getSubtotal().multiply(BigDecimal.valueOf(dto.getInNum())));
|
|
|
+ oldOrderInteger += 1;
|
|
|
+ String newOrder = String.format("%03d", oldOrderInteger); // 补零并格式化为三位数
|
|
|
+ sb.append(newOrder);
|
|
|
+ textbookWarehouseRecord.setOrderNumber(sb.toString());
|
|
|
+ textbookWarehouseRecord.setReturnBookstoreNumber(0);
|
|
|
+ textbookWarehouseRecord.setActualWarehouseNumber(textbookWarehouseRecord.getWarehouseNumber() - textbookWarehouseRecord.getReturnBookstoreNumber());
|
|
|
+ textbookWarehouseRecord.setActualTotalPrice(textbookWarehouseRecord.getSubtotal().multiply(BigDecimal.valueOf(textbookWarehouseRecord.getActualWarehouseNumber())));
|
|
|
+ textbookWarehouseRecord.setIssuedNumber(0);
|
|
|
+ textbookWarehouseRecord.setRecedeNumber(0);
|
|
|
+ textbookWarehouseRecord.setRemainNumber(textbookWarehouseRecord.getActualWarehouseNumber());
|
|
|
+ textbookWarehouseRecord.setWarehouseMode(WarehouseModeEnum.WmSubscription.getCode());
|
|
|
+ updateItem.setCreateDate(new Date());
|
|
|
+ updateItem.setCreateUserId(StpUtil.getLoginIdAsLong());
|
|
|
+ textbookWarehouseRecordMapper.insert(textbookWarehouseRecord);
|
|
|
+ }else {
|
|
|
+ textbookWarehouseRecordId = oldTextbookWarehouseRecord.getId();
|
|
|
+ textbookWarehouseRecord = BeanUtil.toBean(oldTextbookWarehouseRecord, TextbookWarehouseRecord.class);
|
|
|
+ textbookWarehouseRecord.setWarehouseNumber(textbookWarehouseRecord.getWarehouseNumber() + dto.getInNum());
|
|
|
+ textbookWarehouseRecord.setTotalPrice(textbookWarehouseRecord.getSubtotal().multiply(BigDecimal.valueOf(textbookWarehouseRecord.getWarehouseNumber())));
|
|
|
+ textbookWarehouseRecord.setActualWarehouseNumber(textbookWarehouseRecord.getActualWarehouseNumber() + dto.getInNum());
|
|
|
+ textbookWarehouseRecord.setActualTotalPrice(textbookWarehouseRecord.getSubtotal().multiply(BigDecimal.valueOf(textbookWarehouseRecord.getActualWarehouseNumber())));
|
|
|
+ textbookWarehouseRecord.setRemainNumber(textbookWarehouseRecord.getRemainNumber() + dto.getInNum());
|
|
|
+ textbookWarehouseRecord.setModifyDate(new Date());
|
|
|
+ textbookWarehouseRecord.setModifyUserId(StpUtil.getLoginIdAsLong());
|
|
|
+ textbookWarehouseRecordMapper.updateById(textbookWarehouseRecord);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 新增教材入库记录详细入库记录
|
|
|
+ textbookWarehouseRecordDetail = new TextbookWarehouseRecordDetail();
|
|
|
+ textbookWarehouseRecordDetail.setTextbookWarehouseRecordId(textbookWarehouseRecordId);
|
|
|
+ textbookWarehouseRecordDetail.setWarehouseMode(WarehouseModeEnum.WmSubscription.getCode());
|
|
|
+ textbookWarehouseRecordDetail.setWarehouseNumber(dto.getInNum());
|
|
|
+ textbookWarehouseRecordDetailMapper.insert(textbookWarehouseRecordDetail);
|
|
|
}
|
|
|
|
|
|
return true;
|