コード例 #1
0
ファイル: ExtentionService.cs プロジェクト: hibaza/Ai.Api
        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); }
        }
コード例 #2
0
        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("[]");
        }