package com.ruoyi.stock.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
import com.ruoyi.common.enums.StockOutQualifiedRecordTypeEnum;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.aspectj.lang.annotation.Log;
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.domain.R;
import com.ruoyi.stock.dto.StockInventoryDto;
import com.ruoyi.stock.execl.StockInventoryExportData;
import com.ruoyi.stock.service.StockInventoryService;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import jakarta.servlet.http.HttpServletResponse;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.ArrayList;
import java.util.List;
/**
*
* 库存表 前端控制器
*
*
* @author 芯导软件(江苏)有限公司
* @since 2026-01-21 04:16:36
*/
@RestController
@RequestMapping("/stockInventory")
@Tag(name = "库存表")
@AllArgsConstructor
public class StockInventoryController {
private StockInventoryService stockInventoryService;
@GetMapping("/pagestockInventory")
@Operation(summary = "分页查询库存")
public R pagestockInventory(Page page, StockInventoryDto stockInventoryDto) {
IPage stockInventoryDtoIPage = stockInventoryService.pagestockInventory(page, stockInventoryDto);
return R.ok(stockInventoryDtoIPage);
}
@GetMapping("/pageListCombinedStockInventory")
@Operation(summary = "分页查询联合库存列表")
public R pageListCombinedStockInventory(Page page, StockInventoryDto stockInventoryDto) {
IPage stockInventoryDtoIPage = stockInventoryService.pageListCombinedStockInventory(page, stockInventoryDto);
return R.ok(stockInventoryDtoIPage);
}
@PostMapping("/addstockInventory")
@Operation(summary = "新增库存")
public R addstockInventory(@RequestBody StockInventoryDto stockInventoryDto) {
stockInventoryDto.setRecordType(String.valueOf(StockInQualifiedRecordTypeEnum.CUSTOMIZATION_STOCK_IN.getCode()));
stockInventoryDto.setRecordId(0L);
return R.ok(stockInventoryService.addstockInventory(stockInventoryDto));
}
@PostMapping("/subtractStockInventory")
@Operation(summary = "扣减库存")
public R subtractStockInventory(@RequestBody StockInventoryDto stockInventoryDto) {
stockInventoryDto.setRecordType(String.valueOf(StockOutQualifiedRecordTypeEnum.CUSTOMIZATION_STOCK_OUT.getCode()));
stockInventoryDto.setRecordId(0L);
return R.ok(stockInventoryService.subtractStockInventory(stockInventoryDto));
}
@PostMapping("/addStockInRecordOnly")
@Operation(summary = "新增入库记录(仅创建记录,不调整库存)")
public R addStockInRecordOnly(@RequestBody StockInventoryDto stockInventoryDto) {
stockInventoryDto.setRecordType(String.valueOf(StockInQualifiedRecordTypeEnum.CUSTOMIZATION_STOCK_IN.getCode()));
stockInventoryDto.setRecordId(0L);
return R.ok(stockInventoryService.addStockInRecordOnly(stockInventoryDto));
}
@PostMapping("/addStockOutRecordOnly")
@Operation(summary = "新增出库记录(仅创建记录,不调整库存)")
public R addStockOutRecordOnly(@RequestBody StockInventoryDto stockInventoryDto) {
stockInventoryDto.setRecordType(String.valueOf(StockOutQualifiedRecordTypeEnum.CUSTOMIZATION_STOCK_OUT.getCode()));
stockInventoryDto.setRecordId(0L);
return R.ok(stockInventoryService.addStockOutRecordOnly(stockInventoryDto));
}
@PostMapping("importStockInventory")
@Operation(summary = "导入库存")
public R importStockInventory(MultipartFile file) {
return stockInventoryService.importStockInventory(file);
}
@Log(title = "下载库存导入模板", businessType = BusinessType.EXPORT)
@PostMapping("/downloadStockInventory")
public void downloadStockInventory(HttpServletResponse response) {
List list = new ArrayList<>();
ExcelUtil util = new ExcelUtil<>(StockInventoryExportData.class);
util.exportExcel(response, list, "库存模板");
}
@PostMapping("/exportStockInventory")
@Operation(summary = "导出库存")
public void exportStockInventory(HttpServletResponse response, StockInventoryDto stockInventoryDto) {
stockInventoryService.exportStockInventory(response, stockInventoryDto);
}
@GetMapping("stockInventoryPage")
@Operation(summary = "库存报表查询")
public R stockInventoryPage(Page page, StockInventoryDto stockInventoryDto) {
return R.ok(stockInventoryService.stockInventoryPage(stockInventoryDto,page));
}
@GetMapping("stockInAndOutRecord")
@Operation(summary = "统计各个产品的入库和出库记录")
public R stockInAndOutRecord(StockInventoryDto stockInventoryDto,Page page) {
return R.ok(stockInventoryService.stockInAndOutRecord(stockInventoryDto,page));
}
@PostMapping("/frozenStock")
@Operation(summary = "冻结库存")
public R frozenStock(@RequestBody StockInventoryDto stockInventoryDto) {
return R.ok(stockInventoryService.frozenStock(stockInventoryDto));
}
@PostMapping("/thawStock")
@Operation(summary = "解冻库存")
public R thawStock(@RequestBody StockInventoryDto stockInventoryDto) {
return R.ok(stockInventoryService.thawStock(stockInventoryDto));
}
@GetMapping("/getByModelId")
@Operation(summary = "根据产品规格ID获取入库记录")
public R getByModelId(Long productModelId) {
return R.ok(stockInventoryService.getByModelId(productModelId));
}
}