feat(system): 优化合同查询功能

- 移除 AdminUserMapper 中的冗余查询和分组
- 在 LaborContractMapper 中添加新的查询方法 selectContractCount
- 更新 LaborContractServiceImpl 中的 pageContract 方法,添加签订次数统计
This commit is contained in:
furongxin 2024-12-09 15:40:06 +08:00
parent 8097eb2ea9
commit 6029bb270d
4 changed files with 37 additions and 3 deletions

View File

@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
import cn.iocoder.yudao.module.system.controller.admin.file.vo.FileRespVO;
import cn.iocoder.yudao.module.system.controller.admin.laborcontract.vo.LaborContractRespVO;
import cn.iocoder.yudao.module.system.dal.dataobject.laborcontract.LaborContractDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@ -38,4 +39,6 @@ public interface LaborContractMapper extends BaseMapperX<LaborContractDO> {
LaborContractDO getTheEarliestContract(@Param("userId") Long userId);
List<LaborContractDO> selectListByRemindDate(@Param("remindDate")LocalDate remindDate);
List<LaborContractRespVO> selectContractCount(@Param("userIds") List<Long> userIds);
}

View File

@ -120,8 +120,7 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
.selectAs("a.contractDuration", LaborContractRespVO::getContractDuration)
.selectAs("a.probationPeriodTime", LaborContractRespVO::getProbationPeriodTime)
.selectAs("a.status", LaborContractRespVO::getStatus)
.selectAs("a.createTime", LaborContractRespVO::getCreateTime)
.selectCount("a.id", LaborContractRespVO::getSigningCount);
.selectAs("a.createTime", LaborContractRespVO::getCreateTime);
queryWrapper.innerJoin(DeptDO.class, DeptDO::getId, AdminUserDO::getDeptId)
.leftJoin("(SELECT\n" +
" id,\n" +
@ -156,7 +155,6 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
queryWrapper.between("a.expiration_date", pageReqVO.getExpirationDate()[0], pageReqVO.getExpirationDate()[1]);
}
queryWrapper.eq(Objects.nonNull(pageReqVO.getStatus()), "a.status", pageReqVO.getStatus());
queryWrapper.groupBy(AdminUserDO::getId);
queryWrapper.orderByAsc("a.status");
queryWrapper.orderByAsc(AdminUserDO::getId);

View File

@ -22,10 +22,12 @@ import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.LABOR_CONTRACT_NOT_EXISTS;
/**
@ -126,6 +128,21 @@ public class LaborContractServiceImpl implements LaborContractService {
Page<LaborContractRespVO> page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
IPage<LaborContractRespVO> pageList = userMapper.selectContractPage(page, pageReqVO);
if (CollectionUtil.isNotEmpty(pageList.getRecords())) {
List<Long> userIds = convertList(pageList.getRecords(), LaborContractRespVO::getUserId);
List<LaborContractRespVO> countRespVOs = laborContractMapper.selectContractCount(userIds);
Map<Long, LaborContractRespVO> countMap = convertMap(countRespVOs, LaborContractRespVO::getUserId);
pageList.getRecords().forEach(item -> {
LaborContractRespVO respVO = countMap.get(item.getUserId());
if (respVO != null) {
item.setSigningCount(respVO.getSigningCount());
}else {
item.setSigningCount(0);
}
});
}
return new PageResult<>(pageList.getRecords(), pageList.getTotal());
}

View File

@ -39,4 +39,20 @@
AND status = 1
AND deleted = 0
</select>
<select id="selectContractCount" resultType="cn.iocoder.yudao.module.system.controller.admin.laborcontract.vo.LaborContractRespVO">
SELECT
user_id AS userId,
COUNT(1) AS signingCount
FROM
system_labor_contract
WHERE
deleted = 0
AND user_id in
<foreach collection="userIds" item="userId" separator="," open="(" close=")">
#{userId}
</foreach>
GROUP BY
user_id
</select>
</mapper>