/// <summary> /// 保存spreadinfo /// </summary> /// <param name="spreadInfo"></param> /// <param name="isDeleteOld">是否删除同类型的旧数据</param> public void BuildSaveSpreadInfo(SpreadInfoDTO spreadInfo, bool isDeleteOld = false) { if (spreadInfo == null || spreadInfo.SpreadId == Guid.Empty || spreadInfo.SpreadCode == Guid.Empty) { return; } ContextSession contextSession = ContextFactory.CurrentThreadContext; if (isDeleteOld) { //插入SpreadInfo数据库表 var oldSpreadInfo = SpreadInfo.ObjectSet().FirstOrDefault(c => c.SpreadId == spreadInfo.SpreadId && c.IsDel == 0); if (oldSpreadInfo != null) { if ((oldSpreadInfo.SpreadId == spreadInfo.SpreadId) && (oldSpreadInfo.SpreadType == spreadInfo.SpreadType)) { oldSpreadInfo.EntityState = EntityState.Deleted; } } } SpreadInfo newSpreadInfo = SpreadInfo.CreateSpreadInfo(); newSpreadInfo.SpreadId = spreadInfo.SpreadId; newSpreadInfo.SpreadCode = spreadInfo.SpreadCode; newSpreadInfo.SpreadUrl = spreadInfo.SpreadUrl; newSpreadInfo.IsDel = spreadInfo.IsDel; newSpreadInfo.SpreadType = spreadInfo.SpreadType; newSpreadInfo.SpreadDesc = spreadInfo.SpreadDesc; newSpreadInfo.AppId = spreadInfo.AppId; contextSession.SaveObject(newSpreadInfo); UpdateRalationUserSpread(spreadInfo.SpreadId, spreadInfo.SpreadCode, spreadInfo.SpreadType); }
private SpreadInfo ProcessHQ(CustomMarketData m1, CustomMarketData m2) { SpreadInfo hqInfo = new SpreadInfo(); hqInfo.Time = m1.Time; hqInfo.LastIF1Price = (lastHQInfo == null) ? 0 : lastHQInfo.IF1Price; hqInfo.LastIF2Price = (lastHQInfo == null) ? 0 : lastHQInfo.IF2Price; hqInfo.IF1Price = (m1 == null) ? double.NaN : m1.NewPrice; hqInfo.IF2Price = (m2 == null) ? double.NaN : m2.NewPrice; if (m1 == null || m2 == null || m1.Buy.Length <= 0 || m1.Sell.Length <= 0 || m2.Buy.Length <= 0 || m2.Sell.Length <= 0) { hqInfo.IF1OpenPrice = hqInfo.IF1ClosePrice = hqInfo.IF2OpenPrice = hqInfo.IF2ClosePrice = double.NaN; hqInfo.CurrentSpread = hqInfo.CloseSpread = hqInfo.OpenSpread = double.NaN; UpdateLogInfo(string.Format("当前行情异常:无法获得{0}的买卖盘口", (m1 == null || m1.Buy.Length <= 0 || m1.Sell.Length <= 0) ? param.InIF1 : param.InIF2)); } else { hqInfo.IF1OpenPrice = m1.Sell[0]; hqInfo.IF1ClosePrice = m1.Buy[0]; hqInfo.IF2OpenPrice = m2.Buy[0]; hqInfo.IF2ClosePrice = m2.Sell[0]; hqInfo.MaxOpenVol = (int)Math.Min(m1.SellVol[0], m2.BuyVol[0]); hqInfo.MaxCloseVol = (int)Math.Min(m1.BuyVol[0], m2.SellVol[0]); hqInfo.LastSpread = (lastHQInfo == null) ? 0 : lastHQInfo.CurrentSpread; hqInfo.CurrentSpread = m1.NewPrice - m2.NewPrice; // 实时最新价差 hqInfo.OpenSpread = hqInfo.IF1OpenPrice - hqInfo.IF2OpenPrice; // 实时开仓价差 hqInfo.CloseSpread = hqInfo.IF1ClosePrice - hqInfo.IF2ClosePrice; // 实时平仓价差 } lastHQInfo = hqInfo; return(hqInfo); }
bool HQTest(SpreadInfo hqInfo) { // 行情信息不能缺失 if (double.IsNaN(hqInfo.CurrentSpread) || double.IsNaN(hqInfo.OpenSpread) || double.IsNaN(hqInfo.CloseSpread)) { errorMsg = "行情缺失:当前价差为NaN"; return(false); } // 判断是否异常行情 if (Math.Abs(hqInfo.LastIF1Price - hqInfo.IF1Price) >= inParam.InEPrice) { errorMsg = "IF1最新价变动异常,超过设定最新价变动" + inParam.InEPrice + ",last:" + hqInfo.LastIF1Price + ",current:" + hqInfo.IF1Price; return(false); } if (Math.Abs(hqInfo.LastIF2Price - hqInfo.IF2Price) >= inParam.InEPrice) { errorMsg = "IF2最新价变动异常,超过设定最新价变动" + inParam.InEPrice + ",last:" + hqInfo.LastIF2Price + ",current:" + hqInfo.IF2Price; return(false); } if (Math.Abs(hqInfo.LastSpread - hqInfo.CurrentSpread) >= inParam.InESpread) { errorMsg = "价差变动超过设定异常价差变动值" + inParam.InESpread + ",last:" + hqInfo.LastSpread + ",current:" + hqInfo.CurrentSpread; return(false); } return(true); }
/// <summary> /// 删除 /// </summary> /// <param name="id"></param> /// <returns></returns> public Jinher.AMP.BTP.Deploy.CustomDTO.ResultDTO DeleteExt(System.Guid id) { try { ResultDTO result = new ResultDTO { isSuccess = true, Message = "success" }; ContextSession contextSession = ContextFactory.CurrentThreadContext; var spreadCategory = SpreadCategory.ObjectSet().FirstOrDefault(c => c.Id == id); if (spreadCategory == null) { return(result); } var usedCount = SpreadInfo.ObjectSet().Count(c => c.IsDel == 1 && c.SpreadType == spreadCategory.SpreadType); if (usedCount > 0) { result.ResultCode = 2; result.isSuccess = false; result.Message = "该分类已被使用,无法删除"; } spreadCategory.EntityState = EntityState.Deleted; contextSession.SaveChanges(); return(result); } catch (Exception ex) { LogHelper.Error(string.Format("SpreadCategoryBP.DeleteExt 异常:dto:{0}", id), ex); return(new ResultDTO { ResultCode = -1, Message = "操作失败" }); } }
public void OnSpreadData(SpreadInfo spInfo) { // 判断是否到达交易条件 if (CanSpreadTrade(spInfo)) { ThreadPool.QueueUserWorkItem(new WaitCallback(StartSpreadTrade), spInfo); } }
/// <summary> /// 更新用户为推广主 /// </summary> /// <param name="spreaderDto">推广者dto</param> /// <returns></returns> public ResultDTO UpdateToSpreaderExt(SpreaderAndBuyerWxDTO spreaderDto) { ResultDTO result = new ResultDTO { Message = "Success" }; if (spreaderDto == null || spreaderDto.SpreaderId == Guid.Empty || spreaderDto.SpreadCode == Guid.Empty) { return(new ResultDTO { ResultCode = 1, Message = "id为空或推广码为空" }); } try { ContextSession contextSession = ContextFactory.CurrentThreadContext; //插入SpreadInfo数据库表 var oldSpreadInfo = SpreadInfo.ObjectSet().FirstOrDefault(c => c.SpreadId == spreaderDto.SpreaderId && c.SpreadCode == spreaderDto.SpreadCode && c.IsDel == 0); if (oldSpreadInfo == null) { SpreadInfo newSpreadInfo = SpreadInfo.CreateSpreadInfo(); newSpreadInfo.SpreadId = spreaderDto.SpreaderId; newSpreadInfo.SpreadCode = spreaderDto.SpreadCode; newSpreadInfo.IsDel = 0; newSpreadInfo.SpreadType = 0; contextSession.SaveObject(newSpreadInfo); contextSession.SaveChanges(); } var createUser = EBCSV.GetOrgCreateUser(spreaderDto.SpreaderId); var oldUserSpreader = UserSpreader.ObjectSet().FirstOrDefault(c => c.UserId == createUser); if (oldUserSpreader != null) { var createUsers = EBCSV.GetMyCreateAccountList(createUser); if (createUsers != null && createUsers.Contains(oldUserSpreader.SpreaderId)) { return(result); } oldUserSpreader.EntityState = EntityState.Deleted; } UserSpreader newUserSpreader = UserSpreader.CreateUserSpreader(); newUserSpreader.SpreaderId = spreaderDto.SpreaderId; newUserSpreader.UserId = createUser; newUserSpreader.SpreadCode = spreaderDto.SpreadCode; contextSession.SaveObject(newUserSpreader); contextSession.SaveChanges(); } catch (Exception ex) { LogHelper.Error(string.Format("UserSpreaderSV.UpdateToSpreaderExt异常:spreaderDto:{0}", JsonHelper.JsonSerializer(spreaderDto)), ex); return(result); } return(result); }
private void updateRalationUserSpread(ContextSession contextSession, SpreadInfo spreadInfo) { var createOrgUserId = EBCSV.GetOrgCreateUser(spreadInfo.SpreadId); var userSpreader = UserSpreader.ObjectSet().FirstOrDefault(c => c.UserId == createOrgUserId); if (userSpreader == null) { UserSpreader uSpreaderNew = UserSpreader.CreateUserSpreader(); uSpreaderNew.UserId = createOrgUserId; uSpreaderNew.SpreaderId = spreadInfo.SpreadId; uSpreaderNew.SpreadCode = spreadInfo.SpreadCode; uSpreaderNew.CreateOrderId = new Guid("00000000-0000-0000-0000-000000000000"); contextSession.SaveObject(uSpreaderNew); } }
public ResultDTO BindWeChatQrCodeExt(SpreadBindWeChatQrCodeDTO search) { if (search == null || search.Id == Guid.Empty || search.AppId == Guid.Empty) { return new ResultDTO { ResultCode = 1, Message = "参数为空" } } ; try { ContextSession contextSession = ContextFactory.CurrentThreadContext; var spreadInfo = SpreadInfo.ObjectSet().FirstOrDefault(c => c.IsDel != 1 && c.Id == search.Id); if (spreadInfo == null) { return new ResultDTO { ResultCode = 2, Message = "推广主不存在" } } ; var weChatQrCode = WeChatQRCode.ObjectSet().Where(c => c.AppId == search.AppId && c.IsDel != 1 && !c.IsUse && c.QRType.Value == search.QRType && c.QRNo == search.QRNo).FirstOrDefault(); if (weChatQrCode == null) { return new ResultDTO { ResultCode = 3, Message = "没有找到可使用的带参数二维码,请到“App后台-微信公众号”中生成二维码" } } ; weChatQrCode.SpreadInfoId = search.Id; weChatQrCode.IsUse = true; weChatQrCode.Name = getQrCodeName(spreadInfo); weChatQrCode.ModifiedOn = DateTime.Now; weChatQrCode.EntityState = EntityState.Modified; contextSession.SaveChanges(); return(new ResultDTO { isSuccess = true, Message = "success" }); } catch (Exception ex) { LogHelper.Error(string.Format("SpreadInfoBP.BindWeChatQrCodeExt异常,dto={0}", JsonHelper.JsonSerializer(search)), ex); return(new ResultDTO { ResultCode = 1, Message = "Error" }); } }
bool CanSpreadTrade(SpreadInfo spInfo) { // 判断当前自动单是否开启 if (!enable) { return(false); } // 是否在错误状态 if (IsErrorState()) { return(false); } // 判断当前行情是否异常 if (!HQTest(spInfo)) { return(false); } // 行情时间必须在设定的正常交易时间范围内 if (!(spInfo.Time > VALID_START_TIME_AM && spInfo.Time < VALID_END_TIME_AM) && !(spInfo.Time > VALID_START_TIME_PM && spInfo.Time < VALID_END_TIME_PM)) { return(false); } // 是否满足开仓条件 if (spInfo.OpenSpread < inParam.InKC || Math.Abs(spInfo.OpenSpread - inParam.InKC) <= DOUBLE_COMPARE_MARGIN) { if (TradeSummary.Position < inParam.InMaxP && RiskTest(OC_CODE.Open)) { return(true); } } // 是否满足平仓条件 if (spInfo.CloseSpread > inParam.InPC || Math.Abs(spInfo.CloseSpread - inParam.InPC) <= DOUBLE_COMPARE_MARGIN) { if (TradeSummary.Position > 0 && RiskTest(OC_CODE.Close)) { return(true); } } return(false); }
/// <summary> /// 修改总代分佣比例 /// </summary> /// <param name="dto"></param> /// <returns></returns> public Jinher.AMP.BTP.Deploy.CustomDTO.ResultDTO UpdateDividendPercentExt(Jinher.AMP.BTP.Deploy.CustomDTO.SpreadUpdateDividendPercentDTO dto) { if (dto == null || dto.Id == Guid.Empty) { return new ResultDTO { ResultCode = 1, Message = "参数为空" } } ; if (dto.Percent < 0 || dto.Percent > 100) { return(new ResultDTO { ResultCode = 1, Message = "分佣比例只能在0-100之间" }); } try { ContextSession contextSession = ContextFactory.CurrentThreadContext; var spreadInfo = SpreadInfo.ObjectSet().FirstOrDefault(c => c.IsDel != 1 && c.Id == dto.Id); if (spreadInfo == null) { return new ResultDTO { ResultCode = 2, Message = "推广主不存在" } } ; spreadInfo.DividendPercent = dto.Percent; spreadInfo.EntityState = EntityState.Modified; contextSession.SaveChanges(); return(new ResultDTO { isSuccess = true, Message = "success" }); } catch (Exception ex) { LogHelper.Error(string.Format("SpreadInfoBP.UpdateDividendPercentExt异常,search={0}", JsonHelper.JsonSerializer(dto)), ex); return(new ResultDTO { ResultCode = 1, Message = "Error" }); } }
private void UpdateHQ(SpreadInfo spInfo) { if (lb_Time1.InvokeRequired) { var updateHQ = new UpdateHQDelegate(UpdateHQ); this.BeginInvoke(updateHQ, new object[] { spInfo }); } else { lb_IF1.Text = (latestM1 == null) ? "N/A" : latestM1.StockCode; lb_IF2.Text = (latestM2 == null) ? "N/A" : latestM2.StockCode; lb_Time1.Text = (latestM1 == null) ? "N/A" : latestM1.Time + "." + latestM1.MilliSec; lb_Time2.Text = (latestM2 == null) ? "N/A" : latestM2.Time + "." + latestM2.MilliSec; lb_IF1Price.Text = spInfo.IF1Price.ToString(); lb_IF2Price.Text = spInfo.IF2Price.ToString(); lb_Diff1.Text = spInfo.CurrentSpread.ToString("F2"); lb_OpenSpread.Text = spInfo.OpenSpread.ToString("F2"); lb_CloseSpread.Text = spInfo.CloseSpread.ToString("F2"); } }
/// <summary> /// 时间处理 /// </summary> /// <returns></returns> protected virtual void DealEvent() { if (string.IsNullOrEmpty(Log.Ticket)) { return; } var qrcode = WeChatQRCode.ObjectSet().FirstOrDefault(c => c.QRType.Value == (int)QrType.SpreadManager && c.WeChatTicket == Log.Ticket); if (qrcode == null || qrcode.SpreadInfoId == Guid.Empty) { return; } var url = SpreadInfo.ObjectSet().Where(c => c.Id == qrcode.SpreadInfoId).Select(c => c.SpreadUrl).FirstOrDefault(); Jinher.AMP.WCP.Deploy.CustomDTO.CusNewsPushDTO msgDto = new CusNewsPushDTO() { AppId = CustomConfig.WeChatSpreader.AppId.ToString(), Content = getMessageContent(url), }; WCPSV.Instance.PushSysMessageToUsers(msgDto); }
private string getQrCodeName(SpreadInfo spreadInfo) { string result = string.Empty; if (spreadInfo == null) { return(result); } List <Guid> appIds = new List <Guid>(); if (spreadInfo.SpreadAppId != Guid.Empty) { appIds.Add(spreadInfo.SpreadAppId); } if (spreadInfo.HotshopId != Guid.Empty) { appIds.Add(spreadInfo.HotshopId); } var appDict = APPSV.GetAppNameListByIds(appIds); return(SpreadSV.Instance.BuildQrCodeName(spreadInfo, appDict)); }
public ResultDTO UpdateStateExt(SpreadUpdateStateDTO search) { if (search == null || search.Id == Guid.Empty) { return new ResultDTO { ResultCode = 1, Message = "参数为空" } } ; try { ContextSession contextSession = ContextFactory.CurrentThreadContext; var spreadInfo = SpreadInfo.ObjectSet().FirstOrDefault(c => c.IsDel != 1 && c.Id == search.Id); if (spreadInfo == null) { return new ResultDTO { ResultCode = 2, Message = "推广主不存在" } } ; spreadInfo.IsDel = search.IsDel ? 2 : 0; spreadInfo.EntityState = EntityState.Modified; contextSession.SaveChanges(); return(new ResultDTO { isSuccess = true, Message = "success" }); } catch (Exception ex) { LogHelper.Error(string.Format("SpreadInfoBP.UpdateStateExt异常,search={0}", JsonHelper.JsonSerializer(search)), ex); return(new ResultDTO { ResultCode = 1, Message = "Error" }); } }
/// <summary> /// 生成微信二维码名称 /// </summary> /// <param name="spreadInfo"></param> /// <param name="appDict"></param> /// <returns></returns> public string BuildQrCodeName(SpreadInfo spreadInfo, Dictionary <Guid, string> appDict) { string result = string.Empty; if (spreadInfo == null) { return(result); } if (appDict == null || !appDict.Any()) { return(result); } StringBuilder sb = new StringBuilder(); sb.Append(spreadInfo.Name); if (!string.IsNullOrEmpty(spreadInfo.UserCode)) { sb.Append("_"); sb.Append(spreadInfo.UserCode); } if (spreadInfo.SpreadAppId != Guid.Empty && appDict.ContainsKey(spreadInfo.SpreadAppId)) { sb.Append("_"); sb.Append(appDict[spreadInfo.SpreadAppId]); } if (spreadInfo.HotshopId != Guid.Empty && appDict.ContainsKey(spreadInfo.HotshopId)) { sb.Append("_"); sb.Append(appDict[spreadInfo.HotshopId]); } result = sb.ToString(); if (string.IsNullOrEmpty(result)) { result = "推广主"; } return(result); }
/// <summary> /// 查询推广主信息 /// </summary> /// <param name="spreadInfoSearchDTO"></param> /// <returns></returns> public Jinher.AMP.BTP.Deploy.CustomDTO.SpreadInfoResultDTO GetSpreadInfoExt(Jinher.AMP.BTP.Deploy.CustomDTO.SpreadInfoSearchDTO spreadInfoSearchDTO) { if (spreadInfoSearchDTO == null || spreadInfoSearchDTO.SpreadCode == Guid.Empty) { return(null); } var spreadInfo = SpreadInfo.ObjectSet().Where(t => t.SpreadCode == spreadInfoSearchDTO.SpreadCode && t.IsDel == 0).FirstOrDefault(); if (spreadInfo == null) { return(null); } Jinher.AMP.BTP.Deploy.CustomDTO.SpreadInfoResultDTO result = new SpreadInfoResultDTO(); result.SpreadId = spreadInfo.SpreadId; result.SpreadUrl = spreadInfo.SpreadUrl; result.SpreadCode = spreadInfo.SpreadCode; result.SpreadDesc = spreadInfo.SpreadDesc; result.SpreadType = spreadInfo.SpreadType; result.IsDel = spreadInfo.IsDel; result.AppId = spreadInfo.AppId; return(result); }
/// <summary> /// 查询一级代理指定APP的旺铺列表 /// </summary> /// <param name="iwId">组织ID</param> /// <param name="appId">应用ID</param> /// <returns></returns> public ResultDTO <List <SpreadAppDTO> > GetLv1SpreadHotshopsExt(Guid iwId, Guid appId) { var data = new List <SpreadAppDTO>(); var appIds = SpreadInfo.ObjectSet(). Where(s => s.IsDel != 1 && s.SpreadType == 5 && s.IWId == iwId && s.SpreadAppId == appId). Select(s => s.HotshopId).ToList(); if (appIds.Count > 0) { var appDict = APPSV.GetAppNameListByIds(appIds); foreach (var item in appIds) { data.Add(new SpreadAppDTO { Id = item, Name = appDict.ContainsKey(item) ? appDict[item] : null }); } } return(new ResultDTO <List <SpreadAppDTO> > { isSuccess = true, Message = "success", Data = data }); }
/// <summary> /// 删除多个自提点 /// </summary> /// <param name="ids">自提点ID集合</param> public Jinher.AMP.BTP.Deploy.CustomDTO.ResultDTO DeleteSelfTakeStationsExt(System.Collections.Generic.List <System.Guid> ids) { if (ids == null || ids.Count < 1) { return(new ResultDTO { ResultCode = 1, Message = "自提点实体不能为空" }); } Guid cityOwnerId = Guid.Empty; Guid appId = Guid.Empty; int selfTakeStationType = 0; try { ContextSession contextSession = ContextFactory.CurrentThreadContext; var models = SelfTakeStation.ObjectSet().Where(s => ids.Contains(s.Id) && !s.IsDel).ToList(); if (models != null && models.Count > 0) { var first = models.FirstOrDefault(); cityOwnerId = first.CityOwnerId; appId = first.AppId.HasValue ? first.AppId.Value : Guid.Empty; selfTakeStationType = first.SelfTakeStationType; //删除自提点 foreach (var item in models) { item.IsDel = true; item.EntityState = System.Data.EntityState.Modified; contextSession.SaveObject(item); } var selfTakeStationManager = SelfTakeStationManager.ObjectSet().Where(s => ids.Contains(s.SelfTakeStationId) && !s.IsDel).ToList(); if (selfTakeStationManager != null && selfTakeStationManager.Count > 0) { //删除负责人 foreach (var manager in selfTakeStationManager) { manager.IsDel = true; manager.EntityState = System.Data.EntityState.Modified; contextSession.SaveObject(manager); } } //删除推广表信息 List <Guid> spreadCodeList = models.Select(t => t.SpreadCode).ToList(); var spreadInfo = SpreadInfo.ObjectSet().Where(s => spreadCodeList.Contains(s.SpreadCode) && s.IsDel != 1).ToList(); foreach (var item in spreadInfo) { item.IsDel = 1; item.EntityState = System.Data.EntityState.Modified; contextSession.SaveObject(item); } contextSession.SaveObject(spreadInfo); } contextSession.SaveChanges(); } catch (Exception ex) { LogHelper.Error(string.Format("删除自提点服务异常。ids:{0}", JsonHelper.JsonSerializer(ids)), ex); return(new ResultDTO { ResultCode = 1, Message = "Error" }); } //更新已建体验柜数量 try { int count = 0; Jinher.AMP.ZPH.Deploy.CustomDTO.ProxyCabinetNumParam prarm = new ZPH.Deploy.CustomDTO.ProxyCabinetNumParam(); prarm.ChangeOrg = cityOwnerId; prarm.BelongTo = appId; if (selfTakeStationType == 0) { //总数量 count = SelfTakeStation.ObjectSet().Where(t => t.CityOwnerId == cityOwnerId && t.SelfTakeStationType == selfTakeStationType && !t.IsDel).Count(); prarm.IsSelfPavilion = false; } else if (selfTakeStationType == 1) { //总数量 count = SelfTakeStation.ObjectSet().Where(t => t.CityOwnerId == cityOwnerId && t.SelfTakeStationType == selfTakeStationType && t.AppId == appId && !t.IsDel).Count(); prarm.IsSelfPavilion = true; } prarm.CabinetNum = count; LogHelper.Debug(string.Format("删除自提点时更新已建体验柜数量。prarm:{0}", JsonHelper.JsonSerializer(prarm))); var resultProxy = Jinher.AMP.BTP.TPS.ZPHSV.Instance.UpdateProxyCabinetNum(prarm); if (!resultProxy.isSuccess) { LogHelper.Error(string.Format("删除自提点成功,但更新已建体验柜数量服务失败。ids:{0}", JsonHelper.JsonSerializer(ids))); } } catch (Exception ex) { LogHelper.Error(string.Format("删除自提点时更新已建体验柜数量服务异常。ids:{0}", JsonHelper.JsonSerializer(ids)), ex); } return(new ResultDTO { ResultCode = 0, Message = "Success" }); }
/// <summary> /// 保存推广信息 /// </summary> /// <param name="dto"></param> /// <returns></returns> public Jinher.AMP.BTP.Deploy.CustomDTO.ResultDTO SaveSpreadInfoExt(Jinher.AMP.BTP.Deploy.CustomDTO.SpreadSaveDTO dto) { if (dto == null || dto.SpreadAppId == Guid.Empty || dto.HotshopId == Guid.Empty) { return new ResultDTO { ResultCode = 1, Message = "参数为空" } } ; Guid userId = Guid.Empty; Guid iwId = Guid.Empty; // 一级代理 if (dto.SpreadType == 5) { if (dto.SubSpreadCount < 0 || dto.SubSpreadCount > 999) { return(new ResultDTO { ResultCode = 1, Message = "子代理数量仅允许输入0~999" }); } if (dto.IWCode == null) { return new ResultDTO { ResultCode = 1, Message = "参数为空" } } ; iwId = EBCSV.GetOrgIdByIwCode(dto.IWCode); if (iwId == Guid.Empty) { return new ResultDTO { ResultCode = 2, Message = "该组织不存在" } } ; // 同一个推广主或推广组织,同一个推广App,同一个旺铺仅能生成一个推广码;已存在则提示:已存在相同的推广码; var spreadInfoCount = SpreadInfo.ObjectSet().Count(c => c.IsDel != 1 && c.SpreadType == 5 && c.IWId == iwId && c.SpreadAppId == dto.SpreadAppId && c.HotshopId == dto.HotshopId); if (spreadInfoCount > 0) { return(new ResultDTO { ResultCode = 2, Message = "已存在相同的推广码" }); } } // 二级代理 else if (dto.SpreadType == 6) { if (dto.UserCode == null || dto.IWId == Guid.Empty || string.IsNullOrEmpty(dto.IWCode)) { return new ResultDTO { ResultCode = 1, Message = "参数为空" } } ; iwId = dto.IWId; userId = CBCSV.GetUserIdByAccount(dto.UserCode); if (userId == Guid.Empty) { return new ResultDTO { ResultCode = 2, Message = "该用户未注册" } } ; // 同一个推广主,同一个推广App,同一个旺铺仅能生成一个推广码;已存在则提示:已存在相同的推广码; var spreadUserCount = SpreadInfo.ObjectSet().Count(c => c.IsDel != 1 && c.SpreadType == 6 && c.SpreadId == userId && c.SpreadAppId == dto.SpreadAppId && c.HotshopId == dto.HotshopId); if (spreadUserCount > 0) { return(new ResultDTO { ResultCode = 2, Message = "已存在相同的推广码" }); } // 查询一级代理 var lv1Spread = SpreadInfo.ObjectSet().FirstOrDefault(s => s.IsDel != 1 && s.SpreadType == 5 && s.IWId == iwId && s.SpreadAppId == dto.SpreadAppId && s.HotshopId == dto.HotshopId); if (lv1Spread == null) { return(new ResultDTO { ResultCode = 2, Message = "未创建一级代理" }); } // 同一组织、同一个推广App,同一个旺铺的子代理数量限制 var lv2SpreadCount = SpreadInfo.ObjectSet().Count(c => c.IsDel != 1 && c.SpreadType == 6 && c.IWId == iwId && c.SpreadAppId == dto.SpreadAppId && c.HotshopId == dto.HotshopId); if (lv2SpreadCount >= lv1Spread.SubSpreadCount) { return(new ResultDTO { ResultCode = 2, Message = "生成的推广码已经达到限制数量" }); } } else { if (dto.UserCode == null) { return new ResultDTO { ResultCode = 1, Message = "参数为空" } } ; userId = CBCSV.GetUserIdByAccount(dto.UserCode); if (userId == Guid.Empty) { return new ResultDTO { ResultCode = 2, Message = "该用户未注册" } } ; } try { ContextSession contextSession = ContextFactory.CurrentThreadContext; Guid spreadCode = Guid.NewGuid(); string spreadUrl = getSpreadUrl(dto.SpreadAppId, dto.HotshopId, spreadCode); var qrCodeUrl = BaseAppToolsSV.GenerateQrCode(spreadUrl, dto.QrCodeFileImg); if (string.IsNullOrEmpty(qrCodeUrl)) { return(new ResultDTO { ResultCode = 2, Message = "生成二维码失败" }); } SpreadInfo spreadInfo = new SpreadInfo { Id = Guid.NewGuid(), SpreadId = userId, SpreadUrl = ShortUrlSV.Instance.GenShortUrl(spreadUrl), SpreadCode = spreadCode, SpreadDesc = dto.SpreadDesc, SpreadType = dto.SpreadType, QrCodeUrl = qrCodeUrl, SpreadAppId = dto.SpreadAppId, HotshopId = dto.HotshopId, UserCode = dto.UserCode, Name = dto.Name ?? "", IWId = iwId, IWCode = dto.IWCode, SubSpreadCount = dto.SubSpreadCount, DividendPercent = dto.DividendPercent, EntityState = EntityState.Added }; contextSession.SaveObject(spreadInfo); updateRalationUserSpread(contextSession, spreadInfo); contextSession.SaveChanges(); return(new ResultDTO { isSuccess = true, ResultCode = 0, Message = "Success" }); } catch (Exception ex) { LogHelper.Error(string.Format("SpreadInfoBP.SaveSpreadInfoExt异常,dto={0}", JsonHelper.JsonSerializer(dto)), ex); return(new ResultDTO { ResultCode = 1, Message = "Error" }); } }
/// <summary> /// 绑定关系 /// </summary> /// <param name="userSpreaderBindDTO">参数只传SpreadCode、UserID</param> /// <returns></returns> public Jinher.AMP.BTP.Deploy.CustomDTO.ResultDTO SaveUserSpreaderCodeExt(Jinher.AMP.BTP.Deploy.CustomDTO.UserSpreaderBindDTO userSpreaderBindDTO) { ResultDTO result = new ResultDTO(); if (userSpreaderBindDTO == null) { result.ResultCode = 1; result.Message = "参数错误,参数不能为空!"; return(result); } if (userSpreaderBindDTO.SpreadCode == Guid.Empty) { result.ResultCode = 2; result.Message = "参数错误,推广码不能为空!"; return(result); } if (userSpreaderBindDTO.UserId == Guid.Empty) { result.ResultCode = 2; result.Message = "参数错误,买家ID不能为空!"; return(result); } try { //一个买家只能属于一个推广主。 var usCount = (from us in UserSpreader.ObjectSet() where us.UserId == userSpreaderBindDTO.UserId select us).Count(); if (usCount > 0) { result.ResultCode = 0; result.Message = "已存在当前买家和推广主信息!"; return(result); } var spreadInfo = SpreadInfo.ObjectSet().FirstOrDefault(t => t.SpreadCode == userSpreaderBindDTO.SpreadCode && t.IsDel == 0); if (spreadInfo == null) { result.ResultCode = 3; result.Message = "没有此推广码的信息!"; return(result); } ContextSession contextSession = ContextFactory.CurrentThreadContext; UserSpreader uSpreaderNew = new UserSpreader(); uSpreaderNew.Id = Guid.NewGuid(); uSpreaderNew.UserId = userSpreaderBindDTO.UserId; uSpreaderNew.SpreaderId = spreadInfo.SpreadId; uSpreaderNew.SpreadCode = userSpreaderBindDTO.SpreadCode; uSpreaderNew.IsDel = false; uSpreaderNew.CreateOrderId = new Guid("00000000-0000-0000-0000-000000000000"); uSpreaderNew.SubTime = DateTime.Now; uSpreaderNew.ModifiedOn = DateTime.Now; uSpreaderNew.WxOpenId = ""; uSpreaderNew.EntityState = System.Data.EntityState.Added; contextSession.SaveObject(uSpreaderNew); contextSession.SaveChanges(); result.ResultCode = 0; result.Message = "成功!"; return(result); } catch (Exception ex) { LogHelper.Error(string.Format("UserSpreaderSVExt异常。userSpreaderBindDTO:{0}", JsonHelper.JsonSerializer(userSpreaderBindDTO)), ex); result.ResultCode = 4; result.Message = "接口异常,请稍后重试!"; return(result); } }
public ResultDTO <ListResult <SpreadInfoShowDTO> > GetSpreadInfoListExt(SpreadSearchDTO search) { if (search == null) { return new ResultDTO <ListResult <SpreadInfoShowDTO> > { ResultCode = 1, Message = "参数为空" } } ; if (search.PageIndex == 0) { search.PageIndex = 1; } if (search.PageSize == 0) { search.PageSize = 20; } var query = SpreadInfo.ObjectSet().Where(c => c.IsDel != 1); if (search.SpreadType.HasValue) { query = query.Where(c => c.SpreadType == search.SpreadType.Value); } if (!string.IsNullOrEmpty(search.UserCode)) { query = query.Where(c => c.UserCode.Contains(search.UserCode)); } if (search.SpreadAppId.HasValue && search.SpreadAppId != Guid.Empty) { query = query.Where(c => c.SpreadAppId == search.SpreadAppId.Value); } if (search.IWId.HasValue) { query = query.Where(c => c.IWId == search.IWId.Value); } ListResult <SpreadInfoShowDTO> data = new ListResult <SpreadInfoShowDTO> { List = new List <SpreadInfoShowDTO>() }; data.Count = query.Count(); data.List = query.OrderByDescending(c => c.SubTime).Skip((search.PageIndex - 1) * search.PageSize). Take(search.PageSize).Select(c => new SpreadInfoShowDTO { Id = c.Id, SpreadId = c.SpreadId, Account = c.UserCode, Name = c.Name, SpreadType = c.SpreadType, SpreadAppId = c.SpreadAppId, HotshopId = c.HotshopId, QrCodeUrl = c.QrCodeUrl, SpreadDesc = c.SpreadDesc, SpreadUrl = c.SpreadUrl, SubTime = c.SubTime, IsDel = c.IsDel, HotshopName = "", IsBindWeChatQrCode = false, SpreadAppName = "", SpreadTypeDesc = "", IWCode = c.IWCode, SubSpreadCount = c.SubSpreadCount, DividendPercent = c.DividendPercent }).ToList(); if (data.List.Any()) { var spreadTypes = data.List.Select(c => c.SpreadType).Distinct().ToList(); var spreadCategoryList = SpreadCategory.ObjectSet() .Where(c => spreadTypes.Contains(c.SpreadType)) .Select(m => new SpreadCategoryDTO { SpreadType = m.SpreadType, CategoryDesc = m.CategoryDesc }).ToList(); var ids = data.List.Select(c => c.Id).ToList(); var bindedIds = WeChatQRCode.ObjectSet().Where(c => ids.Contains(c.SpreadInfoId)).Select(m => m.SpreadInfoId).ToList(); var appIds = data.List.Select(c => c.SpreadAppId).Distinct().ToList(); appIds.AddRange(data.List.Select(c => c.HotshopId)); appIds = appIds.Distinct().ToList(); var appDict = APPSV.GetAppNameListByIds(appIds); foreach (var spreadInfoShowDTO in data.List) { if (appDict.ContainsKey(spreadInfoShowDTO.SpreadAppId)) { spreadInfoShowDTO.SpreadAppName = appDict[spreadInfoShowDTO.SpreadAppId]; } if (appDict.ContainsKey(spreadInfoShowDTO.HotshopId)) { spreadInfoShowDTO.HotshopName = appDict[spreadInfoShowDTO.HotshopId]; } var spreadTypeDto = spreadCategoryList.FirstOrDefault(c => c.SpreadType == spreadInfoShowDTO.SpreadType); if (spreadTypeDto != null) { spreadInfoShowDTO.SpreadTypeDesc = spreadTypeDto.CategoryDesc; } if (bindedIds.Contains(spreadInfoShowDTO.Id)) { spreadInfoShowDTO.IsBindWeChatQrCode = true; } } } return(new ResultDTO <ListResult <SpreadInfoShowDTO> > { isSuccess = true, Message = "success", Data = data }); }