From 3b383c80c90a7d0cdc980ce6fe9889bfa20fecb9 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期日, 07 四月 2024 08:29:05 +0800
Subject: [PATCH] Merge branch 'Four-Way-Rack' of http://47.97.1.152:5880/r/zy-asrs-master into Four-Way-Rack
---
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/TaskSerialNo.java | 230 ++++++++
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java | 381 +++++++++----
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java | 32
zy-asrs-flow/src/pages/task/taskSerialNo/index.jsx | 467 ++++++++++++++++
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/Task.java | 39 +
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/mapper/TaskSerialNoMapper.java | 12
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/TaskService.java | 6
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/TaskServiceImpl.java | 15
zy-asrs-wcs/src/main/resources/mapper/core/TaskMapper.xml | 20
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/TaskSerialNoController.java | 101 +++
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/TaskSerialNoServiceImpl.java | 12
zy-asrs-flow/src/pages/task/taskSerialNo/components/edit.jsx | 167 +++++
zy-asrs-wcs/src/main/resources/mapper/core/TaskSerialNoMapper.xml | 5
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/MainProcess.java | 2
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java | 64 ++
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/mapper/TaskMapper.java | 6
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/Utils.java | 90 +++
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/TaskSerialNoService.java | 8
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/ShuttleThread.java | 6
19 files changed, 1,525 insertions(+), 138 deletions(-)
diff --git a/zy-asrs-flow/src/pages/task/taskSerialNo/components/edit.jsx b/zy-asrs-flow/src/pages/task/taskSerialNo/components/edit.jsx
new file mode 100644
index 0000000..7fffd46
--- /dev/null
+++ b/zy-asrs-flow/src/pages/task/taskSerialNo/components/edit.jsx
@@ -0,0 +1,167 @@
+import React, { useState, useRef, useEffect } from 'react';
+import {
+ ProForm,
+ ProFormDigit,
+ ProFormText,
+ ProFormSelect,
+ ProFormDateTimePicker
+} from '@ant-design/pro-components';
+import { Form, Modal } from 'antd';
+import { FormattedMessage, useIntl } from '@umijs/max';
+import moment from 'moment';
+import Http from '@/utils/http';
+
+const Edit = (props) => {
+ const intl = useIntl();
+ const [form] = Form.useForm();
+ const { } = props;
+
+ useEffect(() => {
+ form.resetFields();
+ form.setFieldsValue({
+ ...props.values
+ })
+ }, [form, props])
+
+ const handleCancel = () => {
+ props.onCancel();
+ };
+
+ const handleOk = () => {
+ form.submit();
+ }
+
+ const handleFinish = async (values) => {
+ props.onSubmit({ ...values });
+ }
+
+ return (
+ <>
+ <Modal
+ title={
+ Object.keys(props.values).length > 0
+ ? intl.formatMessage({ id: 'page.edit', defaultMessage: '缂栬緫' })
+ : intl.formatMessage({ id: 'page.add', defaultMessage: '娣诲姞' })
+ }
+ width={640}
+ forceRender
+ destroyOnClose
+ open={props.open}
+ onCancel={handleCancel}
+ onOk={handleOk}
+ >
+ <ProForm
+ form={form}
+ submitter={false}
+ onFinish={handleFinish}
+ layout="horizontal"
+ grid={true}
+ >
+ <ProFormDigit
+ name="id"
+ disabled
+ hidden={true}
+ />
+ <ProForm.Group>
+ <ProFormText
+ name="uuid"
+ label="缂栧彿"
+ colProps={{ md: 12, xl: 12 }}
+ />
+ <ProFormText
+ name="name"
+ label="鍚嶇О"
+ colProps={{ md: 12, xl: 12 }}
+ />
+ </ProForm.Group>
+ <ProForm.Group>
+ <ProFormText
+ name="flag"
+ label="鏍囪瘑"
+ colProps={{ md: 12, xl: 12 }}
+ />
+ <ProFormSelect
+ name="status"
+ label="鐘舵��"
+ colProps={{ md: 12, xl: 12 }}
+ options={[
+ { label: '姝e父', value: 1 },
+ { label: '绂佺敤', value: 0 },
+ ]}
+ />
+ </ProForm.Group>
+ <ProForm.Group>
+ <ProFormDateTimePicker
+ name="createTime"
+ label="娣诲姞鏃堕棿"
+ colProps={{ md: 12, xl: 12 }}
+ transform={(value) => moment(value).toISOString()}
+ />
+ <ProFormSelect
+ name="createBy"
+ label="娣诲姞浜哄憳"
+ colProps={{ md: 12, xl: 12 }}
+ fieldProps={{ precision: 0 }}
+ showSearch
+ debounceTime={300}
+ request={async ({ keyWords }) => {
+ const resp = await Http.doPostForm('api/user/query', { condition: keyWords });
+ return resp.data;
+ }}
+ />
+ </ProForm.Group>
+ <ProForm.Group>
+ <ProFormDateTimePicker
+ name="updateTime"
+ label="淇敼鏃堕棿"
+ colProps={{ md: 12, xl: 12 }}
+ transform={(value) => moment(value).toISOString()}
+ />
+ <ProFormSelect
+ name="updateBy"
+ label="淇敼浜哄憳"
+ colProps={{ md: 12, xl: 12 }}
+ fieldProps={{ precision: 0 }}
+ showSearch
+ debounceTime={300}
+ request={async ({ keyWords }) => {
+ const resp = await Http.doPostForm('api/user/query', { condition: keyWords });
+ return resp.data;
+ }}
+ />
+ </ProForm.Group>
+ <ProForm.Group>
+ <ProFormText
+ name="memo"
+ label="澶囨敞"
+ colProps={{ md: 12, xl: 12 }}
+ />
+ <ProFormDigit
+ name="taskNo"
+ label="褰撳墠ID"
+ colProps={{ md: 12, xl: 12 }}
+ fieldProps={{ precision: 0 }}
+ />
+ </ProForm.Group>
+ <ProForm.Group>
+ <ProFormDigit
+ name="startNo"
+ label="璧峰ID"
+ colProps={{ md: 12, xl: 12 }}
+ fieldProps={{ precision: 0 }}
+ />
+ <ProFormDigit
+ name="targetNo"
+ label="鐩爣ID"
+ colProps={{ md: 12, xl: 12 }}
+ fieldProps={{ precision: 0 }}
+ />
+ </ProForm.Group>
+
+ </ProForm>
+ </Modal>
+ </>
+ )
+}
+
+export default Edit;
diff --git a/zy-asrs-flow/src/pages/task/taskSerialNo/index.jsx b/zy-asrs-flow/src/pages/task/taskSerialNo/index.jsx
new file mode 100644
index 0000000..7767713
--- /dev/null
+++ b/zy-asrs-flow/src/pages/task/taskSerialNo/index.jsx
@@ -0,0 +1,467 @@
+
+import React, { useState, useRef, useEffect } from 'react';
+import { Button, message, Modal, Tag } from 'antd';
+import {
+ FooterToolbar,
+ PageContainer,
+ ProTable,
+ LightFilter,
+} from '@ant-design/pro-components';
+import { FormattedMessage, useIntl } from '@umijs/max';
+import { PlusOutlined, ExportOutlined } from '@ant-design/icons';
+import Http from '@/utils/http';
+import Edit from './components/edit'
+import { TextFilter, SelectFilter, DatetimeRangeFilter, LinkFilter } from '@/components/TableSearch'
+import { statusMap } from '@/utils/enum-util'
+import { repairBug } from '@/utils/common-util';
+
+const TABLE_KEY = 'pro-table-taskSerialNo';
+
+const handleSave = async (val, intl) => {
+ const hide = message.loading(intl.formatMessage({ id: 'page.adding', defaultMessage: '姝e湪娣诲姞' }));
+ try {
+ const resp = await Http.doPost('api/taskSerialNo/save', val);
+ if (resp.code === 200) {
+ message.success(intl.formatMessage({ id: 'page.add.success', defaultMessage: '娣诲姞鎴愬姛' }));
+ return true;
+ } else {
+ message.error(resp.msg);
+ return false;
+ }
+ } catch (error) {
+ message.error(intl.formatMessage({ id: 'page.add.fail', defaultMessage: '娣诲姞澶辫触璇烽噸璇曪紒' }));
+ return false;
+ } finally {
+ hide();
+ }
+};
+
+const handleUpdate = async (val, intl) => {
+ const hide = message.loading(intl.formatMessage({ id: 'page.updating', defaultMessage: '姝e湪鏇存柊' }));
+ try {
+ const resp = await Http.doPost('api/taskSerialNo/update', val);
+ if (resp.code === 200) {
+ message.success(intl.formatMessage({ id: 'page.update.success', defaultMessage: '鏇存柊鎴愬姛' }));
+ return true;
+ } else {
+ message.error(resp.msg);
+ return false;
+ }
+ } catch (error) {
+ message.error(intl.formatMessage({ id: 'page.update.fail', defaultMessage: '鏇存柊澶辫触璇烽噸璇曪紒' }));
+ return false;
+ } finally {
+ hide();
+ }
+};
+
+const handleRemove = async (rows, intl) => {
+ if (!rows) return true;
+ const hide = message.loading(intl.formatMessage({ id: 'page.deleting', defaultMessage: '姝e湪鍒犻櫎' }));
+ try {
+ const resp = await Http.doPost('api/taskSerialNo/remove/' + rows.map((row) => row.id).join(','));
+ if (resp.code === 200) {
+ message.success(intl.formatMessage({ id: 'page.delete.success', defaultMessage: '鍒犻櫎鎴愬姛' }));
+ return true;
+ } else {
+ message.error(resp.msg);
+ return false;
+ }
+ } catch (error) {
+ message.error(intl.formatMessage({ id: 'page.delete.fail', defaultMessage: '鍒犻櫎澶辫触锛岃閲嶈瘯锛�' }));
+ return false;
+ } finally {
+ hide();
+ }
+};
+
+const handleExport = async (intl) => {
+ const hide = message.loading(intl.formatMessage({ id: 'page.exporting', defaultMessage: '姝e湪瀵煎嚭' }));
+ try {
+ const resp = await Http.doPostBlob('api/taskSerialNo/export');
+ const blob = new Blob([resp], { type: 'application/vnd.ms-excel' });
+ window.location.href = window.URL.createObjectURL(blob);
+ message.success(intl.formatMessage({ id: 'page.export.success', defaultMessage: '瀵煎嚭鎴愬姛' }));
+ return true;
+ } catch (error) {
+ message.error(intl.formatMessage({ id: 'page.export.fail', defaultMessage: '瀵煎嚭澶辫触锛岃閲嶈瘯' }));
+ return false;
+ } finally {
+ hide();
+ }
+};
+
+
+const Main = () => {
+ const intl = useIntl();
+ const formTableRef = useRef();
+ const actionRef = useRef();
+ const [selectedRows, setSelectedRows] = useState([]);
+ const [modalVisible, setModalVisible] = useState(false);
+ const [currentRow, setCurrentRow] = useState();
+ const [searchParam, setSearchParam] = useState({});
+
+ useEffect(() => {
+
+ }, []);
+
+ const columns = [
+ {
+ title: intl.formatMessage({
+ id: 'page.table.no',
+ defaultMessage: 'No'
+ }),
+ dataIndex: 'index',
+ valueType: 'indexBorder',
+ width: 48,
+ },
+ {
+ title: '缂栧彿',
+ dataIndex: 'uuid',
+ valueType: 'text',
+ hidden: false,
+ width: 140,
+ filterDropdown: (props) => <TextFilter
+ name='uuid'
+ {...props}
+ actionRef={actionRef}
+ setSearchParam={setSearchParam}
+ />,
+ },
+ {
+ title: '鍚嶇О',
+ dataIndex: 'name',
+ 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'
+ {...props}
+ actionRef={actionRef}
+ setSearchParam={setSearchParam}
+ />,
+ },
+ {
+ title: '鐘舵��',
+ dataIndex: 'status$',
+ valueType: 'text',
+ hidden: false,
+ width: 140,
+ filterDropdown: (props) => <SelectFilter
+ name='status'
+ {...props}
+ actionRef={actionRef}
+ setSearchParam={setSearchParam}
+ data={[
+ { label: '姝e父', value: 1 },
+ { label: '绂佺敤', value: 0 },
+ ]}
+ />,
+ },
+ {
+ title: '娣诲姞鏃堕棿',
+ dataIndex: 'createTime$',
+ valueType: 'text',
+ hidden: false,
+ width: 140,
+ filterDropdown: (props) => <DatetimeRangeFilter
+ name='createTime'
+ {...props}
+ actionRef={actionRef}
+ setSearchParam={setSearchParam}
+ />,
+ },
+ {
+ title: '娣诲姞浜哄憳',
+ dataIndex: 'createBy$',
+ valueType: 'text',
+ hidden: false,
+ width: 140,
+ filterDropdown: (props) => <LinkFilter
+ name='createBy'
+ major='user'
+ {...props}
+ actionRef={actionRef}
+ setSearchParam={setSearchParam}
+ />,
+ },
+ {
+ title: '淇敼鏃堕棿',
+ dataIndex: 'updateTime$',
+ valueType: 'text',
+ hidden: false,
+ width: 140,
+ filterDropdown: (props) => <DatetimeRangeFilter
+ name='updateTime'
+ {...props}
+ actionRef={actionRef}
+ setSearchParam={setSearchParam}
+ />,
+ },
+ {
+ title: '淇敼浜哄憳',
+ dataIndex: 'updateBy$',
+ valueType: 'text',
+ hidden: false,
+ width: 140,
+ filterDropdown: (props) => <LinkFilter
+ name='updateBy'
+ major='user'
+ {...props}
+ actionRef={actionRef}
+ setSearchParam={setSearchParam}
+ />,
+ },
+ {
+ title: '澶囨敞',
+ dataIndex: 'memo',
+ valueType: 'text',
+ hidden: false,
+ width: 140,
+ filterDropdown: (props) => <TextFilter
+ name='memo'
+ {...props}
+ actionRef={actionRef}
+ setSearchParam={setSearchParam}
+ />,
+ },
+ {
+ title: '褰撳墠ID',
+ dataIndex: 'taskNo',
+ valueType: 'text',
+ hidden: false,
+ width: 140,
+ filterDropdown: (props) => <TextFilter
+ name='taskNo'
+ {...props}
+ actionRef={actionRef}
+ setSearchParam={setSearchParam}
+ />,
+ },
+ {
+ title: '璧峰ID',
+ dataIndex: 'startNo',
+ valueType: 'text',
+ hidden: false,
+ width: 140,
+ filterDropdown: (props) => <TextFilter
+ name='startNo'
+ {...props}
+ actionRef={actionRef}
+ setSearchParam={setSearchParam}
+ />,
+ },
+ {
+ title: '鐩爣ID',
+ dataIndex: 'targetNo',
+ valueType: 'text',
+ hidden: false,
+ width: 140,
+ filterDropdown: (props) => <TextFilter
+ name='targetNo'
+ {...props}
+ actionRef={actionRef}
+ setSearchParam={setSearchParam}
+ />,
+ },
+
+ {
+ title: '鎿嶄綔',
+ dataIndex: 'option',
+ width: 140,
+ valueType: 'option',
+ render: (_, record) => [
+ <Button
+ type="link"
+ key="edit"
+ onClick={() => {
+ setModalVisible(true);
+ setCurrentRow(record);
+ }}
+ >
+ <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>,
+ ],
+ },
+ ];
+
+ return (
+ <PageContainer
+ header={{
+ breadcrumb: {},
+ }}
+ >
+ <div style={{ width: '100%', float: 'right' }}>
+ <ProTable
+ key="taskSerialNo"
+ rowKey="id"
+ actionRef={actionRef}
+ formRef={formTableRef}
+ columns={columns}
+ cardBordered
+ scroll={{ x: 1300 }}
+ dateFormatter="string"
+ pagination={{ pageSize: 16 }}
+ search={false}
+ toolbar={{
+ search: {
+ onSearch: (value) => {
+ setSearchParam(prevState => ({
+ ...prevState,
+ condition: value
+ }));
+ actionRef.current?.reload();
+ },
+ },
+ filter: (
+ <LightFilter
+ onValuesChange={(val) => {
+ }}
+ >
+ </LightFilter>
+ ),
+ actions: [
+ <Button
+ type="primary"
+ key="save"
+ onClick={async () => {
+ setModalVisible(true)
+ }}
+ >
+ <PlusOutlined />
+ <FormattedMessage id='page.add' defaultMessage='娣诲姞' />
+ </Button>,
+ <Button
+ key="export"
+ onClick={async () => {
+ handleExport(intl);
+ }}
+ >
+ <ExportOutlined />
+ <FormattedMessage id='page.export' defaultMessage='瀵煎嚭' />
+ </Button>,
+ ],
+ }}
+ request={(params, sorter, filter) =>
+ Http.doPostPromise('/api/taskSerialNo/page', { ...params, ...searchParam }, (res) => {
+ return {
+ data: res.data.records,
+ total: res.data.total,
+ success: true,
+ }
+ })
+ }
+ rowSelection={{
+ onChange: (ids, rows) => {
+ setSelectedRows(rows);
+ }
+ }}
+ columnsState={{
+ persistenceKey: TABLE_KEY,
+ persistenceType: 'localStorage',
+ defaultValue: {
+ // memo: { show: repairBug(TABLE_KEY, 'memo', false) },
+ option: { fixed: 'right', disable: true },
+ },
+ onChange(value) {
+ },
+ }}
+ />
+ </div>
+
+ {selectedRows?.length > 0 && (
+ <FooterToolbar
+ extra={
+ <div>
+ <a style={{ fontWeight: 600 }}>{selectedRows.length}</a>
+ <FormattedMessage id='page.selected' defaultMessage=' 椤瑰凡閫夋嫨' />
+ </div>
+ }
+ >
+ <Button
+ key="remove"
+ danger
+ 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(selectedRows, intl);
+ if (success) {
+ setSelectedRows([]);
+ actionRef.current?.reloadAndRest?.();
+ }
+ },
+ });
+ }}
+ >
+ <FormattedMessage id='page.delete.batch' defaultMessage='鎵归噺鍒犻櫎' />
+ </Button>
+ </FooterToolbar>
+ )}
+
+ <Edit
+ open={modalVisible}
+ values={currentRow || {}}
+ onCancel={
+ () => {
+ setModalVisible(false);
+ setCurrentRow(undefined);
+ }
+ }
+ onSubmit={async (values) => {
+ let ok = false;
+ if (values.id) {
+ ok = await handleUpdate({ ...values }, intl)
+ } else {
+ ok = await handleSave({ ...values }, intl)
+ }
+ if (ok) {
+ setModalVisible(false);
+ setCurrentRow(undefined);
+ if (actionRef.current) {
+ actionRef.current.reload();
+ }
+ }
+ }}
+ />
+ </PageContainer>
+ );
+};
+
+export default Main;
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/MainProcess.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/MainProcess.java
index 7696f04..3c7dae4 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/MainProcess.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/MainProcess.java
@@ -67,8 +67,6 @@
mainService.loopShuttleCharge();
// 绌挎杞� ===>> 灏忚溅鐢甸噺婊$數鍚庡洖寰呮満浣�
mainService.loopShuttleToStandbyCauseCharge();
-// // 鎵弿宸茬粡鍦ㄥ嚭搴撳彛鐨勮揣鐗� => 鍛煎彨agv鑷虫斁璐х珯鐐�
-// mainService.scanOutCallAgv();
} catch (Exception e) {
e.printStackTrace();
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/TaskSerialNoController.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/TaskSerialNoController.java
new file mode 100644
index 0000000..cda1803
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/controller/TaskSerialNoController.java
@@ -0,0 +1,101 @@
+package com.zy.asrs.wcs.system.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zy.asrs.framework.common.Cools;
+import com.zy.asrs.framework.common.R;
+import com.zy.asrs.wcs.common.annotation.OperationLog;
+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.TaskSerialNo;
+import com.zy.asrs.wcs.core.service.TaskSerialNoService;
+import com.zy.asrs.wcs.utils.ExcelUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+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;
+
+@RestController
+@RequestMapping("/api")
+public class TaskSerialNoController extends BaseController {
+
+ @Autowired
+ private TaskSerialNoService taskSerialNoService;
+
+ @PreAuthorize("hasAuthority('core:taskSerialNo:list')")
+ @PostMapping("/taskSerialNo/page")
+ public R page(@RequestBody Map<String, Object> map) {
+ BaseParam baseParam = buildParam(map, BaseParam.class);
+ PageParam<TaskSerialNo, BaseParam> pageParam = new PageParam<>(baseParam, TaskSerialNo.class);
+ return R.ok().add(taskSerialNoService.page(pageParam, pageParam.buildWrapper(true)));
+ }
+
+ @PreAuthorize("hasAuthority('core:taskSerialNo:list')")
+ @PostMapping("/taskSerialNo/list")
+ public R list(@RequestBody Map<String, Object> map) {
+ return R.ok().add(taskSerialNoService.list());
+ }
+
+ @PreAuthorize("hasAuthority('core:taskSerialNo:list')")
+ @GetMapping("/taskSerialNo/{id}")
+ public R get(@PathVariable("id") Long id) {
+ return R.ok().add(taskSerialNoService.getById(id));
+ }
+
+ @PreAuthorize("hasAuthority('core:taskSerialNo:save')")
+ @OperationLog("娣诲姞浠诲姟搴忓垪鍙�")
+ @PostMapping("/taskSerialNo/save")
+ public R save(@RequestBody TaskSerialNo taskSerialNo) {
+ if (!taskSerialNoService.save(taskSerialNo)) {
+ return R.error("娣诲姞澶辫触");
+ }
+ return R.ok("娣诲姞鎴愬姛");
+ }
+
+ @PreAuthorize("hasAuthority('core:taskSerialNo:update')")
+ @OperationLog("淇敼浠诲姟搴忓垪鍙�")
+ @PostMapping("/taskSerialNo/update")
+ public R update(@RequestBody TaskSerialNo taskSerialNo) {
+ if (!taskSerialNoService.updateById(taskSerialNo)) {
+ return R.error("淇敼澶辫触");
+ }
+ return R.ok("淇敼鎴愬姛");
+ }
+
+ @PreAuthorize("hasAuthority('core:taskSerialNo:remove')")
+ @OperationLog("鍒犻櫎浠诲姟搴忓垪鍙�")
+ @PostMapping("/taskSerialNo/remove/{ids}")
+ public R remove(@PathVariable Long[] ids) {
+ if (!taskSerialNoService.removeByIds(Arrays.asList(ids))) {
+ return R.error("鍒犻櫎澶辫触");
+ }
+ return R.ok("鍒犻櫎鎴愬姛");
+ }
+
+ @PreAuthorize("hasAuthority('core:taskSerialNo:list')")
+ @PostMapping("/taskSerialNo/query")
+ public R query(@RequestParam(required = false) String condition) {
+ List<KeyValVo> vos = new ArrayList<>();
+ LambdaQueryWrapper<TaskSerialNo> wrapper = new LambdaQueryWrapper<>();
+ if (!Cools.isEmpty(condition)) {
+ wrapper.like(TaskSerialNo::getName, condition);
+ }
+ taskSerialNoService.page(new Page<>(1, 30), wrapper).getRecords().forEach(
+ item -> vos.add(new KeyValVo(item.getId(), item.getName()))
+ );
+ return R.ok().add(vos);
+ }
+
+ @PreAuthorize("hasAuthority('core:taskSerialNo:list')")
+ @PostMapping("/taskSerialNo/export")
+ public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception {
+ ExcelUtil.build(ExcelUtil.create(taskSerialNoService.list(), TaskSerialNo.class), response);
+ }
+
+}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/Task.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/Task.java
index 9c5ebeb..04eb896 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/Task.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/Task.java
@@ -224,9 +224,39 @@
@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;
+
public Task() {}
- public Task(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) {
+ public Task(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) {
this.uuid = uuid;
this.busId = busId;
this.taskNo = taskNo;
@@ -255,9 +285,14 @@
this.updateTime = updateTime;
this.updateBy = updateBy;
this.memo = memo;
+ this.shuttleNo = shuttleNo;
+ this.liftNo = liftNo;
+ this.crnNo = crnNo;
+ this.rgvNo = rgvNo;
+ this.agvNo = agvNo;
}
-// Task task = new Task(
+ // Task task = new Task(
// null, // 缂栧彿
// null, // 鎬荤嚎
// null, // 浠诲姟鍙�
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/TaskSerialNo.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/TaskSerialNo.java
new file mode 100644
index 0000000..e541f04
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/TaskSerialNo.java
@@ -0,0 +1,230 @@
+package com.zy.asrs.wcs.core.entity;
+
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+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.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_serial_no")
+public class TaskSerialNo implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * ID
+ */
+ @ApiModelProperty(value= "ID")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ /**
+ * 缂栧彿
+ */
+ @ApiModelProperty(value= "缂栧彿")
+ private String uuid;
+
+ /**
+ * 鍚嶇О
+ */
+ @ApiModelProperty(value= "鍚嶇О")
+ private String name;
+
+ /**
+ * 鏍囪瘑
+ */
+ @ApiModelProperty(value= "鏍囪瘑")
+ private String flag;
+
+ /**
+ * 鎵�灞炴満鏋�
+ */
+ @ApiModelProperty(value= "鎵�灞炴満鏋�")
+ private Long hostId;
+
+ /**
+ * 鐘舵�� 1: 姝e父 0: 绂佺敤
+ */
+ @ApiModelProperty(value= "鐘舵�� 1: 姝e父 0: 绂佺敤 ")
+ private Integer status;
+
+ /**
+ * 鏄惁鍒犻櫎 1: 鏄� 0: 鍚�
+ */
+ @ApiModelProperty(value= "鏄惁鍒犻櫎 1: 鏄� 0: 鍚� ")
+ @TableLogic
+ private Integer deleted;
+
+ /**
+ * 娣诲姞鏃堕棿
+ */
+ @ApiModelProperty(value= "娣诲姞鏃堕棿")
+ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+
+ /**
+ * 娣诲姞浜哄憳
+ */
+ @ApiModelProperty(value= "娣诲姞浜哄憳")
+ private Long createBy;
+
+ /**
+ * 淇敼鏃堕棿
+ */
+ @ApiModelProperty(value= "淇敼鏃堕棿")
+ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+ private Date updateTime;
+
+ /**
+ * 淇敼浜哄憳
+ */
+ @ApiModelProperty(value= "淇敼浜哄憳")
+ private Long updateBy;
+
+ /**
+ * 澶囨敞
+ */
+ @ApiModelProperty(value= "澶囨敞")
+ private String memo;
+
+ /**
+ * 褰撳墠ID
+ */
+ @ApiModelProperty(value= "褰撳墠ID")
+ private Integer taskNo;
+
+ /**
+ * 璧峰ID
+ */
+ @ApiModelProperty(value= "璧峰ID")
+ private Integer startNo;
+
+ /**
+ * 鐩爣ID
+ */
+ @ApiModelProperty(value= "鐩爣ID")
+ private Integer targetNo;
+
+ public TaskSerialNo() {}
+
+ public TaskSerialNo(String uuid,String name,String flag,Long hostId,Integer status,Integer deleted,Date createTime,Long createBy,Date updateTime,Long updateBy,String memo,Integer taskNo,Integer startNo,Integer targetNo) {
+ this.uuid = uuid;
+ this.name = name;
+ this.flag = flag;
+ this.hostId = hostId;
+ this.status = status;
+ this.deleted = deleted;
+ this.createTime = createTime;
+ this.createBy = createBy;
+ this.updateTime = updateTime;
+ this.updateBy = updateBy;
+ this.memo = memo;
+ this.taskNo = taskNo;
+ this.startNo = startNo;
+ this.targetNo = targetNo;
+ }
+
+// TaskSerialNo taskSerialNo = new TaskSerialNo(
+// null, // 缂栧彿
+// null, // 鍚嶇О
+// null, // 鏍囪瘑
+// null, // 鎵�灞炴満鏋�
+// null, // 鐘舵��
+// null, // 鏄惁鍒犻櫎
+// null, // 娣诲姞鏃堕棿
+// null, // 娣诲姞浜哄憳
+// null, // 淇敼鏃堕棿
+// null, // 淇敼浜哄憳
+// null, // 澶囨敞
+// null, // 褰撳墠ID
+// null, // 璧峰ID
+// null // 鐩爣ID
+// );
+
+ public String getHostId$(){
+ HostService service = SpringUtils.getBean(HostService.class);
+ Host host = service.getById(this.hostId);
+ if (!Cools.isEmpty(host)){
+ return String.valueOf(host.getName());
+ }
+ return null;
+ }
+
+ public String getStatus$(){
+ if (null == this.status){ return null; }
+ switch (this.status){
+ case 1:
+ return "姝e父";
+ case 0:
+ return "绂佺敤";
+ default:
+ return String.valueOf(this.status);
+ }
+ }
+
+ public String getDeleted$(){
+ if (null == this.deleted){ return null; }
+ switch (this.deleted){
+ case 1:
+ return "鏄�";
+ case 0:
+ return "鍚�";
+ default:
+ return String.valueOf(this.deleted);
+ }
+ }
+
+ public String getCreateTime$(){
+ if (Cools.isEmpty(this.createTime)){
+ return "";
+ }
+ return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
+ }
+
+ public String getCreateBy$(){
+ UserService service = SpringUtils.getBean(UserService.class);
+ User user = service.getById(this.createBy);
+ if (!Cools.isEmpty(user)){
+ return String.valueOf(user.getNickname());
+ }
+ return null;
+ }
+
+ public String getUpdateTime$(){
+ if (Cools.isEmpty(this.updateTime)){
+ return "";
+ }
+ return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
+ }
+
+ public String getUpdateBy$(){
+ UserService service = SpringUtils.getBean(UserService.class);
+ User user = service.getById(this.updateBy);
+ if (!Cools.isEmpty(user)){
+ return String.valueOf(user.getNickname());
+ }
+ return null;
+ }
+
+
+}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java
index 4f7ef93..357d9c6 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java
@@ -703,11 +703,11 @@
}
-// /**
-// * 鐢熸垚鍏呯數鍔ㄤ綔
-// */
-// public List<Motion> generateChargeMotion(WrkCharge wrkCharge) {
-// List<Motion> motionList = new ArrayList<>();
+ /**
+ * 鐢熸垚鍏呯數鍔ㄤ綔
+ */
+ public List<Motion> generateChargeMotion(Task task) {
+ List<Motion> motionList = new ArrayList<>();
// if (wrkCharge.getWrkSts() != WrkMastStsType.NEW_CHARGE.sts || wrkCharge.getIoType() != WrkIoTypeType.CHARGE.sts) {
// return motionList;
// }
@@ -866,15 +866,15 @@
// dto.setShuttleNo(shuttleProtocol.getShuttleNo().intValue());
// }))
// ));
-//
-// return motionList;
-// }
-//
-// /**
-// * 鐢熸垚鍏呯數瀹屾垚鍔ㄤ綔
-// */
-// public List<Motion> generateShuttleChargeWrkComplete(WrkCharge wrkCharge) {
-// List<Motion> motionList = new ArrayList<>();
+
+ return motionList;
+ }
+
+ /**
+ * 鐢熸垚鍏呯數瀹屾垚鍔ㄤ綔
+ */
+ public List<Motion> generateShuttleChargeWrkComplete(Task task) {
+ List<Motion> motionList = new ArrayList<>();
// if (wrkCharge.getWrkSts() != WrkMastStsType.NEW_MOVE.sts || wrkCharge.getIoType() != WrkIoTypeType.MOVE.sts) {
// return motionList;
// }
@@ -909,8 +909,8 @@
// ));
//
// }
-// return motionList;
-// }
+ return motionList;
+ }
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/mapper/TaskMapper.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/mapper/TaskMapper.java
index 2254cd8..7a76b9f 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/mapper/TaskMapper.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/mapper/TaskMapper.java
@@ -22,4 +22,10 @@
List<Task> selectPakOut();
+ List<Task> hasChargeInLoc(String locNo);
+
+ Task selectMoveWorking(Integer shuttleNo);
+
+ Task selectChargeWorking(Integer shuttleNo);
+
}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/mapper/TaskSerialNoMapper.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/mapper/TaskSerialNoMapper.java
new file mode 100644
index 0000000..536e4d2
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/mapper/TaskSerialNoMapper.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.wcs.core.mapper;
+
+import com.zy.asrs.wcs.core.entity.TaskSerialNo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface TaskSerialNoMapper extends BaseMapper<TaskSerialNo> {
+
+}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/TaskSerialNoService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/TaskSerialNoService.java
new file mode 100644
index 0000000..228d750
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/TaskSerialNoService.java
@@ -0,0 +1,8 @@
+package com.zy.asrs.wcs.core.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zy.asrs.wcs.core.entity.TaskSerialNo;
+
+public interface TaskSerialNoService extends IService<TaskSerialNo> {
+
+}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/TaskService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/TaskService.java
index 21bbcdd..e620f49 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/TaskService.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/TaskService.java
@@ -20,4 +20,10 @@
List<Task> selectPakOut();
+ List<Task> hasChargeInLoc(String locNo);
+
+ Task selectMoveWorking(Integer shuttleNo);
+
+ Task selectChargeWorking(Integer shuttleNo);
+
}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java
index b804446..bb57f54 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/MainServiceImpl.java
@@ -1,22 +1,35 @@
package com.zy.asrs.wcs.core.service.impl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.asrs.framework.common.Cools;
-import com.zy.asrs.wcs.core.entity.Task;
+import com.zy.asrs.framework.common.SnowflakeIdWorker;
+import com.zy.asrs.wcs.core.entity.*;
import com.zy.asrs.wcs.core.kernel.AnalyzeService;
+import com.zy.asrs.wcs.core.model.enums.DeviceCtgType;
+import com.zy.asrs.wcs.core.model.enums.MotionStsType;
import com.zy.asrs.wcs.core.model.enums.TaskStsType;
-import com.zy.asrs.wcs.core.service.TaskService;
+import com.zy.asrs.wcs.core.service.*;
+import com.zy.asrs.wcs.core.utils.Utils;
import com.zy.asrs.wcs.rcs.News;
-import com.zy.asrs.wcs.core.entity.Motion;
-import com.zy.asrs.wcs.core.service.MotionService;
import com.zy.asrs.wcs.rcs.cache.SlaveConnection;
+import com.zy.asrs.wcs.rcs.entity.Device;
+import com.zy.asrs.wcs.rcs.entity.DeviceType;
+import com.zy.asrs.wcs.rcs.model.enums.ShuttleProtocolStatusType;
import com.zy.asrs.wcs.rcs.model.enums.SlaveType;
+import com.zy.asrs.wcs.rcs.model.protocol.ShuttleProtocol;
import com.zy.asrs.wcs.rcs.model.protocol.StaProtocol;
+import com.zy.asrs.wcs.rcs.service.DeviceService;
+import com.zy.asrs.wcs.rcs.service.DeviceTypeService;
import com.zy.asrs.wcs.rcs.thread.DevpThread;
+import com.zy.asrs.wcs.rcs.thread.ShuttleThread;
+import com.zy.asrs.wcs.system.entity.Dict;
+import com.zy.asrs.wcs.system.service.DictService;
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.Date;
import java.util.List;
@@ -35,6 +48,20 @@
private AnalyzeService analyzeService;
@Autowired
private MotionService motionService;
+ @Autowired
+ private DeviceService deviceService;
+ @Autowired
+ private DeviceTypeService deviceTypeService;
+ @Autowired
+ private LocCtgService locCtgService;
+ @Autowired
+ private LocService locService;
+ @Autowired
+ private SnowflakeIdWorker snowflakeIdWorker;
+ @Autowired
+ private TaskCtgService taskCtgService;
+ @Autowired
+ private DictService dictService;
/**
* 缁勬墭
@@ -127,126 +154,244 @@
* 鍥涘悜绌挎杞︾數閲忔娴� ===>> 鍙戣捣鍏呯數
*/
public synchronized void loopShuttleCharge() {
-// ShuttleChargeType shuttleCharge = ShuttleChargeType.CHARGE_1;
-// for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
-// // 鍒ゆ柇鍏呯數浣嶆槸鍚﹁鍗犵敤
-// if (wrkChargeService.hasShuttleInChargeLoc(shuttleCharge.locNo, shuttle.getId())) {
-// continue;
-// }
-//
-// //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
-// ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId());
-// ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-// if (shuttleProtocol == null) {
-// continue;
-// }
-// if (motionService.selectCount(new EntityWrapper<Motion>()
-// .eq("device_ctg", DeviceCtgType.SHUTTLE.val())
-// .eq("device", shuttle.getId())
-// .eq("motion_sts", MotionStsType.EXECUTING.val())) > 0) {
-// continue;
-// }
-//
-// //鍒ゆ柇褰撳墠灏忚溅鏄惁婊¤冻闇�瑕佸厖鐢佃姹�
-// if (!shuttleProtocol.isRequireCharge()) {
-// continue;
-// }
-//
-// WrkCharge wrkCharge = wrkChargeService.selectWorking(null);
-// if (wrkCharge != null) {//宸叉湁鍏呯數浠诲姟
-// continue;
-// }
-//
-// String chargeLocNo = shuttleCharge.locNo;
-// wrkCharge = new WrkCharge();
-// wrkCharge.setShuttleNo(shuttle.getId());
-// wrkCharge.setCharge(shuttleCharge.id);
-// wrkCharge.setWrkNo(commonService.getChargeWorkNo(4));
-// wrkCharge.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
-// wrkCharge.setWrkSts(WrkMastStsType.NEW_CHARGE.sts); // 鍏呯數浠诲姟
-// wrkCharge.setIoType(WrkIoTypeType.CHARGE.sts);
-// wrkCharge.setIoPri((double) 10);
-// wrkCharge.setLocNo(chargeLocNo);
-// wrkCharge.setMemo("charge");
-// wrkCharge.setAppeTime(new Date());
-//
-// // generate motion list
-// List<Motion> motionList = analyzeService.generateChargeMotion(wrkCharge);
-// if (Cools.isEmpty(motionList)) {
-// News.error("淇濆瓨{}鍙峰洓鍚戠┛姊溅鍏呯數浠诲姟澶辫触!!!", shuttle.getId());
-// continue;
-// }
-// motionService.batchInsert(motionList, wrkCharge.getUuid(), wrkCharge.getWrkNo());
-//
-// wrkCharge.setWrkSts(WrkMastStsType.ANALYZE_CHARGE.sts);
-//
-// if (!wrkChargeService.insert(wrkCharge)) {
-// News.error("淇濆瓨{}鍙峰洓鍚戠┛姊溅鍏呯數浠诲姟澶辫触!!!", shuttle.getId());
-// continue;
-// }
-//
-// News.info("淇濆瓨{}鍙峰洓鍚戠┛姊溅鍏呯數浠诲姟鎴愬姛!!!", shuttle.getId());
-// }
+ // 鑾峰彇鍏呯數妗╁簱浣嶇被鍨�
+ LocCtg locCtg = locCtgService.getOne(new LambdaQueryWrapper<LocCtg>()
+ .eq(LocCtg::getFlag, "CHARGE")
+ .eq(LocCtg::getStatus, 1));
+ if (locCtg == null) {
+ return;
+ }
+
+ //鑾峰彇鍏呯數浠诲姟绫诲瀷
+ TaskCtg taskCtg = taskCtgService.getOne(new LambdaQueryWrapper<TaskCtg>()
+ .eq(TaskCtg::getFlag, "CHARGE")
+ .eq(TaskCtg::getStatus, 1));
+ if (taskCtg == null) {
+ return;
+ }
+
+ DeviceType deviceType = deviceTypeService.getOne(new LambdaQueryWrapper<DeviceType>()
+ .eq(DeviceType::getFlag, String.valueOf(SlaveType.Shuttle))
+ .eq(DeviceType::getStatus, 1));
+ if (deviceType == null) {
+ return;
+ }
+
+ List<Device> list = deviceService.list(new LambdaQueryWrapper<Device>()
+ .eq(Device::getDeviceType, deviceType.getId())
+ .eq(Device::getStatus, 1));
+ for (Device device : list) {
+ //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
+ ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, device.getId().intValue());
+ if (shuttleThread == null) {
+ continue;
+ }
+
+ ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+ if (shuttleProtocol == null) {
+ continue;
+ }
+
+ if (!shuttleProtocol.getProtocolStatusType().equals(ShuttleProtocolStatusType.IDLE)) {
+ continue;
+ }
+
+ String currentLocNo = shuttleProtocol.getCurrentLocNo();
+ int lev = Utils.getLev(currentLocNo);//鑾峰彇灏忚溅妤煎眰
+ //鎼滅储灏忚溅褰撳墠妤煎眰鍏呯數妗�
+ ArrayList<Loc> allChargeLoc = new ArrayList<>();
+ List<Loc> list1 = locService.list(new LambdaQueryWrapper<Loc>()
+ .eq(Loc::getLocCtg, locCtg.getId())
+ .eq(Loc::getStatus, 1)
+ .eq(Loc::getLev, lev));
+ if (!list1.isEmpty()) {
+ allChargeLoc.addAll(list1);
+ }
+
+ //鎼滅储鍏朵粬妤煎眰鍏呯數妗�
+ List<Loc> list2 = locService.list(new LambdaQueryWrapper<Loc>()
+ .eq(Loc::getLocCtg, locCtg.getId())
+ .eq(Loc::getStatus, 1)
+ .notIn(Loc::getLev, lev));
+ if (!list2.isEmpty()) {
+ allChargeLoc.addAll(list2);
+ }
+
+ //娌℃湁鎵惧埌鍏呯數妗�
+ if (allChargeLoc.isEmpty()) {
+ continue;
+ }
+
+ //閫夋嫨绌洪棽鍏呯數妗�
+ Loc chargeLoc = null;
+ for (Loc loc : allChargeLoc) {
+ // 鍒ゆ柇鍏呯數浣嶆槸鍚﹁鍗犵敤(杞﹁締浣嶇疆)
+ if (Utils.hasShuttleInLoc(loc.getLocNo(), device.getId())) {
+ continue;
+ }
+
+ // 鐩樼偣鍏呯數浣嶆槸鍚﹀瓨鍦ㄤ换鍔℃。
+ List<Task> tasks = taskService.hasChargeInLoc(loc.getLocNo());
+ if (!tasks.isEmpty()) {
+ continue;
+ }
+
+ chargeLoc = loc;
+ break;
+ }
+
+ if (chargeLoc == null) {
+ continue;//鏈壘鍒板厖鐢垫々
+ }
+
+ if (motionService.count(new LambdaQueryWrapper<Motion>()
+ .eq(Motion::getDeviceCtg, DeviceCtgType.SHUTTLE.val())
+ .eq(Motion::getDevice, device.getDeviceNo())
+ .eq(Motion::getMotionSts, MotionStsType.EXECUTING.val())) > 0) {
+ continue;
+ }
+
+ //鍒ゆ柇褰撳墠灏忚溅鏄惁婊¤冻闇�瑕佸厖鐢佃姹�
+ if (!shuttleThread.isRequireCharge()) {
+ continue;
+ }
+
+ Task taskCharge = taskService.selectChargeWorking(Integer.valueOf(device.getDeviceNo()));
+ if (taskCharge != null) {//宸叉湁鍏呯數浠诲姟
+ continue;
+ }
+
+ String chargeLocNo = chargeLoc.getLocNo();
+ Task task = new Task();
+ task.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
+ task.setTaskNo(String.valueOf(Utils.getTaskNo("CHARGE")));
+ task.setTaskSts(TaskStsType.NEW_CHARGE.sts);
+ task.setTaskCtg(taskCtg.getId());
+ task.setPriority(10);
+ task.setOriginSite(null);
+ task.setOriginLoc(null);
+ task.setDestSite(null);
+ task.setDestLoc(chargeLocNo);
+ task.setIoTime(new Date());
+ task.setStartTime(new Date());
+ task.setHostId(device.getHostId());
+ task.setStatus(1);
+ task.setMemo("charge");
+ task.setShuttleNo(Integer.valueOf(device.getDeviceNo()));
+
+ // generate motion list
+ List<Motion> motionList = analyzeService.generateChargeMotion(task);
+ if (Cools.isEmpty(motionList)) {
+ News.error("淇濆瓨{}鍙峰洓鍚戠┛姊溅鍏呯數浠诲姟澶辫触!!!", device.getDeviceNo());
+ continue;
+ }
+ motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()));
+
+ task.setTaskSts(TaskStsType.ANALYZE_CHARGE.sts);
+ if (!taskService.save(task)) {
+ News.error("淇濆瓨{}鍙峰洓鍚戠┛姊溅鍏呯數浠诲姟澶辫触!!!", device.getDeviceNo());
+ continue;
+ }
+
+ News.info("淇濆瓨{}鍙峰洓鍚戠┛姊溅鍏呯數浠诲姟鎴愬姛!!!", device.getDeviceNo());
+ }
}
/**
* 鍥涘悜绌挎杞︾數閲忔娴� ===>> 婊$數鍚庡洖鍒板緟鏈轰綅
*/
public synchronized void loopShuttleToStandbyCauseCharge() {
-// ShuttleChargeType shuttleCharge = ShuttleChargeType.CHARGE_1;
-// Integer enoughPower = 90;
-// Config config = configService.selectOne(new EntityWrapper<Config>()
-// .eq("code", "chargeMaxValue")
-// .eq("status", 1));
-// if (config != null) {
-// enoughPower = Integer.parseInt(config.getValue());
-// }
-//
-// for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
-// //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
-// ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId());
-// ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-// if (shuttleProtocol == null) {
-// continue;
-// }
-// // 鏄惁瀛樺湪鍏呯數浠诲姟
-// WrkCharge wrkCharge = wrkChargeService.selectWorking(shuttle.getId());
-// if (wrkCharge == null) {
-// continue;
-// }
-//
-// if (motionService.selectCount(new EntityWrapper<Motion>()
-// .eq("device_ctg", DeviceCtgType.SHUTTLE.val())
-// .eq("device", shuttle.getId())
-// .eq("motion_sts", MotionStsType.EXECUTING.val())) > 0) {
-// continue;
-// }
-// // 涓嶅浜庡厖鐢典腑
-// if (!shuttleProtocol.getPlcOutputCharge()) {
-// continue;
-// }
-// // 鍦ㄥ厖鐢典綅
-// if (!shuttleProtocol.getCurrentLocNo().equals(shuttleCharge.locNo)) {
-// continue;
-// }
-// // 鐢甸噺鏄惁杈惧埌婊$數瑕佹眰
-// if (shuttleProtocol.getBatteryPower$().intValue() < enoughPower) {
-// continue;
-// }
-// // 宸叉湁杩佺Щ浠诲姟
-// if (wrkChargeService.selectMoveWorking(shuttle.getId()) != null) {
-// continue;
-// }
-//
-// // 寰呮満浣�
-// String standByLocNo = ShuttleTempLocType.query(shuttleProtocol.getShuttleNo().intValue(), 2, Utils.getLev(shuttleCharge.locNo)).locNo;
-//
-// shuttleDispatcher.generateShuttleChargeWrkComplete(shuttleProtocol.getShuttleNo().intValue(), standByLocNo);
-//
-// wrkCharge.setWrkSts(WrkMastStsType.COMPLETE_CHARGE.sts);
-// wrkCharge.setIoTime(new Date());
-// wrkChargeMapper.updateById(wrkCharge);
-// }
+ Integer enoughPower = 90;
+ Dict dict = dictService.getOne(new LambdaQueryWrapper<Dict>()
+ .eq(Dict::getFlag, "chargeMaxValue")
+ .eq(Dict::getStatus, 1));
+ if (dict != null) {
+ enoughPower = Integer.parseInt(dict.getValue());
+ }
+
+ //鑾峰彇杩佺Щ浠诲姟绫诲瀷
+ TaskCtg taskCtg = taskCtgService.getOne(new LambdaQueryWrapper<TaskCtg>()
+ .eq(TaskCtg::getFlag, "MOVE")
+ .eq(TaskCtg::getStatus, 1));
+ if (taskCtg == null) {
+ return;
+ }
+
+ DeviceType deviceType = deviceTypeService.getOne(new LambdaQueryWrapper<DeviceType>()
+ .eq(DeviceType::getFlag, String.valueOf(SlaveType.Shuttle))
+ .eq(DeviceType::getStatus, 1));
+ if (deviceType == null) {
+ return;
+ }
+
+ List<Device> list = deviceService.list(new LambdaQueryWrapper<Device>()
+ .eq(Device::getDeviceType, deviceType.getId())
+ .eq(Device::getStatus, 1));
+ for (Device device : list) {
+ //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
+ ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, device.getId().intValue());
+ if (shuttleThread == null) {
+ continue;
+ }
+
+ if (!shuttleThread.isCharging()) {
+ continue;
+ }
+
+ if (!shuttleThread.isChargingCompleted()) {
+ continue;
+ }
+
+ //鏌ユ壘鍏呯數浠诲姟
+ Task chargeTask = taskService.getOne(new LambdaQueryWrapper<Task>()
+ .eq(Task::getTaskSts, TaskStsType.CHARGE_WORKING.sts)
+ .eq(Task::getShuttleNo, device.getDeviceNo()));
+ if (chargeTask == null) {
+ continue;
+ }
+
+ //鍏呯數瀹屾垚
+ // 宸叉湁杩佺Щ浠诲姟
+ if (taskService.selectMoveWorking(Integer.valueOf(device.getDeviceNo())) != null) {
+ continue;
+ }
+
+ Task task = new Task();
+ task.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
+ task.setTaskNo(String.valueOf(Utils.getTaskNo("MOVE")));
+ task.setTaskSts(TaskStsType.NEW_MOVE.sts);
+ task.setTaskCtg(taskCtg.getId());
+ task.setPriority(10);
+ task.setOriginSite(null);
+ task.setOriginLoc(null);
+ task.setDestSite(null);
+ task.setDestLoc("1-1-1"); // 鏆傛椂鏈畾
+ task.setIoTime(new Date());
+ task.setStartTime(new Date());
+ task.setHostId(device.getHostId());
+ task.setStatus(1);
+ task.setMemo("charge");
+ task.setShuttleNo(Integer.valueOf(device.getDeviceNo()));
+
+ // generate motion list
+ List<Motion> motionList = analyzeService.generateShuttleChargeWrkComplete(task);
+ if (Cools.isEmpty(motionList)) {
+ News.error("淇濆瓨{}鍙峰洓鍚戠┛姊溅杩佺Щ浠诲姟澶辫触!!!", device.getDeviceNo());
+ continue;
+ }
+ motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()));
+
+ task.setTaskSts(TaskStsType.ANALYZE_MOVE.sts);
+
+ if (!taskService.save(task)) {
+ News.error("淇濆瓨{}鍙峰洓鍚戠┛姊溅杩佺Щ浠诲姟澶辫触!!!", device.getDeviceNo());
+ continue;
+ }
+
+ chargeTask.setTaskSts(TaskStsType.COMPLETE_CHARGE.sts);
+ chargeTask.setIoTime(new Date());
+ taskService.updateById(chargeTask);
+ }
}
}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/TaskSerialNoServiceImpl.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/TaskSerialNoServiceImpl.java
new file mode 100644
index 0000000..fa66d3b
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/TaskSerialNoServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.wcs.core.service.impl;
+
+import com.zy.asrs.wcs.core.mapper.TaskSerialNoMapper;
+import com.zy.asrs.wcs.core.entity.TaskSerialNo;
+import com.zy.asrs.wcs.core.service.TaskSerialNoService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("taskSerialNoService")
+public class TaskSerialNoServiceImpl extends ServiceImpl<TaskSerialNoMapper, TaskSerialNo> implements TaskSerialNoService {
+
+}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/TaskServiceImpl.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/TaskServiceImpl.java
index 4580124..344d5c4 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/TaskServiceImpl.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/TaskServiceImpl.java
@@ -74,4 +74,19 @@
public List<Task> selectPakOut() {
return this.baseMapper.selectPakOut();
}
+
+ @Override
+ public List<Task> hasChargeInLoc(String locNo) {
+ return this.baseMapper.hasChargeInLoc(locNo);
+ }
+
+ @Override
+ public Task selectMoveWorking(Integer shuttleNo) {
+ return this.baseMapper.selectMoveWorking(shuttleNo);
+ }
+
+ @Override
+ public Task selectChargeWorking(Integer shuttleNo) {
+ return this.baseMapper.selectChargeWorking(shuttleNo);
+ }
}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/Utils.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/Utils.java
index d8f7718..1a3efdc 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/Utils.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/Utils.java
@@ -1,6 +1,21 @@
package com.zy.asrs.wcs.core.utils;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.asrs.framework.common.Cools;
+import com.zy.asrs.framework.common.SpringUtils;
+import com.zy.asrs.framework.exception.CoolException;
+import com.zy.asrs.wcs.core.entity.Task;
+import com.zy.asrs.wcs.core.entity.TaskSerialNo;
+import com.zy.asrs.wcs.core.service.TaskSerialNoService;
+import com.zy.asrs.wcs.core.service.TaskService;
+import com.zy.asrs.wcs.rcs.cache.SlaveConnection;
+import com.zy.asrs.wcs.rcs.entity.Device;
+import com.zy.asrs.wcs.rcs.entity.DeviceType;
+import com.zy.asrs.wcs.rcs.model.enums.SlaveType;
+import com.zy.asrs.wcs.rcs.model.protocol.ShuttleProtocol;
+import com.zy.asrs.wcs.rcs.service.DeviceService;
+import com.zy.asrs.wcs.rcs.service.DeviceTypeService;
+import com.zy.asrs.wcs.rcs.thread.ShuttleThread;
import java.util.ArrayList;
import java.util.List;
@@ -94,4 +109,79 @@
return list;
}
+ public static boolean hasShuttleInLoc(String locNo, Long deviceId) {
+ DeviceTypeService deviceTypeService = SpringUtils.getBean(DeviceTypeService.class);
+ DeviceService deviceService = SpringUtils.getBean(DeviceService.class);
+
+ DeviceType deviceType = deviceTypeService.getOne(new LambdaQueryWrapper<DeviceType>()
+ .eq(DeviceType::getFlag, String.valueOf(SlaveType.Shuttle))
+ .eq(DeviceType::getStatus, 1));
+ if (deviceType == null) {
+ return false;
+ }
+
+ List<Device> list = deviceService.list(new LambdaQueryWrapper<Device>()
+ .eq(Device::getDeviceType, deviceType.getId())
+ .eq(Device::getStatus, 1));
+
+ for (Device device : list) {
+ if (deviceId.equals(device.getId())) {
+ continue;
+ }
+
+ //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
+ ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, device.getId().intValue());
+ if (shuttleThread == null) {
+ continue;
+ }
+
+ ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+ if (shuttleProtocol == null) {
+ continue;
+ }
+
+ if (shuttleProtocol.getCurrentLocNo().equals(locNo)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * 鐢熸垚宸ヤ綔鍙�
+ * @return taskNo(宸ヤ綔鍙�)
+ */
+ public static int getTaskNo(String flag) {
+ TaskSerialNoService taskSerialNoService = SpringUtils.getBean(TaskSerialNoService.class);
+ TaskService taskService = SpringUtils.getBean(TaskService.class);
+ TaskSerialNo taskSerialNo = taskSerialNoService.getOne(new LambdaQueryWrapper<TaskSerialNo>()
+ .eq(TaskSerialNo::getFlag, flag)
+ .eq(TaskSerialNo::getStatus, 1));
+ if (Cools.isEmpty(taskSerialNo)) {
+ throw new CoolException("鏁版嵁寮傚父锛岃鑱旂郴绠$悊鍛�");
+ }
+
+ int taskNo = taskSerialNo.getTaskNo();
+ int sNo = taskSerialNo.getStartNo();
+ int eNo = taskSerialNo.getTargetNo();
+ taskNo = taskNo >= eNo ? sNo : taskNo + 1;
+ while (true) {
+ Task task = taskService.getOne(new LambdaQueryWrapper<Task>()
+ .eq(Task::getTaskNo, taskNo));
+ if (null != task) {
+ taskNo = taskNo >= eNo ? sNo : taskNo + 1;
+ } else {
+ break;
+ }
+ }
+ // 淇敼搴忓彿璁板綍
+ if (taskNo > 0){
+ taskSerialNo.setTaskNo(taskNo);
+ taskSerialNoService.updateById(taskSerialNo);
+ return taskNo;
+ }
+ throw new CoolException("宸ヤ綔鍙风敓鎴愬け璐�");
+ }
+
}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/ShuttleThread.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/ShuttleThread.java
index 2f31443..0b37b7e 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/ShuttleThread.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/ShuttleThread.java
@@ -25,6 +25,12 @@
boolean isIdle();//鏄惁绌洪棽
+ boolean isRequireCharge();//鏄惁婊¤冻鍏呯數鐘舵��
+
+ boolean isCharging();//鏄惁鍏呯數涓�
+
+ boolean isChargingCompleted();//鏄惁鍏呯數瀹屾垚
+
//***************鑾峰彇鍛戒护*****************
ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed);//鑾峰彇绉诲姩鍛戒护
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java
index 75dd1fd..852ca7c 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/impl/SurayShuttleThread.java
@@ -7,11 +7,13 @@
import com.zy.asrs.framework.common.DateUtils;
import com.zy.asrs.framework.common.SpringUtils;
import com.zy.asrs.framework.exception.CoolException;
+import com.zy.asrs.wcs.core.entity.BasShuttle;
import com.zy.asrs.wcs.core.entity.Loc;
import com.zy.asrs.wcs.core.model.NavigateNode;
import com.zy.asrs.wcs.core.model.command.ShuttleCommand;
import com.zy.asrs.wcs.core.model.enums.ShuttleCommandModeType;
import com.zy.asrs.wcs.core.model.enums.ShuttleRunDirection;
+import com.zy.asrs.wcs.core.service.BasShuttleService;
import com.zy.asrs.wcs.core.service.LocService;
import com.zy.asrs.wcs.core.utils.NavigateUtils;
import com.zy.asrs.wcs.rcs.News;
@@ -99,6 +101,10 @@
//----------璇诲彇鍥涘悜绌挎杞︾姸鎬�-----------
//灏忚溅璁惧鐘舵��
Integer deviceStatus = data.getInteger("deviceStatus");
+ if (deviceStatus == 255) {
+ //绂荤嚎
+ shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.OFFLINE);
+ }
shuttleProtocol.setDeviceStatus(deviceStatus);
//褰撳墠浜岀淮鐮�
shuttleProtocol.setCurrentCode(data.getString("groundCode") == null ? "0" : data.getString("groundCode"));
@@ -357,6 +363,64 @@
}
@Override
+ public boolean isRequireCharge() {
+ if (this.shuttleProtocol.getIdle() == null
+ || this.shuttleProtocol.getPakMk() == null
+ || this.shuttleProtocol.getErrorCode() == null
+ || this.shuttleProtocol.getProtocolStatus() == null
+ ) {
+ return false;
+ }
+
+ boolean res = this.shuttleProtocol.getIdle()
+ && this.shuttleProtocol.getPakMk()
+ && this.shuttleProtocol.getErrorCode().equals("0")
+ && this.shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.IDLE.id
+ ;
+ if (!res) {
+ return res;
+ } else {
+ // 鐢甸噺灏忎簬闃堝�奸渶瑕佽繘琛屽厖鐢�
+ try {
+ BasShuttleService shuttleService = SpringUtils.getBean(BasShuttleService.class);
+ if (shuttleService == null) {
+ return false;
+ }
+ BasShuttle basShuttle = shuttleService.getById(this.device.getDeviceNo());
+ if (basShuttle == null) {
+ return false;
+ }
+ Integer chargeLine = basShuttle.getChargeLine();
+ if (chargeLine == null) {
+ return false;
+ }
+ return Integer.valueOf(this.shuttleProtocol.getBatteryPower()) < chargeLine;
+ } catch (Exception e) {
+ News.error("fail", e);
+ return false;
+ }
+ }
+ }
+
+ @Override
+ public boolean isCharging() {
+ if (this.shuttleProtocol.getDeviceStatus() == null) {
+ return false;
+ }
+
+ if (this.shuttleProtocol.getDeviceStatus() == 5 || this.shuttleProtocol.getDeviceStatus() == 13) {
+ //鍏呯數涓拰鐢垫睜鍧囪 =銆� 鍏呯數
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean isChargingCompleted() {
+ return false;
+ }
+
+ @Override
public ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed) {
HashMap<String, Object> body = new HashMap<>();
body.put("messageName", "runOrder");
diff --git a/zy-asrs-wcs/src/main/resources/mapper/core/TaskMapper.xml b/zy-asrs-wcs/src/main/resources/mapper/core/TaskMapper.xml
index 6e65e4a..c152bd4 100644
--- a/zy-asrs-wcs/src/main/resources/mapper/core/TaskMapper.xml
+++ b/zy-asrs-wcs/src/main/resources/mapper/core/TaskMapper.xml
@@ -35,5 +35,25 @@
order by priority desc,start_time,task_no asc
</select>
+ <select id="hasChargeInLoc" resultType="com.zy.asrs.wcs.core.entity.Task">
+ select * from wcs_task
+ where task_sts in (201,202,203,204)
+ and dest_loc = #{locNo}
+ order by priority desc,start_time,task_no asc
+ </select>
+
+ <select id="selectMoveWorking" resultType="com.zy.asrs.wcs.core.entity.Task">
+ select * from wcs_task
+ where task_sts in (301,302,303)
+ and shuttle_no = #{shuttleNo}
+ order by priority desc,start_time,task_no asc
+ </select>
+
+ <select id="selectChargeWorking" resultType="com.zy.asrs.wcs.core.entity.Task">
+ select * from wcs_task
+ where task_sts in (201,202,203,204)
+ and shuttle_no = #{shuttleNo}
+ order by priority desc,start_time,task_no asc
+ </select>
</mapper>
diff --git a/zy-asrs-wcs/src/main/resources/mapper/core/TaskSerialNoMapper.xml b/zy-asrs-wcs/src/main/resources/mapper/core/TaskSerialNoMapper.xml
new file mode 100644
index 0000000..78280c4
--- /dev/null
+++ b/zy-asrs-wcs/src/main/resources/mapper/core/TaskSerialNoMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zy.asrs.wcs.core.mapper.TaskSerialNoMapper">
+
+</mapper>
--
Gitblit v1.9.1