public async Task <List <BsonDocument> > addFunctionAsync(List <BsonDocument> lstBson) { try { //var t = Task<List<BsonDocument>>.Factory.StartNew(() => //{ foreach (var bson in lstBson) { var messager = bson["messager"].ToString(); var sum = ""; if (messager != "" && messager.IndexOf("[[") > 0) { var sp = messager.Split(new string[] { "[[", "]]" }, StringSplitOptions.None); var para = ""; var func = ""; for (var i = 0; i < sp.Length; i++) { if (i % 2 != 0) { var strs = sp[i].Split(','); for (var j = 0; j < strs.Length; j++) { if (j >= 1) { para += "'" + strs[j] + "',"; } else { func = strs[j]; } } var cmd = func + "(" + para.Substring(0, para.Length - 1) + ")"; var sessionResult = await _proceduceAiService.Proceduce(cmd);//.RunCommandAsync<BsonDocument>(cmd).Result; var entities = sessionResult["retval"]; if (entities.ToString().Length > 5) { sum += entities["message"]; } } else { sum += sp[i]; } } } bson["messager"] = sum == "" ? messager : sum; } return(lstBson); //}); //return await t; } catch (Exception ex) { return(lstBson); } }
public async Task <string> GetDataFromMongoHaveWit(string strShort, string witEntities, string entitiesString, Dictionary <string, string> dicWit, string session_customer, string receive_type, int using_full_search, string channel_id, string auto_agents, int page_next_bot, string business_id) { List <BsonDocument> results = new List <BsonDocument>(); var witDes = JsonConvert.DeserializeObject(witEntities); // var cmd1 = new JsonCommand<BsonDocument>("{ eval: \"jsParentSession({'x': '2','y': '4'})\"}"); var cmd = "\"jsParentSession('" + session_customer + "'," + witDes.ToString().Replace("\"", "'") + ",'" + strShort + "',[" + entitiesString.Substring(0, entitiesString.Length - 1) + "]," + using_full_search + ",'" + (!string.IsNullOrWhiteSpace(auto_agents) ? "" : auto_agents.ToLower()) + "')\""; var sessionResult = await _proceduceAiService.Proceduce(cmd); // sau khi có dữ liệu sẽ gọi tiếp sang database mongodb để lấy thông tin shop if (sessionResult != null && sessionResult["retval"] != null && sessionResult["retval"].ToString().Length > 5) { var entities = sessionResult["retval"][0]; if (entities.ToString().Length > 0) { var parentSs = sessionResult["retval"][1] != null && sessionResult["retval"][1].ToString().Length > 10 ? (BsonDocument)sessionResult["retval"][1] : null; var quetionIntent = sessionResult["retval"][2] != null && sessionResult["retval"][2].ToString().Length > 10 ? (BsonDocument)sessionResult["retval"][2] : null; var customerInfo = sessionResult["retval"][3] != null && sessionResult["retval"][3].ToString().Length > 10 ? (BsonDocument)sessionResult["retval"][3] : null; #region tìm bên mongodb để lấy thông tin var query = await _witService.formatCommandAsync(entities.ToString()); if (query.Length > 10 && query.IndexOf("parentproduct.value") >= 0) { if (query.Length > 10) { var data = await _productsRepository.GetParameterDynamic(query); var rs = await _extentionService.ConvertMongoToBsonAsync(data, parentSs, quetionIntent, customerInfo); results.AddRange(rs); // them luu khach hang dang quan tam san pham nao await _productCaresService.Upsert(dicWit, session_customer, business_id, channel_id); #endregion } // tìm thêm intent chung chung như địa chỉ công ty... bảo hành query = await _witService.formatCommandAsync(witEntities.ToString()); if (query.Length > 10) { var generalData = await _productGeneralRepository.GetParameterDynamic(query); var rs1 = await _extentionService.ConvertMongoToBsonAsync(generalData, parentSs, quetionIntent, customerInfo); results.AddRange(rs1); } // sử lý những trường hợp đặc biệt , lấy giá trị qua funfion results = await _extentionService.addFunctionAsync(results); if (results.Count > 0) { var d = results.ToJson(); //CacheBase.AddItem(key, d, DateTime.Now.AddMinutes(10), session_customer); return(d); } } else { if (using_full_search > 0) { // full text search. nếu wit không có giá trị query = ""; query = await _witService.formatCommandAsync(witEntities.ToString()); var search = ""; if (query.Length > 10) { search = query.Substring(0, query.Length - 3) + ",{$text: {$search: \"" + strShort + "\"}}]}"; } else { search = "{$text: {$search: \"" + strShort + "\"}}"; } var productData = await _productsRepository.GetFullTextSearch(search, page_next_bot); var rs = await _extentionService.ConvertMongoToBsonAsync(productData, null, null, null); results.AddRange(rs); results = await _extentionService.addFunctionAsync(results); if (results.Count > 0) { var d = results.ToJson(); return(d); } } } } } return("[]"); }