private async Task <Approver_BillInfoResponse> GetBillInfoMain(Approver_BillInfoRequest approver_BillInfoRequest, DbTransaction trans) { var result = new Approver_BillInfoResponse(); approver_BillInfoRequest.BeginDate = approver_BillInfoRequest.BeginDate >= DateTime.Parse("2019-11-15") ? approver_BillInfoRequest.BeginDate : DateTime.Parse("2019-11-16"); try { TimeSpan allTimeSpanUsed = new TimeSpan(); string allUsedTime = string.Empty; var mainData = new List <Approver_BillInfo>(); var approvalCommentsmain = _sqlserverSql.Select <ApprovalComments>() .Where( app => app.ApprovalID == approver_BillInfoRequest.JobNumber && app.ApprovalDate >= approver_BillInfoRequest.BeginDate && app.ApprovalDate <= approver_BillInfoRequest.EndDate ).WithTransaction(trans); //var sql = approvalCommentsmain.ToSql(); var approvalCommentsdata = await approvalCommentsmain.ToListAsync(o => new{ o.ApprovalDate, o.BillNo, o.AType, o.ApprovalStatus, o.ApprovalID, o.CommentsId, o.BillClassid }); if (approvalCommentsdata.Count == 0) { result.code = -1; result.message = "zz"; return(result); } var billclasss = await _sqlserverSql.Select <BillClass>().WithTransaction(trans).ToListAsync(b => new { b.BillClassid, b.BillName }); foreach (var item in approvalCommentsdata) { string UsedTime = string.Empty; TimeSpan timespanUsedTime = new TimeSpan(); if (item.ApprovalStatus == 0) { timespanUsedTime = DateTime.Now - item.ApprovalDate.Value; UsedTime = CommonHelper.GetUsedTime(timespanUsedTime); mainData.Add(new Approver_BillInfo { ApproverType = item.AType, BillType = billclasss.FirstOrDefault(o => o.BillClassid == item.BillClassid).BillName.Trim(), BillNo = item.BillNo, UsedTime = UsedTime, TimeSpanUsed = timespanUsedTime, ApprovalState = 0 }); } else //已审批 { //之前是否计算了这个单据的时间 var isExistBillNo = mainData.Where(o => o.BillNo == item.BillNo); if (!isExistBillNo.Any()) { //求出这个单据流程的上一级审批时间 var nowBillNoInfo = await _sqlserverSql.Select <ApprovalComments>().Where(c => c.BillNo == item.BillNo).OrderBy(c => c.ApprovalDate).WithTransaction(trans).ToListAsync(); //zhege wanyi shifou zai diyige shenpiguo if (nowBillNoInfo[0].ApprovalID == item.ApprovalID) { DateTime beginTime = new DateTime(); //求开始时间 if (item.BillNo.ToLower().StartsWith("cl")) { var expeany = await _sqlserverSql.Select <ExpeTrav>().Where(o => o.BillNo == item.BillNo).WithTransaction(trans).ToOneAsync(); if (expeany != null) { beginTime = expeany.BillDate; } } else if (item.BillNo.ToLower().StartsWith("zdf")) { var expeany = await _sqlserverSql.Select <ExpeEnteMent>().Where(o => o.BillNo == item.BillNo).WithTransaction(trans).ToOneAsync(); if (expeany != null) { beginTime = expeany.BillDate; } } else { var expeany = await _sqlserverSql.Select <ExpeOther>().Where(o => o.BillNo == item.BillNo).WithTransaction(trans).ToOneAsync(); if (expeany != null) { beginTime = expeany.BillDate; } } if (beginTime >= approver_BillInfoRequest.BeginDate && beginTime <= approver_BillInfoRequest.EndDate) { timespanUsedTime = item.ApprovalDate.Value - beginTime; UsedTime = CommonHelper.GetUsedTime(timespanUsedTime); if (timespanUsedTime.TotalSeconds > 2) { mainData.Add(new Approver_BillInfo { ApproverType = item.AType, BillType = billclasss.FirstOrDefault(o => o.BillClassid == item.BillClassid).BillName.Trim(), BillNo = item.BillNo, UsedTime = UsedTime, TimeSpanUsed = timespanUsedTime, ApprovalState = 1 }); } } } else //不是第一个流程 { //求出上一个流程的审批时间 var tempComment = nowBillNoInfo.Where(o => o.CommentsId == item.CommentsId).First(); int sygLc = nowBillNoInfo.IndexOf(tempComment); timespanUsedTime = tempComment.ApprovalDate.Value - nowBillNoInfo[sygLc - 1].ApprovalDate.Value; UsedTime = CommonHelper.GetUsedTime(timespanUsedTime); // I am Very irritable, do not want to get a result that this bill 是否是这个人发起又审批的了 // if you see this,good luck to you if (timespanUsedTime.TotalSeconds > 2) { mainData.Add(new Approver_BillInfo { ApproverType = item.AType, BillType = billclasss.FirstOrDefault(o => o.BillClassid == item.BillClassid).BillName.Trim(), BillNo = item.BillNo, UsedTime = UsedTime, TimeSpanUsed = timespanUsedTime, ApprovalState = 1 }); } } } } if (timespanUsedTime.TotalSeconds > 2) { allTimeSpanUsed = allTimeSpanUsed + timespanUsedTime; allUsedTime = CommonHelper.GetUsedTime(allTimeSpanUsed); } } if (mainData.Count == 0) { result.code = -1; result.message = "获取数据失败"; return(result); } result.code = 0; result.message = "获取数据成功"; result.data = new Approver_BillInfoData { Total = mainData.Count, Items = mainData, AllTimeSpanUsed = allTimeSpanUsed, AllTimeUsed = allUsedTime }; return(result); } catch (Exception ex) { result.code = -1; result.message = "获取数据失败" + ex.Message; return(result); } }
public async Task <Approver_BillInfoResponse> GetBillInfo(Approver_BillInfoRequest approver_BillInfoRequest) { if (approver_BillInfoRequest.Limit == 0 || approver_BillInfoRequest.Page == 0) { approver_BillInfoRequest.Limit = 10; approver_BillInfoRequest.Page = 1; } var result = new Approver_BillInfoResponse(); if (approver_BillInfoRequest == null) { result.code = -1; result.message = "请检查入参"; _ = Task.Run(() => { CommonHelper.TxtLog("统计审批人单据出参", JsonConvert.SerializeObject(result)); }); return(result); } approver_BillInfoRequest.BeginDate = approver_BillInfoRequest.BeginDate >= DateTime.Parse("2019-11-22") ? approver_BillInfoRequest.BeginDate : DateTime.Parse("2019-11-22"); try { CommonHelper.TxtLog("统计审批人单据入参", JsonConvert.SerializeObject(approver_BillInfoRequest)); TimeSpan allTimeSpanUsed = new TimeSpan(); string allUsedTime = string.Empty; var mainData = new List <Approver_BillInfo>(); var approvalCommentsmain = _sqlserverSql.Select <ApprovalComments>() .Where( app => app.ApprovalID == approver_BillInfoRequest.JobNumber && app.ApprovalDate >= approver_BillInfoRequest.BeginDate && app.ApprovalDate <= approver_BillInfoRequest.EndDate ); var approvalCommentsdata = await approvalCommentsmain.ToListAsync(); if (approvalCommentsdata.Count == 0) { result.code = -1; result.message = "请检查入参"; return(result); } var billclasss = await _sqlserverSql.Select <BillClass>().ToListAsync(b => new { b.BillClassid, b.BillName }); foreach (var item in approvalCommentsdata) { string UsedTime = string.Empty; TimeSpan timespanUsedTime = new TimeSpan(); //查询当前单号的花费时间 //如果是正在进行的,用当前时间减去 if (item.ApprovalStatus == 0) { timespanUsedTime = DateTime.Now - item.ApprovalDate.Value; UsedTime = CommonHelper.GetUsedTime(timespanUsedTime); mainData.Add(new Approver_BillInfo { ApproverType = item.AType, BillType = billclasss.FirstOrDefault(o => o.BillClassid == item.BillClassid).BillName.Trim(), BillNo = item.BillNo, UsedTime = UsedTime, TimeSpanUsed = timespanUsedTime, ApprovalState = 0 }); } else //已审批 { //之前是否计算了这个单据的时间 var isExistBillNo = mainData.Where(o => o.BillNo == item.BillNo); if (!isExistBillNo.Any()) { //求出这个单据流程的上一级审批时间 var nowBillNoInfo = await _sqlserverSql.Select <ApprovalComments>().Where(c => c.BillNo == item.BillNo).OrderBy(c => c.ApprovalDate).ToListAsync(); //zhege wanyi shifou zai diyige shenpiguo if (nowBillNoInfo[0].ApprovalID == item.ApprovalID) { DateTime beginTime = new DateTime(); //求开始时间 if (item.BillNo.ToLower().StartsWith("cl")) { beginTime = await _sqlserverSql.Select <ExpeTrav>().Where(o => o.BillNo == item.BillNo).FirstAsync(o => o.BillDate); } else if (item.BillNo.ToLower().StartsWith("zdf")) { beginTime = await _sqlserverSql.Select <ExpeEnteMent>().Where(o => o.BillNo == item.BillNo).FirstAsync(o => o.BillDate); } else { beginTime = await _sqlserverSql.Select <ExpeOther>().Where(o => o.BillNo == item.BillNo).FirstAsync(o => o.BillDate); } if (beginTime >= approver_BillInfoRequest.BeginDate && beginTime <= approver_BillInfoRequest.EndDate) { timespanUsedTime = item.ApprovalDate.Value - beginTime; UsedTime = CommonHelper.GetUsedTime(timespanUsedTime); if (timespanUsedTime.TotalSeconds > 2) { mainData.Add(new Approver_BillInfo { ApproverType = item.AType, BillType = billclasss.FirstOrDefault(o => o.BillClassid == item.BillClassid).BillName.Trim(), BillNo = item.BillNo, UsedTime = UsedTime, TimeSpanUsed = timespanUsedTime, ApprovalState = 1 }); } } } else //不是第一个流程 { //求出上一个流程的审批时间 var tempComment = nowBillNoInfo.Where(o => o.CommentsId == item.CommentsId).First(); int sygLc = nowBillNoInfo.IndexOf(tempComment); timespanUsedTime = tempComment.ApprovalDate.Value - nowBillNoInfo[sygLc - 1].ApprovalDate.Value; UsedTime = CommonHelper.GetUsedTime(timespanUsedTime); if (timespanUsedTime.TotalSeconds > 2) { mainData.Add(new Approver_BillInfo { ApproverType = item.AType, BillType = billclasss.FirstOrDefault(o => o.BillClassid == item.BillClassid).BillName.Trim(), BillNo = item.BillNo, UsedTime = UsedTime, TimeSpanUsed = timespanUsedTime, ApprovalState = 1 }); } } // I am Very irritable, do not want to get a result that this bill 是否是这个人发起又审批的了 // if you see this,good luck to you } else//那就是一个单据多个审批角色,时间忽略不计,角色上当前的 { var existIndex = mainData.IndexOf(isExistBillNo.FirstOrDefault()); mainData[existIndex].ApproverType = $"{mainData[existIndex].ApproverType},{item.AType}"; } } if (timespanUsedTime.TotalSeconds > 2) { allTimeSpanUsed = allTimeSpanUsed + timespanUsedTime; allUsedTime = CommonHelper.GetUsedTime(allTimeSpanUsed); } } if (mainData.Count == 0) { result.code = -1; result.message = "获取数据失败"; return(result); } var maindatafy = mainData.Skip((approver_BillInfoRequest.Page - 1) * approver_BillInfoRequest.Limit).Take(approver_BillInfoRequest.Limit).ToList(); result.code = 0; result.message = "获取数据成功"; result.data = new Approver_BillInfoData { Total = mainData.Count, Items = maindatafy, AllTimeSpanUsed = allTimeSpanUsed, AllTimeUsed = allUsedTime }; return(result); } catch (Exception ex) { result.code = -1; result.message = "获取数据失败" + ex.Message; _ = Task.Run(() => { CommonHelper.TxtLog("统计审批人单据出参", JsonConvert.SerializeObject(result)); CommonHelper.TxtLog("异常错误信息", JsonConvert.SerializeObject(ex)); }); return(result); } }