讲师维护新增Excel数据导入

master
xiaochanghai 6 months ago
parent a765d5b96b
commit 59c4bdb868
  1. 164
      Tiobon.Core.Api/Tiobon.Core.Model.xml
  2. 8
      Tiobon.Core.Api/Tiobon.Core.xml
  3. 2
      Tiobon.Core.Services/Ghre/Ghre_CertificateServices.cs
  4. 2
      Tiobon.Core.Services/Ghre/Ghre_CourseClassServices.cs
  5. 2
      Tiobon.Core.Services/Ghre/Ghre_CourseSceneServices.cs
  6. 2
      Tiobon.Core.Services/Ghre/Ghre_CourseServices.cs
  7. 2
      Tiobon.Core.Services/Ghre/Ghre_ExamRecordServices.cs
  8. 2
      Tiobon.Core.Services/Ghre/Ghre_QuestionServices.cs
  9. 2
      Tiobon.Core.Services/Ghre/Ghre_StudyRecordServices.cs
  10. 224
      Tiobon.Core.Services/Ghre/Ghre_TeacherServices.cs
  11. 12
      Tiobon.Core.Services/Ghrh/Ghrh_ResumeServices.cs
  12. 2
      Tiobon.Core.Services/Ghrh/Ghrh_YearHumanSettingsServices.cs

@ -2598,7 +2598,7 @@
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseBase.CourseWareId">
<summary>
课件ID
</summary>
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseBase.StandardHour">
<summary>
@ -2690,11 +2690,6 @@
课前准备
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseBase.PublishTime">
<summary>
发布时间
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseBase.RemarkSz">
<summary>
备注
@ -2785,6 +2780,11 @@
默认封面图Name
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseBase.PublishTime">
<summary>
发布时间
</summary>
</member>
<member name="T:Tiobon.Core.Model.Models.Ghre_CourseClassBase">
<summary>
课程分类 (Dto.Base)
@ -2890,16 +2890,6 @@
场景名称
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseSceneBase.CourseId">
<summary>
课程ID
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseSceneBase.CourseName">
<summary>
课程
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseSceneBase.RemarkSz">
<summary>
备注
@ -2910,31 +2900,6 @@
排序
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseSceneBase.StandardHour">
<summary>
标准课时
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseSceneBase.CreditPoints">
<summary>
学分
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseSceneBase.CoverUrl">
<summary>
封面图
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseSceneBase.UseDefaultCoverImage">
<summary>
是否使用默认封面
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseSceneBase.DefaultCoverImageName">
<summary>
默认封面图Name
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseSceneBase.IsDefault">
<summary>
默认标志
@ -3000,6 +2965,41 @@
预留字段12
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseSceneBase.CourseId">
<summary>
课程ID
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseSceneBase.CourseName">
<summary>
课程
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseSceneBase.StandardHour">
<summary>
标准课时
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseSceneBase.CreditPoints">
<summary>
学分
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseSceneBase.CoverUrl">
<summary>
封面图
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseSceneBase.UseDefaultCoverImage">
<summary>
是否使用默认封面
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseSceneBase.DefaultCoverImageName">
<summary>
默认封面图Name
</summary>
</member>
<member name="T:Tiobon.Core.Model.Models.Ghre_CourseSnapBase">
<summary>
Ghre_CourseSnap (Dto.Base)
@ -16119,7 +16119,7 @@
<member name="P:Tiobon.Core.Model.Models.Ghre_Course.CourseWareId">
<summary>
课件ID
</summary>
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_Course.StandardHour">
<summary>
@ -16211,11 +16211,6 @@
课前准备
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_Course.PublishTime">
<summary>
发布时间
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_Course.RemarkSz">
<summary>
备注
@ -16306,6 +16301,11 @@
默认封面图Name
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_Course.PublishTime">
<summary>
发布时间
</summary>
</member>
<member name="T:Tiobon.Core.Model.Models.Ghre_CourseClass">
<summary>
课程分类 (Model)
@ -16411,16 +16411,6 @@
场景名称
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseScene.CourseId">
<summary>
课程ID
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseScene.CourseName">
<summary>
课程
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseScene.RemarkSz">
<summary>
备注
@ -16431,31 +16421,6 @@
排序
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseScene.StandardHour">
<summary>
标准课时
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseScene.CreditPoints">
<summary>
学分
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseScene.CoverUrl">
<summary>
封面图
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseScene.UseDefaultCoverImage">
<summary>
是否使用默认封面
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseScene.DefaultCoverImageName">
<summary>
默认封面图Name
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseScene.IsDefault">
<summary>
默认标志
@ -16521,6 +16486,41 @@
预留字段12
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseScene.CourseId">
<summary>
课程ID
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseScene.CourseName">
<summary>
课程
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseScene.StandardHour">
<summary>
标准课时
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseScene.CreditPoints">
<summary>
学分
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseScene.CoverUrl">
<summary>
封面图
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseScene.UseDefaultCoverImage">
<summary>
是否使用默认封面
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghre_CourseScene.DefaultCoverImageName">
<summary>
默认封面图Name
</summary>
</member>
<member name="T:Tiobon.Core.Model.Models.Ghre_CourseSnap">
<summary>
Ghre_CourseSnap (Model)

