package com.ruoyi.sales.controller; 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.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.controller.BaseController; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.framework.web.domain.R; import com.ruoyi.procurementrecord.service.ProcurementRecordService; import com.ruoyi.procurementrecord.utils.StockUtils; import com.ruoyi.sales.dto.SalesLedgerProductDto; import com.ruoyi.sales.pojo.SalesLedgerProduct; import com.ruoyi.sales.pojo.ShippingInfo; import com.ruoyi.sales.service.ISalesLedgerProductService; import com.ruoyi.sales.service.ShippingInfoService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.util.List; /** * 产品信息Controller * * @author ruoyi * @date 2025-05-08 */ @RestController @RequestMapping("/sales/product") public class SalesLedgerProductController extends BaseController { @Autowired private ISalesLedgerProductService salesLedgerProductService; @Autowired private ProcurementRecordService procurementRecordService; @Autowired private StockUtils stockUtils; @Autowired private ShippingInfoService shippingInfoService; /** * 回款登记分页查询 */ @GetMapping("/listPageSalesLedger") @Log(title = "回款登记分页查询", businessType = BusinessType.OTHER) public AjaxResult listPage(Page page, SalesLedgerProductDto salesLedgerProduct) { IPage list = salesLedgerProductService.listPage(page,salesLedgerProduct); return AjaxResult.success(list); } /** * 付款登记分页查询 */ @GetMapping("/listPagePurchaseLedger") @Log(title = "付款登记分页查询", businessType = BusinessType.OTHER) public AjaxResult listPagePurchaseLedger(Page page, SalesLedgerProductDto salesLedgerProduct) { IPage list = salesLedgerProductService.listPagePurchaseLedger(page,salesLedgerProduct); return AjaxResult.success(list); } /** * 查询产品信息列表 */ @GetMapping("/list") @Log(title = "查询产品信息列表", businessType = BusinessType.OTHER) public AjaxResult list(SalesLedgerProduct salesLedgerProduct) { List list = salesLedgerProductService.selectSalesLedgerProductList(salesLedgerProduct); list.forEach(item -> { List shippings = shippingInfoService.list(new LambdaQueryWrapper() .eq(ShippingInfo::getSalesLedgerId, salesLedgerProduct.getSalesLedgerId()) .eq(ShippingInfo::getSalesLedgerProductId, item.getId())); BigDecimal total = shippings.stream().map(ShippingInfo::getShippedQty).reduce(BigDecimal.ZERO, BigDecimal::add); item.setShippedQty(total); if (total.compareTo(BigDecimal.ZERO) == 0) { item.setShippingStatus("待发货"); } if (total.compareTo(item.getQuantity()) == 0) { item.setShippingStatus("已发货"); } if (total.compareTo(item.getQuantity()) < 0) { item.setShippingStatus("发货中"); } if (item.getFutureTickets().compareTo(BigDecimal.ZERO) == 0) { item.setFutureTickets(BigDecimal.ZERO); } if (item.getFutureTicketsAmount().compareTo(BigDecimal.ZERO) == 0) { item.setFutureTicketsAmount(BigDecimal.ZERO); } // ProcurementPageDto procurementDto = new ProcurementPageDto(); // procurementDto.setSalesLedgerProductId(item.getId()); // procurementDto.setProductCategory(item.getProductCategory()); // IPage result = procurementRecordService.listPageCopyByProduction(new Page<>(1,-1), procurementDto); // BigDecimal stockQuantity = stockUtils.getStockQuantity(item.getProductModelId()).get("stockQuantity"); // ProcurementPageDtoCopy procurementDtoCopy = result.getRecords().get(0); if (item.getApproveStatus() != 2) { if (item.getHasSufficientStock() == 0) { item.setApproveStatus(0); } else { item.setApproveStatus(1); } } }); return AjaxResult.success(list); } /** * 导出产品信息列表 */ @Log(title = "产品信息", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, SalesLedgerProduct salesLedgerProduct) { List list = salesLedgerProductService.selectSalesLedgerProductList(salesLedgerProduct); ExcelUtil util = new ExcelUtil(SalesLedgerProduct.class); util.exportExcel(response, list, "产品信息数据"); } /** * 获取产品信息详细信息 */ @GetMapping(value = "/{id}") @Log(title = "查询产品信息详细信息", businessType = BusinessType.OTHER) public AjaxResult getInfo(@PathVariable("id") Long id) { return success(salesLedgerProductService.selectSalesLedgerProductById(id)); } /** * 新增修改产品信息 */ @Log(title = "产品信息", businessType = BusinessType.INSERT) @PostMapping ("/addOrUpdateSalesLedgerProduct") public AjaxResult add(@RequestBody SalesLedgerProduct salesLedgerProduct) { return toAjax(salesLedgerProductService.addOrUpdateSalesLedgerProduct(salesLedgerProduct)); } /** * 删除产品信息 */ @Log(title = "产品信息", businessType = BusinessType.DELETE) @DeleteMapping("/delProduct") public AjaxResult remove(@RequestBody Long[] ids) { if (ids == null || ids.length == 0) { return AjaxResult.error("请传入要删除的ID"); } return toAjax(salesLedgerProductService.deleteSalesLedgerProductByIds(ids)); } //根据产品id获取bom判断库存是否充足 @GetMapping("/judgmentInventory") @Log(title = "判断库存是否充足", businessType = BusinessType.OTHER) public R judgmentInventory(SalesLedgerProduct salesLedgerProduct) { return salesLedgerProductService.judgmentInventory(salesLedgerProduct); } }