@@ -10,6 +10,7 @@ using System.Runtime.InteropServices; | |||||
using System.Web; | using System.Web; | ||||
using AlarmCSharpDemo; | using AlarmCSharpDemo; | ||||
using Dapper; | using Dapper; | ||||
using Learun.Util; | |||||
namespace DigitalSchoolApi.Controllers | namespace DigitalSchoolApi.Controllers | ||||
{ | { | ||||
@@ -57,7 +58,7 @@ namespace DigitalSchoolApi.Controllers | |||||
{ | { | ||||
//开始自动打卡 | //开始自动打卡 | ||||
//删除今日考勤 | //删除今日考勤 | ||||
connmis.Execute("delete from ADR_Record where ADYear='"+ workDateTime.Year + "' and ADMonth='" + workDateTime.Month.ToString().PadLeft(2,'0') + "' and ADDay='"+ workDateTime.Day.ToString().PadLeft(2,'0') + "' and UserNo='"+ useritem.EmpNo + "'"); | |||||
connmis.Execute("delete from ADR_Record where ADYear='" + workDateTime.Year + "' and ADMonth='" + workDateTime.Month.ToString().PadLeft(2, '0') + "' and ADDay='" + workDateTime.Day.ToString().PadLeft(2, '0') + "' and UserNo='" + useritem.EmpNo + "'"); | |||||
//上午上班 | //上午上班 | ||||
ADR_RecordEntity adrRecordEntity = new ADR_RecordEntity(); | ADR_RecordEntity adrRecordEntity = new ADR_RecordEntity(); | ||||
adrRecordEntity.Create(); | adrRecordEntity.Create(); | ||||
@@ -103,7 +104,7 @@ namespace DigitalSchoolApi.Controllers | |||||
//adrRecordEntity.ADTime = offworkDateTime.AddMinutes(10); | //adrRecordEntity.ADTime = offworkDateTime.AddMinutes(10); | ||||
//adrRecordEntity.ClockTime = offworkDateTime.AddMinutes(10); | //adrRecordEntity.ClockTime = offworkDateTime.AddMinutes(10); | ||||
//liangkun 2021-05-06 应客户要求改为下午6:00下班 | //liangkun 2021-05-06 应客户要求改为下午6:00下班 | ||||
adrRecordEntity.ADTime = Convert.ToDateTime(datenow + " 18:00"); | |||||
adrRecordEntity.ADTime = Convert.ToDateTime(datenow + " 18:00"); | |||||
adrRecordEntity.ClockTime = Convert.ToDateTime(datenow + " 18:00"); | adrRecordEntity.ClockTime = Convert.ToDateTime(datenow + " 18:00"); | ||||
connmis.Execute("insert into ADR_Record(ID, UserNo, ADType, ADTime, ClockTime, ClockStatus, ClockPlace, ADYear, ADMonth, ADDay, ADPhoto) values(" + | connmis.Execute("insert into ADR_Record(ID, UserNo, ADType, ADTime, ClockTime, ClockStatus, ClockPlace, ADYear, ADMonth, ADDay, ADPhoto) values(" + | ||||
"'" + adrRecordEntity.ID + "','" + adrRecordEntity.UserNo + "','" + adrRecordEntity.ADType + "','" + adrRecordEntity.ADTime + "'," + | "'" + adrRecordEntity.ID + "','" + adrRecordEntity.UserNo + "','" + adrRecordEntity.ADType + "','" + adrRecordEntity.ADTime + "'," + | ||||
@@ -1114,6 +1115,50 @@ namespace DigitalSchoolApi.Controllers | |||||
} | } | ||||
} | } | ||||
public static string CaptureJPEG(string id) | |||||
{ | |||||
try | |||||
{ | |||||
using (IDbConnection connmis = new SqlConnection(_misConnection)) | |||||
{ | |||||
uint iBuffSize = 400000; | |||||
byte[] byJpegPicBuffer = new byte[iBuffSize]; | |||||
uint dwSizeReturned = 0; | |||||
var deviceEntity = connmis.QueryFirstOrDefault<ADR_DeviceEntity>($"select * from ADR_Device where id='{id}';"); | |||||
if (deviceEntity == null) | |||||
{ | |||||
return "设备不存在!"; | |||||
} | |||||
if (deviceEntity.F_EnabledMark == 0) | |||||
{ | |||||
return "设备未启用!"; | |||||
} | |||||
#region 登录考勤机 | |||||
CHCNetSDK.NET_DVR_Init(); | |||||
CHCNetSDK.NET_DVR_DEVICEINFO_V30 DeviceInfo = new CHCNetSDK.NET_DVR_DEVICEINFO_V30(); | |||||
var m_lUserID = CHCNetSDK.NET_DVR_Login_V30(deviceEntity.IpAddress, deviceEntity.PortNumber.Value, deviceEntity.AdminAccount, deviceEntity.AdminPwd, ref DeviceInfo); | |||||
if (m_lUserID < 0) | |||||
{ | |||||
return "设备登录失败!"; | |||||
} | |||||
#endregion | |||||
CHCNetSDK.NET_DVR_JPEGPARA lpJpegPara = new CHCNetSDK.NET_DVR_JPEGPARA(); | |||||
lpJpegPara.wPicQuality = 0; | |||||
lpJpegPara.wPicSize = 0xff; | |||||
if (CHCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(m_lUserID, 1 + (int)DeviceInfo.byStartChan, ref lpJpegPara, byJpegPicBuffer, | |||||
iBuffSize, ref dwSizeReturned)) | |||||
{ | |||||
return "data:image/jpeg;base64," + Convert.ToBase64String(byJpegPicBuffer, 0, (int)dwSizeReturned); | |||||
} | |||||
return "设备抓图失败!"; | |||||
} | |||||
} | |||||
catch (Exception e) | |||||
{ | |||||
return "设备抓图异常:" + e.Message; | |||||
} | |||||
} | |||||
#region 考勤结构体 | #region 考勤结构体 | ||||
/// <summary> | /// <summary> | ||||
/// 考勤设备日志 | /// 考勤设备日志 | ||||
@@ -274,6 +274,16 @@ namespace DigitalSchoolApi.Controllers | |||||
return Ok(); | return Ok(); | ||||
} | } | ||||
public IHttpActionResult CaptureJPEG(string id) | |||||
{ | |||||
var result=HKAttendanceController.CaptureJPEG(id); | |||||
return Ok(new | |||||
{ | |||||
state = !result.Contains("设备"), | |||||
data = result | |||||
}); | |||||
} | |||||
#region 长阳报名\晚归预警 | #region 长阳报名\晚归预警 | ||||
/// <summary> | /// <summary> | ||||
/// 长阳报名 保存后24小时自动提交 | /// 长阳报名 保存后24小时自动提交 | ||||
@@ -509,7 +519,7 @@ namespace DigitalSchoolApi.Controllers | |||||
//学生 | //学生 | ||||
RecurringJob.AddOrUpdate("SyncTLMZYMiddleToStuInfo", | RecurringJob.AddOrUpdate("SyncTLMZYMiddleToStuInfo", | ||||
() => TLMSchoolController.SyncStuInfoOracle(null), | () => TLMSchoolController.SyncStuInfoOracle(null), | ||||
Cron.Daily(1), TimeZoneInfo.Local); | |||||
Cron.MinuteInterval(5), TimeZoneInfo.Local); | |||||
return Ok(); | return Ok(); | ||||
} | } | ||||
/// <summary> | /// <summary> | ||||
@@ -328,7 +328,16 @@ namespace AlarmCSharpDemo | |||||
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 24, ArraySubType = UnmanagedType.I1)] | [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 24, ArraySubType = UnmanagedType.I1)] | ||||
public byte[] byRes; | public byte[] byRes; | ||||
} | } | ||||
//图片质量 | |||||
[StructLayoutAttribute(LayoutKind.Sequential)] | |||||
public struct NET_DVR_JPEGPARA | |||||
{ | |||||
/*注意:当图像压缩分辨率为VGA时,支持0=CIF, 1=QCIF, 2=D1抓图, | |||||
当分辨率为3=UXGA(1600x1200), 4=SVGA(800x600), 5=HD720p(1280x720),6=VGA,7=XVGA, 8=HD900p | |||||
仅支持当前分辨率的抓图*/ | |||||
public ushort wPicSize;/* 0=CIF, 1=QCIF, 2=D1 3=UXGA(1600x1200), 4=SVGA(800x600), 5=HD720p(1280x720),6=VGA*/ | |||||
public ushort wPicQuality;/* 图片质量系数 0-最好 1-较好 2-一般 */ | |||||
} | |||||
/********************************************************* | /********************************************************* | ||||
Function: NET_DVR_Init | Function: NET_DVR_Init | ||||
Desc: 初始化SDK,调用其他SDK函数的前提。 | Desc: 初始化SDK,调用其他SDK函数的前提。 | ||||
@@ -349,11 +358,30 @@ namespace AlarmCSharpDemo | |||||
public static extern bool NET_DVR_SetExceptionCallBack_V30(uint nMessage, IntPtr hWnd, EXCEPYIONCALLBACK fExceptionCallBack, IntPtr pUser); | public static extern bool NET_DVR_SetExceptionCallBack_V30(uint nMessage, IntPtr hWnd, EXCEPYIONCALLBACK fExceptionCallBack, IntPtr pUser); | ||||
[DllImport(@"HCNetSDK.dll")] | [DllImport(@"HCNetSDK.dll")] | ||||
public static extern bool NET_DVR_SetDVRMessageCallBack_V31(MSGCallBack_V31 fMessageCallBack, IntPtr pUser); | public static extern bool NET_DVR_SetDVRMessageCallBack_V31(MSGCallBack_V31 fMessageCallBack, IntPtr pUser); | ||||
/********************************************************* | |||||
Function: NET_DVR_Login_V30 | |||||
Desc: | |||||
Input: sDVRIP [in] 设备IP地址 | |||||
wServerPort [in] 设备端口号 | |||||
sUserName [in] 登录的用户名 | |||||
sPassword [in] 用户密码 | |||||
Output: lpDeviceInfo [out] 设备信息 | |||||
Return: -1表示失败,其他值表示返回的用户ID值 | |||||
**********************************************************/ | |||||
[DllImport(@".\HCNetSDK.dll")] | |||||
public static extern Int32 NET_DVR_Login_V30(string sDVRIP, Int32 wDVRPort, string sUserName, string sPassword, ref NET_DVR_DEVICEINFO_V30 lpDeviceInfo); | |||||
[DllImport(@"HCNetSDK.dll")] | [DllImport(@"HCNetSDK.dll")] | ||||
public static extern int NET_DVR_Login_V40(ref NET_DVR_USER_LOGIN_INFO pLoginInfo, ref NET_DVR_DEVICEINFO_V40 lpDeviceInfo); | public static extern int NET_DVR_Login_V40(ref NET_DVR_USER_LOGIN_INFO pLoginInfo, ref NET_DVR_DEVICEINFO_V40 lpDeviceInfo); | ||||
[DllImport(@"HCNetSDK.dll")] | [DllImport(@"HCNetSDK.dll")] | ||||
public static extern int NET_DVR_SetupAlarmChan_V41(int lUserID, ref NET_DVR_SETUPALARM_PARAM lpSetupParam); | public static extern int NET_DVR_SetupAlarmChan_V41(int lUserID, ref NET_DVR_SETUPALARM_PARAM lpSetupParam); | ||||
[DllImport(@"HCNetSDK.dll")] | [DllImport(@"HCNetSDK.dll")] | ||||
public static extern bool NET_DVR_CloseAlarmChan_V30(int lAlarmHandle); | public static extern bool NET_DVR_CloseAlarmChan_V30(int lAlarmHandle); | ||||
//2005-09-15 | |||||
[DllImport(@".\HCNetSDK.dll")] | |||||
public static extern bool NET_DVR_CaptureJPEGPicture(int lUserID, int lChannel, ref NET_DVR_JPEGPARA lpJpegPara, string sPicFileName); | |||||
//JPEG抓图到内存 | |||||
[DllImport(@".\HCNetSDK.dll")] | |||||
public static extern bool NET_DVR_CaptureJPEGPicture_NEW(int lUserID, int lChannel, ref NET_DVR_JPEGPARA lpJpegPara, byte[] sJpegPicBuffer, uint dwPicSize, ref uint lpSizeReturned); | |||||
} | } | ||||
} | } |