|
@@ -314,6 +314,7 @@ namespace Util
|
|
|
if(recursionFlag)
|
|
|
{
|
|
|
var loopSetService = App.GetService<IPriLoopSetService>();
|
|
|
+ var recursionStartTableService = App.GetService<IPriRecursionStartTableService>();
|
|
|
var loopSet = loopSetService.GetFirst(m => m.listId == sub.id) ?? new PriLoopSet();
|
|
|
var tableEnName = loopSet.tableEnName; //递归查询表
|
|
|
var parentField = loopSet.parentField; //父字段
|
|
@@ -322,7 +323,10 @@ namespace Util
|
|
|
string objId = prizeObjectId;
|
|
|
while(!string.IsNullOrEmpty(objId) && objId != "0")
|
|
|
{
|
|
|
- prizeSendDo(projectId, sub, objId, content);
|
|
|
+ if(loopCondition(projectId, objId, content))
|
|
|
+ {
|
|
|
+ prizeSendDo(projectId, sub, objId, content);
|
|
|
+ }
|
|
|
var parent = db.SqlQueryable<Dictionary<string, object>>("select " + parentField + " from " + tableEnName + " where " + sonField + "=" + objId).First();
|
|
|
if(parent != null)
|
|
|
{
|
|
@@ -492,6 +496,121 @@ namespace Util
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ //递归条件判断
|
|
|
+ public static bool loopCondition(int projectId, string objId, string content)
|
|
|
+ {
|
|
|
+ Dictionary<string, object> dic = new Dictionary<string, object>();
|
|
|
+ var queryTableService = App.GetService<IPriRecursionStartTableService>();
|
|
|
+ var queryFieldService = App.GetService<IPriRecursionStartFieldService>();
|
|
|
+ //查询表
|
|
|
+ var queryTables = queryTableService.GetList(m => m.projectId == projectId);
|
|
|
+ foreach(var queryTable in queryTables)
|
|
|
+ {
|
|
|
+ //查询返回字段
|
|
|
+ string fields = "1";
|
|
|
+
|
|
|
+ //查询匹配条件
|
|
|
+ string condi = "";
|
|
|
+ var queryFields = queryFieldService.GetList(m => m.objectTableId == queryTable.id);
|
|
|
+ foreach(var queryField in queryFields)
|
|
|
+ {
|
|
|
+ string fieldEnName = queryField.fieldEnName;
|
|
|
+ string fieldQueryKind = queryField.fieldQueryKind;
|
|
|
+ string fieldQueryModel = queryField.fieldQueryModel;
|
|
|
+ string fieldQueryValue = queryField.fieldQueryValue;
|
|
|
+ fieldQueryValue = fieldQueryValue.Replace("#{loop_obj}#", objId);
|
|
|
+ string fieldQueryValueType = queryField.fieldQueryValueType;
|
|
|
+ if(fieldQueryKind == "1") //模糊匹配
|
|
|
+ {
|
|
|
+ condi += " and " + fieldEnName + " like ";
|
|
|
+ if(fieldQueryModel == "request_param")
|
|
|
+ {
|
|
|
+ Dictionary<string, string> req = getRequestParams(content);
|
|
|
+ condi += "'%" + req[fieldQueryValue] + "%'";
|
|
|
+ }
|
|
|
+ else if(fieldQueryModel == "fixed_value")
|
|
|
+ {
|
|
|
+ condi += "'%" + GetExpressionVal(fieldQueryValue) + "%'";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if(fieldQueryKind == "2") //精确匹配
|
|
|
+ {
|
|
|
+ condi += " and " + fieldEnName + "=";
|
|
|
+ string val = "";
|
|
|
+ if(fieldQueryModel == "request_param")
|
|
|
+ {
|
|
|
+ Dictionary<string, string> req = getRequestParams(content);
|
|
|
+ val = req[fieldQueryValue];
|
|
|
+ }
|
|
|
+ else if(fieldQueryModel == "fixed_value")
|
|
|
+ {
|
|
|
+ val = GetExpressionVal(fieldQueryValue);
|
|
|
+ }
|
|
|
+ if(fieldQueryValueType == "text")
|
|
|
+ {
|
|
|
+ val = "'" + val + "'";
|
|
|
+ }
|
|
|
+ condi += val;
|
|
|
+ }
|
|
|
+ else if(fieldQueryKind == "3") //范围匹配
|
|
|
+ {
|
|
|
+ string[] val = fieldQueryValue.Split(':');
|
|
|
+ if(fieldQueryModel == "request_param")
|
|
|
+ {
|
|
|
+ Dictionary<string, string> req = getRequestParams(content);
|
|
|
+ if(fieldQueryValueType == "number")
|
|
|
+ {
|
|
|
+ if(!string.IsNullOrEmpty(req[val[0]])) condi += " and " + fieldEnName + ">=" + req[val[0]];
|
|
|
+ if(!string.IsNullOrEmpty(req[val[1]])) condi += " and " + fieldEnName + "<=" + req[val[1]];
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if(!string.IsNullOrEmpty(req[val[0]])) condi += " and " + fieldEnName + ">='" + req[val[0]] + "'";
|
|
|
+ if(!string.IsNullOrEmpty(req[val[1]])) condi += " and " + fieldEnName + "<='" + req[val[1]] + "'";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if(fieldQueryModel == "fixed_value")
|
|
|
+ {
|
|
|
+ if(fieldQueryValueType == "number")
|
|
|
+ {
|
|
|
+ if(!string.IsNullOrEmpty(val[0])) condi += " and " + fieldEnName + ">=" + val[0];
|
|
|
+ if(!string.IsNullOrEmpty(val[1])) condi += " and " + fieldEnName + "<=" + val[1];
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if(!string.IsNullOrEmpty(val[0])) condi += " and " + fieldEnName + ">='" + GetExpressionVal(val[0]) + "'";
|
|
|
+ if(!string.IsNullOrEmpty(val[1])) condi += " and " + fieldEnName + "<='" + GetExpressionVal(val[1]) + "'";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if(fieldQueryKind == "4") //取反匹配
|
|
|
+ {
|
|
|
+ condi += " and " + fieldEnName + "!=";
|
|
|
+ string val = "";
|
|
|
+ if(fieldQueryModel == "request_param")
|
|
|
+ {
|
|
|
+ Dictionary<string, string> req = getRequestParams(content);
|
|
|
+ val = req[fieldQueryValue];
|
|
|
+ }
|
|
|
+ else if(fieldQueryModel == "fixed_value")
|
|
|
+ {
|
|
|
+ val = GetExpressionVal(fieldQueryValue);
|
|
|
+ }
|
|
|
+ if(fieldQueryValueType == "text")
|
|
|
+ {
|
|
|
+ val = "'" + val + "'";
|
|
|
+ }
|
|
|
+ condi += val;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ var db = initDb(projectId);
|
|
|
+ var item = db.SqlQueryable<Dictionary<string, object>>("select " + fields + " " + queryTable.tableEnName + "-" + fields + " from " + queryTable.tableEnName + " where 1=1" + condi).First();
|
|
|
+ if(item == null) return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
//奖励入库
|
|
|
public static void prizeToDatabase(int projectId, string content)
|
|
|
{
|