575 lines
30 KiB
C#
575 lines
30 KiB
C#
using System;
|
||
using SqlSugar;
|
||
using Infrastructure.Attribute;
|
||
using Infrastructure.Extensions;
|
||
using RIZO.Model;
|
||
using RIZO.Model.Dto;
|
||
using RIZO.Model.MES.product;
|
||
using RIZO.Model.MES.product.Dto;
|
||
using RIZO.Repository;
|
||
using RIZO.Service.MES.product.IService;
|
||
using System.Linq;
|
||
using Microsoft.AspNetCore.Http;
|
||
using Infrastructure;
|
||
using static System.Runtime.InteropServices.JavaScript.JSType;
|
||
using Mapster;
|
||
using Microsoft.AspNetCore.Mvc;
|
||
using NPOI.SS.Formula.Functions;
|
||
using NPOI.SS.UserModel;
|
||
using NPOI.XSSF.UserModel;
|
||
using System.Globalization;
|
||
using NPOI.HSSF.Record;
|
||
using JinianNet.JNTemplate;
|
||
namespace RIZO.Service.MES.product
|
||
{
|
||
/// <summary>
|
||
/// 日计划达成率Service业务层处理
|
||
/// </summary>
|
||
[AppService(ServiceType = typeof(IProPlanAchievementrateService), ServiceLifetime = LifeTime.Transient)]
|
||
public class ProPlanAchievementrateService : BaseService<ProPlanAchievementrate>, IProPlanAchievementrateService
|
||
{
|
||
/// <summary>
|
||
/// 查询日计划达成率列表
|
||
/// </summary>
|
||
/// <param name="parm"></param>
|
||
/// <returns></returns>
|
||
public PagedInfo<ProPlanAchievementrateDto> GetList(ProPlanAchievementrateQueryDto parm)
|
||
{
|
||
var predicate = Expressionable.Create<ProPlanAchievementrate>()
|
||
.AndIF(!string.IsNullOrEmpty(parm.Project), it => it.Project.Contains(parm.Project))
|
||
.AndIF(parm.RecordDate > DateTime.MinValue, it => it.RecordDate == parm.RecordDate)
|
||
;
|
||
|
||
var response = Queryable()
|
||
.Where(predicate.ToExpression())
|
||
.ToPage<ProPlanAchievementrate, ProPlanAchievementrateDto>(parm);
|
||
|
||
return response;
|
||
}
|
||
/// <summary>
|
||
/// 生成每日的计划达成率
|
||
/// </summary>
|
||
/// <param name="parm"></param>
|
||
/// <returns></returns>
|
||
|
||
public bool DayofplanAchievementRate([FromBody] ProPlanAchievementrateQueryDto3 parm)
|
||
{
|
||
int result = 0;
|
||
List<ProPlanAchievementrate> AproPlanAchievementrates = Context.Queryable<ProWorkorder>()
|
||
.LeftJoin<ProReportwork>((w, r) => w.Workorder == r.FkWorkorder)
|
||
.Where((w, r) => w.WorkorderDate == parm.GenarateDate && w.AorBgroup == "A")
|
||
.GroupBy((w, r) => new { w.Project, w.AorBgroup })
|
||
.Select((w, r) => new ProPlanAchievementrate()
|
||
{
|
||
Project = w.Project,
|
||
AgroupProductNum = SqlFunc.AggregateSum(r.FinishedNum),
|
||
AgroupMonitor = SqlFunc.AggregateMax(w.Groupleader),
|
||
AgroupPlanNum = SqlFunc.AggregateSum(w.DeliveryNum),
|
||
AgroupCompletionRate = SqlFunc.Round<decimal>((decimal)(SqlFunc.AggregateSum(r.FinishedNum) / SqlFunc.AggregateSum(w.DeliveryNum)), 2) * 100,
|
||
//BgroupProductNum = SqlFunc.AggregateSum(r.FinishedNum),
|
||
//BgroupPlanNum = SqlFunc.AggregateSum(w.DeliveryNum),
|
||
//BgroupCompletionRate = SqlFunc.Round<decimal>((decimal)(SqlFunc.AggregateSum(r.FinishedNum) / SqlFunc.AggregateSum(w.DeliveryNum)), 2) * 100,
|
||
SummaryActualNum = SqlFunc.AggregateSum(r.FinishedNum),
|
||
SummaryPlanNum = SqlFunc.AggregateSum(w.DeliveryNum),
|
||
SummaryPlanAchievementRate = SqlFunc.Round<decimal>((decimal)(SqlFunc.AggregateSum(r.FinishedNum) / SqlFunc.AggregateSum(w.DeliveryNum)), 2) * 100,
|
||
RecordDate = parm.GenarateDate
|
||
}).ToList();
|
||
|
||
List<ProPlanAchievementrate> BproPlanAchievementrates = Context.Queryable<ProWorkorder>()
|
||
.LeftJoin<ProReportwork>((w, r) => w.Workorder == r.FkWorkorder)
|
||
.Where((w, r) => w.WorkorderDate == parm.GenarateDate && w.AorBgroup == "B")
|
||
.GroupBy((w, r) => new { w.Project, w.AorBgroup, w.Groupleader })
|
||
.Select((w, r) => new ProPlanAchievementrate()
|
||
{
|
||
Project = w.Project,
|
||
//AgroupProductNum = SqlFunc.AggregateSum(r.FinishedNum),
|
||
//AgroupPlanNum = SqlFunc.AggregateSum(w.DeliveryNum),
|
||
//AgroupCompletionRate = SqlFunc.Round<decimal>((decimal)(SqlFunc.AggregateSum(r.FinishedNum) / SqlFunc.AggregateSum(w.DeliveryNum)), 2) * 100,
|
||
BgroupProductNum = SqlFunc.AggregateSum(r.FinishedNum),
|
||
BgroupPlanNum = SqlFunc.AggregateSum(w.DeliveryNum),
|
||
BgroupMonitor = SqlFunc.AggregateMax(w.Groupleader),
|
||
BgroupCompletionRate = SqlFunc.Round<decimal>((decimal)(SqlFunc.AggregateSum(r.FinishedNum) / SqlFunc.AggregateSum(w.DeliveryNum)), 2) * 100,
|
||
SummaryActualNum = SqlFunc.AggregateSum(r.FinishedNum),
|
||
SummaryPlanNum = SqlFunc.AggregateSum(w.DeliveryNum),
|
||
SummaryPlanAchievementRate = SqlFunc.Round<decimal>((decimal)(SqlFunc.AggregateSum(r.FinishedNum) / SqlFunc.AggregateSum(w.DeliveryNum)), 2) * 100,
|
||
RecordDate = parm.GenarateDate
|
||
}).ToList();
|
||
|
||
if (AproPlanAchievementrates.Count > 0 && BproPlanAchievementrates.Count > 0)
|
||
{
|
||
var merged = AproPlanAchievementrates
|
||
.Join(
|
||
BproPlanAchievementrates,
|
||
a => a.Project, // A 的 key(用于 Join)
|
||
b => b.Project, // B 的 key(用于 Join)
|
||
(a, b) => new ProPlanAchievementrate
|
||
{
|
||
Project = a.Project,
|
||
|
||
// A 组数据
|
||
AgroupProductNum = a.AgroupProductNum,
|
||
AgroupPlanNum = a.AgroupPlanNum,
|
||
AgroupCompletionRate = a.AgroupCompletionRate,
|
||
AgroupMonitor = a.AgroupMonitor,
|
||
|
||
// B 组数据
|
||
BgroupProductNum = b.BgroupProductNum,
|
||
BgroupPlanNum = b.BgroupPlanNum,
|
||
BgroupCompletionRate = b.BgroupCompletionRate,
|
||
BgroupMonitor = b.BgroupMonitor,
|
||
|
||
// 汇总数据
|
||
SummaryActualNum = (a.SummaryActualNum ?? 0) + (b.SummaryActualNum ?? 0),
|
||
SummaryPlanNum = (a.SummaryPlanNum ?? 0) + (b.SummaryPlanNum ?? 0),
|
||
SummaryPlanAchievementRate = SqlFunc.Round<decimal>(
|
||
(decimal)((a.SummaryActualNum ?? 0) + (b.SummaryActualNum ?? 0)) /
|
||
(decimal)((a.SummaryPlanNum ?? 0) + (b.SummaryPlanNum ?? 0)), 2) * 100,
|
||
|
||
RecordDate = a.RecordDate,
|
||
CreatedTime = DateTime.Now,
|
||
UpdatedTime = DateTime.Now,
|
||
}
|
||
);
|
||
|
||
List<ProPlanAchievementrate> finalList = merged.ToList();
|
||
|
||
UseTran2(() =>
|
||
{
|
||
Context.Deleteable<ProPlanAchievementrate>().Where(it => it.RecordDate == parm.GenarateDate);
|
||
result = Context.Insertable(finalList).ExecuteCommand();
|
||
|
||
});
|
||
|
||
}
|
||
|
||
|
||
return result > 0;
|
||
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 查询月计划达成率列表
|
||
/// </summary>
|
||
/// <param name="parm"></param>
|
||
/// <returns></returns>
|
||
public PagedInfo<ProPlanAchievementrateDto> GetListByMonth(ProPlanAchievementrateQueryDto2 parm)
|
||
{
|
||
(DateTime FirstDay, DateTime LastDay) Handlemonth = GetFirstAndLastDayOfMonth(parm.SearchYearMonth);
|
||
var predicate = Expressionable.Create<ProPlanAchievementrate>()
|
||
.AndIF(!string.IsNullOrEmpty(parm.Project), it => it.Project.Contains(parm.Project))
|
||
.And(it => it.RecordDate >= Handlemonth.FirstDay && it.RecordDate <= Handlemonth.LastDay)
|
||
;
|
||
|
||
var response = Queryable()
|
||
|
||
.Where(predicate.ToExpression())
|
||
.GroupBy(it => it.Project)
|
||
.Select(it => new ProPlanAchievementrate()
|
||
{
|
||
Project = it.Project,
|
||
AgroupPlanNum = SqlFunc.AggregateSum(it.AgroupPlanNum ?? 0),
|
||
AgroupProductNum = SqlFunc.AggregateSum(it.AgroupProductNum ?? 0),
|
||
AgroupCompletionRate = SqlFunc.AggregateAvg(it.AgroupCompletionRate),
|
||
BgroupPlanNum = SqlFunc.AggregateSum(it.BgroupPlanNum ?? 0),
|
||
BgroupProductNum = SqlFunc.AggregateSum(it.BgroupProductNum ?? 0),
|
||
BgroupCompletionRate = SqlFunc.AggregateAvg(it.BgroupCompletionRate),
|
||
SummaryActualNum = SqlFunc.AggregateSum(it.SummaryActualNum ?? 0),
|
||
SummaryPlanNum = SqlFunc.AggregateSum(it.SummaryPlanNum ?? 0),
|
||
SummaryPlanAchievementRate = SqlFunc.AggregateAvg(it.SummaryPlanAchievementRate),
|
||
DownQuality = SqlFunc.AggregateSum(it.DownQuality ?? 0),
|
||
DownSuppler = SqlFunc.AggregateSum(it.DownSuppler ?? 0),
|
||
DownDeviceFailure = SqlFunc.AggregateSum(it.DownDeviceFailure ?? 0),
|
||
DownDeviceDebug = SqlFunc.AggregateSum(it.DownDeviceDebug ?? 0),
|
||
DownLogisticsWaitMaterial = SqlFunc.AggregateSum(it.DownLogisticsWaitMaterial ?? 0),
|
||
DownLackMaterial = SqlFunc.AggregateSum(it.DownLackMaterial ?? 0),
|
||
|
||
DownInjection = SqlFunc.AggregateSum(it.DownInjection ?? 0),
|
||
DownAssembly = SqlFunc.AggregateSum(it.DownAssembly ?? 0),
|
||
AllLineStopTime = SqlFunc.AggregateSum(it.AllLineStopTime ?? 0),
|
||
|
||
RecordDate = Handlemonth.FirstDay
|
||
})
|
||
.ToPage<ProPlanAchievementrate, ProPlanAchievementrateDto>(parm);
|
||
|
||
return response;
|
||
}
|
||
|
||
private (DateTime FirstDay, DateTime LastDay) GetFirstAndLastDayOfMonth(DateTime date)
|
||
{
|
||
DateTime firstDay = new DateTime(date.Year, date.Month, 1);
|
||
int lastDay = DateTime.DaysInMonth(date.Year, date.Month);
|
||
DateTime lastDayDate = new DateTime(date.Year, date.Month, lastDay);
|
||
|
||
return (firstDay, lastDayDate);
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 获取详情
|
||
/// </summary>
|
||
/// <param name="Id"></param>
|
||
/// <returns></returns>
|
||
public ProPlanAchievementrate GetInfo(int Id)
|
||
{
|
||
var response = Queryable()
|
||
.Where(x => x.Id == Id)
|
||
.First();
|
||
|
||
return response;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 添加日计划达成率
|
||
/// </summary>
|
||
/// <param name="model"></param>
|
||
/// <returns></returns>
|
||
public ProPlanAchievementrate AddProPlanAchievementrate(ProPlanAchievementrate model)
|
||
{
|
||
|
||
return Context.Insertable(model).IgnoreColumns(it => new { it.Id }).ExecuteReturnEntity();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 修改日计划达成率
|
||
/// </summary>
|
||
/// <param name="model"></param>
|
||
/// <returns></returns>
|
||
public int UpdateProPlanAchievementrate(ProPlanAchievementrate model)
|
||
{
|
||
//var response = Update(w => w.Id == model.Id, it => new ProPlanAchievementrate()
|
||
//{
|
||
// Project = model.Project,
|
||
// AgroupMonitor = model.AgroupMonitor,
|
||
// AgroupProductNum = model.AgroupProductNum,
|
||
// AgroupStandardYield = model.AgroupStandardYield,
|
||
// AgroupPlanNum = model.AgroupPlanNum,
|
||
// AgroupCompletionRate = model.AgroupCompletionRate,
|
||
// BgroupMonitor = model.BgroupMonitor,
|
||
// BgroupProductNum = model.BgroupProductNum,
|
||
// BgroupStandardYield = model.BgroupStandardYield,
|
||
// BgroupPlanNum = model.BgroupPlanNum,
|
||
// BgroupCompletionRate = model.BgroupCompletionRate,
|
||
// SummaryActualNum = model.SummaryActualNum,
|
||
// SummaryPlanNum = model.SummaryPlanNum,
|
||
// SummaryPlanAchievementRate = model.SummaryPlanAchievementRate,
|
||
// DownQuality = model.DownQuality,
|
||
// DownSuppler = model.DownSuppler,
|
||
// DownDeviceFailure = model.DownDeviceFailure,
|
||
// DownDeviceDebug = model.DownDeviceDebug,
|
||
// DownLogisticsWaitMaterial = model.DownLogisticsWaitMaterial,
|
||
// DownLackMaterial = model.DownLackMaterial,
|
||
// DownProject = model.DownProject,
|
||
// DownInjection = model.DownInjection,
|
||
// DownAssembly = model.DownAssembly,
|
||
// AllLineStopTime = model.AllLineStopTime,
|
||
// MainProblemDescription = model.MainProblemDescription,
|
||
// Strategy = model.Strategy,
|
||
// ResponsiblePerson = model.ResponsiblePerson,
|
||
// RecordDate = model.RecordDate,
|
||
// CreatedBy = model.CreatedBy,
|
||
// CreatedTime = model.CreatedTime,
|
||
// UpdatedBy = model.UpdatedBy,
|
||
// UpdatedTime = model.UpdatedTime,
|
||
//});
|
||
//return response;
|
||
return Update(model, true);
|
||
}
|
||
|
||
|
||
|
||
public List<ProPlanAchievementrateDto> GetTodayList()
|
||
{
|
||
DateTime today = DateTime.Today;
|
||
var response = Queryable()
|
||
.Where(it => it.RecordDate == today)
|
||
.ToList()
|
||
.Adapt<List<ProPlanAchievementrate>, List<ProPlanAchievementrateDto>>()
|
||
;
|
||
return response;
|
||
}
|
||
public List<ProPlanAchievementrateDto> GetTodayRealTimeList()
|
||
{
|
||
ProPlanAchievementrateQueryDto3 parm = new ProPlanAchievementrateQueryDto3();
|
||
parm.GenarateDate = DateTime.Today;
|
||
bool result = DayofplanAchievementRate(parm);
|
||
var response = Queryable()
|
||
.Where(it => it.RecordDate == parm.GenarateDate)
|
||
.ToList()
|
||
.Adapt<List<ProPlanAchievementrate>, List<ProPlanAchievementrateDto>>()
|
||
;
|
||
return response;
|
||
}
|
||
public List<ProPlanAchievementrateDto> GetYesterdayList()
|
||
{
|
||
DateTime yesterday = DateTime.Today.AddDays(-1);
|
||
var response = Queryable()
|
||
.Where(it => it.RecordDate == yesterday)
|
||
.ToList()
|
||
.Adapt<List<ProPlanAchievementrate>, List<ProPlanAchievementrateDto>>()
|
||
;
|
||
return response;
|
||
}
|
||
|
||
public List<ProPlanAchievementrateDto> GetListByMonth()
|
||
{
|
||
(DateTime FirstDay, DateTime LastDay) Handlemonth = GetFirstAndLastDayOfMonth(DateTime.Today);
|
||
var predicate = Expressionable.Create<ProPlanAchievementrate>()
|
||
|
||
.And(it => it.RecordDate >= Handlemonth.FirstDay && it.RecordDate <= Handlemonth.LastDay)
|
||
;
|
||
|
||
var response = Queryable()
|
||
|
||
.Where(predicate.ToExpression())
|
||
.GroupBy(it => it.Project)
|
||
.Select(it => new ProPlanAchievementrate()
|
||
{
|
||
Project = it.Project,
|
||
AgroupPlanNum = SqlFunc.AggregateSum(it.AgroupPlanNum ?? 0),
|
||
AgroupProductNum = SqlFunc.AggregateSum(it.AgroupProductNum ?? 0),
|
||
AgroupCompletionRate = SqlFunc.AggregateAvg(it.AgroupCompletionRate),
|
||
BgroupPlanNum = SqlFunc.AggregateSum(it.BgroupPlanNum ?? 0),
|
||
BgroupProductNum = SqlFunc.AggregateSum(it.BgroupProductNum ?? 0),
|
||
BgroupCompletionRate = SqlFunc.AggregateAvg(it.BgroupCompletionRate),
|
||
SummaryActualNum = SqlFunc.AggregateSum(it.SummaryActualNum ?? 0),
|
||
SummaryPlanNum = SqlFunc.AggregateSum(it.SummaryPlanNum ?? 0),
|
||
SummaryPlanAchievementRate = SqlFunc.AggregateAvg(it.SummaryPlanAchievementRate),
|
||
DownQuality = SqlFunc.AggregateSum(it.DownQuality ?? 0),
|
||
DownSuppler = SqlFunc.AggregateSum(it.DownSuppler ?? 0),
|
||
DownDeviceFailure = SqlFunc.AggregateSum(it.DownDeviceFailure ?? 0),
|
||
DownDeviceDebug = SqlFunc.AggregateSum(it.DownDeviceDebug ?? 0),
|
||
DownLogisticsWaitMaterial = SqlFunc.AggregateSum(it.DownLogisticsWaitMaterial ?? 0),
|
||
DownLackMaterial = SqlFunc.AggregateSum(it.DownLackMaterial ?? 0),
|
||
|
||
DownInjection = SqlFunc.AggregateSum(it.DownInjection ?? 0),
|
||
DownAssembly = SqlFunc.AggregateSum(it.DownAssembly ?? 0),
|
||
AllLineStopTime = SqlFunc.AggregateSum(it.AllLineStopTime ?? 0),
|
||
|
||
RecordDate = Handlemonth.FirstDay
|
||
})
|
||
.ToList()
|
||
.Adapt<List<ProPlanAchievementrate>, List<ProPlanAchievementrateDto>>();
|
||
|
||
return response;
|
||
}
|
||
|
||
|
||
public int ImportData(IFormFile formFile, string name, DateTime RecordDate)
|
||
{
|
||
using (var stream = formFile.OpenReadStream())
|
||
{
|
||
try
|
||
{
|
||
IWorkbook workbook = new XSSFWorkbook(stream);
|
||
ISheet sheet = workbook.GetSheetAt(0);
|
||
|
||
|
||
List<ProPlanAchievementrate> AchievementrateList = new List<ProPlanAchievementrate>();
|
||
// 遍历每一行
|
||
for (int row = 4; row <= sheet.LastRowNum; row++)
|
||
{
|
||
IRow currentRow = sheet.GetRow(row);
|
||
if (currentRow != null && currentRow.GetCell(0) != null) // 确保行不为空
|
||
{
|
||
ProPlanAchievementrate achievementrate = new ProPlanAchievementrate();
|
||
|
||
//获取项目号
|
||
if (currentRow.GetCell(0) != null && currentRow.GetCell(0).CellType == CellType.String)
|
||
achievementrate.Project = currentRow.GetCell(0).ToString();
|
||
|
||
//A班班长
|
||
if (currentRow.GetCell(1) != null && currentRow.GetCell(1).CellType == CellType.String)
|
||
achievementrate.AgroupMonitor = currentRow.GetCell(1).ToString();
|
||
//A班生产数量
|
||
if (currentRow.GetCell(2) != null && currentRow.GetCell(2).CellType == CellType.Numeric)
|
||
achievementrate.AgroupProductNum = (int)currentRow.GetCell(2).NumericCellValue;
|
||
//A班标准班产
|
||
if (currentRow.GetCell(3) != null && currentRow.GetCell(3).CellType == CellType.Numeric)
|
||
achievementrate.AgroupStandardYield = (int)currentRow.GetCell(3).NumericCellValue;
|
||
|
||
//A班计划数量
|
||
if (currentRow.GetCell(4) != null && currentRow.GetCell(4).CellType == CellType.Numeric)
|
||
achievementrate.AgroupPlanNum = (int)currentRow.GetCell(4).NumericCellValue;
|
||
//A班完成率
|
||
if (currentRow.GetCell(5) != null && currentRow.GetCell(5).CellType == CellType.Numeric)
|
||
achievementrate.AgroupCompletionRate = (decimal)currentRow.GetCell(5).NumericCellValue;
|
||
//B班班长
|
||
if (currentRow.GetCell(6) != null && currentRow.GetCell(6).CellType == CellType.String)
|
||
achievementrate.BgroupMonitor = currentRow.GetCell(6).ToString();
|
||
//B班生产数量
|
||
if (currentRow.GetCell(7) != null && currentRow.GetCell(7).CellType == CellType.Numeric)
|
||
achievementrate.BgroupProductNum = (int)currentRow.GetCell(7).NumericCellValue;
|
||
//B班标准班产
|
||
if (currentRow.GetCell(8) != null && currentRow.GetCell(8).CellType == CellType.Numeric)
|
||
achievementrate.BgroupStandardYield = (int)currentRow.GetCell(8).NumericCellValue;
|
||
//B班计划数量
|
||
if (currentRow.GetCell(9) != null && currentRow.GetCell(9).CellType == CellType.Numeric)
|
||
achievementrate.BgroupPlanNum = (int)currentRow.GetCell(9).NumericCellValue;
|
||
//B班完成率
|
||
if (currentRow.GetCell(10) != null && currentRow.GetCell(10).CellType == CellType.Numeric)
|
||
achievementrate.BgroupCompletionRate = (decimal)currentRow.GetCell(10).NumericCellValue;
|
||
//汇总实际数量
|
||
if (currentRow.GetCell(11) != null && currentRow.GetCell(11).CellType == CellType.Numeric)
|
||
achievementrate.SummaryActualNum = (int)currentRow.GetCell(11).NumericCellValue;
|
||
//汇总计划数量
|
||
if (currentRow.GetCell(12) != null && currentRow.GetCell(12).CellType == CellType.Numeric)
|
||
achievementrate.SummaryPlanNum = (int)currentRow.GetCell(12).NumericCellValue;
|
||
//汇总计划达成率
|
||
if (currentRow.GetCell(13) != null && currentRow.GetCell(13).CellType == CellType.Numeric)
|
||
achievementrate.SummaryPlanAchievementRate = (decimal)currentRow.GetCell(13).NumericCellValue;
|
||
//记录日期
|
||
//if (currentRow.GetCell(14) != null && currentRow.GetCell(14).CellType == CellType.String)
|
||
// achievementrate.RecordDate = DateTime.ParseExact(currentRow.GetCell(14).ToString(), "yyyy-MM-dd", CultureInfo.InvariantCulture);
|
||
//质量问题
|
||
if (currentRow.GetCell(14) != null && currentRow.GetCell(14).CellType == CellType.Numeric)
|
||
achievementrate.DownQuality = (int)currentRow.GetCell(14).NumericCellValue;
|
||
//供应商问题
|
||
if (currentRow.GetCell(15) != null && currentRow.GetCell(15).CellType == CellType.Numeric)
|
||
achievementrate.DownSuppler = (int)currentRow.GetCell(15).NumericCellValue;
|
||
//设备故障
|
||
if (currentRow.GetCell(16) != null && currentRow.GetCell(16).CellType == CellType.Numeric)
|
||
achievementrate.DownDeviceFailure = (int)currentRow.GetCell(16).NumericCellValue;
|
||
//设备调试
|
||
if (currentRow.GetCell(17) != null && currentRow.GetCell(17).CellType == CellType.Numeric)
|
||
achievementrate.DownDeviceDebug = (int)currentRow.GetCell(17).NumericCellValue;
|
||
//物流等待物料
|
||
if (currentRow.GetCell(18) != null && currentRow.GetCell(18).CellType == CellType.Numeric)
|
||
achievementrate.DownLogisticsWaitMaterial = (int)currentRow.GetCell(18).NumericCellValue;
|
||
//物料短缺
|
||
if (currentRow.GetCell(19) != null && currentRow.GetCell(19).CellType == CellType.Numeric)
|
||
achievementrate.DownLackMaterial = (int)currentRow.GetCell(19).NumericCellValue;
|
||
//注塑异常
|
||
if (currentRow.GetCell(20) != null && currentRow.GetCell(20).CellType == CellType.Numeric)
|
||
achievementrate.DownInjection = (int)currentRow.GetCell(20).NumericCellValue;
|
||
//装配异常
|
||
if (currentRow.GetCell(21) != null && currentRow.GetCell(21).CellType == CellType.Numeric)
|
||
achievementrate.DownAssembly = (int)currentRow.GetCell(21).NumericCellValue;
|
||
//全线停机时间
|
||
if (currentRow.GetCell(22) != null && currentRow.GetCell(22).CellType == CellType.Numeric)
|
||
achievementrate.AllLineStopTime = (int)currentRow.GetCell(22).NumericCellValue;
|
||
|
||
//主要问题描述
|
||
if (currentRow.GetCell(23) != null && currentRow.GetCell(23).CellType == CellType.String)
|
||
achievementrate.MainProblemDescription = currentRow.GetCell(23).ToString();
|
||
//改善对策
|
||
if (currentRow.GetCell(24) != null && currentRow.GetCell(24).CellType == CellType.String)
|
||
achievementrate.Strategy = currentRow.GetCell(24).ToString();
|
||
//责任人
|
||
if (currentRow.GetCell(25) != null && currentRow.GetCell(25).CellType == CellType.String)
|
||
achievementrate.ResponsiblePerson = currentRow.GetCell(25).ToString();
|
||
|
||
|
||
achievementrate.RecordDate = RecordDate.Date;
|
||
|
||
AchievementrateList.Add(achievementrate);
|
||
}
|
||
}
|
||
|
||
if (AchievementrateList.Count == 0)
|
||
{
|
||
return 0;
|
||
}
|
||
UseTran2(() =>
|
||
{
|
||
Context.Deleteable<ProPlanAchievementrate>().Where(it => it.RecordDate == RecordDate.Date).ExecuteCommand();
|
||
Context.Insertable(AchievementrateList).ExecuteCommand();
|
||
});
|
||
return AchievementrateList.Count;
|
||
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
throw new CustomException("excel文件异常,请详细核对");
|
||
|
||
|
||
}
|
||
|
||
|
||
|
||
}
|
||
|
||
}
|
||
|
||
|
||
public byte[] ExportData(DateTime exportDate)
|
||
{
|
||
string templatePath = Path.Combine(
|
||
Directory.GetCurrentDirectory(),
|
||
"wwwroot",
|
||
"ImportTemplate",
|
||
"PlanAchievementRate.xlsx"
|
||
);
|
||
|
||
if (!global::System.IO.File.Exists(templatePath))
|
||
{
|
||
throw new CustomException("Excel 模板文件不存在");
|
||
}
|
||
|
||
List<ProPlanAchievementrate> dataList = Context.Queryable<ProPlanAchievementrate>()
|
||
.Where(it => it.RecordDate.HasValue && it.RecordDate.Value.Date == exportDate.Date)
|
||
.ToList();
|
||
|
||
using (var fileStream = new FileStream(templatePath, FileMode.Open, FileAccess.Read))
|
||
{
|
||
IWorkbook workbook = WorkbookFactory.Create(fileStream);
|
||
ISheet sheet = workbook.GetSheetAt(0);
|
||
|
||
int startRowIndex = 4;
|
||
// 创建带边框的样式(只需创建一次,推荐提到循环外面)
|
||
ICellStyle borderedCellStyle = workbook.CreateCellStyle();
|
||
borderedCellStyle.BorderTop = BorderStyle.Thin;
|
||
borderedCellStyle.BorderBottom = BorderStyle.Thin;
|
||
borderedCellStyle.BorderLeft = BorderStyle.Thin;
|
||
borderedCellStyle.BorderRight = BorderStyle.Thin;
|
||
borderedCellStyle.TopBorderColor = IndexedColors.Black.Index;
|
||
borderedCellStyle.BottomBorderColor = IndexedColors.Black.Index;
|
||
borderedCellStyle.LeftBorderColor = IndexedColors.Black.Index;
|
||
borderedCellStyle.RightBorderColor = IndexedColors.Black.Index;
|
||
for (int i = 0; i < dataList.Count; i++)
|
||
{
|
||
var item = dataList[i];
|
||
IRow row = sheet.GetRow(startRowIndex + i) ?? sheet.CreateRow(startRowIndex + i);
|
||
|
||
row.CreateCell(1).SetCellValue(item.Project);
|
||
|
||
row.CreateCell(2).SetCellValue(item.AgroupMonitor);
|
||
row.CreateCell(3).SetCellValue((double)(item.AgroupProductNum ?? 0));
|
||
row.CreateCell(4).SetCellValue((double)(item.AgroupStandardYield ?? 0));
|
||
row.CreateCell(5).SetCellValue((double)(item.AgroupPlanNum ?? 0));
|
||
row.CreateCell(6).SetCellValue((double)item.AgroupCompletionRate);
|
||
|
||
row.CreateCell(7).SetCellValue(item.BgroupMonitor);
|
||
row.CreateCell(8).SetCellValue((double)(item.BgroupProductNum ?? 0));
|
||
row.CreateCell(9).SetCellValue((double)(item.BgroupStandardYield ?? 0));
|
||
row.CreateCell(10).SetCellValue((double)(item.BgroupPlanNum ?? 0));
|
||
row.CreateCell(11).SetCellValue((double)item.BgroupCompletionRate);
|
||
|
||
row.CreateCell(12).SetCellValue((double)(item.SummaryActualNum ?? 0));
|
||
row.CreateCell(13).SetCellValue((double)(item.SummaryPlanNum ?? 0));
|
||
row.CreateCell(14).SetCellValue((double)item.SummaryPlanAchievementRate);
|
||
|
||
row.CreateCell(15).SetCellValue((double)(item.DownQuality ?? 0));
|
||
row.CreateCell(16).SetCellValue((double)(item.DownSuppler ?? 0));
|
||
row.CreateCell(17).SetCellValue((double)(item.DownDeviceFailure ?? 0));
|
||
row.CreateCell(18).SetCellValue((double)(item.DownDeviceDebug ?? 0));
|
||
row.CreateCell(19).SetCellValue((double)(item.DownLogisticsWaitMaterial ?? 0));
|
||
row.CreateCell(20).SetCellValue((double)(item.DownLackMaterial ?? 0));
|
||
row.CreateCell(21).SetCellValue((double)(item.DownInjection ?? 0));
|
||
row.CreateCell(22).SetCellValue((double)(item.DownAssembly ?? 0));
|
||
row.CreateCell(23).SetCellValue((double)(item.AllLineStopTime ?? 0));
|
||
row.CreateCell(24).SetCellValue(item.MainProblemDescription);
|
||
row.CreateCell(25).SetCellValue(item.Strategy);
|
||
row.CreateCell(26).SetCellValue(item.ResponsiblePerson);
|
||
}
|
||
|
||
// 改为写入 MemoryStream 然后转成 byte[]
|
||
var memoryStream = new MemoryStream();
|
||
workbook.Write(memoryStream);
|
||
// memoryStream.Position = 0;
|
||
return memoryStream.ToArray(); // ✅ 直接返回 byte 数组
|
||
}
|
||
}
|
||
|
||
}
|
||
} |