feat(corp): 添加可视化大屏-企业部门用户统计数据接口

dev_visual_page
zhaokai 2026-07-17 14:49:55 +08:00
parent 2cd65662fc
commit fdd5bc8605
11 changed files with 137 additions and 0 deletions

View File

@ -157,5 +157,11 @@ public class CorpInfoController {
return SingleResponse.of(corpInfoService.getEncryInfo(userCheckPassWordCmd));
}
@ApiOperation("可视化大屏-企业部门用户统计")
@PostMapping("/corpUserStatisticPage")
public PageResponse<CorpUserStatisticCO> corpUserStatisticPage(@Validated @RequestBody CorpUserStatisticQry qry) {
return corpInfoService.corpUserStatisticPage(qry);
}
}

View File

@ -18,6 +18,7 @@ import com.zcloud.basic.info.dto.*;
import com.zcloud.basic.info.dto.clientobject.CorpDepartmentCO;
import com.zcloud.basic.info.dto.clientobject.CorpInfoCO;
import com.zcloud.basic.info.dto.clientobject.CorpUserMiddleCO;
import com.zcloud.basic.info.dto.clientobject.CorpUserStatisticCO;
import com.zcloud.basic.info.dto.clientobject.UserCO;
import com.zcloud.basic.info.persistence.dataobject.*;
import com.zcloud.basic.info.persistence.repository.*;
@ -310,6 +311,17 @@ public class CorpInfoQueryExe {
return true;
}
public PageResponse<CorpUserStatisticCO> corpUserStatisticPage(CorpUserStatisticQry qry) {
Map<String, Object> params = PageQueryHelper.toHashMap(qry);
PageResponse<CorpUserStatisticDO> pageResponse = corpInfoRepository.corpUserStatisticPage(params);
List<CorpUserStatisticCO> list = pageResponse.getData().stream().map(item -> {
CorpUserStatisticCO co = new CorpUserStatisticCO();
BeanUtils.copyProperties(item, co);
return co;
}).collect(Collectors.toList());
return PageResponse.of(list, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
}
}

View File

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

View File

@ -55,5 +55,7 @@ public interface CorpInfoServiceI {
DecryptCmd getEncryInfo(UserCheckPassWordCmd userCheckPassWordCmd);
void deleteCorpAndDown(List<Long> ids);
PageResponse<CorpUserStatisticCO> corpUserStatisticPage(CorpUserStatisticQry qry);
}

View File

@ -0,0 +1,23 @@
package com.zcloud.basic.info.dto;
import com.alibaba.cola.dto.PageQuery;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
*
*/
@Data
public class CorpUserStatisticQry extends PageQuery {
@ApiModelProperty(value = "企业名称", name = "likeCorpName")
private String likeCorpName;
@ApiModelProperty(value = "企业类型(0-普通企业1-集团单位2-股份单位3-相关方企业4-货主单位5-驻港单位, 6-物资中心)", name = "inType")
private List<Integer> inType;
@ApiModelProperty(value = "企业类型1监管 2企业 3相关方", name = "enterpriseType")
private Integer enterpriseType;
}

View File

@ -0,0 +1,24 @@
package com.zcloud.basic.info.dto.clientobject;
import com.alibaba.cola.dto.ClientObject;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
*
*/
@Data
public class CorpUserStatisticCO extends ClientObject {
@ApiModelProperty(value = "企业id")
private Long id;
@ApiModelProperty(value = "企业名称")
private String corpName;
@ApiModelProperty(value = "部门数量")
private Long departmentCount;
@ApiModelProperty(value = "用户数量")
private Long userCount;
}

View File

@ -0,0 +1,18 @@
package com.zcloud.basic.info.persistence.dataobject;
import lombok.Data;
/**
*
*/
@Data
public class CorpUserStatisticDO {
private Long id;
private String corpName;
private Long departmentCount;
private Long userCount;
}

View File

@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jjb.saas.framework.datascope.annotation.DataScope;
import com.jjb.saas.framework.datascope.annotation.DataScopes;
import com.zcloud.basic.info.persistence.dataobject.CorpInfoDO;
import com.zcloud.basic.info.persistence.dataobject.CorpUserStatisticDO;
import com.zcloud.basic.info.persistence.dataobject.UserDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@ -32,6 +33,7 @@ public interface CorpInfoMapper extends BaseMapper<CorpInfoDO> {
IPage<CorpInfoDO> selectUserPageNoPms(IPage<CorpInfoDO> iPage, @Param("ew") QueryWrapper<CorpInfoDO> queryWrapper, String menuPerms);
IPage<CorpUserStatisticDO> corpUserStatisticPage(IPage<CorpUserStatisticDO> iPage, Map<String, Object> params);
}

View File

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

View File

@ -25,6 +25,7 @@ import com.zcloud.basic.info.domain.enums.CorpTypeEnum;
import com.zcloud.basic.info.domain.enums.CorpUseFlagEnum;
import com.zcloud.basic.info.domain.enums.MenuEnum;
import com.zcloud.basic.info.persistence.dataobject.CorpInfoDO;
import com.zcloud.basic.info.persistence.dataobject.CorpUserStatisticDO;
import com.zcloud.basic.info.persistence.mapper.CorpInfoMapper;
import com.zcloud.basic.info.persistence.repository.CorpInfoRepository;
import com.zcloud.basic.info.utils.Query;
@ -320,5 +321,23 @@ public class CorpInfoRepositoryImpl extends BaseRepositoryImpl<CorpInfoMapper, C
updateWrapper.set("delete_enum", "TRUE");
update(updateWrapper);
}
@Override
public PageResponse<CorpUserStatisticDO> corpUserStatisticPage(Map<String, Object> params) {
IPage<CorpUserStatisticDO> iPage = new Query<CorpUserStatisticDO>().getPage(params);
if (ObjectUtil.isNotEmpty(params.get("enterpriseType"))) {
List<Integer> enterpriseType = CorpTypeEnum.getCodesByEnterpriseType((Integer) params.get("enterpriseType"));
if (CollUtil.isNotEmpty(enterpriseType)) {
params.put("type", enterpriseType);
}
}
List<Integer> inType = (List<Integer>) params.get("inType");
if (CollUtil.isNotEmpty(inType)) {
params.put("type", inType);
}
IPage<CorpUserStatisticDO> result = corpInfoMapper.corpUserStatisticPage(iPage, params);
return PageHelper.pageToResponse(result, result.getRecords());
}
}

View File

@ -65,5 +65,28 @@
FROM corp_info
${ew.customSqlSegment}
</select>
<select id="corpUserStatisticPage" resultType="com.zcloud.basic.info.persistence.dataobject.CorpUserStatisticDO">
SELECT
c.id,
c.corp_name AS corpName,
COUNT(DISTINCT d.id) AS departmentCount,
COUNT(DISTINCT u.id) AS userCount
FROM corp_info c
LEFT JOIN department d ON d.corpinfo_id = c.id AND d.delete_enum = 'FALSE'
LEFT JOIN user u ON u.corpinfo_id = c.id AND u.delete_enum = 'FALSE'
WHERE c.delete_enum = 'FALSE'
<if test="params.type != null and params.type.size() > 0">
AND c.type IN
<foreach collection="params.type" item="type" open="(" close=")" separator=",">
#{type}
</foreach>
</if>
<if test="params.likeCorpName != null and params.likeCorpName.trim() != ''">
AND c.corp_name like concat('%',#{params.likeCorpName},'%')
</if>
GROUP BY c.id, c.corp_name
ORDER BY userCount DESC, departmentCount DESC, c.corp_order ASC, c.create_time DESC
</select>
</mapper>