ComplianceServer/oldcode/Core.Web/Controllers/StatisticsController.cs

148 lines
5.5 KiB
C#

using Core.Web.App_Start;
using Core.Web.WebHelper;
using CRM.Core.BLL.Util;
using CRM.Core.Common;
using CRM.Core.Model.Enum;
using Newtonsoft.Json;
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Data;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Web;
using System.Web.Mvc;
using WX.CRM.Common.Employee;
using WX.CRM.WebHelper;
using static Core.Web.Controllers.StatisticsController;
namespace Core.Web.Controllers
{
public class StatisticsController : BaseController
{
[AuthorizeRedirect(RightsConfig.CONST_自动外呼日志, ToolBarConfig.CONST_NotButton, true)]
public ActionResult Index()
{
var now = DateTime.Now;
ViewBag.Year = now.Year.ToString();
ViewBag.Month = now.AddMonths(-1).Month.ToString("00");
var yearList = new List<string>();
var monthList = new List<string>();
for (var i = -5; i < 2; i++)
{
yearList.Add(now.AddYears(i).Year.ToString());
}
for (var i = 0; i < 12; i++)
{
monthList.Add((i + 1).ToString("00"));
}
ViewBag.YearList = yearList;
ViewBag.MonthList = monthList;
return View();
}
[AuthorizeRedirect(RightsConfig.CONST_自动外呼日志, ToolBarConfig.CONST_NotButton, false)]
public JsonResult GetListHtml([Required] string year, [Required] string month)
{
var data = GetData(year, month);
return Json(data, JsonRequestBehavior.AllowGet);
}
[AuthorizeRedirect(RightsConfig.CONST_自动外呼日志, ToolBarConfig.CONST_NotButton, false)]
public FileResult Export([Required] string year, [Required] string month)
{
var data = GetData(year, month);
var tableData = ToDataTable(data.data.Result);
var dataSet = new DataSet();
dataSet.Tables.Clear();
dataSet.Tables.Add(tableData);
var fileName = $"{year}年{month}月外呼统计数据";
//拼接需要导出的列
List<string> filds = new List<string>();
List<string> fildsName = new List<string>();
foreach (var item in typeof(MonthOutboundDto).GetProperties())
{
var dispalyName = item.GetCustomAttributes(typeof(DisplayNameAttribute), true);
if (dispalyName.Any())
{
filds.Add(item.Name);
DisplayNameAttribute attr = dispalyName[0] as DisplayNameAttribute;
fildsName.Add(attr.DisplayName);
}
}
string checkedFilds = $"[{string.Join("][", filds)}]";
string checkedTitle = string.Join(",", fildsName);
return File(ExcelHelper.ExportDataSetToExcel(dataSet, $"{year}年{month}月外呼统计数据"), "application/ms-excel", $"{fileName}.xls");
}
private HGApiResult<MonthResultDto<MonthOutboundDto>> GetData(string year, string month)
{
CACHE_BL cache_BL = new CACHE_BL();
var webapi = cache_BL.GetValue_Parameter(Parameter.Hg_Core_WebApi);
//webapi = "http://120.77.165.155:8089";
//webapi = "http://localhost:5090";
var url = $"{webapi}/api/Statistics/MonthOutbound";
var para = $"year={year}&month={month}";
var result = Utility.GetData(url, para);
var data = JsonConvert.DeserializeObject<HGApiResult<MonthResultDto<MonthOutboundDto>>>(result);
return data;
}
private static DataTable ToDataTable<T>(IEnumerable<T> collection)
{
var props = typeof(T).GetProperties();
var dt = new DataTable();
foreach (var prop in props)
{
var attribute = (DisplayNameAttribute)System.Attribute.GetCustomAttribute(prop, typeof(DisplayNameAttribute));
var name = attribute == null ? prop.Name : attribute.DisplayName;
Type colType = prop.PropertyType;
if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof(Nullable<>)))
{
colType = colType.GetGenericArguments()[0];
}
dt.Columns.Add(new DataColumn(name, colType));
}
if (collection.Count() > 0)
{
for (int i = 0; i < collection.Count(); i++)
{
ArrayList tempList = new ArrayList();
foreach (PropertyInfo pi in props)
{
object obj = pi.GetValue(collection.ElementAt(i), null);
tempList.Add(obj);
}
object[] array = tempList.ToArray();
dt.LoadDataRow(array, true);
}
}
return dt;
}
public class MonthResultDto<T>
{
public string Date { get; set; }
public List<T> Result { get; set; }
}
public class MonthOutboundDto
{
[DisplayName("回访类型")]
public string TypeName { get; set; }
[DisplayName("回访数量")]
public int? Total { get; set; }
[DisplayName("占比")]
public string Proportion { get; set; }
}
}
}