feat(corp): 添加可视化大屏-企业用户汇总统计功能

dev_visual_page
zhaokai 2026-07-17 15:28:02 +08:00
parent fdd5bc8605
commit 2aa7777dfc
10 changed files with 103 additions and 6 deletions

View File

@ -163,5 +163,11 @@ public class CorpInfoController {
return corpInfoService.corpUserStatisticPage(qry); return corpInfoService.corpUserStatisticPage(qry);
} }
@ApiOperation("可视化大屏-企业用户汇总")
@PostMapping("/corpUserSummary")
public SingleResponse<CorpUserSummaryCO> corpUserSummary() {
return SingleResponse.of(corpInfoService.corpUserSummary());
}
} }

View File

@ -19,6 +19,7 @@ import com.zcloud.basic.info.dto.clientobject.CorpDepartmentCO;
import com.zcloud.basic.info.dto.clientobject.CorpInfoCO; import com.zcloud.basic.info.dto.clientobject.CorpInfoCO;
import com.zcloud.basic.info.dto.clientobject.CorpUserMiddleCO; import com.zcloud.basic.info.dto.clientobject.CorpUserMiddleCO;
import com.zcloud.basic.info.dto.clientobject.CorpUserStatisticCO; import com.zcloud.basic.info.dto.clientobject.CorpUserStatisticCO;
import com.zcloud.basic.info.dto.clientobject.CorpUserSummaryCO;
import com.zcloud.basic.info.dto.clientobject.UserCO; import com.zcloud.basic.info.dto.clientobject.UserCO;
import com.zcloud.basic.info.persistence.dataobject.*; import com.zcloud.basic.info.persistence.dataobject.*;
import com.zcloud.basic.info.persistence.repository.*; import com.zcloud.basic.info.persistence.repository.*;
@ -322,6 +323,13 @@ public class CorpInfoQueryExe {
return PageResponse.of(list, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex()); return PageResponse.of(list, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
} }
public CorpUserSummaryCO corpUserSummary() {
CorpUserSummaryDO corpUserSummaryDO = corpInfoRepository.corpUserSummary();
CorpUserSummaryCO corpUserSummaryCO = new CorpUserSummaryCO();
BeanUtils.copyProperties(corpUserSummaryDO, corpUserSummaryCO);
return corpUserSummaryCO;
}
} }

View File

@ -151,5 +151,10 @@ public class CorpInfoServiceImpl implements CorpInfoServiceI {
public PageResponse<CorpUserStatisticCO> corpUserStatisticPage(CorpUserStatisticQry qry) { public PageResponse<CorpUserStatisticCO> corpUserStatisticPage(CorpUserStatisticQry qry) {
return corpInfoQueryExe.corpUserStatisticPage(qry); return corpInfoQueryExe.corpUserStatisticPage(qry);
} }
@Override
public CorpUserSummaryCO corpUserSummary() {
return corpInfoQueryExe.corpUserSummary();
}
} }

View File

@ -57,5 +57,7 @@ public interface CorpInfoServiceI {
void deleteCorpAndDown(List<Long> ids); void deleteCorpAndDown(List<Long> ids);
PageResponse<CorpUserStatisticCO> corpUserStatisticPage(CorpUserStatisticQry qry); PageResponse<CorpUserStatisticCO> corpUserStatisticPage(CorpUserStatisticQry qry);
CorpUserSummaryCO corpUserSummary();
} }

View File

@ -0,0 +1,21 @@
package com.zcloud.basic.info.dto.clientobject;
import com.alibaba.cola.dto.ClientObject;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
*
*/
@Data
public class CorpUserSummaryCO extends ClientObject {
@ApiModelProperty(value = "分公司企业数")
private Long branchCorpCount;
@ApiModelProperty(value = "相关方单位数")
private Long relatedCorpCount;
@ApiModelProperty(value = "员工数")
private Long userCount;
}

View File

@ -0,0 +1,16 @@
package com.zcloud.basic.info.persistence.dataobject;
import lombok.Data;
/**
*
*/
@Data
public class CorpUserSummaryDO {
private Long branchCorpCount;
private Long relatedCorpCount;
private Long userCount;
}

View File

@ -7,6 +7,7 @@ import com.jjb.saas.framework.datascope.annotation.DataScope;
import com.jjb.saas.framework.datascope.annotation.DataScopes; import com.jjb.saas.framework.datascope.annotation.DataScopes;
import com.zcloud.basic.info.persistence.dataobject.CorpInfoDO; import com.zcloud.basic.info.persistence.dataobject.CorpInfoDO;
import com.zcloud.basic.info.persistence.dataobject.CorpUserStatisticDO; import com.zcloud.basic.info.persistence.dataobject.CorpUserStatisticDO;
import com.zcloud.basic.info.persistence.dataobject.CorpUserSummaryDO;
import com.zcloud.basic.info.persistence.dataobject.UserDO; import com.zcloud.basic.info.persistence.dataobject.UserDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@ -35,5 +36,7 @@ public interface CorpInfoMapper extends BaseMapper<CorpInfoDO> {
IPage<CorpUserStatisticDO> corpUserStatisticPage(IPage<CorpUserStatisticDO> iPage, Map<String, Object> params); IPage<CorpUserStatisticDO> corpUserStatisticPage(IPage<CorpUserStatisticDO> iPage, Map<String, Object> params);
CorpUserSummaryDO corpUserSummary();
} }

View File

