fix 82894 会员统计--单位分类统计--同一个单位在不同年份的分类不同时,按最新一年的算

This commit is contained in:
lijiarao
2024-03-29 16:54:45 +08:00
parent 55055cfdf8
commit 6931abad0b
3 changed files with 47 additions and 17 deletions
@@ -59,4 +59,6 @@ public interface TbMemberProjectSubitemMapper extends BaseMapper<TbMemberProject
TbMemberProjectSubitem getLastByCompanyId(@Param("companyId") String companyId);
IPage<TbMemberProjectSubitem> pageAllMemberName(Page<TbMemberProjectSubitem> page);
List<TbMemberProjectSubitem> getAllYearInfoByCompanyId(@Param("companyId") String companyId);
}
@@ -113,25 +113,26 @@
</select>
<select id="getAllTakeEffect" resultMap="TbMemberProjectSubitemResultMap">
SELECT t1.*
FROM tb_member_project_subitem t1
INNER JOIN (
SELECT max(invalidation_date), id
FROM tb_member_project_subitem
where current_date BETWEEN effective_date and invalidation_date
SELECT *
from (SELECT tmps.*
FROM tb_member_project_subitem tmps
left join tb_member_project tmp on tmps.project_id = tmp.id
where current_date BETWEEN effective_date and invalidation_date
and member_nature is not null
GROUP BY company_id) AS t2 ON t2.id = t1.id
order by tmp.year desc) t1
group by t1.company_id
</select>
<select id="pieChartPage" resultMap="TbMemberProjectSubitemResultMap">
SELECT t1.*
FROM tb_member_project_subitem t1
INNER JOIN (
SELECT max(invalidation_date), id
FROM tb_member_project_subitem
where invalidation_date >= current_date
GROUP BY company_id) AS t2 ON t2.id = t1.id
select * from (SELECT * from (SELECT tmps.*
FROM tb_member_project_subitem tmps
left join tb_member_project tmp on tmps.project_id = tmp.id
where current_date BETWEEN effective_date and invalidation_date
and member_nature is not null
order by tmp.year desc) t1
group by t1.company_id) t2
${ew.customSqlSegment}
</select>
<select id="queryPageListCompany" resultMap="TbMemberProjectSubitemResultMap">
@@ -159,4 +160,13 @@
and member_nature is not null
GROUP BY company_id) AS t2 ON t2.id = t1.id
</select>
<select id="getAllYearInfoByCompanyId" resultMap="TbMemberProjectSubitemResultMap">
select tmps.*,tmp.year
from tb_member_project_subitem tmps
LEFT JOIN tb_member_project tmp on tmp.id = tmps.project_id
<where>
tmps.company_id = #{companyId}
</where>
</select>
</mapper>
@@ -566,6 +566,24 @@ public class ITbMemberProjectSubitemService extends ServiceImpl<TbMemberProjectS
return projectSubitem;
}
/**
* 获得最新的年份的数据,没有的话会返回null
* @param companyId
* @return
*/
public TbMemberProjectSubitem getLatestYearInfo(String companyId){
//获得所有生效数据
List<TbMemberProjectSubitem> allByCompanyId = tbMemberProjectSubitemMapper.getAllYearInfoByCompanyId(companyId);
//获取list中年份最大的数据
Optional<TbMemberProjectSubitem> max = allByCompanyId.stream().max(Comparator.comparing(TbMemberProjectSubitem::getYear));
//没有的话会返回null
TbMemberProjectSubitem projectSubitem = max.orElse(null);
if(projectSubitem!=null){
processData(projectSubitem);
}
return projectSubitem;
}
public void editMemberBenefits(EditMemberBenefitsVO editMemberBenefitsVO) {
String id = editMemberBenefitsVO.getId();
Date effectiveDate = editMemberBenefitsVO.getEffectiveDate();
@@ -574,9 +592,9 @@ public class ITbMemberProjectSubitemService extends ServiceImpl<TbMemberProjectS
TbMemberProjectSubitem memberProjectSubitem = getById(id);
String companyId = memberProjectSubitem.getCompanyId();
//获得有效数据
TbMemberProjectSubitem takeEffectInfo = getTakeEffectInfo(companyId);
if (takeEffectInfo == null || !Objects.equals(takeEffectInfo.getId(),id)){
throw new JeroBootException("只能修改最新生效会员数据");
TbMemberProjectSubitem latestYearInfo = getLatestYearInfo(companyId);
if (latestYearInfo == null || !Objects.equals(latestYearInfo.getId(),id)){
throw new JeroBootException("只能修改最新年份会员数据");
}
LambdaUpdateWrapper<TbMemberProjectSubitem> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(TbMemberProjectSubitem::getId,id)