|
@@ -1,5 +1,6 @@
|
|
|
package org.dromara.customer.service.impl;
|
|
package org.dromara.customer.service.impl;
|
|
|
|
|
|
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import org.dromara.common.core.utils.MapstructUtils;
|
|
import org.dromara.common.core.utils.MapstructUtils;
|
|
@@ -72,76 +73,92 @@ public class SupplierContractServiceImpl extends ServiceImpl<SupplierContractMa
|
|
|
*/
|
|
*/
|
|
|
@Override
|
|
@Override
|
|
|
public TableDataInfo<SupplierContractVo> queryPageList(SupplierContractBo bo, PageQuery pageQuery) {
|
|
public TableDataInfo<SupplierContractVo> queryPageList(SupplierContractBo bo, PageQuery pageQuery) {
|
|
|
- if (bo.getSupplierName() != null){
|
|
|
|
|
- SupplierInfo one = supplierInfoService.getOne(new LambdaQueryWrapper<SupplierInfo>().eq(SupplierInfo::getEnterpriseName, bo.getSupplierName()));
|
|
|
|
|
- bo.setSupplierId(one.getId());
|
|
|
|
|
|
|
+ // 首先从SupplierInfo表进行分页查询
|
|
|
|
|
+ LambdaQueryWrapper<SupplierInfo> supplierInfoWrapper = Wrappers.lambdaQuery();
|
|
|
|
|
+ if (bo.getSupplierName() != null) {
|
|
|
|
|
+ supplierInfoWrapper.eq(SupplierInfo::getEnterpriseName, bo.getSupplierName());
|
|
|
}
|
|
}
|
|
|
- LambdaQueryWrapper<SupplierContract> lqw = buildQueryWrapper(bo);
|
|
|
|
|
- // 查询所有符合条件的记录
|
|
|
|
|
- List<SupplierContract> allRecords = baseMapper.selectList(lqw);
|
|
|
|
|
- // 获取当前时间(用于判断合同是否过期)
|
|
|
|
|
- Date now = new Date();
|
|
|
|
|
-
|
|
|
|
|
- // 按供应商ID分组,同时统计总数、有效数、失效数
|
|
|
|
|
- Map<Long, ContractCountDTO> countMap = allRecords.stream()
|
|
|
|
|
- .collect(Collectors.groupingBy(
|
|
|
|
|
- SupplierContract::getSupplierId,
|
|
|
|
|
- Collectors.collectingAndThen(
|
|
|
|
|
- Collectors.toList(),
|
|
|
|
|
- list -> {
|
|
|
|
|
- // 统计总数
|
|
|
|
|
- long total = list.size();
|
|
|
|
|
- // 统计有效期内合同数
|
|
|
|
|
- long validCount = list.stream()
|
|
|
|
|
- .filter(contract ->
|
|
|
|
|
- // 状态为已生效 且 到期时间晚于当前时间
|
|
|
|
|
- 1L == (contract.getContractStatus())
|
|
|
|
|
- && contract.getContractEndTime().after(now)
|
|
|
|
|
- ).count();
|
|
|
|
|
- // 统计失效合同数(总数 - 有效数)
|
|
|
|
|
- long invalidCount = total - validCount;
|
|
|
|
|
- return new ContractCountDTO(total, validCount, invalidCount);
|
|
|
|
|
- }
|
|
|
|
|
- )
|
|
|
|
|
- ));
|
|
|
|
|
-
|
|
|
|
|
- // 转换为VO列表并排序
|
|
|
|
|
- List<SupplierContractVo> contractStats = countMap.entrySet().stream()
|
|
|
|
|
- .map(entry -> {
|
|
|
|
|
- Long supplierId = entry.getKey();
|
|
|
|
|
- ContractCountDTO countDTO = entry.getValue();
|
|
|
|
|
|
|
+ if (bo.getSupplierId()!=null){
|
|
|
|
|
+ supplierInfoWrapper.eq(SupplierInfo::getId, bo.getSupplierId());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 添加其他SupplierInfo表的查询条件
|
|
|
|
|
+ supplierInfoWrapper.orderByDesc(SupplierInfo::getSupplierNo);
|
|
|
|
|
+
|
|
|
|
|
+ // 执行分页查询供应商信息
|
|
|
|
|
+ Page<SupplierInfo> supplierPage = new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize());
|
|
|
|
|
+ IPage<SupplierInfo> supplierInfoPage = supplierInfoService.page(supplierPage, supplierInfoWrapper);
|
|
|
|
|
+ List<SupplierInfo> supplierInfoList = supplierInfoPage.getRecords();
|
|
|
|
|
+
|
|
|
|
|
+ // 获取所有供应商ID,用于后续查询合同统计信息
|
|
|
|
|
+ List<Long> supplierIds = supplierInfoList.stream()
|
|
|
|
|
+ .map(SupplierInfo::getId)
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
|
|
|
|
|
+ // 查询所有供应商的合同统计信息
|
|
|
|
|
+ Map<Long, ContractCountDTO> contractStatsMap = new HashMap<>();
|
|
|
|
|
+ if (!supplierIds.isEmpty()) {
|
|
|
|
|
+ // 查询所有相关合同
|
|
|
|
|
+ LambdaQueryWrapper<SupplierContract> contractWrapper = Wrappers.lambdaQuery();
|
|
|
|
|
+ contractWrapper.in(SupplierContract::getSupplierId, supplierIds);
|
|
|
|
|
+ List<SupplierContract> allContracts = baseMapper.selectList(contractWrapper);
|
|
|
|
|
+
|
|
|
|
|
+ // 获取当前时间(用于判断合同是否过期)
|
|
|
|
|
+ Date now = new Date();
|
|
|
|
|
+
|
|
|
|
|
+ // 按供应商ID分组统计合同信息
|
|
|
|
|
+ contractStatsMap = allContracts.stream()
|
|
|
|
|
+ .collect(Collectors.groupingBy(
|
|
|
|
|
+ SupplierContract::getSupplierId,
|
|
|
|
|
+ Collectors.collectingAndThen(
|
|
|
|
|
+ Collectors.toList(),
|
|
|
|
|
+ list -> {
|
|
|
|
|
+ // 统计总数
|
|
|
|
|
+ long total = list.size();
|
|
|
|
|
+ // 统计有效期内合同数(状态为已生效 且 到期时间晚于当前时间)
|
|
|
|
|
+ long validCount = list.stream()
|
|
|
|
|
+ .filter(contract ->
|
|
|
|
|
+ 2L != (contract.getContractStatus())
|
|
|
|
|
+ && contract.getContractEndTime() != null && contract.getContractEndTime().after(now)
|
|
|
|
|
+ ).count();
|
|
|
|
|
+ // 统计失效合同数(总数 - 有效数)
|
|
|
|
|
+ long invalidCount = total - validCount;
|
|
|
|
|
+ return new ContractCountDTO(total, validCount, invalidCount);
|
|
|
|
|
+ }
|
|
|
|
|
+ )
|
|
|
|
|
+ ));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 将供应商信息和合同统计信息组合成VO列表
|
|
|
|
|
+ final Map<Long, ContractCountDTO> finalContractStatsMap = contractStatsMap; // 创建final副本
|
|
|
|
|
+ List<SupplierContractVo> contractStats = supplierInfoList.stream()
|
|
|
|
|
+ .map(supplierInfo -> {
|
|
|
SupplierContractVo vo = new SupplierContractVo();
|
|
SupplierContractVo vo = new SupplierContractVo();
|
|
|
- vo.setSupplierId(supplierId);
|
|
|
|
|
- // 合同总数
|
|
|
|
|
|
|
+ vo.setSupplierId(supplierInfo.getId());
|
|
|
|
|
+ vo.setSupplierNo(supplierInfo.getSupplierNo());
|
|
|
|
|
+ vo.setSupplierName(supplierInfo.getEnterpriseName());
|
|
|
|
|
+
|
|
|
|
|
+ // 获取合同统计信息,如果没有则创建默认值为0的统计对象
|
|
|
|
|
+ ContractCountDTO defaultCountDTO = new ContractCountDTO(0, 0, 0);
|
|
|
|
|
+ ContractCountDTO countDTO = finalContractStatsMap.getOrDefault(supplierInfo.getId(),
|
|
|
|
|
+ defaultCountDTO);
|
|
|
|
|
+
|
|
|
|
|
+ // 设置合同数统计
|
|
|
vo.setContractNum(String.valueOf(countDTO.getTotal()));
|
|
vo.setContractNum(String.valueOf(countDTO.getTotal()));
|
|
|
- // 有效期内合同数
|
|
|
|
|
vo.setValidContract(String.valueOf(countDTO.getValidCount()));
|
|
vo.setValidContract(String.valueOf(countDTO.getValidCount()));
|
|
|
- // 失效合同数
|
|
|
|
|
vo.setInvalidContract(String.valueOf(countDTO.getInvalidCount()));
|
|
vo.setInvalidContract(String.valueOf(countDTO.getInvalidCount()));
|
|
|
|
|
|
|
|
- // 查询供应商基本信息
|
|
|
|
|
- SupplierInfo supplier = supplierInfoService.getById(supplierId);
|
|
|
|
|
- if (supplier != null) { // 增加空指针防护
|
|
|
|
|
- vo.setSupplierName(supplier.getEnterpriseName());
|
|
|
|
|
- vo.setSupplierNo(supplier.getSupplierNo());
|
|
|
|
|
- }
|
|
|
|
|
return vo;
|
|
return vo;
|
|
|
})
|
|
})
|
|
|
- .sorted((a, b) -> b.getSupplierNo().compareTo(a.getSupplierNo()))
|
|
|
|
|
.collect(Collectors.toList());
|
|
.collect(Collectors.toList());
|
|
|
-
|
|
|
|
|
- // 分页处理
|
|
|
|
|
- int total = contractStats.size();
|
|
|
|
|
- int start = (int) ((pageQuery.getPageNum() - 1) * pageQuery.getPageSize());
|
|
|
|
|
- int end = Math.min(start + pageQuery.getPageSize(), total);
|
|
|
|
|
- List<SupplierContractVo> pagedResult = start > end ? List.of() : contractStats.subList(start, end);
|
|
|
|
|
-
|
|
|
|
|
|
|
+ // 构建分页结果
|
|
|
Page<SupplierContractVo> result = new Page<>();
|
|
Page<SupplierContractVo> result = new Page<>();
|
|
|
- result.setRecords(pagedResult);
|
|
|
|
|
- result.setTotal(total);
|
|
|
|
|
- result.setSize(pageQuery.getPageSize());
|
|
|
|
|
- result.setCurrent(pageQuery.getPageNum());
|
|
|
|
|
|
|
+ result.setRecords(contractStats);
|
|
|
|
|
+ result.setTotal(supplierInfoPage.getTotal());
|
|
|
|
|
+ result.setSize(supplierInfoPage.getSize());
|
|
|
|
|
+ result.setCurrent(supplierInfoPage.getCurrent());
|
|
|
return TableDataInfo.build(result);
|
|
return TableDataInfo.build(result);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -207,10 +224,11 @@ public class SupplierContractServiceImpl extends ServiceImpl<SupplierContractMa
|
|
|
lqw.like(StringUtils.isNotBlank(bo.getContractName()), SupplierContract::getContractName, bo.getSupplierName());
|
|
lqw.like(StringUtils.isNotBlank(bo.getContractName()), SupplierContract::getContractName, bo.getSupplierName());
|
|
|
lqw.eq(StringUtils.isNotBlank(bo.getSupplierNo()), SupplierContract::getSupplierNo, bo.getSupplierNo());
|
|
lqw.eq(StringUtils.isNotBlank(bo.getSupplierNo()), SupplierContract::getSupplierNo, bo.getSupplierNo());
|
|
|
lqw.eq(bo.getContractStatus()!=null, SupplierContract::getContractStatus, bo.getContractStatus());
|
|
lqw.eq(bo.getContractStatus()!=null, SupplierContract::getContractStatus, bo.getContractStatus());
|
|
|
- lqw.gt(bo.getContractStartTime() !=null, SupplierContract::getContractStartTime, bo.getContractStartTime());
|
|
|
|
|
- lqw.lt(bo.getContractEndTime() !=null, SupplierContract::getContractEndTime, bo.getContractEndTime());
|
|
|
|
|
|
|
+ lqw.ge(bo.getContractStartTime() !=null, SupplierContract::getContractStartTime, bo.getContractStartTime());
|
|
|
|
|
+ lqw.le(bo.getContractEndTime() !=null, SupplierContract::getContractEndTime, bo.getContractEndTime());
|
|
|
lqw.eq(bo.getContractStatus() != null, SupplierContract::getContractStatus, bo.getContractStatus());
|
|
lqw.eq(bo.getContractStatus() != null, SupplierContract::getContractStatus, bo.getContractStatus());
|
|
|
lqw.eq(bo.getSupplierId() != null && !bo.getSupplierId().equals(""),SupplierContract::getSupplierId, bo.getSupplierId());
|
|
lqw.eq(bo.getSupplierId() != null && !bo.getSupplierId().equals(""),SupplierContract::getSupplierId, bo.getSupplierId());
|
|
|
|
|
+ lqw.eq(bo.getContractType() !=null, SupplierContract::getContractType, bo.getContractType());
|
|
|
return lqw;
|
|
return lqw;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -287,5 +305,14 @@ public class SupplierContractServiceImpl extends ServiceImpl<SupplierContractMa
|
|
|
return baseMapper.deleteByIds(ids) > 0;
|
|
return baseMapper.deleteByIds(ids) > 0;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public int updateExpiredContractStatus() {
|
|
|
|
|
+ // 创建更新条件:合同到期时间小于当前时间且合同状态不是已到期、已终止或已作废
|
|
|
|
|
+ LambdaUpdateWrapper<SupplierContract> updateWrapper = new LambdaUpdateWrapper<>();
|
|
|
|
|
+ updateWrapper.lt(SupplierContract::getContractEndTime, new Date()); // 合同到期时间小于当前时间
|
|
|
|
|
+ updateWrapper.notIn(SupplierContract::getContractStatus, 2L); // 不是已到期、已终止或已作废状态
|
|
|
|
|
+ updateWrapper.set(SupplierContract::getContractStatus, 2L); // 设置为已到期状态
|
|
|
|
|
+ // 执行更新操作
|
|
|
|
|
+ return baseMapper.update(null, updateWrapper);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|