From d05d46076c62c744cdbd84c84d6e19b42cda9259 Mon Sep 17 00:00:00 2001
From: lishenao <3065849776@qq.com>
Date: 星期三, 02 七月 2025 09:30:15 +0800
Subject: [PATCH] 入库管理,出库管理,库存管理后端接口修改
---
src/main/java/com/ruoyi/inventory/service/impl/StockInServiceImpl.java | 177 ++++++++++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 158 insertions(+), 19 deletions(-)
diff --git a/src/main/java/com/ruoyi/inventory/service/impl/StockInServiceImpl.java b/src/main/java/com/ruoyi/inventory/service/impl/StockInServiceImpl.java
index c215d2a..371dad2 100644
--- a/src/main/java/com/ruoyi/inventory/service/impl/StockInServiceImpl.java
+++ b/src/main/java/com/ruoyi/inventory/service/impl/StockInServiceImpl.java
@@ -1,45 +1,184 @@
package com.ruoyi.inventory.service.impl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.basic.mapper.SupplierManageMapper;
+import com.ruoyi.basic.pojo.SupplierManage;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.inventory.dto.StockinDto;
+import com.ruoyi.inventory.excel.StockInExcelDto;
+import com.ruoyi.inventory.mapper.StockManagementMapper;
import com.ruoyi.inventory.pojo.StockIn;
import com.ruoyi.inventory.mapper.StockInMapper;
+import com.ruoyi.inventory.pojo.StockManagement;
import com.ruoyi.inventory.service.StockInService;
+import com.ruoyi.purchase.dto.PurchaseLedgerDto;
+import com.ruoyi.purchase.mapper.ProductRecordMapper;
+import com.ruoyi.purchase.pojo.ProductRecord;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Arrays;
+import java.util.Date;
import java.util.List;
+
@Service
-public class StockInServiceImpl implements StockInService {
+public class StockInServiceImpl extends ServiceImpl<StockInMapper,StockIn> implements StockInService {
@Autowired
private StockInMapper stockInMapper;
+ @Autowired
+ private StockManagementMapper stockManagementMapper;
+ @Autowired
+ private ProductRecordMapper productRecordMapper;
+ @Autowired
+ private SupplierManageMapper supplierManageMapper;
- @Override//娣诲姞搴撳瓨鍏ュ簱淇℃伅
- public int addStockIn(StockIn stockIn) {
- int i = stockInMapper.insertSelective(stockIn);
- return i;
+
+// 鏂板鏂规硶
+ /**
+ * 鏂板搴撳瓨鍏ュ簱淇℃伅
+ * @param stockIn
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void saveStockin(StockIn stockIn) {
+//闇�瑕佸厛鍒ゆ柇浜у搧璁板綍琛ㄤ腑鏄惁鏈夎浜у搧
+ ProductRecord productRecord = productRecordMapper.selectById(stockIn.getProductRecordid());
+ if (productRecord == null) {
+ throw new RuntimeException("浜у搧璁板綍琛ㄤ腑娌℃湁璇ヤ骇鍝�");
}
-
- @Override//鍒楀嚭鎵�鏈夊簱瀛樺叆搴撲俊鎭�
- public List<StockIn> listStockIns() {
- List<StockIn> stockIns = stockInMapper.selectList();
- return stockIns;
+// 闇�瑕佸厛鍒ゆ柇渚涘簲鍟嗚〃涓槸鍚︽湁璇ヤ緵搴斿晢
+ SupplierManage supplierManage = supplierManageMapper.selectById(stockIn.getSupplierId());
+ if (supplierManage == null) {
+ throw new RuntimeException("渚涘簲鍟嗚〃涓病鏈夎渚涘簲鍟�");
+ }
+// 闇�瑕佸厛鍒ゆ柇搴撳瓨绠$悊琛ㄤ腑鏄惁鏈夎浜у搧
+ LambdaQueryWrapper<StockManagement> queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(StockManagement::getProductRecordid, stockIn.getProductRecordid());
+ queryWrapper.eq(StockManagement::getSupplierId, stockIn.getSupplierId());
+ queryWrapper.eq(StockManagement::getUserId, stockIn.getUserId());
+ StockManagement stockManagement = stockManagementMapper.selectOne(queryWrapper);
+ if (stockManagement == null) {
+// 濡傛灉娌℃湁璇ヤ骇鍝侊紝闇�瑕佸厛鏂板搴撳瓨绠$悊琛�
+ stockManagement = new StockManagement();
+ stockManagement.setProductRecordid(stockIn.getProductRecordid());
+ stockManagement.setSupplierId(stockIn.getSupplierId());
+ stockManagement.setStockQuantity(stockIn.getInboundQuantity());
+ stockManagement.setInboundTime(stockIn.getInboundTime());
+ stockManagement.setBoundTime(new Date());
+ stockManagement.setUserId(stockIn.getUserId());
+ stockManagementMapper.insert(stockManagement);
+ }
+// 濡傛灉鏈夎浜у搧锛岄渶瑕佸厛鏇存柊搴撳瓨绠$悊琛�
+ stockManagement.setStockQuantity(stockManagement.getStockQuantity() + stockIn.getInboundQuantity());
+ stockManagement.setInboundTime(stockIn.getInboundTime());
+ stockManagement.setBoundTime(new Date());
+ stockManagement.setUserId(stockIn.getUserId());
+ stockManagementMapper.updateById(stockManagement);
+// 闇�瑕佸厛鏂板搴撳瓨鍏ュ簱琛�
+ stockInMapper.insert(stockIn);
}
@Override//鏍规嵁id鑾峰彇搴撳瓨鍏ュ簱淇℃伅
public StockIn getStockInById(Long id) {
- StockIn stockIn = stockInMapper.selectByPrimaryKey(id);
+ StockIn stockIn = stockInMapper.selectById(id);
return stockIn;
}
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public boolean updateStockIn(StockIn stockIn) {
+ // 1. 鍙傛暟鏍¢獙
+ if (stockIn == null || stockIn.getId() == null) {
+ throw new IllegalArgumentException("鍏ュ簱璁板綍ID涓嶈兘涓虹┖");
+ }
- @Override//鏇存柊搴撳瓨鍏ュ簱淇℃伅
- public int updateStockIn(StockIn stockIn) {
- int i = stockInMapper.updateByPrimaryKeySelective(stockIn);
- return i;
+ // 2. 鑾峰彇鍘熷璁板綍
+ StockIn original = stockInMapper.selectById(stockIn.getId());
+ if (original == null) {
+ throw new RuntimeException("瑕佷慨鏀圭殑鍏ュ簱璁板綍涓嶅瓨鍦紝ID: " + stockIn.getId());
+ }
+
+ // 3. 妫�鏌ュ叧鑱旀暟鎹�
+ // 3.1 妫�鏌ヤ骇鍝�
+ if (stockIn.getProductRecordid() != null &&
+ productRecordMapper.selectById(stockIn.getProductRecordid()) == null) {
+ throw new RuntimeException("浜у搧璁板綍涓嶅瓨鍦紝ID: " + stockIn.getProductRecordid());
+ }
+
+ // 3.2 妫�鏌ヤ緵搴斿晢
+ if (stockIn.getSupplierId() != null &&
+ supplierManageMapper.selectById(stockIn.getSupplierId()) == null) {
+ throw new RuntimeException("渚涘簲鍟嗕笉瀛樺湪锛孖D: " + stockIn.getSupplierId());
+ }
+
+ // 4. 纭畾鏈�缁堜娇鐢ㄧ殑鍚処D鍊�
+ Integer finalProductId = stockIn.getProductRecordid() != null ?
+ stockIn.getProductRecordid() : original.getProductRecordid();
+ Integer finalSupplierId = stockIn.getSupplierId() != null ?
+ stockIn.getSupplierId() : original.getSupplierId();
+ Long finalUserId = stockIn.getUserId() != null ?
+ stockIn.getUserId() : original.getUserId();
+
+ // 5. 澶勭悊搴撳瓨璁板綍锛堢‘淇濆瓨鍦ㄥ搴旇褰曪級
+ LambdaQueryWrapper<StockManagement> wrapper = new LambdaQueryWrapper<>();
+ wrapper.eq(StockManagement::getProductRecordid, finalProductId)
+ .eq(StockManagement::getSupplierId, finalSupplierId)
+ .eq(StockManagement::getUserId, finalUserId);
+
+ StockManagement stock = stockManagementMapper.selectOne(wrapper);
+
+ // 璁$畻鏁伴噺鍙樺寲锛堝鏋滄湁淇敼锛�
+ Integer quantityChange = stockIn.getInboundQuantity() != null ?
+ stockIn.getInboundQuantity() - original.getInboundQuantity() : 0;
+
+ if (stock == null) {
+ // 5.1 涓嶅瓨鍦ㄥ垯鍒涘缓鏂拌褰�
+ stock = new StockManagement();
+ stock.setProductRecordid(finalProductId);
+ stock.setSupplierId(finalSupplierId);
+ stock.setUserId(finalUserId);
+ // 鍒濆搴撳瓨 = 鍘熷搴撳瓨 + 鍙樺寲閲忥紙鑰冭檻淇敼鍚庣殑鍊硷級
+ stock.setStockQuantity(original.getInboundQuantity() + quantityChange);
+ stockManagementMapper.insert(stock);
+ } else if (quantityChange != 0) {
+ // 5.2 瀛樺湪涓旀暟閲忔湁鍙樺寲鍒欐洿鏂�
+ stock.setStockQuantity(stock.getStockQuantity() + quantityChange);
+ stockManagementMapper.updateById(stock);
+ }
+
+ // 6. 鏇存柊鍏ュ簱璁板綍
+ int updateResult = stockInMapper.updateById(stockIn);
+ if (updateResult <= 0) {
+ throw new RuntimeException("鍏ュ簱璁板綍鏇存柊澶辫触");
+ }
+
+ return updateResult > 0;
}
- @Override//鍒犻櫎搴撳瓨鍏ュ簱淇℃伅
- public int deleteStockIn(Long id) {
- int i = stockInMapper.deleteByPrimaryKey(id);
- return i;
+
+ @Override
+ public int delStockin(List<Integer> ids) {
+ LambdaQueryWrapper<StockIn> delWrapper = new LambdaQueryWrapper<>();
+ delWrapper.in(StockIn::getId, ids);
+ return stockInMapper.delete(delWrapper);
}
+ @Override
+ public IPage<StockIn> selectStockInPage(Page page, StockinDto stockinDto) {
+ System.out.println(stockinDto);
+ IPage<StockIn> stockinDtoIPage = stockInMapper.selectStockInWithProductInfo(page, stockinDto);
+ System.out.println(stockinDtoIPage.getRecords());
+ return stockInMapper.selectStockInWithProductInfo(page, stockinDto);
+ }
+
+ @Override
+ public void stockinExport(HttpServletResponse response, StockinDto stockinDto) {
+ List<StockInExcelDto> stockInExcelDtoList = stockInMapper.stockinExportList(stockinDto);
+ ExcelUtil<StockInExcelDto> util = new ExcelUtil<StockInExcelDto>(StockInExcelDto.class);
+ util.exportExcel(response, stockInExcelDtoList, "渚涘簲鍟嗗鍑�");
+ }
}
--
Gitblit v1.9.3