| | |
| | | } |
| | | }; |
| | | |
| | | const handleComplete = async (rows, intl) => { |
| | | if (!rows) return true; |
| | | const hide = message.loading(intl.formatMessage({ id: 'page.completeing', defaultMessage: '正在完成' })); |
| | | try { |
| | | const resp = await Http.doPost('api/task/complete/' + rows.map((row) => row.id).join(',')); |
| | | if (resp.code === 200) { |
| | | message.success(intl.formatMessage({ id: 'page.complete.success', defaultMessage: '完成成功' })); |
| | | return true; |
| | | } else { |
| | | message.error(resp.msg); |
| | | return false; |
| | | } |
| | | } catch (error) { |
| | | message.error(intl.formatMessage({ id: 'page.complete.fail', defaultMessage: '完成失败,请重试!' })); |
| | | return false; |
| | | } finally { |
| | | hide(); |
| | | } |
| | | }; |
| | | |
| | | const handleCancel = async (rows, intl) => { |
| | | if (!rows) return true; |
| | | const hide = message.loading(intl.formatMessage({ id: 'page.canceling', defaultMessage: '正在取消' })); |
| | | try { |
| | | const resp = await Http.doPost('api/task/cancel/' + rows.map((row) => row.id).join(',')); |
| | | if (resp.code === 200) { |
| | | message.success(intl.formatMessage({ id: 'page.cancel.success', defaultMessage: '取消成功' })); |
| | | return true; |
| | | } else { |
| | | message.error(resp.msg); |
| | | return false; |
| | | } |
| | | } catch (error) { |
| | | message.error(intl.formatMessage({ id: 'page.cancel.fail', defaultMessage: '取消失败,请重试!' })); |
| | | return false; |
| | | } finally { |
| | | hide(); |
| | | } |
| | | }; |
| | | |
| | | const handleExport = async (intl) => { |
| | | const hide = message.loading(intl.formatMessage({ id: 'page.exporting', defaultMessage: '正在导出' })); |
| | | try { |
| | |
| | | { |
| | | title: '操作', |
| | | dataIndex: 'option', |
| | | width: 140, |
| | | width: 240, |
| | | valueType: 'option', |
| | | render: (_, record) => [ |
| | | <Button |
| | |
| | | > |
| | | <FormattedMessage id='page.edit' defaultMessage='编辑' /> |
| | | </Button>, |
| | | // <Button |
| | | // type="link" |
| | | // danger |
| | | // key="batchRemove" |
| | | // onClick={async () => { |
| | | // Modal.confirm({ |
| | | // title: intl.formatMessage({ id: 'page.delete', defaultMessage: '删除' }), |
| | | // content: intl.formatMessage({ id: 'page.delete.confirm', defaultMessage: '确定删除该项吗?' }), |
| | | // onOk: async () => { |
| | | // const success = await handleRemove([record], intl); |
| | | // if (success) { |
| | | // if (actionRef.current) { |
| | | // actionRef.current.reload(); |
| | | // } |
| | | // } |
| | | // }, |
| | | // }); |
| | | // }} |
| | | // > |
| | | // <FormattedMessage id='page.delete' defaultMessage='删除' /> |
| | | // </Button>, |
| | | <Button |
| | | type="link" |
| | | danger |
| | | key="batchRemove" |
| | | key="complete" |
| | | onClick={async () => { |
| | | Modal.confirm({ |
| | | title: intl.formatMessage({ id: 'page.delete', defaultMessage: '删除' }), |
| | | content: intl.formatMessage({ id: 'page.delete.confirm', defaultMessage: '确定删除该项吗?' }), |
| | | title: intl.formatMessage({ id: 'page.complete', defaultMessage: '完成' }), |
| | | content: intl.formatMessage({ id: 'page.complete.confirm', defaultMessage: '确定完成该项吗?' }), |
| | | onOk: async () => { |
| | | const success = await handleRemove([record], intl); |
| | | const success = await handleComplete([record], intl); |
| | | if (success) { |
| | | if (actionRef.current) { |
| | | actionRef.current.reload(); |
| | |
| | | }); |
| | | }} |
| | | > |
| | | <FormattedMessage id='page.delete' defaultMessage='删除' /> |
| | | <FormattedMessage id='page.complete' defaultMessage='完成' /> |
| | | </Button>, |
| | | <Button |
| | | type="link" |
| | | key="cancel" |
| | | onClick={async () => { |
| | | Modal.confirm({ |
| | | title: intl.formatMessage({ id: 'page.cancel', defaultMessage: '取消' }), |
| | | content: intl.formatMessage({ id: 'page.cancel.confirm', defaultMessage: '确定取消该项吗?' }), |
| | | onOk: async () => { |
| | | const success = await handleCancel([record], intl); |
| | | if (success) { |
| | | if (actionRef.current) { |
| | | actionRef.current.reload(); |
| | | } |
| | | } |
| | | }, |
| | | }); |
| | | }} |
| | | > |
| | | <FormattedMessage id='page.cancel' defaultMessage='取消' /> |
| | | </Button>, |
| | | ], |
| | | }, |
| | |
| | | label="编号" |
| | | colProps={{ md: 12, xl: 12 }} |
| | | /> |
| | | <ProFormText |
| | | name="name" |
| | | label="名称" |
| | | <ProFormSelect |
| | | name="busId" |
| | | label="总线" |
| | | colProps={{ md: 12, xl: 12 }} |
| | | fieldProps={{ precision: 0 }} |
| | | showSearch |
| | | debounceTime={300} |
| | | request={async ({ keyWords }) => { |
| | | const resp = await Http.doPostForm('api/bus/query', { condition: keyWords }); |
| | | return resp.data; |
| | | }} |
| | | /> |
| | | </ProForm.Group> |
| | | <ProForm.Group> |
| | | <ProFormText |
| | | name="flag" |
| | | label="标识" |
| | | colProps={{ md: 12, xl: 12 }} |
| | | /> |
| | | <ProFormText |
| | | name="taskNo" |
| | | label="任务号" |
| | | colProps={{ md: 12, xl: 12 }} |
| | | /> |
| | | <ProFormText |
| | | name="serialNum" |
| | | label="序列号" |
| | | colProps={{ md: 12, xl: 12 }} |
| | | /> |
| | | </ProForm.Group> |
| | | <ProForm.Group> |
| | | <ProFormText |
| | | name="taskData" |
| | | label="任务数据" |
| | | name="title" |
| | | label="标题" |
| | | colProps={{ md: 12, xl: 12 }} |
| | | /> |
| | | <ProFormSelect |
| | | name="taskSts" |
| | | label="任务状态" |
| | | colProps={{ md: 12, xl: 12 }} |
| | | fieldProps={{ precision: 0 }} |
| | | showSearch |
| | | debounceTime={300} |
| | | request={async ({ keyWords }) => { |
| | | const resp = await Http.doPostForm('api/taskSts/query', { condition: keyWords }); |
| | | return resp.data; |
| | | }} |
| | | /> |
| | | </ProForm.Group> |
| | | <ProForm.Group> |
| | | <ProFormSelect |
| | | name="taskCtg" |
| | | label="任务类型" |
| | | colProps={{ md: 12, xl: 12 }} |
| | | fieldProps={{ precision: 0 }} |
| | | showSearch |
| | | debounceTime={300} |
| | | request={async ({ keyWords }) => { |
| | | const resp = await Http.doPostForm('api/taskCtg/query', { condition: keyWords }); |
| | | return resp.data; |
| | | }} |
| | | /> |
| | | <ProFormDigit |
| | | name="priority" |
| | | label="优先级" |
| | | colProps={{ md: 12, xl: 12 }} |
| | | fieldProps={{ precision: 0 }} |
| | | /> |
| | | </ProForm.Group> |
| | | <ProForm.Group> |
| | | <ProFormText |
| | | name="originSite" |
| | | label="起始站" |
| | | colProps={{ md: 12, xl: 12 }} |
| | | /> |
| | | <ProFormText |
| | | name="originLoc" |
| | | label="起始库位" |
| | | colProps={{ md: 12, xl: 12 }} |
| | | /> |
| | | </ProForm.Group> |
| | | <ProForm.Group> |
| | | <ProFormText |
| | | name="destSite" |
| | | label="目标站" |
| | | colProps={{ md: 12, xl: 12 }} |
| | | /> |
| | | <ProFormText |
| | | name="destLoc" |
| | | label="目标库位" |
| | | colProps={{ md: 12, xl: 12 }} |
| | | /> |
| | | </ProForm.Group> |
| | | <ProForm.Group> |
| | | <ProFormSelect |
| | | name="emptyMk" |
| | | label="空托" |
| | | colProps={{ md: 12, xl: 12 }} |
| | | options={[ |
| | | { label: '是', value: 1 }, |
| | | { label: '否', value: 0 }, |
| | | ]} |
| | | /> |
| | | <ProFormText |
| | | name="zpallet" |
| | | label="托盘码" |
| | | colProps={{ md: 12, xl: 12 }} |
| | | /> |
| | | </ProForm.Group> |
| | | <ProForm.Group> |
| | | <ProFormText |
| | | name="phase" |
| | | label="环节" |
| | | colProps={{ md: 12, xl: 12 }} |
| | | /> |
| | | <ProFormDateTimePicker |
| | | name="ioTime" |
| | | label="任务时间" |
| | | colProps={{ md: 12, xl: 12 }} |
| | | transform={(value) => moment(value).toISOString()} |
| | | /> |
| | | </ProForm.Group> |
| | | <ProForm.Group> |
| | | <ProFormDateTimePicker |
| | | name="startTime" |
| | | label="开始时间" |
| | | colProps={{ md: 12, xl: 12 }} |
| | | transform={(value) => moment(value).toISOString()} |
| | | /> |
| | | <ProFormDateTimePicker |
| | | name="endTime" |
| | | label="结束时间" |
| | | colProps={{ md: 12, xl: 12 }} |
| | | transform={(value) => moment(value).toISOString()} |
| | | /> |
| | | </ProForm.Group> |
| | | <ProForm.Group> |
| | | <ProFormDateTimePicker |
| | | name="exceptionTime" |
| | | label="异常时间" |
| | | colProps={{ md: 12, xl: 12 }} |
| | | transform={(value) => moment(value).toISOString()} |
| | | /> |
| | | <ProFormText |
| | | name="exceptionDesc" |
| | | label="异常描述" |
| | | colProps={{ md: 12, xl: 12 }} |
| | | /> |
| | | </ProForm.Group> |
| | | <ProForm.Group> |
| | | <ProFormSelect |
| | | name="status" |
| | | label="状态" |
| | |
| | | { label: '禁用', value: 0 }, |
| | | ]} |
| | | /> |
| | | </ProForm.Group> |
| | | <ProForm.Group> |
| | | <ProFormDateTimePicker |
| | | name="createTime" |
| | | label="添加时间" |
| | | colProps={{ md: 12, xl: 12 }} |
| | | transform={(value) => moment(value).toISOString()} |
| | | /> |
| | | </ProForm.Group> |
| | | <ProForm.Group> |
| | | <ProFormSelect |
| | | name="createBy" |
| | | label="添加人员" |
| | |
| | | return resp.data; |
| | | }} |
| | | /> |
| | | </ProForm.Group> |
| | | <ProForm.Group> |
| | | <ProFormDateTimePicker |
| | | name="updateTime" |
| | | label="修改时间" |
| | | colProps={{ md: 12, xl: 12 }} |
| | | transform={(value) => moment(value).toISOString()} |
| | | /> |
| | | </ProForm.Group> |
| | | <ProForm.Group> |
| | | <ProFormSelect |
| | | name="updateBy" |
| | | label="修改人员" |
| | |
| | | return resp.data; |
| | | }} |
| | | /> |
| | | </ProForm.Group> |
| | | <ProForm.Group> |
| | | <ProFormText |
| | | name="memo" |
| | | label="备注" |
| | | colProps={{ md: 12, xl: 12 }} |
| | | /> |
| | | </ProForm.Group> |
| | | <ProForm.Group> |
| | | <ProFormDigit |
| | | name="shuttleNo" |
| | | label="四向穿梭车号" |
| | | colProps={{ md: 12, xl: 12 }} |
| | | fieldProps={{ precision: 0 }} |
| | | /> |
| | | <ProFormDigit |
| | | name="liftNo" |
| | | label="提升机号" |
| | | colProps={{ md: 12, xl: 12 }} |
| | | fieldProps={{ precision: 0 }} |
| | | /> |
| | | </ProForm.Group> |
| | | <ProForm.Group> |
| | | <ProFormDigit |
| | | name="crnNo" |
| | | label="堆垛机号" |
| | | colProps={{ md: 12, xl: 12 }} |
| | | fieldProps={{ precision: 0 }} |
| | | /> |
| | | <ProFormDigit |
| | | name="rgvNo" |
| | | label="RGV号" |
| | | colProps={{ md: 12, xl: 12 }} |
| | | fieldProps={{ precision: 0 }} |
| | | /> |
| | | </ProForm.Group> |
| | | <ProForm.Group> |
| | | <ProFormDigit |
| | | name="agvNo" |
| | | label="AGV号" |
| | | colProps={{ md: 12, xl: 12 }} |
| | | fieldProps={{ precision: 0 }} |
| | | /> |
| | | <ProFormText |
| | | name="recordLoc" |
| | | label="是否记录库位信息" |
| | | colProps={{ md: 12, xl: 12 }} |
| | | /> |
| | | </ProForm.Group> |
| | | |
| | | </ProForm> |
| | | </Modal> |
| | |
| | | />, |
| | | }, |
| | | { |
| | | title: '名称', |
| | | dataIndex: 'name', |
| | | title: '总线', |
| | | dataIndex: 'busId$', |
| | | valueType: 'text', |
| | | hidden: false, |
| | | width: 140, |
| | | copyable: true, |
| | | filterDropdown: (props) => <TextFilter |
| | | name='name' |
| | | {...props} |
| | | actionRef={actionRef} |
| | | setSearchParam={setSearchParam} |
| | | />, |
| | | }, |
| | | { |
| | | title: '标识', |
| | | dataIndex: 'flag', |
| | | valueType: 'text', |
| | | hidden: false, |
| | | width: 140, |
| | | filterDropdown: (props) => <TextFilter |
| | | name='flag' |
| | | filterDropdown: (props) => <LinkFilter |
| | | name='busId' |
| | | major='bus' |
| | | {...props} |
| | | actionRef={actionRef} |
| | | setSearchParam={setSearchParam} |
| | |
| | | valueType: 'text', |
| | | hidden: false, |
| | | width: 140, |
| | | copyable: true, |
| | | filterDropdown: (props) => <TextFilter |
| | | name='taskNo' |
| | | {...props} |
| | |
| | | />, |
| | | }, |
| | | { |
| | | title: '任务数据', |
| | | dataIndex: 'taskData', |
| | | title: '序列号', |
| | | dataIndex: 'serialNum', |
| | | valueType: 'text', |
| | | hidden: false, |
| | | width: 140, |
| | | filterDropdown: (props) => <TextFilter |
| | | name='taskData' |
| | | name='serialNum' |
| | | {...props} |
| | | actionRef={actionRef} |
| | | setSearchParam={setSearchParam} |
| | | />, |
| | | }, |
| | | { |
| | | title: '标题', |
| | | dataIndex: 'title', |
| | | valueType: 'text', |
| | | hidden: false, |
| | | width: 140, |
| | | filterDropdown: (props) => <TextFilter |
| | | name='title' |
| | | {...props} |
| | | actionRef={actionRef} |
| | | setSearchParam={setSearchParam} |
| | | />, |
| | | }, |
| | | { |
| | | title: '任务状态', |
| | | dataIndex: 'taskSts$', |
| | | valueType: 'text', |
| | | hidden: false, |
| | | width: 140, |
| | | filterDropdown: (props) => <LinkFilter |
| | | name='taskSts' |
| | | major='taskSts' |
| | | {...props} |
| | | actionRef={actionRef} |
| | | setSearchParam={setSearchParam} |
| | | />, |
| | | }, |
| | | { |
| | | title: '任务类型', |
| | | dataIndex: 'taskCtg$', |
| | | valueType: 'text', |
| | | hidden: false, |
| | | width: 140, |
| | | filterDropdown: (props) => <LinkFilter |
| | | name='taskCtg' |
| | | major='taskCtg' |
| | | {...props} |
| | | actionRef={actionRef} |
| | | setSearchParam={setSearchParam} |
| | | />, |
| | | }, |
| | | { |
| | | title: '优先级', |
| | | dataIndex: 'priority', |
| | | valueType: 'text', |
| | | hidden: false, |
| | | width: 140, |
| | | filterDropdown: (props) => <TextFilter |
| | | name='priority' |
| | | {...props} |
| | | actionRef={actionRef} |
| | | setSearchParam={setSearchParam} |
| | | />, |
| | | }, |
| | | { |
| | | title: '起始站', |
| | | dataIndex: 'originSite', |
| | | valueType: 'text', |
| | | hidden: false, |
| | | width: 140, |
| | | filterDropdown: (props) => <TextFilter |
| | | name='originSite' |
| | | {...props} |
| | | actionRef={actionRef} |
| | | setSearchParam={setSearchParam} |
| | | />, |
| | | }, |
| | | { |
| | | title: '起始库位', |
| | | dataIndex: 'originLoc', |
| | | valueType: 'text', |
| | | hidden: false, |
| | | width: 140, |
| | | filterDropdown: (props) => <TextFilter |
| | | name='originLoc' |
| | | {...props} |
| | | actionRef={actionRef} |
| | | setSearchParam={setSearchParam} |
| | | />, |
| | | }, |
| | | { |
| | | title: '目标站', |
| | | dataIndex: 'destSite', |
| | | valueType: 'text', |
| | | hidden: false, |
| | | width: 140, |
| | | filterDropdown: (props) => <TextFilter |
| | | name='destSite' |
| | | {...props} |
| | | actionRef={actionRef} |
| | | setSearchParam={setSearchParam} |
| | | />, |
| | | }, |
| | | { |
| | | title: '目标库位', |
| | | dataIndex: 'destLoc', |
| | | valueType: 'text', |
| | | hidden: false, |
| | | width: 140, |
| | | filterDropdown: (props) => <TextFilter |
| | | name='destLoc' |
| | | {...props} |
| | | actionRef={actionRef} |
| | | setSearchParam={setSearchParam} |
| | | />, |
| | | }, |
| | | { |
| | | title: '空托', |
| | | dataIndex: 'emptyMk$', |
| | | valueType: 'text', |
| | | hidden: false, |
| | | width: 140, |
| | | filterDropdown: (props) => <SelectFilter |
| | | name='emptyMk' |
| | | {...props} |
| | | actionRef={actionRef} |
| | | setSearchParam={setSearchParam} |
| | | data={[ |
| | | { label: '是', value: 1 }, |
| | | { label: '否', value: 0 }, |
| | | ]} |
| | | />, |
| | | }, |
| | | { |
| | | title: '托盘码', |
| | | dataIndex: 'zpallet', |
| | | valueType: 'text', |
| | | hidden: false, |
| | | width: 140, |
| | | filterDropdown: (props) => <TextFilter |
| | | name='zpallet' |
| | | {...props} |
| | | actionRef={actionRef} |
| | | setSearchParam={setSearchParam} |
| | | />, |
| | | }, |
| | | { |
| | | title: '环节', |
| | | dataIndex: 'phase', |
| | | valueType: 'text', |
| | | hidden: false, |
| | | width: 140, |
| | | filterDropdown: (props) => <TextFilter |
| | | name='phase' |
| | | {...props} |
| | | actionRef={actionRef} |
| | | setSearchParam={setSearchParam} |
| | | />, |
| | | }, |
| | | { |
| | | title: '任务时间', |
| | | dataIndex: 'ioTime$', |
| | | valueType: 'text', |
| | | hidden: false, |
| | | width: 140, |
| | | filterDropdown: (props) => <DatetimeRangeFilter |
| | | name='ioTime' |
| | | {...props} |
| | | actionRef={actionRef} |
| | | setSearchParam={setSearchParam} |
| | | />, |
| | | }, |
| | | { |
| | | title: '开始时间', |
| | | dataIndex: 'startTime$', |
| | | valueType: 'text', |
| | | hidden: false, |
| | | width: 140, |
| | | filterDropdown: (props) => <DatetimeRangeFilter |
| | | name='startTime' |
| | | {...props} |
| | | actionRef={actionRef} |
| | | setSearchParam={setSearchParam} |
| | | />, |
| | | }, |
| | | { |
| | | title: '结束时间', |
| | | dataIndex: 'endTime$', |
| | | valueType: 'text', |
| | | hidden: false, |
| | | width: 140, |
| | | filterDropdown: (props) => <DatetimeRangeFilter |
| | | name='endTime' |
| | | {...props} |
| | | actionRef={actionRef} |
| | | setSearchParam={setSearchParam} |
| | | />, |
| | | }, |
| | | { |
| | | title: '异常时间', |
| | | dataIndex: 'exceptionTime$', |
| | | valueType: 'text', |
| | | hidden: false, |
| | | width: 140, |
| | | filterDropdown: (props) => <DatetimeRangeFilter |
| | | name='exceptionTime' |
| | | {...props} |
| | | actionRef={actionRef} |
| | | setSearchParam={setSearchParam} |
| | | />, |
| | | }, |
| | | { |
| | | title: '异常描述', |
| | | dataIndex: 'exceptionDesc', |
| | | valueType: 'text', |
| | | hidden: false, |
| | | width: 140, |
| | | filterDropdown: (props) => <TextFilter |
| | | name='exceptionDesc' |
| | | {...props} |
| | | actionRef={actionRef} |
| | | setSearchParam={setSearchParam} |
| | |
| | | setSearchParam={setSearchParam} |
| | | />, |
| | | }, |
| | | { |
| | | title: '四向穿梭车号', |
| | | dataIndex: 'shuttleNo', |
| | | valueType: 'text', |
| | | hidden: false, |
| | | width: 140, |
| | | filterDropdown: (props) => <TextFilter |
| | | name='shuttleNo' |
| | | {...props} |
| | | actionRef={actionRef} |
| | | setSearchParam={setSearchParam} |
| | | />, |
| | | }, |
| | | { |
| | | title: '提升机号', |
| | | dataIndex: 'liftNo', |
| | | valueType: 'text', |
| | | hidden: false, |
| | | width: 140, |
| | | filterDropdown: (props) => <TextFilter |
| | | name='liftNo' |
| | | {...props} |
| | | actionRef={actionRef} |
| | | setSearchParam={setSearchParam} |
| | | />, |
| | | }, |
| | | { |
| | | title: '堆垛机号', |
| | | dataIndex: 'crnNo', |
| | | valueType: 'text', |
| | | hidden: false, |
| | | width: 140, |
| | | filterDropdown: (props) => <TextFilter |
| | | name='crnNo' |
| | | {...props} |
| | | actionRef={actionRef} |
| | | setSearchParam={setSearchParam} |
| | | />, |
| | | }, |
| | | { |
| | | title: 'RGV号', |
| | | dataIndex: 'rgvNo', |
| | | valueType: 'text', |
| | | hidden: false, |
| | | width: 140, |
| | | filterDropdown: (props) => <TextFilter |
| | | name='rgvNo' |
| | | {...props} |
| | | actionRef={actionRef} |
| | | setSearchParam={setSearchParam} |
| | | />, |
| | | }, |
| | | { |
| | | title: 'AGV号', |
| | | dataIndex: 'agvNo', |
| | | valueType: 'text', |
| | | hidden: false, |
| | | width: 140, |
| | | filterDropdown: (props) => <TextFilter |
| | | name='agvNo' |
| | | {...props} |
| | | actionRef={actionRef} |
| | | setSearchParam={setSearchParam} |
| | | />, |
| | | }, |
| | | { |
| | | title: '是否记录库位信息', |
| | | dataIndex: 'recordLoc', |
| | | valueType: 'text', |
| | | hidden: false, |
| | | width: 140, |
| | | filterDropdown: (props) => <TextFilter |
| | | name='recordLoc' |
| | | {...props} |
| | | actionRef={actionRef} |
| | | setSearchParam={setSearchParam} |
| | | />, |
| | | }, |
| | | |
| | | { |
| | | title: '操作', |
| | |
| | | package com.zy.asrs.wcs.system.controller; |
| | | package com.zy.asrs.wcs.core.controller; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | |
| | | import com.zy.asrs.wcs.common.domain.PageParam; |
| | | import com.zy.asrs.wcs.core.entity.BasConveyor; |
| | | import com.zy.asrs.wcs.core.service.BasConveyorService; |
| | | import com.zy.asrs.wcs.system.controller.BaseController; |
| | | import com.zy.asrs.wcs.utils.ExcelUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.security.access.prepost.PreAuthorize; |
| | |
| | | package com.zy.asrs.wcs.system.controller; |
| | | package com.zy.asrs.wcs.core.controller; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | |
| | | import com.zy.asrs.wcs.common.domain.PageParam; |
| | | import com.zy.asrs.wcs.core.entity.BasConveyorSta; |
| | | import com.zy.asrs.wcs.core.service.BasConveyorStaService; |
| | | import com.zy.asrs.wcs.system.controller.BaseController; |
| | | import com.zy.asrs.wcs.utils.ExcelUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.security.access.prepost.PreAuthorize; |
| | |
| | | package com.zy.asrs.wcs.system.controller; |
| | | package com.zy.asrs.wcs.core.controller; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | |
| | | import com.zy.asrs.wcs.common.domain.PageParam; |
| | | import com.zy.asrs.wcs.core.entity.BasLed; |
| | | import com.zy.asrs.wcs.core.service.BasLedService; |
| | | import com.zy.asrs.wcs.system.controller.BaseController; |
| | | import com.zy.asrs.wcs.utils.ExcelUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.security.access.prepost.PreAuthorize; |
| | |
| | | package com.zy.asrs.wcs.core.controller; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.zy.asrs.framework.common.Cools; |
| | | import com.zy.asrs.framework.common.R; |
| | |
| | | public R page(@RequestBody Map<String, Object> map) { |
| | | BaseParam baseParam = buildParam(map, BaseParam.class); |
| | | PageParam<Loc, BaseParam> pageParam = new PageParam<>(baseParam, Loc.class); |
| | | return R.ok().add(locService.page(pageParam, pageParam.buildWrapper(true))); |
| | | QueryWrapper<Loc> wrapper = new QueryWrapper<>(); |
| | | if (!Cools.isEmpty(baseParam.getCondition())) { |
| | | wrapper.like("loc_no", baseParam.getCondition()); |
| | | } |
| | | return R.ok().add(locService.page(pageParam, wrapper)); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('core:loc:list')") |
| | |
| | | package com.zy.asrs.wcs.system.controller; |
| | | package com.zy.asrs.wcs.core.controller; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | |
| | | import com.zy.asrs.wcs.common.domain.PageParam; |
| | | import com.zy.asrs.wcs.core.entity.MotionLog; |
| | | import com.zy.asrs.wcs.core.service.MotionLogService; |
| | | import com.zy.asrs.wcs.system.controller.BaseController; |
| | | import com.zy.asrs.wcs.utils.ExcelUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.security.access.prepost.PreAuthorize; |
| | |
| | | import com.zy.asrs.wcs.common.domain.BaseParam; |
| | | import com.zy.asrs.wcs.common.domain.KeyValVo; |
| | | import com.zy.asrs.wcs.common.domain.PageParam; |
| | | import com.zy.asrs.wcs.core.entity.Motion; |
| | | import com.zy.asrs.wcs.core.entity.MotionLog; |
| | | import com.zy.asrs.wcs.core.entity.Task; |
| | | import com.zy.asrs.wcs.core.entity.TaskLog; |
| | | import com.zy.asrs.wcs.core.model.enums.TaskStsType; |
| | | import com.zy.asrs.wcs.core.service.MotionLogService; |
| | | import com.zy.asrs.wcs.core.service.MotionService; |
| | | import com.zy.asrs.wcs.core.service.TaskLogService; |
| | | import com.zy.asrs.wcs.core.service.TaskService; |
| | | import com.zy.asrs.wcs.system.controller.BaseController; |
| | | import com.zy.asrs.wcs.utils.ExcelUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.security.access.prepost.PreAuthorize; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.*; |
| | | |
| | | @RestController |
| | | @RequestMapping("/api") |
| | |
| | | |
| | | @Autowired |
| | | private TaskService taskService; |
| | | @Autowired |
| | | private TaskLogService taskLogService; |
| | | @Autowired |
| | | private MotionService motionService; |
| | | @Autowired |
| | | private MotionLogService motionLogService; |
| | | |
| | | @PreAuthorize("hasAuthority('core:task:list')") |
| | | @PostMapping("/task/page") |
| | |
| | | ExcelUtil.build(ExcelUtil.create(taskService.list(), Task.class), response); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('core:task:complete')") |
| | | @OperationLog("手动完成任务") |
| | | @PostMapping("/task/complete/{id}") |
| | | @Transactional |
| | | public synchronized R complete(@PathVariable Long id) { |
| | | Task task = taskService.getById(id); |
| | | if (task == null) { |
| | | return R.error("任务不存在"); |
| | | } |
| | | switch (TaskStsType.query(task.getTaskSts())) { |
| | | case NEW_INBOUND: |
| | | case ANALYZE_INBOUND: |
| | | case EXECUTE_INBOUND: |
| | | task.setTaskSts(TaskStsType.COMPLETE_INBOUND.sts); |
| | | break; |
| | | case NEW_OUTBOUND: |
| | | case ANALYZE_OUTBOUND: |
| | | case EXECUTE_OUTBOUND: |
| | | task.setTaskSts(TaskStsType.COMPLETE_OUTBOUND.sts); |
| | | break; |
| | | case NEW_CHARGE: |
| | | case ANALYZE_CHARGE: |
| | | case EXECUTE_CHARGE: |
| | | task.setTaskSts(TaskStsType.CHARGE_WORKING.sts); |
| | | break; |
| | | case NEW_MOVE: |
| | | case ANALYZE_MOVE: |
| | | case EXECUTE_MOVE: |
| | | task.setTaskSts(TaskStsType.COMPLETE_MOVE.sts); |
| | | break; |
| | | case NEW_MANUAL: |
| | | case ANALYZE_MANUAL: |
| | | case EXECUTE_MANUAL: |
| | | task.setTaskSts(TaskStsType.COMPLETE_MANUAL.sts); |
| | | break; |
| | | default: |
| | | return R.error("当前状态不可被完成"); |
| | | } |
| | | task.setUpdateTime(new Date()); |
| | | task.setUpdateBy(getLoginUserId()); |
| | | if (!taskService.updateById(task)) { |
| | | return R.error("完成失败"); |
| | | } |
| | | return R.ok("任务完成"); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('core:task:cancel')") |
| | | @OperationLog("手动取消任务") |
| | | @PostMapping("/task/cancel/{id}") |
| | | @Transactional |
| | | public synchronized R cancel(@PathVariable Long id) { |
| | | Task task = taskService.getById(id); |
| | | if (task == null) { |
| | | return R.error("任务不存在"); |
| | | } |
| | | |
| | | //创建历史档 |
| | | TaskLog taskLog = new TaskLog(); |
| | | taskLog.sync(task); |
| | | taskLog.setUpdateTime(new Date()); |
| | | taskLog.setUpdateBy(getLoginUserId()); |
| | | taskLog.setHostId(null); |
| | | taskLogService.save(taskLog); |
| | | |
| | | List<Motion> motions = motionService.list(new LambdaQueryWrapper<Motion>().eq(Motion::getTaskNo, task.getTaskNo()).eq(Motion::getHostId, task.getHostId())); |
| | | for (Motion motion : motions) { |
| | | //创建动作历史档 |
| | | MotionLog motionLog = new MotionLog(); |
| | | motionLog.sync(motion); |
| | | motionLog.setUpdateTime(new Date()); |
| | | motionLogService.save(motionLog); |
| | | } |
| | | |
| | | //删除源任务 |
| | | taskService.removeById(task.getId()); |
| | | //删除动作 |
| | | motionService.remove(new LambdaQueryWrapper<Motion>().eq(Motion::getTaskNo, task.getTaskNo()).eq(Motion::getHostId, task.getHostId())); |
| | | |
| | | return R.ok("取消成功"); |
| | | } |
| | | } |
| | |
| | | package com.zy.asrs.wcs.system.controller; |
| | | package com.zy.asrs.wcs.core.controller; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | |
| | | import com.zy.asrs.wcs.common.domain.PageParam; |
| | | import com.zy.asrs.wcs.core.entity.TaskLog; |
| | | import com.zy.asrs.wcs.core.service.TaskLogService; |
| | | import com.zy.asrs.wcs.system.controller.BaseController; |
| | | import com.zy.asrs.wcs.utils.ExcelUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.security.access.prepost.PreAuthorize; |
| | |
| | | List<KeyValVo> vos = new ArrayList<>(); |
| | | LambdaQueryWrapper<TaskLog> wrapper = new LambdaQueryWrapper<>(); |
| | | if (!Cools.isEmpty(condition)) { |
| | | wrapper.like(TaskLog::getName, condition); |
| | | wrapper.like(TaskLog::getTaskNo, condition); |
| | | } |
| | | taskLogService.page(new Page<>(1, 30), wrapper).getRecords().forEach( |
| | | item -> vos.add(new KeyValVo(item.getId(), item.getName())) |
| | | item -> vos.add(new KeyValVo(item.getId(), item.getTaskNo())) |
| | | ); |
| | | return R.ok().add(vos); |
| | | } |
| | |
| | | package com.zy.asrs.wcs.core.entity; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.TableLogic; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Date; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.zy.asrs.common.utils.Synchro; |
| | | import com.zy.asrs.wcs.core.service.BusService; |
| | | import com.zy.asrs.wcs.core.service.TaskCtgService; |
| | | import com.zy.asrs.wcs.core.service.TaskStsService; |
| | | import com.zy.asrs.wcs.system.entity.Host; |
| | | import com.zy.asrs.wcs.system.entity.User; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Date; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.TableLogic; |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableLogic; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | import com.zy.asrs.framework.common.Cools; |
| | | import com.zy.asrs.framework.common.SpringUtils; |
| | | import com.zy.asrs.wcs.system.service.UserService; |
| | | import com.zy.asrs.wcs.system.service.HostService; |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.Date; |
| | | |
| | | @Data |
| | | @TableName("wcs_task_log") |
| | |
| | | * ID |
| | | */ |
| | | @ApiModelProperty(value= "ID") |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | @TableId(value = "id", type = IdType.INPUT) |
| | | private Long id; |
| | | |
| | | /** |
| | |
| | | private String uuid; |
| | | |
| | | /** |
| | | * 名称 |
| | | * 总线 |
| | | */ |
| | | @ApiModelProperty(value= "名称") |
| | | private String name; |
| | | |
| | | /** |
| | | * 标识 |
| | | */ |
| | | @ApiModelProperty(value= "标识") |
| | | private String flag; |
| | | @ApiModelProperty(value= "总线") |
| | | private Long busId; |
| | | |
| | | /** |
| | | * 任务号 |
| | |
| | | private String taskNo; |
| | | |
| | | /** |
| | | * 任务数据 |
| | | * 序列号 |
| | | */ |
| | | @ApiModelProperty(value= "任务数据") |
| | | private String taskData; |
| | | @ApiModelProperty(value= "序列号") |
| | | private String serialNum; |
| | | |
| | | /** |
| | | * 标题 |
| | | */ |
| | | @ApiModelProperty(value= "标题") |
| | | private String title; |
| | | |
| | | /** |
| | | * 任务状态 |
| | | */ |
| | | @ApiModelProperty(value= "任务状态") |
| | | private Long taskSts; |
| | | |
| | | /** |
| | | * 任务类型 |
| | | */ |
| | | @ApiModelProperty(value= "任务类型") |
| | | private Long taskCtg; |
| | | |
| | | /** |
| | | * 优先级 |
| | | */ |
| | | @ApiModelProperty(value= "优先级") |
| | | private Integer priority; |
| | | |
| | | /** |
| | | * 起始站 |
| | | */ |
| | | @ApiModelProperty(value= "起始站") |
| | | private String originSite; |
| | | |
| | | /** |
| | | * 起始库位 |
| | | */ |
| | | @ApiModelProperty(value= "起始库位") |
| | | private String originLoc; |
| | | |
| | | /** |
| | | * 目标站 |
| | | */ |
| | | @ApiModelProperty(value= "目标站") |
| | | private String destSite; |
| | | |
| | | /** |
| | | * 目标库位 |
| | | */ |
| | | @ApiModelProperty(value= "目标库位") |
| | | private String destLoc; |
| | | |
| | | /** |
| | | * 空托 1: 是 0: 否 |
| | | */ |
| | | @ApiModelProperty(value= "空托 1: 是 0: 否 ") |
| | | private Integer emptyMk; |
| | | |
| | | /** |
| | | * 托盘码 |
| | | */ |
| | | @ApiModelProperty(value= "托盘码") |
| | | private String zpallet; |
| | | |
| | | /** |
| | | * 环节 |
| | | */ |
| | | @ApiModelProperty(value= "环节") |
| | | private String phase; |
| | | |
| | | /** |
| | | * 任务时间 |
| | | */ |
| | | @ApiModelProperty(value= "任务时间") |
| | | @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") |
| | | private Date ioTime; |
| | | |
| | | /** |
| | | * 开始时间 |
| | | */ |
| | | @ApiModelProperty(value= "开始时间") |
| | | @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") |
| | | private Date startTime; |
| | | |
| | | /** |
| | | * 结束时间 |
| | | */ |
| | | @ApiModelProperty(value= "结束时间") |
| | | @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") |
| | | private Date endTime; |
| | | |
| | | /** |
| | | * 异常时间 |
| | | */ |
| | | @ApiModelProperty(value= "异常时间") |
| | | @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") |
| | | private Date exceptionTime; |
| | | |
| | | /** |
| | | * 异常描述 |
| | | */ |
| | | @ApiModelProperty(value= "异常描述") |
| | | private String exceptionDesc; |
| | | |
| | | /** |
| | | * 所属机构 |
| | |
| | | @ApiModelProperty(value= "备注") |
| | | private String memo; |
| | | |
| | | /** |
| | | * 四向穿梭车号 |
| | | */ |
| | | @ApiModelProperty(value= "四向穿梭车号") |
| | | private Integer shuttleNo; |
| | | |
| | | /** |
| | | * 提升机号 |
| | | */ |
| | | @ApiModelProperty(value= "提升机号") |
| | | private Integer liftNo; |
| | | |
| | | /** |
| | | * 堆垛机号 |
| | | */ |
| | | @ApiModelProperty(value= "堆垛机号") |
| | | private Integer crnNo; |
| | | |
| | | /** |
| | | * RGV号 |
| | | */ |
| | | @ApiModelProperty(value= "RGV号") |
| | | private Integer rgvNo; |
| | | |
| | | /** |
| | | * AGV号 |
| | | */ |
| | | @ApiModelProperty(value= "AGV号") |
| | | private Integer agvNo; |
| | | |
| | | /** |
| | | * 是否记录库位信息 |
| | | */ |
| | | @ApiModelProperty(value= "是否记录库位信息") |
| | | private String recordLoc; |
| | | |
| | | public TaskLog() {} |
| | | |
| | | public TaskLog(String uuid,String name,String flag,String taskNo,String taskData,Long hostId,Integer status,Integer deleted,Date createTime,Long createBy,Date updateTime,Long updateBy,String memo) { |
| | | public TaskLog(String uuid,Long busId,String taskNo,String serialNum,String title,Long taskSts,Long taskCtg,Integer priority,String originSite,String originLoc,String destSite,String destLoc,Integer emptyMk,String zpallet,String phase,Date ioTime,Date startTime,Date endTime,Date exceptionTime,String exceptionDesc,Long hostId,Integer status,Integer deleted,Date createTime,Long createBy,Date updateTime,Long updateBy,String memo,Integer shuttleNo,Integer liftNo,Integer crnNo,Integer rgvNo,Integer agvNo,String recordLoc) { |
| | | this.uuid = uuid; |
| | | this.name = name; |
| | | this.flag = flag; |
| | | this.busId = busId; |
| | | this.taskNo = taskNo; |
| | | this.taskData = taskData; |
| | | this.serialNum = serialNum; |
| | | this.title = title; |
| | | this.taskSts = taskSts; |
| | | this.taskCtg = taskCtg; |
| | | this.priority = priority; |
| | | this.originSite = originSite; |
| | | this.originLoc = originLoc; |
| | | this.destSite = destSite; |
| | | this.destLoc = destLoc; |
| | | this.emptyMk = emptyMk; |
| | | this.zpallet = zpallet; |
| | | this.phase = phase; |
| | | this.ioTime = ioTime; |
| | | this.startTime = startTime; |
| | | this.endTime = endTime; |
| | | this.exceptionTime = exceptionTime; |
| | | this.exceptionDesc = exceptionDesc; |
| | | this.hostId = hostId; |
| | | this.status = status; |
| | | this.deleted = deleted; |
| | |
| | | this.updateTime = updateTime; |
| | | this.updateBy = updateBy; |
| | | this.memo = memo; |
| | | this.shuttleNo = shuttleNo; |
| | | this.liftNo = liftNo; |
| | | this.crnNo = crnNo; |
| | | this.rgvNo = rgvNo; |
| | | this.agvNo = agvNo; |
| | | this.recordLoc = recordLoc; |
| | | } |
| | | |
| | | // TaskLog taskLog = new TaskLog( |
| | | // null, // 编号 |
| | | // null, // 名称 |
| | | // null, // 标识 |
| | | // null, // 总线 |
| | | // null, // 任务号 |
| | | // null, // 任务数据 |
| | | // null, // 序列号 |
| | | // null, // 标题 |
| | | // null, // 任务状态 |
| | | // null, // 任务类型 |
| | | // null, // 优先级 |
| | | // null, // 起始站 |
| | | // null, // 起始库位 |
| | | // null, // 目标站 |
| | | // null, // 目标库位 |
| | | // null, // 空托 |
| | | // null, // 托盘码 |
| | | // null, // 环节 |
| | | // null, // 任务时间 |
| | | // null, // 开始时间 |
| | | // null, // 结束时间 |
| | | // null, // 异常时间 |
| | | // null, // 异常描述 |
| | | // null, // 所属机构 |
| | | // null, // 状态 |
| | | // null, // 是否删除 |
| | |
| | | // null, // 添加人员 |
| | | // null, // 修改时间 |
| | | // null, // 修改人员 |
| | | // null // 备注 |
| | | // null, // 备注 |
| | | // null, // 四向穿梭车号 |
| | | // null, // 提升机号 |
| | | // null, // 堆垛机号 |
| | | // null, // RGV号 |
| | | // null, // AGV号 |
| | | // null // 是否记录库位信息 |
| | | // ); |
| | | |
| | | public String getBusId$(){ |
| | | BusService service = SpringUtils.getBean(BusService.class); |
| | | Bus bus = service.getById(this.busId); |
| | | if (!Cools.isEmpty(bus)){ |
| | | return String.valueOf(bus.getUuid()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public String getTaskSts$(){ |
| | | TaskStsService service = SpringUtils.getBean(TaskStsService.class); |
| | | TaskSts taskSts = service.getOne(new LambdaQueryWrapper<TaskSts>() |
| | | .eq(TaskSts::getUuid, String.valueOf(this.taskSts)) |
| | | .eq(TaskSts::getHostId, this.hostId)); |
| | | if (!Cools.isEmpty(taskSts)){ |
| | | return String.valueOf(taskSts.getName()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public String getTaskCtg$(){ |
| | | TaskCtgService service = SpringUtils.getBean(TaskCtgService.class); |
| | | TaskCtg taskCtg = service.getById(this.taskCtg); |
| | | if (!Cools.isEmpty(taskCtg)){ |
| | | return String.valueOf(taskCtg.getName()); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public String getEmptyMk$(){ |
| | | if (null == this.emptyMk){ return null; } |
| | | switch (this.emptyMk){ |
| | | case 1: |
| | | return "是"; |
| | | case 0: |
| | | return "否"; |
| | | default: |
| | | return String.valueOf(this.emptyMk); |
| | | } |
| | | } |
| | | |
| | | public String getIoTime$(){ |
| | | if (Cools.isEmpty(this.ioTime)){ |
| | | return ""; |
| | | } |
| | | return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.ioTime); |
| | | } |
| | | |
| | | public String getStartTime$(){ |
| | | if (Cools.isEmpty(this.startTime)){ |
| | | return ""; |
| | | } |
| | | return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.startTime); |
| | | } |
| | | |
| | | public String getEndTime$(){ |
| | | if (Cools.isEmpty(this.endTime)){ |
| | | return ""; |
| | | } |
| | | return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.endTime); |
| | | } |
| | | |
| | | public String getExceptionTime$(){ |
| | | if (Cools.isEmpty(this.exceptionTime)){ |
| | | return ""; |
| | | } |
| | | return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.exceptionTime); |
| | | } |
| | | |
| | | public String getHostId$(){ |
| | | HostService service = SpringUtils.getBean(HostService.class); |
| | |
| | | return null; |
| | | } |
| | | |
| | | public void sync(Object source) { |
| | | Synchro.Copy(source, this); |
| | | } |
| | | |
| | | } |
| | |
| | | @Transactional |
| | | public void saveTaskLog(Task task) { |
| | | //创建历史档 |
| | | Date date = new Date(); |
| | | TaskLog taskLog = new TaskLog(); |
| | | taskLog.setTaskNo(task.getTaskNo()); |
| | | taskLog.setTaskData(JSON.toJSONString(task)); |
| | | taskLog.setCreateTime(date); |
| | | taskLog.setUpdateTime(date); |
| | | taskLog.sync(task); |
| | | taskLog.setUpdateTime(new Date()); |
| | | taskLogService.save(taskLog); |
| | | |
| | | List<Motion> motions = motionService.list(new LambdaQueryWrapper<Motion>().eq(Motion::getTaskNo, task.getTaskNo()).eq(Motion::getHostId, task.getHostId())); |