| | |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.vincent.rsf.framework.exception.CoolException; |
| | | import com.vincent.rsf.server.common.utils.FieldsUtils; |
| | | import com.vincent.rsf.server.manager.entity.Task; |
| | | import com.vincent.rsf.server.manager.entity.TaskItem; |
| | | import com.vincent.rsf.server.manager.service.TaskItemService; |
| | | import com.vincent.rsf.server.manager.service.TaskService; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.springframework.ai.tool.annotation.Tool; |
| | |
| | | import java.util.LinkedHashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Objects; |
| | | |
| | | @Component |
| | | @RequiredArgsConstructor |
| | | public class RsfWmsTaskTools { |
| | | |
| | | private final TaskService taskService; |
| | | private final TaskItemService taskItemService; |
| | | |
| | | /** |
| | | * 查询任务列表。 |
| | |
| | | * 查询单个任务详情。 |
| | | * 与列表查询不同,这里允许返回更丰富的字段,但仍然要求调用方通过任务 ID 或任务号做精确定位。 |
| | | */ |
| | | @Tool(name = "rsf_query_task_detail", description = "只读查询工具。根据任务 ID 或任务号查询任务详情。") |
| | | @Tool(name = "rsf_query_task_detail", description = "只读查询工具。查询任务列表有正常返回值可以根据任务ID查询任务详情。") |
| | | public Map<String, Object> queryTaskDetail( |
| | | @ToolParam(description = "任务 ID") Long taskId, |
| | | @ToolParam(description = "任务号") String taskCode) { |
| | | String normalizedTaskCode = BuiltinToolGovernanceSupport.sanitizeQueryText(taskCode, "任务号", 64); |
| | | if (taskId == null && !StringUtils.hasText(normalizedTaskCode)) { |
| | | throw new CoolException("任务 ID 和任务号至少需要提供一个"); |
| | | @ToolParam(description = "任务 ID") Long taskId |
| | | ) { |
| | | |
| | | if (taskId == null) { |
| | | throw new CoolException("任务 ID 需要提供"); |
| | | } |
| | | Task task; |
| | | if (taskId != null) { |
| | | task = taskService.getById(taskId); |
| | | } else { |
| | | task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskCode, normalizedTaskCode)); |
| | | } |
| | | if (task == null) { |
| | | List<TaskItem> taskItems = new ArrayList<>(); |
| | | taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, taskId)); |
| | | |
| | | if (taskItems.isEmpty()) { |
| | | throw new CoolException("未查询到任务"); |
| | | } |
| | | Map<String, Object> result = buildTaskSummary(task); |
| | | result.put("resource", task.getResource()); |
| | | result.put("exceStatus", task.getExceStatus()); |
| | | result.put("orgLoc", task.getOrgLoc()); |
| | | result.put("targLoc", task.getTargLoc()); |
| | | result.put("orgSite", task.getOrgSite()); |
| | | result.put("orgSiteLabel", task.getOrgSite$()); |
| | | result.put("targSite", task.getTargSite()); |
| | | result.put("targSiteLabel", task.getTargSite$()); |
| | | result.put("barcode", task.getBarcode()); |
| | | result.put("robotCode", task.getRobotCode()); |
| | | result.put("memo", task.getMemo()); |
| | | result.put("expCode", task.getExpCode()); |
| | | result.put("expDesc", task.getExpDesc()); |
| | | result.put("startTime", task.getStartTime$()); |
| | | result.put("endTime", task.getEndTime$()); |
| | | result.put("createTime", task.getCreateTime$()); |
| | | result.put("updateTime", task.getUpdateTime$()); |
| | | return result; |
| | | return buildTaskItemDetail(taskItems); |
| | | } |
| | | |
| | | private Map<String, Object> buildTaskSummary(Task task) { |
| | |
| | | return item; |
| | | } |
| | | |
| | | private Map<String, Object> buildTaskItemDetail(List<TaskItem> taskItems) { |
| | | Map<String, Object> result = new LinkedHashMap<>(); |
| | | result.put("taskId", taskItems.get(0).getTaskId()); |
| | | result.put("itemCount", taskItems.size()); |
| | | |
| | | double totalAnfme = 0D; |
| | | double totalWorkQty = 0D; |
| | | double totalQty = 0D; |
| | | List<Map<String, Object>> items = new ArrayList<>(); |
| | | for (TaskItem taskItem : taskItems) { |
| | | totalAnfme += taskItem.getAnfme() == null ? 0D : taskItem.getAnfme(); |
| | | totalWorkQty += taskItem.getWorkQty() == null ? 0D : taskItem.getWorkQty(); |
| | | totalQty += taskItem.getQty() == null ? 0D : taskItem.getQty(); |
| | | items.add(buildTaskItemRow(taskItem)); |
| | | } |
| | | |
| | | result.put("totalAnfme", totalAnfme); |
| | | result.put("totalWorkQty", totalWorkQty); |
| | | result.put("totalQty", totalQty); |
| | | result.put("items", items); |
| | | return result; |
| | | } |
| | | |
| | | private Map<String, Object> buildTaskItemRow(TaskItem taskItem) { |
| | | if (!Objects.isNull(taskItem.getFieldsIndex())) { |
| | | taskItem.setExtendFields(FieldsUtils.getFields(taskItem.getFieldsIndex())); |
| | | } |
| | | Map<String, Object> item = new LinkedHashMap<>(); |
| | | item.put("id", taskItem.getId()); |
| | | item.put("taskId", taskItem.getTaskId()); |
| | | item.put("matnrId", taskItem.getMatnrId()); |
| | | item.put("matnrCode", taskItem.getMatnrCode()); |
| | | item.put("maktx", taskItem.getMaktx()); |
| | | item.put("trackCode", taskItem.getTrackCode()); |
| | | item.put("splrBatch", taskItem.getSplrBatch()); |
| | | item.put("batch", taskItem.getBatch()); |
| | | item.put("spec", taskItem.getSpec()); |
| | | item.put("model", taskItem.getModel()); |
| | | item.put("unit", taskItem.getUnit()); |
| | | item.put("anfme", taskItem.getAnfme()); |
| | | item.put("workQty", taskItem.getWorkQty()); |
| | | item.put("qty", taskItem.getQty()); |
| | | item.put("ableQty", taskItem.getAbleQty()); |
| | | item.put("source", taskItem.getSource()); |
| | | item.put("sourceId", taskItem.getSourceId()); |
| | | item.put("sourceCode", taskItem.getSourceCode()); |
| | | item.put("orderId", taskItem.getOrderId()); |
| | | item.put("orderItemId", taskItem.getOrderItemId()); |
| | | item.put("platItemId", taskItem.getPlatItemId()); |
| | | item.put("platOrderCode", taskItem.getPlatOrderCode()); |
| | | item.put("platWorkCode", taskItem.getPlatWorkCode()); |
| | | item.put("projectCode", taskItem.getProjectCode()); |
| | | item.put("orderType", taskItem.getOrderType()); |
| | | item.put("orderTypeLabel", taskItem.getOrderType$()); |
| | | item.put("wkType", taskItem.getWkType()); |
| | | item.put("wkTypeLabel", taskItem.getWkType$()); |
| | | item.put("isptResult", taskItem.getIsptResult()); |
| | | item.put("isptResultLabel", taskItem.getIsptResult$()); |
| | | item.put("fieldsIndex", taskItem.getFieldsIndex()); |
| | | item.put("extendFields", taskItem.getExtendFields()); |
| | | item.put("status", taskItem.getStatus()); |
| | | item.put("statusLabel", taskItem.getStatus$()); |
| | | item.put("memo", taskItem.getMemo()); |
| | | item.put("createTime", taskItem.getCreateTime$()); |
| | | item.put("updateTime", taskItem.getUpdateTime$()); |
| | | return item; |
| | | } |
| | | |
| | | } |