@ -1020,13 +1020,7 @@
<param name="body">条件</param>
<returns></returns>
</member>
<member name="M:Tiobon.Core.Api.Controllers.Ghre_ExamRecordController.ExtendAsync(System.Int64)">
<summary>
获取考试记录明细扩展接口
</summary>
<param name="examRecordId"></param>
<returns></returns>
</member>
<!-- Badly formed XML comment ignored for member "M:Tiobon.Core.Api.Controllers.Ghre_ExamRecordController.ExtendAsync(System.Int64)" -->
<member name="M:Tiobon.Core.Api.Controllers.Ghre_ExamRecordController.CommentAsync(Tiobon.Core.Model.Ghre_ExamRecordExtend,System.Int64)">
<summary>
提交评语接口

@ -236,7 +236,7 @@ public class Ghre_CertificateServices : BaseServices<Ghre_Certificate, Ghre_Cert
if (isExistError)
{
NPOIHelper.ExportExcel(dt, null, "人证对照表", physicsPath + errorFileName);
data.filePath = errorFileName;
data.filePath = "/Advanced" + errorFileName;
}
return ServiceResult<ExcelData>.OprateSuccess("导入成功!", data);
}

@ -134,7 +134,7 @@ public class Ghre_CourseClassServices : BaseServices<Ghre_CourseClass, Ghre_Cour
if (isExistError)
{
NPOIHelper.ExportExcel(dt, null, "课程分类", physicsPath + errorFileName);
data.filePath = errorFileName;
data.filePath = "/Advanced" + errorFileName;
}
return ServiceResult<ExcelData>.OprateSuccess("导入成功!", data);
}

@ -181,7 +181,7 @@ public class Ghre_CourseSceneServices : BaseServices<Ghre_CourseScene, Ghre_Cour
if (isExistError)
{
NPOIHelper.ExportExcel(dt, null, "课程场景", physicsPath + errorFileName);
data.filePath = errorFileName;
data.filePath = "/Advanced" + errorFileName;
}
return ServiceResult<ExcelData>.OprateSuccess("导入成功!", data);
}

@ -924,7 +924,7 @@ public class Ghre_CourseServices : BaseServices<Ghre_Course, Ghre_CourseDto, Ins
if (isExistError)
{
NPOIHelper.ExportExcel(dt, null, "课程管理", physicsPath + errorFileName);
data.filePath = errorFileName;
data.filePath = "/Advanced" + errorFileName;
}
return ServiceResult<ExcelData>.OprateSuccess("导入成功!", data);
}

@ -1260,7 +1260,7 @@ public class Ghre_ExamRecordServices : BaseServices<Ghre_ExamRecord, Ghre_ExamRe
if (isExistError)
{
NPOIHelper.ExportExcel(dt, null, "考试成绩", physicsPath + errorFileName);
data.filePath = errorFileName;
data.filePath = "/Advanced" + errorFileName;
}
return ServiceResult<ExcelData>.OprateSuccess("导入成功!", data);
}

