package com.ruoyi.projectManagement.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.ruoyi.common.enums.IsDeleteEnum;
|
import com.ruoyi.common.enums.SaleEnum;
|
import com.ruoyi.projectManagement.dto.ContractInfoDto;
|
import com.ruoyi.projectManagement.dto.SaveInfoDto;
|
import com.ruoyi.projectManagement.dto.ShippingAddressDto;
|
import com.ruoyi.projectManagement.dto.UpdateStateInfo;
|
import com.ruoyi.projectManagement.mapper.InfoMapper;
|
import com.ruoyi.projectManagement.pojo.Info;
|
import com.ruoyi.projectManagement.service.InfoService;
|
import com.ruoyi.projectManagement.service.impl.handle.ContractInfoHandleService;
|
import com.ruoyi.projectManagement.service.impl.handle.InfoHandleService;
|
import com.ruoyi.projectManagement.service.impl.handle.ShippingAddressHandleService;
|
import com.ruoyi.projectManagement.vo.InfoVo;
|
import com.ruoyi.projectManagement.vo.ListInfoVo;
|
import com.ruoyi.projectManagement.vo.SaveInfoVo;
|
import com.ruoyi.projectManagement.vo.SearchInfoVo;
|
import com.ruoyi.sales.pojo.SalesLedgerProduct;
|
import com.ruoyi.sales.service.ISalesLedgerService;
|
import lombok.RequiredArgsConstructor;
|
import lombok.SneakyThrows;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.util.List;
|
import java.util.concurrent.CompletableFuture;
|
|
/**
|
* @author buhuazhen
|
* @date 2026/3/9
|
* @email 3038525872@qq.com
|
*/
|
@Service
|
@RequiredArgsConstructor
|
@Transactional(readOnly = true)
|
public class InfoServiceImpl implements InfoService {
|
private final InfoHandleService infoHandleService;
|
private final InfoMapper infoMapper;
|
private final ContractInfoHandleService contractInfoHandleService;
|
private final ShippingAddressHandleService shippingAddressHandleService;
|
private final ISalesLedgerService salesLedgerService;
|
|
|
@Transactional(rollbackFor = Exception.class)
|
@Override
|
public void save(SaveInfoVo saveInfoVo) {
|
// 保存主信息
|
Long infoId = infoHandleService.save(saveInfoVo.getInfo());
|
if(saveInfoVo.getShippingAddress() != null){
|
shippingAddressHandleService.save(infoId, saveInfoVo.getShippingAddress());
|
}
|
if(saveInfoVo.getContractInfo() != null){
|
contractInfoHandleService.save(infoId, saveInfoVo.getContractInfo());
|
}
|
if(saveInfoVo.getSalesLedgerProductList() != null){
|
salesLedgerService.handleSalesLedgerProducts(infoId, saveInfoVo.getSalesLedgerProductList(), SaleEnum.MANAGEMENT);
|
}
|
}
|
|
@Override
|
@Transactional
|
public void updateStatus(UpdateStateInfo updateStateInfo) {
|
Info info = new Info();
|
info.setId(updateStateInfo.getId());
|
// 审批状态
|
if(updateStateInfo.getReviewStatus() != null){
|
info.setReviewStatus(updateStateInfo.getReviewStatus().getCode());
|
}
|
|
// 进度状态
|
if(updateStateInfo.getStage() != null){
|
info.setStatus(updateStateInfo.getStage().getCode());
|
}
|
|
infoMapper.updateById(info);
|
}
|
|
@Override
|
@Transactional
|
public void deleteInfo(Long id) {
|
LambdaUpdateWrapper<Info> updateWrapper = new LambdaUpdateWrapper<Info>();
|
updateWrapper.eq(Info::getId, id);
|
updateWrapper.set(Info::getIsDelete, IsDeleteEnum.DELETED.getCode());
|
|
// 对应附表信息是否删除待确定(因为后续可能会进行引用所以先不删除
|
}
|
|
@Override
|
public Page<ListInfoVo> searchListInfo(SearchInfoVo vo) {
|
Page<ListInfoVo> listInfoVoPage = infoMapper.searchListInfo(vo);
|
|
|
return listInfoVoPage;
|
}
|
|
@Override
|
@SneakyThrows
|
public InfoVo getInfoById(Long id) {
|
|
CompletableFuture<SaveInfoDto> infoFuture = CompletableFuture.supplyAsync(() -> infoHandleService.getInfoById(id));
|
CompletableFuture<ContractInfoDto> contractFuture = CompletableFuture.supplyAsync(() -> contractInfoHandleService.getByInfoId(id));
|
CompletableFuture<ShippingAddressDto> shippingFuture = CompletableFuture.supplyAsync(() -> shippingAddressHandleService.getByInfoId(id));
|
CompletableFuture<List<SalesLedgerProduct>> listCompletableFuture = CompletableFuture.supplyAsync(() -> salesLedgerService.getSalesLedgerProductListByRelateId(id,SaleEnum.MANAGEMENT));
|
|
// 下级项目信息
|
CompletableFuture<List<SaveInfoDto>> subordinateInfoListFuture = CompletableFuture.supplyAsync(() -> infoHandleService.getSubordinateInfo(id));
|
|
// 商品
|
|
// 等待所有异步完成
|
CompletableFuture.allOf(infoFuture, contractFuture, shippingFuture).join();
|
|
SaveInfoDto info = infoFuture.get();
|
ContractInfoDto contract = contractFuture.get();
|
ShippingAddressDto shippingAddress = shippingFuture.get();
|
List<SalesLedgerProduct> salesLedgerProductList = listCompletableFuture.get();
|
List<SaveInfoDto> saveInfoDtos = subordinateInfoListFuture.get();
|
InfoVo vo = new InfoVo();
|
vo.setInfo(info);
|
vo.setContractInfo(contract);
|
vo.setShippingAddress(shippingAddress);
|
vo.setSalesLedgerProductList(salesLedgerProductList);
|
vo.setSubordinateInfoList(saveInfoDtos);
|
return vo;
|
}
|
|
}
|