/// <summary> /// 绑定新用户 /// </summary> /// <param name="sysUser"></param> /// <param name="openId"></param> /// <returns></returns> public long InsertWeChatUserAndBind(SysUser sysUser, string openId) { var newIndex = _accountData.InsertAndBindWechatUser(sysUser, openId); var costTypeServer = new CostTypeService(); costTypeServer.InitCostType(newIndex); var costChannelServer = new CostChannelService(); costChannelServer.InitCostChannel(newIndex); return(newIndex); }
/// <summary> /// 获取用户的所有账户信息 /// </summary> /// <param name="userIds"></param> /// <returns></returns> public List <dynamic> GetStatisticsAllChannel(List <long> userIds) { var channelServer = new CostChannelService(); //获取所有用户的统计信息 List <CanPayAcountModel> channelCanPayList = _dataAccess.GetStatisticsCanPay(userIds); //获取所有用户账户 var channelList = channelServer.GetList(-1, userIds, 1, 10000, out _); var result = new List <dynamic>(); if (channelList == null || channelList.Count < 1) { return(result); } #region [家庭成员所有] if (userIds.Count > 1) { var allOutCost = channelCanPayList.Where(e => e.CostInOrOut == CostInOrOutEnum.Out) .Sum(e => e.CostCount); var allInCost = channelCanPayList.Where(f => f.CostInOrOut == CostInOrOutEnum.In).Sum(s => s.CostCount); var allCouldCost = allInCost - allOutCost; var channelAccount = new Dictionary <string, decimal>(); if (channelList.Any()) { channelList.ForEach(f => { if (!channelAccount.ContainsKey(f.CostChannelName)) { channelAccount.Add(f.CostChannelName, 0); } } ); } channelCanPayList.ForEach(h => { if (channelAccount.ContainsKey(h.CostChannelName)) { channelAccount[h.CostChannelName] = channelAccount[h.CostChannelName] + (h.CostInOrOut == CostInOrOutEnum.In ? h.CostCount : h.CostCount * -1); } else { channelAccount.Add(h.CostChannelName, h.CostInOrOut == CostInOrOutEnum.In ? h.CostCount : h.CostCount * -1); } }); var data = channelAccount.Select(f => new CanPayAcountModel { CostCount = f.Value, CostChannelName = f.Key, CostChannel = channelList.FirstOrDefault(r => r.CostChannelName == f.Key)?.Id }).ToList(); result.Add(new { StatisticsModel = new { allCouldCost = $"{allCouldCost:N2}", allInCost = $"{allInCost:N2}", allOutCost = $"{allOutCost:N2}" }, channelAcount = data, userId = -1 }); } #endregion #region [计算成员的统计信息] foreach (var canPayAccountModels in channelCanPayList.GroupBy(f => f.UserId)) { var itemOutCost = canPayAccountModels.Where(e => e.CostInOrOut == CostInOrOutEnum.Out).Sum(e => e.CostCount); var itemInCost = canPayAccountModels.Where(f => f.CostInOrOut == CostInOrOutEnum.In).Sum(s => s.CostCount); var itemCouldCost = itemInCost - itemOutCost; var itemChannelAccount = new Dictionary <string, decimal>(); var itemChannelList = channelList.Where(r => r.UserId == canPayAccountModels.Key).ToList(); if (itemChannelList.Any()) { itemChannelList.ForEach(r => itemChannelAccount.Add(r.CostChannelName, 0)); } foreach (var h in canPayAccountModels) { if (itemChannelAccount.ContainsKey(h.CostChannelName)) { itemChannelAccount[h.CostChannelName] = itemChannelAccount[h.CostChannelName] + (h.CostInOrOut == CostInOrOutEnum.In ? h.CostCount : h.CostCount * -1); } else { itemChannelAccount.Add(h.CostChannelName, h.CostInOrOut == CostInOrOutEnum.In ? h.CostCount : h.CostCount * -1); } } var itemData = itemChannelAccount.Select(f => new CanPayAcountModel { CostCount = f.Value, CostChannelName = f.Key, CostChannel = itemChannelList.FirstOrDefault(r => r.CostChannelName == f.Key)?.Id }).ToList(); result.Add(new { StatisticsModel = new { allCouldCost = $"{itemCouldCost:N2}", allInCost = $"{itemInCost:N2}", allOutCost = $"{itemOutCost:N2}" }, channelAcount = itemData, userId = canPayAccountModels.Key }); userIds.Remove(canPayAccountModels.Key); } #endregion #region 处理没有数据的情况 if (userIds.Count > 0) { userIds.ForEach(f => { result.Add(new { StatisticsModel = new { allCouldCost = $"{0:N2}", allInCost = $"{0:N2}", allOutCost = $"{0:N2}" }, channelAcount = new List <CanPayAcountModel>(), userId = f }); }); } #endregion return(result); }