Commit 94de6fdc by wqc

添加组件

parent ca96da48
...@@ -47,4 +47,10 @@ public class ComponentRunController { ...@@ -47,4 +47,10 @@ public class ComponentRunController {
return ResultVo.success(commonQueryService.CutString(body)); return ResultVo.success(commonQueryService.CutString(body));
} }
@ApiOperation("验证国内电话")
@PostMapping("/validateNumber")
public ResultVo validateNumber(@RequestBody Map<String, Object> body) throws Exception {
return ResultVo.success(commonQueryService.validateNumber(body));
}
} }
...@@ -17,6 +17,7 @@ import com.zq.dataoperation.entity.MetaDataMapping; ...@@ -17,6 +17,7 @@ import com.zq.dataoperation.entity.MetaDataMapping;
import com.zq.dataoperation.entity.QueryDb; import com.zq.dataoperation.entity.QueryDb;
import com.zq.dataoperation.utils.ConnectionUtil; import com.zq.dataoperation.utils.ConnectionUtil;
import com.zq.dataoperation.utils.IdentityUtils; import com.zq.dataoperation.utils.IdentityUtils;
import com.zq.dataoperation.utils.MobileUtil;
import com.zq.dataoperation.utils.SqlUtils; import com.zq.dataoperation.utils.SqlUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
...@@ -192,7 +193,7 @@ public class CommonQueryService extends ServiceImpl<CommonQuerySettingDao, Commo ...@@ -192,7 +193,7 @@ public class CommonQueryService extends ServiceImpl<CommonQuerySettingDao, Commo
String metaData = jsonObject.get("metaData").toString(); String metaData = jsonObject.get("metaData").toString();
String sql1="SELECT "+metaData+" FROM " + tableName+" GROUP BY "+metaData+" HAVING COUNT("+metaData+")>1;"; String sql1="SELECT "+metaData+" FROM " + tableName+" GROUP BY "+metaData+" HAVING COUNT("+metaData+")>1;";
List<Map> mapList = commonQuery(sql1, datasourceId); List<Map> mapList = commonQuery(sql1, datasourceId);
if (mapList==null){ if (mapList.size()==0){
return "该字段没有重复值"; return "该字段没有重复值";
}else{ }else{
String sql = "SELECT * FROM " + tableName + " WHERE id not in (SELECT MIN(id) FROM " + tableName+" GROUP BY "+metaData+" HAVING COUNT("+metaData+")>1);"; String sql = "SELECT * FROM " + tableName + " WHERE id not in (SELECT MIN(id) FROM " + tableName+" GROUP BY "+metaData+" HAVING COUNT("+metaData+")>1);";
...@@ -207,7 +208,7 @@ public class CommonQueryService extends ServiceImpl<CommonQuerySettingDao, Commo ...@@ -207,7 +208,7 @@ public class CommonQueryService extends ServiceImpl<CommonQuerySettingDao, Commo
String tableName = jsonObject.get("tableName").toString(); String tableName = jsonObject.get("tableName").toString();
String metaData = jsonObject.get("metaData").toString(); String metaData = jsonObject.get("metaData").toString();
String sql="SELECT * FROM " + tableName; String sql="SELECT * FROM " + tableName;
if (StringUtils.isNotBlank(metaData)) { if (!StringUtils.isNotBlank(metaData)) {
return "字段为身份证且不为空!"; return "字段为身份证且不为空!";
} }
if(IdentityUtils.isLegalIdCard(metaData)!=true){ if(IdentityUtils.isLegalIdCard(metaData)!=true){
...@@ -260,10 +261,39 @@ public class CommonQueryService extends ServiceImpl<CommonQuerySettingDao, Commo ...@@ -260,10 +261,39 @@ public class CommonQueryService extends ServiceImpl<CommonQuerySettingDao, Commo
String indexStr = jsonObject.get("indexStr").toString(); String indexStr = jsonObject.get("indexStr").toString();
String metaData = jsonObject.get("metaData").toString(); String metaData = jsonObject.get("metaData").toString();
String sql="SELECT *,"+" SUBSTR("+metaData+","+beginStr+","+indexStr+") AS "+metaData +"1 FROM "+tableName; String sql="SELECT *,"+" SUBSTR("+metaData+","+beginStr+","+indexStr+") AS "+metaData +"1 FROM "+tableName;
if (StringUtils.isNotBlank(metaData)&&StringUtils.isNotBlank(tableName)&&StringUtils.isNotBlank(beginStr)&&StringUtils.isNotBlank(indexStr)) { if (!StringUtils.isNotBlank(metaData)&&StringUtils.isNotBlank(tableName)&&StringUtils.isNotBlank(beginStr)&&StringUtils.isNotBlank(indexStr)) {
return "传入参数不能为空"; return "传入参数不能为空";
}else{ }else{
return commonQuery(sql,datasourceId); return commonQuery(sql,datasourceId);
} }
} }
public Object validateNumber(Map<String, Object> body) throws Exception {
JSONObject jsonObject = JSONUtil.parseObj(body);
Long datasourceId = Long.valueOf(jsonObject.get("datasourceId").toString());
String tableName = jsonObject.get("tableName").toString();
String metaData = jsonObject.get("metaData").toString();
HashMap<String, Object> map = new HashMap<>();
if (!StringUtils.isNotBlank(metaData)&&StringUtils.isNotBlank(tableName)) {
return "传入参数不能为空";
}
String phone="SELECT "+metaData+" FROM "+tableName;
String sql ="SELECT * FROM "+tableName+" WHERE "+metaData+" REGEXP '^1[3-9][0-9]{9}$'";
// List<Map> mapList = commonQuery(phone, datasourceId);
// for (Object list:mapList) {
// String meta = list.toString();
// if(MobileUtil.checkPhone(meta)!=true) {
// log.error("不是国内手机号");
// continue;
// }else{
// dataList = commonQuery(sql, datasourceId);
// }
// }
List<Map> dataList = commonQuery(sql, datasourceId);
String dirty="SELECT * FROM "+tableName+" WHERE "+metaData+" NOT REGEXP '^1[3-9][0-9]{9}$'";
List<Map> dirtyList = commonQuery(dirty, datasourceId);
map.put("dataList",dataList);
map.put("dirtyList",dirtyList);
return map;
}
} }
package com.zq.dataoperation.utils;
import org.apache.commons.lang3.StringUtils;
import java.util.regex.Pattern;
/**
* 手机号校验工具类
*/
public class MobileUtil {
/**
* 中国电信号码格式验证 手机段: 133,149,153,173,177,180,181,189,191,199,1349,1410,1700,1701,1702
**/
private static final String CHINA_TELECOM_PATTERN = "(?:^(?:\\+86)?1(?:33|49|53|7[347]|8[019]|9[139])\\d{8}$)|(?:^(?:\\+86)?1349\\d{7}$)|(?:^(?:\\+86)?1410\\d{7}$)|(?:^(?:\\+86)?170[0-2]\\d{7}$)";
/**
* 中国联通号码格式验证 手机段:130,131,132,145,146,155,156,166,171,175,176,185,186,1704,1707,1708,1709
**/
private static final String CHINA_UNICOM_PATTERN = "(?:^(?:\\+86)?1(?:3[0-2]|4[56]|5[56]|6[67]|7[156]|8[56]|96)\\d{8}$)|(?:^(?:\\+86)?170[47-9]\\d{7}$)";
/**
* 中国移动号码格式验证
* 手机段:134,135,136,137,138,139,147,148,150,151,152,157,158,159,172,178,182,183,184,187,188,195,198,1440,1703,1705,1706
**/
private static final String CHINA_MOBILE_PATTERN = "(?:^(?:\\+86)?1(?:3[4-9]|4[78]|5[0-27-9]|72|78|8[2-478]|98|95)\\d{8}$)|(?:^(?:\\+86)?1440\\d{7}$)|(?:^(?:\\+86)?170[356]\\d{7}$)";
/**
* 虚拟运营商号码格式验证
* 162 165 167 170 171
*/
private static final String CHINA_VIRTUALLY_PATTERN = "(?:^(?:\\+86)?1(?:6[257]|7[01])\\d{8}$)";
/**
* 中国香港
*/
private static final String CHINA_HANGKONG_PATTERN = "^(00)?(852)[5|6|9]\\d{7}$";
/**
* 中国香港手机号码校验
*
* @param phone
*
* @return
*/
public static boolean checkChinaHangkong(String phone) {
if (StringUtils.isNotBlank(phone)) {
Pattern regexp = Pattern.compile(CHINA_HANGKONG_PATTERN);
if (regexp.matcher(phone).matches()) {
return true;
}else{
return false;
}
}
return true;
}
/**
* 中国大陆手机号码校验
*
* @param phone
*
* @return
*/
public static boolean checkPhone(String phone) {
if (StringUtils.isNotBlank(phone)) {
if (checkChinaMobile(phone) || checkChinaUnicom(phone) || checkChinaTelecom(phone)|| checkChinaVirtually(phone)||checkChinaHangkong(phone)) {
return true;
}else{
return false;
}
}
return true;
}
/**
* 中国移动手机号码校验
*
* @param phone
*
* @return
*/
public static boolean checkChinaMobile(String phone) {
if (StringUtils.isNotBlank(phone)) {
Pattern regexp = Pattern.compile(CHINA_MOBILE_PATTERN);
if (regexp.matcher(phone).matches()) {
return true;
}else{
return false;
}
}
return true;
}
/**
* 中国联通手机号码校验
*
* @param phone
*
* @return
*/
public static boolean checkChinaUnicom(String phone) {
if (StringUtils.isNotBlank(phone)) {
Pattern regexp = Pattern.compile(CHINA_UNICOM_PATTERN);
if (regexp.matcher(phone).matches()) {
return true;
}else{
return false;
}
}
return true;
}
/**
* 中国电信手机号码校验
*
* @param phone
*
* @return
*/
public static boolean checkChinaTelecom(String phone) {
if (StringUtils.isNotBlank(phone)) {
Pattern regexp = Pattern.compile(CHINA_TELECOM_PATTERN);
if (regexp.matcher(phone).matches()) {
return true;
}else {
return false;
}
}
return true;
}
/**
* 虚拟运营商手机号码校验
*
* @param phone
*
* @return
*/
public static boolean checkChinaVirtually(String phone) {
if (StringUtils.isNotBlank(phone)) {
Pattern regexp = Pattern.compile(CHINA_VIRTUALLY_PATTERN);
if (regexp.matcher(phone).matches()) {
return true;
}else{
return false;
}
}
return true;
}
/**
* 隐藏手机号中间四位
*
* @param phone
*
* @return java.lang.String
*/
public static String hideMiddleMobile(String phone) {
if (StringUtils.isNotBlank(phone)) {
phone = phone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
}
return phone;
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zq.dataoperation.dao.MetaDataDao">
<select id="getPage" resultType="com.zq.dataoperation.vo.MetaDataVo">
SELECT
m.*,
mc.CATEGORY_NAME
FROM meta_data m
LEFT JOIN meta_data_category mc ON m.CATEGORY_ID = mc.ID
<where>
<if test="req.metaName != null and req.metaName != ''">
AND m.META_NAME like '%${req.metaName}%'
</if>
<if test="req.categoryId != null">
AND mc.ID = #{req.categoryId}
</if>
</where>
ORDER BY m.ID DESC
</select>
<select id="getPageList" resultType="com.zq.dataoperation.vo.MetaDataVo">
select * FROM meta_data me WHERE me.category_id = #{req.categoryId} LIMIT #{req.page},#{req.size}
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zq.dataoperation.dao.MetaDataMappingDao">
<select id="selectByMetaIdList" resultType="java.util.List">
select * from meta_data_mapping where metadata_id=#{id}
</select>
<select id="selectRepeat" resultType="com.zq.dataoperation.entity.MetaDataMapping">
SELECT
*
FROM
meta_data_mapping
WHERE
table_sqlname = #{tableSqlname}
AND field_name IN(SELECT field_name FROM meta_data_mapping GROUP BY field_name HAVING COUNT(field_name) > 1)
</select>
<select id="getSqlName" resultType="com.zq.dataoperation.entity.MetaDataMapping">
SELECT DISTINCT
table_sqlname
FROM
meta_data_mapping
WHERE
table_sqlname IN (
SELECT
table_sqlname
FROM
meta_data_mapping
GROUP BY
table_sqlname
HAVING
COUNT( table_sqlname ) > 1)
</select>
<select id="selectByCateId" resultType="com.zq.dataoperation.entity.MetaDataMapping">
SELECT
DISTINCT
t.table_sqlname,
t.query_db_id
FROM
meta_data_mapping t
LEFT JOIN meta_data m ON t.metadata_id = m.id
LEFT JOIN meta_data_category y ON m.category_id = y.id
WHERE y.id=#{id}
</select>
<select id="getMetaByTable" resultType="com.zq.dataoperation.vo.MetaDataReq">
SELECT
a.*,
p.table_sqlname
FROM
meta_data a
LEFT JOIN meta_data_mapping p ON a.id = p.metadata_id
WHERE
p.table_sqlname = #{tableSqlName}
</select>
</mapper>
package com.zq.spiderflow.core.executor.shape;
import com.zq.spiderflow.context.SpiderContext;
import com.zq.spiderflow.executor.ShapeExecutor;
import com.zq.spiderflow.model.Shape;
import com.zq.spiderflow.model.SpiderNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.util.Map;
/**
* @author Administrator
*/
@Component
public class ValidateNumberExecutor implements ShapeExecutor {
public static final String DATASOURCE_ID = "datasourceId";
public static final String META_DATA = "metaData";
public static final String TABLE_NAME = "tableName";
private static final Logger logger = LoggerFactory.getLogger(ExecuteSQLExecutor.class);
@Override
public Shape shape() {
Shape shape = new Shape();
//web界面上显示的图标
shape.setImage("data:image/png;base64,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");
//拖放至容器里时默认的节点名称
shape.setLabel("验证国内电话");
//模板文件名
shape.setName("ValidateNumber");
//鼠标移动至图标上显示的名称
shape.setTitle("验证国内电话");
return shape;
}
@Override
public String supportShape() {
return "ValidateNumber";
}
@Override
public void execute(SpiderNode node, SpiderContext context, Map<String, Object> variables) {
}
@Override
public boolean allowExecuteNext(SpiderNode node, SpiderContext context, Map<String, Object> variables) {
return false;
}
@Override
public boolean isThread() {
return false;
}
}
...@@ -11,10 +11,7 @@ import org.apache.commons.lang3.StringUtils; ...@@ -11,10 +11,7 @@ import org.apache.commons.lang3.StringUtils;
import com.zq.spiderflow.core.model.DataSource; import com.zq.spiderflow.core.model.DataSource;
import com.zq.spiderflow.model.JsonBean; import com.zq.spiderflow.model.JsonBean;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
...@@ -53,8 +50,8 @@ public class DataSourceController { ...@@ -53,8 +50,8 @@ public class DataSourceController {
return dataSource; return dataSource;
} }
@RequestMapping("/remove") @DeleteMapping("/remove/{id}")
public void remove(String id){ public void remove(@PathVariable String id){
DataSourceUtils.remove(id); DataSourceUtils.remove(id);
dataSourceService.removeById(id); dataSourceService.removeById(id);
} }
...@@ -92,4 +89,4 @@ public class DataSourceController { ...@@ -92,4 +89,4 @@ public class DataSourceController {
} }
} }
} }
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment