using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web;
using System.Web.Http;
using BLL;
using Model;
using WebAPI.Filter;
namespace WebAPI.Controllers
{
///
///
///
public class DoorServiceController : ApiController
{
#region 项目出入记录接口
///
/// 保存出入记录信息
///
/// 出入记录信息
///
[HttpPost]
public Model.ResponeData postPersonInOuts([FromBody] Model.attendanceItems records)
{
var responeData = new Model.ResponeData();
try
{
if (records != null && records.records.Count() > 0)
{
List attendanceItems = records.records;
var getprojectCode = attendanceItems.FirstOrDefault(x => x.ProjectCode != null || x.ProjectId != null);
if (getprojectCode != null)
{
string projectId = getprojectCode.ProjectId;
if (string.IsNullOrEmpty(projectId))
{
var getProject = ProjectService.GetProjectByProjectCode(getprojectCode.ProjectCode);
if (getProject != null)
{
projectId = getProject.ProjectId;
}
}
if (!string.IsNullOrEmpty(projectId))
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
int maxId = 0;
var getmax = db.T_d_facerecord.Where(x => x.ProjectId == projectId && x.RoleID == "白名单").Select(x => x.ID);
if (getmax.Count() > 0)
{
maxId = getmax.Max();
}
foreach (var item in attendanceItems)
{
maxId = maxId + 1;
string name = string.Empty;
string cardNo = string.Empty;
var getPerson = db.SitePerson_Person.FirstOrDefault(x => x.IdentityCard == item.idCardNumber);
if (getPerson != null)
{
name = getPerson.PersonName;
cardNo = getPerson.CardNo;
}
Model.T_d_facerecord newFacerecord = new Model.T_d_facerecord()
{
NewID = SQLHelper.GetNewID(),
ProjectId = projectId,
ID = maxId,
EmployName = name,
EmployNO = item.idCardNumber,
RoleID = "白名单",
DateTimeRecord = Funs.GetNewDateTime(item.attendanceTime),
RecordDes = "白名单:允许通行",
InOrOut = (item.attendanceType == 1 ? "进门" : "出门"),
};
db.T_d_facerecord.InsertOnSubmit(newFacerecord);
db.SubmitChanges();
///// 根据出入记录 写入考勤记录
Model.t_d_facerecordItem facerecord = new Model.t_d_facerecordItem
{
ID = maxId,
EmployName = name,
IDCardNo = item.idCardNumber,
EmployNO = item.idCardNumber,
ProjectId = projectId,
RoleID = "白名单",
DateTimeRecord = Funs.GetNewDateTime(item.attendanceTime),
RecordDes = "白名单:允许通行",
InOrOut = (item.attendanceType == 1 ? "进门" : "出门"),
};
if (facerecord.DateTimeRecord.HasValue)
{
int isIn = 0;
if (facerecord.InOrOut == "进门")
{
isIn = 1;
}
APIPersonService.getPersonInOut(facerecord.ProjectId, facerecord.EmployNO, isIn, facerecord.DateTimeRecord.Value);
}
}
responeData.message = "插入成功!";
}
}
else
{
responeData.code = 0;
responeData.message = "项目号异常!";
}
}
else
{
responeData.code = 0;
responeData.message = "项目号为空!";
}
}
else
{
responeData.code = 0;
responeData.message = "数据为空!";
}
}
catch (Exception ex)
{
responeData.code = 0;
responeData.message = ex.Message;
}
return responeData;
}
#endregion
#region 项目出入人员信息
///
/// 保存人员信息
///
/// 人员信息
///
[HttpPost]
public Model.ResponeData postPersons([FromBody] Model.PersonItem person)
{
var responeData = new Model.ResponeData();
try
{
if (person != null)
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
var getProject = ProjectService.GetProjectByProjectCode(person.ProjectCode);
if (getProject != null)
{
var getUnit = UnitService.getUnitByCollCropCodeUnitName(person.CollCropCode, person.UnitName);
if (getUnit != null)
{
Model.SitePerson_Person newPerson = new Model.SitePerson_Person
{
PersonId = SQLHelper.GetNewID(),
ProjectId = getProject.ProjectId,
UnitId = getUnit.UnitId,
PersonName = person.PersonName,
IdentityCard = person.IdentityCard,
IdcardType = "SHENFEN_ZHENGJIAN",
IdcardAddress = person.IdcardAddress,
IdcardForever = "N",
IdcardStartDate = Funs.GetNewDateTime(person.IdcardStartDate),
IdcardEndDate = Funs.GetNewDateTime(person.IdcardEndDate),
Sex = (person.Sex == "女" || person.Sex == "2") ? "2" : "1",
Address = person.Address,
OutResult = person.OutResult,
Birthday = person.Birthday,
Telephone = person.Telephone,
IsUsed = (person.IsUsed == false ? false : true),
InTime = Funs.GetNewDateTimeOrNow(person.InTime),
Password = BLL.PersonService.GetPersonPassWord(person.IdentityCard),
Isprint = "0",
};
if (!string.IsNullOrEmpty(person.TeamGroupName) && !string.IsNullOrEmpty(newPerson.UnitId))
{
var getTeamGroup = TeamGroupService.getTeamGroupByTeamGroupName(getProject.ProjectId, newPerson.UnitId, person.TeamGroupName);
if (getTeamGroup != null)
{
newPerson.TeamGroupId = getTeamGroup.TeamGroupId;
}
else
{
Model.ProjectData_TeamGroup newTeamGroup = new Model.ProjectData_TeamGroup
{
TeamGroupId = SQLHelper.GetNewID(),
ProjectId = getProject.ProjectId,
UnitId = newPerson.UnitId,
TeamGroupName = person.TeamGroupName,
Remark = "来源:门禁对接数据",
TeamTypeId = "CANJIAN_TEAM",
EntryTime = System.DateTime.Now,
RealNamePushTime = null,
};
db.ProjectData_TeamGroup.InsertOnSubmit(newTeamGroup);
db.SubmitChanges();
newPerson.TeamGroupId = newTeamGroup.TeamGroupId;
}
}
var getWorkArea = UnitWorkService.GetUnitWorkByUnitWorkName(getProject.ProjectId, person.WorkAreaName);
if (getWorkArea != null)
{
newPerson.WorkAreaId = getWorkArea.UnitWorkId;
}
var getWorkPost = WorkPostService.GetWorkPostByName(person.WorkPostName);
if (getWorkPost != null)
{
newPerson.WorkPostId = getWorkPost.WorkPostId;
}
var getHsseMan = ProjectService.getHSSEManager(getProject.ProjectId);
if (getHsseMan != null)
{
newPerson.AuditorId = getHsseMan.UserId;
newPerson.AuditorDate = DateTime.Now;
}
newPerson.OutTime = Funs.GetNewDateTime(person.OutTime);
if (person.headImage != null)
{
var image = Convert.FromBase64String(person.headImage);
newPerson.HeadImage = image;
string rootPath = ConfigurationManager.AppSettings["localRoot"];
string path = "FileUpLoad/PersonBaseInfo/" + DateTime.Now.ToString("yyyy-MM") + "/";
string fileUrl = (rootPath + path).Replace('/', '\\');
string flieName = Funs.GetNewFileName() + "~" + person.PersonName + ".jpg";
if (!Directory.Exists(fileUrl))
{
Directory.CreateDirectory(fileUrl);
}
newPerson.PhotoUrl = path + flieName;
File.WriteAllBytes((fileUrl + flieName), image);
//AttachFileService.Base64ToImage(person.headImage, path, person.PersonName);
}
var getPerson = db.SitePerson_Person.FirstOrDefault(e => e.ProjectId == getProject.ProjectId && e.IdentityCard == person.IdentityCard);
if (getPerson == null)
{
PersonService.AddPerson(newPerson);
responeData.message = "新增人员成功!";
}
else
{
if (!string.IsNullOrEmpty(person.OutTime))
{
var outTime = Funs.GetNewDateTimeOrNow(person.OutTime);
PersonService.PersonOut(getPerson.PersonId, outTime);
responeData.message = "更新出场时间";
}
else
{
getPerson.PersonName = newPerson.PersonName;
getPerson.IdcardAddress = newPerson.IdcardAddress;
getPerson.IdcardStartDate = newPerson.IdcardStartDate;
getPerson.IdcardEndDate = newPerson.IdcardEndDate;
getPerson.Sex = newPerson.Sex;
getPerson.Address = newPerson.Address;
getPerson.OutResult = newPerson.OutResult;
getPerson.Birthday = newPerson.Birthday;
getPerson.Telephone = newPerson.Telephone;
getPerson.IsUsed = true;
getPerson.InTime = newPerson.InTime;
if (!string.IsNullOrEmpty(newPerson.PhotoUrl))
{
getPerson.PhotoUrl = newPerson.PhotoUrl;
}
db.SubmitChanges();
responeData.message = getPerson.PersonName+ ":信息更新成功!";
}
}
}
else
{
responeData.code = 0;
responeData.message = "单位:" + person.UnitName + "施工平台不存在!";
}
}
else
{
responeData.code = 0;
responeData.message = "项目号:" + person.ProjectCode + "施工平台不存在!";
}
}
}
else
{
responeData.code = 0;
responeData.message = "数据为空!";
}
}
catch (Exception ex)
{
responeData.code = 0;
responeData.message = ex.Message;
}
return responeData;
}
#endregion
#region 获取在岗人员 -照片不空
///
/// 获取在岗人员
///
///
///
public Model.ResponeData getPersons(string projectCode)
{
var responeData = new Model.ResponeData();
try
{
var getProject = Funs.DB.Base_Project.FirstOrDefault(e => e.ProjectCode == projectCode);
if (getProject != null)
{
responeData.data = from x in Funs.DB.SitePerson_Person
join y in Funs.DB.Base_Unit on x.UnitId equals y.UnitId
join T in Funs.DB.ProjectData_TeamGroup on x.TeamGroupId equals T.TeamGroupId
join w in Funs.DB.Base_WorkPost on x.WorkPostId equals w.WorkPostId
where x.ProjectId == getProject.ProjectId && !x.ExchangeTime.HasValue
&& (!x.OutTime.HasValue || x.OutTime > DateTime.Now)
&& x.InTime.HasValue && x.InTime < DateTime.Now
&& x.IsUsed == true
&& x.PhotoUrl != null
select new
{
x.PersonId,
x.PersonName,
x.CardNo,
x.IdentityCard,
x.UnitId,
y.UnitCode,
y.UnitName,
y.ShortUnitName,
T.TeamGroupName,
x.Sex,
w.WorkPostName,
x.Telephone,
x.Address,
x.InTime,
x.AuditorDate,
x.ExchangeTime,
x.ExchangeTime2,
x.PhotoUrl,
};
}
else
{
responeData.code = 0;
responeData.message = "数据为空!";
}
}
catch (Exception ex)
{
responeData.code = 0;
responeData.message = ex.Message;
ErrLogInfo.WriteLog(ex, "WX接口-获取人员下发门禁", "DoorServiceController.getPersons");
}
return responeData;
}
#endregion
#region 更新人员数据交换时间
///
/// 更新人员数据交换时间
///
///
///
///
///
public Model.ResponeData getUpdatePersonExchangeTime(string projectCode, string idCard, string type)
{
var responeData = new Model.ResponeData();
try
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
var getProject = db.Base_Project.FirstOrDefault(e => e.ProjectCode == projectCode);
if (getProject != null)
{
var getPerson = db.SitePerson_Person.FirstOrDefault(e => e.ProjectId == getProject.ProjectId && e.IdentityCard == idCard);
if (getPerson != null && !string.IsNullOrEmpty(type))
{
if (type == "1")
{
getPerson.ExchangeTime2 = DateTime.Now;
if (!getPerson.ExchangeTime.HasValue)
{
getPerson.ExchangeTime = DateTime.Now;
}
}
else
{
getPerson.ExchangeTime = DateTime.Now;
}
db.SubmitChanges();
}
}
}
}
catch (Exception ex)
{
responeData.code = 0;
responeData.message = ex.Message;
ErrLogInfo.WriteLog(ex, "WX接口-更新人员数据交换时间", "PersonController.getUpdatePersonExchangeTime");
}
return responeData;
}
#endregion
#region 获取离场人员
///
/// 获取离场人员
///
///
///
public Model.ResponeData getOutWorkPersons(string projectCode)
{
var responeData = new Model.ResponeData();
try
{
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
var getProject = db.Base_Project.FirstOrDefault(e => e.ProjectCode == projectCode);
if (getProject != null)
{
responeData.data = (from x in db.SitePerson_Person
where x.ProjectId == getProject.ProjectId
&& x.OutTime.HasValue
&& !x.ExchangeTime2.HasValue && x.ExchangeTime.HasValue
select new
{
x.PersonId,
x.PersonName,
x.CardNo,
x.IdentityCard,
OutTime = x.OutTime == null ? DateTime.Now.AddYears(10) : x.OutTime,
}).Take(200).ToList();
}
}
}
catch (Exception ex)
{
responeData.code = 0;
responeData.message = ex.Message;
}
return responeData;
}
#endregion
#region 插入人员出入场记录
///
/// 获取人员出入场记录
///
///
///
///
///
///
public Model.ResponeData getPersonInOut(string projectCode, string idCard, int isIn, DateTime changeTime)
{
var responeData = new Model.ResponeData();
try
{
var getProject = ProjectService.GetProjectByProjectCode(projectCode);
if (getProject != null)
{
Model.SitePerson_PersonInOut newInOut = new Model.SitePerson_PersonInOut
{
ProjectId = getProject.ProjectId,
IdentityCard = idCard,
IsIn = isIn == 1 ? true : false,
ChangeTime = changeTime,
InOutWay = Const.InOutWay_1,
};
PersonInOutService.AddPersonInOut(newInOut);
}
}
catch (Exception ex)
{
responeData.code = 0;
responeData.message = ex.Message;
ErrLogInfo.WriteLog(ex, "WX接口-插入人员出入场记录", "PersonController.getPersonInOut");
}
return responeData;
}
#endregion
///
/// 获取人员考勤接口
///
///
///
///
///
public Model.ResponeData getAttendance(string projectId, string dateA, string dateZ)
{
var responeData = new Model.ResponeData();
try
{
string unitId = null;
string PostId = null;
var getData = Funs.DB.spInOutManHoursReport(projectId, unitId, PostId, Funs.GetNewDateTimeOrNow(dateA), Funs.GetNewDateTimeOrNow(dateZ));
Dictionary res = new Dictionary();
foreach (InOutstatisticsItem row in getData )
{
if (res.ContainsKey(row.UnitName + "$" + row.PostName))
{
res[row.UnitName + "$" + row.PostName]+= row.PersonCountSum.Value;
}
else
{
res.Add(row.UnitName + "$" + row.PostName,row.PersonCountSum.Value);
}
}
DataTable dt = new DataTable();
dt.Columns.Add("unit");
dt.Columns.Add("post");
dt.Columns.Add("count");
foreach (string key in res.Keys)
{
var row = dt.NewRow();
row["unit"] = key.Split('$')[0];
row["post"] = key.Split('$')[1];
row["count"] = res[key];
dt.Rows.Add(row);
}
responeData.data = dt;
}
catch (Exception ex)
{
responeData.code = 0;
responeData.message = ex.Message;
ErrLogInfo.WriteLog(ex, "WX接口-插入人员出入场记录", "PersonController.getPersonInOut");
}
return responeData;
}
}
}