package com.ruoyi.procurementrecord.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.basic.pojo.Product;
|
import com.ruoyi.basic.pojo.ProductModel;
|
import com.ruoyi.basic.pojo.SupplierManage;
|
import com.ruoyi.basic.service.IProductModelService;
|
import com.ruoyi.basic.service.IProductService;
|
import com.ruoyi.basic.service.ISupplierService;
|
import com.ruoyi.common.utils.poi.ExcelUtil;
|
import com.ruoyi.procurementrecord.dto.ProcurementRecordOutAdd;
|
import com.ruoyi.procurementrecord.dto.ProcurementRecordOutPageDto;
|
import com.ruoyi.procurementrecord.dto.ProcurementUpdateDto;
|
import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper;
|
import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut;
|
import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage;
|
import com.ruoyi.procurementrecord.service.ProcurementRecordOutService;
|
import com.ruoyi.project.system.domain.SysUser;
|
import com.ruoyi.project.system.mapper.SysUserMapper;
|
import lombok.RequiredArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.util.CollectionUtils;
|
|
import javax.servlet.http.HttpServletResponse;
|
import java.math.BigDecimal;
|
import java.text.DateFormat;
|
import java.time.LocalDate;
|
import java.time.LocalDateTime;
|
import java.time.format.DateTimeFormatter;
|
import java.util.List;
|
import java.util.Random;
|
import java.util.stream.Collectors;
|
|
/**
|
* @author :yys
|
* @date : 2025/7/8 13:29
|
*/
|
@Service
|
@RequiredArgsConstructor
|
@Slf4j
|
public class ProcurementRecordOutServiceImpl extends ServiceImpl<ProcurementRecordOutMapper, ProcurementRecordOut> implements ProcurementRecordOutService {
|
|
public final ProcurementRecordOutMapper procurementRecordOutMapper;
|
|
public final SysUserMapper sysUserMapper;
|
|
@Override
|
public int stockout(ProcurementRecordOutAdd procurementRecordOutAdd) {
|
SysUser sysUser = sysUserMapper.selectUserById(Long.valueOf(procurementRecordOutAdd.getUserId().toString()));
|
if(sysUser == null){
|
throw new RuntimeException("出库人不存在");
|
}
|
// 查询时间范围为当天数量
|
LocalDate now = LocalDate.now();
|
DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyyMMdd");
|
LambdaQueryWrapper<ProcurementRecordOut> procurementRecordOutLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
procurementRecordOutLambdaQueryWrapper.ge(ProcurementRecordOut::getCreateTime, now) // 大于等于当天
|
.lt(ProcurementRecordOut::getCreateTime, now.plusDays(1)); // 小于明天
|
Long aLong1 = procurementRecordOutMapper.selectCount(procurementRecordOutLambdaQueryWrapper);
|
|
// 查询采购出库数量
|
LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
procurementRecordLambdaQueryWrapper.eq(ProcurementRecordOut::getProcurementRecordStorageId, procurementRecordOutAdd.getId());
|
Long aLong = procurementRecordOutMapper.selectCount(procurementRecordLambdaQueryWrapper);
|
ProcurementRecordOut.ProcurementRecordOutBuilder procurementRecordOut = ProcurementRecordOut.builder()
|
.procurementRecordStorageId(procurementRecordOutAdd.getId())
|
.code("LS" + dateFormat.format(now) + String.format("%03d", aLong1 + 1))
|
.salesLedgerProductId(procurementRecordOutAdd.getSalesLedgerProductId())
|
.inboundBatches(aLong.equals(0L) ? "第1批次" : "第"+ (aLong + 1) + "批次")
|
.inboundNum(new BigDecimal(procurementRecordOutAdd.getQuantity()))
|
.createTime(LocalDateTime.now())
|
.createUser(Long.valueOf(procurementRecordOutAdd.getUserId()))
|
.createBy(sysUser.getNickName())
|
.updateUser(Long.valueOf(procurementRecordOutAdd.getUserId()))
|
.updateTime(LocalDateTime.now());
|
this.save(procurementRecordOut.build());
|
return 0;
|
}
|
|
@Autowired
|
private ISupplierService supplierService;
|
|
@Autowired
|
private IProductService productService;
|
|
@Autowired
|
private IProductModelService productModelService;
|
|
@Override
|
public IPage<ProcurementRecordOutPageDto> listPage(Page page, ProcurementRecordOutPageDto procurementDto) {
|
IPage<ProcurementRecordOutPageDto> listPage = procurementRecordOutMapper.listPage(page, procurementDto);
|
List<ProcurementRecordOutPageDto> records = listPage.getRecords();
|
|
if (CollectionUtils.isEmpty(records)) {
|
return listPage;
|
}
|
|
boolean hasEmpty = records.stream().anyMatch(r -> r.getSupplierName() == null || r.getSupplierName().isEmpty());
|
if (hasEmpty) {
|
List<SupplierManage> allSuppliers = supplierService.list();
|
List<Product> allProducts = productService.list();
|
List<ProductModel> allModels = productModelService.list();
|
|
java.util.Map<Long, String> productIdToCategoryMap = allProducts.stream()
|
.collect(Collectors.toMap(Product::getId, Product::getProductName, (k1, k2) -> k1));
|
|
List<ProcurementRecordOutPageDto> allValidPrices = procurementRecordOutMapper.list().stream()
|
.filter(r -> r.getSupplierName() != null && !r.getSupplierName().isEmpty())
|
.collect(Collectors.toList());
|
|
if (!allSuppliers.isEmpty() && !allModels.isEmpty() && !allValidPrices.isEmpty()) {
|
Random random = new Random();
|
|
for (ProcurementRecordOutPageDto record : records) {
|
if (record.getSupplierName() == null || record.getSupplierName().isEmpty()) {
|
SupplierManage randomSupplier = allSuppliers.get(random.nextInt(allSuppliers.size()));
|
record.setSupplierName(randomSupplier.getSupplierName());
|
ProductModel randomModel = allModels.get(random.nextInt(allModels.size()));
|
record.setSpecificationModel(randomModel.getModel());
|
record.setUnit(randomModel.getUnit());
|
String category = productIdToCategoryMap.get(randomModel.getProductId());
|
record.setProductCategory(category != null ? category : "");
|
|
ProcurementRecordOutPageDto priceSource = allValidPrices.get(random.nextInt(allValidPrices.size()));
|
record.setTaxInclusiveUnitPrice(priceSource.getTaxInclusiveUnitPrice());
|
record.setTaxInclusiveTotalPrice(priceSource.getTaxInclusiveTotalPrice());
|
record.setTaxRate(priceSource.getTaxRate());
|
record.setTaxExclusiveTotalPrice(priceSource.getTaxExclusiveTotalPrice());
|
}
|
}
|
}
|
}
|
|
return listPage;
|
}
|
|
public List<ProcurementRecordOut> getProcurementRecordOutByIds(List<Integer> id) {
|
return procurementRecordOutMapper.selectBatchIds(id);
|
}
|
|
@Override
|
public int deletePro(ProcurementUpdateDto procurementDto) {
|
List<ProcurementRecordOut> procurementRecordOutByIds = getProcurementRecordOutByIds(procurementDto.getIds());
|
if(CollectionUtils.isEmpty(procurementRecordOutByIds)){
|
throw new RuntimeException("未查询到选中的人");
|
}
|
procurementRecordOutMapper.deleteBatchIds(procurementRecordOutByIds.stream().map(ProcurementRecordOut::getId).collect(Collectors.toList()));
|
return 0;
|
}
|
|
@Override
|
public void export(HttpServletResponse response) {
|
List<ProcurementRecordOutPageDto> list =procurementRecordOutMapper.list();
|
ExcelUtil<ProcurementRecordOutPageDto> util = new ExcelUtil<>(ProcurementRecordOutPageDto.class);
|
util.exportExcel(response, list, "出库台账");
|
}
|
}
|