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<MjFingerprintReadHead> 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<MjHeadsUsers> 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<MjUserAx> 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<MjUserAx> 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<MjHeadsUsers> 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<MjHeadsUsers> 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<MjUserAx> 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<MjStatistic> 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{
|
// /*********多个人的情况下********/
|
}
|