package cn.gistack.sm.resDataCheck.feign;
|
|
import cn.gistack.sm.resDataCheck.entity.Rules;
|
import cn.gistack.sm.resDataCheck.entity.RulesCondition;
|
import cn.gistack.sm.resDataCheck.service.IQualityManageService;
|
import cn.gistack.sm.resDataCheck.service.IRulesConditionService;
|
import cn.gistack.sm.resDataCheck.service.IRulesService;
|
import lombok.AllArgsConstructor;
|
import org.springblade.core.mp.support.Condition;
|
import org.springblade.core.tenant.annotation.NonDS;
|
import org.springblade.core.tool.api.R;
|
import org.springframework.web.bind.annotation.RestController;
|
import springfox.documentation.annotations.ApiIgnore;
|
|
import java.util.List;
|
|
/**
|
* @PROJECT_NAME: skjcmanager
|
* @DESCRIPTION:
|
* @USER: aix
|
* @DATE: 2023/7/4 16:35
|
*/
|
@NonDS
|
@ApiIgnore
|
@RestController
|
@AllArgsConstructor
|
public class RulesClient implements IRulesClient {
|
|
private IRulesService rulesService;
|
|
private IRulesConditionService rulesConditionService;
|
|
private IQualityManageService qualityManageService;
|
|
/**
|
* 指标匹配空值
|
* @param key condition
|
* @return
|
*/
|
private String getConditionSqlStrByNullVal(String key) {
|
String retStr = "-1";
|
switch (key) {
|
case "EQUAL": //等于
|
retStr = " is null OR = '' ";
|
break;
|
case "UNEQUAL": //不等于
|
retStr = " is not null ";
|
break;
|
}
|
return retStr;
|
}
|
|
/**
|
* 指标对指标匹配
|
* @param key condition
|
* @param target 指标
|
* @param val 值
|
* @return
|
*/
|
private String getConditionSqlStrByTarget(String key, String target, String val) {
|
String retStr = "-1";
|
switch (key) {
|
case "GREATER": //大于
|
retStr = " > " + target;
|
break;
|
case "GREATER_EQUAL": //大于等于
|
retStr = " >= " + target;
|
break;
|
case "EQUAL": //等于
|
retStr = " = " + target;
|
break;
|
case "LESS_EQUAL": //小于等于
|
retStr = " <= " + target;
|
break;
|
case "LESS": //小于
|
retStr = " < " + target;
|
break;
|
case "UNEQUAL": //不等于
|
retStr = " <> " + target;
|
break;
|
case "DIFFER_GRATER": //差值大于
|
retStr = " - " + target + " > " + val;
|
break;
|
case "DIFFER_GRATER_EQUAL": //差值大于等于
|
retStr = " - " + target + " >= " + val;
|
break;
|
case "DIFFER_EQUAL": //差值等于
|
retStr = " - " + target + " = " + val;
|
break;
|
case "DIFFER_LESS_EQUAL": //差值小于等于
|
retStr = " - " + target + " < " + val;
|
break;
|
case "DIFFER_LESS": //差值小于
|
retStr = " - " + target + " <= " + val;
|
break;
|
case "DIFFER_UNEQUAL": //差值不等于
|
retStr = " - " + target + " <> " + val;
|
break;
|
}
|
return retStr;
|
}
|
|
/**
|
* 指标对值匹配
|
* @param key condition
|
* @param val 值
|
* @return
|
*/
|
private String getConditionSqlStrByVal(String key,String val) {
|
String retStr = "-1";
|
switch (key) {
|
case "GREATER": //大于
|
retStr = " > " + val;
|
break;
|
case "GREATER_EQUAL": //大于等于
|
retStr = " >= " + val;
|
break;
|
case "EQUAL": //等于
|
retStr = " = " + val;
|
break;
|
case "LESS_EQUAL": //小于等于
|
retStr = " <= " + val;
|
break;
|
case "LESS": //小于
|
retStr = " < " + val;
|
break;
|
case "UNEQUAL": //不等于
|
retStr = " <> " + val;
|
break;
|
}
|
return retStr;
|
}
|
|
/**
|
* 指标封装数据库字段
|
*
|
* @param key 指标值
|
* @return 数据库str
|
*/
|
private String getPropSqlStr(String key) {
|
String retStr = "";
|
switch (key) {
|
case "BASIC_1": // 水库名称
|
retStr = "a.\"name\"";
|
break;
|
case "BASIC_2": // 管理行政区
|
retStr = "a.\"interior_ad_guid\"";
|
break;
|
case "BASIC_3": // 注册登记号
|
retStr = "a.\"res_reg_code\"";
|
break;
|
case "RESERVOIR_1": // 总库容(万m³)
|
retStr = "c.\"tb_tot_cap\"";
|
break;
|
case "RESERVOIR_2": // 死库容(万m³)
|
retStr = "c.\"tb_dead_cap\"";
|
break;
|
case "RESERVOIR_3": // 校核洪水位(m)
|
retStr = "c.\"tb_chec_fl_stag\"";
|
break;
|
case "RESERVOIR_4": // 设计洪水位(m)
|
retStr = "c.\"tb_des_fl_stag\"";
|
break;
|
case "RESERVOIR_5": // 正常蓄水位(m)
|
retStr = "c.\"tb_norm_pool_stag\"";
|
break;
|
case "RESERVOIR_6": // 防洪高水位(m)
|
retStr = "c.\"tb_flpr_high_stag\"";
|
break;
|
case "RESERVOIR_7": // 死水位(m)
|
retStr = "c.\"tb_dead_stag\"";
|
break;
|
case "RESERVOIR_8": // 控制运行水位(m)
|
retStr = "b.\"tb_control_z\"";
|
break;
|
case "RESERVOIR_9": // 集雨面积
|
retStr = "c.\"wat_shed_area\"";
|
break;
|
case "RESERVOIR_10": // 实时水位(m)
|
retStr = "f.\"rz\"";
|
break;
|
case "DRAINAGE_1": // 堰顶高程(m)
|
retStr = "g.\"tb_weir_top_elevation\"";
|
break;
|
case "RETAINING_3": // 坝顶高程(m)
|
retStr = "h.\"tb_dam_top_elevation\"";
|
break;
|
case "FLOOD_1": // 前汛期(m)
|
retStr = "d1.\"tb_flse_lim_stag\"";
|
break;
|
case "FLOOD_2": // 主汛期(m)
|
retStr = "d2.\"tb_flse_lim_stag\"";
|
break;
|
case "FLOOD_3": // 后汛期(m)
|
retStr = "d3.\"tb_flse_lim_stag\"";
|
break;
|
default:
|
retStr = "";
|
}
|
return retStr;
|
}
|
|
@Override
|
public R createDataRules(Long id) {
|
// 获取规则对象 返回值有关联水库,只匹配关联水库,为空表示匹配所有水库
|
Rules rules = rulesService.getById(id);
|
|
// 根据规则对象获取查询条件
|
RulesCondition rulesCondition = new RulesCondition();
|
rulesCondition.setRuleId(String.valueOf(rules.getId()));
|
List<RulesCondition> rcList = rulesConditionService.list(Condition.getQueryWrapper(rulesCondition));
|
|
// 开始拼接条件 where
|
String sqlStr = "";
|
String relation = "";
|
for (RulesCondition rc : rcList) {
|
|
// 指标1
|
if (rc.getRelation().equals("AND")) {
|
relation = " AND ";
|
} else if (rc.getRelation().equals("OR")) {
|
relation = " OR ";
|
} else {
|
relation = " WHERE ";
|
}
|
|
sqlStr += relation + getPropSqlStr(rc.getBasic());
|
|
// 判断
|
if (rc.getProp().equals("NULLVAL")) { // 空值
|
sqlStr += getConditionSqlStrByNullVal(rc.getCondition());
|
} else if (rc.getProp().equals("TARGET")) { // 指标
|
sqlStr += getConditionSqlStrByTarget(rc.getCondition(),getPropSqlStr(rc.getTarget()),rc.getValue());
|
} else {
|
sqlStr += getConditionSqlStrByVal(rc.getCondition(),rc.getValue());
|
}
|
|
}
|
|
// 拼接条件有问题,不操作
|
if (sqlStr.indexOf("-1") > 0) {
|
return R.fail(-1,sqlStr + "\\n 查询条件错误,请检查规则设置");
|
}
|
|
// 执行sql
|
return R.data(qualityManageService.addQualityManage(id,sqlStr));
|
}
|
}
|