diff --git a/BasicData/Tnb.BasicData.Entities/Dto/BasCalendar/CalendarInput.cs b/BasicData/Tnb.BasicData.Entities/Dto/BasCalendar/CalendarInput.cs index 9b6e9271..61edcf32 100644 --- a/BasicData/Tnb.BasicData.Entities/Dto/BasCalendar/CalendarInput.cs +++ b/BasicData/Tnb.BasicData.Entities/Dto/BasCalendar/CalendarInput.cs @@ -12,11 +12,13 @@ namespace Tnb.BasicData.Entities.Dto public string? datetype { get; set; } public string? workhour { get; set; } public string? worktype { get; set; } + public int? calendartype { get; set;} + public string? workgroupid { get; set;} + public string? userid { get; set; } } public class CalendarBatchInput { - public string? startday { get; set; } - public string? endday { get; set; } + public string[]? startenday { get; set; } public int[]? weekday { get; set; } public string? datetype { get; set; } public string? workhour { get; set; } diff --git a/BasicData/Tnb.BasicData.Entities/Dto/BasCalendar/CalendarOut.cs b/BasicData/Tnb.BasicData.Entities/Dto/BasCalendar/CalendarOut.cs index 403d753a..70c527c3 100644 --- a/BasicData/Tnb.BasicData.Entities/Dto/BasCalendar/CalendarOut.cs +++ b/BasicData/Tnb.BasicData.Entities/Dto/BasCalendar/CalendarOut.cs @@ -18,4 +18,11 @@ namespace Tnb.BasicData.Entities.Dto.BasCalendar public string? start { get; set; } public string? end { get; set; } } + public class Shift + { + public string? startday { get; set; } + public string? endday { get; set; } + public WorkHour? workhour { get; set; } + } + } diff --git a/BasicData/Tnb.BasicData.Entities/Entity/BasShift.cs b/BasicData/Tnb.BasicData.Entities/Entity/BasShift.cs index 4727d387..a03ccf6f 100644 --- a/BasicData/Tnb.BasicData.Entities/Entity/BasShift.cs +++ b/BasicData/Tnb.BasicData.Entities/Entity/BasShift.cs @@ -3,7 +3,6 @@ using JNPF.Common.Security; using SqlSugar; namespace Tnb.BasicData.Entities; - /// /// 班次资料 /// diff --git a/BasicData/Tnb.BasicData.Entities/Entity/BasShiftWorkgroup.cs b/BasicData/Tnb.BasicData.Entities/Entity/BasShiftWorkgroup.cs new file mode 100644 index 00000000..deb24b43 --- /dev/null +++ b/BasicData/Tnb.BasicData.Entities/Entity/BasShiftWorkgroup.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using JNPF.Common.Contracts; +using JNPF.Common.Security; +using SqlSugar; + +namespace Tnb.BasicData.Entities; +/// +/// 班次计划与班组的关联关系 +/// +[SugarTable("bas_shift_workgroup")] +public partial class BasShiftWorkgroup : BaseEntity +{ + public BasShiftWorkgroup() + { + id = SnowflakeIdHelper.NextId(); + } + /// + /// 班次计划id + /// + public string shift_id { get; set; } = string.Empty; + + /// + /// 班组id + /// + public string workgroup_id { get; set; } = string.Empty; + + /// + /// 创建用户 + /// + public string? create_id { get; set; } + + /// + /// 创建时间 + /// + public DateTime? create_time { get; set; } + + /// + /// 修改用户 + /// + public string? modify_id { get; set; } + + /// + /// 修改时间 + /// + public DateTime? modify_time { get; set; } + + /// + /// 扩展 + /// + public string? extras { get; set; } + +} + + diff --git a/BasicData/Tnb.BasicData.Entities/Entity/BasWorkgroup.cs b/BasicData/Tnb.BasicData.Entities/Entity/BasWorkgroup.cs index daa66f8c..12f14402 100644 --- a/BasicData/Tnb.BasicData.Entities/Entity/BasWorkgroup.cs +++ b/BasicData/Tnb.BasicData.Entities/Entity/BasWorkgroup.cs @@ -20,7 +20,7 @@ public partial class BasWorkgroup : BaseEntity public string? org_id { get; set; } /// - /// 班组代码 + /// 班组编号 /// public string group_code { get; set; } = string.Empty; @@ -30,7 +30,12 @@ public partial class BasWorkgroup : BaseEntity public string group_name { get; set; } = string.Empty; /// - /// 车间(工段)代码,SEGMENT.SEGMENTCODE + /// 班组类型 + /// + public string? group_type { get; set; } + + /// + /// 所属车间 /// public string segment_id { get; set; } = string.Empty; @@ -73,5 +78,4 @@ public partial class BasWorkgroup : BaseEntity /// 状态 /// public string? state { get; set; } - } diff --git a/BasicData/Tnb.BasicData.Entities/Entity/BasWorkgroupEmployee.cs b/BasicData/Tnb.BasicData.Entities/Entity/BasWorkgroupEmployee.cs index 37e44e81..1dd43036 100644 --- a/BasicData/Tnb.BasicData.Entities/Entity/BasWorkgroupEmployee.cs +++ b/BasicData/Tnb.BasicData.Entities/Entity/BasWorkgroupEmployee.cs @@ -27,7 +27,7 @@ public partial class BasWorkgroupEmployee : BaseEntity /// /// 班组代码 /// - public string group_code { get; set; } = string.Empty; + public string? group_code { get; set; } /// /// 人员ID,BAS_EMPLOYEE.ID @@ -37,36 +37,16 @@ public partial class BasWorkgroupEmployee : BaseEntity /// /// 人员代码 /// - public string employee_code { get; set; } = string.Empty; + public string? employee_code { get; set; } /// /// 是否班组长 /// public int? is_leader { get; set; } - /// - /// 创建用户 - /// - public string? create_id { get; set; } - - /// - /// 创建时间 - /// - public DateTime create_time { get; set; } = DateTime.Now; - - /// - /// 修改用户 - /// - public string? modify_id { get; set; } - - /// - /// 修改时间 - /// - public DateTime? modify_time { get; set; } - /// /// 扩展字段 /// public string? extras { get; set; } -} +} \ No newline at end of file diff --git a/BasicData/Tnb.BasicData.Entities/Enums/EnumCalendarType.cs b/BasicData/Tnb.BasicData.Entities/Enums/EnumCalendarType.cs new file mode 100644 index 00000000..03afed7b --- /dev/null +++ b/BasicData/Tnb.BasicData.Entities/Enums/EnumCalendarType.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tnb.BasicData.Entities.Enums +{ + public enum EnumCalendarType + { + 分类 = 1, + 班组 = 2, + 个人 = 3 + } +} diff --git a/BasicData/Tnb.BasicData/BasCalendarService.cs b/BasicData/Tnb.BasicData/BasCalendarService.cs index c05bec9c..414a940a 100644 --- a/BasicData/Tnb.BasicData/BasCalendarService.cs +++ b/BasicData/Tnb.BasicData/BasCalendarService.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Aop.Api.Domain; using Aspose.Cells.Drawing; using JNPF.Common.Core.Manager; using JNPF.Common.Models.VisualDev; @@ -12,10 +13,12 @@ using JNPF.JsonSerialization; using JNPF.Systems.Interfaces.System; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; +using NPOI.SS.Formula.Functions; using SqlSugar; using Tnb.BasicData.Entities; using Tnb.BasicData.Entities.Dto; using Tnb.BasicData.Entities.Dto.BasCalendar; +using Tnb.BasicData.Entities.Enums; using Tnb.BasicData.Interfaces; namespace Tnb.BasicData @@ -61,17 +64,152 @@ namespace Tnb.BasicData [HttpPost] public async Task GetWorkData(CalendarInput CalendarInput) { - var db = _repository.AsSugarClient(); - var lists = await db.Queryable().Where(p=>p.worktype== CalendarInput.worktype).ToListAsync(); List CalendarOuts = new List(); - foreach (var list in lists) + if (CalendarInput.calendartype == (int)EnumCalendarType.分类) { - CalendarOut CalendarOut = new CalendarOut(); - CalendarOut.datetext = list.datetext; - CalendarOut.datetype = list.datetype; - CalendarOut.workhour = JSON.Deserialize>(list.workhour); - CalendarOut.worktype = list.worktype; - CalendarOuts.Add(CalendarOut); + var db = _repository.AsSugarClient(); + var lists = await db.Queryable().Where(p => p.worktype == CalendarInput.worktype).ToListAsync(); + + foreach (var list in lists) + { + CalendarOut CalendarOut = new CalendarOut(); + CalendarOut.datetext = list.datetext; + CalendarOut.datetype = list.datetype; + CalendarOut.workhour = JSON.Deserialize>(list.workhour); + CalendarOut.worktype = list.worktype; + CalendarOuts.Add(CalendarOut); + } + } + else if (CalendarInput.calendartype == (int)EnumCalendarType.班组) + { + var db = _repository.AsSugarClient(); + var Shifts = await db.Queryable().Where(p => p.workgroup_id == CalendarInput.workgroupid).Select(p=>p.shift_id).ToListAsync(); + if (Shifts != null && Shifts.Count > 0) + { + var BasTimePeriods = await db.Queryable((a, b) => new object[] { JoinType.Inner, a.shifttype_id == b.id }) + .Where((a,b) => Shifts.Contains(a.shifttype_id!)) + .Select((a, b) => + new Shift + { + startday = b.shiftb_time, + endday = b.shifte_time, + workhour = new WorkHour { start=a.tpb_time,end=a.tpe_time }, + } + ).ToListAsync(); + + + var BasTimePeriodRests = await db.Queryable((a, b) => new object[] { JoinType.Inner, a.shift_type_id == b.id }) + .Where((a, b) => Shifts.Contains(a.shift_type_id!)) + .Select((a, b) => + new Shift + { + startday = b.shiftb_time, + endday = b.shifte_time, + workhour = new WorkHour { start = a.tp_b_time, end = a.tp_e_time }, + }).ToListAsync(); + foreach (var BasTimePeriod in BasTimePeriods) + { + var start = DateTime.Parse(BasTimePeriod.startday!); + var end = DateTime.Parse(BasTimePeriod.endday!); + for (DateTime date = start; date <= end; date = date.AddDays(1)) + { + if (CalendarOuts.Where(p => p.datetext == date.ToString("yyyy-MM-dd")).Any()) + CalendarOuts.Where(p => p.datetext == date.ToString("yyyy-MM-dd")).First().workhour!.Add(BasTimePeriod.workhour!); + else + { + CalendarOut CalendarOut = new CalendarOut(); + CalendarOut.datetext = date.ToString("yyyy-MM-dd"); + CalendarOut.datetype = "workDay"; + CalendarOut.workhour = new List { BasTimePeriod.workhour }; + CalendarOuts.Add(CalendarOut); + } + } + } + foreach (var BasTimePeriodRest in BasTimePeriodRests) + { + var start = DateTime.Parse(BasTimePeriodRest.startday!); + var end = DateTime.Parse(BasTimePeriodRest.endday!); + for (DateTime date = start; date <= end; date = date.AddDays(1)) + { + if (CalendarOuts.Where(p => p.datetext == date.ToString("yyyy-MM-dd")).Any()) + CalendarOuts.Where(p => p.datetext == date.ToString("yyyy-MM-dd")).First().workhour!.Add(BasTimePeriodRest.workhour!); + else + { + CalendarOut CalendarOut = new CalendarOut(); + CalendarOut.datetext = date.ToString("yyyy-MM-dd"); + CalendarOut.datetype = "dayOff"; + CalendarOut.workhour = new List { BasTimePeriodRest.workhour! }; + CalendarOuts.Add(CalendarOut); + } + } + } + } + } + else if (CalendarInput.calendartype == (int)EnumCalendarType.个人) + { + var db = _repository.AsSugarClient(); + var groups = await db.Queryable().Where(p => p.employee_id == CalendarInput.userid).Select(p => p.group_id).ToListAsync(); + var Shifts = await db.Queryable().Where(p => groups.Contains(p.workgroup_id)).Select(p => p.shift_id).ToListAsync(); + if (Shifts != null && Shifts.Count > 0) + { + var BasTimePeriods = await db.Queryable((a, b) => new object[] { JoinType.Inner, a.shifttype_id == b.id }) + .Where((a, b) => Shifts.Contains(a.shifttype_id!)) + .Select((a, b) => + new Shift + { + startday = b.shiftb_time, + endday = b.shifte_time, + workhour = new WorkHour { start = a.tpb_time, end = a.tpe_time }, + } + ).ToListAsync(); + + + var BasTimePeriodRests = await db.Queryable((a, b) => new object[] { JoinType.Inner, a.shift_type_id == b.id }) + .Where((a, b) => Shifts.Contains(a.shift_type_id!)) + .Select((a, b) => + new Shift + { + startday = b.shiftb_time, + endday = b.shifte_time, + workhour = new WorkHour { start = a.tp_b_time, end = a.tp_e_time }, + }).ToListAsync(); + foreach (var BasTimePeriod in BasTimePeriods) + { + var start = DateTime.Parse(BasTimePeriod.startday!); + var end = DateTime.Parse(BasTimePeriod.endday!); + for (DateTime date = start; date <= end; date = date.AddDays(1)) + { + if (CalendarOuts.Where(p => p.datetext == date.ToString("yyyy-MM-dd")).Any()) + CalendarOuts.Where(p => p.datetext == date.ToString("yyyy-MM-dd")).First().workhour!.Add(BasTimePeriod.workhour!); + else + { + CalendarOut CalendarOut = new CalendarOut(); + CalendarOut.datetext = date.ToString("yyyy-MM-dd"); + CalendarOut.datetype = "workDay"; + CalendarOut.workhour = new List { BasTimePeriod.workhour! }; + CalendarOuts.Add(CalendarOut); + } + } + } + foreach (var BasTimePeriodRest in BasTimePeriodRests) + { + var start = DateTime.Parse(BasTimePeriodRest.startday!); + var end = DateTime.Parse(BasTimePeriodRest.endday!); + for (DateTime date = start; date <= end; date = date.AddDays(1)) + { + if (CalendarOuts.Where(p => p.datetext == date.ToString("yyyy-MM-dd")).Any()) + CalendarOuts.Where(p => p.datetext == date.ToString("yyyy-MM-dd")).First().workhour!.Add(BasTimePeriodRest.workhour!); + else + { + CalendarOut CalendarOut = new CalendarOut(); + CalendarOut.datetext = date.ToString("yyyy-MM-dd"); + CalendarOut.datetype = "dayOff"; + CalendarOut.workhour = new List { BasTimePeriodRest.workhour! }; + CalendarOuts.Add(CalendarOut); + } + } + } + } } return CalendarOuts; } @@ -83,24 +221,35 @@ namespace Tnb.BasicData public async Task SaveBatchData(CalendarBatchInput CalendarBatchInput) { var db = _repository.AsSugarClient(); - DateTime start = DateTime.Parse(CalendarBatchInput.startday!); - DateTime end = DateTime.Parse(CalendarBatchInput.endday!); + DateTime start = DateTime.Parse(CalendarBatchInput.startenday![0]); + DateTime end = DateTime.Parse(CalendarBatchInput.startenday![1]); List BasCalendars = new List(); - for (DateTime date = start; date <= end; date.AddDays(1)) + var lists=await db.Queryable().Where(p=>start<=DateTime.Parse(p.datetext!)&&end>= DateTime.Parse(p.datetext!)&& p.worktype== CalendarBatchInput.worktype).ToListAsync(); + var updatelist=new List(); + for (DateTime date = start; date <= end; date = date.AddDays(1)) { if (CalendarBatchInput.weekday!.Contains((int)date.DayOfWeek)) { - BasCalendar BasCalendar = new BasCalendar(); - BasCalendar.datetext = date.ToString("yyyy-MM-dd"); - BasCalendar.datetype = CalendarBatchInput.datetype; - BasCalendar.workhour = CalendarBatchInput.workhour; - BasCalendar.worktype = CalendarBatchInput.worktype; - BasCalendar.create_id = _userManager.UserId; - BasCalendar.create_time = DateTime.Now; - BasCalendars.Add(BasCalendar); + if (lists.Where(p => p.datetext == date.ToString("yyyy-MM-dd")).Any()) + { + var BasCalendar = lists.Where(p => p.datetext == date.ToString("yyyy-MM-dd")).First(); + BasCalendar.datetype = CalendarBatchInput.datetype; + updatelist.Add(BasCalendar); + } + else + { + BasCalendar BasCalendar = new BasCalendar(); + BasCalendar.datetext = date.ToString("yyyy-MM-dd"); + BasCalendar.datetype = CalendarBatchInput.datetype; + BasCalendar.workhour = CalendarBatchInput.workhour; + BasCalendar.worktype = CalendarBatchInput.worktype; + BasCalendar.create_id = _userManager.UserId; + BasCalendar.create_time = DateTime.Now; + BasCalendars.Add(BasCalendar); + } } } - await db.Deleteable(p => BasCalendars.Select(p => p.datetext).ToList().Contains(p.datetext)).ExecuteCommandAsync(); + await db.Updateable(updatelist).ExecuteCommandAsync(); await db.Insertable(BasCalendars).ExecuteCommandAsync(); } }