package com.ruoyi.sales.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.approve.pojo.ApproveProcess; import com.ruoyi.approve.service.IApproveProcessService; import com.ruoyi.approve.service.impl.ApproveProcessServiceImpl; import com.ruoyi.approve.vo.ApproveGetAndUpdateVo; import com.ruoyi.approve.vo.ApproveProcessVO; import com.ruoyi.common.utils.OrderUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.common.utils.uuid.UUID; import com.ruoyi.framework.security.LoginUser; import com.ruoyi.sales.dto.SalesQuotationDto; import com.ruoyi.sales.mapper.SalesQuotationMapper; import com.ruoyi.sales.mapper.SalesQuotationProductMapper; import com.ruoyi.sales.pojo.SalesQuotation; import com.ruoyi.sales.pojo.SalesQuotationProduct; import com.ruoyi.sales.service.SalesQuotationProductService; import com.ruoyi.sales.service.SalesQuotationService; import org.springframework.beans.factory.annotation.Autowired; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; import java.util.List; import java.util.stream.Collectors; @Service @Transactional(rollbackFor = Exception.class) public class SalesQuotationServiceImpl extends ServiceImpl implements SalesQuotationService { @Autowired private SalesQuotationMapper salesQuotationMapper; @Autowired private SalesQuotationProductMapper salesQuotationProductMapper; @Autowired private SalesQuotationProductService salesQuotationProductService; @Autowired private ApproveProcessServiceImpl approveProcessService; @Override public IPage listPage(Page page, SalesQuotationDto salesQuotationDto) { IPage salesQuotationDtoIPage = salesQuotationMapper.listPage(page, salesQuotationDto); if(CollectionUtils.isEmpty(salesQuotationDtoIPage.getRecords())){ return salesQuotationDtoIPage; } salesQuotationDtoIPage.getRecords().forEach(record -> { List products = salesQuotationProductMapper.selectBySalesQuotationId(record.getId()); record.setProducts(products); }); return salesQuotationDtoIPage; } @Override public boolean add(SalesQuotationDto salesQuotationDto) { LoginUser loginUser = SecurityUtils.getLoginUser(); SalesQuotation salesQuotation = new SalesQuotation(); BeanUtils.copyProperties(salesQuotationDto, salesQuotation); String quotationNo = OrderUtils.countTodayByCreateTime(salesQuotationMapper, "QT"); salesQuotation.setQuotationNo(quotationNo); salesQuotation.setStatus("待审批"); salesQuotationMapper.insert(salesQuotation); if(CollectionUtils.isEmpty(salesQuotationDto.getProducts())){ return true; } List products = salesQuotationDto.getProducts().stream().map(product -> { SalesQuotationProduct salesQuotationProduct = new SalesQuotationProduct(); BeanUtils.copyProperties(product, salesQuotationProduct); salesQuotationProduct.setSalesQuotationId(salesQuotation.getId()); return salesQuotationProduct; }).collect(Collectors.toList()); salesQuotationProductService.saveBatch(products); // 报价审批 ApproveProcessVO approveProcessVO = new ApproveProcessVO(); approveProcessVO.setApproveType(6); approveProcessVO.setApproveDeptId(loginUser.getTenantId()); approveProcessVO.setApproveReason(quotationNo); approveProcessVO.setApproveUserIds(salesQuotationDto.getApproveUserIds()); approveProcessVO.setApproveUser(loginUser.getUserId()); approveProcessVO.setApproveTime(LocalDate.now().toString()); approveProcessVO.setPrice(salesQuotationDto.getTotalAmount()); try { approveProcessService.addApprove(approveProcessVO); }catch (Exception e){ log.error("SalesQuotationServiceImpl error:{}", e); throw new RuntimeException("审批失败"); } return true; } @Override public boolean edit(SalesQuotationDto salesQuotationDto) { SalesQuotation salesQuotation = new SalesQuotation(); BeanUtils.copyProperties(salesQuotationDto, salesQuotation); ApproveGetAndUpdateVo vo = new ApproveGetAndUpdateVo(); if("拒绝".equals(salesQuotationDto.getStatus())){ vo.setApproveStatus(0); salesQuotation.setStatus("待审批"); } if(salesQuotationMapper.updateById(salesQuotation)!=1){ return false; } salesQuotationProductMapper.delete(new LambdaQueryWrapper().eq(SalesQuotationProduct::getSalesQuotationId, salesQuotationDto.getId())); if(CollectionUtils.isEmpty(salesQuotationDto.getProducts())){ return true; } List products = salesQuotationDto.getProducts().stream().map(product -> { SalesQuotationProduct salesQuotationProduct = new SalesQuotationProduct(); BeanUtils.copyProperties(product, salesQuotationProduct); salesQuotationProduct.setSalesQuotationId(salesQuotation.getId()); return salesQuotationProduct; }).collect(Collectors.toList()); salesQuotationProductService.saveBatch(products); // 修改报价审批 vo.setApproveUserIds(salesQuotationDto.getApproveUserIds()); vo.setApproveType(6); vo.setApproveReason(salesQuotationDto.getQuotationNo()); approveProcessService.updateApproveUser(vo); return true; } @Override public boolean delete(Long id) { salesQuotationMapper.deleteById(id); salesQuotationProductMapper.delete(new LambdaQueryWrapper().eq(SalesQuotationProduct::getSalesQuotationId, id)); return true; } }