package com.ruoyi; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.IdUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.station.domain.*; import com.ruoyi.station.service.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.util.Date; import java.util.List; @RestController @RequestMapping("iclock/") public class AllController { @Autowired private IMjWorkUserService workUserService; @Autowired private IMjHeadsUsersService headsUsersService; @Autowired private IMjWorkOrderService workOrderService; @Autowired private IMjUserAxService userAxService; @Autowired private IMjFingerprintReadHeadService fingerprintReadHeadService; @Autowired private IMjDoorService doorService; @Autowired private IMjOpenHnweService openHnweService; @Autowired private IMjVisitLogService visitLogService; @Autowired private IMjStatisticService statisticService; //判断是否开这个门。 //@RequestMapping(value = "/open") public int open(String userId,String ip){ int openNum = 0; // MjVisitLog visitLog3 = new MjVisitLog(); // visitLog3.setId(IdUtils.fastSimpleUUID()); // visitLog3.setUserName(userId+" "+ip); // visitLog3.setDelFlag(1); // visitLogService.insertMjVisitLog(visitLog3); // MjWorkUser workUser = new MjWorkUser(); // workUser.setUserId(userId); MjWorkUser mjWorkUsers = workUserService.selectMjWorkUserById(Long.valueOf(userId)); MjFingerprintReadHead fingerprintReadHead = new MjFingerprintReadHead(); fingerprintReadHead.setIpOrOther(ip); List mjFingerprintReadHeads = fingerprintReadHeadService.selectMjFingerprintReadHeadList(fingerprintReadHead); if(mjFingerprintReadHeads.size()==0){ return -1; } String headId = mjFingerprintReadHeads.get(0).getId(); if(StringUtils.isEmpty(headId)){ //System.out.println("没找到读头"); return -1; } if(mjWorkUsers!=null){ MjHeadsUsers mjHeadsUsers = new MjHeadsUsers(); mjHeadsUsers.setUserId(Long.valueOf(mjWorkUsers.getId())); mjHeadsUsers.setHeadId(headId); List mjHeadsUsers1 = headsUsersService.selectMjHeadsUsersList(mjHeadsUsers);//找到读头用户表中的 int flag1=0; int flag2=0; for(MjHeadsUsers user:mjHeadsUsers1){ if(user.getAuthorizeType()==1){//如果是临时授权 flag1++; if(user.getMainUser()==1){//如果是负责人 flag2++; } } } if(flag2>0){//有A权限,则不考虑组授权 int flag2Open = 0; for(MjHeadsUsers user:mjHeadsUsers1){ if(user.getAuthorizeType()==1){//如果是临时授权 if(user.getMainUser()==1){//如果是负责人 MjWorkOrder mjWorkOrder = workOrderService.selectMjWorkOrderById(user.getOrderId()); if(mjWorkOrder.getOpenMode()!=1){//如果是A模式 if(flag2Open==0){ //System.out.println("临时授权A模式直接开门"); flag2Open++; openDoor(user); openNum++; addStatis(2); } }else{ /*********如果是AX模式,且这个人是A,则把X的人员全部放到一个中间表,等待X人员按指纹********/ addUserAx(user,ip); } }else{ /*********是AX模式,且这个人是X,则在临时表找找是否有此人********/ //findUserAx(user,ip); MjUserAx userAx = new MjUserAx(); userAx.setHeadIp(ip); userAx.setXuserId(user.getUserId().toString()); List mjUserAxes = userAxService.selectMjUserAxList(userAx); if(mjUserAxes.size()>0){ if(flag2Open==0) { //System.out.println("如果是X,在临时库里找到后开门"); flag2Open++; openDoor(user); openNum++; addStatis(3); } } } } } }else{ if(flag1>0){//只有X权限,也不考虑组授权 int flag2Open = 0; for(MjHeadsUsers user:mjHeadsUsers1){ if(user.getAuthorizeType()==1){//如果是临时授权 /*********是AX模式,且这个人是X,则在临时表找找是否有此人********/ //findUserAx(user,ip); if(user.getAuthorizeStatus()==0){ if(flag2Open==0){ //System.out.println("临时授权A模式直接开门"); flag2Open++; openDoor(user); openNum++; addStatis(2); } }else{ MjUserAx userAx = new MjUserAx(); userAx.setHeadIp(ip); userAx.setXuserId(user.getUserId().toString()); List mjUserAxes = userAxService.selectMjUserAxList(userAx); if(mjUserAxes.size()>0){ if(flag2Open>0) { break; }else{ //System.out.println("如果是X,在临时库里找到后开门"); flag2Open++; openDoor(user); openNum++; addStatis(3); } } } } } }else{ MjHeadsUsers mjHeadsUsers5 = new MjHeadsUsers(); mjHeadsUsers5.setUserId(Long.valueOf(mjWorkUsers.getId())); mjHeadsUsers5.setAuthorizeType(1); List zu = headsUsersService.selectMjHeadsUsersList(mjHeadsUsers5);//找到读头用户表中的 if(zu.size()==0){ for(MjHeadsUsers user:mjHeadsUsers1){ if(user.getAuthorizeType()==0){//是组授权 //System.out.println("组授权开门"); openDoor(user); openNum++; addStatis(1); break; } } } } } //} } return openNum; } private void addVistisLog(MjWorkUser mjWorkUsers, MjFingerprintReadHead mjFingerprintReadHead,MjHeadsUsers headsUsers) { MjVisitLog visitLog = new MjVisitLog(); visitLog.setId(IdUtils.fastSimpleUUID()); visitLog.setUserName(mjWorkUsers.getUserName()); visitLog.setDeptId(mjWorkUsers.getDeptId()); visitLog.setDeptName(mjWorkUsers.getDeptName()); visitLog.setDoorId(mjFingerprintReadHead.getDoorId()); visitLog.setDoorName(mjFingerprintReadHead.getDoorName()); visitLog.setDirection(mjFingerprintReadHead.getDirection()); visitLog.setAreaName(mjFingerprintReadHead.getAreaName()); visitLog.setOrganizationId(mjWorkUsers.getOrganizationId()); visitLog.setOrganizationName(mjWorkUsers.getOrganizationName()); visitLog.setWorkOrderId(headsUsers.getOrderId()); if(headsUsers.getAuthorizeType()==1){ MjWorkOrder mjWorkOrder = workOrderService.selectMjWorkOrderById(headsUsers.getOrderId()); visitLog.setWorkOrderName(mjWorkOrder.getTaskName()); } visitLogService.insertMjVisitLog(visitLog); } //把X人员加入临时表 public void addUserAx(MjHeadsUsers headsUsers,String ip){ MjHeadsUsers shu = new MjHeadsUsers(); shu.setOrderId(headsUsers.getOrderId()); shu.setMainUser(0); List headUserList = headsUsersService.selectMjHeadsUsersList(shu);//找到读头用户表中的 for(MjHeadsUsers hu:headUserList){ MjUserAx userAx = new MjUserAx(); userAx.setId(IdUtils.fastSimpleUUID()); userAx.setXuserId(hu.getUserId().toString()); userAx.setHeadIp(ip); userAxService.insertMjUserAx(userAx); } } //在临时表找找有没有X这个人 public void findUserAx(MjHeadsUsers headsUsers,String ip){ MjUserAx userAx = new MjUserAx(); userAx.setHeadIp(ip); userAx.setXuserId(headsUsers.getUserId().toString()); List mjUserAxes = userAxService.selectMjUserAxList(userAx); if(mjUserAxes.size()>0){ //System.out.println("如果是X,在临时库里找到后开门"); openDoor(headsUsers); addStatis(3); } } //开门 public void openDoor(MjHeadsUsers headsUsers){ String headId = headsUsers.getHeadId(); MjFingerprintReadHead mjFingerprintReadHead = fingerprintReadHeadService.selectMjFingerprintReadHeadById(headId); MjDoor mjDoor = doorService.selectMjDoorById(mjFingerprintReadHead.getDoorId()); MjOpenHnwe openHnwe = new MjOpenHnwe(); openHnwe.setId(IdUtils.fastSimpleUUID()); openHnwe.setHnweId(mjDoor.getHnweId()); openHnwe.setHnweIp(mjDoor.getHnweIp()); openHnweService.insertMjOpenHnwe(openHnwe); MjWorkUser workUser = workUserService.selectMjWorkUserById(headsUsers.getUserId()); addVistisLog(workUser,mjFingerprintReadHead,headsUsers); } public void addStatis(int type){ //List mjStatistics = statisticService.selectMjStatisticList(null); MjStatistic mjStatistic = statisticService.selectMjStatisticById("1"); if(mjStatistic!=null){ //MjStatistic mjStatistic = mjStatistics.get(0); if(type==1){//组 mjStatistic.setTeamopen(mjStatistic.getTeamopen()+1); } if(type==2){//临 mjStatistic.setOrderopen1(mjStatistic.getOrderopen1()+1); } if(type==3){//Ax mjStatistic.setOrderopen2(mjStatistic.getOrderopen2()+1); } statisticService.updateMjStatistic(mjStatistic); } } @GetMapping("cdata") public void findByType(String SN, String options, String pushver, String language, String pushcommkey, HttpServletResponse response, String PushOptionsFlag) throws IOException { //System.out.println("信息交互"); String s = initOptions(SN,null); response.getWriter().write(s); } @RequestMapping(value = "/cdata") public void handleRtData(HttpServletRequest request, HttpServletResponse response, String SN, String table) throws UnsupportedEncodingException { //System.out.println("设备上传上来的数据...."+data+"....table..."+table); request.setCharacterEncoding("gbk"); String data = ""; //System.out.println("设备的实时记录是......."+data+"....table名字为:"+table); ByteArrayOutputStream bos = null; byte[] b= new byte[1024]; try { InputStream is = request.getInputStream(); bos = new ByteArrayOutputStream(); int len = 0; while((len=is.read(b))!=-1){ bos.write(b,0,len); } data = new String(bos.toByteArray(),"gbk"); } catch (IOException e) { e.printStackTrace(); } if(data.indexOf("xFace600")!=-1){ return; } MjVisitLog visitLog3 = new MjVisitLog(); visitLog3.setId(IdUtils.fastSimpleUUID()); visitLog3.setUserName(request.getRemoteHost()+"==="+data+" table="+table); visitLog3.setDelFlag(1); visitLogService.insertMjVisitLog(visitLog3); //System.out.println("设备的实时记录是......."+data); String[] dataArray = data.split("\n"); // int num = dataArray.length; // // System.out.println("获取到的考勤记录数量为.,.............."+num); //System.out.println("读头ip:"+request.getRemoteHost()); for(String datas:dataArray){ String[] s = datas.split("\t"); // //System.out.println("用户id:"+s[0]); // String logTime = s[1]; // Date date = DateUtils.dateTime("yyyy-MM-dd HH:mm:ss",logTime); // Date date2 = new Date(); // long l = date2.getTime() - date.getTime(); //if(l<1000*60){ int open = 0; try { open = open(s[0], request.getRemoteHost());//判断是否开门 } catch (Exception e) { }finally { //visitLog3.setDoorId(open+"次"+Long.valueOf(l).toString()); visitLog3.setDoorId(open+"次"); visitLogService.updateMjVisitLog(visitLog3); } //} } try { response.getWriter().write("OK"); } catch (IOException e) { e.printStackTrace(); } } public static byte[] getRequestPostBytes(HttpServletRequest request) throws IOException { int contentLength = request.getContentLength(); if(contentLength<0){ return null; } byte buffer[] = new byte[contentLength]; for (int i = 0; i < contentLength;) { int readlen = request.getInputStream().read(buffer, i, contentLength - i); if (readlen == -1) { break; } i += readlen; } return buffer; } /*** * Get request query string, form method : post * * @param request * @return * @throws IOException */ public static String getRequestPostStr(HttpServletRequest request) throws IOException { byte buffer[] = getRequestPostBytes(request); String charEncoding = request.getCharacterEncoding(); if (charEncoding == null) { charEncoding = "UTF-8"; } String s = new String(buffer, charEncoding); return s; } private String initOptions(String sn,String PushOptionsFlag) { StringBuffer devOptions = new StringBuffer(); devOptions.append("GET OPTION FROM: "+sn); // + "\nStamp=" + devInfo.devInfoJson.getString("Stamp") devOptions.append("\nATTLOGStamp=0"); devOptions.append("\nOPERLOGStamp=0"); devOptions.append("\nBIODATAStamp=0"); devOptions.append("\nATTPHOTOStamp=0"); devOptions.append("\nErrorDelay=10");//断网重连 devOptions.append("\nDelay=30");//心跳间隔 devOptions.append("\nTimeZone=8");//时区 devOptions.append("\nRealtime=1");//实时上传 devOptions.append("\nServerVer=3.0.1");//这个必须填写 devOptions.append("\nPushProtVer=2.4.1"); devOptions.append("\nTransFlag=100000000000");// 1-12二进制位 分别代表以上含义 //System.out.println("PushOptionsFlag============="+PushOptionsFlag); if (PushOptionsFlag!=null&&PushOptionsFlag.equals("1")) { // 支持参数单独获取的才要把需要获取的参数回传给设备 modifeid by max 20170926 devOptions.append("\nPushOptions=RegDeviceType,FingerFunOn,FaceFunOn,FPVersion,FaceVersion,NetworkType,HardwareId3,HardwareId5,HardwareId56,LicenseStatus3,LicenseStatus5,LicenseStatus56"); } devOptions.append("\n"); return devOptions.toString(); } /*********只有一个人的情况下********/ // if(mjHeadsUsers1.size()==1){ // MjHeadsUsers mjHeadsUsers2 = mjHeadsUsers1.get(0); // // if(mjHeadsUsers2.getAuthorizeType()==0){ // System.out.println("组授权开门"); // }else{ // MjWorkOrder mjWorkOrder = workOrderService.selectMjWorkOrderById(mjHeadsUsers2.getOrderId()); // if(mjWorkOrder.getOpenMode()==0){ // System.out.println("临时授权A模式直接开门"); // }else{ // if(mjHeadsUsers2.getMainUser()==1){ // /*********如果是AX模式,且这个人是A,则把X的人员全部放到一个中间表,等待X人员按指纹********/ // addUserAx(mjHeadsUsers2,ip); // }else{ // /*********如果是AX模式,且这个人是X,则在临时表找找是否有此人********/ // findUserAx(mjHeadsUsers2,ip); // } // } // } // }else{ // /*********多个人的情况下********/ }