工作日历

This commit is contained in:
qianjiawei
2023-06-29 17:47:37 +08:00
parent 650daf99d5
commit 7f8fdad324
8 changed files with 264 additions and 50 deletions

View File

@@ -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();
}
}