Ecology-Dev-chaofa/领悦二开new/src/com/engine/kq/biz/KQGroupBiz.java

714 lines
32 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.engine.kq.biz;
import com.engine.kq.entity.KQGroupEntity;
import com.engine.kq.log.KQLog;
import com.google.common.collect.Lists;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.IpUtils;
import weaver.general.Util;
import weaver.hrm.common.database.dialect.DbDialectFactory;
import weaver.hrm.common.database.dialect.IDbDialectSql;
import java.util.*;
public class KQGroupBiz extends BaseBean {
private static final double EARTH_RADIUS = 6378137;// 地球半径
public static final String GROUPMEMBER_VALIDATE_FROMDATE="2000-01-01";
public static final String GROUPMEMBER_VALIDATE_TODATE="2999-12-31";
public String getGroupMemberSql() {
return getGroupMemberSql("");
}
public String getGroupMemberSql(String groupId) {
Map<String,Object> params = new HashMap<>();
params.put("groupId",groupId);
return this.getGroupMemberSql(params);
}
public String getGroupMemberSql(Map<String,Object> params) {
String sql = "";
try {
String groupId = Util.null2String(params.get("groupId"));
String isNoAccount = Util.null2String(params.get("isNoAccount"));
if(Util.null2String(groupId).length()>0){
sql = " SELECT distinct resourceid, groupid FROM ( " +
" SELECT a.id AS resourceid, b.groupid, a.status FROM HrmResource a, kq_groupmember b " +
" WHERE a.id=b.typevalue and b.type =1 and (b.isdelete is null or b.isdelete <> '1') " +
" UNION ALL " +
" SELECT a.id AS resourceid, b.groupid, a.status FROM HrmResource a, kq_groupmember b " +
" WHERE a.subcompanyid1 = b.typevalue AND b.type=2 AND a.seclevel>=b.seclevel AND a.seclevel<=b.seclevelto and (b.isdelete is null or b.isdelete <> '1') " +
" UNION ALL " +
" SELECT a.id AS resourceid, b.groupid, a.status FROM HrmResource a, kq_groupmember b " +
" WHERE a.departmentid = b.typevalue AND b.type=3 AND a.seclevel>=b.seclevel AND a.seclevel<=b.seclevelto and (b.isdelete is null or b.isdelete <> '1') " +
" UNION ALL " +
" SELECT a.id AS resourceid, b.groupid, a.status FROM HrmResource a, kq_groupmember b " +
" WHERE a.jobtitle = b.typevalue AND b.type=5 " +
" AND (b.jobtitlelevel=1 OR (b.jobtitlelevel=2 AND a.subcompanyid1 IN(b.jobtitlelevelvalue)) OR (b.jobtitlelevel=3 AND a.departmentid IN(b.jobtitlelevelvalue))) " +
" and (b.isdelete is null or b.isdelete <> '1') " +
" UNION ALL " +
" SELECT a.id AS resourceid, b.groupid, a.status FROM HrmResource a, kq_groupmember b " +
" WHERE b.type=6 AND a.seclevel>=b.seclevel AND a.seclevel<=b.seclevelto and (b.isdelete is null or b.isdelete <> '1') ) t" +
" where 1=1 ";
if(!Util.null2String(isNoAccount).equals("1")){
sql += " and t.status in (0,1,2,3) ";
}
sql += " and t.groupid = "+groupId;
}else{
sql = " SELECT distinct resourceid, groupid FROM ( " +
" SELECT a.id AS resourceid, b.groupid, a.status FROM HrmResource a, kq_groupmember b,kq_group c " +
" WHERE a.id=b.typevalue and b.type =1 and (b.isdelete is null or b.isdelete <> '1') and (c.isdelete is null or c.isdelete <> '1') and c.id=b.groupid " +
" UNION ALL " +
" SELECT a.id AS resourceid, b.groupid, a.status FROM HrmResource a, kq_groupmember b,kq_group c " +
" WHERE a.subcompanyid1 = b.typevalue AND b.type=2 AND a.seclevel>=b.seclevel AND a.seclevel<=b.seclevelto and (b.isdelete is null or b.isdelete <> '1') and (c.isdelete is null or c.isdelete <> '1') and c.id=b.groupid " +
" UNION ALL " +
" SELECT a.id AS resourceid, b.groupid, a.status FROM HrmResource a, kq_groupmember b,kq_group c " +
" WHERE a.departmentid = b.typevalue AND b.type=3 AND a.seclevel>=b.seclevel AND a.seclevel<=b.seclevelto and (b.isdelete is null or b.isdelete <> '1') and (c.isdelete is null or c.isdelete <> '1') and c.id=b.groupid " +
" UNION ALL " +
" SELECT a.id AS resourceid, b.groupid, a.status FROM HrmResource a, kq_groupmember b,kq_group c " +
" WHERE a.jobtitle = b.typevalue AND b.type=5 " +
" AND (b.jobtitlelevel=1 OR (b.jobtitlelevel=2 AND a.subcompanyid1 IN(b.jobtitlelevelvalue)) OR (b.jobtitlelevel=3 AND a.departmentid IN(b.jobtitlelevelvalue))) " +
" and (b.isdelete is null or b.isdelete <> '1') and (c.isdelete is null or c.isdelete <> '1') and c.id=b.groupid " +
" UNION ALL " +
" SELECT a.id AS resourceid, b.groupid, a.status FROM HrmResource a, kq_groupmember b,kq_group c " +
" WHERE b.type=6 AND a.seclevel>=b.seclevel AND a.seclevel<=b.seclevelto and (b.isdelete is null or b.isdelete <> '1') and (c.isdelete is null or c.isdelete <> '1') and c.id=b.groupid ) t" +
" where 1=1 ";
if(!Util.null2String(isNoAccount).equals("1")){
sql += " and t.status in (0,1,2,3) ";
}
}
} catch (Exception e) {
writeLog(e);
}
return sql;
}
public List<String> getGroupMembers(String groupId) {
Map<String,Object> params = new HashMap<>();
params.put("groupId",groupId);
return this.getGroupMembers(params);
}
public List<String> getGroupMembers(Map<String,Object> params) {
RecordSet rs = new RecordSet();
List<String> members = new ArrayList<>();
try {
String sql = this.getGroupMemberSql(params);
rs.executeQuery(sql);
while (rs.next()) {
members.add(rs.getString("resourceid"));
}
} catch (Exception e) {
writeLog(e);
}
return members;
}
//根据传入的班次id然后判断是否有考勤组引用这个班次
public boolean serialIdIsUesed(String serialid) {
boolean serialIdUesed = false;
RecordSet rs = new RecordSet();
String sql = "";
IDbDialectSql dialectSql = DbDialectFactory.get(rs.getDBType()) ;
String isDeleteField = dialectSql.isNull("isdelete",0) ;
try {
sql = " select count(1) " +
" from (select distinct serialid from kq_fixedschedulce where serialid in ( ? ) and ("+isDeleteField+" !=1 ) "+
" union " +
" select distinct serialid from kq_shiftschedule where serialid in ( ? ) and ("+isDeleteField+" !=1 ) ) t";
rs.executeQuery(sql,serialid,serialid);
if (rs.next()){
if(rs.getInt(1)>0){
serialIdUesed = true;
}
}
if(!serialIdUesed){
if(rs.getDBType().equals("oracle")||rs.getDBType().equals("postgresql")) {
sql = " select count(1) from kq_group where ((','||serialids||',') like '%," + serialid + ",%' or (','||shiftcycleserialids||',') like '%," + serialid + ",%') and (isdelete is null or isdelete <> '1')";
}else if(rs.getDBType().equals("mysql")){
String serialidsConcatContion = dialectSql.concatStr("','","serialids","','") ;
String shiftcycleSerialidsConcatConditon = dialectSql.concatStr("','","shiftcycleserialids","','") ;
String groupIsDeleteCondition = dialectSql.isNull("isdelete",0) ;
String likeValue = "%,"+serialid+",%" ;
sql = String.format(" select count(1) from kq_group where ((%s) like '%s' or (%s) like '%s') and (%s!=1)",
serialidsConcatContion,likeValue,
shiftcycleSerialidsConcatConditon,likeValue,
groupIsDeleteCondition) ;
}else{
sql = " select count(1) from kq_group where (','+serialids+',' like '%," + serialid + ",%' or ','+shiftcycleserialids+',' like '%," + serialid + ",%') and (isdelete is null or isdelete <> '1')";
}
rs.executeQuery(sql);
if (rs.next()){
if(rs.getInt(1)>0){
serialIdUesed = true;
}
}
}
} catch (Exception e) {
writeLog(e);
}
return serialIdUesed;
}
/**
* 根据传入的班次id引用此班次的考勤组
* @param serialid
* @return
*/
public List<String> getGroupIdByUesedSerialId(String serialid) {
RecordSet rs = new RecordSet();
List<String> groupList = Lists.newArrayList();
String sql = "";
IDbDialectSql dialectSql = DbDialectFactory.get(rs.getDBType()) ;
String isDeleteField = dialectSql.isNull("isdelete",0) ;
try {
sql = " select serialid,groupid " +
" from (select distinct serialid,groupid from kq_fixedschedulce where serialid in ( ? ) and ("+isDeleteField+" !=1 ) "+
" union " +
" select distinct serialid,groupid from kq_shiftschedule where serialid in ( ? ) and ("+isDeleteField+" !=1 ) ) t";
rs.executeQuery(sql,serialid,serialid);
while (rs.next()){
String tmp_groupId = rs.getString("groupid");
if(!groupList.contains(tmp_groupId)){
groupList.add(tmp_groupId);
}
}
if(rs.getDBType().equals("oracle")||rs.getDBType().equals("postgresql")) {
sql = " select id from kq_group where ((','||serialids||',') like '%," + serialid + ",%' or (','||shiftcycleserialids||',') like '%," + serialid + ",%') and (isdelete is null or isdelete <> '1')";
}else if(rs.getDBType().equals("mysql")){
String serialidsConcatContion = dialectSql.concatStr("','","serialids","','") ;
String shiftcycleSerialidsConcatConditon = dialectSql.concatStr("','","shiftcycleserialids","','") ;
String groupIsDeleteCondition = dialectSql.isNull("isdelete",0) ;
String likeValue = "%,"+serialid+",%" ;
sql = String.format(" select id from kq_group where ((%s) like '%s' or (%s) like '%s') and (%s!=1)",
serialidsConcatContion,likeValue,
shiftcycleSerialidsConcatConditon,likeValue,
groupIsDeleteCondition) ;
}else{
sql = " select id from kq_group where (','+serialids+',' like '%," + serialid + ",%' or ','+shiftcycleserialids+',' like '%," + serialid + ",%') and (isdelete is null or isdelete <> '1')";
}
rs.executeQuery(sql);
while (rs.next()){
String tmp_groupId = rs.getString("id");
if(!groupList.contains(tmp_groupId)){
groupList.add(tmp_groupId);
}
}
} catch (Exception e) {
writeLog(e);
}
return groupList;
}
public Map<String,Object> getLocationWifiInfo(String userid,String showWifiList) {
Map<String,Object> result = new HashMap<>();
Map<String,Object> locationInfo = new HashMap<>();
Map<String,Object> wifiInfo = new HashMap<>();
KQGroupComInfo kqGroupComInfo = new KQGroupComInfo();
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
KQLoactionComInfo kqLoactionComInfo = new KQLoactionComInfo();
String groupid = Util.null2String(kqGroupMemberComInfo.getKQGroupId(userid));
List<Object> datas = null;
Map<String, Object> data = null;
if(groupid.length()>0){
datas = new ArrayList();
while(kqLoactionComInfo.next()){
if(!kqLoactionComInfo.getGroupid().equals(groupid))continue;
data = new HashMap<>();
data.put("id",kqLoactionComInfo.getId());
data.put("locationname",Util.null2String(kqLoactionComInfo.getLocationname()));
data.put("longitude",Util.null2String(kqLoactionComInfo.getLongitude()));
data.put("latitude",Util.null2String(kqLoactionComInfo.getLatitude()));
data.put("address",Util.null2String(kqLoactionComInfo.getAddress()));
data.put("checkscope",Util.null2String(kqLoactionComInfo.getCheckscope()));
data.put("groupid",Util.null2String(kqLoactionComInfo.getGroupid()));
datas.add(data);
}
locationInfo.put("locationcheck",Util.null2String(kqGroupComInfo.getLocationcheck(groupid)).equals("1"));
locationInfo.put("locationcheckscope",Util.null2String(kqGroupComInfo.getLocationcheckscope(groupid)));
locationInfo.put("locations",datas);
datas = new ArrayList();
if("1".equalsIgnoreCase(showWifiList)){
KQWifiComInfo kqWifiComInfo = new KQWifiComInfo();
while(kqWifiComInfo.next()){
if(!kqWifiComInfo.getGroupid().equals(groupid))continue;
data = new HashMap<>();
data.put("id",kqWifiComInfo.getId());
data.put("wifiname",Util.null2String(kqWifiComInfo.getWifiname()));
data.put("mac",Util.null2String(kqWifiComInfo.getMac()));
data.put("groupid",Util.null2String(kqWifiComInfo.getGroupid()));
datas.add(data);
}
}
wifiInfo.put("wificheck",Util.null2String(kqGroupComInfo.getWificheck(groupid)).equals("1"));
wifiInfo.put("wifis",datas);
result.put("locationInfo",locationInfo);
result.put("wifiInfo",wifiInfo);
result.put("status","1");
String show_position = "show_position";
KQSettingsComInfo kqSettingsComInfo = new KQSettingsComInfo();
String positioncheck = Util.null2String(kqSettingsComInfo.getMain_val(show_position),"0");
result.put("positioncheck",positioncheck);
}
return result;
}
/**
* 用户考勤地点 WIFI限制信息
* @param userid
* @return
*/
public Map<String,Object> getLocationWifiInfo(String userid) {
return getLocationWifiInfo(userid,"1");
}
/**
*判断办公地点范围
* @return
*/
public Map<String,Object> checkLocationScope(String userId, String longitude, String latitude){
Map<String, Object> retmap = new HashMap<>();
Map<String, Object> loactionInfo = null;
try {
boolean inScope = false;
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
KQGroupEntity kqGroupEntity = kqGroupMemberComInfo.getUserKQGroupInfo(userId);
KQLoactionComInfo kqLoactionComInfo = new KQLoactionComInfo();
Map<String, Object> locationTrueInfo = new HashMap<>();
double distance = EARTH_RADIUS;
if (kqGroupEntity != null && kqGroupEntity.getLocationcheck().equals("1")) {
while (kqLoactionComInfo.next()) {
if (Util.null2String(kqLoactionComInfo.getGroupid()).equals(kqGroupEntity.getId())) {
double lng1 = Util.getDoubleValue(longitude);//经度
double lat1 = Util.getDoubleValue(latitude);//纬度
double lng2 = Util.getDoubleValue(kqLoactionComInfo.getLongitude());//经度
double lat2 = Util.getDoubleValue(kqLoactionComInfo.getLatitude());//纬度
int checkscope = Util.getIntValue(kqLoactionComInfo.getCheckscope());//有效范围
double geo_distance = geo_distance(lng1, lat1, lng2, lat2);
if (distance > geo_distance) {
distance = geo_distance;
locationTrueInfo.put("lng2", lng2);
locationTrueInfo.put("lat2", lat2);
locationTrueInfo.put("checkscope", checkscope);
locationTrueInfo.put("geo_distance", geo_distance);
// locationTrueInfo = lng2 + "#" + lat2 + "#" + checkscope + "#" + geo_distance;
}
if (geo_distance < checkscope) {
inScope = true;
loactionInfo = new HashMap<>();
loactionInfo.put("locationname", kqLoactionComInfo.getLocationname());
loactionInfo.put("longitude", kqLoactionComInfo.getLongitude());
loactionInfo.put("latitude", kqLoactionComInfo.getLatitude());
loactionInfo.put("address", kqLoactionComInfo.getAddress());
loactionInfo.put("id", kqLoactionComInfo.getId());
loactionInfo.put("longitudefromoa", lng2);
loactionInfo.put("latitudefromoa", lat2);
loactionInfo.put("lengthfromoa", checkscope);
loactionInfo.put("lengthfromem", geo_distance);
break;
}
}
}
} else {//未开启开关
inScope = true;
}
retmap.put("needCheck", kqGroupEntity != null ? Util.null2String(kqGroupEntity.getLocationcheck()) : "0");//是否开启办公地点验证
retmap.put("inScope", inScope);//是否在考勤范围内
retmap.put("locationshowaddress", kqGroupEntity != null ? Util.null2String(kqGroupEntity.getLocationshowaddress()) : "0");//有效识别半径内显示同一地址
if (!inScope && locationTrueInfo != null && !locationTrueInfo.isEmpty()) {
if(loactionInfo == null) {
loactionInfo = new HashMap<>();
}
loactionInfo.put("longitudefromoa", Util.null2String(locationTrueInfo.get("lng2")));
loactionInfo.put("latitudefromoa", Util.null2String(locationTrueInfo.get("lat2")));
loactionInfo.put("lengthfromoa", Util.null2String(locationTrueInfo.get("checkscope")));
loactionInfo.put("lengthfromem", Util.null2String(locationTrueInfo.get("geo_distance")));
}
}catch (Exception e) {
writeLog(e);
}
retmap.put("loactionInfo", loactionInfo);//考勤范围相关信息
return retmap;
}
/**
* 计算两个经度纬度(WGS-84)之间的距离
* @param lng1 坐标1经度
* @param lat1 坐标1纬度EARTH_RADIUS
* @param lng2 坐标2经度
* @param lat2 坐标2纬度
* @return 2个坐标之间距离,单位:米
*/
private double geo_distance(double lng1, double lat1, double lng2, double lat2) {
double radLat1 = Math.toRadians(lat1);
double radLat2 = Math.toRadians(lat2);
double a = Math.abs(radLat1 - radLat2);
double b = Math.abs(Math.toRadians(lng1) - Math.toRadians(lng2));
double distance = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
distance = distance * EARTH_RADIUS;
distance = Math.round(distance * 10000) / 10000;
return distance;
}
/**
*判断Wifi范围
* @return
*/
public Map<String,Object> checkWifiScope(String userId, String wifiName, String mac){
Map<String,Object> retmap = new HashMap<>();
Map<String,Object> wifiInfo = null;
boolean inScope = false;
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
KQGroupEntity kqGroupEntity = kqGroupMemberComInfo.getUserKQGroupInfo(userId);
KQWifiComInfo kqWifiComInfo = new KQWifiComInfo();
if(kqGroupEntity.getWificheck().equals("1")){
try{
List<String> lst = new ArrayList<>(Arrays.asList(mac.split(":")));
for(int i = 0; i < lst.size(); i++){
String s = lst.get(i);
if(s.length() == 1)
lst.set(i, "0" + s);
}
mac = String.join(":", lst);
}catch (Exception ex){
ex.printStackTrace();
}
while(kqWifiComInfo.next()){
if(Util.null2String(kqWifiComInfo.getGroupid()).equals(kqGroupEntity.getId())){
if(Util.null2String(kqWifiComInfo.getWifiname().toLowerCase()).equals(wifiName.toLowerCase())){
String wifi_cominfo_mac = Util.null2String(kqWifiComInfo.getMac().toLowerCase());
String param_mac = mac.toLowerCase();
int last_wifi_mac_index = wifi_cominfo_mac.lastIndexOf(":");
int param_mac_index = param_mac.lastIndexOf(":");
if(last_wifi_mac_index > 0 && param_mac_index > 0){
wifi_cominfo_mac = wifi_cominfo_mac.substring(0,last_wifi_mac_index);
param_mac = param_mac.substring(0,param_mac_index);
}
if(wifi_cominfo_mac.equals(param_mac)){
inScope = true;
wifiInfo = new HashMap<>();
wifiInfo.put("wifiname",kqWifiComInfo.getWifiname());
wifiInfo.put("mac",kqWifiComInfo.getMac());
break;
}
}
}
}
}else{//未开启开关
inScope = true;
}
retmap.put("needCheck",Util.null2String(kqGroupEntity.getWificheck()));//是否开启wifi验证
retmap.put("inScope",inScope);//是否在考勤范围内
retmap.put("wifiInfo",wifiInfo);//考勤范围相关信息
return retmap;
}
/**
* 校验ipv4和v6范围
* @param userId
* @param clientAddress
* @param ismobile
* @return
*/
public boolean getIsInScopeV4V6(String userId, String clientAddress,String ismobile) {
boolean isInScope = false;
clientAddress = Util.null2String(clientAddress).trim();
if (clientAddress.length() == 0) {
return isInScope;
}
RecordSet rs = new RecordSet();
KQGroupComInfo kqGroupComInfo = new KQGroupComInfo();
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
String groupid = Util.null2String(kqGroupMemberComInfo.getKQGroupId(userId));
String signIpScope = Util.null2String(kqGroupComInfo.getIpscope(groupid)).trim();//格式10.*.*.*;10.16.0.12;10.16.0.13-10.16.0.18
String signIpscope_v4_em = Util.null2String(kqGroupComInfo.getIpscope_v4_em(groupid)).trim();
String signIpscope_v4_pc = Util.null2String(kqGroupComInfo.getIpscope_v4_pc(groupid)).trim();
String signIpscope_v6_em = Util.null2String(kqGroupComInfo.getIpscope_v6_em(groupid)).trim();
String signIpscope_v6_pc = Util.null2String(kqGroupComInfo.getIpscope_v6_pc(groupid)).trim();
if (signIpscope_v4_em.length() == 0 && signIpscope_v4_pc.length() == 0
&& signIpscope_v6_em.length() == 0 && signIpscope_v6_pc.length() == 0) {
return true;
}
new KQLog().info("getIsInScopeV4V6:ismobile:"+ismobile+":signIpscope_v4_em:"+signIpscope_v4_em+":signIpscope_v6_em:"+signIpscope_v6_em
+":signIpscope_v4_pc:"+signIpscope_v4_pc+":signIpscope_v6_pc:"+signIpscope_v6_pc);
if("1".equalsIgnoreCase(ismobile)){
if(signIpscope_v4_em.length() > 0){
return checkIps(signIpscope_v4_em,clientAddress,"IPv4");
}else if(signIpscope_v6_em.length() > 0){
return checkIps(signIpscope_v6_em,clientAddress,"IPv6");
}else{
return true;
}
}else{
if(signIpscope_v4_pc.length() > 0){
return checkIps(signIpscope_v4_pc,clientAddress,"IPv4");
}else if(signIpscope_v6_pc.length() > 0){
return checkIps(signIpscope_v6_pc,clientAddress,"IPv6");
}else{
return true;
}
}
}
private boolean checkIps(String signIpScope, String clientAddress,String ipType) {
boolean isInScope = false;
List signIpScopeList = Util.TokenizerString(signIpScope, ";");
String signIpScopeSingle = "";
for (int i = 0; i < signIpScopeList.size(); i++) {
signIpScopeSingle = Util.null2String((String) signIpScopeList.get(i));
signIpScopeSingle = signIpScopeSingle.trim();
if("IPv4".equalsIgnoreCase(ipType)){
isInScope = checkIpV4(signIpScopeSingle,clientAddress);
if(isInScope){
break;
}
}else if("IPv6".equalsIgnoreCase(ipType)){
isInScope = checkIpV6(signIpScopeSingle,clientAddress);
if(isInScope){
break;
}
}
}
return isInScope;
}
private boolean checkIpV6(String signIpScopeSingle, String clientAddress) {
boolean isInScope = false;
if (signIpScopeSingle.indexOf("-") > -1) {
String signIpFrom = signIpScopeSingle.substring(0, signIpScopeSingle.indexOf("-"));
signIpFrom = Util.null2String(signIpFrom).trim();
String signIpTo = "";
if (!signIpScopeSingle.endsWith("-")) {
signIpTo = signIpScopeSingle.substring(signIpScopeSingle.indexOf("-") + 1);
}
signIpTo = Util.null2String(signIpTo).trim();
String tempClientAddress = IpUtils.parseAbbreviationToFullIPv6(clientAddress);
signIpFrom = addToThreeFigure(signIpFrom, "signIpFrom");
signIpTo = addToThreeFigure(signIpTo, "signIpTo");
signIpFrom = IpUtils.parseAbbreviationToFullIPv6(signIpFrom);
signIpTo = IpUtils.parseAbbreviationToFullIPv6(signIpTo);
if (signIpFrom.equals("") && signIpTo.equals("")) {
isInScope = true;
}
if (signIpFrom.equals("") && !signIpTo.equals("")) {
if (tempClientAddress.compareTo(signIpTo) <= 0) {
isInScope = true;
}
}
if (!signIpFrom.equals("") && signIpTo.equals("")) {
if (tempClientAddress.compareTo(signIpFrom) >= 0) {
isInScope = true;
}
}
if (!signIpFrom.equals("") && !signIpTo.equals("")) {
if (tempClientAddress.compareTo(signIpFrom) >= 0 && tempClientAddress.compareTo(signIpTo) <= 0) {
isInScope = true;
}
}
} else {
String tempClientAddress = IpUtils.parseAbbreviationToFullIPv6(clientAddress);
if (tempClientAddress.equals(signIpScopeSingle)) {
isInScope = true;
}
}
return isInScope;
}
public boolean checkIpV4(String signIpScopeSingle,String clientAddress) {
boolean isInScope = false;
if (signIpScopeSingle.indexOf("*") > -1) {//如果单个ip范围的格式为10.*.*.*
List signIpScopeSingleList = Util.TokenizerString(signIpScopeSingle, ".");
List clientAddressList = Util.TokenizerString(clientAddress, ".");
if (signIpScopeSingleList.size() == 4
&& clientAddressList.size() == 4
&& ("*".equals((String) signIpScopeSingleList.get(0))
|| Util.null2String((String) clientAddressList.get(0)).equals((String) signIpScopeSingleList.get(0)))
&& ("*".equals((String) signIpScopeSingleList.get(1))
|| Util.null2String((String) clientAddressList.get(1)).equals((String) signIpScopeSingleList.get(1)))
&& ("*".equals((String) signIpScopeSingleList.get(2))
|| Util.null2String((String) clientAddressList.get(2)).equals((String) signIpScopeSingleList.get(2)))
&& ("*".equals((String) signIpScopeSingleList.get(3))
|| Util.null2String((String) clientAddressList.get(3)).equals((String) signIpScopeSingleList.get(2)))
) {
isInScope = true;
}
} else if (signIpScopeSingle.indexOf("-") > -1) {//如果单个ip范围的格式为10.16.0.13-10.16.0.18
String signIpFrom = signIpScopeSingle.substring(0, signIpScopeSingle.indexOf("-"));
signIpFrom = Util.null2String(signIpFrom).trim();
String signIpTo = "";
if (!signIpScopeSingle.endsWith("-")) {
signIpTo = signIpScopeSingle.substring(signIpScopeSingle.indexOf("-") + 1);
}
signIpTo = Util.null2String(signIpTo).trim();
String tempClientAddress = addToThreeFigure(clientAddress, "clientAddress");
signIpFrom = addToThreeFigure(signIpFrom, "signIpFrom");
signIpTo = addToThreeFigure(signIpTo, "signIpTo");
if (signIpFrom.equals("") && signIpTo.equals("")) {
isInScope = true;
}
if (signIpFrom.equals("") && !signIpTo.equals("")) {
if (tempClientAddress.compareTo(signIpTo) <= 0) {
isInScope = true;
}
}
if (!signIpFrom.equals("") && signIpTo.equals("")) {
if (tempClientAddress.compareTo(signIpFrom) >= 0) {
isInScope = true;
}
}
if (!signIpFrom.equals("") && !signIpTo.equals("")) {
if (tempClientAddress.compareTo(signIpFrom) >= 0 && tempClientAddress.compareTo(signIpTo) <= 0) {
isInScope = true;
}
}
} else {//否则单个ip范围的格式为10.16.0.12
if (clientAddress.equals(signIpScopeSingle)) {
isInScope = true;
}
}
return isInScope;
}
/**
* 校验ip范围
* @param clientAddress
* @return
*/
public boolean getIsInScope(String userId, String clientAddress) {
boolean isInScope = false;
clientAddress = Util.null2String(clientAddress).trim();
if (clientAddress.length() == 0) {
return isInScope;
}
RecordSet rs = new RecordSet();
KQGroupComInfo kqGroupComInfo = new KQGroupComInfo();
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
String groupid = Util.null2String(kqGroupMemberComInfo.getKQGroupId(userId));
String signIpScope = Util.null2String(kqGroupComInfo.getIpscope(groupid)).trim();//格式10.*.*.*;10.16.0.12;10.16.0.13-10.16.0.18
if (signIpScope.length() == 0) {
return true;
}
List signIpScopeList = Util.TokenizerString(signIpScope, ";");
String signIpScopeSingle = "";
for (int i = 0; i < signIpScopeList.size(); i++) {
signIpScopeSingle = Util.null2String((String) signIpScopeList.get(i));
signIpScopeSingle = signIpScopeSingle.trim();
if (signIpScopeSingle.indexOf("*") > -1) {//如果单个ip范围的格式为10.*.*.*
List signIpScopeSingleList = Util.TokenizerString(signIpScopeSingle, ".");
List clientAddressList = Util.TokenizerString(clientAddress, ".");
if (signIpScopeSingleList.size() == 4
&& clientAddressList.size() == 4
&& ("*".equals((String) signIpScopeSingleList.get(0))
|| Util.null2String((String) clientAddressList.get(0)).equals((String) signIpScopeSingleList.get(0)))
&& ("*".equals((String) signIpScopeSingleList.get(1))
|| Util.null2String((String) clientAddressList.get(1)).equals((String) signIpScopeSingleList.get(1)))
&& ("*".equals((String) signIpScopeSingleList.get(2))
|| Util.null2String((String) clientAddressList.get(2)).equals((String) signIpScopeSingleList.get(2)))
&& ("*".equals((String) signIpScopeSingleList.get(3))
|| Util.null2String((String) clientAddressList.get(3)).equals((String) signIpScopeSingleList.get(2)))
) {
isInScope = true;
break;
}
} else if (signIpScopeSingle.indexOf("-") > -1) {//如果单个ip范围的格式为10.16.0.13-10.16.0.18
String signIpFrom = signIpScopeSingle.substring(0, signIpScopeSingle.indexOf("-"));
signIpFrom = Util.null2String(signIpFrom).trim();
String signIpTo = "";
if (!signIpScopeSingle.endsWith("-")) {
signIpTo = signIpScopeSingle.substring(signIpScopeSingle.indexOf("-") + 1);
}
signIpTo = Util.null2String(signIpTo).trim();
String tempClientAddress = addToThreeFigure(clientAddress, "clientAddress");
signIpFrom = addToThreeFigure(signIpFrom, "signIpFrom");
signIpTo = addToThreeFigure(signIpTo, "signIpTo");
if (signIpFrom.equals("") && signIpTo.equals("")) {
isInScope = true;
break;
}
if (signIpFrom.equals("") && !signIpTo.equals("")) {
if (tempClientAddress.compareTo(signIpTo) <= 0) {
isInScope = true;
break;
}
}
if (!signIpFrom.equals("") && signIpTo.equals("")) {
if (tempClientAddress.compareTo(signIpFrom) >= 0) {
isInScope = true;
break;
}
}
if (!signIpFrom.equals("") && !signIpTo.equals("")) {
if (tempClientAddress.compareTo(signIpFrom) >= 0 && tempClientAddress.compareTo(signIpTo) <= 0) {
isInScope = true;
break;
}
}
} else {//否则单个ip范围的格式为10.16.0.12
if (clientAddress.equals(signIpScopeSingle)) {
isInScope = true;
break;
}
}
}
return isInScope;
}
/**
* 将IP地址填充为3位数
* 如 "192.168.0.25"填充为3位数后为"192.168.000.025"
* @return String 填充为3位数后的IP地址
*/
private String addToThreeFigure(String IPAddress, String IPType) {
if (IPAddress == null || IPAddress.trim().equals("") || IPType == null || IPType.trim().equals("")) {
return "";
}
String returnString = "";
List IPAddressList = Util.TokenizerString(IPAddress, ".");
String IPAddressPart = "";
for (int i = 0; i < IPAddressList.size(); i++) {
IPAddressPart = Util.null2String(IPAddressList.get(i));
if (IPType.equals("signIpTo")) {
returnString += "." + Util.add0(Util.getIntValue(IPAddressPart, 255), 3);
} else {
returnString += "." + Util.add0(Util.getIntValue(IPAddressPart, 0), 3);
}
}
if (!returnString.equals("")) {
returnString = returnString.substring(1);
}
return returnString;
}
}