Merge branch 'dev_visual_page' into dev

# Conflicts:
#	web-adapter/src/main/java/com/zcloud/key/project/web/project/KeyProjectController.java
#	web-app/src/main/java/com/zcloud/key/project/command/query/project/KeyProjectQueryExe.java
#	web-app/src/main/java/com/zcloud/key/project/service/project/KeyProjectServiceImpl.java
#	web-client/src/main/java/com/zcloud/key/project/api/project/KeyProjectServiceI.java
#	web-client/src/main/java/com/zcloud/key/project/dto/clientobject/project/CameraInfoCO.java
#	web-infrastructure/src/main/java/com/zcloud/key/project/persistence/dataobject/project/CameraInfoDO.java
#	web-infrastructure/src/main/java/com/zcloud/key/project/persistence/mapper/KeyProjectCameraMapper.java
#	web-infrastructure/src/main/java/com/zcloud/key/project/persistence/mapper/KeyProjectMapper.java
#	web-infrastructure/src/main/java/com/zcloud/key/project/persistence/repository/impl/project/KeyProjectCameraRepositoryImpl.java
#	web-infrastructure/src/main/java/com/zcloud/key/project/persistence/repository/impl/project/KeyProjectRepositoryImpl.java
#	web-infrastructure/src/main/java/com/zcloud/key/project/persistence/repository/project/KeyProjectCameraRepository.java
#	web-infrastructure/src/main/java/com/zcloud/key/project/persistence/repository/project/KeyProjectRepository.java
#	web-infrastructure/src/main/resources/mapper/KeyProjectCameraMapper.xml
#	web-infrastructure/src/main/resources/mapper/KeyProjectMapper.xml
dev
zhaokai 2026-07-21 14:00:05 +08:00
commit 36ff847364
19 changed files with 241 additions and 6 deletions

View File

@ -145,5 +145,17 @@ public class KeyProjectController {
return keyProjectService.largeScreenStatistics(qry); return keyProjectService.largeScreenStatistics(qry);
} }
@ApiOperation("可视化大屏-重点作业列表")
@PostMapping("/largeScreenPage")
public PageResponse<KeyProjectLargeScreenCO> largeScreenPage(@RequestBody KeyProjectLargeScreenPageQry qry) {
return keyProjectService.largeScreenPage(qry);
}
@ApiOperation("可视化大屏-重点工程统计")
@PostMapping("/largeScreenProjectStatistics")
public SingleResponse<KeyProjectLargeScreenProjectStatisticsCO> largeScreenProjectStatistics(@RequestBody KeyProjectLargeScreenProjectStatisticsQry qry) {
return keyProjectService.largeScreenProjectStatistics(qry);
}
} }

View File

@ -63,5 +63,7 @@ public interface KeyProjectCoConvertor {
} }
List<XgfCorpCO> converXgfCorpDOsToCOs(List<XgfCorpDO> xgfCorpDOList); List<XgfCorpCO> converXgfCorpDOsToCOs(List<XgfCorpDO> xgfCorpDOList);
List<KeyProjectLargeScreenCO> converLargeScreenDOsToCOs(List<KeyProjectLargeScreenDO> data);
} }

View File

