| | |
| | | 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 |
| | |
| | | @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()); |
| | | shippingAddressHandleService.save(infoId, saveInfoVo.getShippingAddress()); |
| | | contractInfoHandleService.save(infoId, saveInfoVo.getContractInfo()); |
| | | salesLedgerService.handleSalesLedgerProducts(infoId, saveInfoVo.getSalesLedgerProductList(), SaleEnum.MANAGEMENT); |
| | | 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; |
| | | } |
| | | |
| | | } |