仿真参数库

This commit is contained in:
2025-10-17 10:13:55 +08:00
parent 627f738612
commit aacd1bab4c
16 changed files with 418 additions and 43 deletions

View File

@@ -91,9 +91,9 @@ management:
logging:
level:
com.sdm.gateway2: DEBUG
org.springframework.cloud.gateway: DEBUG
reactor.netty: DEBUG
com.sdm.gateway2: INFO
org.springframework.cloud.gateway: INFO
reactor.netty: INFO
# 0单机处理1负载均衡轮询
serverType: 0

View File

@@ -91,9 +91,9 @@ management:
logging:
level:
com.sdm.gateway2: DEBUG
org.springframework.cloud.gateway: DEBUG
reactor.netty: DEBUG
com.sdm.gateway2: INFO
org.springframework.cloud.gateway: INFO
reactor.netty: INFO
# 0单机处理1负载均衡轮询
serverType: 0

View File

@@ -91,9 +91,9 @@ management:
logging:
level:
com.sdm.gateway2: DEBUG
org.springframework.cloud.gateway: DEBUG
reactor.netty: DEBUG
com.sdm.gateway2: INFO
org.springframework.cloud.gateway: INFO
reactor.netty: INFO
# 0单机处理1负载均衡轮询
serverType: 0

View File

@@ -50,8 +50,8 @@
</root>
<!-- 特定包的日志级别 -->
<logger name="com.sdm.gateway2" level="DEBUG" />
<logger name="org.springframework.cloud.gateway" level="DEBUG" />
<logger name="reactor.netty" level="DEBUG" />
<logger name="org.springframework.web.reactive" level="DEBUG" />
<!-- <logger name="com.sdm.gateway2" level="INFO" />
<logger name="org.springframework.cloud.gateway" level="INFO" />
<logger name="reactor.netty" level="INFO" />
<logger name="org.springframework.web.reactive" level="INFO" />-->
</configuration>

View File

@@ -147,4 +147,32 @@ public class SimulationNodeController implements ISimuluationNodeFeignClient {
}
/**
* 用户组项目统计
*/
@GetMapping("/getUserGroupProjectStatistics")
@Operation(summary = "用户组项目统计", description = "用户组项目统计")
public SdmResponse getUserGroupProjectStatistics(@Parameter(description = "用户组ID")@RequestParam( value = "userGroupId") Integer userGroupId,@Parameter(description = "用户ID")@RequestParam( value = "userId", required = false) Integer userId) {
return nodeService.getUserGroupProjectStatistics(userGroupId,userId);
}
/**
* 用户组任务完成情况统计
*/
@PostMapping("/getUserGroupTaskCompleteStatistics")
@Operation(summary = "用户组任务完成情况统计", description = "用户组任务完成情况统计")
public SdmResponse getUserGroupTaskCompleteStatistics(@RequestBody @Validated GetUserGroupTaskCompleteStatisticsReq req) {
return nodeService.getUserGroupTaskCompleteStatistics(req);
}
/**
* 用户组难度系数统计
*
*/
@GetMapping("/getUserGroupDifficultyStatistics")
@Operation(summary = "用户组难度系数统计", description = "用户组难度系数统计")
public SdmResponse getUserGroupDifficultyStatistics(@RequestBody @Validated GetUserGroupTaskCompleteStatisticsReq req) {
return nodeService.getUserGroupDifficultyStatistics(req);
}
}

View File

@@ -6,14 +6,8 @@ import com.sdm.project.model.po.PerformanceNodePo;
import com.sdm.project.model.po.ProjectNodePo;
import com.sdm.project.model.po.TaskNodeMemberPo;
import com.sdm.project.model.po.TaskNodePo;
import com.sdm.project.model.req.SpdmNodeDetailReq;
import com.sdm.project.model.req.SpdmNodeExtraReq;
import com.sdm.project.model.req.SpdmNodeRelateMemberReq;
import com.sdm.project.model.req.SpdmProjectNodeEditReq;
import com.sdm.project.model.vo.SpdmNodeDetailVo;
import com.sdm.project.model.vo.SpdmNodeExtraVo;
import com.sdm.project.model.vo.SpdmNodeMemberVo;
import com.sdm.project.model.vo.SpdmNodeVo;
import com.sdm.project.model.req.*;
import com.sdm.project.model.vo.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -79,4 +73,10 @@ public interface SimulationNodeMapper extends BaseMapper<SimulationNode> {
List<SpdmNodeVo> getNodeListByIds(@Param("nodeIdList") List<String> nodeIdList);
List<UserGroupProjectVo> getUserGroupProjectStatistics(@Param("userGroupId") Integer userGroupId, @Param("userId") Integer userId);
List<UserGroupTaskCompleteVo> getUserGroupTaskCompleteStatistics(@Param("req") GetUserGroupTaskCompleteStatisticsReq req);
List<UserGroupDifficultyVo> getUserGroupDifficultyStatistics(@Param("req") GetUserGroupTaskCompleteStatisticsReq req);
}

