| | |
| | | label="四向穿梭车所识别的二维码" |
| | | colProps={{ md: 12, xl: 12 }} |
| | | /> |
| | | <ProFormText |
| | | name="taskNo" |
| | | label="工作号" |
| | | colProps={{ md: 12, xl: 12 }} |
| | | /> |
| | | </ProForm.Group> |
| | | |
| | | </ProForm> |
| | |
| | | />, |
| | | }, |
| | | { |
| | | title: '工作号', |
| | | dataIndex: 'taskNo', |
| | | valueType: 'text', |
| | | hidden: false, |
| | | width: 140, |
| | | filterDropdown: (props) => <TextFilter |
| | | name='taskNo' |
| | | {...props} |
| | | actionRef={actionRef} |
| | | setSearchParam={setSearchParam} |
| | | />, |
| | | }, |
| | | { |
| | | title: '可入(checkBox)', |
| | | dataIndex: 'inEnable', |
| | | valueType: 'text', |
| | |
| | | const { curSprite, configForm: form } = props; |
| | | |
| | | const [showLiftNoItem, setShowLiftNoItem] = React.useState(false); |
| | | const [showConveyorNoItem, setShowConveyorNoItem] = React.useState(false); |
| | | |
| | | useEffect(() => { |
| | | form.resetFields(); |
| | |
| | | ...curSprite.data |
| | | }) |
| | | setShowLiftNoItem(form.getFieldValue('shelfType') === Utils.SHELF_TYPE.LIFT); |
| | | setShowConveyorNoItem(form.getFieldValue('shelfType') === Utils.SHELF_TYPE.CONVEYOR); |
| | | } |
| | | }, [props, form]); |
| | | |
| | |
| | | case 'shelfType': |
| | | const shelfType = form.getFieldValue('shelfType'); |
| | | setShowLiftNoItem(shelfType === Utils.SHELF_TYPE.LIFT); |
| | | setShowConveyorNoItem(shelfType === Utils.SHELF_TYPE.CONVEYOR); |
| | | break; |
| | | default: |
| | | break; |
| | |
| | | value: Utils.SHELF_TYPE.CHARGE |
| | | }, |
| | | { |
| | | label: intl.formatMessage({ id: 'map.settings.shelf.conveyor', defaultMessage: '输送线' }), |
| | | value: Utils.SHELF_TYPE.CONVEYOR |
| | | }, |
| | | { |
| | | label: intl.formatMessage({ id: 'map.settings.shelf.diable', defaultMessage: '禁用' }), |
| | | value: Utils.SHELF_TYPE.DISABLE |
| | | }, |
| | |
| | | </> |
| | | )} |
| | | |
| | | {showConveyorNoItem && ( |
| | | <> |
| | | <Form.Item |
| | | name='conveyorNo' |
| | | label={intl.formatMessage({ id: 'map.settings.conveyor.no', defaultMessage: '输送站号' })} |
| | | rules={[ |
| | | { |
| | | required: true, |
| | | }, |
| | | ]} |
| | | > |
| | | <InputNumber |
| | | style={{ |
| | | width: '50%', |
| | | }} |
| | | /> |
| | | </Form.Item> |
| | | </> |
| | | )} |
| | | |
| | | <Form.Item |
| | | label={intl.formatMessage({ id: 'map.settings.shelf.space', defaultMessage: '间距' })} |
| | | > |
| | |
| | | TRACK: 3, |
| | | LIFT: 67, |
| | | CHARGE: 5, |
| | | CONVEYOR: 4, |
| | | DISABLE: -1, |
| | | }) |
| | | |
| | |
| | | case SHELF_TYPE.CHARGE: |
| | | showColor = '#D4EFDF'; |
| | | break; |
| | | case SHELF_TYPE.CONVEYOR: |
| | | showColor = '#54FF9F'; |
| | | break; |
| | | case SHELF_TYPE.DISABLE: |
| | | showColor = '#ffc8c8'; |
| | | break; |
| | |
| | | } |
| | | |
| | | showLockPath(mapVo.lockPath, curFloor, setCurSPrite); |
| | | showConveyorSta(mapVo.conveyorSta, curFloor, setCurSPrite); |
| | | } |
| | | |
| | | export const drawTravelPath = (shuttleVo, curFloor) => { |
| | |
| | | pathLine.zIndex = SENSOR_ZINDEX.TRAVEL_PATH; |
| | | let firstNode = true; |
| | | |
| | | for(let i = 0; i < nodes.length; i++) { |
| | | for (let i = 0; i < nodes.length; i++) { |
| | | const node = nodes[i]; |
| | | if (node.z !== curFloor) { continue } |
| | | const shelf = querySprite(SENSOR_TYPE.SHELF, node.x + '-' + node.y); |
| | |
| | | } else { |
| | | pathLine.lineTo(x, y); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | mapContainer.addChild(pathLine); |
| | | } |
| | | |
| | | export const showConveyorSta = (conveyorSta, curFloor, setCurSPrite) => { |
| | | for (let i = 0; i < conveyorSta.length; i++) { |
| | | const sta = conveyorSta[i]; |
| | | if (!sta.locNo) { continue } |
| | | const { row, bay, lev } = parseLocNo(sta.locNo); |
| | | if (Number(lev) !== curFloor) { continue } |
| | | const sprite = querySprite(SENSOR_TYPE.SHELF, row + '-' + bay); |
| | | if (!sprite) { continue } |
| | | if (sprite.data.conveyorNo !== sta.siteNo) { continue } |
| | | |
| | | const conveyorName = 'conveyorSta-' + sprite.data.conveyorNo; |
| | | let conveyorChild = sprite.getChildByName(conveyorName); |
| | | if (conveyorChild) { |
| | | sprite.removeChild(conveyorChild); |
| | | } |
| | | |
| | | let textColor; |
| | | let staText; |
| | | let positionX = -11; |
| | | let positionY = -6; |
| | | if (sta.siteStatusType$ == 'site-auto-run') { |
| | | textColor = 0xfa51f6; |
| | | staText = sprite.data.conveyorNo; |
| | | } else if (sta.siteStatusType$ == 'site-unauto') { |
| | | textColor = 0xb8b8b8; |
| | | staText = sprite.data.conveyorNo; |
| | | } else if (sta.siteStatusType$ == 'site-auto-id') { |
| | | textColor = 0xc4c40; |
| | | staText = sprite.data.conveyorNo + '(' + sta.taskNo + ')'; |
| | | positionX = -20; |
| | | positionY = -6; |
| | | } else if (sta.siteStatusType$ == 'site-auto-run-id') { |
| | | textColor = 0xfc3030; |
| | | staText = sprite.data.conveyorNo + '(' + sta.taskNo + ')'; |
| | | positionX = -20; |
| | | positionY = -6; |
| | | }else { |
| | | textColor = '#54FF9F'; |
| | | staText = sprite.data.conveyorNo; |
| | | } |
| | | |
| | | const text = new PIXI.Text(staText, { |
| | | fill: 0x000000, |
| | | fontSize: 13, |
| | | fontFamily: 'MicrosoftYaHei', |
| | | }); |
| | | text.name = conveyorName; |
| | | text.position.set(positionX, positionY); |
| | | sprite.addChild(text); |
| | | sprite.textObj = text; |
| | | sprite.tint = textColor; |
| | | // sprite.tint = showColor; |
| | | // let position = shelf.position; |
| | | // let x = position.x; |
| | | // let y = position.y; |
| | | // conveyorChild.lineTo(x, y); |
| | | } |
| | | } |
| | |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Date; |
| | | |
| | | import com.zy.asrs.wcs.core.model.enums.SiteStatusType; |
| | | import com.zy.asrs.wcs.core.service.BasConveyorService; |
| | | import com.zy.asrs.wcs.rcs.model.enums.WorkModeType; |
| | | import com.zy.asrs.wcs.system.entity.Host; |
| | |
| | | return null; |
| | | } |
| | | |
| | | public String getSiteStatusType$() { |
| | | String siteStatus = String.valueOf(SiteStatusType.process(this)); |
| | | return siteStatus.toLowerCase().replaceAll("_", "-"); |
| | | } |
| | | |
| | | } |
| | |
| | | package com.zy.asrs.wcs.core.map.entity; |
| | | |
| | | import com.zy.asrs.wcs.core.entity.BasConveyorSta; |
| | | import com.zy.asrs.wcs.core.model.NavigateNode; |
| | | import lombok.Data; |
| | | |
| | |
| | | |
| | | private List<NavigateNode> lockPath = new ArrayList<>(); |
| | | |
| | | private List<BasConveyorSta> conveyorSta = new ArrayList<>(); |
| | | |
| | | } |
| | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.zy.asrs.framework.common.Cools; |
| | | import com.zy.asrs.wcs.core.entity.BasConveyorSta; |
| | | import com.zy.asrs.wcs.core.entity.BasShuttle; |
| | | import com.zy.asrs.wcs.core.map.entity.MapWsShuttleVo; |
| | | import com.zy.asrs.wcs.core.map.entity.MapWsVo; |
| | | import com.zy.asrs.wcs.core.model.NavigateNode; |
| | | import com.zy.asrs.wcs.core.model.enums.DeviceCtgType; |
| | | import com.zy.asrs.wcs.core.service.BasConveyorStaService; |
| | | import com.zy.asrs.wcs.core.service.BasShuttleService; |
| | | import com.zy.asrs.wcs.core.utils.NavigateMapUtils; |
| | | import com.zy.asrs.wcs.core.utils.Utils; |
| | |
| | | private DictService dictService; |
| | | @Autowired |
| | | private NavigateMapUtils navigateMapUtils; |
| | | @Autowired |
| | | private BasConveyorStaService basConveyorStaService; |
| | | |
| | | @Scheduled(cron = "0/1 * * * * ? ") |
| | | public void sync() { |
| | |
| | | // shuttle |
| | | wsVo.setShuttleVos(syncShuttle()); |
| | | wsVo.setLockPath(getMapLocPath()); |
| | | wsVo.setConveyorSta(getMapConveyorSta()); |
| | | MapWebSocket.broadcast(JSON.toJSONString(wsVo)); |
| | | } |
| | | |
| | |
| | | return navigateNodes; |
| | | } |
| | | |
| | | private List<BasConveyorSta> getMapConveyorSta() { |
| | | return basConveyorStaService.list(); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.zy.asrs.wcs.core.model.enums; |
| | | |
| | | import com.zy.asrs.wcs.core.entity.BasConveyorSta; |
| | | import com.zy.asrs.wcs.rcs.model.protocol.StaProtocol; |
| | | |
| | | /** |
| | | * 站点状态枚举 |
| | | */ |
| | | public enum SiteStatusType { |
| | | |
| | | // 自动 |
| | | SITE_AUTO, |
| | | // 非自动 |
| | | SITE_UNAUTO, |
| | | // 自动+有物+ID |
| | | SITE_AUTO_RUN_ID, |
| | | // 自动+有物 |
| | | SITE_AUTO_RUN, |
| | | // 自动+ID |
| | | SITE_AUTO_ID, |
| | | |
| | | ; |
| | | |
| | | public static SiteStatusType process(StaProtocol staProtocol){ |
| | | if (staProtocol == null) { |
| | | return null; |
| | | } |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0) { |
| | | return SITE_AUTO_RUN_ID; |
| | | } |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading()) { |
| | | return SITE_AUTO_RUN; |
| | | } |
| | | if (staProtocol.isAutoing() && staProtocol.getWorkNo() > 0) { |
| | | return SITE_AUTO_ID; |
| | | } |
| | | if (staProtocol.isAutoing()) { |
| | | return SITE_AUTO; |
| | | } |
| | | if (!staProtocol.isAutoing()) { |
| | | return SITE_UNAUTO; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public static SiteStatusType process(BasConveyorSta basConveyorSta){ |
| | | if (basConveyorSta == null) { |
| | | return SITE_UNAUTO; |
| | | } |
| | | if (basConveyorSta.getAutoing() == null || basConveyorSta.getLoading() == null || basConveyorSta.getTaskNo() == null) { |
| | | return SITE_UNAUTO; |
| | | } |
| | | if (basConveyorSta.getAutoing().equals("Y") && basConveyorSta.getLoading().equals("Y") && basConveyorSta.getTaskNo() > 0) { |
| | | return SITE_AUTO_RUN_ID; |
| | | } |
| | | if (basConveyorSta.getAutoing().equals("Y") && basConveyorSta.getLoading().equals("Y")) { |
| | | return SITE_AUTO_RUN; |
| | | } |
| | | if (basConveyorSta.getAutoing().equals("Y") && basConveyorSta.getTaskNo() > 0) { |
| | | return SITE_AUTO_ID; |
| | | } |
| | | if (basConveyorSta.getAutoing().equals("Y")) { |
| | | return SITE_AUTO; |
| | | } |
| | | if (!basConveyorSta.getAutoing().equals("Y")) { |
| | | return SITE_UNAUTO; |
| | | } |
| | | return SITE_UNAUTO; |
| | | } |
| | | |
| | | } |
| | |
| | | */ |
| | | public class NavigateSolution { |
| | | |
| | | // -1 -> 墙壁, 0 -> 货位, 1 -> 起点 2 -> 终点 3-> 母轨 4->站点 |
| | | // -1 -> 墙壁, 0 -> 货位, 1 -> 起点 2 -> 终点 3-> 母轨 4->输送站点 5->充电桩 66->小车 67->提升机 |
| | | |
| | | int[][] map = {{}}; |
| | | |