|
|
@@ -31,6 +31,7 @@ import com.xjrsoft.module.textbook.service.ITextbookSubscriptionService;
|
|
|
import com.xjrsoft.module.textbook.vo.*;
|
|
|
import com.xjrsoft.module.veb.util.ImportExcelUtil;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
+import org.apache.commons.collections.MapUtils;
|
|
|
import org.apache.commons.lang3.ObjectUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.apache.poi.ss.usermodel.*;
|
|
|
@@ -136,16 +137,13 @@ public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<Textbook
|
|
|
MPJLambdaWrapper<TextbookSubscriptionItem> queryWrapper = new MPJLambdaWrapper<>();
|
|
|
queryWrapper
|
|
|
.disableSubLogicDel()
|
|
|
- .selectAs(Textbook::getPrice, TextbookInstockroomListVo::getPrice)
|
|
|
- .selectAs(TextbookSubscriptionItem::getDiscount, TextbookInstockroomListVo::getDiscount)
|
|
|
+ .select(Textbook.class, x -> VoToColumnUtil.fieldsToColumns(TextbookInstockroomListVo.class).contains(x.getProperty()))
|
|
|
+ .select(TextbookSubscriptionItem.class, x -> VoToColumnUtil.fieldsToColumns(TextbookInstockroomListVo.class).contains(x.getProperty()))
|
|
|
.selectAs(TextbookSubscriptionItem::getPrice, TextbookInstockroomListVo::getActualPrice)
|
|
|
+ .selectAs(TextbookSubscriptionItem::getSourcePrice, TextbookInstockroomListVo::getPrice)
|
|
|
.selectAs(TextbookSubscriptionItem::getStudentNum, TextbookInstockroomListVo::getStudentSubscriptionNumber)
|
|
|
.selectAs(TextbookSubscriptionItem::getTeacherNum, TextbookInstockroomListVo::getTeacherSubscriptionNumber)
|
|
|
.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::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,
|
|
|
@@ -431,6 +429,10 @@ public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<Textbook
|
|
|
TextbookSubscriptionItemClass textbookSubscriptionItemClass;
|
|
|
for (TextbookSubscriptionItem textbookSubscriptionItem : textbookSubscription.getTextbookSubscriptionItemList()) {
|
|
|
|
|
|
+ if (ObjectUtils.isEmpty(textbookSubscriptionItem.getSourcePrice())) {
|
|
|
+ textbookSubscriptionItem.setSourcePrice(BigDecimal.ZERO);
|
|
|
+ }
|
|
|
+
|
|
|
if (ObjectUtils.isEmpty(textbookSubscriptionItem.getPrice())) {
|
|
|
textbookSubscriptionItem.setPrice(BigDecimal.ZERO);
|
|
|
}
|
|
|
@@ -516,12 +518,23 @@ public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<Textbook
|
|
|
.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);
|
|
|
- }
|
|
|
- }
|
|
|
+
|
|
|
+ // 因为入库的时候可以修改定价,不同定价应该对应不同的入库记录
|
|
|
+ Map<Long, Map<BigDecimal, TextbookWarehouseRecord>> textbookWarehouseRecordByItemIdByPriceMap = textbookWarehouseRecords.stream()
|
|
|
+ .collect(Collectors.groupingBy(
|
|
|
+ TextbookWarehouseRecord::getDataItemId, // 第一层分组:按征订项 ID 分组
|
|
|
+ Collectors.toMap(
|
|
|
+ TextbookWarehouseRecord::getPrice, // 第二层映射:按入库定价作为键
|
|
|
+ wr -> wr, // 值为 TextbookStudentClaim 对象本身
|
|
|
+ (existing, replacement) -> existing // 如果有重复键,保留现有的值
|
|
|
+ )
|
|
|
+ ));
|
|
|
+
|
|
|
+// for (TextbookWarehouseRecord twr : textbookWarehouseRecords) {
|
|
|
+// if (ObjectUtils.isNotEmpty(twr.getDataItemId()) && !textbookWarehouseRecordByItemIdMap.containsKey(twr.getDataItemId())) {
|
|
|
+// textbookWarehouseRecordByItemIdMap.put(twr.getDataItemId(), twr);
|
|
|
+// }
|
|
|
+// }
|
|
|
|
|
|
// 处理入库单号
|
|
|
StringBuilder sb = new StringBuilder();
|
|
|
@@ -550,22 +563,27 @@ public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<Textbook
|
|
|
TextbookSubscriptionItem old = null;
|
|
|
TextbookSubscriptionItem updateItem;
|
|
|
TextbookWarehouseRecord textbookWarehouseRecord;
|
|
|
+ Map<BigDecimal, TextbookWarehouseRecord> oldTextbookWarehouseRecordByPrice = null;
|
|
|
TextbookWarehouseRecord oldTextbookWarehouseRecord = null;
|
|
|
TextbookWarehouseRecordDetail textbookWarehouseRecordDetail;
|
|
|
for (TextbookInstockroomDto dto : dtos) {
|
|
|
if (ObjectUtils.isNotEmpty(dto.getTextbookSubscriptionItemId())) {
|
|
|
old = itemByIdMap.get(dto.getTextbookSubscriptionItemId());
|
|
|
- oldTextbookWarehouseRecord = textbookWarehouseRecordByItemIdMap.get(dto.getTextbookSubscriptionItemId());
|
|
|
+ oldTextbookWarehouseRecordByPrice = textbookWarehouseRecordByItemIdByPriceMap.get(dto.getTextbookSubscriptionItemId());
|
|
|
+ if(MapUtils.isNotEmpty(oldTextbookWarehouseRecordByPrice)){
|
|
|
+ oldTextbookWarehouseRecord = oldTextbookWarehouseRecordByPrice.get(dto.getPrice());
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if (ObjectUtils.isEmpty(old)) {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
+ // 现在入库价格改动不影响征订项的价格相关属性
|
|
|
updateItem = new TextbookSubscriptionItem();
|
|
|
updateItem.setId(old.getId());
|
|
|
- updateItem.setDiscount(ObjectUtils.isNotEmpty(dto.getDiscount()) ? dto.getDiscount() : 10);
|
|
|
- updateItem.setPrice(dto.getPrice().multiply(BigDecimal.valueOf(dto.getDiscount() / 10)));
|
|
|
+// updateItem.setDiscount(ObjectUtils.isNotEmpty(dto.getDiscount()) ? dto.getDiscount() : 10);
|
|
|
+// updateItem.setPrice(dto.getPrice().multiply(BigDecimal.valueOf(dto.getDiscount() / 10)));
|
|
|
updateItem.setInStockNum(old.getInStockNum() + dto.getInNum());
|
|
|
updateItem.setModifyDate(new Date());
|
|
|
updateItem.setModifyUserId(StpUtil.getLoginIdAsLong());
|
|
|
@@ -660,8 +678,18 @@ public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<Textbook
|
|
|
;
|
|
|
List<TextbookWarehouseRecord> textbookWarehouseRecords = textbookWarehouseRecordMapper.selectList(textbookWarehouseRecordLambdaQueryWrapper);
|
|
|
|
|
|
- Map<Long, TextbookWarehouseRecord> textbookWarehouseRecordByItemIdMap = textbookWarehouseRecords.stream()
|
|
|
- .collect(Collectors.toMap(TextbookWarehouseRecord::getDataItemId, t -> t, (t1, t2) -> t2));
|
|
|
+// Map<Long, TextbookWarehouseRecord> textbookWarehouseRecordByItemIdMap = textbookWarehouseRecords.stream()
|
|
|
+// .collect(Collectors.toMap(TextbookWarehouseRecord::getDataItemId, t -> t, (t1, t2) -> t2));
|
|
|
+ // 因为入库的时候可以修改定价,不同定价应该对应不同的入库记录
|
|
|
+ Map<Long, Map<BigDecimal, TextbookWarehouseRecord>> textbookWarehouseRecordByItemIdByPriceMap = textbookWarehouseRecords.stream()
|
|
|
+ .collect(Collectors.groupingBy(
|
|
|
+ TextbookWarehouseRecord::getDataItemId, // 第一层分组:按征订项 ID 分组
|
|
|
+ Collectors.toMap(
|
|
|
+ TextbookWarehouseRecord::getPrice, // 第二层映射:按入库定价作为键
|
|
|
+ wr -> wr, // 值为 TextbookStudentClaim 对象本身
|
|
|
+ (existing, replacement) -> existing // 如果有重复键,保留现有的值
|
|
|
+ )
|
|
|
+ ));
|
|
|
|
|
|
// 处理入库单号
|
|
|
StringBuilder sb = new StringBuilder();
|
|
|
@@ -692,7 +720,8 @@ public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<Textbook
|
|
|
// 处理入库细节
|
|
|
TextbookSubscriptionItem oldItem;
|
|
|
TextbookSubscriptionItem updateItem;
|
|
|
- TextbookWarehouseRecord oldTextbookWarehouseRecord;
|
|
|
+ Map<BigDecimal, TextbookWarehouseRecord> oldTextbookWarehouseRecordByPrice;
|
|
|
+ TextbookWarehouseRecord oldTextbookWarehouseRecord = null;
|
|
|
TextbookWarehouseRecord textbookWarehouseRecord;
|
|
|
TextbookWarehouseRecordDetail textbookWarehouseRecordDetail;
|
|
|
Date nowDate = new Date();
|
|
|
@@ -717,14 +746,17 @@ public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<Textbook
|
|
|
throw new MyException("第" + (i + 4) + "行数据主键被修改,请重新下载模板");
|
|
|
}
|
|
|
|
|
|
- oldTextbookWarehouseRecord = textbookWarehouseRecordByItemIdMap.get(Long.parseLong(vo.getTextbookSubscriptionItemId()));
|
|
|
+ oldTextbookWarehouseRecordByPrice = textbookWarehouseRecordByItemIdByPriceMap.get(Long.parseLong(vo.getTextbookSubscriptionItemId()));
|
|
|
+ if(MapUtils.isNotEmpty(oldTextbookWarehouseRecordByPrice)){
|
|
|
+ oldTextbookWarehouseRecord = oldTextbookWarehouseRecordByPrice.get(vo.getPrice());
|
|
|
+ }
|
|
|
|
|
|
updateItem = new TextbookSubscriptionItem();
|
|
|
updateItem.setId(oldItem.getId());
|
|
|
- if (ObjectUtils.isEmpty(oldItem.getInStockNum()) || oldItem.getInStockNum() <= 0) {
|
|
|
- updateItem.setDiscount(ObjectUtils.isNotEmpty(vo.getDiscount()) ? vo.getDiscount() : 10);
|
|
|
- updateItem.setPrice(vo.getPrice().multiply(BigDecimal.valueOf(vo.getDiscount() / 10)));
|
|
|
- }
|
|
|
+// if (ObjectUtils.isEmpty(oldItem.getInStockNum()) || oldItem.getInStockNum() <= 0) {
|
|
|
+// updateItem.setDiscount(ObjectUtils.isNotEmpty(vo.getDiscount()) ? vo.getDiscount() : 10);
|
|
|
+// updateItem.setPrice(vo.getPrice().multiply(BigDecimal.valueOf(vo.getDiscount() / 10)));
|
|
|
+// }
|
|
|
updateItem.setInStockNum(oldItem.getInStockNum() + vo.getInNum());
|
|
|
updateItem.setModifyDate(nowDate);
|
|
|
updateItem.setModifyUserId(loginId);
|
|
|
@@ -812,6 +844,11 @@ public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<Textbook
|
|
|
|
|
|
TextbookSubscriptionItemClass textbookSubscriptionItemClass;
|
|
|
for (TextbookSubscriptionItem textbookSubscriptionItem : textbookSubscription.getTextbookSubscriptionItemList()) {
|
|
|
+
|
|
|
+ if (ObjectUtils.isEmpty(textbookSubscriptionItem.getSourcePrice())) {
|
|
|
+ textbookSubscriptionItem.setSourcePrice(BigDecimal.ZERO);
|
|
|
+ }
|
|
|
+
|
|
|
if (ObjectUtils.isEmpty(textbookSubscriptionItem.getPrice())) {
|
|
|
textbookSubscriptionItem.setPrice(BigDecimal.ZERO);
|
|
|
}
|
|
|
@@ -1086,7 +1123,7 @@ public class TextbookSubscriptionServiceImpl extends MPJBaseServiceImpl<Textbook
|
|
|
ImportExcelUtil.createBigHead(workbook, sheet, "教材入库导入模板", 0, importConfigs.size() - 1);
|
|
|
|
|
|
// 提示必填
|
|
|
- String cautionHead = "说明:教材的基础信息不能修改,请输入实际折扣和入库数量,然后直接导入当前excel";
|
|
|
+ String cautionHead = "说明:教材的基础信息不能修改,请输入定价,实际折扣和入库数量,然后直接导入当前excel";
|
|
|
ImportExcelUtil.createCautionHead(workbook, sheet, 1, cautionHead, importConfigs.size() - 1, 12, IndexedColors.RED.getIndex());
|
|
|
|
|
|
// 表头
|