package com.ruoyi.sales.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.approve.pojo.ApproveProcess; import com.ruoyi.approve.service.impl.ApproveProcessServiceImpl; import com.ruoyi.common.enums.FileNameType; import com.ruoyi.common.enums.StockQualifiedRecordTypeEnum; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.other.service.impl.TempFileServiceImpl; import com.ruoyi.procurementrecord.utils.StockUtils; import com.ruoyi.sales.dto.ShippingInfoDto; import com.ruoyi.sales.mapper.SalesLedgerProductMapper; import com.ruoyi.sales.mapper.ShippingInfoMapper; import com.ruoyi.sales.pojo.SalesLedgerProduct; import com.ruoyi.sales.pojo.ShippingInfo; import com.ruoyi.sales.service.ICommonFileService; import com.ruoyi.sales.service.ShippingInfoService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.io.IOException; import java.util.Collections; import java.util.List; /** * @author :yys * @date : 2025/10/22 9:33 */ @Service @Slf4j public class ShippingInfoServiceImpl extends ServiceImpl implements ShippingInfoService { @Autowired private ShippingInfoMapper shippingInfoMapper; @Autowired private TempFileServiceImpl tempFileService; @Autowired private SalesLedgerProductMapper salesLedgerProductMapper; @Autowired private StockUtils stockUtils; @Autowired private CommonFileServiceImpl commonFileService; @Autowired private ApproveProcessServiceImpl approveProcessService; @Override public IPage listPage(Page page, ShippingInfo req) { IPage listPage = shippingInfoMapper.listPage(page, req); return listPage; } @Override public boolean deductStock(ShippingInfoDto req) throws IOException { ShippingInfo byId = this.getById(req.getId()); if (byId == null) { throw new RuntimeException("发货信息不存在"); } byId.setExpressNumber(req.getExpressNumber()); byId.setExpressCompany(req.getExpressCompany()); byId.setStatus("已发货"); byId.setShippingCarNumber(req.getShippingCarNumber()); boolean update = this.updateById(req); //扣减库存 SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(req.getSalesLedgerProductId()); stockUtils.substractStock(salesLedgerProduct.getProductModelId(), salesLedgerProduct.getQuantity(), StockQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode(), req.getId()); // 迁移文件 if(CollectionUtils.isNotEmpty(req.getTempFileIds())){ tempFileService.migrateTempFilesToFormal(req.getId(), req.getTempFileIds(), FileNameType.SHIP.getValue()); } return update ; } @Override public boolean delete(List ids) { List shippingInfos = shippingInfoMapper.selectList(new LambdaQueryWrapper() .in(ShippingInfo::getId, ids)); // 删除附件 commonFileService.deleteByBusinessIds(ids, FileNameType.SHIP.getValue()); // 扣库存 for (Long id : ids) { stockUtils.deleteStockRecord(id, StockQualifiedRecordTypeEnum.SALE_SHIP_STOCK_OUT.getCode()); } // 删除发货审批 if(CollectionUtils.isNotEmpty(shippingInfos)){ for (ShippingInfo shippingInfo : shippingInfos){ ApproveProcess one = approveProcessService.getOne(new LambdaQueryWrapper() .like(ApproveProcess::getApproveReason, shippingInfo.getShippingNo())); if(one != null){ approveProcessService.delByIds(Collections.singletonList(one.getId())); } } } return this.removeBatchByIds(ids); } }