| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 | package monitorimport (	"log"	"simanc-wcs/infra/device/shuttle"	"simanc-wcs/mod/transportorder"	"simanc-wcs/mod/warehouse")func shuttleMonitor(w *warehouse.Warehouse) {	sMap := w.ShuttleMap	for sn, st := range sMap {		driver := shuttle.Device(st.Brand)		device, err := driver.Fetch(st.Address)		if err != nil {			log.Printf("获取四向车设备信息异常,sn: %s, err: %v", sn, err)			continue		}		if device == nil {			//TODO 修改四向车状态,失联了!!!			log.Printf("未获取到四向车设备信息sn: %s", sn)			continue		}		//更新四向车状态		st.Sync4Device(device)		//更新任务状态		order := transportorder.OrderByOrderNo(st.OrderNo)		if order == nil {			continue		}		task := order.ProcessingTask(st.SN, transportorder.Shuttle)		if task != nil {			//如果是载货任务,需要更新货位载货状态			if task.IsLoad() {				//如果四向车已载货,说明是已从货位上取货,此时货位无货				if device.IsLoad() {					w.UnLoad(task.SourceAddr)				}				//如果四向车无货,并且四向车在任务目标位置,说明四向车已放货,此时货位有货				if !device.IsLoad() && device.Addr == task.DistAddr {					w.Load(task.DistAddr, task.PalletNo)				}			}			switch st.Status {			case warehouse.Ready:				if task.DistAddr == st.Addr {					task.Finish()					if !order.HasUnFinishTask(st.SN) { //如果设备的所有任务都已执行完成,则释放设备						st.UnAssignOrder()					}				}			}		}	}}
 |