@ -59,9 +59,6 @@ public class KeyProjectCameraQueryExe {
if(KeyProjectCameraTypeEnum.MOBILE_CAMERA.getCode().equals(cameraListCmd.getCameraType())){ if(KeyProjectCameraTypeEnum.MOBILE_CAMERA.getCode().equals(cameraListCmd.getCameraType())){
pageResponse = keyProjectCameraRepository.listMobileCameraAll(params); pageResponse = keyProjectCameraRepository.listMobileCameraAll(params);
} }
if(KeyProjectCameraTypeEnum.ALL_CAMERA.getCode().equals(cameraListCmd.getCameraType())){
pageResponse = keyProjectCameraRepository.listAllCamera(params);
}
List<CameraInfoCO> examCenterCOS = keyProjectCameraCoConvertor.converCameraDOsToCOs(pageResponse.getData()); List<CameraInfoCO> examCenterCOS = keyProjectCameraCoConvertor.converCameraDOsToCOs(pageResponse.getData());
pageResponse.setPageSize(examCenterCOS.size()); pageResponse.setPageSize(examCenterCOS.size());
return PageResponse.of(examCenterCOS, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex()); return PageResponse.of(examCenterCOS, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());

View File

@ -2,6 +2,7 @@ package com.zcloud.key.project.command.query.project;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import com.alibaba.cola.dto.PageResponse; import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.exception.BizException;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jjb.saas.framework.auth.utils.AuthContext; import com.jjb.saas.framework.auth.utils.AuthContext;
import com.zcloud.gbscommon.utils.PageQueryHelper; import com.zcloud.gbscommon.utils.PageQueryHelper;
@ -295,5 +296,30 @@ public class KeyProjectQueryExe {
result.setFourNewHomeworkApplyCount(data.getFourNewHomeworkApplyCount()); result.setFourNewHomeworkApplyCount(data.getFourNewHomeworkApplyCount());
return result; return result;
} }
public PageResponse<KeyProjectLargeScreenCO> largeScreenPage(KeyProjectLargeScreenPageQry qry) {
if (qry == null || (qry.getCorpinfoId() == null && qry.getPortArea() == null)) {
throw new BizException("企业id和港区至少传一个");
}
Map<String, Object> params = PageQueryHelper.toHashMap(qry);
PageResponse<KeyProjectLargeScreenDO> pageResponse = keyProjectRepository.largeScreenPage(params);
List<KeyProjectLargeScreenCO> result = keyProjectCoConvertor.converLargeScreenDOsToCOs(pageResponse.getData());
return PageResponse.of(result, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
}
public KeyProjectLargeScreenProjectStatisticsCO largeScreenProjectStatistics(KeyProjectLargeScreenProjectStatisticsQry qry) {
if (qry == null || (qry.getCorpinfoId() == null && qry.getPortArea() == null)) {
throw new BizException("企业id和港区至少传一个");
}
Map<String, Object> params = PageQueryHelper.toHashMap(qry);
KeyProjectLargeScreenProjectStatisticsDO data = keyProjectRepository.largeScreenProjectStatistics(params);
KeyProjectLargeScreenProjectStatisticsCO result = new KeyProjectLargeScreenProjectStatisticsCO();
if (data == null) {
return result;
}
result.setTotalProjectCount(data.getTotalProjectCount());
result.setStartCount(data.getStartCount());
return result;
}
} }

View File

@ -113,5 +113,15 @@ public class KeyProjectServiceImpl implements KeyProjectServiceI {
public SingleResponse<KeyProjectLargeScreenStatisticsCO> largeScreenStatistics(KeyProjectLargeScreenStatisticsQry qry) { public SingleResponse<KeyProjectLargeScreenStatisticsCO> largeScreenStatistics(KeyProjectLargeScreenStatisticsQry qry) {
return SingleResponse.of(keyProjectQueryExe.largeScreenStatistics(qry)); return SingleResponse.of(keyProjectQueryExe.largeScreenStatistics(qry));
} }
@Override
public PageResponse<KeyProjectLargeScreenCO> largeScreenPage(KeyProjectLargeScreenPageQry qry) {
return keyProjectQueryExe.largeScreenPage(qry);
}
@Override
public SingleResponse<KeyProjectLargeScreenProjectStatisticsCO> largeScreenProjectStatistics(KeyProjectLargeScreenProjectStatisticsQry qry) {
return SingleResponse.of(keyProjectQueryExe.largeScreenProjectStatistics(qry));
}
} }

View File

@ -47,5 +47,9 @@ public interface KeyProjectServiceI {
SingleResponse<KeyProjectCountCO> count(Long id); SingleResponse<KeyProjectCountCO> count(Long id);
SingleResponse<KeyProjectLargeScreenStatisticsCO> largeScreenStatistics(KeyProjectLargeScreenStatisticsQry qry); SingleResponse<KeyProjectLargeScreenStatisticsCO> largeScreenStatistics(KeyProjectLargeScreenStatisticsQry qry);
PageResponse<KeyProjectLargeScreenCO> largeScreenPage(KeyProjectLargeScreenPageQry qry);
SingleResponse<KeyProjectLargeScreenProjectStatisticsCO> largeScreenProjectStatistics(KeyProjectLargeScreenProjectStatisticsQry qry);
} }

