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.ruoyi.common.enums.FileNameType; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.other.service.impl.TempFileServiceImpl; import com.ruoyi.sales.dto.ShippingInfoDto; import com.ruoyi.sales.pojo.ShippingInfo; import com.ruoyi.sales.pojo.ShippingInfoDetail; import com.ruoyi.sales.mapper.ShippingInfoDetailMapper; import com.ruoyi.sales.service.ShippingInfoDetailService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.sales.service.ShippingInfoService; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.io.IOException; import java.math.BigDecimal; import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.Optional; /** *

* 发货明细表 服务实现类 *

* * @author 芯导软件(江苏)有限公司 * @since 2026-03-16 01:27:40 */ @Service public class ShippingInfoDetailServiceImpl extends ServiceImpl implements ShippingInfoDetailService { @Autowired private ShippingInfoDetailMapper shippingInfoDetailMapper; @Autowired private ShippingInfoService shippingInfoService; @Autowired private TempFileServiceImpl tempFileService; @Autowired private CommonFileServiceImpl commonFileService; @Override public IPage listPage(Page page, ShippingInfoDetail shippingInfoDetail) { IPage shippingInfoDetailIPage = shippingInfoDetailMapper.listPage(page, shippingInfoDetail); shippingInfoDetailIPage.getRecords().forEach(item ->{ item.setCommonFileList(commonFileService.getFileListByBusinessId(item.getId(), FileNameType.SHIP.getValue())); }); return shippingInfoDetailIPage; } @Override public AjaxResult updateShippingInfoDetail(ShippingInfoDetail shippingInfoDetail) { return AjaxResult.success(shippingInfoDetailMapper.updateById(shippingInfoDetail)); } @Override public AjaxResult add(ShippingInfoDetail shippingInfoDetail) throws IOException { BigDecimal shippingSuccessTotal = getShippingSuccessTotal(shippingInfoDetail.getShippingInfoId()); BigDecimal add = shippingSuccessTotal.add(shippingInfoDetail.getShippingNum()); shippingInfoDetailMapper.insert(shippingInfoDetail); ShippingInfoDto shippingInfo = new ShippingInfoDto(); BeanUtils.copyProperties(shippingInfoDetail, shippingInfo); shippingInfo.setId(shippingInfoDetail.getShippingInfoId()); // 判断是不是最后一批货 if (add.compareTo(shippingInfoDetail.getShippingTotal()) == 0) { shippingInfo.setStatus("已发货"); }else{ shippingInfo.setStatus("发货中"); } shippingInfoService.deductStock(shippingInfo); // 迁移文件 if(CollectionUtils.isNotEmpty(shippingInfoDetail.getTempFileIds())){ tempFileService.migrateTempFilesToFormal(shippingInfoDetail.getId(), shippingInfoDetail.getTempFileIds(), FileNameType.SHIP.getValue()); } return AjaxResult.success("发货成功"); } @Override public AjaxResult delete(List ids) { boolean b = this.removeByIds(ids); // 删除附件 commonFileService.deleteByBusinessIds(ids, FileNameType.SHIP.getValue()); return b ? AjaxResult.success("删除成功") : AjaxResult.error("删除失败"); } /** * 通过发货信息id获取已发货数量 */ public BigDecimal getShippingSuccessTotal(Long shippingInfoId) { List shippingInfoDetails = shippingInfoDetailMapper.selectList(new LambdaQueryWrapper() .eq(ShippingInfoDetail::getShippingInfoId, shippingInfoId)); return Optional.ofNullable(shippingInfoDetails) .orElse(Collections.emptyList()) .stream() .filter(Objects::nonNull) .map(ShippingInfoDetail::getShippingNum) .reduce(BigDecimal.ZERO, BigDecimal::add); } }