2025-12-23 20:33:12 +08:00
|
|
|
|
using BLL.Common;
|
2026-01-26 17:59:07 +08:00
|
|
|
|
using Model;
|
2025-12-23 20:33:12 +08:00
|
|
|
|
using Newtonsoft.Json;
|
|
|
|
|
|
using System;
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
using System.Timers;
|
|
|
|
|
|
|
|
|
|
|
|
namespace BLL
|
|
|
|
|
|
{
|
|
|
|
|
|
public class YunMouService
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
#region 启动监视器 系统启动5分钟
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 监视组件
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
private static Timer messageTimer;
|
|
|
|
|
|
private static string token;
|
|
|
|
|
|
private static string consumerId;
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 启动监视器,不一定能成功,根据系统设置决定对监视器执行的操作 系统启动5分钟
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public static void StartMonitor()
|
|
|
|
|
|
{
|
|
|
|
|
|
token = YunMouHelper.getToken();
|
|
|
|
|
|
consumerId = YunMouHelper.addConsumer(token);
|
|
|
|
|
|
|
|
|
|
|
|
if (messageTimer != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
messageTimer.Stop();
|
|
|
|
|
|
messageTimer.Dispose();
|
|
|
|
|
|
messageTimer = null;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
messageTimer = new Timer
|
|
|
|
|
|
{
|
|
|
|
|
|
AutoReset = true
|
|
|
|
|
|
};
|
|
|
|
|
|
messageTimer.Elapsed += new ElapsedEventHandler(InProcess);
|
|
|
|
|
|
messageTimer.Interval = 4000 * 60;// 10分钟
|
|
|
|
|
|
messageTimer.Start();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 流程确认 定时执行 系统启动5分钟
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="sender">Timer组件</param>
|
|
|
|
|
|
/// <param name="e">事件参数</param>
|
|
|
|
|
|
private static void InProcess(object sender, ElapsedEventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
//自动调用
|
|
|
|
|
|
DoSynchDataNew();
|
|
|
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 手动调用
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public static void manualOperation(string tokenSd, string consumerIdSd)
|
|
|
|
|
|
{
|
|
|
|
|
|
DoSynchData(tokenSd, consumerIdSd);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
///
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public static void DoSynchData(string tokenSd = "", string consumerIdSd = "")
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrEmpty(token))
|
|
|
|
|
|
{
|
|
|
|
|
|
token = tokenSd;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (string.IsNullOrEmpty(consumerId))
|
|
|
|
|
|
{
|
|
|
|
|
|
consumerId = consumerIdSd;
|
|
|
|
|
|
}
|
|
|
|
|
|
////获取token
|
|
|
|
|
|
//token = YunMouHelper.getToken();
|
|
|
|
|
|
////创建消费者消费者如果5分钟未调用拉取消息接口将被删除。
|
|
|
|
|
|
//consumerId = YunMouHelper.addConsumer(token);
|
2025-12-24 15:35:40 +08:00
|
|
|
|
ErrLogInfo.WriteLog(token + ";" + consumerId);
|
|
|
|
|
|
|
2025-12-23 20:33:12 +08:00
|
|
|
|
string content = YunMouHelper.consumerMessage(consumerId, token);
|
|
|
|
|
|
//调用消息队列第一次
|
2025-12-24 15:35:40 +08:00
|
|
|
|
ErrLogInfo.WriteLog(content);
|
2025-12-23 20:33:12 +08:00
|
|
|
|
var j2 = JsonConvert.DeserializeObject<dynamic>(content);
|
|
|
|
|
|
|
|
|
|
|
|
//消费者首次拉取消息时需要与消息通道建立连接,此次调用实际拉到消息列表为空,
|
|
|
|
|
|
//再次调用即可拉取到消息,30秒内必须再次调用拉取消息接口,否则将断开与消息通道的连接。
|
|
|
|
|
|
//因此拉取间隔需要在30秒以内,否则每次拉到的消息是空的
|
|
|
|
|
|
if (j2.data.Count > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
|
|
|
|
|
{
|
|
|
|
|
|
for (int i = 0; i < j2.data.Count; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
var msg = JsonConvert.DeserializeObject(j2.data[i]["content"].ToString());
|
|
|
|
|
|
if (!string.IsNullOrEmpty(Convert.ToString(msg.employeeNo)))
|
|
|
|
|
|
{
|
|
|
|
|
|
string deviceSerial = Convert.ToString(msg.deviceSerial);
|
|
|
|
|
|
string employeeNo = Convert.ToString(msg.employeeNo);
|
|
|
|
|
|
DateTime dateTime = Convert.ToDateTime(Convert.ToString(msg.dateTime));
|
|
|
|
|
|
var devices = Funs.DB.Project_Devices.FirstOrDefault(x => x.DeviceSerial == deviceSerial);
|
|
|
|
|
|
Model.SitePerson_PersonInOut newInOut = new Model.SitePerson_PersonInOut
|
|
|
|
|
|
{
|
|
|
|
|
|
ProjectId = devices.ProjectId,
|
|
|
|
|
|
IdentityCard = employeeNo,
|
|
|
|
|
|
IsIn = true,
|
|
|
|
|
|
ChangeTime = dateTime,
|
|
|
|
|
|
InOutWay = Const.InOutWay_1,
|
|
|
|
|
|
};
|
|
|
|
|
|
InsertInOut(newInOut);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
//修改 如果为空循环调用最多5次
|
|
|
|
|
|
for (int y = 0; y < 5; y++)
|
|
|
|
|
|
{
|
|
|
|
|
|
//如果为空再调一次
|
|
|
|
|
|
content = YunMouHelper.consumerMessage(consumerId, token);
|
|
|
|
|
|
//调用消息队列第二次
|
2025-12-24 15:35:40 +08:00
|
|
|
|
ErrLogInfo.WriteLog(content+"调用消息队列" + (y + 2).ToString());
|
2025-12-23 20:33:12 +08:00
|
|
|
|
j2 = JsonConvert.DeserializeObject<dynamic>(content);
|
|
|
|
|
|
if (j2.data.Count > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
|
|
|
|
|
{
|
|
|
|
|
|
for (int i = 0; i < j2.data.Count; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
var msg = JsonConvert.DeserializeObject(j2.data[i]["content"].ToString());
|
|
|
|
|
|
if (!string.IsNullOrEmpty(Convert.ToString(msg.employeeNo)))
|
|
|
|
|
|
{
|
|
|
|
|
|
string deviceSerial = Convert.ToString(msg.deviceSerial);
|
|
|
|
|
|
string employeeNo = Convert.ToString(msg.employeeNo);
|
|
|
|
|
|
DateTime dateTime = Convert.ToDateTime(Convert.ToString(msg.dateTime));
|
|
|
|
|
|
|
|
|
|
|
|
var devices = Funs.DB.Project_Devices.FirstOrDefault(x => x.DeviceSerial == deviceSerial);
|
|
|
|
|
|
//身份证号时
|
|
|
|
|
|
if (employeeNo.Length == 18)
|
|
|
|
|
|
{
|
|
|
|
|
|
Model.SitePerson_PersonInOut newInOut = new Model.SitePerson_PersonInOut
|
|
|
|
|
|
{
|
|
|
|
|
|
ProjectId = devices.ProjectId,
|
|
|
|
|
|
IdentityCard = employeeNo,
|
|
|
|
|
|
IsIn = true,
|
|
|
|
|
|
ChangeTime = dateTime,
|
|
|
|
|
|
InOutWay = Const.InOutWay_1,
|
|
|
|
|
|
};
|
|
|
|
|
|
InsertInOut(newInOut);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
//提交偏移量
|
|
|
|
|
|
var msgOffset = YunMouHelper.offsets(consumerId, token);
|
|
|
|
|
|
}
|
|
|
|
|
|
//有值跳出循环
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
var erro = ex.Message;
|
2025-12-24 15:35:40 +08:00
|
|
|
|
ErrLogInfo.WriteLog(ex.Message);
|
2025-12-23 20:33:12 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static void DoSynchDataNew()
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
////获取token
|
|
|
|
|
|
//token = YunMouHelper.getToken();
|
|
|
|
|
|
////创建消费者消费者如果5分钟未调用拉取消息接口将被删除。
|
|
|
|
|
|
//consumerId = YunMouHelper.addConsumer(token);
|
|
|
|
|
|
|
2025-12-24 15:35:40 +08:00
|
|
|
|
ErrLogInfo.WriteLog(token + ";" + consumerId+ "调用消息队列参数");
|
2025-12-23 20:33:12 +08:00
|
|
|
|
string content = YunMouHelper.consumerMessage(consumerId, token);
|
|
|
|
|
|
//调用消息队列第一次
|
2025-12-24 15:35:40 +08:00
|
|
|
|
ErrLogInfo.WriteLog(content );
|
2025-12-23 20:33:12 +08:00
|
|
|
|
var j2 = JsonConvert.DeserializeObject<dynamic>(content);
|
|
|
|
|
|
|
|
|
|
|
|
//消费者首次拉取消息时需要与消息通道建立连接,此次调用实际拉到消息列表为空,
|
|
|
|
|
|
//再次调用即可拉取到消息,30秒内必须再次调用拉取消息接口,否则将断开与消息通道的连接。
|
|
|
|
|
|
//因此拉取间隔需要在30秒以内,否则每次拉到的消息是空的
|
|
|
|
|
|
if (j2.data.Count > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
|
|
|
|
|
{
|
|
|
|
|
|
for (int i = 0; i < j2.data.Count; i++)
|
|
|
|
|
|
{
|
2026-01-15 13:18:03 +08:00
|
|
|
|
try
|
2025-12-23 20:33:12 +08:00
|
|
|
|
{
|
2026-01-15 13:18:03 +08:00
|
|
|
|
var msg = JsonConvert.DeserializeObject(j2.data[i]["content"].ToString());
|
|
|
|
|
|
if (!string.IsNullOrEmpty(Convert.ToString(msg.employeeNo)))
|
2025-12-23 20:33:12 +08:00
|
|
|
|
{
|
2026-01-15 13:18:03 +08:00
|
|
|
|
string deviceSerial = Convert.ToString(msg.deviceSerial);
|
|
|
|
|
|
string employeeNo = Convert.ToString(msg.employeeNo);
|
|
|
|
|
|
DateTime dateTime = Convert.ToDateTime(Convert.ToString(msg.dateTime));
|
|
|
|
|
|
var devices = db.Project_Devices.FirstOrDefault(x => x.DeviceSerial == deviceSerial);
|
|
|
|
|
|
Model.SitePerson_PersonInOut newInOut = new Model.SitePerson_PersonInOut
|
|
|
|
|
|
{
|
|
|
|
|
|
ProjectId = devices.ProjectId,
|
|
|
|
|
|
IdentityCard = employeeNo,
|
|
|
|
|
|
IsIn = true,
|
|
|
|
|
|
ChangeTime = dateTime,
|
|
|
|
|
|
InOutWay = Const.InOutWay_1,
|
|
|
|
|
|
};
|
|
|
|
|
|
InsertInOut(newInOut);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
|
{
|
|
|
|
|
|
ErrLogInfo.WriteLog(e.StackTrace);
|
2025-12-23 20:33:12 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
//修改 如果为空循环调用最多5次
|
|
|
|
|
|
for (int y = 0; y < 5; y++)
|
|
|
|
|
|
{
|
|
|
|
|
|
//如果为空再调一次
|
|
|
|
|
|
content = YunMouHelper.consumerMessage(consumerId, token);
|
|
|
|
|
|
//调用消息队列第二次
|
2025-12-24 15:35:40 +08:00
|
|
|
|
ErrLogInfo.WriteLog(content+ "调用消息队列" + (y + 2).ToString());
|
2025-12-23 20:33:12 +08:00
|
|
|
|
j2 = JsonConvert.DeserializeObject<dynamic>(content);
|
|
|
|
|
|
if (j2.data.Count > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
|
|
|
|
|
|
{
|
|
|
|
|
|
for (int i = 0; i < j2.data.Count; i++)
|
|
|
|
|
|
{
|
2026-01-15 13:18:03 +08:00
|
|
|
|
try
|
2025-12-23 20:33:12 +08:00
|
|
|
|
{
|
2026-01-15 13:18:03 +08:00
|
|
|
|
var msg = JsonConvert.DeserializeObject(j2.data[i]["content"].ToString());
|
|
|
|
|
|
if (!string.IsNullOrEmpty(Convert.ToString(msg.employeeNo)))
|
2025-12-23 20:33:12 +08:00
|
|
|
|
{
|
2026-01-15 13:18:03 +08:00
|
|
|
|
string deviceSerial = Convert.ToString(msg.deviceSerial);
|
|
|
|
|
|
string employeeNo = Convert.ToString(msg.employeeNo);
|
|
|
|
|
|
DateTime dateTime = Convert.ToDateTime(Convert.ToString(msg.dateTime));
|
|
|
|
|
|
|
|
|
|
|
|
var devices = Funs.DB.Project_Devices.FirstOrDefault(x => x.DeviceSerial == deviceSerial);
|
|
|
|
|
|
//身份证号时
|
|
|
|
|
|
// if (employeeNo.Length == 18)
|
2025-12-23 20:33:12 +08:00
|
|
|
|
{
|
2026-01-15 13:18:03 +08:00
|
|
|
|
Model.SitePerson_PersonInOut newInOut = new Model.SitePerson_PersonInOut
|
|
|
|
|
|
{
|
|
|
|
|
|
ProjectId = devices.ProjectId,
|
|
|
|
|
|
IdentityCard = employeeNo,
|
|
|
|
|
|
IsIn = true,
|
|
|
|
|
|
ChangeTime = dateTime,
|
|
|
|
|
|
InOutWay = Const.InOutWay_1,
|
|
|
|
|
|
};
|
|
|
|
|
|
InsertInOut(newInOut);
|
2025-12-23 20:33:12 +08:00
|
|
|
|
|
2026-01-15 13:18:03 +08:00
|
|
|
|
}
|
2025-12-23 20:33:12 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2026-01-15 13:18:03 +08:00
|
|
|
|
catch (Exception e)
|
|
|
|
|
|
{
|
|
|
|
|
|
ErrLogInfo.WriteLog(e.StackTrace);
|
|
|
|
|
|
}
|
2025-12-23 20:33:12 +08:00
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
//提交偏移量
|
|
|
|
|
|
var msgOffset = YunMouHelper.offsets(consumerId, token);
|
|
|
|
|
|
}
|
|
|
|
|
|
//有值跳出循环
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
var erro = ex.Message;
|
2025-12-24 15:35:40 +08:00
|
|
|
|
ErrLogInfo.WriteLog(ex.Message );
|
2025-12-23 20:33:12 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#region 根据考勤时间进入考勤
|
|
|
|
|
|
public static void InsertInOut(Model.SitePerson_PersonInOut model)
|
|
|
|
|
|
{
|
|
|
|
|
|
//考勤时间配置不为空的情况
|
|
|
|
|
|
var Kqgl_DateManageModel = Funs.DB.Kqgl_DateManage.FirstOrDefault(x => x.ProjectId == model.ProjectId);
|
|
|
|
|
|
if (Kqgl_DateManageModel != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
var changeTime = Convert.ToDateTime(model.ChangeTime);
|
|
|
|
|
|
var nowTime = TimeSpan.Parse(changeTime.ToString("HH:mm:ss"));//当前时间的时分秒
|
|
|
|
|
|
#region 根据规则判断是进门还是出门
|
|
|
|
|
|
TimeSpan AmStartTime1 = TimeSpan.Parse(Kqgl_DateManageModel.AmStartTime1.ToString());
|
|
|
|
|
|
TimeSpan AmStartTime2 = TimeSpan.Parse(Kqgl_DateManageModel.AmStartTime2.ToString());
|
|
|
|
|
|
|
|
|
|
|
|
TimeSpan AmEndTime1 = TimeSpan.Parse(Kqgl_DateManageModel.AmEndTime1.ToString());
|
|
|
|
|
|
TimeSpan AmEndTime2 = TimeSpan.Parse(Kqgl_DateManageModel.AmEndTime2.ToString());
|
|
|
|
|
|
|
|
|
|
|
|
TimeSpan PmStartTime1 = TimeSpan.Parse(Kqgl_DateManageModel.PmStartTime1.ToString());
|
|
|
|
|
|
TimeSpan PmStartTime2 = TimeSpan.Parse(Kqgl_DateManageModel.PmStartTime2.ToString());
|
|
|
|
|
|
|
|
|
|
|
|
TimeSpan PmEndTime1 = TimeSpan.Parse(Kqgl_DateManageModel.PmEndTime1.ToString());
|
|
|
|
|
|
TimeSpan PmEndTime2 = TimeSpan.Parse(Kqgl_DateManageModel.PmEndTime2.ToString());
|
|
|
|
|
|
|
|
|
|
|
|
TimeSpan time1 = new TimeSpan(0, Convert.ToInt32(Kqgl_DateManageModel.LateTime), 0);
|
|
|
|
|
|
TimeSpan time2 = new TimeSpan(0, Convert.ToInt32(Kqgl_DateManageModel.LeaveTime), 0);
|
|
|
|
|
|
//允许迟到x分钟
|
|
|
|
|
|
AmStartTime2 = AmStartTime2.Add(time2);
|
|
|
|
|
|
PmStartTime2 = PmStartTime2.Add(time2);
|
|
|
|
|
|
|
|
|
|
|
|
//允许早退x分钟
|
|
|
|
|
|
AmEndTime1 = AmEndTime1.Add(-time1);
|
|
|
|
|
|
PmEndTime1 = PmEndTime1.Add(-time1);
|
|
|
|
|
|
|
2026-01-26 17:59:07 +08:00
|
|
|
|
SitePerson_Person personModel = null;
|
|
|
|
|
|
if (!string.IsNullOrEmpty(model.PersonId))
|
|
|
|
|
|
{
|
|
|
|
|
|
personModel = Funs.DB.SitePerson_Person.FirstOrDefault(x => x.SitePersonId == model.PersonId && x.ProjectId == model.ProjectId);
|
|
|
|
|
|
model.IdentityCard = personModel.IdentityCard;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
personModel = Funs.DB.SitePerson_Person.FirstOrDefault(x => x.IdentityCard == model.IdentityCard && x.ProjectId == model.ProjectId);
|
|
|
|
|
|
}
|
2025-12-23 20:33:12 +08:00
|
|
|
|
if (personModel != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
//状态:0上午上班 1上午下班 2下午上班 3下午下班
|
|
|
|
|
|
var state = "";
|
|
|
|
|
|
//如果是在进场时间内
|
|
|
|
|
|
if (nowTime >= AmStartTime1 && nowTime <= AmStartTime2)
|
|
|
|
|
|
{
|
|
|
|
|
|
model.IsIn = true;
|
|
|
|
|
|
state = "0";
|
|
|
|
|
|
}
|
|
|
|
|
|
if (nowTime >= PmStartTime1 && nowTime <= PmStartTime2)
|
|
|
|
|
|
{
|
|
|
|
|
|
model.IsIn = true;
|
|
|
|
|
|
state = "2";
|
|
|
|
|
|
}
|
|
|
|
|
|
if (nowTime >= AmEndTime1 && nowTime <= AmEndTime2)
|
|
|
|
|
|
{
|
|
|
|
|
|
model.IsIn = false;
|
|
|
|
|
|
state = "1";
|
|
|
|
|
|
}
|
|
|
|
|
|
if (nowTime >= PmEndTime1 && nowTime <= PmEndTime2)
|
|
|
|
|
|
{
|
|
|
|
|
|
model.IsIn = false;
|
|
|
|
|
|
state = "3";
|
|
|
|
|
|
}
|
|
|
|
|
|
Model.SGGLDB db = Funs.DB;
|
|
|
|
|
|
#region 这个人该时间点内有数据的话,就删掉(上班打卡时间取最早不删除,下班取最晚,删除早的)
|
|
|
|
|
|
var objTime1 = Convert.ToDateTime(Convert.ToDateTime(changeTime).ToString("yyyy-MM-dd") + " " + AmStartTime1.ToString());
|
|
|
|
|
|
var objTime2 = Convert.ToDateTime(Convert.ToDateTime(changeTime).ToString("yyyy-MM-dd") + " " + AmStartTime2.ToString());
|
|
|
|
|
|
|
|
|
|
|
|
var objTime3 = Convert.ToDateTime(Convert.ToDateTime(changeTime).ToString("yyyy-MM-dd") + " " + AmEndTime1.ToString());
|
|
|
|
|
|
var objTime4 = Convert.ToDateTime(Convert.ToDateTime(changeTime).ToString("yyyy-MM-dd") + " " + AmEndTime2.ToString());
|
|
|
|
|
|
|
|
|
|
|
|
var objTime5 = Convert.ToDateTime(Convert.ToDateTime(changeTime).ToString("yyyy-MM-dd") + " " + PmStartTime1.ToString());
|
|
|
|
|
|
var objTime6 = Convert.ToDateTime(Convert.ToDateTime(changeTime).ToString("yyyy-MM-dd") + " " + PmStartTime2.ToString());
|
|
|
|
|
|
|
|
|
|
|
|
var objTime7 = Convert.ToDateTime(Convert.ToDateTime(changeTime).ToString("yyyy-MM-dd") + " " + PmEndTime1.ToString());
|
|
|
|
|
|
var objTime8 = Convert.ToDateTime(Convert.ToDateTime(changeTime).ToString("yyyy-MM-dd") + " " + PmEndTime2.ToString());
|
|
|
|
|
|
|
|
|
|
|
|
//1.上午上班
|
|
|
|
|
|
var result1 = db.SitePerson_PersonInOut.Where(x => x.ProjectId == model.ProjectId && x.IdentityCard == personModel.IdentityCard &&
|
|
|
|
|
|
x.ChangeTime >= objTime1 && x.ChangeTime <= objTime2
|
|
|
|
|
|
).ToList();
|
|
|
|
|
|
//2.上午下班
|
|
|
|
|
|
var result2 = db.SitePerson_PersonInOut.Where(x => x.ProjectId == model.ProjectId && x.IdentityCard == personModel.IdentityCard &&
|
|
|
|
|
|
x.ChangeTime >= objTime3 && x.ChangeTime <= objTime4
|
|
|
|
|
|
).ToList();
|
|
|
|
|
|
//3.下午上班
|
|
|
|
|
|
var result3 = db.SitePerson_PersonInOut.Where(x => x.ProjectId == model.ProjectId && x.IdentityCard == personModel.IdentityCard &&
|
|
|
|
|
|
x.ChangeTime >= objTime5 && x.ChangeTime <= objTime6
|
|
|
|
|
|
).ToList();
|
|
|
|
|
|
//4.下午下班
|
|
|
|
|
|
var result4 = db.SitePerson_PersonInOut.Where(x => x.ProjectId == model.ProjectId && x.IdentityCard == personModel.IdentityCard &&
|
|
|
|
|
|
x.ChangeTime >= objTime7 && x.ChangeTime <= objTime8
|
|
|
|
|
|
).ToList();
|
|
|
|
|
|
|
|
|
|
|
|
//上班打卡时间取最早,下班取最晚
|
|
|
|
|
|
if (result1.Count > 0 && state == "0")
|
|
|
|
|
|
{
|
|
|
|
|
|
//db.SitePerson_PersonInOut.DeleteAllOnSubmit(result1);
|
|
|
|
|
|
//db.SubmitChanges();
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (result1.Count == 0 && state == "0")
|
|
|
|
|
|
{
|
|
|
|
|
|
PersonInOutService.AddPersonInOut(model);
|
|
|
|
|
|
}
|
|
|
|
|
|
if (result2.Count > 0 && state == "1")
|
|
|
|
|
|
{
|
|
|
|
|
|
db.SitePerson_PersonInOut.DeleteAllOnSubmit(result2);
|
|
|
|
|
|
db.SubmitChanges();
|
|
|
|
|
|
PersonInOutService.AddPersonInOut(model);
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (result2.Count == 0 && state == "1")
|
|
|
|
|
|
{
|
|
|
|
|
|
PersonInOutService.AddPersonInOut(model);
|
|
|
|
|
|
}
|
|
|
|
|
|
if (result3.Count > 0 && state == "2")
|
|
|
|
|
|
{
|
|
|
|
|
|
//db.SitePerson_PersonInOut.DeleteAllOnSubmit(result3);
|
|
|
|
|
|
//db.SubmitChanges();
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (result3.Count == 0 && state == "2")
|
|
|
|
|
|
{
|
|
|
|
|
|
PersonInOutService.AddPersonInOut(model);
|
|
|
|
|
|
}
|
|
|
|
|
|
if (result4.Count > 0 && state == "3")
|
|
|
|
|
|
{
|
|
|
|
|
|
db.SitePerson_PersonInOut.DeleteAllOnSubmit(result4);
|
|
|
|
|
|
db.SubmitChanges();
|
|
|
|
|
|
PersonInOutService.AddPersonInOut(model);
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (result4.Count == 0 && state == "3")
|
|
|
|
|
|
{
|
|
|
|
|
|
PersonInOutService.AddPersonInOut(model);
|
|
|
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|