package com.ruoyi.sales.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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.excel.SupplierManageExcelDto; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.sales.dto.InvoiceRegistrationDto; import com.ruoyi.sales.dto.InvoiceRegistrationProductDto; import com.ruoyi.sales.excel.InvoiceRegisAndProductExcelDto; import com.ruoyi.sales.mapper.InvoiceRegistrationMapper; import com.ruoyi.sales.mapper.InvoiceRegistrationProductMapper; import com.ruoyi.sales.mapper.InvoiceRegistrationProductRecordMapper; import com.ruoyi.sales.mapper.InvoiceRegistrationRecordMapper; import com.ruoyi.sales.pojo.InvoiceRegistration; import com.ruoyi.sales.pojo.InvoiceRegistrationProduct; import com.ruoyi.sales.pojo.InvoiceRegistrationProductRecord; import com.ruoyi.sales.pojo.InvoiceRegistrationRecord; import com.ruoyi.sales.service.InvoiceRegistrationService; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.util.List; import java.util.stream.Collectors; @Service public class InvoiceRegistrationServiceImpl extends ServiceImpl implements InvoiceRegistrationService { @Autowired private InvoiceRegistrationMapper invoiceRegistrationMapper; @Autowired private InvoiceRegistrationProductMapper invoiceRegistrationProductMapper; @Autowired private InvoiceRegistrationRecordMapper invoiceRegistrationRecordMapper; @Autowired private InvoiceRegistrationProductRecordMapper invoiceRegistrationProductRecordMapper; /** * 开票登记新增 * @param invoiceRegistrationDto * @return */ @Override @Transactional(rollbackFor = Exception.class) public void invoiceRegistrationSaveOrUpdate(InvoiceRegistrationDto invoiceRegistrationDto) { List productDtoList = invoiceRegistrationDto.getProductDtoList(); Integer salesLedgerId = invoiceRegistrationDto.getSalesLedgerId(); if (null == salesLedgerId){ throw new RuntimeException("未关联销售合同"); } QueryWrapper inRegWrapper = new QueryWrapper<>(); inRegWrapper.eq("sales_ledger_id", salesLedgerId); InvoiceRegistration invoiceRegistration = invoiceRegistrationMapper.selectOne(inRegWrapper); Integer invoiceRegistrationId = null; // 判断是否已经做过登记,如果有合并,如果没有新增 if(ObjectUtils.isEmpty(invoiceRegistration)){ InvoiceRegistration insertInvocieReg = new InvoiceRegistration(); BeanUtils.copyProperties(invoiceRegistrationDto, insertInvocieReg); invoiceRegistrationMapper.insert(insertInvocieReg); invoiceRegistrationId = insertInvocieReg.getId(); }else { invoiceRegistrationId = invoiceRegistration.getId(); } // 查询产品是否已经登记 if(CollectionUtils.isNotEmpty(productDtoList)){ QueryWrapper inRegProductWrapper = new QueryWrapper<>(); inRegProductWrapper.eq("invoice_registration_id", invoiceRegistrationId); List invoiceRegistrationProductList = invoiceRegistrationProductMapper.selectList(inRegProductWrapper); if(CollectionUtils.isNotEmpty(invoiceRegistrationProductList)){ // 批量更新 for (InvoiceRegistrationProduct invoiceRegistrationProduct : invoiceRegistrationProductList) { for (InvoiceRegistrationProductDto invoiceRegistrationProductDto : productDtoList) { if( null != invoiceRegistrationProductDto.getId() && null != invoiceRegistrationProduct.getSalesLedgerProductId() && invoiceRegistrationProductDto.getId() == invoiceRegistrationProduct.getSalesLedgerProductId().longValue() ){ // 计算已开票数 invoiceRegistrationProduct.setInvoiceNum(invoiceRegistrationProduct.getInvoiceNum() + invoiceRegistrationProductDto.getInvoiceNum()); // 计算已开票金额 invoiceRegistrationProduct.setInvoiceAmount(invoiceRegistrationProduct.getInvoiceAmount().add(invoiceRegistrationProductDto.getInvoiceAmount())); // // 计算未开票数 invoiceRegistrationProduct.setNoInvoiceNum(invoiceRegistrationProductDto.getNoInvoiceNum()); // // 计算未开票金额 含税总价-开票金额 invoiceRegistrationProduct.setNoInvoiceAmount(invoiceRegistrationProductDto.getNoInvoiceAmount()); invoiceRegistrationProductMapper.updateById(invoiceRegistrationProduct); } } } }else { // 批量插入 for (InvoiceRegistrationProductDto invoiceRegistrationProductDto : productDtoList) { InvoiceRegistrationProduct invoiceRegistrationProduct = new InvoiceRegistrationProduct(); BeanUtils.copyProperties(invoiceRegistrationProductDto, invoiceRegistrationProduct); invoiceRegistrationProduct.setInvoiceRegistrationId(invoiceRegistrationId); invoiceRegistrationProduct.setSalesLedgerProductId(invoiceRegistrationProductDto.getId()); invoiceRegistrationProduct.setId(null); invoiceRegistrationProductMapper.insert(invoiceRegistrationProduct); } } } // 保存本次开票登记记录 InvoiceRegistrationRecord invoiceRegistrationRecord = new InvoiceRegistrationRecord(); BeanUtils.copyProperties(invoiceRegistrationDto, invoiceRegistrationRecord); invoiceRegistrationRecordMapper.insert(invoiceRegistrationRecord); if(CollectionUtils.isNotEmpty(productDtoList)){ for (InvoiceRegistrationProductDto invoiceRegistrationProductDto : productDtoList) { InvoiceRegistrationProductRecord invoiceRegistrationProductRecord = new InvoiceRegistrationProductRecord(); BeanUtils.copyProperties(invoiceRegistrationProductDto, invoiceRegistrationProductRecord); invoiceRegistrationProductRecord.setInvoiceRegistrationRecordId(invoiceRegistrationRecord.getId()); invoiceRegistrationProductRecord.setSalesLedgerProductId(invoiceRegistrationProductDto.getId()); invoiceRegistrationProductRecord.setId(null); invoiceRegistrationProductRecordMapper.insert(invoiceRegistrationProductRecord); } } } /** * 开票登记删除 * @param ids * @return */ @Override @Transactional(rollbackFor = Exception.class) public int invoiceRegistrationDel(List ids) { int excuteNum = invoiceRegistrationMapper.deleteBatchIds(ids); LambdaQueryWrapper delWrapper = new LambdaQueryWrapper<>(); delWrapper.in(InvoiceRegistrationProduct::getInvoiceRegistrationId, ids); invoiceRegistrationProductMapper.delete(delWrapper); return excuteNum; } /** * 开票记录修改 * @param invoiceRegistrationDto * @return */ @Override public void invoiceRegistrationUpdate(InvoiceRegistrationDto invoiceRegistrationDto) { InvoiceRegistration invoiceRegistration = new InvoiceRegistration(); BeanUtils.copyProperties(invoiceRegistrationDto, invoiceRegistration); // 开票登记修改 invoiceRegistrationMapper.updateById(invoiceRegistration); List productDtoList = invoiceRegistrationDto.getProductDtoList(); // 开票产品登记修改 if(CollectionUtils.isNotEmpty(productDtoList)){ for (InvoiceRegistrationProductDto invoiceRegistrationProductDto : productDtoList) { InvoiceRegistrationProduct invoiceRegistrationProduct = new InvoiceRegistrationProduct(); BeanUtils.copyProperties(invoiceRegistrationProductDto, invoiceRegistrationProduct); invoiceRegistrationProductMapper.updateById(invoiceRegistrationProduct); } } } /** * 开票登记分页查询 * @param page * @param invoiceRegistrationDto * @return */ @Override public IPage invoiceRegistrationListPage(Page page, InvoiceRegistrationDto invoiceRegistrationDto) { return invoiceRegistrationMapper.invoiceRegistrationListPage(page, invoiceRegistrationDto); } /** * 开票登记产品查询 * @param invoiceRegistrationProductDto * @return */ @Override public List invoiceRegistrationProductList(InvoiceRegistrationProductDto invoiceRegistrationProductDto) { return invoiceRegistrationProductMapper.invoiceRegistrationProductList(invoiceRegistrationProductDto); } /** * 开票登记详情 * @param id * @return */ @Override public InvoiceRegistrationDto invoiceRegistrationDetail(Integer id) { InvoiceRegistration invoiceRegistration = invoiceRegistrationMapper.selectById(id); if(ObjectUtils.isEmpty(invoiceRegistration)){ throw new RuntimeException("开票登记信息查找失败"); } InvoiceRegistrationDto invoiceRegistrationDto = new InvoiceRegistrationDto(); BeanUtils.copyProperties(invoiceRegistration, invoiceRegistrationDto); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("invoice_registration_id", id); List invoiceRegistrationProductList = invoiceRegistrationProductMapper.selectList(queryWrapper); List invoiceRegistrationProductDtoList = invoiceRegistrationProductList.stream().map(item -> { InvoiceRegistrationProductDto invoiceRegistrationProductDto = new InvoiceRegistrationProductDto(); BeanUtils.copyProperties(item, invoiceRegistrationProductDto); return invoiceRegistrationProductDto; }).collect(Collectors.toList()); invoiceRegistrationDto.setProductDtoList(invoiceRegistrationProductDtoList); return invoiceRegistrationDto; } /** * 开票登记导出 * @param response * @param invoiceRegistrationDto */ @Override public void invoiceRegistrationExport(HttpServletResponse response, InvoiceRegistrationDto invoiceRegistrationDto) { List invoiceRegisAndProductExcelDtoList = invoiceRegistrationMapper.invoiceRegisAndProductExcelDtoList(); ExcelUtil util = new ExcelUtil(InvoiceRegisAndProductExcelDto.class); util.exportExcel(response, invoiceRegisAndProductExcelDtoList, "开票登记信息"); } }