zy-acs-flow/src/page/agv/AgvCard.jsx
@@ -1,6 +1,6 @@ import * as React from 'react'; import { useState } from 'react'; import { Paper, Typography, Box, Chip, Stack } from '@mui/material'; import { Paper, Typography, Box, AvatarGroup, Avatar } from '@mui/material'; import ContactsIcon from '@mui/icons-material/AccountCircle'; import DealIcon from '@mui/icons-material/MonetizationOn'; import { @@ -9,6 +9,7 @@ useRecordContext, Link, useResourceContext, useDataProvider, } from 'react-admin'; import PulseSignal from '../components/PulseSignal'; import { AgvAvatar } from './AgvAvatar'; @@ -20,10 +21,7 @@ const createPath = useCreatePath(); const record = useRecordContext(props); if (!record) return null; console.log(record); return ( <Link to={createPath({ @@ -62,7 +60,7 @@ </Box> <Box display="flex" flexDirection="column" alignItems="center"> <AgvAvatar /> <Box textAlign="center" marginTop={1}> <Box textAlign="center" marginTop={2}> <Typography variant="subtitle2"> {record.agvStatus} </Typography> @@ -73,37 +71,51 @@ </Box> <Box display="flex" justifyContent="space-around" width="100%"> <Box display="flex" alignItems="center"> <ContactsIcon color="disabled" sx={{ mr: 1 }} /> <div> <Typography variant="subtitle2" sx={{ mb: -1 }}> {record.nb_contacts} </Typography> <Typography variant="caption" color="textSecondary"> {record.nb_contacts ? record.nb_contacts > 1 ? 'contacts' : 'contact' : 'contact'} </Typography> </div> </Box> <Box sx={{ display: 'flex', alignItems: 'center' }}> <DealIcon color="disabled" sx={{ mr: 1 }} /> <div> <Typography variant="subtitle2" sx={{ mb: -1 }}> {record.nb_deals} </Typography> <Typography variant="caption" color="textSecondary"> {record.nb_deals ? record.nb_deals > 1 ? 'deals' : 'deal' : 'deal'} </Typography> </div> <TaskAvatarGroupIterator taskIds={record.taskIds} /> </Box> </Box> </Paper> </Link> ); }; const TaskAvatarGroupIterator = ({ taskIds }) => { const dataProvider = useDataProvider(); const [data, setData] = React.useState([]); const [total, setTotal] = React.useState(0); React.useEffect(() => { if (taskIds?.length > 0) { dataProvider.getMany('task', { ids: taskIds }).then(res => { if (res.data?.length > 0) { setTotal(res.data.length); setData(res.data); } }) } }, [taskIds]) return ( <AvatarGroup max={4} total={total} spacing="medium" sx={{ '& .MuiAvatar-circular': { width: 35, height: 25, fontSize: '0.7rem', }, }} > {data.map((record) => ( <Avatar key={record.id} title={`${record.seqNum}`} > {record.seqNum} </Avatar> ))} </AvatarGroup> ); } zy-acs-manager/src/main/java/com/zy/acs/manager/common/exception/GlobalExceptionHandler.java
@@ -27,6 +27,7 @@ @ExceptionHandler(HttpRequestMethodNotSupportedException.class) public R methodNotSupportedExceptionHandler(HttpRequestMethodNotSupportedException e, HttpServletResponse response) { e.printStackTrace(); CommonUtil.addCrossHeaders(response); return R.error("请求方式不正确"); } zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/AgvController.java
@@ -15,6 +15,7 @@ import com.zy.acs.manager.manager.service.AgvDetailService; import com.zy.acs.manager.manager.service.AgvService; import com.zy.acs.manager.manager.service.CodeService; import com.zy.acs.manager.manager.service.TaskService; import com.zy.acs.manager.system.controller.BaseController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; @@ -33,6 +34,8 @@ private AgvDetailService agvDetailService; @Autowired private CodeService codeService; @Autowired private TaskService taskService; // @PreAuthorize("hasAuthority('manager:agv:list')") // @PostMapping("/agv/page") @@ -54,7 +57,7 @@ PageParam<Agv, BaseParam> pageParam = new PageParam<>(baseParam, Agv.class); PageResult<AgvResult> page = agvService.pageRel(pageParam); for (AgvResult result : page.getRecords()) { result.sync(agvDetailService.selectByAgvId(result.getId()), codeService); result.sync(agvDetailService.selectByAgvId(result.getId()), codeService, taskService); } return R.ok().add(page); } zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/result/AgvResult.java
@@ -1,10 +1,18 @@ package com.zy.acs.manager.manager.controller.result; import com.zy.acs.framework.common.Cools; import com.zy.acs.manager.manager.entity.Agv; import com.zy.acs.manager.manager.entity.AgvDetail; import com.zy.acs.manager.manager.entity.Task; import com.zy.acs.manager.manager.enums.TaskStsType; import com.zy.acs.manager.manager.service.CodeService; import com.zy.acs.manager.manager.service.TaskService; import lombok.Data; import lombok.EqualsAndHashCode; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; /** * Created by vincent on 9/20/2024 @@ -21,8 +29,9 @@ private String code = "-"; private List<Long> taskIds = new ArrayList<>(); public void sync(Object obj, CodeService codeService) { public void sync(Object obj, CodeService codeService, TaskService taskService) { if (null == obj) return; if (obj instanceof AgvDetail) { AgvDetail agvDetail = (AgvDetail) obj; @@ -36,6 +45,13 @@ if (null != agvDetail.getRecentCode()) { this.setCode(codeService.getById(agvDetail.getRecentCode()).getData()); } List<Task> tasks = taskService.selectInSts(agvDetail.getAgvId(), TaskStsType.WAITING, TaskStsType.ASSIGN, TaskStsType.PROGRESS); if (!Cools.isEmpty(tasks)) { this.setTaskIds(tasks.stream().map(Task::getId).collect(Collectors.toList())); this.getTaskIds().add(6441L); this.getTaskIds().add(6442L); this.getTaskIds().add(6443L); } } }