1.进度增加项目id字段

2.新增工作台首页统计接口
3.项目增加任务数统计
4.增加我的项目、我的任务接口
This commit is contained in:
pve-win10 2025-07-21 23:15:03 +08:00
parent 3519a6cd8d
commit 55ba50254a
23 changed files with 237 additions and 10 deletions

View File

@ -43,10 +43,10 @@ public class YoloModelRegistry {
@PostConstruct @PostConstruct
public void loadModelsOnStartup() throws OrtException { public void loadModelsOnStartup() throws OrtException {
List<ModelConfigEntity> configs = modelConfigMapper.selectList(Wrappers.emptyWrapper()); // List<ModelConfigEntity> configs = modelConfigMapper.selectList(Wrappers.emptyWrapper());
for (ModelConfigEntity config : configs) { // for (ModelConfigEntity config : configs) {
loadModel(config); // loadModel(config);
} // }
} }
public void loadModel(ModelConfigEntity config) throws OrtException { public void loadModel(ModelConfigEntity config) throws OrtException {

View File

@ -1,5 +1,6 @@
package com.dite.znpt.domain.entity; package com.dite.znpt.domain.entity;
import java.io.Serial;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@ -23,6 +24,7 @@ import com.alibaba.excel.annotation.ExcelProperty;
@ApiModel(value="DefectEntity对象", description="缺陷记录表") @ApiModel(value="DefectEntity对象", description="缺陷记录表")
public class DefectEntity extends AuditableEntity implements Serializable { public class DefectEntity extends AuditableEntity implements Serializable {
@Serial
private static final long serialVersionUID = 721961595098309935L; private static final long serialVersionUID = 721961595098309935L;
@ExcelProperty("缺陷id") @ExcelProperty("缺陷id")

View File

@ -81,5 +81,9 @@ public class ProjectTaskEntity extends AuditableEntity implements Serializable {
@ApiModelProperty("备注") @ApiModelProperty("备注")
@TableField("remark") @TableField("remark")
private String remark; private String remark;
@ApiModelProperty("项目id")
@TableField("project_id")
private String projectId;
} }

View File

@ -33,5 +33,9 @@ public class ProjectTaskGroupEntity extends AuditableEntity implements Serializa
@ApiModelProperty("项目任务组名") @ApiModelProperty("项目任务组名")
@TableField("group_name") @TableField("group_name")
private String groupName; private String groupName;
@ApiModelProperty("项目id")
@TableField("project_id")
private String projectId;
} }

View File

@ -41,5 +41,8 @@ public class ProjectListReq implements Serializable {
@ApiModelProperty("项目结束日期") @ApiModelProperty("项目结束日期")
private LocalDate endDate; private LocalDate endDate;
@ApiModelProperty(value = "用户id", hidden = true)
private String userId;
} }

View File

@ -90,4 +90,16 @@ public class ProjectListResp implements Serializable {
@ApiModelProperty(value = "结束时间") @ApiModelProperty(value = "结束时间")
private LocalDate endDate; private LocalDate endDate;
@ApiModelProperty(value = "未开始任务数")
private Integer taskPendingCount;
@ApiModelProperty(value = "进行中任务数")
private Integer taskProgressCount;
@ApiModelProperty(value = "已完成任务数")
private Integer taskCompleteCount;
@ApiModelProperty(value = "总任务数")
private Integer taskCount;
} }

View File

@ -29,5 +29,8 @@ public class ProjectTaskGroupListReq implements Serializable {
@ApiModelProperty("任务名称/负责人") @ApiModelProperty("任务名称/负责人")
private String keyword; private String keyword;
@ApiModelProperty("项目id")
private String projectId;
} }

View File

