using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using BLL;
namespace FineUIPro.Web.Transfer.Chart
{
public partial class Instrumentation : PageBase
{
#region 定义项
///
/// 项目主键
///
public string ProjectId
{
get
{
return (string)ViewState["ProjectId"];
}
set
{
ViewState["ProjectId"] = value;
}
}
#endregion
#region 加载页面
///
/// 加载页面
///
///
///
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.ProjectId = this.CurrUser.LoginProjectId;
if (!string.IsNullOrEmpty(Request.Params["projectId"]))
{
this.ProjectId = Request.Params["projectId"];
}
this.AnalyseData();
}
}
#endregion
#region 统计
///
/// 统计方法
///
private void AnalyseData()
{
if (string.IsNullOrEmpty(ProjectId))
{
Alert.ShowInTop("项目未获取到,请刷新页面。", MessageBoxIcon.Warning);
return;
}
var sTime = DateTime.Now.AddDays(-7);
var eTime = DateTime.Now; ;
//如果没有填写日期,则是七天内的
if (!string.IsNullOrEmpty(txtStarTime.Text) && !string.IsNullOrEmpty(txtEndTime.Text))
{
sTime = Convert.ToDateTime(txtStarTime.Text);
eTime = Convert.ToDateTime(txtEndTime.Text);
}
//查询当前日期中的system的具体数目,去除重复
var list = Funs.DB.View_TransferDetail.Where(x => x.Projectid == ProjectId
&& x.FDate >= sTime && x.FDate <= eTime).ToList();
var SystemList = (from x in list select x.SystemName).Distinct();
//先加载左侧system 树菜单
LoadData(SystemList);
DataTable dtTime = new DataTable();
dtTime.Columns.Add("日期", typeof(string));
dtTime.Columns.Add("Finished", typeof(string));
dtTime.Columns.Add("In Progress", typeof(string));
dtTime.Columns.Add("Not Start", typeof(string));
var systemBol = false;
for (var i = sTime; i <= eTime; i=i.AddDays(1))
{
var finishedCount = 0;
var inProgress = 0;
var notStart = 0;
DataRow rowTime = dtTime.NewRow();
Model.SpTDesktopItem newspItem = new Model.SpTDesktopItem();
rowTime["日期"] = string.Format("{0:yyyy-MM-dd}", i); ;
//根据日期查询当前system的数量
var systemListbyDate = Funs.DB.View_TransferDetail.Where(x => x.Projectid == ProjectId
&& x.FDate >= Convert.ToDateTime(rowTime["日期"])
&& x.FDate < Convert.ToDateTime(rowTime["日期"]).AddDays(1)).ToList();
//查询TestPackage 去重
var testpackageList = (from x in systemListbyDate select x.TestPackage).Distinct();
if (testpackageList.ToList().Count>0)
{
systemBol = true;
}
foreach (var item in testpackageList)
{
//查询当前日期每个testpackage的数量
var systemSumCount = systemListbyDate.Where(x => x.TestPackage == item).ToList().Count;
//子系统中完成的数量
var subSystemSumCount = systemListbyDate.Where(x => x.TestPackage == item &&
x.Status.ToLower() == "finished").ToList().Count;
//子系统中没完成的情况
var subSystemSumNotStartCount = systemListbyDate.Where(x => x.TestPackage == item &&
(x.Status.ToLower() == "not start"|| x.Status=="" || x.Status==null )).ToList().Count;
//如果总数量等于完成的数量,完成量+1
if (systemSumCount == subSystemSumCount)
{
//如果都是完成,需要最后 12表 test packge 必须是Finished才能是完成
var punchlistFromList= Funs.DB.Transfer_PunchlistFrom.Where(x=>x.ProjectId==ProjectId
&& x.Test_Package==item
&& x.PUNCH_ITEM_FINISH_DATE>= Convert.ToDateTime(rowTime["日期"])
&& x.PUNCH_ITEM_FINISH_DATE < Convert.ToDateTime(rowTime["日期"]).AddDays(1)).ToList();
//如果查到
if (punchlistFromList.Count > 0)
{
//12表当前日期完成的数量
var punchlistFromFinshCount = punchlistFromList.Where(x => x.PUNCH_ITEM_STATUS.ToLower() == "finished").ToList().Count();
//如果完成的数量等于总得数量,则是完成
if (punchlistFromFinshCount == punchlistFromList.Count)
{
finishedCount += 1;
}
else {
inProgress += 1;
}
}
else {
inProgress += 1;
}
}
//如果总数量等于not start,未开始量+1
else if (systemSumCount== subSystemSumNotStartCount)
{
notStart += 1;
}
else {
inProgress += 1;
}
}
rowTime["Finished"] = finishedCount;
rowTime["In Progress"] = inProgress;
rowTime["Not Start"] = notStart;
dtTime.Rows.Add(rowTime);
}
if (systemBol)
{
this.ChartUc.CreateChart(BLL.ChartControlService.GetDataSourceChart(dtTime, "PROGRESS REPORT", this.drpChartType.SelectedValue, 1100, 600, false));
}
}
public class CheckAnalysisModel
{
public string itemType { get; set; }
public int count { get; set; }
}
#endregion
///
/// 统计分析
///
///
///
protected void BtnAnalyse_Click(object sender, EventArgs e)
{
this.AnalyseData();
}
protected void drpChartType_SelectedIndexChanged(object sender, EventArgs e)
{
this.AnalyseData();
}
private void LoadData(IEnumerable list)
{
this.trRectify.Nodes.Clear();
this.trRectify.ShowBorder = false;
this.trRectify.ShowHeader = false;
this.trRectify.EnableIcons = true;
this.trRectify.AutoScroll = true;
this.trRectify.EnableSingleClickExpand = true;
TreeNode rootNode = new TreeNode
{
Text = "全部",
NodeID = "ALL",
EnableClickEvent = true,
Expanded = true
};
this.trRectify.Nodes.Add(rootNode);
BoundTree(rootNode.Nodes, list);
}
///
/// 加载树
///
///
///
private void BoundTree(TreeNodeCollection nodes, IEnumerable list)
{
TreeNode tn = null;
foreach (var item in list)
{
tn = new TreeNode
{
Text = item.ToString(),
NodeID = item.ToString(),
EnableClickEvent = true
};
nodes.Add(tn);
}
}
#region 点击树节点
protected void trRectify_NodeCommand(object sender, TreeCommandEventArgs e) {
var SystemName = this.trRectify.SelectedNodeID;
if (SystemName == "ALL")
{
AnalyseData();
}
else
{
var sTime = DateTime.Now.AddDays(-7);
var eTime = DateTime.Now; ;
//如果没有填写日期,则是七天内的
if (!string.IsNullOrEmpty(txtStarTime.Text) && !string.IsNullOrEmpty(txtEndTime.Text))
{
sTime = Convert.ToDateTime(txtStarTime.Text);
eTime = Convert.ToDateTime(txtEndTime.Text);
}
DataTable dtTime = new DataTable();
dtTime.Columns.Add("日期", typeof(string));
dtTime.Columns.Add("Finished", typeof(string));
dtTime.Columns.Add("In Progress", typeof(string));
dtTime.Columns.Add("Not Start", typeof(string));
var systemBol = false;
for (var i = sTime; i <= eTime; i = i.AddDays(1))
{
var finishedCount = 0;
var inProgress = 0;
var notStart = 0;
DataRow rowTime = dtTime.NewRow();
Model.SpTDesktopItem newspItem = new Model.SpTDesktopItem();
rowTime["日期"] = string.Format("{0:yyyy-MM-dd}", i); ;
//根据日期查询当前system的数量
var systemListbyDate = Funs.DB.View_TransferDetail.Where(x => x.Projectid == ProjectId && x.SystemName == SystemName
&& x.FDate >= Convert.ToDateTime(rowTime["日期"])
&& x.FDate < Convert.ToDateTime(rowTime["日期"]).AddDays(1)).ToList();
//查询TestPackage 去重
var testpackageList = (from x in systemListbyDate select x.TestPackage).Distinct();
if (testpackageList.ToList().Count > 0)
{
systemBol = true;
}
foreach (var item in testpackageList)
{
//查询当前日期每个testpackage的数量
var systemSumCount = systemListbyDate.Where(x => x.TestPackage == item).ToList().Count;
//子系统中完成的数量
var subSystemSumCount = systemListbyDate.Where(x => x.TestPackage == item &&
x.Status.ToLower() == "finished").ToList().Count;
//子系统中没完成的情况
var subSystemSumNotStartCount = systemListbyDate.Where(x => x.TestPackage == item &&
(x.Status.ToLower() == "not start" || x.Status == "" || x.Status == null)).ToList().Count;
//如果总数量等于完成的数量,完成量+1
if (systemSumCount == subSystemSumCount)
{
//如果都是完成,需要最后 12表 test packge 必须是Finished才能是完成
var punchlistFromList = Funs.DB.Transfer_PunchlistFrom.Where(x => x.ProjectId == ProjectId
&& x.SystemName==SystemName
&& x.Test_Package == item
&& x.PUNCH_ITEM_FINISH_DATE >= Convert.ToDateTime(rowTime["日期"])
&& x.PUNCH_ITEM_FINISH_DATE < Convert.ToDateTime(rowTime["日期"]).AddDays(1)).ToList();
//如果查到
if (punchlistFromList.Count > 0)
{
//12表当前日期完成的数量
var punchlistFromFinshCount = punchlistFromList.Where(x => x.PUNCH_ITEM_STATUS.ToLower() == "finished").ToList().Count();
//如果完成的数量等于总得数量,则是完成
if (punchlistFromFinshCount == punchlistFromList.Count)
{
finishedCount += 1;
}
else
{
inProgress += 1;
}
}
else
{
inProgress += 1;
}
}
//如果总数量等于not start,未开始量+1
else if (systemSumCount == subSystemSumNotStartCount)
{
notStart += 1;
}
else
{
inProgress += 1;
}
}
rowTime["Finished"] = finishedCount;
rowTime["In Progress"] = inProgress;
rowTime["Not Start"] = notStart;
dtTime.Rows.Add(rowTime);
}
if (systemBol)
{
this.ChartUc.CreateChart(BLL.ChartControlService.GetDataSourceChart(dtTime, "SYSTEM PROGRESS REPORT", this.drpChartType.SelectedValue, 1100, 600, false));
}
}
}
#endregion
}
}