From 4c33acfe648e9b008f91c5e2cf446550e6b0174d Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期二, 22 七月 2025 17:35:57 +0800
Subject: [PATCH] 1.正式库导出优化 2.销售导出 3.设备使用状态优化 4.定时任务优化

---
 main-business/src/main/java/com/ruoyi/business/service/impl/SalesRecordServiceImpl.java |   67 ++++++++++++++++++++++++++++++++-
 1 files changed, 65 insertions(+), 2 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..1a9c849 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,10 +4,12 @@
 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;
 import com.ruoyi.basic.entity.Customer;
+import com.ruoyi.basic.entity.Supply;
 import com.ruoyi.basic.mapper.CoalInfoMapper;
 import com.ruoyi.basic.mapper.CustomerMapper;
 import com.ruoyi.business.dto.SalesRecordDto;
@@ -17,12 +19,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;
 
@@ -51,6 +57,7 @@
  * @since 2025-06-11
  */
 @Service
+@Slf4j
 @RequiredArgsConstructor
 public class SalesRecordServiceImpl extends ServiceImpl<SalesRecordMapper, SalesRecord> implements SalesRecordService {
 
@@ -155,7 +162,10 @@
             throw new BaseException("閿�鍞暟閲忎笉鑳藉ぇ浜庡簱瀛樻暟閲�");
         }
         officialInventory.setInventoryQuantity(officialInventory.getInventoryQuantity().subtract(salesRecordDto.getSaleQuantity()));
-        officialInventory.setPendingReplenishment(salesRecordDto.getSaleQuantity());
+
+        if (salesRecordDto.isAdd()){
+            officialInventory.setPendingReplenishment(salesRecordDto.getSaleQuantity());
+        }
         officialInventoryMapper.updateById(officialInventory);
 
         // 鏋勫缓閿�鍞褰曞疄浣�
@@ -193,7 +203,7 @@
         if (registrant == null) {
             throw new BaseException("鐧昏浜轰俊鎭笉瀛樺湪");
         }
-        record.setRegistrant(registrant.getUserName());
+        record.setRegistrant(registrant.getNickName());
 
         // 璁剧疆瀹㈡埛淇℃伅
         Customer customer = customerMapper.selectById(dto.getCustomerId());
@@ -255,6 +265,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