工作日历
This commit is contained in:
@@ -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; }
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@ using JNPF.Common.Security;
|
||||
using SqlSugar;
|
||||
|
||||
namespace Tnb.BasicData.Entities;
|
||||
|
||||
/// <summary>
|
||||
/// 班次资料
|
||||
/// </summary>
|
||||
|
||||
58
BasicData/Tnb.BasicData.Entities/Entity/BasShiftWorkgroup.cs
Normal file
58
BasicData/Tnb.BasicData.Entities/Entity/BasShiftWorkgroup.cs
Normal file
@@ -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;
|
||||
/// <summary>
|
||||
/// 班次计划与班组的关联关系
|
||||
/// </summary>
|
||||
[SugarTable("bas_shift_workgroup")]
|
||||
public partial class BasShiftWorkgroup : BaseEntity<string>
|
||||
{
|
||||
public BasShiftWorkgroup()
|
||||
{
|
||||
id = SnowflakeIdHelper.NextId();
|
||||
}
|
||||
/// <summary>
|
||||
/// 班次计划id
|
||||
/// </summary>
|
||||
public string shift_id { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 班组id
|
||||
/// </summary>
|
||||
public string workgroup_id { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 创建用户
|
||||
/// </summary>
|
||||
public string? create_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
public DateTime? create_time { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 修改用户
|
||||
/// </summary>
|
||||
public string? modify_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 修改时间
|
||||
/// </summary>
|
||||
public DateTime? modify_time { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 扩展
|
||||
/// </summary>
|
||||
public string? extras { get; set; }
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ public partial class BasWorkgroup : BaseEntity<string>
|
||||
public string? org_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 班组代码
|
||||
/// 班组编号
|
||||
/// </summary>
|
||||
public string group_code { get; set; } = string.Empty;
|
||||
|
||||
@@ -30,7 +30,12 @@ public partial class BasWorkgroup : BaseEntity<string>
|
||||
public string group_name { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 车间(工段)代码,SEGMENT.SEGMENTCODE
|
||||
/// 班组类型
|
||||
/// </summary>
|
||||
public string? group_type { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 所属车间
|
||||
/// </summary>
|
||||
public string segment_id { get; set; } = string.Empty;
|
||||
|
||||
@@ -73,5 +78,4 @@ public partial class BasWorkgroup : BaseEntity<string>
|
||||
/// 状态
|
||||
/// </summary>
|
||||
public string? state { get; set; }
|
||||
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ public partial class BasWorkgroupEmployee : BaseEntity<string>
|
||||
/// <summary>
|
||||
/// 班组代码
|
||||
/// </summary>
|
||||
public string group_code { get; set; } = string.Empty;
|
||||
public string? group_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 人员ID,BAS_EMPLOYEE.ID
|
||||
@@ -37,36 +37,16 @@ public partial class BasWorkgroupEmployee : BaseEntity<string>
|
||||
/// <summary>
|
||||
/// 人员代码
|
||||
/// </summary>
|
||||
public string employee_code { get; set; } = string.Empty;
|
||||
public string? employee_code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否班组长
|
||||
/// </summary>
|
||||
public int? is_leader { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 创建用户
|
||||
/// </summary>
|
||||
public string? create_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
public DateTime create_time { get; set; } = DateTime.Now;
|
||||
|
||||
/// <summary>
|
||||
/// 修改用户
|
||||
/// </summary>
|
||||
public string? modify_id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 修改时间
|
||||
/// </summary>
|
||||
public DateTime? modify_time { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 扩展字段
|
||||
/// </summary>
|
||||
public string? extras { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
15
BasicData/Tnb.BasicData.Entities/Enums/EnumCalendarType.cs
Normal file
15
BasicData/Tnb.BasicData.Entities/Enums/EnumCalendarType.cs
Normal file
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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<dynamic> GetWorkData(CalendarInput CalendarInput)
|
||||
{
|
||||
var db = _repository.AsSugarClient();
|
||||
var lists = await db.Queryable<BasCalendar>().Where(p=>p.worktype== CalendarInput.worktype).ToListAsync();
|
||||
List<CalendarOut> CalendarOuts = new List<CalendarOut>();
|
||||
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>>(list.workhour);
|
||||
CalendarOut.worktype = list.worktype;
|
||||
CalendarOuts.Add(CalendarOut);
|
||||
var db = _repository.AsSugarClient();
|
||||
var lists = await db.Queryable<BasCalendar>().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>>(list.workhour);
|
||||
CalendarOut.worktype = list.worktype;
|
||||
CalendarOuts.Add(CalendarOut);
|
||||
}
|
||||
}
|
||||
else if (CalendarInput.calendartype == (int)EnumCalendarType.班组)
|
||||
{
|
||||
var db = _repository.AsSugarClient();
|
||||
var Shifts = await db.Queryable<BasShiftWorkgroup>().Where(p => p.workgroup_id == CalendarInput.workgroupid).Select(p=>p.shift_id).ToListAsync();
|
||||
if (Shifts != null && Shifts.Count > 0)
|
||||
{
|
||||
var BasTimePeriods = await db.Queryable<BasTimePeriod, BasShift>((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<BasTimePeriodRest, BasShift>((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<WorkHour> { 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<WorkHour> { BasTimePeriodRest.workhour! };
|
||||
CalendarOuts.Add(CalendarOut);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (CalendarInput.calendartype == (int)EnumCalendarType.个人)
|
||||
{
|
||||
var db = _repository.AsSugarClient();
|
||||
var groups = await db.Queryable<BasWorkgroupEmployee>().Where(p => p.employee_id == CalendarInput.userid).Select(p => p.group_id).ToListAsync();
|
||||
var Shifts = await db.Queryable<BasShiftWorkgroup>().Where(p => groups.Contains(p.workgroup_id)).Select(p => p.shift_id).ToListAsync();
|
||||
if (Shifts != null && Shifts.Count > 0)
|
||||
{
|
||||
var BasTimePeriods = await db.Queryable<BasTimePeriod, BasShift>((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<BasTimePeriodRest, BasShift>((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<WorkHour> { 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<WorkHour> { 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<BasCalendar> BasCalendars = new List<BasCalendar>();
|
||||
for (DateTime date = start; date <= end; date.AddDays(1))
|
||||
var lists=await db.Queryable<BasCalendar>().Where(p=>start<=DateTime.Parse(p.datetext!)&&end>= DateTime.Parse(p.datetext!)&& p.worktype== CalendarBatchInput.worktype).ToListAsync();
|
||||
var updatelist=new List<BasCalendar>();
|
||||
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<BasCalendar>(p => BasCalendars.Select(p => p.datetext).ToList().Contains(p.datetext)).ExecuteCommandAsync();
|
||||
await db.Updateable(updatelist).ExecuteCommandAsync();
|
||||
await db.Insertable(BasCalendars).ExecuteCommandAsync();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user