@ -4,6 +4,7 @@ import com.alibaba.cola.dto.PageResponse;
import com.jjb.saas.framework.repository.repo.BaseRepository; import com.jjb.saas.framework.repository.repo.BaseRepository;
import com.zcloud.basic.info.persistence.dataobject.CorpInfoDO; import com.zcloud.basic.info.persistence.dataobject.CorpInfoDO;
import com.zcloud.basic.info.persistence.dataobject.CorpUserStatisticDO; import com.zcloud.basic.info.persistence.dataobject.CorpUserStatisticDO;
import com.zcloud.basic.info.persistence.dataobject.CorpUserSummaryDO;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -47,5 +48,7 @@ public interface CorpInfoRepository extends BaseRepository<CorpInfoDO> {
void deleteById(Long id); void deleteById(Long id);
PageResponse<CorpUserStatisticDO> corpUserStatisticPage(Map<String, Object> parmas); PageResponse<CorpUserStatisticDO> corpUserStatisticPage(Map<String, Object> parmas);
CorpUserSummaryDO corpUserSummary();
} }

View File

@ -26,6 +26,7 @@ import com.zcloud.basic.info.domain.enums.CorpUseFlagEnum;
import com.zcloud.basic.info.domain.enums.MenuEnum; import com.zcloud.basic.info.domain.enums.MenuEnum;
import com.zcloud.basic.info.persistence.dataobject.CorpInfoDO; import com.zcloud.basic.info.persistence.dataobject.CorpInfoDO;
import com.zcloud.basic.info.persistence.dataobject.CorpUserStatisticDO; import com.zcloud.basic.info.persistence.dataobject.CorpUserStatisticDO;
import com.zcloud.basic.info.persistence.dataobject.CorpUserSummaryDO;
import com.zcloud.basic.info.persistence.mapper.CorpInfoMapper; import com.zcloud.basic.info.persistence.mapper.CorpInfoMapper;
import com.zcloud.basic.info.persistence.repository.CorpInfoRepository; import com.zcloud.basic.info.persistence.repository.CorpInfoRepository;
import com.zcloud.basic.info.utils.Query; import com.zcloud.basic.info.utils.Query;
@ -339,5 +340,10 @@ public class CorpInfoRepositoryImpl extends BaseRepositoryImpl<CorpInfoMapper, C
IPage<CorpUserStatisticDO> result = corpInfoMapper.corpUserStatisticPage(iPage, params); IPage<CorpUserStatisticDO> result = corpInfoMapper.corpUserStatisticPage(iPage, params);
return PageHelper.pageToResponse(result, result.getRecords()); return PageHelper.pageToResponse(result, result.getRecords());
} }
@Override
public CorpUserSummaryDO corpUserSummary() {
return corpInfoMapper.corpUserSummary();
}
} }

View File

@ -70,11 +70,25 @@
SELECT SELECT
c.id, c.id,
c.corp_name AS corpName, c.corp_name AS corpName,
COUNT(DISTINCT d.id) AS departmentCount, IFNULL(d.departmentCount, 0) AS departmentCount,
COUNT(DISTINCT u.id) AS userCount IFNULL(u.userCount, 0) AS userCount
FROM corp_info c FROM corp_info c
LEFT JOIN department d ON d.corpinfo_id = c.id AND d.delete_enum = 'FALSE' LEFT JOIN (
LEFT JOIN user u ON u.corpinfo_id = c.id AND u.delete_enum = 'FALSE' SELECT
corpinfo_id,
COUNT(1) AS departmentCount
FROM department
WHERE delete_enum = 'FALSE'
GROUP BY corpinfo_id
) d ON d.corpinfo_id = c.id
LEFT JOIN (
SELECT
corpinfo_id,
COUNT(1) AS userCount
FROM user
WHERE delete_enum = 'FALSE'
GROUP BY corpinfo_id
) u ON u.corpinfo_id = c.id
WHERE c.delete_enum = 'FALSE' WHERE c.delete_enum = 'FALSE'
<if test="params.type != null and params.type.size() > 0"> <if test="params.type != null and params.type.size() > 0">
AND c.type IN AND c.type IN
@ -85,8 +99,21 @@
<if test="params.likeCorpName != null and params.likeCorpName.trim() != ''"> <if test="params.likeCorpName != null and params.likeCorpName.trim() != ''">
AND c.corp_name like concat('%',#{params.likeCorpName},'%') AND c.corp_name like concat('%',#{params.likeCorpName},'%')
</if> </if>
GROUP BY c.id, c.corp_name ORDER BY IFNULL(u.userCount, 0) DESC, IFNULL(d.departmentCount, 0) DESC, c.corp_order ASC, c.create_time DESC
ORDER BY userCount DESC, departmentCount DESC, c.corp_order ASC, c.create_time DESC </select>
<select id="corpUserSummary" resultType="com.zcloud.basic.info.persistence.dataobject.CorpUserSummaryDO">
SELECT
IFNULL(SUM(CASE WHEN c.type IN (0, 1, 6) THEN 1 ELSE 0 END), 0) AS branchCorpCount,
IFNULL(SUM(CASE WHEN c.type IN (3, 4, 5) THEN 1 ELSE 0 END), 0) AS relatedCorpCount,
IFNULL((
SELECT COUNT(1)
FROM user u
INNER JOIN corp_info c ON c.id = u.corpinfo_id AND c.delete_enum = 'FALSE'
WHERE u.delete_enum = 'FALSE'
), 0) AS userCount
FROM corp_info c
WHERE c.delete_enum = 'FALSE'
</select> </select>
</mapper> </mapper>