feat(project): 添加可视化大屏部门统计功能并完善项目统计字段

dev
zhaokai 2026-07-22 09:35:15 +08:00
parent 375997f1df
commit 083f580bfd
13 changed files with 182 additions and 4 deletions

View File

@ -150,5 +150,11 @@ public class KeyProjectController {
return keyProjectService.largeScreenProjectStatistics(qry);
}
@ApiOperation("可视化大屏-部门统计")
@PostMapping("/largeScreenDepartmentStatistics")
public MultiResponse<KeyProjectLargeScreenDepartmentStatisticsCO> largeScreenDepartmentStatistics(@RequestBody KeyProjectLargeScreenDepartmentStatisticsQry qry) {
return MultiResponse.of(keyProjectService.largeScreenDepartmentStatistics(qry));
}
}

View File

@ -268,10 +268,16 @@ public class KeyProjectQueryExe {
}
result.setMorePeopleStartCount(data.getMorePeopleStartCount());
result.setMorePeopleApplyCount(data.getMorePeopleApplyCount());
result.setMorePeopleDoingCount(data.getMorePeopleDoingCount());
result.setMorePeopleArchiveCount(data.getMorePeopleArchiveCount());
result.setNightWorkStartCount(data.getNightWorkStartCount());
result.setNightWorkApplyCount(data.getNightWorkApplyCount());
result.setNightWorkDoingCount(data.getNightWorkDoingCount());
result.setNightWorkArchiveCount(data.getNightWorkArchiveCount());
result.setFourNewHomeworkStartCount(data.getFourNewHomeworkStartCount());
result.setFourNewHomeworkApplyCount(data.getFourNewHomeworkApplyCount());
result.setFourNewHomeworkDoingCount(data.getFourNewHomeworkDoingCount());
result.setFourNewHomeworkArchiveCount(data.getFourNewHomeworkArchiveCount());
return result;
}
@ -299,5 +305,24 @@ public class KeyProjectQueryExe {
result.setStartCount(data.getStartCount());
return result;
}
public List<KeyProjectLargeScreenDepartmentStatisticsCO> largeScreenDepartmentStatistics(KeyProjectLargeScreenDepartmentStatisticsQry qry) {
if (qry == null || (qry.getCorpinfoId() == null && qry.getPortArea() == null)) {
throw new BizException("企业id和港区至少传一个");
}
Map<String, Object> params = PageQueryHelper.toHashMap(qry);
List<KeyProjectLargeScreenDepartmentStatisticsDO> dataList = keyProjectRepository.largeScreenDepartmentStatistics(params);
if (CollUtil.isEmpty(dataList)) {
return java.util.Collections.emptyList();
}
return dataList.stream().map(data -> {
KeyProjectLargeScreenDepartmentStatisticsCO result = new KeyProjectLargeScreenDepartmentStatisticsCO();
result.setDepartmentId(data.getDepartmentId());
result.setDepartmentName(data.getDepartmentName());
result.setFourNewHomeworkCount(data.getFourNewHomeworkCount());
result.setMorePeopleCount(data.getMorePeopleCount());
return result;
}).collect(Collectors.toList());
}
}

View File

@ -123,5 +123,10 @@ public class KeyProjectServiceImpl implements KeyProjectServiceI {
public SingleResponse<KeyProjectLargeScreenProjectStatisticsCO> largeScreenProjectStatistics(KeyProjectLargeScreenProjectStatisticsQry qry) {
return SingleResponse.of(keyProjectQueryExe.largeScreenProjectStatistics(qry));
}
@Override
public List<KeyProjectLargeScreenDepartmentStatisticsCO> largeScreenDepartmentStatistics(KeyProjectLargeScreenDepartmentStatisticsQry qry) {
return keyProjectQueryExe.largeScreenDepartmentStatistics(qry);
}
}

View File

@ -51,5 +51,7 @@ public interface KeyProjectServiceI {
PageResponse<KeyProjectLargeScreenCO> largeScreenPage(KeyProjectLargeScreenPageQry qry);
SingleResponse<KeyProjectLargeScreenProjectStatisticsCO> largeScreenProjectStatistics(KeyProjectLargeScreenProjectStatisticsQry qry);
List<KeyProjectLargeScreenDepartmentStatisticsCO> largeScreenDepartmentStatistics(KeyProjectLargeScreenDepartmentStatisticsQry qry);
}

View File