@ -11,6 +11,7 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size; import javax.validation.constraints.Size;
/** /**
@ -34,5 +35,9 @@ public class ProjectTaskGroupReq implements Serializable {
@Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 100, message = "项目任务组名长度不能超过100字符") @Size(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, max = 100, message = "项目任务组名长度不能超过100字符")
@ApiModelProperty("项目任务组名") @ApiModelProperty("项目任务组名")
private String groupName; private String groupName;
@NotNull(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "项目id不能为空")
@ApiModelProperty("项目id")
private String projectId;
} }

View File

@ -21,5 +21,7 @@ public class ProjectTaskGroupResp extends ProjectTaskGroupEntity {
@ApiModelProperty("任务列表") @ApiModelProperty("任务列表")
private List<ProjectTaskResp> taskList; private List<ProjectTaskResp> taskList;
@ApiModelProperty("项目名称")
private String projectName;
} }

View File

@ -2,6 +2,7 @@ package com.dite.znpt.domain.vo;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
@ -60,4 +61,7 @@ public class ProjectTaskImportReq implements Serializable {
@ExcelProperty(value = "备注") @ExcelProperty(value = "备注")
private String remark; private String remark;
@ApiModelProperty("项目id")
private String projectId;
} }

View File

@ -65,5 +65,11 @@ public class ProjectTaskListReq implements Serializable {
@ApiModelProperty(value = "导出?", hidden = true) @ApiModelProperty(value = "导出?", hidden = true)
private Boolean isExport; private Boolean isExport;
@ApiModelProperty("项目id")
private String projectId;
@ApiModelProperty(value = "用户id", hidden = true)
private String userId;
} }

View File

@ -80,5 +80,9 @@ public class ProjectTaskReq implements Serializable {
@ApiModelProperty("备注") @ApiModelProperty("备注")
private String remark; private String remark;
@NotNull(groups = {ValidationGroup.Insert.class, ValidationGroup.Update.class}, message = "项目id不能为空")
@ApiModelProperty("项目id")
private String projectId;
} }

View File

@ -23,5 +23,7 @@ public class ProjectTaskResp extends ProjectTaskEntity {
@ApiModelProperty("附件列表") @ApiModelProperty("附件列表")
private List<AttachInfoEntity> attachList; private List<AttachInfoEntity> attachList;
@ApiModelProperty("项目名称")
private String projectName;
} }

View File

@ -0,0 +1,28 @@
package com.dite.znpt.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author huise23
* @date 2025/04/11 23:17
* @Description: 工作台信息响应实体
*/
@Data
@ApiModel("工作台信息响应实体")
public class WorkbenchInfoResp {
@ApiModelProperty("项目数量")
private long projectCount;
@ApiModelProperty("进行中任务")
private long progressTaskCount;
@ApiModelProperty("待审核报告数")
private long approvalReportCount;
@ApiModelProperty("发现缺陷数")
private long findDefectCount;
}

View File

@ -0,0 +1,15 @@
package com.dite.znpt.service;
import com.dite.znpt.domain.vo.WorkbenchInfoResp;
public interface WorkbenchService {
/**
* 功能描述获取工作台信息
*
* @return {@link WorkbenchInfoResp }
* @author cuizhibin
* @date 2025/07/21 21:27
**/
WorkbenchInfoResp getInfo();
}

View File