View File

@ -0,0 +1,22 @@
package com.zcloud.key.project.dto.clientobject.project;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
*
* @Author zhaokai
* @Date 2026-07-21
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class KeyProjectLargeScreenCO extends KeyProjectCO {
@ApiModelProperty(value = "企业名称")
private String corpinfoName;
@ApiModelProperty(value = "港区1:秦皇岛港区,2:秦皇岛东,3:秦皇岛西")
private Integer portArea;
}

View File

@ -0,0 +1,22 @@
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 KeyProjectLargeScreenProjectStatisticsCO implements Serializable {
@ApiModelProperty(value = "重点工程总数")
private Integer totalProjectCount;
@ApiModelProperty(value = "重点工程开工数")
private Integer startCount;
}

View File

@ -26,7 +26,7 @@ public class CameraListCmd extends PageQuery {
* - `le`: * - `le`:
* - `ne`: SQL!= * - `ne`: SQL!=
*/ */
@ApiModelProperty(value = "摄像头类型,0:查全部,1:固定摄像头,2:移动摄像头") @ApiModelProperty(value = "摄像头类型,1:固定摄像头,2:移动摄像头")
@NotNull(message = "摄像头类型不能为空") @NotNull(message = "摄像头类型不能为空")
private Integer cameraType; private Integer cameraType;

View File

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

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 KeyProjectLargeScreenProjectStatisticsQry implements Serializable {
@ApiModelProperty(value = "企业id", name = "corpinfoId")
private Long corpinfoId;
@ApiModelProperty(value = "港区1:秦皇岛港区,2:秦皇岛东,3:秦皇岛西", name = "portArea")
private Integer portArea;
}

View File

@ -7,7 +7,6 @@ import lombok.Getter;
*/ */
@Getter @Getter
public enum KeyProjectCameraTypeEnum { public enum KeyProjectCameraTypeEnum {
ALL_CAMERA(0, "全部摄像头"),
FIXED_CAMERA(1, "固定摄像头"), FIXED_CAMERA(1, "固定摄像头"),
MOBILE_CAMERA(2, "移动摄像头"); MOBILE_CAMERA(2, "移动摄像头");

View File

@ -19,7 +19,7 @@ public class CameraInfoDO implements Serializable {
//摄像头id //摄像头id
@ApiModelProperty(value = "摄像头id") @ApiModelProperty(value = "摄像头id")
private String cameraId; private String cameraId;
//摄像头类型,1:固定摄像头,2:移动摄像头 //摄像头类型,0:查全部,1:固定摄像头,2:移动摄像头
@ApiModelProperty(value = "摄像头类型,0:查全部,1:固定摄像头,2:移动摄像头") @ApiModelProperty(value = "摄像头类型,0:查全部,1:固定摄像头,2:移动摄像头")
private Integer cameraType; private Integer cameraType;

View File

@ -0,0 +1,25 @@
package com.zcloud.key.project.persistence.dataobject.project;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
*
* @Author zhaokai
* @Date 2026-07-21
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class KeyProjectLargeScreenDO extends KeyProjectDO {
@ApiModelProperty(value = "企业名称")
@TableField(exist = false)
private String corpinfoName;
@ApiModelProperty(value = "港区1:秦皇岛港区,2:秦皇岛东,3:秦皇岛西")
@TableField(exist = false)
private Integer portArea;
}

View File

@ -0,0 +1,19 @@
package com.zcloud.key.project.persistence.dataobject.project;
import lombok.Data;
import java.io.Serializable;
/**
*
*
* @Author zhaokai
* @Date 2026-07-21
*/
@Data
public class KeyProjectLargeScreenProjectStatisticsDO implements Serializable {
private Integer totalProjectCount;
private Integer startCount;
}

View File

@ -42,5 +42,9 @@ public interface KeyProjectMapper extends BaseMapper<KeyProjectDO> {
List<KeyProjectDO> getLastStatus(); List<KeyProjectDO> getLastStatus();
KeyProjectLargeScreenStatisticsDO largeScreenStatistics(Map<String, Object> params); KeyProjectLargeScreenStatisticsDO largeScreenStatistics(Map<String, Object> params);
IPage<KeyProjectLargeScreenDO> largeScreenPage(IPage<KeyProjectLargeScreenDO> iPage, Map<String, Object> params);
KeyProjectLargeScreenProjectStatisticsDO largeScreenProjectStatistics(Map<String, Object> params);
} }

View File

@ -97,5 +97,17 @@ public class KeyProjectRepositoryImpl extends BaseRepositoryImpl<KeyProjectMappe
public KeyProjectLargeScreenStatisticsDO largeScreenStatistics(Map<String, Object> params) { public KeyProjectLargeScreenStatisticsDO largeScreenStatistics(Map<String, Object> params) {
return keyProjectMapper.largeScreenStatistics(params); return keyProjectMapper.largeScreenStatistics(params);
} }
@Override
public PageResponse<KeyProjectLargeScreenDO> largeScreenPage(Map<String, Object> params) {
IPage<KeyProjectLargeScreenDO> iPage = new Query<KeyProjectLargeScreenDO>().getPage(params);
IPage<KeyProjectLargeScreenDO> result = keyProjectMapper.largeScreenPage(iPage, params);
return PageHelper.pageToResponse(result, result.getRecords());
}
@Override
public KeyProjectLargeScreenProjectStatisticsDO largeScreenProjectStatistics(Map<String, Object> params) {
return keyProjectMapper.largeScreenProjectStatistics(params);
}
} }

View File

@ -33,5 +33,9 @@ public interface KeyProjectRepository extends BaseRepository<KeyProjectDO> {
List<KeyProjectDO> getLastStatus(); List<KeyProjectDO> getLastStatus();
KeyProjectLargeScreenStatisticsDO largeScreenStatistics(Map<String, Object> params); KeyProjectLargeScreenStatisticsDO largeScreenStatistics(Map<String, Object> params);
PageResponse<KeyProjectLargeScreenDO> largeScreenPage(Map<String, Object> params);
KeyProjectLargeScreenProjectStatisticsDO largeScreenProjectStatistics(Map<String, Object> params);
} }

