fix: 统一第二轮子任务组发布的钉钉通知模板与第一轮格式一致
This commit is contained in:
parent
6fc888458a
commit
b42a0f51fa
@ -22,6 +22,7 @@ import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
||||
/**
|
||||
* 任务子项服务类(流水线任务)
|
||||
@ -42,6 +43,7 @@ public class TaskItemService {
|
||||
private final SystemConfigService systemConfigService;
|
||||
private final DemandTypeMapper demandTypeMapper;
|
||||
private final com.designhub.mapper.UserMapper userMapper;
|
||||
private final ObjectMapper objectMapper;
|
||||
|
||||
/**
|
||||
* 获取可接单的子任务列表
|
||||
@ -809,85 +811,104 @@ public class TaskItemService {
|
||||
taskItemMapper.updateById(item);
|
||||
}
|
||||
|
||||
// 发送钉钉群机器人通知
|
||||
// 注意:钉钉Markdown换行需要两个空格+换行符
|
||||
// 发送钉钉群机器人通知(与第一轮格式一致)
|
||||
try {
|
||||
String title = "新子任务组发布";
|
||||
String title = "新任务发布";
|
||||
StringBuilder content = new StringBuilder();
|
||||
content.append("-------------------------------- \n");
|
||||
content.append(" 【 新 子 任 务 组 发 布 】 \n");
|
||||
content.append("-------------------------------- \n\n");
|
||||
|
||||
// 主任务信息
|
||||
content.append("主任务:").append(mainTask.getTitle()).append(" \n");
|
||||
content.append("任务编号:").append(mainTask.getTaskNo()).append(" \n");
|
||||
content.append("任务组:第 ").append(groupNo).append(" 组 \n");
|
||||
content.append("子任务数量:").append(groupItems.size()).append(" 个 \n");
|
||||
|
||||
// 计算总积分
|
||||
int totalScore = groupItems.stream().mapToInt(item -> item.getTotalScore() != null ? item.getTotalScore() : 0).sum();
|
||||
content.append("总积分:").append(totalScore).append(" 分 \n");
|
||||
|
||||
// 任务需求类型
|
||||
if (mainTask.getTaskTypeIds() != null && !mainTask.getTaskTypeIds().isEmpty()) {
|
||||
StringBuilder typeNames = new StringBuilder();
|
||||
String[] typeIds = mainTask.getTaskTypeIds().split(",");
|
||||
for (String typeIdStr : typeIds) {
|
||||
try {
|
||||
Long typeId = Long.parseLong(typeIdStr.trim());
|
||||
com.designhub.entity.DemandType demandType = configService.getDemandTypeById(typeId);
|
||||
if (demandType != null) {
|
||||
if (typeNames.length() > 0) {
|
||||
typeNames.append("、");
|
||||
}
|
||||
typeNames.append(demandType.getName());
|
||||
}
|
||||
} catch (NumberFormatException e) {
|
||||
log.warn("解析任务类型ID失败:{}", typeIdStr);
|
||||
}
|
||||
}
|
||||
if (typeNames.length() > 0) {
|
||||
content.append("需求类型:").append(typeNames.toString()).append(" \n");
|
||||
}
|
||||
}
|
||||
|
||||
content.append(" \n");
|
||||
// 基本信息
|
||||
content.append("**任务名称**:").append(mainTask.getTitle()).append("(第").append(groupNo).append("组) \n");
|
||||
content.append("**任务编号**:").append(mainTask.getTaskNo()).append(" \n");
|
||||
|
||||
// 任务详情
|
||||
if (mainTask.getBrandName() != null && !mainTask.getBrandName().isEmpty()) {
|
||||
content.append("品牌:").append(mainTask.getBrandName()).append(" \n");
|
||||
}
|
||||
if (mainTask.getCategoryName() != null && !mainTask.getCategoryName().isEmpty()) {
|
||||
content.append("类目:").append(mainTask.getCategoryName()).append(" \n");
|
||||
content.append("**品牌**:").append(mainTask.getBrandName()).append(" \n");
|
||||
}
|
||||
if (mainTask.getPlatformName() != null && !mainTask.getPlatformName().isEmpty()) {
|
||||
content.append("平台:").append(mainTask.getPlatformName()).append(" \n");
|
||||
content.append("**平台**:").append(mainTask.getPlatformName()).append(" \n");
|
||||
}
|
||||
if (mainTask.getSpuInfo() != null && !mainTask.getSpuInfo().isEmpty()) {
|
||||
content.append("SPU:").append(mainTask.getSpuInfo()).append(" \n");
|
||||
content.append("**SPU**:").append(mainTask.getSpuInfo()).append(" \n");
|
||||
}
|
||||
if (mainTask.getTaskSubType() != null && !mainTask.getTaskSubType().isEmpty()) {
|
||||
String taskSubTypeName = convertTaskSubTypeToName(mainTask.getTaskSubType());
|
||||
content.append("**任务类型**:").append(taskSubTypeName).append(" \n");
|
||||
}
|
||||
|
||||
content.append(" \n");
|
||||
|
||||
// 列出子任务详情
|
||||
content.append("子任务列表: \n");
|
||||
// 任务明细(与第一轮格式一致)
|
||||
content.append("**任务明细**: \n");
|
||||
for (TaskItem item : groupItems) {
|
||||
content.append(" - ").append(item.getItemNo())
|
||||
.append("(").append(item.getTotalScore() != null ? item.getTotalScore() : 0).append("分) \n");
|
||||
// 通过任务类型ID获取接单部门名称
|
||||
String deptName = "未指定";
|
||||
if (item.getTaskTypeId() != null) {
|
||||
try {
|
||||
com.designhub.entity.DemandType demandType = configService.getDemandTypeById(item.getTaskTypeId());
|
||||
if (demandType != null && demandType.getAllowedDeptIds() != null && !demandType.getAllowedDeptIds().isEmpty()) {
|
||||
String[] deptIds = demandType.getAllowedDeptIds().split(",");
|
||||
Long firstDeptId = Long.parseLong(deptIds[0].trim());
|
||||
com.designhub.entity.Department dept = departmentMapper.selectById(firstDeptId);
|
||||
if (dept != null) {
|
||||
deptName = dept.getDeptName();
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.warn("获取部门名称失败: {}", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// 格式化工时显示
|
||||
String hoursDisplay = "未知";
|
||||
if (item.getEstimatedHours() != null) {
|
||||
java.math.BigDecimal hours = item.getEstimatedHours();
|
||||
if (hours.compareTo(java.math.BigDecimal.ONE) >= 0) {
|
||||
hoursDisplay = hours.intValue() + "小时";
|
||||
} else {
|
||||
int minutes = hours.multiply(java.math.BigDecimal.valueOf(60)).intValue();
|
||||
hoursDisplay = minutes + "分钟";
|
||||
}
|
||||
}
|
||||
|
||||
content.append(" \n");
|
||||
content.append("▸ **").append(deptName).append("** | ")
|
||||
.append(item.getTotalScore() != null ? item.getTotalScore() : 0).append("分 | ")
|
||||
.append(hoursDisplay).append(" \n");
|
||||
|
||||
// 解析并显示任务类型明细
|
||||
if (item.getTypeDetails() != null && !item.getTypeDetails().isEmpty()) {
|
||||
try {
|
||||
@SuppressWarnings("unchecked")
|
||||
java.util.List<java.util.Map<String, Object>> typeDetails =
|
||||
objectMapper.readValue(item.getTypeDetails(), java.util.List.class);
|
||||
for (java.util.Map<String, Object> detail : typeDetails) {
|
||||
String typeName = String.valueOf(detail.get("typeName"));
|
||||
Object qtyObj = detail.get("quantity");
|
||||
Object scoreObj = detail.get("totalScore");
|
||||
int qty = qtyObj instanceof Number ? ((Number) qtyObj).intValue() : 1;
|
||||
String score = scoreObj != null ? String.valueOf(scoreObj) : "0";
|
||||
content.append(" └ ").append(typeName)
|
||||
.append(" ×").append(qty)
|
||||
.append(" = ").append(score).append("分 \n");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.warn("解析任务类型明细失败: {}", e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
content.append(" \n");
|
||||
|
||||
// 发起人信息
|
||||
if (mainTask.getPublisherName() != null && !mainTask.getPublisherName().isEmpty()) {
|
||||
content.append("发起人:").append(mainTask.getPublisherName()).append(" \n");
|
||||
content.append("**发起人**:").append(mainTask.getPublisherName()).append(" \n");
|
||||
}
|
||||
if (mainTask.getPublisherDeptName() != null && !mainTask.getPublisherDeptName().isEmpty()) {
|
||||
content.append("发起部门:").append(mainTask.getPublisherDeptName()).append(" \n");
|
||||
content.append("**发起部门**:").append(mainTask.getPublisherDeptName()).append(" \n");
|
||||
}
|
||||
|
||||
content.append(" \n");
|
||||
content.append("-------------------------------- \n");
|
||||
content.append("前往抢单:qd.yydd.ai \n");
|
||||
content.append("--------------------------------");
|
||||
content.append("点击下方按钮查看详情");
|
||||
|
||||
dingTalkService.sendRobotMessage(title, content.toString());
|
||||
log.info("第 {} 组 {} 个子任务已发布到任务大厅,已发送钉钉群通知", groupNo, groupItems.size());
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user