Merge branch 'dev_visual_page' into dev

# Conflicts:
#	web-adapter/src/main/java/com/zcloud/basic/info/facade/ZcloudUserFacadeImpl.java
#	web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/mapper/CorpInfoMapper.java
#	web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/repository/CorpInfoRepository.java
#	web-infrastructure/src/main/java/com/zcloud/basic/info/persistence/repository/impl/CorpInfoRepositoryImpl.java
komen
zhaokai 2026-07-17 14:52:37 +08:00
commit 176011e6f4
13 changed files with 155 additions and 5 deletions

View File

@ -3,8 +3,8 @@ spring:
import: import:
# - classpath:nacos.yml # - classpath:nacos.yml
# - classpath:sdk.yml # - classpath:sdk.yml
- classpath:nacos-prod.yml # - classpath:nacos-prod.yml
- classpath:sdk-prod.yml # - classpath:sdk-prod.yml
# - classpath:nacos-prod2.yml - classpath:nacos-prod2.yml
# - classpath:sdk-prod2.yml - classpath:sdk-prod2.yml
- classpath:swagger.yml - classpath:swagger.yml

View File

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

View File

@ -415,7 +415,10 @@ public class UserImportExe {
user.setPostId(postId); user.setPostId(postId);
user.setCorpinfoId(corpinfoId); user.setCorpinfoId(corpinfoId);
user.setName(importEntity.getName()); user.setName(importEntity.getName());
user.setUserIdCard(encodeBase64IdCard(importEntity.getUserIdCard()));
user.setPersonnelType(importEntity.getPersonnelType());
user.setPersonnelTypeName(importEntity.getPersonnelTypeName());
user.resetPassword(corpInfoDO.getType());
userGateway.add(user); userGateway.add(user);
String corpName = null; String corpName = null;
if(corpInfoDO != null && !ObjectUtils.isEmpty(corpInfoDO.getCorpName())){ if(corpInfoDO != null && !ObjectUtils.isEmpty(corpInfoDO.getCorpName())){
@ -431,5 +434,15 @@ public class UserImportExe {
allUsers.add(userDO); allUsers.add(userDO);
userDOTempList.add(userDO); userDOTempList.add(userDO);
} }
private static String encodeBase64IdCard(String userIdCard) {
if (StringUtils.isEmpty(userIdCard)) {
return null;
}
try {
return Base64.getEncoder().encodeToString(userIdCard.trim().getBytes("UTF-8"));
} catch (Exception ex) {
return userIdCard.trim();
}
}
} }

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.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.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.*;
@ -310,6 +311,17 @@ public class CorpInfoQueryExe {
return true; 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(); 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); DecryptCmd getEncryInfo(UserCheckPassWordCmd userCheckPassWordCmd);
void deleteCorpAndDown(List<Long> ids); 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

@ -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.UserCorpInfoStatDO; import com.zcloud.basic.info.persistence.dataobject.UserCorpInfoStatDO;
import com.zcloud.basic.info.persistence.dataobject.CorpUserStatisticDO;
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;
@ -36,6 +37,7 @@ public interface CorpInfoMapper extends BaseMapper<CorpInfoDO> {
IPage<CorpInfoDO> selectUserPageNoPms(IPage<CorpInfoDO> iPage, @Param("ew") QueryWrapper<CorpInfoDO> queryWrapper, String menuPerms); 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

@ -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.UserCorpInfoStatDO; import com.zcloud.basic.info.persistence.dataobject.UserCorpInfoStatDO;
import com.zcloud.basic.info.persistence.dataobject.CorpUserStatisticDO;
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> {
Boolean isSupper(); Boolean isSupper();
void deleteById(Long id); void deleteById(Long id);
PageResponse<CorpUserStatisticDO> corpUserStatisticPage(Map<String, Object> parmas);
} }

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.UserCorpInfoStatDO; import com.zcloud.basic.info.persistence.dataobject.UserCorpInfoStatDO;
import com.zcloud.basic.info.persistence.dataobject.CorpUserStatisticDO;
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;
@ -332,5 +333,23 @@ public class CorpInfoRepositoryImpl extends BaseRepositoryImpl<CorpInfoMapper, C
updateWrapper.set("delete_enum", "TRUE"); updateWrapper.set("delete_enum", "TRUE");
update(updateWrapper); 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

@ -112,5 +112,28 @@
FROM corp_info FROM corp_info
${ew.customSqlSegment} ${ew.customSqlSegment}
</select> </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> </mapper>