@ -0,0 +1,28 @@
package com.zcloud.key.project.dto.clientobject.project;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
*
*
* @Author zhaokai
* @Date 2026-07-21
*/
@Data
public class KeyProjectLargeScreenDepartmentStatisticsCO implements Serializable {
@ApiModelProperty(value = "部门id")
private Long departmentId;
@ApiModelProperty(value = "部门名称")
private String departmentName;
@ApiModelProperty(value = "四新作业数")
private Integer fourNewHomeworkCount;
@ApiModelProperty(value = "三人及以上作业数")
private Integer morePeopleCount;
}

View File

@ -20,15 +20,33 @@ public class KeyProjectLargeScreenStatisticsCO implements Serializable {
@ApiModelProperty(value = "三人及以上作业申请数")
private Integer morePeopleApplyCount;
@ApiModelProperty(value = "三人及以上作业进行中数")
private Integer morePeopleDoingCount;
@ApiModelProperty(value = "三人及以上作业归档数")
private Integer morePeopleArchiveCount;
@ApiModelProperty(value = "夜间作业当前作业数")
private Integer nightWorkStartCount;
@ApiModelProperty(value = "夜间作业申请数")
private Integer nightWorkApplyCount;
@ApiModelProperty(value = "夜间作业进行中数")
private Integer nightWorkDoingCount;
@ApiModelProperty(value = "夜间作业归档数")
private Integer nightWorkArchiveCount;
@ApiModelProperty(value = "四新作业当前作业数")
private Integer fourNewHomeworkStartCount;
@ApiModelProperty(value = "四新作业申请数")
private Integer fourNewHomeworkApplyCount;
@ApiModelProperty(value = "四新作业进行中数")
private Integer fourNewHomeworkDoingCount;
@ApiModelProperty(value = "四新作业归档数")
private Integer fourNewHomeworkArchiveCount;
}

View File

@ -0,0 +1,22 @@
package com.zcloud.key.project.dto.project;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
*
*
* @Author zhaokai
* @Date 2026-07-21
*/
@Data
public class KeyProjectLargeScreenDepartmentStatisticsQry implements Serializable {
@ApiModelProperty(value = "企业id", name = "corpinfoId")
private Long corpinfoId;
@ApiModelProperty(value = "港区1:秦皇岛港区,2:秦皇岛东,3:秦皇岛西", name = "portArea")
private Integer portArea;
}

View File

@ -0,0 +1,23 @@
package com.zcloud.key.project.persistence.dataobject.project;
import lombok.Data;
import java.io.Serializable;
/**
*
*
* @Author zhaokai
* @Date 2026-07-21
*/
@Data
public class KeyProjectLargeScreenDepartmentStatisticsDO implements Serializable {
private Long departmentId;
private String departmentName;
private Integer fourNewHomeworkCount;
private Integer morePeopleCount;
}

View File

@ -17,11 +17,23 @@ public class KeyProjectLargeScreenStatisticsDO implements Serializable {
private Integer morePeopleApplyCount;
private Integer morePeopleDoingCount;
private Integer morePeopleArchiveCount;
private Integer nightWorkStartCount;
private Integer nightWorkApplyCount;
private Integer nightWorkDoingCount;
private Integer nightWorkArchiveCount;
private Integer fourNewHomeworkStartCount;
private Integer fourNewHomeworkApplyCount;
private Integer fourNewHomeworkDoingCount;
private Integer fourNewHomeworkArchiveCount;
}

View File

@ -46,5 +46,7 @@ public interface KeyProjectMapper extends BaseMapper<KeyProjectDO> {
IPage<KeyProjectLargeScreenDO> largeScreenPage(IPage<KeyProjectLargeScreenDO> iPage, Map<String, Object> params);
KeyProjectLargeScreenProjectStatisticsDO largeScreenProjectStatistics(Map<String, Object> params);
List<KeyProjectLargeScreenDepartmentStatisticsDO> largeScreenDepartmentStatistics(Map<String, Object> params);
}

View File

@ -109,5 +109,10 @@ public class KeyProjectRepositoryImpl extends BaseRepositoryImpl<KeyProjectMappe
public KeyProjectLargeScreenProjectStatisticsDO largeScreenProjectStatistics(Map<String, Object> params) {
return keyProjectMapper.largeScreenProjectStatistics(params);
}
@Override
public List<KeyProjectLargeScreenDepartmentStatisticsDO> largeScreenDepartmentStatistics(Map<String, Object> params) {
return keyProjectMapper.largeScreenDepartmentStatistics(params);
}
}

View File

@ -37,5 +37,7 @@ public interface KeyProjectRepository extends BaseRepository<KeyProjectDO> {
PageResponse<KeyProjectLargeScreenDO> largeScreenPage(Map<String, Object> params);
KeyProjectLargeScreenProjectStatisticsDO largeScreenProjectStatistics(Map<String, Object> params);
List<KeyProjectLargeScreenDepartmentStatisticsDO> largeScreenDepartmentStatistics(Map<String, Object> params);
}

