using FreeSql;
using F9WebAiTest.Domain.Entities;
using F9WebAiTest.Domain.Entities.Base;
namespace F9WebAiTest.Infrastructure.Data;
/// 业务基础数据种子(部门/工艺庄口/生丝规格/生丝定级指标/机组车台)
public static class BusinessSeedData
{
public static void Seed(IFreeSql fsql)
{
SeedMenus(fsql);
SeedCraftZhuangKou(fsql);
SeedShengsiGuige(fsql);
SeedShengsiDingjizhibiao(fsql);
SeedDepartmentsAndJizuChetai(fsql);
SeedEmployees(fsql);
}
// ==================== 部门 + 机组车台(真实组织架构) ====================
/// F9 原始部门 Id 与名称对照(Id 为 F9 系统的雪花 Id,供工种等模块建立 ID 映射)
public static readonly (long Id, string Name, long ParentId, int Sort, string Code)[] DeptData =
{
(10920411881541632, "安泰茧丝绸", 0, 0, "123"),
(10929439026188288, "丝业生产中心", 10920411881541632, 100, "100"),
(19667471837433856, "主干运维", 10920411881541632, 9999, "9999"),
(22305637455106048, "人力资源部", 10920411881541632, 800, "800"),
(22305758536273920, "财务部", 10920411881541632, 400, "400"),
(22305841730293760, "营销中心", 10920411881541632, 500, "500"),
(22305998261719040, "计划运营部", 10920411881541632, 200, "200"),
(22306589042020352, "品管部", 10920411881541632, 700, "700"),
(22306677265010688, "采购部", 10920411881541632, 300, "300"),
(26900271946797056, "安全环保后勤部", 10920411881541632, 1000, "1000"),
(26901050904547328, "经理会", 10920411881541632, 1500, "1500"),
(26901341515288576, "监察室", 10920411881541632, 3000, "3000"),
(26901475166785536, "融资部", 10920411881541632, 2000, "2000"),
(34638098675535872, "武胜蚕业公司", 10920411881541632, 4000, "4000"),
(35981234102341632, "安泰丝绸人南店", 10920411881541632, 6200, "6200"),
(35981427686248448, "绸业生产中心", 10920411881541632, 5000, "5000"),
(35981496963567616, "夹江蚕业公司", 10920411881541632, 4100, "4100"),
(35982738976673792, "安泰丝绸融恒店", 10920411881541632, 6000, "6000"),
(35982891737419776, "帛锦汇", 10920411881541632, 6100, "6100"),
(35982956409393152, "蚕业技术服务部", 10920411881541632, 4900, "4900"),
(36277179469795328, "广安蚕业公司", 10920411881541632, 4200, "4200"),
(10929739564847104, "仓储", 10929439026188288, 1000, "1000"),
(22307875854487552, "质检科", 10929439026188288, 1100, "1100"),
(22308241237086208, "试样室", 10929439026188288, 1200, "1200"),
(22308361408090112, "选剥茧车间", 10929439026188288, 1300, "1300"),
(25256354205667328, "前缫车间", 10929439026188288, 1350, "1350"),
(22308805823959040, "后缫车间", 10929439026188288, 1800, "1800"),
(22309110082965504, "设备车间", 10929439026188288, 2100, "2100"),
(22309340027293696, "副产品车间", 10929439026188288, 2200, "2200"),
(68179345423732736, "临时", 10929439026188288, 3000, "3000"),
(16043931070369792, "前缫一车间", 25256354205667328, 1400, "1400"),
(16047387197837312, "前缫二车间", 25256354205667328, 1500, "1500"),
(22308600831545344, "前缫三车间", 25256354205667328, 1600, "1600"),
(22308683820044288, "前缫四车间", 25256354205667328, 1700, "1700"),
(25379428280307712, "煮茧室", 25256354205667328, 1350, "1350"),
(22308918461992960, "检验室", 22308805823959040, 1900, "1900"),
(22309003073687552, "整理室", 22308805823959040, 2000, "2000"),
(24029387057795072, "丝棉车间", 22309340027293696, 0, "999"),
};
private static readonly (long DeptId, int Jizu, int Start, int End)[] JizuData =
{
(16043931070369792, 1, 1, 20), (16043931070369792, 2, 21, 40), (16043931070369792, 3, 41, 60),
(16043931070369792, 4, 61, 80), (16043931070369792, 5, 81, 100), (16043931070369792, 6, 101, 120),
(16047387197837312, 1, 1, 20), (16047387197837312, 2, 21, 40), (16047387197837312, 3, 41, 60),
(16047387197837312, 4, 61, 80), (16047387197837312, 5, 81, 100), (16047387197837312, 6, 101, 120),
(22308600831545344, 1, 1, 20), (22308600831545344, 2, 21, 40), (22308600831545344, 3, 41, 60),
(22308600831545344, 4, 61, 80), (22308600831545344, 5, 81, 100), (22308600831545344, 6, 101, 120),
(22308683820044288, 1, 1, 20), (22308683820044288, 2, 21, 40), (22308683820044288, 3, 41, 60),
(22308683820044288, 4, 61, 80), (22308683820044288, 5, 81, 100), (22308683820044288, 6, 101, 120),
};
private static void SeedDepartmentsAndJizuChetai(IFreeSql fsql)
{
// 检测是否已有真实部门(以"安泰茧丝绸"为标记)
if (fsql.Select().Any(d => d.Name == "安泰茧丝绸")) return;
// 物理清空假数据(总公司/技术部等)及关联
fsql.Ado.ExecuteNonQuery("DELETE FROM JizuChetais");
fsql.Ado.ExecuteNonQuery("DELETE FROM AttendanceRecords");
fsql.Ado.ExecuteNonQuery("DELETE FROM LeaveRequests");
fsql.Ado.ExecuteNonQuery("DELETE FROM Employees");
fsql.Ado.ExecuteNonQuery("DELETE FROM Departments");
// 第一遍:创建所有部门(ParentId 暂不设)
var idMap = new Dictionary();
foreach (var d in DeptData)
{
var dept = new Department { Name = d.Name, Code = d.Code, Sort = d.Sort };
var newId = DbSeeder.InsertAndGetId(fsql, dept);
idMap[d.Id] = newId;
}
// 第二遍:设置 ParentId
foreach (var d in DeptData)
{
if (d.ParentId != 0 && idMap.ContainsKey(d.ParentId))
{
var dept = fsql.Select().Where(x => x.Id == idMap[d.Id]).First();
dept.ParentId = idMap[d.ParentId];
fsql.Update().SetSource(dept).ExecuteAffrows();
}
}
// 机组车台
foreach (var j in JizuData)
{
if (idMap.ContainsKey(j.DeptId))
{
fsql.Insert(new JizuChetai
{
DepartmentId = idMap[j.DeptId],
Jizu = j.Jizu,
ChetaiStart = j.Start,
ChetaiEnd = j.End
}).ExecuteAffrows();
}
}
}
// ==================== 职工 ====================
private static readonly (long DeptId, string Name, string Phone, string Login)[] EmpData =
{
(16043931070369792, "主干-何启旭", "18840854628", "18840854628"),
(10920411881541632, "测试用户", "0", "test"),
(10920411881541632, "秦燊", "13982683923", "13982683923"),
(10920411881541632, "陈勇", "18908283908", "18908283908"),
(22305758536273920, "汪菊", "18782619006", "18782619006"),
(22305841730293760, "陈林", "18580851234", "18580851234"),
(10929439026188288, "李正平", "15378405846", "15378405846"),
(22305637455106048, "朱莹", "18908283738", "18908283738"),
(22305637455106048, "毛银春", "18180268728", "18180268728"),
(22305637455106048, "陆国君", "13696173949", "13696173949"),
(22305637455106048, "华静", "13882636653", "13882636653"),
(22305637455106048, "余思洁", "18398508220", "18398508220"),
(22305758536273920, "孙瑞", "15982664679", "15982664679"),
(22305758536273920, "唐琳", "18048103256", "18048103256"),
(22305758536273920, "蒋宜", "18982626800", "18982626800"),
(22305758536273920, "王清华", "15282625323", "15282625323"),
(22305998261719040, "李西宴", "13688261711", "13688261711"),
(22305998261719040, "文杨", "13699654826", "13699654826"),
(22306589042020352, "曹庆", "13541993164", "13541993164"),
(22306677265010688, "蒙海波", "15884923167", "15884923167"),
(22305841730293760, "陈菊", "13696182387", "13696182387"),
(22305841730293760, "刘婷", "18382610528", "18382610528"),
(19667471837433856, "主干-张建", "15398380348", "15398380348"),
(19667471837433856, "主干-严鹏", "19162687174", "19162687174"),
(10929739564847104, "游建梅", "13629091099", "13629091099"),
(22307875854487552, "邓滟旖", "18181821168", "18181821168"),
(10929439026188288, "李志颖", "14708217874", "14708217874"),
(22308241237086208, "曹志君", "13882695209", "13882695209"),
(22308241237086208, "胡小琴", "18160129785", "18160129785"),
(22308361408090112, "唐小红", "15983458330", "15983458330"),
(25256354205667328, "余华", "13547542219", "13547542219"),
(22308683820044288, "陈建红", "15182698365", "15182698365"),
(22308683820044288, "谢军辉", "19957339779", "19957339779"),
(22308600831545344, "陈丽华", "15982605862", "15982605862"),
(16047387197837312, "杨静", "15982696700", "15982696700"),
(25256354205667328, "刘芳", "13882653025", "13882653025"),
(22308805823959040, "刘春兰", "13982624682", "13982624682"),
(22309110082965504, "朱再民", "15328288332", "15328288332"),
(22309340027293696, "舒文", "13551613659", "13551613659"),
(10929439026188288, "汪瑜琳", "13541553564", "13541553564"),
(19667471837433856, "范鸿才", "18981977117", "18981977117"),
(22305758536273920, "谭波", "18282636380", "18282636380"),
(22308918461992960, "董宗华", "18384503138", "18384503138"),
(22308918461992960, "易林梅", "18381112479", "18381112479"),
(22309003073687552, "舒红群", "18398526317", "18398526317"),
(25379428280307712, "彭卫东", "18382668003", "18382668003"),
(25379428280307712, "王远辉", "15982666491", "15982666491"),
(25379428280307712, "姚光林", "19160637815", "19160637815"),
(19667471837433856, "李学兴", "18117362915", "18117362915"),
(16043931070369792, "李远玲", "13982638574", "13982638574"),
(26900271946797056, "杨福锋", "13982638165", "13982638165"),
(26901341515288576, "杨利容", "15928659870", "15928659870"),
(19667471837433856, "主干-张罗", "18109064045", "18109064045"),
(26900271946797056, "袁鑫", "14781753888", "14781753888"),
(19667471837433856, "刘香君", "15808107846", "15808107846"),
(22308805823959040, "沈跃成", "13822244141", "13822244141"),
(19667471837433856, "杨凤琼", "18011528128", "18011528128"),
(22308600831545344, "谭爱君", "13699658634", "13699658634"),
};
private static void SeedEmployees(IFreeSql fsql)
{
var defaultPwd = BCrypt.Net.BCrypt.HashPassword("123456");
var deptNameMap = DeptData.ToDictionary(d => d.Id, d => d.Name);
foreach (var e in EmpData)
{
if (fsql.Select().Any(x => x.Username == e.Login)) continue;
long deptId = 0;
if (deptNameMap.TryGetValue(e.DeptId, out var deptName))
{
var dept = fsql.Select().Where(d => d.Name == deptName).First();
if (dept != null) deptId = dept.Id;
}
fsql.Insert(new Employee
{
Username = e.Login,
Password = defaultPwd,
RealName = e.Name,
Nickname = e.Name,
Phone = e.Phone,
DepartmentId = deptId,
Status = 1
}).ExecuteAffrows();
}
}
// ==================== 菜单 ====================
private static void SeedMenus(IFreeSql fsql)
{
var baseDirId = fsql.Select