11
This commit is contained in:
parent
e1e5a82566
commit
38140986e4
195
Reportapi/MyCode.Project.Domain/Model/JackOrders.cs
Normal file
195
Reportapi/MyCode.Project.Domain/Model/JackOrders.cs
Normal file
@ -0,0 +1,195 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using SqlSugar;
|
||||
|
||||
namespace MyCode.Project.Domain.Model
|
||||
{
|
||||
///<summary>
|
||||
///
|
||||
///</summary>
|
||||
[SugarTable("JackOrders")]
|
||||
public partial class JackOrders
|
||||
{
|
||||
public JackOrders(){
|
||||
|
||||
|
||||
}
|
||||
/// <summary>
|
||||
/// Desc:
|
||||
/// Default:
|
||||
/// Nullable:False
|
||||
/// </summary>
|
||||
[SugarColumn(IsPrimaryKey=true,ColumnName="id")]
|
||||
public Guid Id {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:销售单id(吉客云内码)
|
||||
/// Default:
|
||||
/// Nullable:False
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName="tradeId")]
|
||||
public string TradeId {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:平台优惠
|
||||
/// Default:0
|
||||
/// Nullable:True
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName="couponFee")]
|
||||
public decimal? CouponFee {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:实付金额
|
||||
/// Default:0
|
||||
/// Nullable:True
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName="realFee")]
|
||||
public decimal? RealFee {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:店铺编码
|
||||
/// Default:
|
||||
/// Nullable:False
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName="shopCode")]
|
||||
public string ShopCode {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:发货单单号
|
||||
/// Default:
|
||||
/// Nullable:False
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName="orderNo")]
|
||||
public string OrderNo {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:订单编号
|
||||
/// Default:
|
||||
/// Nullable:False
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName="tradeNo")]
|
||||
public string TradeNo {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:是否删除(0:否;1:是)
|
||||
/// Default:0
|
||||
/// Nullable:True
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName="isDelete")]
|
||||
public int? IsDelete {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:
|
||||
/// Default:
|
||||
/// Nullable:True
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName="mainPostid")]
|
||||
public string MainPostid {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:
|
||||
/// Default:
|
||||
/// Nullable:True
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName="companyName")]
|
||||
public string CompanyName {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:标记名称
|
||||
/// Default:
|
||||
/// Nullable:True
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName="flagNames")]
|
||||
public string FlagNames {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:
|
||||
/// Default:
|
||||
/// Nullable:True
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName="shopName")]
|
||||
public string ShopName {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:
|
||||
/// Default:
|
||||
/// Nullable:True
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName="warehouseName")]
|
||||
public string WarehouseName {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:
|
||||
/// Default:
|
||||
/// Nullable:True
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName="warehouseCode")]
|
||||
public string WarehouseCode {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:
|
||||
/// Default:
|
||||
/// Nullable:True
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName="logisticName")]
|
||||
public string LogisticName {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:
|
||||
/// Default:
|
||||
/// Nullable:True
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName="tradeFrom")]
|
||||
public int? TradeFrom {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:
|
||||
/// Default:
|
||||
/// Nullable:True
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName="warehouseId")]
|
||||
public string WarehouseId {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:店铺id
|
||||
/// Default:
|
||||
/// Nullable:True
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName="shopId")]
|
||||
public long? ShopId {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:
|
||||
/// Default:
|
||||
/// Nullable:True
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName="shopTypeCode")]
|
||||
public string ShopTypeCode {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:
|
||||
/// Default:
|
||||
/// Nullable:True
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName="apiType")]
|
||||
public int? ApiType {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:
|
||||
/// Default:DateTime.Now
|
||||
/// Nullable:True
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName="createTime")]
|
||||
public DateTime? CreateTime {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:
|
||||
/// Default:DateTime.Now
|
||||
/// Nullable:True
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName="updateTime")]
|
||||
public DateTime? UpdateTime {get;set;}
|
||||
|
||||
}
|
||||
}
|
||||
@ -6,110 +6,127 @@ using SqlSugar;
|
||||
namespace MyCode.Project.Domain.Model
|
||||
{
|
||||
///<summary>
|
||||
///
|
||||
///工作调度
|
||||
///</summary>
|
||||
[SugarTable("sys_workprocess")]
|
||||
public partial class SysWorkprocess
|
||||
[SugarTable("SysWorkProcess")]
|
||||
public partial class SysWorkProcess
|
||||
{
|
||||
public SysWorkprocess(){
|
||||
public SysWorkProcess(){
|
||||
|
||||
|
||||
}
|
||||
/// <summary>
|
||||
/// Desc:主键
|
||||
/// Desc:ID
|
||||
/// Default:
|
||||
/// Nullable:False
|
||||
/// </summary>
|
||||
[SugarColumn(IsPrimaryKey=true,ColumnName="id")]
|
||||
public long Id {get;set;}
|
||||
[SugarColumn(IsPrimaryKey=true)]
|
||||
public Guid ID {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:路径
|
||||
/// Desc:对应的商家。
|
||||
/// Default:
|
||||
/// Nullable:False
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName="type_path")]
|
||||
public string TypePath {get;set;}
|
||||
public Guid MerchantID {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:最后修改时间
|
||||
/// Desc:执行类型。1=类对象,2=存储过程
|
||||
/// Default:
|
||||
/// Nullable:False
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName="edit_time")]
|
||||
public DateTime EditTime {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:数字越小,优先级越高
|
||||
/// Default:0
|
||||
/// Nullable:False
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName="priority")]
|
||||
public int Priority {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:类型1:函数
|
||||
/// Default:
|
||||
/// Nullable:False
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName="func_type")]
|
||||
public int FuncType {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:异常信息
|
||||
/// Default:NULL
|
||||
/// Nullable:True
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName="exception_info")]
|
||||
public string ExceptionInfo {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:备注信息
|
||||
/// Default:NULL
|
||||
/// Nullable:True
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName="remark")]
|
||||
public string Remark {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:执行情况,0:等待执行 1:执行中 9:执行成功 2:执行失败
|
||||
/// Desc:执行的类
|
||||
/// Default:
|
||||
/// Nullable:False
|
||||
/// Nullable:True
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName="status")]
|
||||
public int Status {get;set;}
|
||||
public string FuncClass {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:执行的模块
|
||||
/// Default:
|
||||
/// Nullable:True
|
||||
/// </summary>
|
||||
public string FuncMethod {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:参数信息
|
||||
/// Default:NULL
|
||||
/// Default:
|
||||
/// Nullable:True
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName="parameter_info")]
|
||||
public string ParameterInfo {get;set;}
|
||||
public string ParamInfo {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:方法名
|
||||
/// Desc:执行时间
|
||||
/// Default:
|
||||
/// Nullable:True
|
||||
/// </summary>
|
||||
public DateTime? ExecuteTime {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:重试次数
|
||||
/// Default:
|
||||
/// Nullable:False
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName="method_name")]
|
||||
public string MethodName {get;set;}
|
||||
public int RetryCount {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:公司ID
|
||||
/// Desc:异常信息
|
||||
/// Default:
|
||||
/// Nullable:True
|
||||
/// </summary>
|
||||
public string ExceptionInfo {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:执行状态。0=等待,1=执行,2=异常暂停,3=执行完成
|
||||
/// Default:
|
||||
/// Nullable:False
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName="company_id")]
|
||||
public long CompanyId {get;set;}
|
||||
public int FuncStatus {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:创建人
|
||||
/// Default:
|
||||
/// Nullable:False
|
||||
/// </summary>
|
||||
public string Creater {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:创建时间
|
||||
/// Default:NULL
|
||||
/// Default:
|
||||
/// Nullable:False
|
||||
/// </summary>
|
||||
public DateTime CreateTime {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:编辑人
|
||||
/// Default:
|
||||
/// Nullable:False
|
||||
/// </summary>
|
||||
public string Editor {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:编辑时间
|
||||
/// Default:
|
||||
/// Nullable:False
|
||||
/// </summary>
|
||||
public DateTime EditTime {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:备注
|
||||
/// Default:
|
||||
/// Nullable:True
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName="create_time")]
|
||||
public DateTime? CreateTime {get;set;}
|
||||
public string Remark {get;set;}
|
||||
|
||||
/// <summary>
|
||||
/// Desc:数字越小,优先级越高
|
||||
/// Default:5
|
||||
/// Nullable:True
|
||||
/// </summary>
|
||||
public int? Priority {get;set;}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -77,13 +77,13 @@
|
||||
<Compile Include="Message\Response\WebSocket\ConnUser`.cs" />
|
||||
<Compile Include="Message\Response\WorkProcess\WorkProcessResp.cs" />
|
||||
<Compile Include="Model\ApiLog.cs" />
|
||||
<Compile Include="Model\JackOrders.cs" />
|
||||
<Compile Include="Model\SysWorkprocess.cs" />
|
||||
<Compile Include="Model\SysWorkprocessHistory.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Repositories\IApiLogRepository.cs" />
|
||||
<Compile Include="Repositories\IJackOrdersRepository.cs" />
|
||||
<Compile Include="Repositories\IRepository.cs" />
|
||||
<Compile Include="Repositories\IRepository`.cs" />
|
||||
<Compile Include="Repositories\ISysWorkprocessHistoryRepository.cs" />
|
||||
<Compile Include="Repositories\ISysWorkprocessRepository.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
||||
@ -0,0 +1,18 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using MyCode.Project.Infrastructure;
|
||||
using MyCode.Project.Domain;
|
||||
using MyCode.Project.Domain.Model;
|
||||
using MyCode.Project.Infrastructure.Common;
|
||||
using MyCode.Project.Domain.Message;
|
||||
|
||||
namespace MyCode.Project.Domain.Repositories
|
||||
{
|
||||
public interface IJackOrdersRepository : IRepository<JackOrders>
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
@ -8,11 +8,21 @@ using MyCode.Project.Domain;
|
||||
using MyCode.Project.Domain.Model;
|
||||
using MyCode.Project.Infrastructure.Common;
|
||||
using MyCode.Project.Domain.Message;
|
||||
using MyCode.Project.Infrastructure.Enumeration;
|
||||
|
||||
namespace MyCode.Project.Domain.Repositories
|
||||
{
|
||||
public interface ISysWorkprocessRepository : IRepository<SysWorkprocess>
|
||||
public interface ISysWorkProcessRepository : IRepository<SysWorkProcess>
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// 是否存在调度
|
||||
/// </summary>
|
||||
/// <param name="funcType">执行类型</param>
|
||||
/// <param name="merchantId">商家ID</param>
|
||||
/// <param name="funcClass">执行类</param>
|
||||
/// <param name="funcMethod">执行方法名</param>
|
||||
/// <param name="paramInfo">参数信息</param>
|
||||
/// <returns></returns>
|
||||
bool Exists(FuncType funcType, Guid merchantId, string funcClass, string funcMethod, string paramInfo);
|
||||
}
|
||||
}
|
||||
|
||||
@ -10,8 +10,8 @@
|
||||
|
||||
<connectionStrings>
|
||||
|
||||
<add name="WMSConn" connectionString="Data Source=127.0.0.1; Initial Catalog=xietong; User ID=sa;Password=1; Connect Timeout=120; MultipleActiveResultSets=True;App=JiKeYun2" providerName="System.Data.SqlClient" />
|
||||
<add name="YunTongConn" connectionString="Data Source=127.0.0.1; Initial Catalog=xietong; User ID=sa;Password=1; Connect Timeout=120; MultipleActiveResultSets=True;App=JiKeYun1" providerName="System.Data.SqlClient" />
|
||||
<add name="WMSConn" connectionString="Data Source=127.0.0.1; Initial Catalog=YunTong; User ID=sa;Password=1; Connect Timeout=120; MultipleActiveResultSets=True;App=JiKeYun2" providerName="System.Data.SqlClient" />
|
||||
<add name="YunTongConn" connectionString="Data Source=127.0.0.1; Initial Catalog=YunTong; User ID=sa;Password=1; Connect Timeout=120; MultipleActiveResultSets=True;App=JiKeYun1" providerName="System.Data.SqlClient" />
|
||||
|
||||
|
||||
</connectionStrings>
|
||||
|
||||
@ -0,0 +1,39 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace MyCode.Project.Infrastructure.Enumeration
|
||||
{
|
||||
/// <summary>
|
||||
/// 执行状态
|
||||
/// </summary>
|
||||
public enum FuncStatus
|
||||
{
|
||||
/// <summary>
|
||||
/// 等待
|
||||
/// </summary>
|
||||
Waiting = 0,
|
||||
/// <summary>
|
||||
/// 运行中
|
||||
/// </summary>
|
||||
Running = 1,
|
||||
/// <summary>
|
||||
/// 暂停
|
||||
/// </summary>
|
||||
Pause = 2,
|
||||
/// <summary>
|
||||
/// 停止
|
||||
/// </summary>
|
||||
Stop = 3,
|
||||
/// <summary>
|
||||
/// 异常停止
|
||||
/// </summary>
|
||||
ExceptionStop = 4,
|
||||
/// <summary>
|
||||
/// 完成
|
||||
/// </summary>
|
||||
Complete = 5
|
||||
}
|
||||
}
|
||||
@ -10,9 +10,12 @@ namespace MyCode.Project.Infrastructure.Enumeration
|
||||
public enum FuncType
|
||||
{
|
||||
/// <summary>
|
||||
/// 方法非存储过程
|
||||
/// 类方法
|
||||
/// </summary>
|
||||
[Description("方法")]
|
||||
Function = 1
|
||||
Method = 1,
|
||||
/// <summary>
|
||||
/// 存储过程
|
||||
/// </summary>
|
||||
Proc = 2
|
||||
}
|
||||
}
|
||||
|
||||
@ -9,17 +9,30 @@ namespace MyCode.Project.Infrastructure.Enumeration
|
||||
{
|
||||
public enum WorkProcessStatus
|
||||
{
|
||||
[Description("初始化")]
|
||||
Init = 0,
|
||||
|
||||
[Description("执行中")]
|
||||
/// <summary>
|
||||
/// 等待
|
||||
/// </summary>
|
||||
Waiting = 0,
|
||||
/// <summary>
|
||||
/// 运行中
|
||||
/// </summary>
|
||||
Running = 1,
|
||||
|
||||
[Description("执行完成")]
|
||||
Finished = 9,
|
||||
|
||||
[Description("因错暂停")]
|
||||
Stop = 2
|
||||
/// <summary>
|
||||
/// 暂停
|
||||
/// </summary>
|
||||
Pause = 2,
|
||||
/// <summary>
|
||||
/// 停止
|
||||
/// </summary>
|
||||
Stop = 3,
|
||||
/// <summary>
|
||||
/// 异常停止
|
||||
/// </summary>
|
||||
ExceptionStop = 4,
|
||||
/// <summary>
|
||||
/// 完成
|
||||
/// </summary>
|
||||
Complete = 5
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -0,0 +1,247 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace MyCode.Project.Infrastructure.JackYun
|
||||
{
|
||||
|
||||
public class GoodsDetailItem
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string goodsNo { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string specId { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public decimal shareOrderPlatDiscountFee { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string goodsId { get; set; }
|
||||
/// <summary>
|
||||
/// 订单标价总金额
|
||||
/// </summary>
|
||||
public decimal sellTotal { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public int needProcessCount { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public decimal shareOrderDiscountFee { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string subTradeId { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public int goodsPlatDiscountFee { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public int baseUnitSellCount { get; set; }
|
||||
/// <summary>
|
||||
/// 数量
|
||||
/// </summary>
|
||||
public int sellCount { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string outerId { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public decimal isFit { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public decimal taxFee { get; set; }
|
||||
/// <summary>
|
||||
/// 实付金额
|
||||
/// </summary>
|
||||
public decimal divideSellTotal { get; set; }
|
||||
/// <summary>
|
||||
/// 条码,用这个匹配金蝶物料编码
|
||||
/// </summary>
|
||||
public string barcode { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public int apiType { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string tradeId { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string skuImgUrl { get; set; }
|
||||
}
|
||||
|
||||
public class TradesItem
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public int couponFee { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public int realFee { get; set; }
|
||||
/// <summary>
|
||||
/// 店铺编码
|
||||
/// </summary>
|
||||
public string shopCode { get; set; }
|
||||
/// <summary>
|
||||
/// 发货单单号
|
||||
/// </summary>
|
||||
public string orderNo { get; set; }
|
||||
/// <summary>
|
||||
/// 订单编号
|
||||
/// </summary>
|
||||
public string tradeNo { get; set; }
|
||||
/// <summary>
|
||||
/// 是否删除(0:否;1:是)
|
||||
/// </summary>
|
||||
public int isDelete { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string mainPostid { get; set; }
|
||||
/// <summary>
|
||||
/// 组合装子件列表
|
||||
/// </summary>
|
||||
public List<string> tradeOrderAssemblyGoodsDtoList { get; set; }
|
||||
/// <summary>
|
||||
/// 珠海市臻美服饰有限公司
|
||||
/// </summary>
|
||||
public string companyName { get; set; }
|
||||
/// <summary>
|
||||
/// 物流上传成功,退款成功
|
||||
/// </summary>
|
||||
public string flagNames { get; set; }
|
||||
/// <summary>
|
||||
/// 棉花树童装店
|
||||
/// </summary>
|
||||
public string shopName { get; set; }
|
||||
/// <summary>
|
||||
/// 欣悦电商发货仓
|
||||
/// </summary>
|
||||
public string warehouseName { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string warehouseCode { get; set; }
|
||||
/// <summary>
|
||||
/// 韵达快递
|
||||
/// </summary>
|
||||
public string logisticName { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public int tradeFrom { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string warehouseId { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public int id { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string shopId { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string shopTypeCode { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public int apiType { get; set; }
|
||||
/// <summary>
|
||||
/// 货品详情
|
||||
/// </summary>
|
||||
public List<GoodsDetailItem> goodsDetail { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string tradeId { get; set; }
|
||||
}
|
||||
|
||||
public class TradeFullinfogetData
|
||||
{
|
||||
/// <summary>
|
||||
/// 总数结果(仅当hasTotal为1时返回,要求翻页过程中不取总数)
|
||||
/// </summary>
|
||||
public int totalResults { get; set; }
|
||||
/// <summary>
|
||||
/// 销售单
|
||||
/// </summary>
|
||||
public List<TradesItem> trades { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 游标id。用于下次请求入参
|
||||
/// </summary>
|
||||
public string scrollId { get; set; }
|
||||
}
|
||||
|
||||
public class TradeFullinfogetResp
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string contextId { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public TradeFullinfogetData data { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public List<string> desensitizationItem { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string handlerInfo { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string noPrivilegeItem { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string pageInfo { get; set; }
|
||||
}
|
||||
|
||||
//public class TradeFullinfogetResp
|
||||
//{
|
||||
// /// <summary>
|
||||
// ///
|
||||
// /// </summary>
|
||||
// public string code { get; set; }
|
||||
// /// <summary>
|
||||
// ///
|
||||
// /// </summary>
|
||||
// public string subCode { get; set; }
|
||||
// /// <summary>
|
||||
// ///
|
||||
// /// </summary>
|
||||
// public string msg { get; set; }
|
||||
// /// <summary>
|
||||
// ///
|
||||
// /// </summary>
|
||||
// public Result result { get; set; }
|
||||
//}
|
||||
|
||||
}
|
||||
@ -232,6 +232,7 @@
|
||||
<Compile Include="Constant\BfyConst.cs" />
|
||||
<Compile Include="Constant\Const.cs" />
|
||||
<Compile Include="Enumeration\ApiEnum.cs" />
|
||||
<Compile Include="Enumeration\FuncStatus.cs" />
|
||||
<Compile Include="Enumeration\LoginRoleType.cs" />
|
||||
<Compile Include="Enumeration\ReportType.cs" />
|
||||
<Compile Include="Enumeration\SystemType.cs" />
|
||||
@ -266,6 +267,7 @@
|
||||
<Compile Include="Imports\ImportSplitProperty.cs" />
|
||||
<Compile Include="JackYun\EnumAttribute.cs" />
|
||||
<Compile Include="JackYun\JackyunResponse.cs" />
|
||||
<Compile Include="JackYun\TradeFullinfogetResp.cs" />
|
||||
<Compile Include="PayModels\ExtendedGateway.cs" />
|
||||
<Compile Include="PayModels\FuiouBarcodepay.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
|
||||
@ -0,0 +1,26 @@
|
||||
using MyCode.Project.Repositories.Common;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using MyCode.Project.Domain.Message;
|
||||
using MyCode.Project.Domain.Model;
|
||||
using MyCode.Project.Domain.Repositories;
|
||||
using MyCode.Project.Infrastructure.Common;
|
||||
using MyCode.Project.Infrastructure.Search;
|
||||
|
||||
namespace MyCode.Project.Repositories
|
||||
{
|
||||
public class JackOrdersRepository: Repository<JackOrders>, IJackOrdersRepository
|
||||
{
|
||||
public JackOrdersRepository(MyCodeSqlSugarClient context) : base(context)
|
||||
{ }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@ -86,10 +86,10 @@
|
||||
<Compile Include="Common\Repository`.cs" />
|
||||
<Compile Include="Common\TransactionCallHandler.cs" />
|
||||
<Compile Include="Common\TransactionCallHandlerAttribute.cs" />
|
||||
<Compile Include="JackOrdersRepository.cs" />
|
||||
<Compile Include="Lxm\LxmReportRepository.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Common\Repository.cs" />
|
||||
<Compile Include="SysWorkprocessHistoryRepository.cs" />
|
||||
<Compile Include="SysWorkprocessRepository.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
||||
@ -8,17 +8,43 @@ using MyCode.Project.Domain.Model;
|
||||
using MyCode.Project.Domain.Repositories;
|
||||
using MyCode.Project.Infrastructure.Common;
|
||||
using MyCode.Project.Infrastructure.Search;
|
||||
using MyCode.Project.Infrastructure.Enumeration;
|
||||
using MyCode.Project.Infrastructure.Extensions;
|
||||
|
||||
namespace MyCode.Project.Repositories
|
||||
{
|
||||
public class SysWorkprocessRepository: Repository<SysWorkprocess>, ISysWorkprocessRepository
|
||||
public class SysWorkProcessRepository: Repository<SysWorkProcess>, ISysWorkProcessRepository
|
||||
{
|
||||
public SysWorkprocessRepository(MyCodeSqlSugarClient context) : base(context)
|
||||
public SysWorkProcessRepository(MyCodeSqlSugarClient context) : base(context)
|
||||
{ }
|
||||
|
||||
|
||||
|
||||
|
||||
#region Exists(是否存在调度)
|
||||
/// <summary>
|
||||
/// 是否存在调度
|
||||
/// </summary>
|
||||
/// <param name="funcType">执行类型</param>
|
||||
/// <param name="merchantId">商家ID</param>
|
||||
/// <param name="funcClass">执行类</param>
|
||||
/// <param name="funcMethod">执行方法名</param>
|
||||
/// <param name="paramInfo">参数信息</param>
|
||||
/// <returns></returns>
|
||||
public bool Exists(FuncType funcType, Guid merchantId, string funcClass, string funcMethod, string paramInfo)
|
||||
{
|
||||
var sql = @"select COUNT(1) from SysWorkProcess with(nolock)";
|
||||
SearchCondition where = new SearchCondition();
|
||||
where.AddCondition("MerchantID", merchantId, SqlOperator.Equal, true)
|
||||
.AddCondition("FuncType", funcType.Value(), SqlOperator.Equal, true)
|
||||
.AddCondition("FuncClass", funcClass, SqlOperator.Equal, true)
|
||||
.AddCondition("FuncMethod", funcMethod, SqlOperator.Equal, true)
|
||||
.AddCondition("ParamInfo", paramInfo, SqlOperator.Equal, true)
|
||||
.AddSqlCondition($@" FuncStatus = {FuncStatus.Running.Value()} or FuncStatus={FuncStatus.ExceptionStop.Value()} ", true);
|
||||
var result = this.SelectFirst<int>(sql, where);
|
||||
return result > 0;
|
||||
}
|
||||
|
||||
}
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
@ -11,24 +11,44 @@ namespace MyCode.Project.Services
|
||||
public interface IWorkProcessService
|
||||
{
|
||||
/// <summary>
|
||||
/// 批量添加
|
||||
/// 添加调度任务
|
||||
/// </summary>
|
||||
/// <param name="workProcess"></param>
|
||||
void Add(List<SysWorkprocess> workProcess);
|
||||
/// <typeparam name="T">执行类</typeparam>
|
||||
/// <param name="merchantId">商家ID</param>
|
||||
/// <param name="methodName">方法名</param>
|
||||
/// <param name="remark">备注</param>
|
||||
/// <param name="entity">参数信息</param>
|
||||
/// <param name="funcType">执行类型</param>
|
||||
void Add<T>(Guid merchantId, string methodName, string remark = "", object entity = null, int priority = 5, FuncType funcType = FuncType.Method) where T : class;
|
||||
|
||||
/// <summary>
|
||||
/// 清空历史数据
|
||||
/// 添加调度任务
|
||||
/// </summary>
|
||||
/// <param name="process"></param>
|
||||
//void ExecuteSingle(Guid processId);
|
||||
void ClearHistoryTask();
|
||||
/// <param name="merchantId">商家ID</param>
|
||||
/// <param name="type">执行类</param>
|
||||
/// <param name="methodName">方法名</param>
|
||||
/// <param name="remark">备注</param>
|
||||
/// <param name="entity">参数信息</param>
|
||||
/// <param name="funcType">执行类型</param>
|
||||
void Add(Guid merchantId, Type type, string methodName, string remark = "", object entity = null,
|
||||
FuncType funcType = FuncType.Method, int priority = 5);
|
||||
|
||||
List<SysWorkprocess> SelectInitWorkProcess(int top);
|
||||
/// <summary>
|
||||
/// 添加调度任务
|
||||
/// </summary>
|
||||
/// <param name="merchantId">商家ID</param>
|
||||
/// <param name="typePath">类型路径,如:Lxm.IServices.IWorkProcessService, Lxm.Services</param>
|
||||
/// <param name="methodName">方法名</param>
|
||||
/// <param name="remark">备注</param>
|
||||
/// <param name="paramInfo">参数信息</param>
|
||||
/// <param name="funcType">执行类型</param>
|
||||
void Add(Guid merchantId, string typePath, string methodName, string remark = "", string paramInfo = "",
|
||||
FuncType funcType = FuncType.Method, int priority = 5);
|
||||
|
||||
/// <summary>
|
||||
/// 执行,每次执行10条数据
|
||||
/// </summary>
|
||||
void Execute();
|
||||
void Execute();
|
||||
|
||||
/// <summary>
|
||||
/// 重启失败调度
|
||||
@ -39,32 +59,26 @@ namespace MyCode.Project.Services
|
||||
/// 重新启用某个暂停了的调度
|
||||
/// </summary>
|
||||
/// <param name="workprocessId"></param>
|
||||
void RestartStopProcess(long workprocessId);
|
||||
void RestartStopProcess(Guid workprocessId);
|
||||
|
||||
/// <summary>
|
||||
/// 添加调度
|
||||
/// 调度执行优先级比较低的任务
|
||||
/// </summary>
|
||||
/// <typeparam name="T">命名空间类</typeparam>
|
||||
/// <param name="methodName">执行方法</param>
|
||||
/// <param name="remark">备注</param>
|
||||
/// <param name="entity">传参</param>
|
||||
/// <param name="funcType">默认为函数</param>
|
||||
void Add<T>(string methodName,long companyId,object entity = null, string remark = "", FuncType funcType = FuncType.Function, Priority priority = Priority.Low);
|
||||
void ExecuteOther();
|
||||
|
||||
/// <summary>
|
||||
/// 取得进程
|
||||
/// 调度执行优先级等于2的任务
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="methodName"></param>
|
||||
/// <param name="entity"></param>
|
||||
/// <param name="funcType"></param>
|
||||
/// <param name="priority"></param>
|
||||
/// <returns></returns>
|
||||
void AddQueue<T>(string methodName, long companyId, object entity = null, FuncType funcType = FuncType.Function, Priority priority = Priority.Low);
|
||||
void ExecutePriority2Work();
|
||||
|
||||
/// <summary>
|
||||
/// 进程执行超时
|
||||
/// 调度执行优先级=6的任务
|
||||
/// </summary>
|
||||
void ProcessHandleExpire();
|
||||
void ExecutePriority6();
|
||||
|
||||
/// <summary>
|
||||
/// 重试失败的任务
|
||||
/// </summary>
|
||||
void RetryTask();
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,6 +3,7 @@ using MyCode.Project.Infrastructure.Common;
|
||||
using MyCode.Project.Infrastructure.Enumeration;
|
||||
using MyCode.Project.Infrastructure.JackYun;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace MyCode.Project.Services.Implementation
|
||||
{
|
||||
@ -49,20 +50,20 @@ namespace MyCode.Project.Services.Implementation
|
||||
OrderTradeFullInfoGetRequestBizData requestBizData = new OrderTradeFullInfoGetRequestBizData();
|
||||
string value = "2025-06-15 00:00:00";// DateTime.Now.Date.AddDays(-5).ToString("yyyy-MM-dd HH:mm:ss") ;
|
||||
string value1 = "2025-06-20 00:00:00";//DateTime.Now.Date.ToString("yyyy-MM-dd HH:mm:ss");
|
||||
requestBizData.StartModified = null;// DateTime.ParseExact(value, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
|
||||
requestBizData.StartModified = "";// DateTime.ParseExact(value, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
|
||||
|
||||
requestBizData.EndModified = null;// DateTime.ParseExact(value1, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
|
||||
requestBizData.EndModified = ""; //DateTime.ParseExact(value1, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
|
||||
requestBizData.TradeNo = "";
|
||||
requestBizData.HasTotal = total;
|
||||
requestBizData.PageSize = 50;
|
||||
requestBizData.PageSize = 200;
|
||||
requestBizData.PageIndex = 0;
|
||||
requestBizData.Fields = "tradeNo,orderNo";
|
||||
requestBizData.Fields = "goodsDetail.barcode,tradeNo,orderNo,shopName,companyName,warehouseName,logisticName,mainPostid,goodsDetail.goodsNo,flagNames,columnExt,sourceAfterNo,goodsDetail.outerId,pickUpCode,expense.expenseFee,expense.expenseItemName,billDate,goodsPlatDiscountFee,goodsDetail.shareOrderDiscountFee,goodsDetail.shareOrderPlatDiscountFee,customizeGoodsColumn9,goodsDetail.goodsId,goodsDetail.sellCount,goodsDetail.needProcessCount,goodsDetail.baseUnitSellCount,goodsDetail.assessmentCost,goodsDetail.compassSourceContentTypem,sourceTradeNo,shopId,warehouseId,scrollId";
|
||||
requestBizData.StartCreated = "";// DateTime.ParseExact(value, "yyyy -MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
|
||||
requestBizData.EndCreated = "";// DateTime.ParseExact(value1, "yyyy -MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
|
||||
requestBizData.StartAuditTime = "";// DateTime.ParseExact(value, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
|
||||
requestBizData.EndAuditTime = "";// DateTime.ParseExact(value1, "yyyy -MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
|
||||
requestBizData.StartConsignTime = value;// DateTime.ParseExact(value, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
|
||||
requestBizData.EndConsignTime = value1;// DateTime.ParseExact(value1, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
|
||||
requestBizData.StartConsignTime = value;// value;// DateTime.ParseExact(value, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
|
||||
requestBizData.EndConsignTime = value1;// value1;// DateTime.ParseExact(value1, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
|
||||
//requestBizData.TradeStatus = 1010;
|
||||
//requestBizData.TradeType = 1;
|
||||
requestBizData.SourceTradeNos = "";
|
||||
@ -70,12 +71,39 @@ namespace MyCode.Project.Services.Implementation
|
||||
string lggl = JsonHelper.ToJson(requestBizData);
|
||||
LogHelper.Info(lggl);
|
||||
JackyunResponse response = Call(EnumAttribute.GetAttribute(ApiEnum.TRADEFULLINFOGET).Value, "1.0", requestBizData);
|
||||
//Console.Out.WriteLine("订单查询接口响应信息=" + JsonHelper.ToJson(response));
|
||||
string ll= JsonHelper.ToJson(response);
|
||||
string ll = JsonHelper.ToJson(response);
|
||||
LogHelper.Info(ll);
|
||||
List<TradesItem> trades = new List<TradesItem>();
|
||||
if (response.code == "200")
|
||||
{
|
||||
var orderjson= JsonHelper.ToJson(response.result);
|
||||
var list1 = JsonHelper.ToObject<TradeFullinfogetResp>(orderjson);
|
||||
int pageIndex = 1;
|
||||
while (list1.data.trades !=null && list1.data.trades.Count>0)
|
||||
{
|
||||
|
||||
trades.AddRange(list1.data.trades);
|
||||
requestBizData.PageIndex = pageIndex;
|
||||
pageIndex++;
|
||||
response = Call(EnumAttribute.GetAttribute(ApiEnum.TRADEFULLINFOGET).Value, "1.0", requestBizData);
|
||||
if (response.code == "200")
|
||||
{
|
||||
orderjson = JsonHelper.ToJson(response.result);
|
||||
list1 = JsonHelper.ToObject<TradeFullinfogetResp>(orderjson);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (trades.Count > 0)
|
||||
SetOrder(trades);
|
||||
return ll;
|
||||
}
|
||||
|
||||
#endregion
|
||||
public void SetOrder(List<TradesItem> trades)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -20,118 +20,165 @@ namespace MyCode.Project.Services.Implementation
|
||||
{
|
||||
public class WorkProcessService : ServiceBase, IWorkProcessService
|
||||
{
|
||||
#region 初始化
|
||||
private readonly ISysWorkprocessRepository _sysWorkprocessRepository;
|
||||
private readonly ISysWorkprocessHistoryRepository _sysWorkprocessHistoryRepository;
|
||||
private ISysWorkProcessRepository _SysWorkProcessRepository;
|
||||
|
||||
public WorkProcessService(ISysWorkprocessRepository sysWorkprocessRepository,
|
||||
ISysWorkprocessHistoryRepository sysWorkprocessHistoryRepository)
|
||||
private static object locker = new object(); //创建锁
|
||||
public WorkProcessService(ISysWorkProcessRepository SysWorkProcessRepository)
|
||||
{
|
||||
_sysWorkprocessRepository = sysWorkprocessRepository;
|
||||
_sysWorkprocessHistoryRepository = sysWorkprocessHistoryRepository;
|
||||
_SysWorkProcessRepository = SysWorkProcessRepository;
|
||||
}
|
||||
|
||||
|
||||
#region Add(添加调度)
|
||||
/// <summary>
|
||||
/// 添加调度
|
||||
/// </summary>
|
||||
/// <typeparam name="T">执行类</typeparam>
|
||||
/// <param name="merchantId">商家ID</param>
|
||||
/// <param name="methodName">方法名</param>
|
||||
/// <param name="remark">备注</param>
|
||||
/// <param name="entity">参数信息</param>
|
||||
/// <param name="funcType">执行类型</param>
|
||||
public void Add<T>(Guid merchantId, string methodName, string remark = "", object entity = null, int priority = 5, FuncType funcType = FuncType.Method) where T : class
|
||||
{
|
||||
Add(merchantId, typeof(T), methodName, remark, entity, funcType, priority);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加调度
|
||||
/// </summary>
|
||||
/// <param name="merchantId">商家ID</param>
|
||||
/// <param name="type">执行类</param>
|
||||
/// <param name="methodName">方法名</param>
|
||||
/// <param name="remark">备注</param>
|
||||
/// <param name="entity">参数信息</param>
|
||||
/// <param name="funcType">执行类型</param>
|
||||
public void Add(Guid merchantId, Type type, string methodName, string remark = "", object entity = null, FuncType funcType = FuncType.Method, int priority = 5)
|
||||
{
|
||||
string typePath = string.Format("{0}, {1}", type.FullName, type.Assembly.GetName().Name);
|
||||
string paramInfo = entity == null
|
||||
? ""
|
||||
: entity is string || entity is Guid || entity is int || entity is long || entity is decimal ||
|
||||
entity is float || entity is double
|
||||
? entity.SafeString()
|
||||
: JsonHelper.ToJson(entity);
|
||||
Add(merchantId, typePath, methodName, remark, paramInfo, funcType, priority);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加调度任务
|
||||
/// </summary>
|
||||
/// <param name="merchantId">商家ID</param>
|
||||
/// <param name="typePath">类型路径,如:Lxm.IServices.IWorkProcessService, Lxm.Services</param>
|
||||
/// <param name="methodName">方法名</param>
|
||||
/// <param name="remark">备注</param>
|
||||
/// <param name="paramInfo">参数信息</param>
|
||||
/// <param name="funcType">执行类型</param>
|
||||
public void Add(Guid merchantId, string typePath, string methodName, string remark = "", string paramInfo = "",
|
||||
FuncType funcType = FuncType.Method, int priority = 5)
|
||||
{
|
||||
if (this._SysWorkProcessRepository.Exists(funcType, merchantId, typePath, methodName, paramInfo) && methodName != "RunWechatVSKingDee")
|
||||
{
|
||||
return;
|
||||
}
|
||||
SysWorkProcess entity = new SysWorkProcess();
|
||||
entity.ID = Guid.NewGuid();
|
||||
entity.MerchantID = merchantId;
|
||||
entity.FuncType = funcType.Value();
|
||||
entity.FuncClass = typePath;
|
||||
entity.FuncMethod = methodName;
|
||||
entity.ParamInfo = paramInfo;
|
||||
entity.FuncStatus = FuncStatus.Waiting.Value();
|
||||
entity.Remark = remark;
|
||||
entity.RetryCount = 0;
|
||||
entity.Creater = "系统调度";
|
||||
entity.CreateTime = DateTime.Now;
|
||||
entity.Editor = "系统调度";
|
||||
entity.EditTime = DateTime.Now;
|
||||
entity.Priority = priority;
|
||||
this._SysWorkProcessRepository.Add(entity);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
#region SelectInitWorkProcess(返回前几十条数据)
|
||||
public List<SysWorkprocess> SelectInitWorkProcess(int top)
|
||||
public List<SysWorkProcess> SelectInitWorkProcess(int top)
|
||||
{
|
||||
var result = _sysWorkprocessRepository.Queryable()
|
||||
.Where(p => p.Status == (int)WorkProcessStatus.Init)
|
||||
|
||||
return _SysWorkProcessRepository.Queryable()
|
||||
.Where(p => p.FuncStatus == (int)WorkProcessStatus.Waiting && (p.Priority == 1 || p.Priority == null))
|
||||
.Take(top)
|
||||
.OrderBy(p => p.Priority)
|
||||
.OrderBy(p => p.EditTime).ToList();
|
||||
|
||||
return result;
|
||||
.OrderBy(p => p.CreateTime).ToList();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Add(批量添加)
|
||||
public void Add(List<SysWorkprocess> workProcess)
|
||||
public void Add(List<SysWorkProcess> workProcess)
|
||||
{
|
||||
_sysWorkprocessRepository.Add(workProcess);
|
||||
_SysWorkProcessRepository.Add(workProcess);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region RestratStopProcess(重新启用所有暂停了的调度,这里不需要事务,因为修改失败也不影响)
|
||||
public void RestratStopProcess()
|
||||
{
|
||||
var list = _sysWorkprocessRepository.SelectList(p => p.Status == (int)WorkProcessStatus.Stop);
|
||||
var list = _SysWorkProcessRepository.SelectList(p => p.FuncStatus == (int)WorkProcessStatus.Pause);
|
||||
list.ForEach(x => {
|
||||
x.Status = (int)WorkProcessStatus.Running;
|
||||
x.FuncStatus = (int)WorkProcessStatus.Running;
|
||||
x.EditTime = DateTime.Now;
|
||||
_sysWorkprocessRepository.Update(x);
|
||||
|
||||
});
|
||||
_SysWorkProcessRepository.Update(list);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region RestartStopProcess(重新启用某个暂停了的调度)
|
||||
[TransactionCallHandler]
|
||||
public void RestartStopProcess(long workprocessId)
|
||||
public void RestartStopProcess(Guid workprocessId)
|
||||
{
|
||||
var workprocess = _SysWorkProcessRepository.SelectFirst(p => p.ID == workprocessId);
|
||||
|
||||
var workprocess = _sysWorkprocessRepository.SelectFirst(p => p.Id == workprocessId);
|
||||
if (workprocess.FuncStatus != (int)WorkProcessStatus.Pause) { throw new BaseException("当前进程状态不是停止"); }
|
||||
|
||||
if (workprocess.Status != (int)WorkProcessStatus.Stop) { throw new BaseException("当前进程状态不是停止"); }
|
||||
|
||||
workprocess.Status = (int)WorkProcessStatus.Init;
|
||||
workprocess.FuncStatus = (int)WorkProcessStatus.Running;
|
||||
workprocess.EditTime = DateTime.Now;
|
||||
_sysWorkprocessRepository.Update(workprocess);
|
||||
_SysWorkProcessRepository.Update(workprocess);
|
||||
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ProcessHandleExpire(进行执行超时)
|
||||
/// <summary>
|
||||
/// 进程执行超时
|
||||
/// </summary>
|
||||
public void ProcessHandleExpire()
|
||||
{
|
||||
var time = DateTime.Now.AddMinutes(-10);
|
||||
|
||||
var count = _sysWorkprocessRepository.Count(p => p.Status == (int)WorkProcessStatus.Running && p.EditTime <= time);
|
||||
|
||||
if (count > 0) { DingDingHelper.SendMsg($"有超时的进程任务产生,条数:{count}"); }
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 清空历史数据
|
||||
[TransactionCallHandler]
|
||||
public void ClearHistoryTask()
|
||||
{
|
||||
var historyDate = DateTime.Now.AddDays(-7);
|
||||
|
||||
var historyData = _sysWorkprocessRepository.SelectList(p => p.CreateTime < historyDate);
|
||||
|
||||
if (historyData == null || historyData.Count == 0) { return; }
|
||||
|
||||
_sysWorkprocessRepository.Add(historyData, "sys_workprocess_history");
|
||||
|
||||
_sysWorkprocessRepository.DeleteByIds(historyData.Select(p => p.Id).ToArray());
|
||||
_SysWorkProcessRepository.Delete(p => p.FuncStatus == (int)WorkProcessStatus.Complete && p.EditTime < historyDate);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ExecuteSingle(执行单个)
|
||||
public void ExecuteSingle(SysWorkprocess process)
|
||||
public void ExecuteSingle(SysWorkProcess process)
|
||||
{
|
||||
|
||||
var type = UnityHelper.GetUnityContainer().Resolve(Type.GetType(process.TypePath));
|
||||
var type = UnityHelper.GetUnityContainer().Resolve(Type.GetType(process.FuncClass));
|
||||
|
||||
MethodInfo method = type.GetType().GetMethod(process.MethodName);
|
||||
MethodInfo method = type.GetType().GetMethod(process.FuncMethod);
|
||||
|
||||
if (!string.IsNullOrEmpty(process.ParameterInfo))
|
||||
if (!string.IsNullOrEmpty(process.ParamInfo))
|
||||
{
|
||||
method.Invoke(type, new object[] { process.ParameterInfo });
|
||||
method.Invoke(type, new object[] { process.ParamInfo });
|
||||
}
|
||||
else
|
||||
{
|
||||
method.Invoke(type, new object[] { });
|
||||
}
|
||||
|
||||
process.Status = (int)WorkProcessStatus.Finished;
|
||||
process.EditTime = DateTime.Now;
|
||||
_sysWorkprocessRepository.Update(process);
|
||||
process.FuncStatus = (int)WorkProcessStatus.Complete;
|
||||
process.ExecuteTime = DateTime.Now;
|
||||
process.ExceptionInfo = string.Empty;
|
||||
_SysWorkProcessRepository.Update(process);
|
||||
|
||||
}
|
||||
#endregion
|
||||
@ -140,18 +187,94 @@ namespace MyCode.Project.Services.Implementation
|
||||
|
||||
public void Execute()
|
||||
{
|
||||
lock (locker)
|
||||
{
|
||||
var client = UnityHelper.GetService<MyCodeSqlSugarClient>();
|
||||
|
||||
var list = SelectInitWorkProcess(5);
|
||||
|
||||
//先将这10个任务改成运行中
|
||||
if (list != null && list.Count > 0)
|
||||
{
|
||||
var updateList = list.Select(p => new SysWorkProcess { ID = p.ID, FuncStatus = (int)WorkProcessStatus.Running });
|
||||
|
||||
_SysWorkProcessRepository.Update(updateList.ToList(), it => new { it.FuncStatus });
|
||||
}
|
||||
|
||||
foreach (var process in list)
|
||||
{
|
||||
//这里开启事务,同时才开启
|
||||
client.Ado.BeginTran();
|
||||
|
||||
#region 执行一个任务
|
||||
try
|
||||
{
|
||||
ExecuteSingle(process);
|
||||
|
||||
client.Ado.CommitTran();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
client.Ado.RollbackTran();
|
||||
|
||||
while (ex.InnerException != null)
|
||||
{
|
||||
ex = ex.InnerException;
|
||||
}
|
||||
|
||||
process.FuncStatus = (int)WorkProcessStatus.ExceptionStop;
|
||||
process.EditTime = DateTime.Now;
|
||||
process.ExecuteTime = DateTime.Now;
|
||||
if (ex is BaseException)
|
||||
{
|
||||
process.ExceptionInfo = ex.Message;
|
||||
}
|
||||
else
|
||||
{
|
||||
process.ExceptionInfo = ex.ToString();
|
||||
}
|
||||
|
||||
_SysWorkProcessRepository.Update(process);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region SelectOtherInitWorkProcess(返回优先级大于2的前几十条数据)
|
||||
/// <summary>
|
||||
/// 获取优先级3,4,5的调度
|
||||
/// </summary>
|
||||
/// <param name="top"></param>
|
||||
/// <returns></returns>
|
||||
public List<SysWorkProcess> SelectOtherInitWorkProcess(int top)
|
||||
{
|
||||
|
||||
return _SysWorkProcessRepository.Queryable()
|
||||
.Where(p => p.FuncStatus == (int)WorkProcessStatus.Waiting && p.Priority > 2 && p.Priority <= 5)
|
||||
.Take(top)
|
||||
.OrderBy(p => p.Priority)
|
||||
.OrderBy(p => p.CreateTime).ToList();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ExecuteOther(调度执行优先级比较低的任务)
|
||||
/// <summary>
|
||||
/// 调度执行优先级比较低的任务
|
||||
/// </summary>
|
||||
public void ExecuteOther()
|
||||
{
|
||||
var client = UnityHelper.GetService<MyCodeSqlSugarClient>();
|
||||
|
||||
var list = SelectInitWorkProcess(10);
|
||||
var list = SelectOtherInitWorkProcess(20);
|
||||
|
||||
//先将这20个任务改成运行中
|
||||
//先将这10个任务改成运行中
|
||||
if (list != null && list.Count > 0)
|
||||
{
|
||||
DateTime now = DateTime.Now;
|
||||
var updateList = list.Select(p => new SysWorkprocess { Id = p.Id, Status = (int)WorkProcessStatus.Running, EditTime = now });
|
||||
var updateList = list.Select(p => new SysWorkProcess { ID = p.ID, FuncStatus = (int)WorkProcessStatus.Running });
|
||||
|
||||
_sysWorkprocessRepository.Update(updateList.ToList(), it => new { it.Status, it.EditTime });
|
||||
_SysWorkProcessRepository.Update(updateList.ToList(), it => new { it.FuncStatus });
|
||||
}
|
||||
|
||||
foreach (var process in list)
|
||||
@ -175,8 +298,9 @@ namespace MyCode.Project.Services.Implementation
|
||||
ex = ex.InnerException;
|
||||
}
|
||||
|
||||
process.Status = (int)WorkProcessStatus.Stop;
|
||||
process.FuncStatus = (int)WorkProcessStatus.ExceptionStop;
|
||||
process.EditTime = DateTime.Now;
|
||||
process.ExecuteTime = DateTime.Now;
|
||||
if (ex is BaseException)
|
||||
{
|
||||
process.ExceptionInfo = ex.Message;
|
||||
@ -186,124 +310,181 @@ namespace MyCode.Project.Services.Implementation
|
||||
process.ExceptionInfo = ex.ToString();
|
||||
}
|
||||
|
||||
_sysWorkprocessRepository.Update(process);
|
||||
|
||||
DingDingHelper.SendMsg(process.ExceptionInfo);
|
||||
}
|
||||
finally
|
||||
{
|
||||
client.Ado.Context.Queues.Clear();
|
||||
_SysWorkProcessRepository.Update(process);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region SelectPriority2InitWorkProcess(返回优先级等于2的前几十条数据)
|
||||
/// <summary>
|
||||
/// 返回优先级等于2的前几十条数据
|
||||
/// </summary>
|
||||
/// <param name="top"></param>
|
||||
/// <returns></returns>
|
||||
public List<SysWorkProcess> SelectPriority2InitWorkProcess(int top)
|
||||
{
|
||||
|
||||
return _SysWorkProcessRepository.Queryable()
|
||||
.Where(p => p.FuncStatus == (int)WorkProcessStatus.Waiting && p.Priority == 2)
|
||||
.Take(top)
|
||||
.OrderBy(p => p.Priority)
|
||||
.OrderBy(p => p.CreateTime).ToList();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ExecutePriority2Work(调度执行优先级等于2的任务)
|
||||
/// <summary>
|
||||
/// 调度执行优先级等于2的任务
|
||||
/// </summary>
|
||||
public void ExecutePriority2Work()
|
||||
{
|
||||
var client = UnityHelper.GetService<MyCodeSqlSugarClient>();
|
||||
|
||||
var list = SelectPriority2InitWorkProcess(10);
|
||||
|
||||
//先将这10个任务改成运行中
|
||||
if (list != null && list.Count > 0)
|
||||
{
|
||||
var updateList = list.Select(p => new SysWorkProcess { ID = p.ID, FuncStatus = (int)WorkProcessStatus.Running });
|
||||
|
||||
_SysWorkProcessRepository.Update(updateList.ToList(), it => new { it.FuncStatus });
|
||||
}
|
||||
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Add(添加调度)
|
||||
|
||||
/// <summary>
|
||||
/// 添加调度
|
||||
/// </summary>
|
||||
/// <typeparam name="T">执行类</typeparam>
|
||||
/// <param name="merchantId">商家ID</param>
|
||||
/// <param name="methodName">方法名</param>
|
||||
/// <param name="remark">备注</param>
|
||||
/// <param name="entity">参数信息</param>
|
||||
/// <param name="funcType">执行类型</param>
|
||||
public void Add<T>(string methodName,long companyId, object entity = null, string remark = "", FuncType funcType = FuncType.Function, Priority priority = Priority.Low)
|
||||
{
|
||||
Add(typeof(T), companyId,methodName, remark, entity, funcType, priority);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Add(添加调度)
|
||||
/// <summary>
|
||||
/// 添加调度
|
||||
/// </summary>
|
||||
/// <param name="merchantId">商家ID</param>
|
||||
/// <param name="type">执行类</param>
|
||||
/// <param name="methodName">方法名</param>
|
||||
/// <param name="remark">备注</param>
|
||||
/// <param name="entity">参数信息</param>
|
||||
/// <param name="funcType">执行类型</param>
|
||||
public void Add(Type type,long companyId, string methodName, string remark = "", object entity = null, FuncType funcType = FuncType.Function, Priority priority = Priority.Low)
|
||||
{
|
||||
string typePath = string.Format("{0}, {1}", type.FullName, type.Assembly.GetName().Name);
|
||||
string paramInfo = entity == null
|
||||
? ""
|
||||
: entity is string || entity is Guid || entity is int || entity is long || entity is decimal ||
|
||||
entity is float || entity is double
|
||||
? entity.ToString()
|
||||
: entity.ToJson();
|
||||
Add(typePath,companyId, methodName, remark, paramInfo, funcType, priority);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region AddQueue(添加进程调度)
|
||||
public void AddQueue<T>(string methodName, long companyId,object entity = null,FuncType funcType = FuncType.Function, Priority priority = Priority.Low)
|
||||
{
|
||||
var type = typeof(T);
|
||||
|
||||
string typePath = string.Format("{0}, {1}", type.FullName, type.Assembly.GetName().Name);
|
||||
|
||||
string paramInfo = entity == null
|
||||
? ""
|
||||
: entity is string || entity is Guid || entity is int || entity is long || entity is decimal ||
|
||||
entity is float || entity is double
|
||||
? entity.ToString()
|
||||
: entity.ToJson();
|
||||
|
||||
var workProcess = new SysWorkprocess()
|
||||
foreach (var process in list)
|
||||
{
|
||||
Id = IdHelper.GetNewId(),
|
||||
FuncType = (byte)funcType,
|
||||
TypePath = typePath,
|
||||
MethodName = methodName,
|
||||
ParameterInfo = paramInfo,
|
||||
Status = (int)WorkProcessStatus.Init,
|
||||
EditTime = DateTime.Now,
|
||||
Priority = (byte)priority,
|
||||
CreateTime = DateTime.Now,
|
||||
CompanyId = companyId
|
||||
|
||||
};
|
||||
//这里开启事务,同时才开启
|
||||
client.Ado.BeginTran();
|
||||
|
||||
_sysWorkprocessRepository.AddQueue(workProcess);
|
||||
#region 执行一个任务
|
||||
try
|
||||
{
|
||||
ExecuteSingle(process);
|
||||
|
||||
client.Ado.CommitTran();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
client.Ado.RollbackTran();
|
||||
|
||||
while (ex.InnerException != null)
|
||||
{
|
||||
ex = ex.InnerException;
|
||||
}
|
||||
|
||||
process.FuncStatus = (int)WorkProcessStatus.ExceptionStop;
|
||||
process.EditTime = DateTime.Now;
|
||||
process.ExecuteTime = DateTime.Now;
|
||||
if (ex is BaseException)
|
||||
{
|
||||
process.ExceptionInfo = ex.Message;
|
||||
}
|
||||
else
|
||||
{
|
||||
process.ExceptionInfo = ex.ToString();
|
||||
}
|
||||
|
||||
_SysWorkProcessRepository.Update(process);
|
||||
}
|
||||
#endregion
|
||||
//Thread.Sleep(300);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Add(添加调度)
|
||||
#region SelectSmsInitWorkProcess(获取优先级6的短信调度)
|
||||
/// <summary>
|
||||
/// 添加调度任务
|
||||
/// 获取优先级6的短信调度
|
||||
/// </summary>
|
||||
/// <param name="merchantId">商家ID</param>
|
||||
/// <param name="typePath">类型路径,如:Lxm.IServices.IWorkProcessService, Lxm.Services</param>
|
||||
/// <param name="methodName">方法名</param>
|
||||
/// <param name="remark">备注</param>
|
||||
/// <param name="paramInfo">参数信息</param>
|
||||
/// <param name="funcType">执行类型</param>
|
||||
public void Add(string typePath,long companyId, string methodName, string remark = "", string paramInfo = "",
|
||||
FuncType funcType = FuncType.Function,
|
||||
Priority priority = Priority.Low)
|
||||
/// <param name="top"></param>
|
||||
/// <returns></returns>
|
||||
public List<SysWorkProcess> SelectPriority6WorkProcess(int top)
|
||||
{
|
||||
DateTime days = DateTime.Now.Date;
|
||||
return _SysWorkProcessRepository.Queryable()
|
||||
.Where(p => p.FuncStatus == (int)WorkProcessStatus.Waiting && p.Priority == 6)
|
||||
.Take(top)
|
||||
.OrderBy(p => p.Priority)
|
||||
.OrderBy(p => p.CreateTime).ToList();
|
||||
}
|
||||
#endregion
|
||||
|
||||
var entity = new SysWorkprocess()
|
||||
#region ExecutePriority6(调度执行优先级=6的任务)
|
||||
/// <summary>
|
||||
/// 调度执行优先级=6的任务
|
||||
/// </summary>
|
||||
public void ExecutePriority6()
|
||||
{
|
||||
var client = UnityHelper.GetService<MyCodeSqlSugarClient>();
|
||||
|
||||
var list = SelectPriority6WorkProcess(20);
|
||||
|
||||
//先将这10个任务改成运行中
|
||||
if (list != null && list.Count > 0)
|
||||
{
|
||||
Id = IdHelper.GetNewId(),
|
||||
FuncType = (byte)funcType,
|
||||
TypePath = typePath,
|
||||
MethodName = methodName,
|
||||
ParameterInfo = paramInfo,
|
||||
Status = (int)WorkProcessStatus.Init,
|
||||
Remark = remark,
|
||||
EditTime = DateTime.Now,
|
||||
Priority = (byte)priority,
|
||||
CreateTime = DateTime.Now,
|
||||
CompanyId = companyId
|
||||
};
|
||||
_sysWorkprocessRepository.Add(entity);
|
||||
var updateList = list.Select(p => new SysWorkProcess { ID = p.ID, FuncStatus = (int)WorkProcessStatus.Running });
|
||||
|
||||
_SysWorkProcessRepository.Update(updateList.ToList(), it => new { it.FuncStatus });
|
||||
}
|
||||
|
||||
foreach (var process in list)
|
||||
{
|
||||
//这里开启事务,同时才开启
|
||||
client.Ado.BeginTran();
|
||||
|
||||
#region 执行一个任务
|
||||
try
|
||||
{
|
||||
ExecuteSingle(process);
|
||||
|
||||
client.Ado.CommitTran();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
client.Ado.RollbackTran();
|
||||
|
||||
while (ex.InnerException != null)
|
||||
{
|
||||
ex = ex.InnerException;
|
||||
}
|
||||
|
||||
process.FuncStatus = (int)WorkProcessStatus.ExceptionStop;
|
||||
process.EditTime = DateTime.Now;
|
||||
process.ExecuteTime = DateTime.Now;
|
||||
if (ex is BaseException)
|
||||
{
|
||||
process.ExceptionInfo = ex.Message;
|
||||
}
|
||||
else
|
||||
{
|
||||
process.ExceptionInfo = ex.ToString();
|
||||
}
|
||||
|
||||
_SysWorkProcessRepository.Update(process);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region RetryTask(重试失败的任务)
|
||||
/// <summary>
|
||||
/// 重试失败的任务
|
||||
/// </summary>
|
||||
public void RetryTask()
|
||||
{
|
||||
DateTime today = DateTime.Now.Date.AddDays(-1);
|
||||
var list = _SysWorkProcessRepository.Queryable().Where(t => t.FuncStatus == 4 && t.RetryCount <= 10
|
||||
&& t.CreateTime >= today).OrderBy(t => t.EditTime).Take(20).ToList();
|
||||
list.ForEach(t =>
|
||||
{
|
||||
t.RetryCount = t.RetryCount + 1;
|
||||
t.FuncStatus = 0;
|
||||
});
|
||||
_SysWorkProcessRepository.Update(list);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
@ -13,7 +13,7 @@ using System.Web.Http;
|
||||
namespace MyCode.Project.WebApi.Areas.Admin.Controllers
|
||||
{
|
||||
/// <summary>
|
||||
/// 流行美智慧门店报表
|
||||
///
|
||||
/// </summary>
|
||||
public class LxmZHMDReportController : BaseAdminController
|
||||
{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user