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.exception.ServiceException; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.web.controller.BaseController; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.procurementrecord.dto.ProcurementAddDto; import com.ruoyi.procurementrecord.dto.ProcurementRecordOutAdd; import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut; import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage; import com.ruoyi.procurementrecord.service.ProcurementRecordOutService; import com.ruoyi.procurementrecord.service.ProcurementRecordService; import com.ruoyi.sales.mapper.ShipmentApprovalMapper; import com.ruoyi.sales.mapper.ShippingInfoMapper; import com.ruoyi.sales.pojo.SalesLedgerProduct; import com.ruoyi.sales.pojo.ShipmentApproval; import com.ruoyi.sales.pojo.ShippingInfo; import com.ruoyi.sales.service.ISalesLedgerProductService; import com.ruoyi.sales.service.ShipmentApprovalService; import com.ruoyi.sales.service.ShippingInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; @RestController @RequestMapping("/shipmentApproval") @Api(tags = "发货审批管理") public class ShipmentApprovalController extends BaseController { @Autowired private ShipmentApprovalService shipmentApprovalService; @Autowired private ShipmentApprovalMapper shipmentApprovalMapper; @Autowired private ISalesLedgerProductService salesLedgerProductService; @Autowired private ProcurementRecordOutService procurementRecordOutService; @Autowired private ProcurementRecordService procurementRecordStorageService; @GetMapping("/listPage") @ApiOperation("发货审批列表") public AjaxResult listPage(Page page, ShipmentApproval req) { IPage listPage = shipmentApprovalService.listPage(page,req); return AjaxResult.success(listPage); } @PostMapping("/update") @ApiOperation("发货审批,更新发货审批状态") @Transactional(rollbackFor = Exception.class) public AjaxResult update(@RequestBody ShipmentApproval req) { // 查询发货审批 ShipmentApproval shipmentApproval = shipmentApprovalMapper.selectById(req.getId()); if (shipmentApproval == null) { return AjaxResult.error("发货审批不存在"); } // 更新发货审批状态 shipmentApproval.setApproveStatus(req.getApproveStatus()); boolean update = shipmentApprovalService.updateById(shipmentApproval); if (!update) { // 事务回滚 throw new ServiceException("发货审批更新失败"); } // 查询关联的销售台账产品 SalesLedgerProduct salesLedgerProduct = salesLedgerProductService.getById(shipmentApproval.getSalesLedgerProductId()); if (salesLedgerProduct == null) { // 抛异常事务回滚 throw new ServiceException("销售台账不存在,审批回滚"); } // 同步更新销售台账产品的审批状态 salesLedgerProduct.setApproveStatus(req.getApproveStatus()); salesLedgerProductService.updateById(salesLedgerProduct); // 审批通过 if (req.getApproveStatus() == 3) { // 查询采购入库记录 LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper() .eq(ProcurementRecordStorage::getSalesLedgerProductId, req.getSalesLedgerProductId()); ProcurementRecordStorage procurementRecordStorage = procurementRecordStorageService.getOne(lambdaQueryWrapper); if (procurementRecordStorage == null) { // 保证前面的修改全部回滚 throw new ServiceException("采购记录不存在,审批回滚"); } // 生成出库记录 ProcurementRecordOutAdd procurementRecordOutAdd = new ProcurementRecordOutAdd(); procurementRecordOutAdd.setId(procurementRecordStorage.getId()); procurementRecordOutAdd.setSalesLedgerProductId(Math.toIntExact(salesLedgerProduct.getId())); procurementRecordOutAdd.setType(2); procurementRecordOutAdd.setUserId(Math.toIntExact(getUserId())); procurementRecordOutAdd.setQuantity(salesLedgerProduct.getQuantity().toPlainString()); procurementRecordOutAdd.setTime(LocalDate.now().toString()); procurementRecordOutService.stockout(procurementRecordOutAdd); } return AjaxResult.success(); } /** * 导出发货信息管理 */ @PostMapping("/export") @ApiOperation("导出发货审批") public void export(HttpServletResponse response) { List list = shipmentApprovalService.list(null); ExcelUtil util = new ExcelUtil(ShipmentApproval.class); util.exportExcel(response, list, "发货审批"); } }