using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Configuration; using RestSharp; using System.Net; using Newtonsoft.Json.Linq; using Common; using Newtonsoft.Json; namespace CommonEntity { public class User { public string username { get; set; } public string password { get; set; } public int oauth_id { get; set; } } public class FCS_ReturnInfo { public int success { get; set; } public FCS_ReturnData data { get; set; } } // {"success": 1, "data": true, "rmsg": {"code": "s_job_orders", "param": ["JO-0001970-01"]}} public class FCS_JobResponse { public int success { get; set; } public bool data { get; set; } //"rmsg": //[ //{ // "code": "s_user_not_found", // "param": [] //} //] public List rmsg { get; set; } } public class FCSJobResponseData { public string code { get; set; } public List param { get; set; } } public class FCS_ReturnData { public bool is_authenticated { get; set; } public string access_token { get; set; } public string refresh_token { get; set; } public bool show_password_expire { get; set; } public string password_expired_date { get; set; } public bool password_expired { get; set; } public bool valid_license_access { get; set; } public bool require_reset { get; set; } public string property_config { get; set; } public string show_pp { get; set; } public int oauth_id { get; set; } public bool is_ip_valid { get; set; } public bool is_support_aliyun { get; set; } } public class FCS_JobRequest { public List location_uuid { get; set; } public List service_items { get; set; } public string remark { get; set; } public string assigned_to { get; set; } public int user_type { get; set; } public bool get_details { get; set; } } public class FCS_service_items { public string item_uuid { get; set; } public int quantity { get; set; } } public struct FCS_OrderData { public string LocationUUID { get; set; } public string ItemUUID { get; set; } public string PropertyID { get; set; } public string ItemType { get; set; } public string OrderUUID { get; set; } public string OrderNo { get; set; } public string HotelCode { get; set; } public string RoomNUMBER { get; set; } public string HostNUMBER { get; set; } } public class FCS_Response { public int success { get; set; } public List data { get; set; } public RMSG rmsg { get; set; } } public class FCS_R_DataItem { public string job_no { get; set; } public string job_status_colour { get; set; } public string job_uuid { get; set; } } public class RMSG { public string code { get; set; } public List param { get; set; } } /// /// 查询 类 /// public class QueryFCSOrder { public string filter { get; set; } public OrderQueryItem column_filter { get; set; } } public class OrderQueryItem { public string field { get; set; } public List value { get; set; } } public class QueryOrderResponse { public string success { get; set; } public List> data { get; set; } public object[] rmsg { get; set; } } public class RR { private static log4net.ILog logger = log4net.LogManager.GetLogger(typeof(RR)); private static void SSLXieYi() { //ssl 协议不兼容 var A = (SecurityProtocolType)48; var B = (SecurityProtocolType)192; var C = (SecurityProtocolType)768; var D = (SecurityProtocolType)3072; var E = (SecurityProtocolType)12288; ServicePointManager.SecurityProtocol = A | B | C | D | E; } public static void Login(string FCSLoginUrl, string FCSLoginUserName, string FCSLoginPassWord, string HotelCode, string RoomNum) { try { SSLXieYi(); var client1 = new RestClient(FCSLoginUrl); var request1 = new RestRequest("/api/security/authenticate", Method.POST); Dictionary dic = new Dictionary(); User us = new User(); us.username = FCSLoginUserName; us.password = FCSLoginPassWord; us.oauth_id = 1; request1.AddJsonBody(us); Interface3Log w1 = new Interface3Log(); w1.HotelCode = HotelCode; w1.RoomNumber = RoomNum; w1.TriggerTime = DateTime.Now; w1.ActionData = new HttpActionData() { RequestData = Newtonsoft.Json.JsonConvert.SerializeObject(dic) }; w1.CommandType = ChangLiangValue.CommandType_FCS; var q1 = Newtonsoft.Json.JsonConvert.SerializeObject(w1); CSRedisCacheHelper.Publish(CacheKey.InvokeHttpInterface, q1); var QQQ = client1.Execute(request1); HttpStatusCode HHH = QQQ.StatusCode; if (HHH == HttpStatusCode.Created || HHH == HttpStatusCode.OK) { string ddd = QQQ.Content; Interface3Log w2 = new Interface3Log(); w2.HotelCode = HotelCode; w2.RoomNumber = RoomNum; w2.TriggerTime = DateTime.Now; w2.ActionData = new HttpActionData() { ResponseData = ddd }; w2.CommandType = ChangLiangValue.CommandType_FCS; var q2 = Newtonsoft.Json.JsonConvert.SerializeObject(w2); CSRedisCacheHelper.Publish(CacheKey.InvokeHttpInterface, q2); var FFFA = Newtonsoft.Json.JsonConvert.DeserializeObject(ddd); string TokenKey = CacheKey.FCSToken; CSRedisCacheHelper.Set_Partition(TokenKey, FFFA, 1); } } catch (Exception ex) { logger.Error("FCS Login Error" + ex.Message); logger.Error(ex.StackTrace); } //client1.ExecuteAsync(request1, (response) => //{ // Console.WriteLine(response.Content); //}); } public static void JobRequest(string AccessToken, string location_uuid, string item_uuid, string FCSLoginUrl, string UserName, string PassWord, string PropertyID, string code, string roomno, string remarkdata, string itemclass) { if (string.IsNullOrEmpty(item_uuid)) { return; } SSLXieYi(); var client1 = new RestClient(FCSLoginUrl); var request1 = new RestRequest("/api-secure/job/request", Method.POST); FCS_JobRequest fff = new FCS_JobRequest(); fff.location_uuid = new List() { location_uuid }; fff.service_items = new List() { new FCS_service_items() { item_uuid=item_uuid, quantity=1 } }; fff.remark = remarkdata; fff.assigned_to = "auto"; fff.user_type = 1; fff.get_details = true; string WER = Newtonsoft.Json.JsonConvert.SerializeObject(fff); logger.Error("push data is " + WER); logger.Error("push token is " + AccessToken); request1.AddHeader("token", AccessToken); //下面这个是个定值 request1.AddHeader("property", PropertyID); request1.AddParameter("payload", WER); Interface3Log w1 = new Interface3Log(); w1.HotelCode = code; w1.RoomNumber = roomno; w1.TriggerTime = DateTime.Now; w1.ActionData = new HttpActionData() { RequestData = Newtonsoft.Json.JsonConvert.SerializeObject(WER) }; w1.CommandType = ChangLiangValue.CommandType_FCS; var q1 = Newtonsoft.Json.JsonConvert.SerializeObject(w1); CSRedisCacheHelper.Publish(CacheKey.InvokeHttpInterface, q1); client1.ExecuteAsync(request1, (QQQ) => { HttpStatusCode HHH = QQQ.StatusCode; string FHS = QQQ.Content; Interface3Log w2 = new Interface3Log(); w2.HotelCode = code; w2.RoomNumber = roomno; w2.TriggerTime = DateTime.Now; w2.ActionData = new HttpActionData() { ResponseData = FHS }; w2.CommandType = ChangLiangValue.CommandType_FCS; var q2 = Newtonsoft.Json.JsonConvert.SerializeObject(w2); CSRedisCacheHelper.Publish(CacheKey.InvokeHttpInterface, q2); //{ // "success": 1, // "data": [ // { // "job_no": "JO-0004548-01", // "job_status_colour": "#FA8C16", // "job_uuid": "b1dcb088-6dbc-4ca5-a1c4-0a8b951113fd" // } // ], // "rmsg": { // "code": "s_job_orders", // "param": [ // "JO-0004548-01" // ] // } //} logger.Error("PushData 返回值为:" + FHS); logger.Error("PushData Status:" + HHH.ToString()); if (string.IsNullOrEmpty(FHS)) { return; } JObject jsonObject = JObject.Parse(FHS); var error = jsonObject.SelectToken("error"); //如果有错 if (error != null) { Login(FCSLoginUrl, UserName, PassWord, code, roomno); } else { if (itemclass.Equals("Clean")) { logger.Error("写入订单"+FHS); //FCS_Response var FFF = JsonConvert.DeserializeObject(FHS); var JJJ = FFF.data.FirstOrDefault(); if (JJJ != null) { string orderuuid = JJJ.job_uuid; FCS_OrderData f = new FCS_OrderData(); f.OrderUUID = orderuuid; f.PropertyID = PropertyID; f.ItemType = "Clean"; f.OrderNo = JJJ.job_no; f.ItemUUID = item_uuid; f.LocationUUID = location_uuid; f.HotelCode = code; f.RoomNUMBER = roomno; string fsa = Newtonsoft.Json.JsonConvert.SerializeObject(f); //这个是 供轮循的时候调用使用 CSRedisCacheHelper.HMSet(3, 60 * 24, CacheKey.FCSOrder, Guid.NewGuid().ToString("N"), fsa); //这个是供 取消订单的时候使用的 //这个只 支持 取消 清理 logger.Error("记录入循环:"+orderuuid); CSRedisCacheHelper.Set_PartitionWithTime(CacheKey.FCSRoom_Mapping_Order + "_" + location_uuid, orderuuid, 24 * 60, 3); } } } if (HHH == HttpStatusCode.OK) { } }); } /// /// FCS数据推送 /// /// public static void FCS_PushData(string Item_UUID, string location_UUID, string PropertyUUID, string LoginUrl, string UserName, string PassWord, string code, string roomno, string remarkdata = "", string HOSTNUMBER = "") { try { if (string.IsNullOrEmpty(Item_UUID)) { return; } //logger.Error("FCS push data"); if (!string.IsNullOrEmpty(location_UUID)) { string Key = CacheKey.FCSToken; var TokenTakeOut = CSRedisCacheHelper.Get_Partition(Key, 1); if (TokenTakeOut == null) { logger.Error("FCS login"); RR.Login(LoginUrl, UserName, PassWord, code, roomno); } else { logger.Error("FCS push action data"); string ItemClass = ""; if (!string.IsNullOrEmpty(HOSTNUMBER)) { ItemClass = "Clean"; } logger.Error("FCS push action itemclass:" + ItemClass); RR.JobRequest(TokenTakeOut.data.access_token, location_UUID, Item_UUID, LoginUrl, UserName, PassWord, PropertyUUID, code, roomno, remarkdata, ItemClass); if (!string.IsNullOrEmpty(HOSTNUMBER)) { string CleanTrigger = CacheKey.CleanFCS_TriggerCount + "_" + HOSTNUMBER; CSRedisCacheHelper.Set_PartitionWithTime(CleanTrigger, 1, 1); } } } } catch (Exception ex) { logger.Error("FCS PushData Error: " + ex.Message); } } /// /// 取消Job /// /// /// /// /// /// /// /// /// /// /// /// public static void JobCancelRequest(string AccessToken, string FCSLoginUrl, string PropertyID, string HotelCode, string RoomNo, string OrderId) { if (string.IsNullOrEmpty(OrderId)) { return; } SSLXieYi(); string RUrl = string.Format("/api-secure/job/order/{0}/cancelled", OrderId); var client1 = new RestClient(FCSLoginUrl); var request1 = new RestRequest(RUrl, Method.POST); logger.Error("push data is " + OrderId); logger.Error("push token is " + AccessToken); request1.AddHeader("token", AccessToken); //下面这个是个定值 request1.AddHeader("property", PropertyID); Interface3Log w1 = new Interface3Log(); w1.HotelCode = HotelCode; w1.RoomNumber = RoomNo; w1.TriggerTime = DateTime.Now; w1.ActionData = new HttpActionData() { RequestData = OrderId }; w1.CommandType = ChangLiangValue.CommandType_FCS; var q1 = Newtonsoft.Json.JsonConvert.SerializeObject(w1); CSRedisCacheHelper.Publish(CacheKey.InvokeHttpInterface, q1); client1.ExecuteAsync(request1, (QQQ) => { HttpStatusCode HHH = QQQ.StatusCode; string FHS = QQQ.Content; logger.Error("cancel PushData not data is" + FHS); Interface3Log w2 = new Interface3Log(); w2.HotelCode = HotelCode; w2.RoomNumber = RoomNo; w2.TriggerTime = DateTime.Now; w2.ActionData = new HttpActionData() { ResponseData = FHS }; w2.CommandType = ChangLiangValue.CommandType_FCS; var q2 = Newtonsoft.Json.JsonConvert.SerializeObject(w2); CSRedisCacheHelper.Publish(CacheKey.InvokeHttpInterface, q2); }); } public static void FCS_CancelOrderJob(string location_UUID, string PropertyUUID, string LoginUrl, string UserName, string PassWord, string code, string roomno, string OrderUUID = "") { try { if (string.IsNullOrEmpty(OrderUUID)) { return; } if (!string.IsNullOrEmpty(location_UUID)) { string Key = CacheKey.FCSToken; var TokenTakeOut = CSRedisCacheHelper.Get_Partition(Key, 1); if (TokenTakeOut == null) { logger.Error("FCS login"); RR.Login(LoginUrl, UserName, PassWord, code, roomno); } else { logger.Error("FCS cancel push action data"); RR.JobCancelRequest(TokenTakeOut.data.access_token, LoginUrl, PropertyUUID, code, roomno, OrderUUID); } } } catch (Exception ex) { logger.Error("FCS PushData Error: " + ex.Message); } } } }