View File

@@ -169,4 +169,5 @@ public interface SimulationProjectMapper {
List<TaskNodePo> getTaskListByTag(@Param("req") ProjectTreeReq taskTreeReq);
void getUserGroupProjectStatistics();
}

View File

@@ -0,0 +1,49 @@
package com.sdm.project.model.req;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
/**
* 用户组任务完成情况统计请求参数
*/
@Data
@Schema(description = "用户组任务完成情况统计请求参数")
public class GetUserGroupTaskCompleteStatisticsReq {
@Schema(description = "用户组ID")
@NotNull
private Integer userGroupId;
@Schema(description = "用户ID")
private Integer userId;
@Schema(description = "标签1")
private String tag1;
@Schema(description = "标签2")
private String tag2;
@Schema(description = "标签3")
private String tag3;
@Schema(description = "标签4")
private String tag4;
@Schema(description = "标签5")
private String tag5;
@Schema(description = "标签6")
private String tag6;
@Schema(description = "标签7")
private String tag7;
@Schema(description = "标签8")
private String tag8;
@Schema(description = "标签9")
private String tag9;
@Schema(description = "标签10")
private String tag10;
}

View File

@@ -0,0 +1,14 @@
package com.sdm.project.model.vo;
import lombok.Data;
import java.util.HashMap;
import java.util.Map;
@Data
public class UserGroupDifficultyStatisticsVo {
private Integer userId;
private String userName;
private Map<Float, Integer> difficultyCount = new HashMap<>();
private Integer totalTasks;
}

View File

@@ -0,0 +1,11 @@
package com.sdm.project.model.vo;
import lombok.Data;
@Data
public class UserGroupDifficultyVo {
private float difficulty;
private Integer userId;
private String nickname;
private Integer groupId;
}

View File

@@ -0,0 +1,14 @@
package com.sdm.project.model.vo;
import lombok.Data;
/**
* 用户项目统计VO
*/
@Data
public class UserGroupProjectVo {
private String nodeId;
private Integer userId;
private String nickname;
private Integer groupId;
}

View File

@@ -0,0 +1,14 @@
package com.sdm.project.model.vo;
import lombok.Data;
import java.util.HashMap;
import java.util.Map;
@Data
public class UserGroupTaskCompleteStatisticsVo {
private Integer userId;
private String userName;
private Map<String, Integer> statusCount = new HashMap<>();
private Integer totalTasks;
}

View File

@@ -0,0 +1,11 @@
package com.sdm.project.model.vo;
import lombok.Data;
@Data
public class UserGroupTaskCompleteVo {
private String exeStatus;
private String nickname;
private Integer userId;
private Integer groupId;
}

View File

@@ -30,4 +30,11 @@ public interface INodeService extends IService<SimulationNode> {
SdmResponse<List<AllNodeByProjectIdAndTypeResp>> getAllNodeByProjectIdAndType(Integer chooseNodeId, String nextNodeType);
SdmResponse getUserGroupProjectStatistics(Integer userGroupId, Integer userId);
SdmResponse getUserGroupTaskCompleteStatistics(GetUserGroupTaskCompleteStatisticsReq req);
//用户组难度系数统计
SdmResponse getUserGroupDifficultyStatistics(GetUserGroupTaskCompleteStatisticsReq req);
}

View File