@ -1089,7 +1089,7 @@ public class Ghre_QuestionServices : BaseServices<Ghre_Question, Ghre_QuestionDt
if (isExistError)
{
NPOIHelper.ExportExcel(dt, null, x, physicsPath + errorFileName);
data.filePath = errorFileName;
data.filePath = "/Advanced" + errorFileName;
}
}
catch (Exception)

@ -729,7 +729,7 @@ public class Ghre_StudyRecordServices : BaseServices<Ghre_StudyRecord, Ghre_Stud
if (isExistError)
{
NPOIHelper.ExportExcel(dt, null, "学习记录", physicsPath + errorFileName);
data.filePath = errorFileName;
data.filePath = "/Advanced" + errorFileName;
}
return ServiceResult<ExcelData>.OprateSuccess("导入成功!", data);

@ -381,8 +381,6 @@ FROM (SELECT A.*,
for (int i = 0; i < dt.Rows.Count; i++)
{
var comments = new List<string>();
bool isContinue = false;
fields.ForEach(x =>
@ -404,57 +402,124 @@ FROM (SELECT A.*,
var StaffNo = dt.Rows[i]["工号"].ToString();
var StaffName = dt.Rows[i]["姓名"].ToString();
var SchoolName = dt.Rows[i]["培训机构"].ToString();
var Score = dt.Rows[i]["讲师编号"].ToString();
var AdjustScore = dt.Rows[i]["讲师姓名"].ToString();
var ActualScore = dt.Rows[i]["性别"].ToString();
var IsPass = dt.Rows[i]["邮箱"].ToString();
//var IsPass = dt.Rows[i]["手机号码"].ToString();
//var IsPass = dt.Rows[i]["讲师等级"].ToString();
//var IsPass = dt.Rows[i]["课时费"].ToString();
//var IsPass = dt.Rows[i]["擅长领域"].ToString();
if (StaffNo.IsNullOrEmpty() && StaffName.IsNullOrEmpty())
continue;
var TeacherNo = dt.Rows[i]["讲师编号"].ToString();
var TeacherName = dt.Rows[i]["讲师姓名"].ToString();
var Gender = dt.Rows[i]["性别"].ToString();
var Email = dt.Rows[i]["邮箱"].ToString();
var Mobile = dt.Rows[i]["手机号码"].ToString();
var TeacherLevel = dt.Rows[i]["讲师等级"].ToString();
var Price = dt.Rows[i]["课时费"].ToString();
var SkillPoints = dt.Rows[i]["擅长领域"].ToString();
var remarkSz = dt.Rows[i]["备注"].ToString();
var staff = await Db.Queryable<Ghra_Staff>().Where(x => x.StaffNo == StaffNo && x.StaffName == StaffName).FirstAsync();
if (staff == null)
{
comments.Add($"未查询到该员工,工号或姓名填写错误!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
continue;
}
var exam = await Db.Queryable<Ghre_Exam>().Where(x => x.Id == MasterId).FirstAsync();
var dict = new Dictionary<string, object>
{
{ "Id", SnowFlakeSingle.Instance.NextId() },
{ "CreateBy", App.User.ID },
{ "CreateTime", DateTime.Now },
{ "RemarkSz", remarkSz }
};
if (TeacherType.IsNullOrEmpty())
continue;
if (TeacherType == "内部")
{
if (StaffNo.IsNullOrEmpty())
{
comments.Add("工号不能为空!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
continue;
}
if (StaffName.IsNullOrEmpty())
{
comments.Add("姓名不能为空!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
continue;
}
var staff = await Db.Queryable<Ghra_Staff>().Where(x => x.StaffNo == StaffNo && x.StaffName == StaffName).FirstAsync();
if (staff == null)
{
comments.Add($"未查询到该员工,工号或姓名填写错误!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
continue;
}
//if (ExamDate.IsNullOrEmpty())
// ExamDate = DateTime.Now.ToString();
if (Score.IsNullOrEmpty())
Score = "0";
TeacherNo = staff.StaffNo;
TeacherName = staff.StaffName;
Email = staff.Email.ObjToString();
Mobile = staff.Mobile.ObjToString();
Gender = staff.Gender;
try
dict.Add("DeptID", staff.DeptID);
dict.Add("StaffId", staff.StaffID);
dict.Add("TeacherType", "In");
}
else
{
Convert.ToInt32(Score);
if (Gender.IsNullOrEmpty())
Gender = "unknown";
else
Gender = Gender == "男" ? "Male" : "Female";
if (SchoolName.IsNullOrEmpty())
{
comments.Add("培训机构不能为空!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
continue;
}
var school = await Db.Queryable<Ghre_School>().Where(x => x.SchoolName == SchoolName).FirstAsync();
if (school is null)
{
comments.Add("无效的培训机构!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
continue;
}
dict.Add("SchoolId", school.Id);
if (TeacherNo.IsNullOrEmpty())
{
comments.Add("讲师编号不能为空!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
continue;
}
if (TeacherName.IsNullOrEmpty())
{
comments.Add("讲师姓名不能为空!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
continue;
}
dict.Add("TeacherType", "Out");
}
catch (Exception)
if (TeacherLevel.IsNullOrEmpty())
{
comments.Add($"考试分数填写有误!");
comments.Add("讲师等级不能为空!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
continue;
}
try
{
Convert.ToInt32(AdjustScore);
}
catch (Exception)
var items = await GetParaList("TrainingTeacherLevel");
TeacherLevel = items.Where(x => x.ParaDetailName == TeacherLevel).FirstOrDefault()?.ParaDetailNo ?? "In";
if (Price.IsNullOrEmpty())
{
comments.Add($"调整分填写有误!");
comments.Add("课时费不能为空!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
@ -462,76 +527,33 @@ FROM (SELECT A.*,
}
try
{
Convert.ToInt32(ActualScore);
Convert.ToInt32(Price);
}
catch (Exception)
{
comments.Add($"实操分填写有误!");
comments.Add($"课时费填写有误!");
data.ErrorCount++;
dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
isExistError = true;
continue;
}
//try
//{
// Convert.ToDateTime(ExamDate);
//}
//catch (Exception)
//{
// comments.Add($"考试日期填写有误!");
// data.ErrorCount++;
// dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
// isExistError = true;
// continue;
//}
//if (await base.AnyAsync(x => x.CertificateRuleId == rule.Id && x.StaffId == staff.StaffID && x.CourseId == course.Id))
//{
// comments.Add($"系统已存在相同证照数据!");
// data.ErrorCount++;
// dt.Rows[i]["Comments"] = string.Join(";", comments.Select(a => a));
// isExistError = true;
// continue;
//}
var snap = await Db.Queryable<Ghre_CourseSnap>().FirstAsync(x => x.CourseId == exam.CourseId);
var ExamRecordId = SnowFlakeSingle.Instance.NextId();
var StudyRecordId = SnowFlakeSingle.Instance.NextId();
var dict1 = new Dictionary<string, object>
{
{ "Id", StudyRecordId },
{ "CreateBy", App.User.ID },
{ "CreateTime", DateTime.Now },
{ "ExamId", MasterId },
{ "StaffId", staff.StaffID },
{ "CourseId", exam.CourseId },
{ "CourseSnapId", snap?.Id },
{ "CourseSceneId", exam.CourseSceneId },
{ "JoinTime", DateTime.Now },
{ "RemarkSz", "导入讲师维护生成" }
};
var dict = new Dictionary<string, object>
{
{ "Id", ExamRecordId },
{ "CreateBy", App.User.ID },
{ "CreateTime", DateTime.Now },
{ "ExamId", MasterId },
{ "StudyRecordId", StudyRecordId },
{ "StaffId", staff.StaffID },
//{ "CourseId", exam.CourseId },
{ "CourseSnapId", snap?.Id },
{ "Score", Score },
{ "AdjustScore", Score },
{ "ActualScore", ActualScore },
//{ "ExamDate", ExamDate },
{ "IsPass", IsPass=="是"?true:false },
{ "ScoreStatus", "HasScore" },
{ "Source", "ExcelImport" },
{ "ExamPaperId",exam.ExamPaperId },
{ "RemarkSz", remarkSz }
};
dict.Add("TeacherNo", TeacherNo);
dict.Add("TeacherName", TeacherName);
dict.Add("Email", Email);
dict.Add("Mobile", Mobile);
dict.Add("Gender", Gender);
dict.Add("Price", Price);
dict.Add("TeacherLevel", TeacherLevel);
dict.Add("SkillPoints", SkillPoints);
if (menuName == "F_TeacherManage")
dict.Add("Status", "Wait");
else
dict.Add("Status", "Temporary");
try
{
await Db.Insertable(dict1).AS("Ghre_StudyRecord").ExecuteCommandAsync();
await Db.Insertable(dict).AS("Ghre_ExamRecord").ExecuteCommandAsync();
await Db.Insertable(dict).AS("Ghre_Teacher").ExecuteCommandAsync();
data.SuccessCount++;
//data.SuccessCount += list.Count;
}
@ -543,15 +565,15 @@ FROM (SELECT A.*,
isExistError = true;
continue;
}
}
if (isExistError)
{
NPOIHelper.ExportExcel(dt, null, "讲师维护", physicsPath + errorFileName);
data.filePath = errorFileName;
data.filePath = "/Advanced" + errorFileName;
}
return ServiceResult<ExcelData>.OprateSuccess("导入成功!", data);
}
#endregion
}

@ -3678,28 +3678,36 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
if (await Db.Queryable<Ghrh_OfferApplyOrder>().AnyAsync(x => x.IdCardNo == data.IDCardNo))
continue;
var resume = await base.QuerySingle(x => x.IdCardNo == data.IDCardNo);
var deptId = (await Db.Queryable<Ghro_Dept>().Where(x => x.DeptNo == data.DeptNo).FirstAsync())?.DeptID;
var titleId = (await Db.Queryable<Ghra_Title>().Where(x => x.TitleNo == data.TitleNo).FirstAsync())?.TitleID;
var gradeId = (await Db.Queryable<Ghra_Grade>().Where(x => x.GradeNo == data.GradeNo).FirstAsync())?.GradeID;
var workAddress = (await Db.Queryable<Ghra_Zone>().Where(x => x.ZoneNo == data.ZoneNo).FirstAsync())?.ZoneName;
var periodMasterId = (await Db.Queryable<Ghrc_PeriodMaster>().Where(x => x.PeriodMasterNo == data.PeriodMasterNo).FirstAsync())?.PeriodMasterID;
var items1 = await GetParaList("ResumeChannel");
data.RecruitFrom = items1.Where(x => x.ParaDetailName == data.RecruitFrom).FirstOrDefault()?.ParaDetailNo ?? data.RecruitFrom;
var items = new List<Ghrh_OfferApplyOrderSalary>();
var insert = new Ghrh_OfferApplyOrder()
{
OrderNo = data.WorkNo,
WorkNo = data.WorkNo,
DeptId = deptId,
TitleId = titleId,
Channel = data.RecruitFrom,
StaffName = data.EmployName,
IdCardNo = data.IDCardNo,
InDate = data.InDate,
StaffType = data.StaffType,
StaffType1 = data.StaffType,
GradeId = gradeId,
WorkAddress = workAddress,
ProbationSalary = data.TotalAmount,
PeriodMasterId = periodMasterId,
};
if (resume != null)
insert.ResumeId = resume.Id;
long id = await Db.Insertable(insert).ExecuteReturnSnowflakeIdAsync();
#region 写入数据,并判断是否有错误
@ -4406,7 +4414,7 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1
23, --
1130, --
0,'Todo',1,'',
1,0,0,0,
1,2,0,0,
{App.User.ID},GETDATE(), 'SyncToStaff',
dbo.FS_EncryptByKey({applyOrder?.ProbationSalary ?? 0})
Declare @N_SCID int = SCOPE_IDENTITY()

@ -421,7 +421,7 @@ public class Ghrh_YearHumanSettingsServices : BaseServices<Ghrh_YearHumanSetting
if (isExistError)
{
NPOIHelper.ExportExcel(dt, null, "年度人力配置", physicsPath + errorFileName);
data.filePath = errorFileName;
data.filePath = "/Advanced" + errorFileName;
}
}
catch (Exception)

Loading…
Cancel
Save