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 implements ITicketRegistrationService { private TicketRegistrationMapper ticketRegistrationMapper; private PurchaseLedgerMapper purchaseLedgerMapper; private SalesLedgerProductMapper salesLedgerProductMapper; private SysUserMapper userMapper; @Override public List selectTicketRegistrationList(TicketRegistration ticketRegistration) { LambdaQueryWrapper 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 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 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 queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SalesLedgerProduct::getSalesLedgerId, purchaseLedger.getId()) .eq(SalesLedgerProduct::getType, 2); List productList = salesLedgerProductMapper.selectList(queryWrapper); resultDto.setProductData(productList); return resultDto; } private void handleSalesLedgerProducts(Long salesLedgerId, List products, Integer type) { if (products == null || products.isEmpty()) { return; } // 过滤出有 ID 的记录(即需要更新的记录) List 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); }); } } }