@@ -686,4 +686,105 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
return (String) field.get(obj);
}
@Override
public SdmResponse getUserGroupProjectStatistics(Integer userGroupId, Integer userId) {
List<UserGroupProjectVo> userGroupProjectStatistics = this.baseMapper.getUserGroupProjectStatistics(userGroupId, userId);
if(CollectionUtils.isEmpty(userGroupProjectStatistics)) {
return SdmResponse.success(new ArrayList<>());
}
// 按用户ID统计项目数量
Map<Integer, Integer> userProjectCountMap = new HashMap<>();
// 存储每个用户的详细信息使用LinkedHashMap保持插入顺序
Map<Integer, UserGroupProjectVo> userId2UserGroupProjectVo = new LinkedHashMap<>();
for (UserGroupProjectVo vo : userGroupProjectStatistics) {
Integer userIdKey = vo.getUserId();
userProjectCountMap.put(userIdKey, userProjectCountMap.getOrDefault(userIdKey, 0) + 1);
// 只保存第一个遇到的用户信息,或者可以考虑保存最新的
if (!userId2UserGroupProjectVo.containsKey(userIdKey)) {
userId2UserGroupProjectVo.put(userIdKey, vo);
}
}
// 转换为List<Map<String, Object>>格式,便于前端展示
List<Map<String, Object>> userResult = new ArrayList<>();
// 添加用户项目统计
for (Map.Entry<Integer, Integer> entry : userProjectCountMap.entrySet()) {
Map<String, Object> item = new HashMap<>();
item.put("userId", entry.getKey());
item.put("userName", userId2UserGroupProjectVo.get(entry.getKey()).getNickname());
item.put("projectCount", entry.getValue());
userResult.add(item);
}
return SdmResponse.success(userResult);
}
@Override
public SdmResponse getUserGroupTaskCompleteStatistics(GetUserGroupTaskCompleteStatisticsReq req) {
List<UserGroupTaskCompleteVo> userGroupTaskCompleteStatistics = this.baseMapper.getUserGroupTaskCompleteStatistics(req);
// 按用户分组统计任务状态
Map<Integer, UserGroupTaskCompleteStatisticsVo> userStatisticsMap = new HashMap<>();
// 统计每个用户的各种状态任务数量
for (UserGroupTaskCompleteVo item : userGroupTaskCompleteStatistics) {
Integer userId = item.getUserId();
String exeStatus = item.getExeStatus();
UserGroupTaskCompleteStatisticsVo userStat = userStatisticsMap.getOrDefault(userId, new UserGroupTaskCompleteStatisticsVo());
userStat.setUserId(userId);
userStat.setUserName(item.getNickname());
Map<String, Integer> statusCount = userStat.getStatusCount();
if (statusCount == null) {
statusCount = new HashMap<>();
userStat.setStatusCount(statusCount);
}
statusCount.put(exeStatus, statusCount.getOrDefault(exeStatus, 0) + 1);
userStat.setTotalTasks(userStat.getTotalTasks() == null ? 1 : userStat.getTotalTasks() + 1);
userStatisticsMap.put(userId, userStat);
}
// 转换为列表返回
List<UserGroupTaskCompleteStatisticsVo> result = new ArrayList<>(userStatisticsMap.values());
return SdmResponse.success(result);
}
@Override
public SdmResponse getUserGroupDifficultyStatistics(GetUserGroupTaskCompleteStatisticsReq req) {
List<UserGroupDifficultyVo> userGroupDifficultyStatistics = this.baseMapper.getUserGroupDifficultyStatistics(req);
// 按用户分组统计任务状态
Map<Integer, UserGroupDifficultyStatisticsVo> userStatisticsMap = new HashMap<>();
// 统计每个用户的各种状态任务数量
for (UserGroupDifficultyVo item : userGroupDifficultyStatistics) {
Integer userId = item.getUserId();
Float difficulty = item.getDifficulty();
UserGroupDifficultyStatisticsVo userStat = userStatisticsMap.getOrDefault(userId, new UserGroupDifficultyStatisticsVo());
userStat.setUserId(userId);
userStat.setUserName(item.getNickname());
Map<Float, Integer> statusCount = userStat.getDifficultyCount();
if (statusCount == null) {
statusCount = new HashMap<>();
userStat.setDifficultyCount(statusCount);
}
statusCount.put(difficulty, statusCount.getOrDefault(difficulty, 0) + 1);
userStat.setTotalTasks(userStat.getTotalTasks() == null ? 1 : userStat.getTotalTasks() + 1);
userStatisticsMap.put(userId, userStat);
}
// 转换为列表返回
List<UserGroupDifficultyStatisticsVo> result = new ArrayList<>(userStatisticsMap.values());
return SdmResponse.success(result);
}
}

View File

