From 7cd9dbf45e8e29f3bb0c00ac4f14d5588029c3ba Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期六, 11 十月 2025 17:45:02 +0800
Subject: [PATCH] yys 新增车牌字段
---
main-business/src/main/java/com/ruoyi/business/service/impl/SalesRecordServiceImpl.java | 152 ++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 128 insertions(+), 24 deletions(-)
diff --git a/main-business/src/main/java/com/ruoyi/business/service/impl/SalesRecordServiceImpl.java b/main-business/src/main/java/com/ruoyi/business/service/impl/SalesRecordServiceImpl.java
index 01c3e54..da90280 100644
--- a/main-business/src/main/java/com/ruoyi/business/service/impl/SalesRecordServiceImpl.java
+++ b/main-business/src/main/java/com/ruoyi/business/service/impl/SalesRecordServiceImpl.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.basic.entity.CoalInfo;
@@ -17,12 +18,16 @@
import com.ruoyi.business.mapper.OfficialInventoryMapper;
import com.ruoyi.business.mapper.SalesRecordMapper;
import com.ruoyi.business.service.SalesRecordService;
+import com.ruoyi.business.vo.SalesRecordExportVo;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.mapper.SysUserMapper;
+import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -34,13 +39,9 @@
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.time.temporal.TemporalAdjusters;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
-import java.util.*;
/**
* <p>
@@ -51,6 +52,7 @@
* @since 2025-06-11
*/
@Service
+@Slf4j
@RequiredArgsConstructor
public class SalesRecordServiceImpl extends ServiceImpl<SalesRecordMapper, SalesRecord> implements SalesRecordService {
@@ -146,20 +148,20 @@
// 鍙傛暟鏍¢獙
validateSalesRecordDto(salesRecordDto);
- // 鏇存柊姝e紡搴撳緟琛ュ簱鏁伴噺
+ // 鑾峰彇鐓ょ搴撳瓨淇℃伅
OfficialInventory officialInventory = officialInventoryMapper.selectById(salesRecordDto.getCoalId());
if (officialInventory == null) {
throw new BaseException("姝e紡搴撶叅绉嶄俊鎭笉瀛樺湪");
}
- if (salesRecordDto.getSaleQuantity().compareTo(officialInventory.getInventoryQuantity()) > 0) {
- throw new BaseException("閿�鍞暟閲忎笉鑳藉ぇ浜庡簱瀛樻暟閲�");
- }
- officialInventory.setInventoryQuantity(officialInventory.getInventoryQuantity().subtract(salesRecordDto.getSaleQuantity()));
- officialInventory.setPendingReplenishment(salesRecordDto.getSaleQuantity());
- officialInventoryMapper.updateById(officialInventory);
+
+ // 澶勭悊閿�鍞暟閲忓彉鏇撮�昏緫
+ SalesRecord existingRecord = salesRecordDto.getId() == null ? null : salesRecordMapper.selectById(salesRecordDto.getId());
+ handleQuantityChanges(salesRecordDto, officialInventory, existingRecord);
// 鏋勫缓閿�鍞褰曞疄浣�
SalesRecord salesRecord = buildSalesRecord(salesRecordDto, officialInventory.getCoalId());
+ // 璁剧疆閿�鍞褰曚腑鐨勫簱瀛樻暟閲�
+ salesRecord.setInventoryQuantity(officialInventory.getInventoryQuantity());
// 澶勭悊鏂板/鏇存柊閫昏緫
if (salesRecordDto.getId() == null) {
@@ -169,18 +171,52 @@
}
}
- private void validateSalesRecordDto(SalesRecordDto dto) {
- if (dto == null) {
- throw new BaseException("閿�鍞褰曟暟鎹笉鑳戒负绌�");
+ private void handleQuantityChanges(SalesRecordDto dto, OfficialInventory officialInventory, SalesRecord existingRecord) {
+ if (existingRecord == null) {
+ // 鏂板璁板綍
+ if (dto.getSaleQuantity().compareTo(officialInventory.getInventoryQuantity()) > 0) {
+ throw new BaseException("閿�鍞暟閲忎笉鑳藉ぇ浜庡簱瀛樻暟閲�");
+ }
+ // 鏇存柊搴撳瓨鏁伴噺
+ officialInventory.setInventoryQuantity(officialInventory.getInventoryQuantity().subtract(dto.getSaleQuantity()));
+ // 璁剧疆寰呰ˉ搴撴暟閲�
+ if (dto.isAdd()) {
+ officialInventory.setPendingReplenishment(
+ officialInventory.getPendingReplenishment() == null ?
+ dto.getSaleQuantity() :
+ officialInventory.getPendingReplenishment().add(dto.getSaleQuantity())
+ );
+ }
+ } else {
+ // 鏇存柊璁板綍
+ // 姣旇緝閿�鍞暟閲忔槸鍚︽湁鍙樺寲
+ int quantityComparison = dto.getSaleQuantity().compareTo(existingRecord.getSaleQuantity());
+ if (quantityComparison != 0) {
+ // 璁$畻鏁伴噺宸��
+ BigDecimal quantityDiff = dto.getSaleQuantity().subtract(existingRecord.getSaleQuantity());
+
+ // 妫�鏌ユ柊鏁伴噺鏄惁浼氬鑷村簱瀛樹笉瓒�
+ if (quantityComparison > 0 && quantityDiff.compareTo(officialInventory.getInventoryQuantity()) > 0) {
+ throw new BaseException("閿�鍞暟閲忓鍔犲悗涓嶈兘澶т簬搴撳瓨鏁伴噺");
+ }
+
+ // 鏇存柊搴撳瓨鏁伴噺
+ officialInventory.setInventoryQuantity(officialInventory.getInventoryQuantity().subtract(quantityDiff));
+
+ // 鏇存柊寰呰ˉ搴撴暟閲忥紙濡傛灉鏄渶瑕佽ˉ搴撶殑璁板綍锛�
+ if (dto.isAdd()) {
+ BigDecimal pendingDiff = officialInventory.getPendingReplenishment() == null ?
+ quantityDiff :
+ officialInventory.getPendingReplenishment().add(quantityDiff);
+ officialInventory.setPendingReplenishment(pendingDiff);
+ }
+ }
}
- if (dto.getRegistrantId() == null) {
- throw new BaseException("鐧昏浜篒D涓嶈兘涓虹┖");
- }
- if (dto.getCustomerId() == null) {
- throw new BaseException("瀹㈡埛ID涓嶈兘涓虹┖");
- }
- if (dto.getCoalId() == null) {
- throw new BaseException("璇烽�夋嫨涓�鏉$叅绉嶄俊鎭�");
+
+ // 鏇存柊搴撳瓨璁板綍
+ int updateResult = officialInventoryMapper.updateById(officialInventory);
+ if (updateResult <= 0) {
+ throw new BaseException("搴撳瓨鏇存柊澶辫触");
}
}
@@ -193,7 +229,7 @@
if (registrant == null) {
throw new BaseException("鐧昏浜轰俊鎭笉瀛樺湪");
}
- record.setRegistrant(registrant.getUserName());
+ record.setRegistrant(registrant.getNickName());
// 璁剧疆瀹㈡埛淇℃伅
Customer customer = customerMapper.selectById(dto.getCustomerId());
@@ -224,6 +260,21 @@
return record;
}
+ private void validateSalesRecordDto(SalesRecordDto dto) {
+ if (dto == null) {
+ throw new BaseException("閿�鍞褰曟暟鎹笉鑳戒负绌�");
+ }
+ if (dto.getRegistrantId() == null) {
+ throw new BaseException("鐧昏浜篒D涓嶈兘涓虹┖");
+ }
+ if (dto.getCustomerId() == null) {
+ throw new BaseException("瀹㈡埛ID涓嶈兘涓虹┖");
+ }
+ if (dto.getCoalId() == null) {
+ throw new BaseException("璇烽�夋嫨涓�鏉$叅绉嶄俊鎭�");
+ }
+ }
+
private int insertSalesRecord(SalesRecord record) {
int result = salesRecordMapper.insert(record);
if (result <= 0) {
@@ -255,6 +306,59 @@
}
@Override
+ public void salesRecordExport(HttpServletResponse response, SalesRecordDto salesRecordDto) {
+ List<Long> ids = salesRecordDto.getExportIds();
+ List<SalesRecord> list;
+ if (ids != null && !ids.isEmpty()) {
+ list = salesRecordMapper.selectByIds(ids);
+ } else {
+ list = salesRecordMapper.selectList(null);
+ }
+ List<SalesRecordExportVo> exportData = convertToExportVo(list);
+ ExcelUtil<SalesRecordExportVo> util = new ExcelUtil<>(SalesRecordExportVo.class);
+ util.exportExcel(response, exportData, "閿�鍞嚭搴撴暟鎹�");
+ }
+
+ private List<SalesRecordExportVo> convertToExportVo(List<SalesRecord> list) {
+ // 1. 鎻愬墠鏀堕泦鎵�鏈夐渶瑕佹煡璇㈢殑coalId锛岄伩鍏峃+1鏌ヨ闂
+ Set<Long> coalIds = list.stream()
+ .filter(Objects::nonNull)
+ .map(SalesRecord::getCoalId)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toSet());
+
+ // 2. 鎵归噺鏌ヨcoalInfo鏁版嵁
+ Map<Long, CoalInfo> coalInfoMap = CollectionUtils.isEmpty(coalIds)
+ ? Collections.emptyMap()
+ : coalInfoMapper.selectByIds(coalIds).stream()
+ .filter(Objects::nonNull)
+ .collect(Collectors.toMap(CoalInfo::getId, Function.identity()));
+
+ // 3. 杞崲鏁版嵁
+ return list.stream()
+ .filter(Objects::nonNull)
+ .map(record -> {
+ try {
+ SalesRecordExportVo vo = new SalesRecordExportVo();
+
+ // 鎷疯礉鍩虹灞炴��
+ BeanUtils.copyProperties(record, vo);
+
+ // 璁剧疆鍏宠仈鐨刢oal淇℃伅
+ Optional.ofNullable(record.getCoalId())
+ .map(coalInfoMap::get)
+ .ifPresent(coalInfo -> vo.setCoal(coalInfo.getCoal()));
+ return vo;
+ } catch (Exception e) {
+ log.error("杞崲閿�鍞褰昖O寮傚父锛岃褰旾D: {}", record.getId(), e);
+ return null;
+ }
+ })
+ .filter(Objects::nonNull)
+ .collect(Collectors.toList());
+ }
+
+ @Override
public Map<String, Object> getYearlyMonthlySales(YearlyQueryDto query) {
// 1. 澶勭悊榛樿鏌ヨ锛堜笉浼犲弬鏁版椂锛�
if (query == null || query.getTimeRange() == null || query.getTimeRange().length == 0) {
--
Gitblit v1.9.3