View File

@ -550,12 +550,18 @@
<select id="largeScreenStatistics" resultType="com.zcloud.key.project.persistence.dataobject.project.KeyProjectLargeScreenStatisticsDO">
SELECT
COUNT(DISTINCT CASE WHEN kp.project_type = 'more_people' AND kp.apply_status = 4 THEN kp.id END) AS morePeopleStartCount,
COUNT(DISTINCT CASE WHEN kp.project_type = 'more_people' AND kp.apply_status IN (1,2, 3,4, 5, 7) THEN kp.id END) AS morePeopleStartCount,
COUNT(DISTINCT CASE WHEN kp.project_type = 'more_people' AND kp.apply_status != 0 THEN kp.id END) AS morePeopleApplyCount,
COUNT(DISTINCT CASE WHEN kp.project_type = 'night_work' AND kp.apply_status = 4 THEN kp.id END) AS nightWorkStartCount,
COUNT(DISTINCT CASE WHEN kp.project_type = 'more_people' AND kp.apply_status = 4 THEN kp.id END) AS morePeopleDoingCount,
COUNT(DISTINCT CASE WHEN kp.project_type = 'more_people' AND kp.apply_status = 6 THEN kp.id END) AS morePeopleArchiveCount,
COUNT(DISTINCT CASE WHEN kp.project_type = 'night_work' AND kp.apply_status IN (1,2, 3,4, 5, 7) THEN kp.id END) AS nightWorkStartCount,
COUNT(DISTINCT CASE WHEN kp.project_type = 'night_work' AND kp.apply_status != 0 THEN kp.id END) AS nightWorkApplyCount,
COUNT(DISTINCT CASE WHEN kp.project_type = 'four_new_homework' AND kp.apply_status = 4 THEN kp.id END) AS fourNewHomeworkStartCount,
COUNT(DISTINCT CASE WHEN kp.project_type = 'four_new_homework' AND kp.apply_status != 0 THEN kp.id END) AS fourNewHomeworkApplyCount
COUNT(DISTINCT CASE WHEN kp.project_type = 'night_work' AND kp.apply_status = 4 THEN kp.id END) AS nightWorkDoingCount,
COUNT(DISTINCT CASE WHEN kp.project_type = 'night_work' AND kp.apply_status = 6 THEN kp.id END) AS nightWorkArchiveCount,
COUNT(DISTINCT CASE WHEN kp.project_type = 'four_new_homework' AND kp.apply_status IN (1,2, 3,4, 5, 7) THEN kp.id END) AS fourNewHomeworkStartCount,
COUNT(DISTINCT CASE WHEN kp.project_type = 'four_new_homework' AND kp.apply_status != 0 THEN kp.id END) AS fourNewHomeworkApplyCount,
COUNT(DISTINCT CASE WHEN kp.project_type = 'four_new_homework' AND kp.apply_status = 4 THEN kp.id END) AS fourNewHomeworkDoingCount,
COUNT(DISTINCT CASE WHEN kp.project_type = 'four_new_homework' AND kp.apply_status = 6 THEN kp.id END) AS fourNewHomeworkArchiveCount
FROM key_project kp
WHERE kp.delete_enum = 'FALSE'
<if test="corpinfoId != null">
@ -596,5 +602,27 @@
AND cp.port_area = #{portArea}
</if>
</select>
<select id="largeScreenDepartmentStatistics" resultType="com.zcloud.key.project.persistence.dataobject.project.KeyProjectLargeScreenDepartmentStatisticsDO">
SELECT
kp.master_department_id AS departmentId,
d.name AS departmentName,
COUNT(DISTINCT CASE WHEN kp.project_type = 'four_new_homework' THEN kp.id END) AS fourNewHomeworkCount,
COUNT(DISTINCT CASE WHEN kp.project_type = 'more_people' THEN kp.id END) AS morePeopleCount
FROM key_project kp
LEFT JOIN corp_info cp ON kp.corpinfo_id = cp.id
LEFT JOIN department d ON kp.master_department_id = d.id
WHERE kp.delete_enum = 'FALSE'
AND kp.apply_status IN (2, 3, 4, 5, 6, 7)
AND kp.project_type IN ('four_new_homework', 'more_people')
<if test="corpinfoId != null">
AND kp.corpinfo_id = #{corpinfoId}
</if>
<if test="portArea != null">
AND cp.port_area = #{portArea}
</if>
GROUP BY kp.master_department_id, d.name
ORDER BY kp.master_department_id ASC
</select>
</mapper>