@@ -7,7 +7,8 @@
<insert id="addNodeBatch" useGeneratedKeys="true" keyProperty="id">
insert into simulation_node
(uuid,nodeName,nodeCode,englishName,nodeType,nodeSubType,nodeStatus,parentId,folderId,nodeLevel,beginTime,endTime,finishTime,progress,
achieveStatus,nodeVersion,tenantId,description,detailImgUrl,creator,create_time,tag1,tag2,tag3,tag4,tag5,tag6,tag7,tag8,tag9,tag10) values
achieveStatus,nodeVersion,tenantId,description,detailImgUrl,creator,create_time,tag1,tag2,tag3,tag4,tag5,tag6,tag7,tag8,tag9,tag10)
values
<foreach collection='addNodeList' item='addNode' index='index' separator=','>
(#{addNode.uuid},#{addNode.nodeName},#{addNode.nodeCode},'',#{addNode.nodeType},#{addNode.nodeSubType},'0',#{addNode.pid},
'',1,#{addNode.beginTime},#{addNode.endTime},'',#{addNode.progressStatus},#{addNode.achieveStatus},'1',#{addNode.tenantId},#{addNode.description},
@@ -26,7 +27,8 @@
<insert id="addNodeExtraBatch">
insert into simulation_node_extra (nodeId,propertyName,propertyValue,valueType,propertyClass,creator,create_time) values
insert into simulation_node_extra
(nodeId,propertyName,propertyValue,valueType,propertyClass,creator,create_time) values
<foreach collection='addNodeExtraList' item='addNodeExtra' index='index' separator=','>
(#{addNodeExtra.nodeId},#{addNodeExtra.propertyName},#{addNodeExtra.propertyValue},#{addNodeExtra.valueType},#{addNodeExtra.propertyClass},#{addNodeExtra.creator},#{addNodeExtra.createTime})
</foreach>
@@ -42,19 +44,19 @@
nodeCode = #{editNode.nodeCode},
</if>
<if test="editNode.nodeSubType != null and editNode.nodeSubType != ''">
nodeSubType = #{editNode.nodeSubType},
nodeSubType = #{editNode.nodeSubType},
</if>
<if test="editNode.beginTime != null and editNode.beginTime != ''">
beginTime = #{editNode.beginTime},
beginTime = #{editNode.beginTime},
</if>
<if test="editNode.endTime != null and editNode.endTime != ''">
endTime = #{editNode.endTime},
endTime = #{editNode.endTime},
</if>
<if test="editNode.description != null and editNode.description != ''">
description = #{editNode.description},
description = #{editNode.description},
</if>
<if test="editNode.detailImgUrl != null and editNode.detailImgUrl != ''">
detailImgUrl = #{editNode.detailImgUrl}
detailImgUrl = #{editNode.detailImgUrl}
</if>
<if test="editNode.exeStatus != null and editNode.exeStatus != ''">
exe_status = #{editNode.exeStatus}
@@ -235,26 +237,25 @@
<select id="getNodeExtraListByNodeIdList" resultType="com.sdm.project.model.vo.SpdmNodeExtraVo">
SELECT
*
*
FROM
simulation_node_extra
simulation_node_extra
WHERE
nodeId in (
<foreach collection='nodeIdList' item='nodeId' index='index' separator=','>
#{nodeId}
</foreach>
)
nodeId in (
<foreach collection='nodeIdList' item='nodeId' index='index' separator=','>
#{nodeId}
</foreach>
)
</select>
<select id="getNodeDetail" resultType="com.sdm.project.model.vo.SpdmNodeDetailVo">
select
*,
GROUP_CONCAT(snm.name ORDER BY snm.name SEPARATOR ',') AS managers
select *,
GROUP_CONCAT(snm.name ORDER BY snm.name SEPARATOR ',') AS managers
from simulation_node sn
LEFT JOIN simulation_node_member snm ON sn.uuid = snm.nodeId
where sn.uuid = #{projectNodeId} and sn.tenantId = #{tenantId}
GROUP BY sn.uuid
limit 0,1
LEFT JOIN simulation_node_member snm ON sn.uuid = snm.nodeId
where sn.uuid = #{projectNodeId}
and sn.tenantId = #{tenantId}
GROUP BY sn.uuid limit 0,1
</select>
<select id="allList" resultType="com.sdm.project.model.po.ProjectNodePo">
@@ -292,7 +293,9 @@
</select>
<select id="getNodeById" resultType="com.sdm.project.model.vo.SpdmNodeVo">
select * from simulation_node where uuid = #{projectNodeId} limit 1
select *
from simulation_node
where uuid = #{projectNodeId} limit 1
</select>
<select id="getNodeListByNodeIdList" resultType="com.sdm.project.model.vo.SpdmNodeVo">
@@ -321,7 +324,129 @@
</foreach>
)
</select>
<select id="getUserGroupProjectStatistics" resultType="com.sdm.project.model.vo.UserGroupProjectVo">
select
nm.nodeId,
nm.user_id as userId,
su.nickname,
sur.groupId
from simulation_node_member nm
LEFT JOIN sys_user su on nm.user_id = su.id
left join sys_user_group_relation sur on sur.userId = su.id
<where>
nm.user_id is not null and sur.groupId is not null
<if test="userGroupId != null">
and sur.groupId = #{userGroupId}
</if>
<if test="userId != null">
and nm.user_id = #{userId}
</if>
</where>
</select>
<select id="getUserGroupTaskCompleteStatistics"
parameterType="com.sdm.project.model.req.GetUserGroupTaskCompleteStatisticsReq"
resultType="com.sdm.project.model.vo.UserGroupTaskCompleteVo">
select exe_status as exeStatus,
task_member.user_id as userId,
su.nickname,
sur.groupId
from simulation_task task
left join simulation_task_member task_member on task.uuid = task_member.task_id
LEFT JOIN sys_user su on task_member.user_id = su.id
left join sys_user_group_relation sur on sur.userId = su.id
<where>
task_member.user_id is not null and sur.groupId is not null
<if test="req.userGroupId != null">
and sur.groupId = #{req.userGroupId}
</if>
<if test="req.userId != null">
and task_member.user_id = #{req.userId}
</if>
<if test="req.tag1 != null and req.tag1 !='' ">
and task.tag1 = #{req.tag1}
</if>
<if test="req.tag2 != null">
and task.tag2 = #{req.tag2}
</if>
<if test="req.tag3 != null">
and task.tag3 = #{req.tag3}
</if>
<if test="req.tag4 != null">
and task.tag4 = #{req.tag4}
</if>
<if test="req.tag5 != null">
and task.tag5 = #{req.tag5}
</if>
<if test="req.tag6 != null">
and task.tag6 = #{req.tag6}
</if>
<if test="req.tag7 != null">
and task.tag7 = #{req.tag7}
</if>
<if test="req.tag8 != null">
and task.tag8 = #{req.tag8}
</if>
<if test="req.tag9 != null">
and task.tag9 = #{req.tag9}
</if>
<if test="req.tag10 != null">
and task.tag10 = #{req.tag10}
</if>
</where>
</select>
<select id="getUserGroupDifficultyStatistics"
parameterType="com.sdm.project.model.req.GetUserGroupTaskCompleteStatisticsReq"
resultType="com.sdm.project.model.vo.UserGroupDifficultyVo">
select
task.difficulty,
task_member.user_id as userId,
su.nickname,
sur.groupId
from simulation_task task
left join simulation_task_member task_member on task.uuid = task_member.task_id
LEFT JOIN sys_user su on task_member.user_id = su.id
left join sys_user_group_relation sur on sur.userId = su.id
<where>
task_member.user_id is not null and sur.groupId is not null
<if test="req.userGroupId != null">
and sur.groupId = #{req.userGroupId}
</if>
<if test="req.userId != null">
and task_member.user_id = #{req.userId}
</if>
<if test="req.tag1 != null and req.tag1 !='' ">
and task.tag1 = #{req.tag1}
</if>
<if test="req.tag2 != null">
and task.tag2 = #{req.tag2}
</if>
<if test="req.tag3 != null">
and task.tag3 = #{req.tag3}
</if>
<if test="req.tag4 != null">
and task.tag4 = #{req.tag4}
</if>
<if test="req.tag5 != null">
and task.tag5 = #{req.tag5}
</if>
<if test="req.tag6 != null">
and task.tag6 = #{req.tag6}
</if>
<if test="req.tag7 != null">
and task.tag7 = #{req.tag7}
</if>
<if test="req.tag8 != null">
and task.tag8 = #{req.tag8}
</if>
<if test="req.tag9 != null">
and task.tag9 = #{req.tag9}
</if>
<if test="req.tag10 != null">
and task.tag10 = #{req.tag10}
</if>
</where>
</select>
</mapper>