Commit ca96da48 by wqc

新增组件跟组件接口

parent ff4ffe7a
...@@ -9,7 +9,7 @@ import org.springframework.web.bind.annotation.*; ...@@ -9,7 +9,7 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Map; import java.util.Map;
@Api(tags = "通用查询") @Api(tags = "组件执行接口")
@RestController @RestController
@RequestMapping(value = "/data/execute") @RequestMapping(value = "/data/execute")
public class ComponentRunController { public class ComponentRunController {
...@@ -18,9 +18,33 @@ public class ComponentRunController { ...@@ -18,9 +18,33 @@ public class ComponentRunController {
private CommonQueryService commonQueryService; private CommonQueryService commonQueryService;
@ApiOperation("去重执行") @ApiOperation("去重执行")
@PostMapping("/remove") @PostMapping("/removeRepeat")
public ResultVo removeRepeat(@RequestBody Map<String, Object> body) throws Exception { public ResultVo removeRepeat(@RequestBody Map<String, Object> body) throws Exception {
return ResultVo.success(commonQueryService.removeRepeat(body)); return ResultVo.success(commonQueryService.removeRepeat(body));
} }
@ApiOperation("身份证清洗")
@PostMapping("/identityClean")
public ResultVo identityClean(@RequestBody Map<String, Object> body) throws Exception {
return ResultVo.success(commonQueryService.identityClean(body));
}
@ApiOperation("字符串替换")
@PostMapping("/replaceString")
public ResultVo replaceString(@RequestBody Map<String, Object> body) throws Exception {
return ResultVo.success(commonQueryService.replaceString(body));
}
@ApiOperation("记录排序")
@PostMapping("/SortRecord")
public ResultVo SortRecord(@RequestBody Map<String, Object> body) throws Exception {
return ResultVo.success(commonQueryService.SortRecord(body));
}
@ApiOperation("记录排序")
@PostMapping("/cutString")
public ResultVo CutString(@RequestBody Map<String, Object> body) throws Exception {
return ResultVo.success(commonQueryService.CutString(body));
}
} }
...@@ -5,6 +5,7 @@ import cn.hutool.json.JSONUtil; ...@@ -5,6 +5,7 @@ import cn.hutool.json.JSONUtil;
import com.alibaba.druid.pool.DruidPooledConnection; import com.alibaba.druid.pool.DruidPooledConnection;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jcraft.jsch.Logger;
import com.zq.common.exception.BusinessException; import com.zq.common.exception.BusinessException;
import com.zq.common.vo.PageVo; import com.zq.common.vo.PageVo;
import com.zq.common.vo.ResultVo; import com.zq.common.vo.ResultVo;
...@@ -15,7 +16,9 @@ import com.zq.dataoperation.entity.CommonQuerySetting; ...@@ -15,7 +16,9 @@ import com.zq.dataoperation.entity.CommonQuerySetting;
import com.zq.dataoperation.entity.MetaDataMapping; 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.SqlUtils; import com.zq.dataoperation.utils.SqlUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
...@@ -180,12 +183,87 @@ public class CommonQueryService extends ServiceImpl<CommonQuerySettingDao, Commo ...@@ -180,12 +183,87 @@ public class CommonQueryService extends ServiceImpl<CommonQuerySettingDao, Commo
return commonQuery(sql,id); return commonQuery(sql,id);
} }
//----------------------------------组件接口----------------------------------------------------------
//去重
public Object removeRepeat(Map<String, Object> body) throws Exception { public Object removeRepeat(Map<String, Object> body) throws Exception {
JSONObject jsonObject = JSONUtil.parseObj(body); JSONObject jsonObject = JSONUtil.parseObj(body);
Long datasourceId = Long.valueOf(jsonObject.get("datasourceId").toString()); Long datasourceId = Long.valueOf(jsonObject.get("datasourceId").toString());
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 DISTINCT " + metaData + ",m.* FROM " + tableName+" m"; String sql1="SELECT "+metaData+" FROM " + tableName+" GROUP BY "+metaData+" HAVING COUNT("+metaData+")>1;";
List<Map> mapList = commonQuery(sql1, datasourceId);
if (mapList==null){
return "该字段没有重复值";
}else{
String sql = "SELECT * FROM " + tableName + " WHERE id not in (SELECT MIN(id) FROM " + tableName+" GROUP BY "+metaData+" HAVING COUNT("+metaData+")>1);";
return commonQuery(sql, datasourceId); return commonQuery(sql, datasourceId);
}
}
//身份证清洗
public Object identityClean(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();
String sql="SELECT * FROM " + tableName;
if (StringUtils.isNotBlank(metaData)) {
return "字段为身份证且不为空!";
}
if(IdentityUtils.isLegalIdCard(metaData)!=true){
return "身份证号不符";
}else if(IdentityUtils.is15BitLegalIdCard(metaData)!=true){
return "身份证不满15位!";
}else if(IdentityUtils.is18BitLegalIdCard(metaData)!=true){
return "身份证不满18位!";
}else {
return commonQuery(sql,datasourceId);
}
}
//字符串替换
public Object replaceString(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();
String originStr= jsonObject.get("originStr").toString();
String replaceStr= jsonObject.get("replaceStr").toString();
String sql ="UPDATE "+tableName+" SET "+metaData+"=REPLACE("+metaData+",'"+originStr+"','"+replaceStr+"');";
if (StringUtils.isNotBlank(metaData)&&StringUtils.isNotBlank(tableName)&&StringUtils.isNotBlank(originStr)&&StringUtils.isNotBlank(replaceStr)) {
return "传入参数不能为空";
}else{
return commonQuery(sql,datasourceId);
}
}
public Object SortRecord(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();
String sortStr=jsonObject.get("sortStr").toString();
if(sortStr.equals("1")){
sortStr="ASC";
}else{
sortStr="DESC";
}
String sql="SELECT * FROM "+tableName+" ORDER BY "+metaData+" "+sortStr;
return commonQuery(sql,datasourceId);
}
public Object CutString(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 beginStr = jsonObject.get("beginStr").toString();
String indexStr = jsonObject.get("indexStr").toString();
String metaData = jsonObject.get("metaData").toString();
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)) {
return "传入参数不能为空";
}else{
return commonQuery(sql,datasourceId);
}
} }
} }
package com.zq.dataoperation.utils;
import java.util.stream.IntStream;
/**
* 身份证号码验证
* 1、号码的结构
* 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。从左至右依次为:六位数字地址码,
* 八位数字出生日期码,三位数字顺序码和一位数字校验码。
* 2、地址码(前六位数)
* 表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。
* 3、出生日期码(第七位至十四位)
* 表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。
* 4、顺序码(第十五位至十七位)
* 表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,
* 顺序码的奇数分配给男性,偶数分配给女性。
* 5、校验码(第十八位数)
* (1)十七位数字本体码加权求和公式 S = Sum(Ai Wi), i = 0, , 16 ,先对前17位数字的权求和 ;
* Ai:表示第i位置上的身份证号码数字值; Wi:表示第i位置上的加权因子 Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
* (2)计算模 Y = mod(S, 11)
* (3)通过模( 0 1 2 3 4 5 6 7 8 9 10)得到对应的校验码 Y:1 0 X 9 8 7 6 5 4 3 2
*
*/
public class IdentityUtils {
/**
* 身份证校验码
*/
private static final int[] COEFFICIENT_ARRAY = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
/**
* 身份证号的尾数规则
*/
private static final String[] IDENTITY_MANTISSA = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};
private static final String IDENTITY_PATTERN_15 = "^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0-2]\\d)|3[0-1])\\d{3}$";
// 修改前未做X位的校验:"^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0-2]\\d)|3[0-1])\\d{4}$";
// 修改后:"^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0-2]\\d)|3[0-1])\\d{3}[0-9Xx]$";
private static final String IDENTITY_PATTERN_18 = "^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0-2]\\d)|3[0-1])\\d{3}[0-9Xx]$";
/**
* 身份证号校验
*/
public static boolean isLegalIdCard(String identity) {
if (identity == null) {
return false;
}
if (identity.length() == 15) {
return is15BitLegalIdCard(identity);
}
if (identity.length() == 18) {
return is18BitLegalIdCard(identity);
}
return false;
}
public static boolean is15BitLegalIdCard(String identity) {
return identity.matches(IDENTITY_PATTERN_15);
}
public static boolean is18BitLegalIdCard(String identity) {
if (identity.length() != 18) {
return false;
}
if (!identity.matches(IDENTITY_PATTERN_18)) {
return false;
}
// 将字符串对象中的字符转换为一个字符数组
char[] chars = identity.toCharArray();
long sum = IntStream.range(0, 17).map(index -> {
char ch = chars[index];
// 通俗理解:digit()是个边界值判断,不过边界返回字符数字本身数值,超过边界即返回 -1.
int digit = Character.digit(ch, 10);
int coefficient = COEFFICIENT_ARRAY[index];
return digit * coefficient;
}).summaryStatistics().getSum();
// 计算出的尾数索引
int mantissaIndex = (int) (sum % 11);
String mantissa = IDENTITY_MANTISSA[mantissaIndex];
String lastChar = identity.substring(17);
return lastChar.equalsIgnoreCase(mantissa);
}
}
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 DataEliminateExecutor 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("DataEliminate");
//模板文件名
shape.setName("DataEliminate");
//鼠标移动至图标上显示的名称
shape.setTitle("数据剔除");
return shape;
}
@Override
public String supportShape() {
return "DataEliminate";
}
@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;
}
}
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 GroupingMetaExecutor 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("GroupingMeta");
//模板文件名
shape.setName("GroupingMeta");
//鼠标移动至图标上显示的名称
shape.setTitle("字段分组");
return shape;
}
@Override
public String supportShape() {
return "GroupingMeta";
}
@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;
}
}
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 TableLeftJoinExecutor 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("TableLeftJoin");
//模板文件名
shape.setName("TableLeftJoin");
//鼠标移动至图标上显示的名称
shape.setTitle("表关联");
return shape;
}
@Override
public String supportShape() {
return "TableLeftJoin";
}
@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;
}
}
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