You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

88 lines
4.2 KiB

3 years ago
package com.fr.plugin;
import com.fr.plugin.beans.UserLogBean;
import com.fr.plugin.dao.LogDao;
import com.fr.plugin.dao.RelationLogDao;
import com.fr.plugin.entitys.AccessLogEntity;
import com.fr.plugin.entitys.RelationLogEntity;
import com.fr.plugin.transform.ExecuteFunctionRecord;
import com.fr.plugin.transform.FunctionRecorder;
import com.fr.stable.db.accessor.DBAccessor;
import com.fr.stable.db.action.DBAction;
import com.fr.stable.db.dao.DAOContext;
import com.fr.stable.query.QueryFactory;
import com.fr.stable.query.condition.QueryCondition;
import com.fr.stable.query.restriction.RestrictionFactory;
import com.fr.third.org.apache.commons.lang3.time.DateFormatUtils;
import java.util.Date;
import java.util.List;
import java.util.UUID;
@FunctionRecorder(localeKey = "logmac")
public class LogMacFunction {
@ExecuteFunctionRecord
public void save(UserLogBean bean) throws Exception {
DBAccessor accessor = LogMacDBAccess.getAccessor();
RelationLogEntity logEntity = new RelationLogEntity();
logEntity.setTime(DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
logEntity.setMacAddr(bean.getMac());
logEntity.setUserName(bean.getName());
logEntity.setDeviceName(bean.getDeviceName());
logEntity.setId(UUID.randomUUID().toString());
final RelationLogEntity count = accessor.runQueryAction(new DBAction<RelationLogEntity>() {
public RelationLogEntity run(DAOContext content) throws Exception {
QueryCondition queryCondition = QueryFactory.create();
queryCondition.addRestriction(RestrictionFactory.eq("userName", logEntity.getUserName()));
return content.getDAO(RelationLogDao.class).findOne(queryCondition);
}
});
accessor.runDMLAction(new DBAction<RelationLogEntity>() {
public RelationLogEntity run(DAOContext content) throws Exception {
if (count != null) {
count.setMacAddr(bean.getMac());
count.setDeviceName(bean.getDeviceName());
content.getDAO(RelationLogDao.class).update(count);
} else {
content.getDAO(RelationLogDao.class).add(logEntity);
}
return null;
}
});
}
public RelationLogEntity findRelation(String name) throws Exception {
DBAccessor accessor = LogMacDBAccess.getAccessor();
return accessor.runQueryAction(new DBAction<RelationLogEntity>() {
public RelationLogEntity run(DAOContext content) throws Exception {
QueryCondition queryCondition = QueryFactory.create();
queryCondition.addRestriction(RestrictionFactory.eq("userName", name));
return content.getDAO(RelationLogDao.class).findOne(queryCondition);
}
});
}
public void addLoginHistory(RelationLogEntity relation) throws Exception {
AccessLogEntity logEntity = new AccessLogEntity();
logEntity.setMacAddr(relation.getMacAddr());
logEntity.setUserName(relation.getUserName());
logEntity.setDeviceName(relation.getDeviceName());
logEntity.setId(UUID.randomUUID().toString());
logEntity.setTime(DateFormatUtils.format(new Date(), "yyyy-MM-dd"));
DBAccessor accessor = LogMacDBAccess.getAccessor();
accessor.runDMLAction(new DBAction<RelationLogEntity>() {
public RelationLogEntity run(DAOContext content) throws Exception {
LogDao dao = content.getDAO(LogDao.class);
QueryCondition queryCondition = QueryFactory.create();
queryCondition.addRestriction(RestrictionFactory.eq("time", logEntity.getTime())).addRestriction(RestrictionFactory.eq("macAddr", logEntity.getMacAddr())).addRestriction(RestrictionFactory.eq("userName", logEntity.getUserName()));
List<AccessLogEntity> accessLogEntities = dao.find(queryCondition);
//如果不存在则插入,保障一天,一个用户,一个MAC只插入1条
if (accessLogEntities.isEmpty()) {
dao.add(logEntity);
}
return null;
}
});
}
}