From bdc1625cac2a70dc261ecb8af031f3cee603f878 Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@gmail.com> Date: 星期四, 17 四月 2025 10:00:49 +0800 Subject: [PATCH] # --- zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java | 8 +++ zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/SegmentController.java | 7 +++ zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/SegmentServiceImpl.java | 39 ++++++++++++++++++- zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/SegmentService.java | 2 + zy-acs-flow/src/page/segment/SegmentList.jsx | 49 +++++++++++++++++++++--- 5 files changed, 95 insertions(+), 10 deletions(-) diff --git a/zy-acs-flow/src/page/segment/SegmentList.jsx b/zy-acs-flow/src/page/segment/SegmentList.jsx index d1d49af..1bce14c 100644 --- a/zy-acs-flow/src/page/segment/SegmentList.jsx +++ b/zy-acs-flow/src/page/segment/SegmentList.jsx @@ -32,6 +32,7 @@ DeleteButton, FunctionField, Count, + useNotify, } from 'react-admin'; import { Box, Typography, Stack, useMediaQuery, Tabs, Tab, Divider } from '@mui/material'; import { styled } from '@mui/material/styles'; @@ -42,6 +43,9 @@ import MyField from "../components/MyField"; import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting'; import * as Common from '@/utils/common'; +import ConfirmButton from "../components/ConfirmButton"; +import ClearIcon from '@mui/icons-material/Clear'; +import request from '@/utils/request'; const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ '& .css-1vooibu-MuiSvgIcon-root': { @@ -53,13 +57,13 @@ '& .column-name': { }, '& .opt': { - width: 200 + width: 120 }, })); const filters = [ // <SearchInput source="condition" alwaysOn />, - <TextInput source="groupId" label="table.field.segment.groupId" alwaysOn/>, + <TextInput source="groupId" label="table.field.segment.groupId" alwaysOn />, <ReferenceInput source="agvId" label="table.field.segment.agvId" reference="agv" alwaysOn> <AutocompleteInput label="table.field.segment.agvId" optionText="uuid" filterToQuery={(val) => ({ uuid: val })} /> </ReferenceInput>, @@ -140,6 +144,7 @@ const TabbedDatagrid = () => { const translate = useTranslate(); + const notify = useNotify(); const { filterValues, setFilters, displayedFilters } = useListContext(); const isXSmall = useMediaQuery(theme => theme.breakpoints.down('sm') @@ -152,6 +157,19 @@ ); }, [filterValues, setFilters, displayedFilters]); + const handleDeprecate = (segmentId) => { + request.get("/segment/cancel/" + segmentId).then(res => { + const { code, msg, data } = res.data; + if (code === 200) { + notify(msg || 'common.response.success', { type: 'success', messageArgs: { _: msg } }); + refresh(); + } else { + notify(msg || 'common.response.fail', { type: 'error', messageArgs: { _: msg } }); + } + }).catch(error => { + notify(error.message || 'common.response.fail', { type: 'error', messageArgs: { _: error.message } }); + }) + } return ( <> @@ -240,10 +258,29 @@ <DateField source="createTime" label="common.field.createTime" showTime /> <BooleanField source="statusBool" label="common.field.status" sortable={false} /> <TextField source="memo" label="common.field.memo" sortable={false} /> - {/* <FunctionField label="common.field.opt" cellClassName="opt" render={record => ( - <> - </> - )} /> */} + {filterValues.state === 'RUNNING' && ( + <FunctionField label="common.field.opt" cellClassName="opt" render={record => ( + <> + <ConfirmButton + label="common.action.deprecate" + size="small" + color="error" + startIcon={<ClearIcon />} + sx={{ + padding: '1px', + fontSize: '.75rem', + '& .MuiButton-startIcon': { + marginRight: '2px' + }, + }} + data={record.id} + onConfirm={() => { + handleDeprecate(record.id); + }} + /> + </> + )} /> + )} </StyledDatagrid> </> )} diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java index 7825f26..dbf5fd2 100644 --- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java @@ -1213,6 +1213,13 @@ if (Cools.isEmpty(actionList)) { return; } + + Long agvId = actionList.get(0).getAgvId(); + String agvNo = agvService.getAgvNo(agvId); + if (!agvService.judgeOnline(agvId)) { + return; + } + long actionIssuedSts = ActionStsType.ISSUED.val(); for (Action action : actionList) { action.setActionSts(actionIssuedSts); @@ -1239,7 +1246,6 @@ } } - String agvNo = agvService.getAgvNo(actionList.get(0).getAgvId()); AgvAction agvAction = new AgvAction(agvNo, actionGroupId); for (Action action : actionList) { switch (Objects.requireNonNull(ActionTypeType.get(action.getActionTypeEl()))) { diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/SegmentController.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/SegmentController.java index 7171e8b..11415c6 100644 --- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/SegmentController.java +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/controller/SegmentController.java @@ -108,4 +108,11 @@ ExcelUtil.build(ExcelUtil.create(segmentService.list(), Segment.class), response); } + @PreAuthorize("hasAuthority('manager:segment:update')") + @OperationLog("Cancel Segment") + @GetMapping("/segment/cancel/{id}") + public R cancel(@PathVariable Long id) { + return segmentService.cancel(id, getLoginUserId()) ? R.ok("Cancel Success") : R.error("Cancel Fail"); + } + } diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/SegmentService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/SegmentService.java index 2a721d2..39115c1 100644 --- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/SegmentService.java +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/SegmentService.java @@ -24,4 +24,6 @@ List<Segment> getRunningByEndCode(Long codeId); + Boolean cancel(Long segmentId, Long userId); + } diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/SegmentServiceImpl.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/SegmentServiceImpl.java index b8eca35..ada2d61 100644 --- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/SegmentServiceImpl.java +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/SegmentServiceImpl.java @@ -2,16 +2,19 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.zy.acs.framework.exception.CoolException; import com.zy.acs.manager.manager.entity.Segment; +import com.zy.acs.manager.manager.entity.Task; +import com.zy.acs.manager.manager.enums.ActionStsType; import com.zy.acs.manager.manager.enums.SegmentStateType; +import com.zy.acs.manager.manager.enums.TaskStsType; import com.zy.acs.manager.manager.mapper.SegmentMapper; -import com.zy.acs.manager.manager.service.AgvService; -import com.zy.acs.manager.manager.service.SegmentService; +import com.zy.acs.manager.manager.service.*; import com.zy.acs.framework.common.Cools; -import com.zy.acs.manager.manager.service.TravelService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Comparator; @@ -26,6 +29,10 @@ private AgvService agvService; @Autowired private TravelService travelService; + @Autowired + private TaskService taskService; + @Autowired + private ActionService actionService; @Override public void processNext(List<Segment> segmentList) { @@ -113,4 +120,30 @@ ); } + @Override + @Transactional + public Boolean cancel(Long segmentId, Long userId) { + Date now = new Date(); + Segment segment = this.getById(segmentId); + String groupId = segment.getGroupId(); + // update segment list + List<Segment> segmentList = this.list(new LambdaQueryWrapper<Segment>().eq(Segment::getGroupId, groupId)); + for (Segment seg : segmentList) { + Task task = taskService.getById(segment.getTaskId()); + if (task != null && + (!task.getTaskTypeEl().equals(TaskStsType.COMPLETE.toString()) || !task.getTaskTypeEl().equals(TaskStsType.CANCEL.toString()))) { + throw new CoolException("the task is not finish"); + } + seg.setState(SegmentStateType.FINISH.toString()); + seg.setUpdateTime(now); + if (!this.updateById(seg)) { + throw new CoolException("failed to cancel segment"); + } + } + this.processNext(segmentList); + // update action list + actionService.updateStsByGroupId(groupId, ActionStsType.EXPIRED.val()); + return Boolean.TRUE; + } + } -- Gitblit v1.9.1