package com.ruoyi.purchase.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.ruoyi.common.exception.base.BaseException;
|
import com.ruoyi.common.utils.StringUtils;
|
import com.ruoyi.common.utils.bean.BeanUtils;
|
import com.ruoyi.project.system.domain.SysUser;
|
import com.ruoyi.project.system.mapper.SysUserMapper;
|
import com.ruoyi.purchase.dto.TicketRegistrationDto;
|
import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
|
import com.ruoyi.purchase.mapper.TicketRegistrationMapper;
|
import com.ruoyi.purchase.pojo.PurchaseLedger;
|
import com.ruoyi.purchase.pojo.TicketRegistration;
|
import com.ruoyi.purchase.service.ITicketRegistrationService;
|
import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
|
import com.ruoyi.sales.pojo.SalesLedgerProduct;
|
import lombok.AllArgsConstructor;
|
import org.springframework.stereotype.Service;
|
|
import java.util.Arrays;
|
import java.util.List;
|
import java.util.stream.Collectors;
|
|
/**
|
* 来票登记Service业务层处理
|
*
|
* @author ruoyi
|
* @date 2025-05-13
|
*/
|
@Service
|
@AllArgsConstructor
|
public class TicketRegistrationServiceImpl extends ServiceImpl<TicketRegistrationMapper, TicketRegistration> implements ITicketRegistrationService {
|
|
private TicketRegistrationMapper ticketRegistrationMapper;
|
|
private PurchaseLedgerMapper purchaseLedgerMapper;
|
|
private SalesLedgerProductMapper salesLedgerProductMapper;
|
|
private SysUserMapper userMapper;
|
|
|
@Override
|
public List<TicketRegistration> selectTicketRegistrationList(TicketRegistration ticketRegistration) {
|
LambdaQueryWrapper<TicketRegistration> queryWrapper = new LambdaQueryWrapper<>();
|
if (StringUtils.isNotBlank(ticketRegistration.getPurchaseContractNumber())) {
|
queryWrapper.like(TicketRegistration::getPurchaseContractNumber,ticketRegistration.getPurchaseContractNumber());
|
}
|
return ticketRegistrationMapper.selectList(queryWrapper);
|
}
|
|
@Override
|
public int addOrUpdateRegistration(TicketRegistrationDto ticketRegistrationDto) {
|
PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectById(ticketRegistrationDto.getPurchaseLedgerId());
|
SysUser sysUser = userMapper.selectUserById(ticketRegistrationDto.getBusinessPersonId());
|
TicketRegistration ticketRegistration = new TicketRegistration();
|
BeanUtils.copyProperties(ticketRegistrationDto, ticketRegistration);
|
ticketRegistration.setPurchaseContractNumber(purchaseLedger.getPurchaseContractNumber());
|
ticketRegistration.setBusinessPerson(sysUser.getNickName());
|
ticketRegistration.setTenantId(purchaseLedger.getTenantId());
|
ticketRegistration.setContractAmount(purchaseLedger.getContractAmount());
|
|
// 处理子表数据
|
List<SalesLedgerProduct> productData = ticketRegistrationDto.getProductData();
|
if (productData != null && !productData.isEmpty()) {
|
handleSalesLedgerProducts(purchaseLedger.getId(), productData, 2);
|
}
|
|
// 执行插入或更新操作
|
if (ticketRegistrationDto.getId() == null) {
|
return ticketRegistrationMapper.insert(ticketRegistration);
|
} else {
|
return ticketRegistrationMapper.updateById(ticketRegistration);
|
}
|
}
|
|
@Override
|
public int delRegistration(Long[] ids) {
|
return ticketRegistrationMapper.deleteBatchIds(Arrays.asList(ids));
|
}
|
|
@Override
|
public TicketRegistrationDto getRegistrationById(TicketRegistrationDto ticketRegistrationDto) {
|
TicketRegistration ticketRegistration = ticketRegistrationMapper.selectById(ticketRegistrationDto.getId());
|
LambdaQueryWrapper<PurchaseLedger> purchaseQueryWrapper = new LambdaQueryWrapper<>();
|
purchaseQueryWrapper.eq(PurchaseLedger::getId,ticketRegistration.getPurchaseLedgerId());
|
PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectOne(purchaseQueryWrapper);
|
if (ticketRegistration == null) {
|
throw new BaseException("采购台账不存在");
|
}
|
// 创建并填充DTO
|
TicketRegistrationDto resultDto = new TicketRegistrationDto();
|
BeanUtils.copyProperties(ticketRegistration,resultDto);
|
|
// 查询并设置关联产品
|
LambdaQueryWrapper<SalesLedgerProduct> queryWrapper = new LambdaQueryWrapper<>();
|
queryWrapper.eq(SalesLedgerProduct::getSalesLedgerId, purchaseLedger.getId())
|
.eq(SalesLedgerProduct::getType, 2);
|
List<SalesLedgerProduct> productList = salesLedgerProductMapper.selectList(queryWrapper);
|
resultDto.setProductData(productList);
|
|
return resultDto;
|
}
|
|
private void handleSalesLedgerProducts(Long salesLedgerId, List<SalesLedgerProduct> products, Integer type) {
|
if (products == null || products.isEmpty()) {
|
return;
|
}
|
|
// 过滤出有 ID 的记录(即需要更新的记录)
|
List<SalesLedgerProduct> updateList = products.stream()
|
.filter(p -> p.getId() != null)
|
.peek(p -> {
|
p.setSalesLedgerId(salesLedgerId);
|
p.setType(type);
|
})
|
.collect(Collectors.toList()); // Java 8 兼容写法
|
|
// 批量更新(需要 MyBatis 提供批量更新方法)
|
if (!updateList.isEmpty()) {
|
updateList.forEach(product -> {
|
product.setType(type);
|
salesLedgerProductMapper.updateById(product);
|
});
|
}
|
}
|
}
|