usingHh.Mes.Common;usingHh.Mes.Common.config;usingHh.Mes.Common.Http;usingHh.Mes.Common.Json;usingHh.Mes.Common.log;usingHh.Mes.Common.Request;usingHh.Mes.POJO.Entity;usingHh.Mes.POJO.Response;usingHh.Mes.Service.Repository;usingSqlSugar;usingSystem;usingSystem.Data;usingSystem.Net;usingSystem.Text;usingSystem.Threading.Tasks;namespaceHh.Mes.Service{///<summary>///考勤打卡///</summary>publicclassAttendanceService:RepositorySqlSugar<sys_punch_clock>{privatebase_work_stationstations{get;set;}///<summary>///刷脸打卡///</summary>publicdynamicFaceClockService(stringwebcam){returnExceptionsHelp.Instance.ExecuteT(()=>{varres=ActionBefore();if(!res.Status)returnres;#region接口图片识别varbaseUrl=ConfigRead.GetInstance.GetAppsetConnection().FaceBaseUrl;varitem=newHttpItem(){URL=baseUrl+"faceSearch",Method="post",ContentType="application/x-www-form-urlencoded",//返回类型可选项有默认值Postdata=string.Format("file=\"{0}\"&groupId=101",webcam),};varhttpResult=newHttpHelper().GetHtml(item);if(httpResult.StatusCode!=HttpStatusCode.OK){res.Code=-200;res.Message=httpResult.Html;returnres;}varresult=DynamicJson.Parse(httpResult.Html);#endregionif(result.code==0){stringuserName=result.data.name.Replace("\\","").Replace('"',' ').Trim();varresultUser=GetSysUserByName(userName);if(resultUser==null){res.Code=-200;res.Message="人脸信息未绑定!请在系统管理-用户管理维护!";returnres;}//if(!Context.Queryable<base_station_user_rel>().Where(x=>x.stationId==stations.id&&x.userId==resultUser.id).Any())//{//res.Code=-200;//res.Message=$"工位:{stations.code}未设置用户:{resultUser.account}打卡,请去工厂模型-工位人员设置!!";//returnres;//}ShiftCodeMethod(resultUser);varresultClock=base.Context.SaveQueues()>0;if(!resultClock){res.Code=-200;res.Message="人脸打卡考勤失败,反复出现请联系管理员!";returnres;}res.Code=200;res.Result=resultUser;returnres;}res.Code=-200;res.Message="人脸识别不匹配或者人脸信息未绑定,请在系统管理-用户管理维护!";returnres;});}///<summary>///刷卡打卡///</summary>publicdynamicIdCardClockService(stringidCard){returnExceptionsHelp.Instance.ExecuteT(()=>{varres=ActionBefore();if(!res.Status)returnres;//查找卡号varuser=Context.Queryable<sys_user>().First(x=>x.idcard==idCard);if(user==null){res.Code=-200;res.Message="工卡信息未绑定!请在系统管理-用户管理维护!";returnres;}//if(!Context.Queryable<base_station_user_rel>().Where(x=>x.stationId==stations.id&&x.userId==user.id).Any())//{//res.Code=-200;//res.Message=$"工位:{stations.code}未设置用户:{user.account}打卡,请去工厂模型-工位人员设置!!";//returnres;//}ShiftCodeMethod(user);varresult=base.Context.SaveQueues()>0;if(!result){res.Code=-100;res.Message="刷卡打卡考勤失败,反复出现请联系管理员!";returnres;}res.Code=200;res.Result=user;res.Message="刷卡打卡考勤成功!";returnres;});}privatevoidShiftCodeMethod(sys_useruser){varTime=Convert.ToDateTime("1900-01-01 "+DateTime.Now.Hour+":"+DateTime.Now.Minute);varclock=newsys_punch_clock{createBy=sysWebUser?.Account,userCode=user.account};#region补卡//if(end<start){end=end.AddDays(1);shift_Time.timeSpanEnd=shift_Time.timeSpanEnd.AddDays(1);};//晚班加一天varendData=Context.Queryable<sys_punch_clock>().Where(x=>x.userCode==user.account).OrderBy(x=>x.createTime,OrderByType.Desc).First();vardayTime=DateTime.Now;varonATime=endData==null?null:endData.createTime;vartheLaidOff=true;//if(endData!=null&&(endData.mountGuard=="上岗"&&!SqlFunc.DateIsSame(onATime,dayTime)//||endData.stationCode!=stations.stationCode&&SqlFunc.DateIsSame(onATime,dayTime)))//{//varshiftCode1=Context.Queryable<product_shift,base_station,product_shift_time>((p,s,r)=>//newJoinQueryInfos(JoinType.Inner,p.lineCode==s.lineCode&&p.isDelete==0,//JoinType.Inner,r.productShiftId==p.id))//.Where((p,s,r)=>s.stationCode==endData.stationCode&&r.timeSpanStart<=Time&&SqlFunc.IIF(r.timeSpanEnd>Time,r.timeSpanStart.AddDays(1),r.timeSpanEnd)>=Time)//.Select((p,s,r)=>p.code)//.ToArray();//clock.equipmentIP=endData.equipmentIP;//clock.stationCode=endData.stationCode;//clock.shiftCode=shiftCode1[0];//clock.mountGuard="下岗";//clock.isManual=false;//clock.createTime=dayTime;//base.Context.Insertable(clock).AddQueue();//theLaidOff=false;//}#endregion//varshiftCode2=Context.Queryable<product_shift,base_station,product_shift_time>((p,s,r)=>//newJoinQueryInfos(JoinType.Inner,p.lineCode==s.lineCode&&p.isDelete==0,//JoinType.Inner,r.productShiftId==p.id))//.Where((p,s,r)=>s.id==stations.id&&r.timeSpanStart<=Time&&SqlFunc.IIF(r.timeSpanEnd>Time,r.timeSpanStart.AddDays(1),r.timeSpanEnd)>=Time)//.Select((p,s,r)=>p.code)//.ToArray();clock.equipmentIP=stations.monitorIP;clock.stationCode=stations.workStationCode;//clock.shiftCode=shiftCode2.Length==0?"":shiftCode2[0];clock.mountGuard=theLaidOff&&endData!=null&&endData.mountGuard=="上岗"?"下岗":"上岗";clock.isManual=true;clock.createTime=dayTime.AddSeconds(1);base.Context.Insertable(clock).AddQueue();}#region考勤管理列表///<summary>/////获取sys_punch_clock列表///</summary>publicTask<DataSet>Load(PageReqpageReq,sys_punch_clockclock){stringorderBy=(pageReq==null||string.IsNullOrEmpty(pageReq.field))?" id desc":$"{pageReq.field} {pageReq.order} ";stringsqlWhere=SqlWhere(clock);varstringBuilder=newStringBuilder();//页码,页数//Exelture不分页if(!clock.Exel&&pageReq!=null){stringBuilder.Append("declare @pageIndex int,@pageSize int,@offset int");stringBuilder.AppendLine($" select @pageIndex={pageReq.page}, @pageSize={pageReq.limit}, @offset=(@pageIndex - 1) * @pageSize");}stringBuilder.AppendLine($@"selectt1.*,t2.shiftNamefromsys_punch_clockt1leftjoinproduct_shiftt2ont1.shiftCode=t2.codewhere{sqlWhere}orderby{orderBy}");varparameters=new{name=clock.userCode,equipmentIP=clock.equipmentIP,stationCode=clock.stationCode};//Exelfalse分页if(!clock.Exel){stringBuilder.AppendLine(" offset @offset row fetch next @pageSize row only ");stringBuilder.Append($" select rowTotal= count(*) from sys_punch_clock t1 with(nolock) where {sqlWhere}");}returnbase.Context.Ado.GetDataSetAllAsync(stringBuilder.ToString(),parameters);}publicstringSqlWhere(sys_punch_clockmodel){varstringBuilder=newStringBuilder();stringBuilder.Append("1=1");if(!string.IsNullOrEmpty(model.userCode)){stringBuilder.Append($" and t1.UserCode like '%'+@userCode+'%' ");}if(model.equipmentIP!=null){stringBuilder.Append($" and t1.equipmentIP=@equipmentIP ");}if(!string.IsNullOrEmpty(model.stationCode)){stringBuilder.Append($" and t1.stationCode like '%'+@stationCode+'%' ");}returnstringBuilder.ToString();}#endregionprivatesys_userGetSysUserByName(stringname){returnContext.Queryable<sys_user>().First(x=>x.account==name);}///<summary>///ip,工位查找///</summary>///<returns></returns>publicResponseActionBefore(){varresult=newResponse();stringip=ComputerHelp.GetAddressIP();//CommonHelper.GetAddressIP();if(string.IsNullOrEmpty(ip)||ip=="127.0.0.1"){result.Code=-200;result.Status=false;result.Message="刷脸打卡,请检查本地ip,确认是否连接网络,请于【工位】中设置Ip地址!";returnresult;}if(ip=="127.0.0.1"){result.Code=-200;result.Status=false;result.Message="刷脸打卡,ip【127.0.0.1】请检查本地ip,确认是否连接网络,请于【工位】中设置Ip地址!";returnresult;}stations=Context.Queryable<base_work_station>().Where(u=>u.monitorIP==ip).First();if(stations==null||string.IsNullOrEmpty(stations.lineCode)){result.Code=-200;result.Status=false;result.Message=$"刷脸打卡,根据ip【{ip}】找到对应工位和线体失败,请检查工位信息ip是否配置成功,请于【工位】中设置Ip地址!";returnresult;};result.Code=200;returnresult;}}}