@ -52,7 +52,6 @@ public class ProjectTaskServiceImpl extends ServiceImpl<ProjectTaskMapper, Proje
**/ **/
@Override @Override
public List<ProjectTaskResp> selectList(ProjectTaskListReq projectTaskReq) { public List<ProjectTaskResp> selectList(ProjectTaskListReq projectTaskReq) {
PageUtil.startPage();
List<ProjectTaskResp> projectTaskList = this.baseMapper.queryBySelective(projectTaskReq); List<ProjectTaskResp> projectTaskList = this.baseMapper.queryBySelective(projectTaskReq);
Map<String, List<AttachInfoEntity>> attachMap; Map<String, List<AttachInfoEntity>> attachMap;
if (!BooleanUtil.isTrue(projectTaskReq.getIsExport())) { if (!BooleanUtil.isTrue(projectTaskReq.getIsExport())) {

View File

@ -0,0 +1,53 @@
package com.dite.znpt.service.impl;
import cn.dev33.satoken.stp.StpUtil;
import com.dite.znpt.domain.entity.DefectEntity;
import com.dite.znpt.domain.entity.InspectionReportEntity;
import com.dite.znpt.domain.entity.ProjectEntity;
import com.dite.znpt.domain.entity.ProjectTaskEntity;
import com.dite.znpt.domain.vo.WorkbenchInfoResp;
import com.dite.znpt.service.*;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Slf4j
@Service
@RequiredArgsConstructor
public class WorkbenchServiceImpl implements WorkbenchService {
private final ProjectService projectService;
private final ProjectTaskService projectTaskService;
private final InspectionReportService inspectionReportService;
private final DefectService defectService;
@Override
public WorkbenchInfoResp getInfo() {
WorkbenchInfoResp resp = new WorkbenchInfoResp();
String userId = StpUtil.getLoginIdAsString();
// 项目数量
Long projectCount = projectService.lambdaQuery()
.eq(ProjectEntity::getProjectManagerId, userId).or()
.eq(ProjectEntity::getAuditorId, userId).or()
.like(ProjectEntity::getConstructorIds, userId).or()
.eq(ProjectEntity::getQualityOfficerId, userId).or()
.eq(ProjectEntity::getConstructTeamLeaderId, userId)
.count();
resp.setProjectCount(projectCount);
// 进行中任务
Long progressTaskCount = projectTaskService.lambdaQuery()
.eq(ProjectTaskEntity::getMainUserId, userId).or()
.like(ProjectTaskEntity::getUserIds, userId).count();
resp.setProgressTaskCount(progressTaskCount);
// 待审核报告数
Long approvalReportCount = inspectionReportService.lambdaQuery().eq(InspectionReportEntity::getReportAuditor, userId).count();
resp.setApprovalReportCount(approvalReportCount);
// 发现缺陷数
Long findDefectCount = defectService.lambdaQuery()
.eq(DefectEntity::getCreateBy, userId).count();
resp.setFindDefectCount(findDefectCount);
return resp;
}
}

View File

@ -2,13 +2,24 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dite.znpt.mapper.ProjectMapper"> <mapper namespace="com.dite.znpt.mapper.ProjectMapper">
<select id="queryBySelective" resultType="com.dite.znpt.domain.vo.ProjectListResp"> <select id="queryBySelective" resultType="com.dite.znpt.domain.vo.ProjectListResp">
with taskProgress as (
SELECT
count(1) task_count,
sum(status=0) taskPendingCount,
sum(status=1) task_progress_count,
sum(status=2) task_complete_count,
project_id
FROM project_task
group by project_id
)
SELECT SELECT
prj.project_id, prj.project_name, prj.farm_name, prj.status, prj.cover_url, prj.farm_address, prj.client, prj.client_contact, prj.client_phone, prj.inspection_unit, prj.project_id, prj.project_name, prj.farm_name, prj.status, prj.cover_url, prj.farm_address, prj.client, prj.client_contact, prj.client_phone, prj.inspection_unit,
prj.inspection_contact, prj.inspection_phone, prj.scale, prj.turbine_model, prj.project_manager_id, pm.name AS project_manager_name, prj.constructor_ids, prj.inspection_contact, prj.inspection_phone, prj.scale, prj.turbine_model, prj.project_manager_id, pm.name AS project_manager_name, prj.constructor_ids,
GROUP_CONCAT(DISTINCT con.name) AS constructor_name, prj.start_date, prj.end_date GROUP_CONCAT(DISTINCT con.name) AS constructor_name, prj.start_date, prj.end_date, tp.taskPendingCount, tp.task_progress_count, tp.task_complete_count, tp.task_count
FROM project prj FROM project prj
LEFT JOIN user pm ON pm.user_id = prj.project_manager_id LEFT JOIN user pm ON pm.user_id = prj.project_manager_id
LEFT JOIN user con ON FIND_IN_SET(con.user_id,prj.constructor_ids) > 0 AND con.del_flag = '0' LEFT JOIN user con ON FIND_IN_SET(con.user_id,prj.constructor_ids) > 0 AND con.del_flag = '0'
left join taskProgress tp on prj.project_id = tp.project_id
<where> <where>
<if test="projectName != null and projectName != ''"> <if test="projectName != null and projectName != ''">
AND prj.project_name LIKE concat ('%', #{projectName}, '%') AND prj.project_name LIKE concat ('%', #{projectName}, '%')
@ -31,10 +42,15 @@
<if test="endDate != null"> <if test="endDate != null">
and prj.end_date &lt;= #{endDate} and prj.end_date &lt;= #{endDate}
</if> </if>
<if test="userId != null and userId != ''">
and (prj.auditor_id = #{userId} or prj.construct_team_leader_id = #{userId}
or prj.project_manager_id = #{userId} or prj.quality_officer_id = #{userId}
or prj.constructor_ids like concat('%', #{userId},'%'))
</if>
</where> </where>
GROUP BY prj.project_id, prj.project_name, prj.farm_name, prj.status, prj.cover_url, prj.farm_address, prj.client, prj.client_contact, prj.client_phone, prj.inspection_unit, GROUP BY prj.project_id, prj.project_name, prj.farm_name, prj.status, prj.cover_url, prj.farm_address, prj.client, prj.client_contact, prj.client_phone, prj.inspection_unit,
prj.inspection_contact, prj.inspection_phone, prj.scale, prj.turbine_model, prj.project_manager_id, pm.name, prj.constructor_ids, prj.inspection_contact, prj.inspection_phone, prj.scale, prj.turbine_model, prj.project_manager_id, pm.name, prj.constructor_ids,
prj.start_date, prj.end_date prj.start_date, prj.end_date, tp.taskPendingCount, tp.task_progress_count, tp.task_complete_count, tp.task_count
</select> </select>
</mapper> </mapper>

View File

@ -9,15 +9,19 @@
<select id="queryBySelective" resultType="com.dite.znpt.domain.vo.ProjectTaskGroupResp"> <select id="queryBySelective" resultType="com.dite.znpt.domain.vo.ProjectTaskGroupResp">
select select
<include refid="Base_Column_List"/> <include refid="Base_Column_List"/>, p.project_name
from project_task_group a from project_task_group a
left join project p on a.project_id=p.project_id
<where> <where>
<if test="groupId != null and groupId != ''"> <if test="groupId != null and groupId != ''">
and a.group_id like concat ('%', #{groupId}, '%') and a.group_id = #{groupId}
</if> </if>
<if test="groupName != null and groupName != ''"> <if test="groupName != null and groupName != ''">
and a.group_name like concat ('%', #{groupName}, '%') and a.group_name like concat ('%', #{groupName}, '%')
</if> </if>
<if test="projectId != null and projectId != ''">
and a.project_id=#{projectId}
</if>
</where> </where>
</select> </select>
</mapper> </mapper>

View File

@ -11,9 +11,10 @@
<select id="queryBySelective" resultType="com.dite.znpt.domain.vo.ProjectTaskResp"> <select id="queryBySelective" resultType="com.dite.znpt.domain.vo.ProjectTaskResp">
select select
<include refid="Base_Column_List"/> <include refid="Base_Column_List"/>, p.project_name
from project_task a from project_task a
left join user u on a.main_user_id=u.user_id left join user u on a.main_user_id=u.user_id
left join project p on a.project_id=p.project_id
<where> <where>
<if test="keyword != null and keyword != ''"> <if test="keyword != null and keyword != ''">
and (a.task_name like concat('%', #{keyword,jdbcType=VARCHAR}, '%') or a.task_code like concat('%', #{keyword,jdbcType=VARCHAR}, '%')) and (a.task_name like concat('%', #{keyword,jdbcType=VARCHAR}, '%') or a.task_code like concat('%', #{keyword,jdbcType=VARCHAR}, '%'))
@ -57,6 +58,12 @@
<if test="taskNameOrMainUser != null and taskNameOrMainUser != ''"> <if test="taskNameOrMainUser != null and taskNameOrMainUser != ''">
and (a.task_name like concat ('%', #{taskNameOrMainUser}, '%') or u.name like concat ('%', #{taskNameOrMainUser}, '%') ) and (a.task_name like concat ('%', #{taskNameOrMainUser}, '%') or u.name like concat ('%', #{taskNameOrMainUser}, '%') )
</if> </if>
<if test="projectId != null and projectId != ''">
and a.project_id=#{projectId}
</if>
<if test="userId != null and userId != ''">
and (a.main_user_id = #{userId} or a.user_ids like concat('%', #{userId},'%'))
</if>
</where> </where>
</select> </select>

View File

@ -1,6 +1,7 @@
package com.dite.znpt.web.controller; package com.dite.znpt.web.controller;
import cn.dev33.satoken.stp.StpUtil;
import com.dite.znpt.constant.Constants; import com.dite.znpt.constant.Constants;
import com.dite.znpt.domain.vo.ProjectListReq; import com.dite.znpt.domain.vo.ProjectListReq;
import com.dite.znpt.domain.vo.ProjectListResp; import com.dite.znpt.domain.vo.ProjectListResp;
@ -90,5 +91,14 @@ public class ProjectController {
} }
return Result.okM("导入"+dataList.size()+"条数据"); return Result.okM("导入"+dataList.size()+"条数据");
} }
@ApiOperation(value = "查询我的项目", httpMethod = "GET")
@GetMapping("/my")
public Result<List<ProjectListResp>> my() {
ProjectListReq req = new ProjectListReq();
req.setUserId(StpUtil.getLoginIdAsString());
return Result.ok(projectService.list(req));
}
} }

View File

@ -1,12 +1,14 @@
package com.dite.znpt.web.controller; package com.dite.znpt.web.controller;
import cn.dev33.satoken.stp.StpUtil;
import com.dite.znpt.constant.Constants; import com.dite.znpt.constant.Constants;
import com.dite.znpt.domain.PageResult; import com.dite.znpt.domain.PageResult;
import com.dite.znpt.domain.Result; import com.dite.znpt.domain.Result;
import com.dite.znpt.domain.entity.ProjectTaskEntity; import com.dite.znpt.domain.entity.ProjectTaskEntity;
import com.dite.znpt.domain.vo.*; import com.dite.znpt.domain.vo.*;
import com.dite.znpt.service.ProjectTaskService; import com.dite.znpt.service.ProjectTaskService;
import com.dite.znpt.util.PageUtil;
import com.dite.znpt.util.ValidationGroup; import com.dite.znpt.util.ValidationGroup;
import com.pig4cloud.plugin.excel.annotation.RequestExcel; import com.pig4cloud.plugin.excel.annotation.RequestExcel;
import com.pig4cloud.plugin.excel.annotation.ResponseExcel; import com.pig4cloud.plugin.excel.annotation.ResponseExcel;
@ -34,6 +36,7 @@ public class ProjectTaskController {
@ApiOperation(value = "获取项目任务信息列表", httpMethod = "GET") @ApiOperation(value = "获取项目任务信息列表", httpMethod = "GET")
@GetMapping("/list") @GetMapping("/list")
public PageResult<ProjectTaskResp> list(ProjectTaskListReq projectTaskReq) { public PageResult<ProjectTaskResp> list(ProjectTaskListReq projectTaskReq) {
PageUtil.startPage();
return PageResult.ok(projectTaskService.selectList(projectTaskReq)); return PageResult.ok(projectTaskService.selectList(projectTaskReq));
} }
@ -97,5 +100,12 @@ public class ProjectTaskController {
return Result.ok(); return Result.ok();
} }
@ApiOperation(value = "查询我的任务", httpMethod = "GET")
@GetMapping("/my")
public Result<List<ProjectTaskResp>> my() {
ProjectTaskListReq req = new ProjectTaskListReq();
req.setUserId(StpUtil.getLoginIdAsString());
return Result.ok(projectTaskService.selectList(req));
}
} }

View File

@ -0,0 +1,34 @@
package com.dite.znpt.web.controller;
import com.dite.znpt.domain.PageResult;
import com.dite.znpt.domain.Result;
import com.dite.znpt.domain.vo.WeatherTypeListReq;
import com.dite.znpt.domain.vo.WeatherTypeResp;
import com.dite.znpt.domain.vo.WorkbenchInfoResp;
import com.dite.znpt.service.WorkbenchService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author huise23
* @date 2025/04/11 23:17
*/
@Api(tags = "工作台")
@RestController
@RequestMapping("/workbench")
@RequiredArgsConstructor
public class WorkbenchController {
private final WorkbenchService workbenchService;
@ApiOperation(value = "获取工作台信息", httpMethod = "GET")
@GetMapping("/info")
public Result<WorkbenchInfoResp> info() {
return Result.ok(workbenchService.getInfo());
}
}