196 lines
8.5 KiB
C#
196 lines
8.5 KiB
C#
using CRM.Core.BLL.Soft;
|
||
using CRM.Core.DTO.Res;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Data;
|
||
using System.Linq;
|
||
using WX.CRM.Common;
|
||
|
||
namespace ZXDService
|
||
{
|
||
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“RegCountService”。
|
||
// 注意: 为了启动 WCF 测试客户端以测试此服务,请在解决方案资源管理器中选择 RegCountService.svc 或 RegCountService.svc.cs,然后开始调试。
|
||
public class RegCountService : IRegCountService
|
||
{
|
||
public SOFT_USER_BL softUserBL = new SOFT_USER_BL();
|
||
public void DoWork()
|
||
{
|
||
}
|
||
|
||
public UPJsonResult<List<RegCountDTO>> GetRegCountData(string app, string plat, string version, string channel, string startday, string endday)
|
||
{
|
||
try
|
||
{
|
||
var stime = DateTime.Now.Date;
|
||
var etime = DateTime.Now.AddDays(1).Date;
|
||
if (!Utility.IsNum(startday) || !Utility.IsNum(endday) || startday.Length != 8 && endday.Length != 8)
|
||
{
|
||
return new UPJsonResult<List<RegCountDTO>> { code = -1 };
|
||
}
|
||
stime = DateTime.ParseExact(startday, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture).Date;
|
||
etime = DateTime.ParseExact(endday, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture).Date.AddDays(1);
|
||
if (string.IsNullOrEmpty(channel))
|
||
{
|
||
return new UPJsonResult<List<RegCountDTO>> { code = -2 };
|
||
}
|
||
var schannel = -1;
|
||
var echannel = -1;
|
||
if (channel != "-1")
|
||
{
|
||
string[] channelArr = channel.Split('-');
|
||
if (channelArr == null || channelArr.Length != 2)
|
||
{
|
||
return new UPJsonResult<List<RegCountDTO>> { code = -3 };
|
||
}
|
||
if (!Utility.IsNum(channelArr[0]) && !Utility.IsNum(channelArr[1]))
|
||
{
|
||
return new UPJsonResult<List<RegCountDTO>> { code = -4 };
|
||
}
|
||
schannel = Convert.ToInt32(channelArr[0]);
|
||
echannel = Convert.ToInt32(channelArr[1]);
|
||
}
|
||
|
||
var paltType = getPlatType(plat);
|
||
DataSet ds = softUserBL.GetRegCountToUP(stime, etime, schannel, echannel, paltType);
|
||
if (ds != null && ds.Tables[0] != null)
|
||
{
|
||
|
||
if (channel == "-1")
|
||
{
|
||
List<RegCountTb> list = new List<RegCountTb>();
|
||
foreach (DataRow dr in ds.Tables[0].Rows)
|
||
{
|
||
var item = new RegCountTb();
|
||
item.app = "dongniu";
|
||
item.plat = plat;
|
||
item.version = "-1";
|
||
item.channel = dr["channel"] == null ? 0 : Convert.ToInt32(dr["channel"]);
|
||
item.reg_num = Convert.ToInt32(dr["num"]);
|
||
item.day_time = Convert.ToInt32(Convert.ToDateTime(dr["daytime"]).ToString("yyyyMMdd"));
|
||
list.Add(item);
|
||
}
|
||
var daylist = list.GroupBy(m => m.day_time).Select(m => m.Key).OrderBy(m => m).ToList();
|
||
var resultList = new List<RegCountDTO>();
|
||
foreach (var day in daylist)
|
||
{
|
||
var gzItem = new RegCountDTO();
|
||
var gzRegNum = list.Where(m => m.day_time == day && m.channel >= 1000 && m.channel <= 1999).Sum(m => m.reg_num);
|
||
gzItem.app = "dongniu";
|
||
gzItem.plat = plat;
|
||
gzItem.version = "-1";
|
||
gzItem.channel = "1000-1999";
|
||
gzItem.reg_num = gzRegNum;
|
||
gzItem.day_time = day;
|
||
resultList.Add(gzItem);
|
||
|
||
var b1Item = new RegCountDTO();
|
||
var b1RegNum = list.Where(m => m.day_time == day && m.channel >= 2100 && m.channel <= 2199).Sum(m => m.reg_num);
|
||
b1Item.app = "dongniu";
|
||
b1Item.plat = plat;
|
||
b1Item.version = "-1";
|
||
b1Item.channel = "2100-2199";
|
||
b1Item.reg_num = b1RegNum;
|
||
b1Item.day_time = day;
|
||
resultList.Add(b1Item);
|
||
|
||
var b2Item = new RegCountDTO();
|
||
var b2RegNum = list.Where(m => m.day_time == day && m.channel >= 2200 && m.channel <= 2299).Sum(m => m.reg_num);
|
||
b2Item.app = "dongniu";
|
||
b2Item.plat = plat;
|
||
b2Item.version = "-1";
|
||
b2Item.channel = "2200-2299";
|
||
b2Item.reg_num = b2RegNum;
|
||
b2Item.day_time = day;
|
||
resultList.Add(b2Item);
|
||
|
||
var b3Item = new RegCountDTO();
|
||
var b3RegNum = list.Where(m => m.day_time == day && m.channel >= 2300 && m.channel <= 2399).Sum(m => m.reg_num);
|
||
b3Item.app = "dongniu";
|
||
b3Item.plat = plat;
|
||
b3Item.version = "-1";
|
||
b3Item.channel = "2300-2399";
|
||
b3Item.reg_num = b3RegNum;
|
||
b3Item.day_time = day;
|
||
resultList.Add(b3Item);
|
||
|
||
var otherRegNum = list.Where(m => m.day_time == day).Sum(m => m.reg_num) - gzRegNum - b1RegNum - b2RegNum - b3RegNum;
|
||
if (otherRegNum > 0)
|
||
{
|
||
var otherItem = new RegCountDTO();
|
||
otherItem.app = "dongniu";
|
||
otherItem.plat = plat;
|
||
otherItem.version = "-1";
|
||
otherItem.channel = "other";
|
||
otherItem.reg_num = otherRegNum;
|
||
otherItem.day_time = day;
|
||
resultList.Add(otherItem);
|
||
}
|
||
}
|
||
|
||
return new UPJsonResult<List<RegCountDTO>> { code = 0, list = resultList };
|
||
}
|
||
else
|
||
{
|
||
List<RegCountDTO> list = new List<RegCountDTO>();
|
||
foreach (DataRow dr in ds.Tables[0].Rows)
|
||
{
|
||
var item = new RegCountDTO();
|
||
item.app = "dongniu";
|
||
item.plat = plat;
|
||
item.version = "-1";
|
||
item.channel = channel;
|
||
item.reg_num = Convert.ToInt32(dr["num"]);
|
||
item.day_time = Convert.ToInt32(Convert.ToDateTime(dr["daytime"]).ToString("yyyyMMdd"));
|
||
list.Add(item);
|
||
|
||
}
|
||
return new UPJsonResult<List<RegCountDTO>> { code = 0, list = list };
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
return new UPJsonResult<List<RegCountDTO>> { code = -10 };
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.Error(ex);
|
||
return new UPJsonResult<List<RegCountDTO>> { code = -500 };
|
||
}
|
||
|
||
|
||
}
|
||
|
||
private int getPlatType(string openPlat)
|
||
{
|
||
switch (openPlat)
|
||
{
|
||
case "WIN":
|
||
return 0;
|
||
case "ANDROID":
|
||
return 0;
|
||
case "IOS":
|
||
return 2;
|
||
default:
|
||
return 0;
|
||
}
|
||
}
|
||
}
|
||
|
||
class RegCountTb
|
||
{
|
||
public int day_time { get; set; }
|
||
|
||
public string app { get; set; }
|
||
|
||
public string plat { get; set; }
|
||
|
||
public string version { get; set; }
|
||
|
||
public int channel { get; set; }
|
||
|
||
public int reg_num { get; set; }
|
||
}
|
||
}
|