check_fcode($code); if($result['code'] != 1){ return json(json_error_exception('1009')); } json_success($result['data']); } /** * 自提柜向服务器上报用户取走商品。 */ public function record_fetch(){ $trunk = input('param.trunk'); $cabinet = input('param.cabinet'); $state = input('param.state'); $result = $this->change_status($cabinet , $trunk , $state); if($result['code'] != 1){ json_error(1006); } json_success(''); } /** * 自提柜批量生产 */ public function AddCabinet(){ $param = input('param.'); $url = urldecode($param['url']); $alias = $param['alias']; $count = intval($param['count']); if($count < 0 || empty($url)) { return json(json_error_exception('1006','参数不正确')); } $CabinetModel = new CabinetModel(); $flag = $CabinetModel->insertCabinet($url,$alias,$count); if($flag['code'] != 1){ return json(json_error_exception('1006',$flag['msg'])); } json_success([]); } public function OpenBox() { $params['id'] = $this->getid(); $params['cabinet_code'] = input('param.cabinet_number'); $box_number = input('param.box_number'); $box_position_list[] = $box_number; $params['box_position_list'] = $box_position_list; $params['delay_time'] = 0; $cabinet = $this->get_cabinet($params['cabinet_code']); if($cabinet == false){ return json(json_error_exception('1008')); } $params['ret_queue'] = 'RET' . session_id(); $params['req_url'] = $cabinet['req_url']; $params['key'] = $cabinet['login_key']; $params['method'] = 'OpenBoxR'; $result = $this->proc_request(self::queue_name,'OpenBox',$params); if($result == false) { json_error(2000); } else { json_success($result); } } public function LockCabinet() { $params['id'] = $this->getid(); $params['cabinet_code'] = input('param.cabinet_number'); $cabinet = $this->get_cabinet($params['cabinet_code']); $params['delay_time'] = 0; if($cabinet == false){ return json(json_error_exception('1008')); } $params['ret_queue'] = 'RET' . session_id(); $params['req_url'] = $cabinet['req_url']; $params['key'] = $cabinet['login_key']; $params['method'] = 'LockCabinetR'; $result = $this->proc_request(self::queue_name,'LockCabinet',$params); if($result == false) { json_error(2000); } else { json_success($result); } } public function UnLockCabinet() { $params['id'] = $this->getid(); $params['cabinet_code'] = input('param.cabinet_number'); $cabinet = $this->get_cabinet($params['cabinet_code']); $params['delay_time'] = 0; if($cabinet == false){ return json(json_error_exception('1008')); } $params['ret_queue'] = 'RET' . session_id(); $params['req_url'] = $cabinet['req_url']; $params['key'] = $cabinet['login_key']; $params['method'] = 'UnLockCabinetR'; $result = $this->proc_request(self::queue_name,'UnLockCabinet',$params); if($result == false) { json_error(2000); } else { json_success($result); } } public function ReleaseAlarm() { $params['id'] = $this->getid(); $params['cabinet_code'] = input('param.cabinet_number'); $params['delay_time'] = 0; $cabinet = $this->get_cabinet($params['cabinet_code']); if($cabinet == false){ return json(json_error_exception('1008')); } $params['ret_queue'] = 'RET' . session_id(); $params['req_url'] = $cabinet['req_url']; $params['key'] = $cabinet['login_key']; $params['method'] = 'ReleaseAlarmR'; $result = $this->proc_request(self::queue_name,'ReleaseAlarm',$params); if($result == false) { json_error(2000); } else { json_success($result); } } public function Reboot() { $params['id'] = $this->getid(); $params['cabinet_code'] = input('param.cabinet_number'); $params['delay_time'] = 0; $cabinet = $this->get_cabinet($params['cabinet_code']); if($cabinet == false){ return json(json_error_exception('1008')); } $params['ret_queue'] = 'RET' . session_id(); $params['req_url'] = $cabinet['req_url']; $params['key'] = $cabinet['login_key']; $params['method'] = 'RebootR'; $result = $this->proc_request(self::queue_name,'Reboot',$params); if($result == false) { json_error(2000); } else { json_success($result); } } public function QueryState() { $params['id'] = $this->getid(); $params['cabinet_code'] = input('param.cabinet_number'); $params['delay_time'] = 0; $cabinet = $this->get_cabinet($params['cabinet_code']); if($cabinet == false){ return json(json_error_exception('1008')); } $params['ret_queue'] = 'RET' . session_id(); $params['req_url'] = $cabinet['req_url']; $params['key'] = $cabinet['login_key']; $params['method'] = 'RebootR'; $result = $this->proc_request(self::queue_name,'QueryState',$params); if($result == false) { json_error(2000); } else { json_success($result); } } public function CabinetList(){ $param = input('param.'); $CabinetModel = new CabinetModel(); $selectResult = $CabinetModel->getCabinetsByWhere(); $cabinet_status = ['1' => '运行中' , '2' => '已锁定']; // 拼装参数 foreach($selectResult as $key=>$vo){ $selectResult[$key]['cabinet_status'] = $cabinet_status[$vo['cabinet_status']]; } $return['total'] = $CabinetModel->getAllCabinets(); //总数量 $return['rows'] = $selectResult; json_success($return); } public function BoxList(){ $cabinet_number = input('cabinet_number'); if(empty($cabinet_number)){ json_error(1007 , '柜子号码不能为空'); } $BoxModel = new BoxModel(); $where['cabinet_number'] = $cabinet_number; $selectResult = $BoxModel->getBoxsByWhere($where); $box_status = ['1' => '空闲' , '2' => '已使用' , '3' => '锁定中']; // 拼装参数 foreach($selectResult as $key=>$vo){ $selectResult[$key]['box_status'] = $box_status[$vo['box_status']]; } $return['total'] = $BoxModel->getAllCounts(); //总数量 $return['rows'] = $selectResult; json_success($return); } public function BoxActionList(){ $param = input('param.'); if(empty($param['cabinet_number']) || empty($param['box_number'])){ json_error(1007 , '柜子号码或箱子号码不能为空'); } $where['cabinet_number'] = $param['cabinet_number']; $where['box_number'] = $param['box_number']; $limit = isset($param['pageSize']) ? $param['pageSize'] : 10; $param['pageNumber'] = isset($param['pageNumber']) ? $param['pageNumber'] : 1; $offset = ($param['pageNumber'] - 1) * $limit; $BoxActionModel = new BoxActionModel(); $selectResult = $BoxActionModel->getBoxActionsByWhere($where , $offset, $limit); $status = ['1' => '开箱' , '2' => '关箱']; // 拼装参数 foreach($selectResult as $key=>$vo){ $selectResult[$key]['type'] = $status[$vo['type']]; } $return['total'] = $BoxActionModel->getAllCounts($where); //总数量 $return['rows'] = $selectResult; json_success($return); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// private function proc_request($queue_name, $key, $params){ QueueClient::push($queue_name,self::redis_host , self::redis_port ,$key,$params); [$method,$args] = $this->wait_result($params['ret_queue']); Log::record($args); return $args; } private function getid(){ return md5(rand(1000000,9999999)); } private function wait_result($queue_name) { $times = 10; while ($times--) { try { $worker = new QueueServer($queue_name,self::redis_host , self::redis_port); $queues = $worker->scan(); $content = $worker->pop($queues, 1); if(is_array($content)) { $method = key($content); $arg = current($content); return [$method,$arg]; } } catch (Exception $e) { $err = $e->getMessage(); $code = $e->getCode(); } } return [false,false]; } /** * 自提柜箱子修改状态 */ private function change_status($cabinet_number , $box_number , $status){ $BoxModel = new BoxModel(); $box = $BoxModel->getOneCabinetBox($cabinet_number,$box_number); if(empty($cabinet)){ json_error(1008); } if($status == $cabinet['status']){ return msg(1, '', 'success'); } $where['cabinet_number'] = $cabinet_number; $where['box_number'] = $box_number; $update['box_status'] = $status; return $BoxModel->editData($where,$update); } public function test(){ pre(1); } /** * 自提柜箱子绑定订单号 */ private function box_bind_order($cabinet_number , $box_number , $order_sn){ $where['cabinet_number'] = $cabinet_number; $where['box_number'] = $box_number; $update['order_sn'] = $order_sn; $update['box_status'] = 2; $BoxModel = new BoxModel(); return $BoxModel->editData($where,$update); } /** * 记录箱子开启/关闭 */ private function box_action_record($cabinet_number , $box_number , $type){ $BoxActionModel = new BoxActionModel(); $params['cabinet_number'] = $cabinet_number; $params['box_number'] = $box_number; $params['type'] = $type; $params['datetime'] = date("Y-m-d H:i:s"); $BoxActionModel->save($params); } /** * 获取柜子信息 */ private function get_cabinet($cabinet_number){ $cabinet = CabinetModel::find($cabinet_number); if(empty($cabinet)){ return false; } $cabinet = $cabinet->toArray(); return $cabinet; } }