using BBWY.Common.Http; using BBWY.Common.Models; using BBWY.Server.Model; using BBWY.Server.Model.Db; using BBWY.Server.Model.Db.Mds; using BBWY.Server.Model.Dto; using Microsoft.Extensions.Options; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using Yitter.IdGenerator; namespace BBWY.Server.Business { public class VenderBusiness : BasePlatformRelayBusiness, IDenpendency { private FreeSqlMultiDBManager freeSqlMultiDBManager; private IIdGenerator idGenerator; public VenderBusiness(FreeSqlMultiDBManager freeSqlMultiDBManager, RestApiService restApiService, IOptions options, IIdGenerator idGenerator,YunDingBusiness yunDingBusiness) : base(restApiService, options, yunDingBusiness) { this.freeSqlMultiDBManager = freeSqlMultiDBManager; this.idGenerator = idGenerator; } public VenderResponse GetVenderInfo(PlatformRequest platformRequest) { var relayAPIHost = GetPlatformRelayAPIHost(platformRequest.Platform); var sendResult = restApiService.SendRequest(relayAPIHost, "api/PlatformSDK/GetVenderInfo", platformRequest, GetYunDingRequestHeader(), HttpMethod.Post); if (sendResult.StatusCode != System.Net.HttpStatusCode.OK) throw new BusinessException(sendResult.Content) { Code = (int)sendResult.StatusCode }; var response = JsonConvert.DeserializeObject>(sendResult.Content); if (!response.Success) throw new BusinessException(response.Msg) { Code = response.Code }; return response.Data; } public IList GetLogisticsList(PlatformRequest platformRequest) { var relayAPIHost = GetPlatformRelayAPIHost(platformRequest.Platform); var sendResult = restApiService.SendRequest(relayAPIHost, "api/PlatformSDK/GetLogisticsList", platformRequest, GetYunDingRequestHeader(), System.Net.Http.HttpMethod.Post); if (sendResult.StatusCode != System.Net.HttpStatusCode.OK) throw new BusinessException(sendResult.Content) { Code = (int)sendResult.StatusCode }; var response = JsonConvert.DeserializeObject>>(sendResult.Content); if (!response.Success) throw new BusinessException(response.Msg) { Code = response.Code }; return response.Data; } public string AcceptJDShopToken(JDShopToken jDShopToken) { var venderResponse = GetVenderInfo(new PlatformRequest() { AppKey = "120EA9EC65AB017567D78CC1139EEEA5", AppSecret = "8a42bc2301e8439b896e99f5475e0a9b", AppToken = jDShopToken.AccessToken, Platform = Enums.Platform.京东 }); _ = restApiService.SendRequest(globalConfig.MdsApi, "/TaskList/Shop/UpdateShop", new { venderResponse.ShopName, venderResponse.ShopId, ShopType = venderResponse.ColType, AppToken = jDShopToken.AccessToken, venderResponse.VenderId }, new Dictionary() { { "qy", "qy" } }, HttpMethod.Post); return JsonConvert.SerializeObject(jDShopToken); } public long SaveShopSetting(ShopSettingRequest shopSettingRequest) { //根据shopId查询mds shop的主键Id var shopId = shopSettingRequest.ShopId.ToString(); var mdsShop = freeSqlMultiDBManager.MDSfsql.Select().Where(s => s.ShopId == shopId).ToOne(); if (mdsShop == null) throw new BusinessException($"mds未找到shopId {shopSettingRequest.ShopId}"); if (shopSettingRequest.PurchaseAccountId == 0) { shopSettingRequest.PurchaseAccountId = idGenerator.NewLong(); var pa = new PurchaseAccount() { Id = shopSettingRequest.PurchaseAccountId, AccountName = shopSettingRequest.AccountName, AppKey = shopSettingRequest.AppKey, AppSecret = shopSettingRequest.AppSecret, AppToken = shopSettingRequest.AppToken, CreateTime = DateTime.Now, CreatorId = "", Deleted = 0, PurchasePlatformId = shopSettingRequest.PurchasePlatformId, ShopId = shopSettingRequest.ShopId }; var mdspa = new Purchaseaccount() { Id = shopSettingRequest.PurchaseAccountId.ToString(), AccountName = shopSettingRequest.AccountName, AppKey = shopSettingRequest.AppKey, AppSecret = shopSettingRequest.AppSecret, AppToken = shopSettingRequest.AppToken, CreateTime = DateTime.Now, CreatorId = "", Deleted = 0, PurchasePlatformId = ((int)shopSettingRequest.PurchasePlatformId).ToString(), ShopId = mdsShop.Id }; freeSqlMultiDBManager.BBWYfsql.Insert(pa).ExecuteAffrows(); freeSqlMultiDBManager.MDSfsql.Transaction(() => { freeSqlMultiDBManager.MDSfsql.Insert(mdspa).ExecuteAffrows(); //修改扣点和管理密码 freeSqlMultiDBManager.MDSfsql.Update(mdsShop.Id).Set(s => s.ManagePwd, shopSettingRequest.ManagerPwd) .Set(s => s.PlatformCommissionRatio, shopSettingRequest.PlatformCommissionRatio) .ExecuteAffrows(); }); } else { freeSqlMultiDBManager.BBWYfsql.Update(shopSettingRequest.PurchaseAccountId) .Set(pa => pa.AppKey, shopSettingRequest.AppKey) .Set(pa => pa.AppSecret, shopSettingRequest.AppSecret) .Set(pa => pa.AppToken, shopSettingRequest.AppToken) .Set(pa => pa.AccountName, shopSettingRequest.AccountName) .Set(pa => pa.PurchasePlatformId, shopSettingRequest.PurchasePlatformId) .ExecuteAffrows(); freeSqlMultiDBManager.MDSfsql.Transaction(() => { freeSqlMultiDBManager.MDSfsql.Update(shopSettingRequest.PurchaseAccountId.ToString()) .Set(pa => pa.AppKey, shopSettingRequest.AppKey) .Set(pa => pa.AppSecret, shopSettingRequest.AppSecret) .Set(pa => pa.AppToken, shopSettingRequest.AppToken) .Set(pa => pa.AccountName, shopSettingRequest.AccountName) .Set(pa => pa.PurchasePlatformId, ((int)shopSettingRequest.PurchasePlatformId).ToString()) .ExecuteAffrows(); //修改扣点和管理密码 freeSqlMultiDBManager.MDSfsql.Update(mdsShop.Id).Set(s => s.ManagePwd, shopSettingRequest.ManagerPwd) .Set(s => s.PlatformCommissionRatio, shopSettingRequest.PlatformCommissionRatio) .ExecuteAffrows(); }); } return shopSettingRequest.PurchaseAccountId; } public IList GetDeparmentList() { var relationGroups = freeSqlMultiDBManager.MDSfsql.Select() .InnerJoin((ud, sd, s) => ud.Id == sd.DepartmentId) .InnerJoin((ud, sd, s) => s.Id == sd.ShopId) .Where((ud, sd, s) => !string.IsNullOrEmpty(s.ShopId)) .ToList((ud, sd, s) => new { DepartmentId = ud.Id, ud.DepartmentName, ShopPKId = s.Id, s.ShopId, s.ShopName, s.ShopType, s.AppKey, s.AppSecret, s.AppToken, s.ManagePwd, s.PlatformCommissionRatio, s.PlatformId }).GroupBy(x => x.DepartmentId); if (relationGroups.Count() == 0) return null; var departmentList = new List(); var shopIdList = new List(); //主键Id集合 foreach (var relationGroup in relationGroups) { var department = new DepartmentResponse() { Id = relationGroup.Key, Name = relationGroup.FirstOrDefault().DepartmentName, ShopList = relationGroup.Select(x => new ShopResponse() { Id = x.ShopPKId, AppKey = string.IsNullOrEmpty(x.AppKey) ? "120EA9EC65AB017567D78CC1139EEEA5" : x.AppKey, AppSecret = string.IsNullOrEmpty(x.AppSecret) ? "8a42bc2301e8439b896e99f5475e0a9b" : x.AppSecret, AppToken = x.AppToken, ManagePwd = x.ManagePwd, PlatformId = (Enums.Platform)x.PlatformId, PlatformCommissionRatio = x.PlatformCommissionRatio, ShopId = x.ShopId, ShopName = x.ShopName, ShopType = x.ShopType }).ToList() }; departmentList.Add(department); shopIdList.AddRange(department.ShopList.Select(s => s.Id)); } shopIdList = shopIdList.Distinct().ToList(); var purchaseAccountList = freeSqlMultiDBManager.MDSfsql.Select().Where(pa => shopIdList.Contains(pa.ShopId)) .ToList(pa => new PurchaseAccountResponse() { AccountName = pa.AccountName, AppKey = pa.AppKey, AppSecret = pa.AppSecret, AppToken = pa.AppToken, Id = pa.Id, ShopId = pa.ShopId, PurchasePlatformId = (Enums.Platform)int.Parse(pa.PurchasePlatformId) }); foreach (var d in departmentList) { foreach (var s in d.ShopList) { s.PurchaseList = purchaseAccountList.Where(pa => pa.ShopId == s.Id).ToList(); } } return departmentList; } public IList GetShopList(long? shopId = null, Enums.Platform? platform = null) { return freeSqlMultiDBManager.MDSfsql.Select().Where(s => !string.IsNullOrEmpty(s.ShopId)) .WhereIf(shopId != null, s => s.ShopId == shopId.ToString()) .WhereIf(platform != null, s => s.PlatformId == (int)platform).ToList(); } public ShopResponse GetShopByShopId(string shopId) { return freeSqlMultiDBManager.MDSfsql.Select().Where(s => s.ShopId == shopId).ToOne(); } } }