package com.ruoyi.sales.controller; import javax.servlet.http.HttpServletResponse; 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.web.domain.R; import com.ruoyi.procurementrecord.dto.ProcurementPageDto; import com.ruoyi.procurementrecord.dto.ProcurementPageDtoCopy; import com.ruoyi.procurementrecord.mapper.ReturnManagementMapper; import com.ruoyi.procurementrecord.mapper.ReturnSaleProductMapper; import com.ruoyi.procurementrecord.service.ProcurementRecordService; import com.ruoyi.procurementrecord.service.ReturnManagementService; import com.ruoyi.procurementrecord.utils.StockUtils; import com.ruoyi.sales.dto.SalesLedgerProductDto; import com.ruoyi.sales.mapper.ShippingInfoDetailMapper; import com.ruoyi.sales.mapper.ShippingInfoMapper; import com.ruoyi.sales.pojo.SalesLedgerProduct; import com.ruoyi.sales.pojo.ShippingInfoDetail; import com.ruoyi.sales.service.ISalesLedgerProductService; import com.ruoyi.sales.service.ShippingInfoService; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; 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.page.TableDataInfo; import java.math.BigDecimal; import java.util.List; import java.util.Map; /** * 产品信息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; @Autowired private ReturnManagementService returnManagementService; /** * 回款登记分页查询 */ @GetMapping("/listPageSalesLedger") public AjaxResult listPage(Page page, SalesLedgerProductDto salesLedgerProduct) { IPage list = salesLedgerProductService.listPage(page,salesLedgerProduct); return AjaxResult.success(list); } /** * 付款登记分页查询 */ @GetMapping("/listPagePurchaseLedger") public AjaxResult listPagePurchaseLedger(Page page, SalesLedgerProductDto salesLedgerProduct) { IPage list = salesLedgerProductService.listPagePurchaseLedger(page,salesLedgerProduct); return AjaxResult.success(list); } @ApiOperation("发货退货撤销") @PostMapping("/cancelDelivery") @Transactional(rollbackFor = Exception.class) public AjaxResult cancelDelivery(@RequestBody SalesLedgerProduct salesLedgerProduct) { return AjaxResult.success(salesLedgerProductService.cancelDelivery(salesLedgerProduct)); } /** * 查询产品信息列表 */ @GetMapping("/list") public AjaxResult list(SalesLedgerProduct salesLedgerProduct) { List list = salesLedgerProductService.selectSalesLedgerProductList(salesLedgerProduct); list.forEach(item -> { // 获取发货数量,退货数量 Map map = shippingInfoService.getNumberOfSalesLedgerProduct(item.getId()); item.setShippingNum(map.get("shippingNum")); item.setReturnNum(map.get("returnNum")); if (item.getFutureTickets().compareTo(BigDecimal.ZERO) == 0) { item.setFutureTickets(item.getQuantity()); } if (item.getFutureTicketsAmount().compareTo(BigDecimal.ZERO) == 0) { item.setFutureTicketsAmount(item.getTaxInclusiveTotalPrice()); } 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}") 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") public R judgmentInventory(SalesLedgerProduct salesLedgerProduct) { return salesLedgerProductService.judgmentInventory(salesLedgerProduct); } }