View File

@ -637,5 +637,39 @@
AND kp.corpinfo_id = #{corpinfoId} AND kp.corpinfo_id = #{corpinfoId}
</if> </if>
</select> </select>
<select id="largeScreenPage" resultType="com.zcloud.key.project.persistence.dataobject.project.KeyProjectLargeScreenDO">
SELECT kp.*,
cp.corp_name AS corpinfoName,
cp.port_area AS portArea
FROM key_project kp
LEFT JOIN corp_info cp ON kp.corpinfo_id = cp.id
WHERE kp.delete_enum = 'FALSE'
AND kp.apply_status IN (2, 4, 5)
<if test="corpinfoId != null">
AND kp.corpinfo_id = #{corpinfoId}
</if>
<if test="portArea != null">
AND cp.port_area = #{portArea}
</if>
ORDER BY kp.apply_status ASC, kp.create_time DESC
</select>
<select id="largeScreenProjectStatistics" resultType="com.zcloud.key.project.persistence.dataobject.project.KeyProjectLargeScreenProjectStatisticsDO">
SELECT
COUNT(DISTINCT CASE WHEN kp.apply_status IN (1, 2, 3, 4, 5, 6, 7) THEN kp.id END) AS totalProjectCount,
COUNT(DISTINCT CASE WHEN kp.apply_status IN (2, 4, 5, 6) THEN kp.id END) AS startCount
FROM key_project kp
LEFT JOIN corp_info cp ON kp.corpinfo_id = cp.id
WHERE kp.delete_enum = 'FALSE'
<if test="corpinfoId != null">
AND kp.corpinfo_id = #{corpinfoId}
</if>
<if test="portArea != null">
AND cp.port_area = #{portArea}
</if>
</select>
</mapper> </mapper>