修改订单API下的Task 增加礼物的Task显示
修改转换器
This commit is contained in:
1 parent
9e71c54414
commit
b512ee992f
3 files changed
+340
-48
No files matched your search
@@ -713,10 +713,6 @@ namespace KJD_Web.BLL.WXXD
|
||||
string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString;
|
||||
MysqlUtils mySql = new MysqlUtils(conn);
|
||||
|
||||
if (orderNo.Contains("3738552208766960384"))
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
string sql = "";
|
||||
count = -1;
|
||||
@@ -2177,18 +2173,81 @@ namespace KJD_Web.BLL.WXXD
|
||||
if (!WXUserManage.GetSign(inputData))
|
||||
return "{\"code\":999,\"msg\":\"签名校验失败\"}";
|
||||
var user_name = RegexUtils.GetStringQuery(ref inputData, "user_name");
|
||||
|
||||
string shop_ids = RegexUtils.GetStringQuery(ref inputData, "shop_ids")?.Replace("'", "");//所有店铺信息
|
||||
if (string.IsNullOrEmpty(shop_ids))
|
||||
throw new ArgumentException("请选择店铺");
|
||||
List<string> shopIdLst = shop_ids.Split(',').ToList();
|
||||
if (shopIdLst.Count > 0)
|
||||
shop_ids = "'" + string.Join("','", shopIdLst) + "'";
|
||||
|
||||
string start_Time = RegexUtils.GetStringQuery(ref inputData, "start_time")?.Replace("'", "");
|
||||
string end_Time = RegexUtils.GetStringQuery(ref inputData, "end_time")?.Replace("'", "");
|
||||
DateTime startTime = DateTime.Now.AddDays(-7);
|
||||
DateTime endTime = DateTime.Now;
|
||||
if (!string.IsNullOrEmpty(start_Time))
|
||||
startTime = TimeUtils.StampMillisecondsToDateTime(start_Time.ParseToLong());
|
||||
if (!string.IsNullOrEmpty(end_Time))
|
||||
endTime = TimeUtils.StampMillisecondsToDateTime(end_Time.ParseToLong());
|
||||
if (endTime <= startTime)
|
||||
throw new ArgumentException("结束时间必须大于开始时间");
|
||||
//if (endTime > startTime.AddDays(10))
|
||||
// throw new ArgumentException("时间范围不能超过10天");
|
||||
int startTimestamp = TimeUtils.DateTimeToTimestampSeconds(startTime);
|
||||
int endTimestamp = TimeUtils.DateTimeToTimestampSeconds(endTime);
|
||||
|
||||
var timeCalc = DateTime.Now;
|
||||
|
||||
string conn = System.Configuration.ConfigurationManager.ConnectionStrings["ConnKJD"].ConnectionString;
|
||||
MysqlUtils mySql = new MysqlUtils(conn);
|
||||
|
||||
// ---------- 1. 查主任务 ----------
|
||||
string taskSql = $"SELECT A.id, A.task_type, A.task_describe, A.shop_ids, B.`name` as shop_name, A.object_ids, A.sub_task_num, A.success_task_num, A.fail_task_num, A.`status`, A.create_by, A.update_by, A.remark, A.task_fail_reason, A.create_time, A.update_time FROM erp.o_user_operate_task AS A INNER JOIN erp.o_shop AS B ON A.shop_ids = B.id WHERE task_type in(25,31) AND A.create_by = '{user_name}' ORDER BY create_time DESC, id DESC; ";
|
||||
StringBuilder sbTask = new StringBuilder();
|
||||
|
||||
sbTask.Append("SELECT ");
|
||||
sbTask.Append("A.id, ");
|
||||
sbTask.Append("A.task_type, ");
|
||||
sbTask.Append("A.task_describe, ");
|
||||
sbTask.Append("A.shop_ids, ");
|
||||
sbTask.Append("C.name AS shop_name, ");
|
||||
sbTask.Append("A.object_ids, ");
|
||||
sbTask.Append("A.sub_task_num, ");
|
||||
sbTask.Append("A.success_task_num, ");
|
||||
sbTask.Append("A.fail_task_num, ");
|
||||
sbTask.Append("A.status, ");
|
||||
sbTask.Append("A.create_by, ");
|
||||
sbTask.Append("A.update_by, ");
|
||||
sbTask.Append("A.remark, ");
|
||||
sbTask.Append("A.task_fail_reason, ");
|
||||
sbTask.Append("A.create_time, ");
|
||||
sbTask.Append("A.update_time ");
|
||||
sbTask.Append("FROM erp.o_user_operate_task AS A ");
|
||||
sbTask.Append("INNER JOIN erp.o_shop AS C ON A.shop_ids = C.id ");
|
||||
sbTask.Append("WHERE A.task_type IN (25, 31, 36) ");
|
||||
|
||||
// 时间条件
|
||||
{
|
||||
sbTask.Append("AND A.create_time BETWEEN '");
|
||||
sbTask.Append(startTime);
|
||||
sbTask.Append("' AND '");
|
||||
sbTask.Append(endTime);
|
||||
sbTask.Append("' ");
|
||||
}
|
||||
|
||||
// 店铺条件
|
||||
if (!string.IsNullOrEmpty(shop_ids))
|
||||
{
|
||||
sbTask.Append("AND A.shop_ids IN (");
|
||||
sbTask.Append(shop_ids);
|
||||
sbTask.Append(") ");
|
||||
}
|
||||
|
||||
sbTask.Append("ORDER BY A.create_time DESC, A.id DESC;");
|
||||
|
||||
DataTable taskDt = null;
|
||||
try
|
||||
{
|
||||
taskDt = mySql.ExecuteDataTable(taskSql);
|
||||
taskDt = mySql.ExecuteDataTable(sbTask.ToString());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -2221,30 +2280,180 @@ namespace KJD_Web.BLL.WXXD
|
||||
task_fail_reason = row["task_fail_reason"].ParseToNullableString(),
|
||||
create_time = row["create_time"].ParseToString().ParseToDateTimeNullable(),
|
||||
update_time = row["update_time"].ParseToString().ParseToDateTimeNullable(),
|
||||
sub_tasks = new List<user_operate_sub_task_info>() // 初始化子任务列表
|
||||
};
|
||||
orderList.Add(g);
|
||||
}
|
||||
JsonSerializerSettings jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore };
|
||||
var data = JsonUtils.SerializeObjectToString(orderList.Select(a => new {
|
||||
id = a.id,
|
||||
taskType = a.task_type,
|
||||
taskDescribe = a.task_describe,
|
||||
ShopId = a.shop_ids,
|
||||
shopName = a.shop_name,
|
||||
ObjectIds = a.object_ids,
|
||||
subTaskNum = a.sub_task_num,
|
||||
successTaskNum = a.success_task_num,
|
||||
failTaskNum = a.fail_task_num,
|
||||
status = a.status,
|
||||
createBy = a.create_by,
|
||||
updateBy = a.update_by,
|
||||
remark = a.remark,
|
||||
taskFailReason = a.task_fail_reason,
|
||||
createTime = a.create_time,
|
||||
updateTime = a.update_time
|
||||
}), jsonSetting);
|
||||
var seconds = (DateTime.Now - timeCalc).TotalSeconds.ToString("0.000");
|
||||
return "{\"code\":200,\"msg\":\"success\",\"data\":" + data + "}";
|
||||
|
||||
|
||||
|
||||
|
||||
List<long> taskIdList = orderList.Select(x => x.id).ToList();
|
||||
if (taskIdList.Count > 0)
|
||||
{
|
||||
StringBuilder sbSubTask = new StringBuilder();
|
||||
|
||||
sbSubTask.Append("SELECT ");
|
||||
sbSubTask.Append("id, ");
|
||||
sbSubTask.Append("task_id, ");
|
||||
sbSubTask.Append("platform_code, ");
|
||||
sbSubTask.Append("shop_id, ");
|
||||
sbSubTask.Append("platform_object_id, ");
|
||||
sbSubTask.Append("object_id, ");
|
||||
sbSubTask.Append("platform_resp_code, ");
|
||||
sbSubTask.Append("platform_resp_msg, ");
|
||||
sbSubTask.Append("platform_resp_data, ");
|
||||
sbSubTask.Append("sys_msg, ");
|
||||
sbSubTask.Append("CAST(`status` AS SIGNED) AS `status`, ");
|
||||
sbSubTask.Append("audit_result, ");
|
||||
sbSubTask.Append("audit_reason, ");
|
||||
sbSubTask.Append("create_time, ");
|
||||
sbSubTask.Append("create_by, ");
|
||||
sbSubTask.Append("update_time, ");
|
||||
sbSubTask.Append("update_by ");
|
||||
sbSubTask.Append("FROM erp.o_user_operate_sub_task ");
|
||||
sbSubTask.Append("WHERE task_id IN (");
|
||||
|
||||
for (int i = 0; i < taskIdList.Count; i++)
|
||||
{
|
||||
if (i > 0)
|
||||
{
|
||||
sbSubTask.Append(", ");
|
||||
}
|
||||
sbSubTask.Append(taskIdList[i]);
|
||||
}
|
||||
sbSubTask.Append(") ");
|
||||
sbSubTask.Append("ORDER BY task_id, create_time DESC;");
|
||||
|
||||
DataTable subTaskDt = null;
|
||||
try
|
||||
{
|
||||
subTaskDt = mySql.ExecuteDataTable(sbSubTask.ToString());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return "{\"code\":500,\"msg\":\"" + ex.Message + "\",\"data\":[],\"count\":" + 0 + "}";
|
||||
}
|
||||
|
||||
// 按task_id分组存储子任务
|
||||
Dictionary<long, List<user_operate_sub_task_info>> subTaskDict = new Dictionary<long, List<user_operate_sub_task_info>>();
|
||||
|
||||
if (subTaskDt != null)
|
||||
{
|
||||
foreach (DataRow row in subTaskDt.Rows)
|
||||
{
|
||||
var subTask = new user_operate_sub_task_info
|
||||
{
|
||||
id = row["id"].ParseToLong(),
|
||||
task_id = row["task_id"].ParseToLong(),
|
||||
platform_code = row["platform_code"].ParseToNullableString(),
|
||||
shop_id = row["shop_id"].ParseToLong(),
|
||||
platform_object_id = row["platform_object_id"].ParseToNullableString(),
|
||||
object_id = row["object_id"].ParseToNullableString(),
|
||||
platform_resp_code = row["platform_resp_code"].ParseToNullableString(),
|
||||
platform_resp_msg = row["platform_resp_msg"].ParseToNullableString(),
|
||||
platform_resp_data = row["platform_resp_data"].ParseToNullableString(),
|
||||
sys_msg = row["sys_msg"].ParseToNullableString(),
|
||||
status = row["status"].ParseToInt(),
|
||||
audit_result = row["audit_result"].ParseToNullableInt(),
|
||||
audit_reason = row["audit_reason"].ParseToNullableString(),
|
||||
create_time = row["create_time"].ParseToString().ParseToDateTimeNullable(),
|
||||
create_by = row["create_by"].ParseToNullableString(),
|
||||
update_time = row["update_time"].ParseToString().ParseToDateTimeNullable(),
|
||||
update_by = row["update_by"].ParseToNullableString()
|
||||
};
|
||||
|
||||
long taskId = subTask.task_id;
|
||||
if (!subTaskDict.ContainsKey(taskId))
|
||||
{
|
||||
subTaskDict[taskId] = new List<user_operate_sub_task_info>();
|
||||
}
|
||||
subTaskDict[taskId].Add(subTask);
|
||||
}
|
||||
// 将子任务列表赋值给对应的主任务
|
||||
foreach (var task in orderList)
|
||||
{
|
||||
if (subTaskDict.ContainsKey(task.id))
|
||||
{
|
||||
task.sub_tasks = subTaskDict[task.id];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ---------- 3. 合并错误信息到主任务 ----------
|
||||
foreach (var task in orderList)
|
||||
{
|
||||
List<string> errorList = new List<string>();
|
||||
|
||||
// 主任务错误
|
||||
if (!string.IsNullOrEmpty(task.task_fail_reason))
|
||||
{
|
||||
errorList.Add(task.task_fail_reason);
|
||||
}
|
||||
|
||||
// 获取该任务的子任务列表
|
||||
if (subTaskDict.ContainsKey(task.id))
|
||||
{
|
||||
var subTasks = subTaskDict[task.id];
|
||||
|
||||
// 对于36类型,子任务可能有更详细的错误
|
||||
if (task.task_type == 36)
|
||||
{
|
||||
foreach (var subTask in subTasks)
|
||||
{
|
||||
// 子任务失败的错误信息
|
||||
if (subTask.status == 2 && !string.IsNullOrEmpty(subTask.sys_msg))
|
||||
{
|
||||
errorList.Add(subTask.sys_msg);
|
||||
}
|
||||
// 审核不通过的原因
|
||||
if (subTask.audit_result == 2 && !string.IsNullOrEmpty(subTask.audit_reason))
|
||||
{
|
||||
errorList.Add("审核不通过:" + subTask.audit_reason);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 25、31类型,如果主任务没有错误,但子任务有错误,也收集
|
||||
foreach (var subTask in subTasks)
|
||||
{
|
||||
if (subTask.status == 2 && !string.IsNullOrEmpty(subTask.sys_msg))
|
||||
{
|
||||
errorList.Add(subTask.sys_msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 合并错误信息(去重)
|
||||
task.task_fail_reason = errorList
|
||||
.Where(x => !string.IsNullOrEmpty(x))
|
||||
.Distinct()
|
||||
.ToList()
|
||||
.Count > 0 ? string.Join("; ", errorList.Distinct()) : null;
|
||||
}
|
||||
}
|
||||
|
||||
JsonSerializerSettings jsonSetting = new JsonSerializerSettings
|
||||
{
|
||||
NullValueHandling = NullValueHandling.Ignore,
|
||||
ContractResolver = new DefaultContractResolver
|
||||
{
|
||||
// 核心:设置命名策略为 SnakeCaseNamingStrategy
|
||||
// 这样序列化时,ProjectId 会变成 "project_id";
|
||||
// 反序列化时,"project_id" 也能正确映射回 ProjectId
|
||||
NamingStrategy = new SnakeCaseNamingStrategy()
|
||||
}
|
||||
};
|
||||
string jsonResult = JsonConvert.SerializeObject(new
|
||||
{
|
||||
code = 200,
|
||||
msg = "success",
|
||||
data = orderList,
|
||||
count = orderList.Count
|
||||
}, jsonSetting);
|
||||
return jsonResult;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
@@ -11,13 +12,13 @@ namespace KJD_Web.Model.WxModel
|
||||
public class user_operate_task_info
|
||||
{
|
||||
/// <summary>主键id</summary>
|
||||
public long id;
|
||||
[JsonIgnore] public long id;
|
||||
|
||||
/// <summary>任务类型,25:微信订单拉取任务</summary>
|
||||
public int? task_type;
|
||||
|
||||
/// <summary>任务描述,描述任务设置的相关规则</summary>
|
||||
public string task_describe;
|
||||
[JsonIgnore] public string task_describe;
|
||||
|
||||
/// <summary>平台编码</summary>
|
||||
public string task_platform_code;
|
||||
@@ -35,7 +36,7 @@ namespace KJD_Web.Model.WxModel
|
||||
public string shop_ids;
|
||||
public string shop_name;
|
||||
/// <summary>任务对象id列表,多个,分割</summary>
|
||||
public string object_ids;
|
||||
[JsonIgnore] public string object_ids;
|
||||
|
||||
/// <summary>子任务总数</summary>
|
||||
public int? sub_task_num;
|
||||
@@ -53,9 +54,11 @@ namespace KJD_Web.Model.WxModel
|
||||
public int status;
|
||||
|
||||
/// <summary>创建人</summary>
|
||||
[JsonIgnore]
|
||||
public string create_by;
|
||||
|
||||
/// <summary>更新人</summary>
|
||||
[JsonIgnore]
|
||||
public string update_by;
|
||||
|
||||
/// <summary>备注</summary>
|
||||
@@ -69,5 +72,62 @@ namespace KJD_Web.Model.WxModel
|
||||
|
||||
/// <summary>更新时间</summary>
|
||||
public DateTime? update_time;
|
||||
public List<user_operate_sub_task_info> sub_tasks;
|
||||
}
|
||||
|
||||
|
||||
public class user_operate_sub_task_info
|
||||
{
|
||||
/// <summary>子任务主键id</summary>
|
||||
[JsonIgnore] public long id;
|
||||
|
||||
/// <summary>主任务id,对应o_user_operate_task主键id</summary>
|
||||
[JsonIgnore]
|
||||
public long task_id;
|
||||
|
||||
/// <summary>平台编码。"淘宝天猫:TMALL","京东POP:JD-POP"),"京东自营:JD-VC","拼多多:PDD","抖店:DOUDIAN","微信小店:WEISHOP","其他渠道:OFFLINE</summary>
|
||||
public string platform_code;
|
||||
|
||||
/// <summary>门店id</summary>
|
||||
[JsonIgnore] public long shop_id;
|
||||
|
||||
/// <summary>平台任务对象id,对应平台商品id</summary>
|
||||
public string platform_object_id;
|
||||
|
||||
/// <summary>任务对象id。例如:商品上传中的商品id,同步订单的订单id</summary>
|
||||
public string object_id;
|
||||
|
||||
/// <summary>平台返回状态码</summary>
|
||||
[JsonIgnore] public string platform_resp_code;
|
||||
|
||||
/// <summary>平台返回信息</summary>
|
||||
[JsonIgnore] public string platform_resp_msg;
|
||||
|
||||
/// <summary>平台返回数据</summary>
|
||||
[JsonIgnore] public string platform_resp_data;
|
||||
|
||||
/// <summary>系统异常信息</summary>
|
||||
public string sys_msg;
|
||||
|
||||
/// <summary>子任务状态:0:待执行,1:成功,2:失败,3:人为终止</summary>
|
||||
public int status;
|
||||
|
||||
/// <summary>审核结果:2:审核不通过;3:审核通过</summary>
|
||||
[JsonIgnore] public int? audit_result;
|
||||
|
||||
/// <summary>审核不通过原因</summary>
|
||||
[JsonIgnore] public string audit_reason;
|
||||
|
||||
/// <summary>创建时间</summary>
|
||||
[JsonIgnore] public DateTime? create_time;
|
||||
|
||||
/// <summary>创建人</summary>
|
||||
[JsonIgnore] public string create_by;
|
||||
|
||||
/// <summary>更新时间</summary>
|
||||
public DateTime? update_time;
|
||||
|
||||
/// <summary>更新人</summary>
|
||||
[JsonIgnore] public string update_by;
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,14 @@
|
||||
using System;
|
||||
using NaiBa.Util.Helper;
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Runtime.Serialization.Formatters.Binary;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using NaiBa.Util.Helper;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace NaiBa.Util.Extension
|
||||
{
|
||||
@@ -102,22 +103,44 @@ namespace NaiBa.Util.Extension
|
||||
}
|
||||
}
|
||||
|
||||
public static int? ParseToNullableInt(this object str)
|
||||
{
|
||||
if (str == null)
|
||||
return null;
|
||||
public static int? ParseToNullableInt(this object str)
|
||||
{
|
||||
// 1. 快速判断:如果为 null 或 DBNull,直接返回
|
||||
if (str == null || str == DBNull.Value)
|
||||
return null;
|
||||
|
||||
try
|
||||
{
|
||||
return Convert.ToInt32(str);
|
||||
}
|
||||
catch
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
// 2. 尝试直接转换类型(处理 int, short, long 等)
|
||||
if (str is int intVal)
|
||||
return intVal;
|
||||
if (str is long longVal && longVal >= int.MinValue && longVal <= int.MaxValue)
|
||||
return (int)longVal;
|
||||
|
||||
public static int DecimalPointParseToInt(this object str)
|
||||
// 3. 针对字符串进行处理(支持空格、空字符串)
|
||||
if (str is string strVal)
|
||||
{
|
||||
// 如果字符串为 null 或空白,视为 null
|
||||
if (string.IsNullOrWhiteSpace(strVal))
|
||||
return null;
|
||||
|
||||
if (int.TryParse(strVal, NumberStyles.Integer, CultureInfo.InvariantCulture, out int result))
|
||||
return result;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
// 4. 其他类型(如 bool, DateTime)统一返回 null,保持严格
|
||||
try
|
||||
{
|
||||
return Convert.ToInt32(str);
|
||||
}
|
||||
catch
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static int DecimalPointParseToInt(this object str)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user