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<InvoiceRegistrationMapper, InvoiceRegistration> 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<InvoiceRegistrationProductDto> productDtoList = invoiceRegistrationDto.getProductDtoList();
|
Integer salesLedgerId = invoiceRegistrationDto.getSalesLedgerId();
|
if (null == salesLedgerId){
|
throw new RuntimeException("未关联销售合同");
|
}
|
QueryWrapper<InvoiceRegistration> 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<InvoiceRegistrationProduct> inRegProductWrapper = new QueryWrapper<>();
|
inRegProductWrapper.eq("invoice_registration_id", invoiceRegistrationId);
|
List<InvoiceRegistrationProduct> 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<Integer> ids) {
|
int excuteNum = invoiceRegistrationMapper.deleteBatchIds(ids);
|
LambdaQueryWrapper<InvoiceRegistrationProduct> 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<InvoiceRegistrationProductDto> 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<InvoiceRegistrationDto> invoiceRegistrationListPage(Page page, InvoiceRegistrationDto invoiceRegistrationDto) {
|
return invoiceRegistrationMapper.invoiceRegistrationListPage(page, invoiceRegistrationDto);
|
}
|
|
/**
|
* 开票登记产品查询
|
* @param invoiceRegistrationProductDto
|
* @return
|
*/
|
@Override
|
public List<InvoiceRegistrationProductDto> 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<InvoiceRegistrationProduct> queryWrapper = new QueryWrapper<>();
|
queryWrapper.eq("invoice_registration_id", id);
|
List<InvoiceRegistrationProduct> invoiceRegistrationProductList = invoiceRegistrationProductMapper.selectList(queryWrapper);
|
List<InvoiceRegistrationProductDto> 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<InvoiceRegisAndProductExcelDto> invoiceRegisAndProductExcelDtoList = invoiceRegistrationMapper.invoiceRegisAndProductExcelDtoList();
|
ExcelUtil<InvoiceRegisAndProductExcelDto> util = new ExcelUtil<InvoiceRegisAndProductExcelDto>(InvoiceRegisAndProductExcelDto.class);
|
util.exportExcel(response, invoiceRegisAndProductExcelDtoList, "开票登记信息");
|
}
|
}
|