lichunlei 1 周之前
當前提交
8bb4cf53e8
共有 100 個文件被更改,包括 11785 次插入0 次删除
  1. 二進制
      .DS_Store
  2. 3 0
      .gitignore
  3. 二進制
      .vscode/.DS_Store
  4. 1 0
      .vscode/api.code-snippets
  5. 2813 0
      .vscode/db.code-snippets
  6. 53 0
      .vscode/launch.json
  7. 42 0
      .vscode/tasks.json
  8. 二進制
      AppStart/.DS_Store
  9. 12 0
      AppStart/AppResultJson.cs
  10. 19 0
      AppStart/Decrypt.cs
  11. 二進制
      AppStart/DictionaryClass/.DS_Store
  12. 53 0
      AppStart/DictionaryClass/DictionaryClass.cs
  13. 16 0
      AppStart/GlobalExceptions.cs
  14. 二進制
      AppStart/Helper/.DS_Store
  15. 142 0
      AppStart/Helper/AddTableService.cs
  16. 389 0
      AppStart/Helper/CheckWifiData.cs
  17. 52 0
      AppStart/Helper/CreateTableHelper.cs
  18. 33 0
      AppStart/Helper/GetSpTimer.cs
  19. 35 0
      AppStart/Helper/GetSpTimerLocal.cs
  20. 66 0
      AppStart/Helper/LogHelper.cs
  21. 38 0
      AppStart/Helper/PublicErrService.cs
  22. 284 0
      AppStart/Helper/PublicGetService.cs
  23. 1198 0
      AppStart/Helper/PublicImportDataService.cs
  24. 847 0
      AppStart/Helper/PublicImportDataServiceRds.cs
  25. 143 0
      AppStart/Helper/PublicService.cs
  26. 208 0
      AppStart/Helper/RSAForJava.cs
  27. 343 0
      AppStart/Helper/RSAHelper.cs
  28. 408 0
      AppStart/Helper/SpNoticeHelper.cs
  29. 151 0
      AppStart/Helper/TaskService.cs
  30. 177 0
      AppStart/PublicFunction.cs
  31. 94 0
      AppStart/RSASignHelper.cs
  32. 232 0
      AppStart/RabbitMQClient.cs
  33. 211 0
      AppStart/RedisDbconn.cs
  34. 12 0
      AppStart/RedisTables/AccountTable.cs
  35. 9 0
      AppStart/RedisTables/AdminIpList.cs
  36. 18 0
      AppStart/RedisTables/UData.cs
  37. 159 0
      AppStart/SLS.cs
  38. 18 0
      AppStart/Setting.cs
  39. 二進制
      AppStart/Tables/.DS_Store
  40. 29 0
      AppStart/Tables/Brand.cs
  41. 41 0
      AppStart/Tables/DbScheme.cs
  42. 18 0
      AppStart/Tables/JobMqMsg.cs
  43. 11 0
      AppStart/Tables/SetDepositList.cs
  44. 251 0
      AppStart/VerifyCodeHelper.cs
  45. 二進制
      Areas/.DS_Store
  46. 二進制
      Areas/Admin/.DS_Store
  47. 二進制
      Areas/Admin/Controllers/.DS_Store
  48. 58 0
      Areas/Admin/Controllers/BaseController.cs
  49. 二進制
      Areas/Admin/Views/.DS_Store
  50. 0 0
      Areas/Admin/Views/Home/Index.cshtml
  51. 二進制
      Areas/Api/.DS_Store
  52. 二進制
      Areas/Api/Controllers/.DS_Store
  53. 100 0
      Areas/Api/Controllers/v1/HaoDaController.cs
  54. 463 0
      Areas/Api/Controllers/v1/Kq2Controller.cs
  55. 142 0
      Areas/Api/Controllers/v1/Kq3Controller.cs
  56. 550 0
      Areas/Api/Controllers/v1/KqController.cs
  57. 169 0
      Areas/Api/Controllers/v1/KssController.cs
  58. 216 0
      Areas/Api/Controllers/v1/TestController.cs
  59. 120 0
      Areas/Api/Controllers/v1/YcCardOnlineController.cs
  60. 二進制
      Areas/Web/.DS_Store
  61. 二進制
      Areas/Web/Controllers/.DS_Store
  62. 二進制
      Areas/Web/Views/.DS_Store
  63. 二進制
      BLL/Aliyun.OSS.dll
  64. 二進制
      BLL/AopSdk.dll
  65. 二進制
      BLL/LitJSON.dll
  66. 二進制
      BLL/MySystemLib.dll
  67. 二進制
      BLL/Newtonsoft.Json.dll
  68. 二進制
      BLL/ThoughtWorks.QRCode.dll
  69. 二進制
      BLL/aliyun-net-sdk-core.dll
  70. 61 0
      Config/Base.cs
  71. 63 0
      Controllers/HomeController.cs
  72. 18 0
      JobModels/RightDic.cs
  73. 13 0
      JobModels/SysLog.cs
  74. 24 0
      JobModels/TaskFinish.cs
  75. 30 0
      JobModels/TaskSpCheckData.cs
  76. 26 0
      JobModels/TaskSpFieldRelation.cs
  77. 31 0
      JobModels/TaskSpGetData.cs
  78. 24 0
      JobModels/TaskStepRecord.cs
  79. 32 0
      JobModels/TimedTasks.cs
  80. 504 0
      JobModels/WebCMSEntities.cs
  81. 二進制
      Models/.DS_Store
  82. 40 0
      Models/ActivateRecord.cs
  83. 11 0
      Models/ApiVersion.cs
  84. 36 0
      Models/BindRecord.cs
  85. 36 0
      Models/ChangeBindRecord.cs
  86. 34 0
      Models/Col.cs
  87. 11 0
      Models/ColForEnName.cs
  88. 21 0
      Models/CustomTagSet.cs
  89. 12 0
      Models/CustomerTableRecord.cs
  90. 30 0
      Models/KqActivate.cs
  91. 27 0
      Models/KqActivateCallBack.cs
  92. 26 0
      Models/KqMerchant.cs
  93. 43 0
      Models/KqTrade.cs
  94. 34 0
      Models/KqTradeCallBack.cs
  95. 36 0
      Models/KqTradeFlux.cs
  96. 21 0
      Models/KssBind.cs
  97. 21 0
      Models/KssFreeDeposit.cs
  98. 24 0
      Models/KssMerchant.cs
  99. 25 0
      Models/KssReturnDeposit.cs
  100. 24 0
      Models/KssStageRwd.cs

二進制
.DS_Store


+ 3 - 0
.gitignore

@@ -0,0 +1,3 @@
+/bin
+/publish
+/obj

二進制
.vscode/.DS_Store


+ 1 - 0
.vscode/api.code-snippets

@@ -0,0 +1 @@
+{}

+ 2813 - 0
.vscode/db.code-snippets

@@ -0,0 +1,2813 @@
+{"查询激活记录列表": {
+"prefix": "ym-db-ActivateRecord-Find",
+"body": [
+"List<ActivateRecord> $1 = db.ActivateRecord.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (ActivateRecord $3 in $1)",
+"{",
+"}"
+]
+},
+"查询激活记录列表,并取值": {
+"prefix": "ym-db-ActivateRecord-FindWithData",
+"body": [
+"List<ActivateRecord> $1 = db.ActivateRecord.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (ActivateRecord $3 in $1)",
+"{",
+"	string MerNo = $3.MerNo; //商户编号",
+"	string MerName = $3.MerName; //商户名称",
+"	string MerMobile = $3.MerMobile; //商户手机号",
+"	string SnNo = $3.SnNo; //终端机身号",
+"	DateTime MerRegDate = $3.MerRegDate; //注册日期",
+"	string AssessMonth = $3.AssessMonth; //考核月",
+"	string AssessMonthCount = $3.AssessMonthCount; //考核第几月",
+"	string ActivateStatus = $3.ActivateStatus; //激活状态",
+"	DateTime ActivateDate = $3.ActivateDate; //激活日期",
+"	string MerRealName = $3.MerRealName; //商户真实姓名",
+"	string MerIdcardNo = $3.MerIdcardNo; //商户身份证号",
+"	string BizEnterNo = $3.BizEnterNo; //业务员编号",
+"	string BizEnterName = $3.BizEnterName; //业务员名称",
+"	string Remark = $3.Remark; //备注",
+"	string AgentNo = $3.AgentNo; //代理商编号",
+"	string ProductType = $3.ProductType; //产品类型",
+"	string ChannelSerial = $3.ChannelSerial; //渠道流水号",
+"}"
+]
+},
+"查询激活记录": {
+"prefix": "ym-db-ActivateRecord-Exist",
+"body": [
+"bool $1 = db.ActivateRecord.Any(m => m.MerNo == $2);",
+]
+},
+"查询某个激活记录,并取值": {
+"prefix": "ym-db-ActivateRecord-FindByPrimaryKey",
+"body": [
+"ActivateRecord $1 = db.ActivateRecord.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	string MerNo = $1.MerNo; //商户编号",
+"	string MerName = $1.MerName; //商户名称",
+"	string MerMobile = $1.MerMobile; //商户手机号",
+"	string SnNo = $1.SnNo; //终端机身号",
+"	DateTime MerRegDate = $1.MerRegDate; //注册日期",
+"	string AssessMonth = $1.AssessMonth; //考核月",
+"	string AssessMonthCount = $1.AssessMonthCount; //考核第几月",
+"	string ActivateStatus = $1.ActivateStatus; //激活状态",
+"	DateTime ActivateDate = $1.ActivateDate; //激活日期",
+"	string MerRealName = $1.MerRealName; //商户真实姓名",
+"	string MerIdcardNo = $1.MerIdcardNo; //商户身份证号",
+"	string BizEnterNo = $1.BizEnterNo; //业务员编号",
+"	string BizEnterName = $1.BizEnterName; //业务员名称",
+"	string Remark = $1.Remark; //备注",
+"	string AgentNo = $1.AgentNo; //代理商编号",
+"	string ProductType = $1.ProductType; //产品类型",
+"	string ChannelSerial = $1.ChannelSerial; //渠道流水号",
+"}"
+]
+},
+"查询某个激活记录,并赋值": {
+"prefix": "ym-db-ActivateRecord-Update",
+"body": [
+"ActivateRecord $1 = db.ActivateRecord.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	$1.MerNo = $2; //商户编号",
+"	$1.MerName = $3; //商户名称",
+"	$1.MerMobile = $4; //商户手机号",
+"	$1.SnNo = $5; //终端机身号",
+"	$1.MerRegDate = $6; //注册日期",
+"	$1.AssessMonth = $7; //考核月",
+"	$1.AssessMonthCount = $8; //考核第几月",
+"	$1.ActivateStatus = $9; //激活状态",
+"	$1.ActivateDate = $10; //激活日期",
+"	$1.MerRealName = $11; //商户真实姓名",
+"	$1.MerIdcardNo = $12; //商户身份证号",
+"	$1.BizEnterNo = $13; //业务员编号",
+"	$1.BizEnterName = $14; //业务员名称",
+"	$1.Remark = $15; //备注",
+"	$1.AgentNo = $16; //代理商编号",
+"	$1.ProductType = $17; //产品类型",
+"	$1.ChannelSerial = $18; //渠道流水号",
+"}"
+]
+},
+"获取激活记录数量": {
+"prefix": "ym-db-ActivateRecord-FindAndCount",
+"body": [
+"int $1 = db.ActivateRecord.Count(m => $2);",
+]
+},
+"添加激活记录": {
+"prefix": "ym-db-ActivateRecord-Create",
+"body": [
+"db.ActivateRecord.Add(new ActivateRecord()",
+"{",
+"	CreateDate = DateTime.Now,",
+"	UpdateDate = DateTime.Now,",
+"	MerNo = $1, //商户编号",
+"	MerName = $2, //商户名称",
+"	MerMobile = $3, //商户手机号",
+"	SnNo = $4, //终端机身号",
+"	MerRegDate = $5, //注册日期",
+"	AssessMonth = $6, //考核月",
+"	AssessMonthCount = $7, //考核第几月",
+"	ActivateStatus = $8, //激活状态",
+"	ActivateDate = $9, //激活日期",
+"	MerRealName = $10, //商户真实姓名",
+"	MerIdcardNo = $11, //商户身份证号",
+"	BizEnterNo = $12, //业务员编号",
+"	BizEnterName = $13, //业务员名称",
+"	Remark = $14, //备注",
+"	AgentNo = $15, //代理商编号",
+"	ProductType = $16, //产品类型",
+"	ChannelSerial = $17, //渠道流水号",
+"});"
+]
+},"删除某个激活记录": {
+"prefix": "ym-db-ActivateRecord-Delete",
+"body": [
+"ActivateRecord $1 = db.ActivateRecord.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	db.ActivateRecord.Remove($1);",
+"}"
+]
+},
+"查询绑定记录列表": {
+"prefix": "ym-db-BindRecord-Find",
+"body": [
+"List<BindRecord> $1 = db.BindRecord.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (BindRecord $3 in $1)",
+"{",
+"}"
+]
+},
+"查询绑定记录列表,并取值": {
+"prefix": "ym-db-BindRecord-FindWithData",
+"body": [
+"List<BindRecord> $1 = db.BindRecord.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (BindRecord $3 in $1)",
+"{",
+"	string AgentName = $3.AgentName; //机构名称",
+"	string MerNo = $3.MerNo; //商户编号",
+"	string MerName = $3.MerName; //商户名称",
+"	string MerSnNo = $3.MerSnNo; //终端机身号",
+"	DateTime MerOperateDate = $3.MerOperateDate; //操作时间",
+"	string MerOperateType = $3.MerOperateType; //操作类型",
+"	string MerStatus = $3.MerStatus; //商户状态",
+"	string ProductType = $3.ProductType; //产品类型",
+"	string MerNewSnNo = $3.MerNewSnNo; //新终端机身号",
+"	string Remark = $3.Remark; //注释",
+"	DateTime CreateTime = $3.CreateTime; //创建时间",
+"	DateTime UpdateTime = $3.UpdateTime; //更新时间",
+"	string ChannelSerial = $3.ChannelSerial; //渠道流水号",
+"}"
+]
+},
+"查询绑定记录": {
+"prefix": "ym-db-BindRecord-Exist",
+"body": [
+"bool $1 = db.BindRecord.Any(m => m.MerNo == $2);",
+]
+},
+"查询某个绑定记录,并取值": {
+"prefix": "ym-db-BindRecord-FindByPrimaryKey",
+"body": [
+"BindRecord $1 = db.BindRecord.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	string AgentName = $1.AgentName; //机构名称",
+"	string MerNo = $1.MerNo; //商户编号",
+"	string MerName = $1.MerName; //商户名称",
+"	string MerSnNo = $1.MerSnNo; //终端机身号",
+"	DateTime MerOperateDate = $1.MerOperateDate; //操作时间",
+"	string MerOperateType = $1.MerOperateType; //操作类型",
+"	string MerStatus = $1.MerStatus; //商户状态",
+"	string ProductType = $1.ProductType; //产品类型",
+"	string MerNewSnNo = $1.MerNewSnNo; //新终端机身号",
+"	string Remark = $1.Remark; //注释",
+"	DateTime CreateTime = $1.CreateTime; //创建时间",
+"	DateTime UpdateTime = $1.UpdateTime; //更新时间",
+"	string ChannelSerial = $1.ChannelSerial; //渠道流水号",
+"}"
+]
+},
+"查询某个绑定记录,并赋值": {
+"prefix": "ym-db-BindRecord-Update",
+"body": [
+"BindRecord $1 = db.BindRecord.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	$1.AgentName = $2; //机构名称",
+"	$1.MerNo = $3; //商户编号",
+"	$1.MerName = $4; //商户名称",
+"	$1.MerSnNo = $5; //终端机身号",
+"	$1.MerOperateDate = $6; //操作时间",
+"	$1.MerOperateType = $7; //操作类型",
+"	$1.MerStatus = $8; //商户状态",
+"	$1.ProductType = $9; //产品类型",
+"	$1.MerNewSnNo = $10; //新终端机身号",
+"	$1.Remark = $11; //注释",
+"	$1.CreateTime = $12; //创建时间",
+"	$1.UpdateTime = $13; //更新时间",
+"	$1.ChannelSerial = $14; //渠道流水号",
+"}"
+]
+},
+"获取绑定记录数量": {
+"prefix": "ym-db-BindRecord-FindAndCount",
+"body": [
+"int $1 = db.BindRecord.Count(m => $2);",
+]
+},
+"添加绑定记录": {
+"prefix": "ym-db-BindRecord-Create",
+"body": [
+"db.BindRecord.Add(new BindRecord()",
+"{",
+"	CreateDate = DateTime.Now,",
+"	UpdateDate = DateTime.Now,",
+"	AgentName = $1, //机构名称",
+"	MerNo = $2, //商户编号",
+"	MerName = $3, //商户名称",
+"	MerSnNo = $4, //终端机身号",
+"	MerOperateDate = $5, //操作时间",
+"	MerOperateType = $6, //操作类型",
+"	MerStatus = $7, //商户状态",
+"	ProductType = $8, //产品类型",
+"	MerNewSnNo = $9, //新终端机身号",
+"	Remark = $10, //注释",
+"	CreateTime = $11, //创建时间",
+"	UpdateTime = $12, //更新时间",
+"	ChannelSerial = $13, //渠道流水号",
+"});"
+]
+},"删除某个绑定记录": {
+"prefix": "ym-db-BindRecord-Delete",
+"body": [
+"BindRecord $1 = db.BindRecord.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	db.BindRecord.Remove($1);",
+"}"
+]
+},
+"查询自建表创建记录列表": {
+"prefix": "ym-db-CustomerTableRecord-Find",
+"body": [
+"List<CustomerTableRecord> $1 = db.CustomerTableRecord.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (CustomerTableRecord $3 in $1)",
+"{",
+"}"
+]
+},
+"查询自建表创建记录列表,并取值": {
+"prefix": "ym-db-CustomerTableRecord-FindWithData",
+"body": [
+"List<CustomerTableRecord> $1 = db.CustomerTableRecord.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (CustomerTableRecord $3 in $1)",
+"{",
+"	string TableEnName = $3.TableEnName; //表名",
+"	DateTime CreateDate = $3.CreateDate; //创建时间",
+"	DateTime AddTableDate = $3.AddTableDate; //分表时间",
+"}"
+]
+},
+"查询自建表创建记录": {
+"prefix": "ym-db-CustomerTableRecord-Exist",
+"body": [
+"bool $1 = db.CustomerTableRecord.Any(m => m.TableEnName == $2);",
+]
+},
+"查询某个自建表创建记录,并取值": {
+"prefix": "ym-db-CustomerTableRecord-FindByPrimaryKey",
+"body": [
+"CustomerTableRecord $1 = db.CustomerTableRecord.FirstOrDefault(m => m.TableEnName == $2);",
+"if ($1 != null)",
+"{",
+"	string TableEnName = $1.TableEnName; //表名",
+"	DateTime CreateDate = $1.CreateDate; //创建时间",
+"	DateTime AddTableDate = $1.AddTableDate; //分表时间",
+"}"
+]
+},
+"查询某个自建表创建记录,并赋值": {
+"prefix": "ym-db-CustomerTableRecord-Update",
+"body": [
+"CustomerTableRecord $1 = db.CustomerTableRecord.FirstOrDefault(m => m.TableEnName == $2);",
+"if ($1 != null)",
+"{",
+"	$1.TableEnName = $2; //表名",
+"	$1.CreateDate = $3; //创建时间",
+"	$1.AddTableDate = $4; //分表时间",
+"}"
+]
+},
+"获取自建表创建记录数量": {
+"prefix": "ym-db-CustomerTableRecord-FindAndCount",
+"body": [
+"int $1 = db.CustomerTableRecord.Count(m => $2);",
+]
+},
+"添加自建表创建记录": {
+"prefix": "ym-db-CustomerTableRecord-Create",
+"body": [
+"db.CustomerTableRecord.Add(new CustomerTableRecord()",
+"{",
+"	CreateDate = DateTime.Now,",
+"	UpdateDate = DateTime.Now,",
+"	TableEnName = $1, //表名",
+"	CreateDate = $2, //创建时间",
+"	AddTableDate = $3, //分表时间",
+"});"
+]
+},"删除某个自建表创建记录": {
+"prefix": "ym-db-CustomerTableRecord-Delete",
+"body": [
+"CustomerTableRecord $1 = db.CustomerTableRecord.FirstOrDefault(m => m.TableEnName == $2);",
+"if ($1 != null)",
+"{",
+"	db.CustomerTableRecord.Remove($1);",
+"}"
+]
+},
+"查询快钱MPOS激活抓取列表": {
+"prefix": "ym-db-KqActivate-Find",
+"body": [
+"List<KqActivate> $1 = db.KqActivate.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (KqActivate $3 in $1)",
+"{",
+"}"
+]
+},
+"查询快钱MPOS激活抓取列表,并取值": {
+"prefix": "ym-db-KqActivate-FindWithData",
+"body": [
+"List<KqActivate> $1 = db.KqActivate.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (KqActivate $3 in $1)",
+"{",
+"	string MerNo = $3.MerNo; //商户编号",
+"	string MerName = $3.MerName; //商户名称",
+"	string MerMobile = $3.MerMobile; //商户手机号",
+"	string ProductType = $3.ProductType; //产品类型",
+"	string MerSnNo = $3.MerSnNo; //终端机身号",
+"	DateTime MerRegDate = $3.MerRegDate; //注册日期",
+"	string AssessMonth = $3.AssessMonth; //考核月",
+"	string AssessMonthCount = $3.AssessMonthCount; //考核第几月",
+"	string ActivateStatus = $3.ActivateStatus; //激活状态",
+"	DateTime ActivateDate = $3.ActivateDate; //激活日期",
+"	string MerRealName = $3.MerRealName; //商户真实姓名",
+"	string MerIdcardNo = $3.MerIdcardNo; //商户身份证号",
+"	string BizEnterNo = $3.BizEnterNo; //业务员编号",
+"	string BizEnterName = $3.BizEnterName; //业务员名称",
+"	string ActVerifyFlag = $3.ActVerifyFlag; //激活验证标识",
+"	string Remark = $3.Remark; //注释",
+"	DateTime CreateTime = $3.CreateTime; //创建时间",
+"	DateTime UpdateTime = $3.UpdateTime; //更新时间",
+"	string SourceType = $3.SourceType; //来源类型",
+"	string ActNo = $3.ActNo; //押金活动ID",
+"	string ActName = $3.ActName; //押金活动名称",
+"}"
+]
+},
+"查询快钱MPOS激活抓取": {
+"prefix": "ym-db-KqActivate-Exist",
+"body": [
+"bool $1 = db.KqActivate.Any(m => m.MerNo == $2);",
+]
+},
+"查询某个快钱MPOS激活抓取,并取值": {
+"prefix": "ym-db-KqActivate-FindByPrimaryKey",
+"body": [
+"KqActivate $1 = db.KqActivate.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	string MerNo = $1.MerNo; //商户编号",
+"	string MerName = $1.MerName; //商户名称",
+"	string MerMobile = $1.MerMobile; //商户手机号",
+"	string ProductType = $1.ProductType; //产品类型",
+"	string MerSnNo = $1.MerSnNo; //终端机身号",
+"	DateTime MerRegDate = $1.MerRegDate; //注册日期",
+"	string AssessMonth = $1.AssessMonth; //考核月",
+"	string AssessMonthCount = $1.AssessMonthCount; //考核第几月",
+"	string ActivateStatus = $1.ActivateStatus; //激活状态",
+"	DateTime ActivateDate = $1.ActivateDate; //激活日期",
+"	string MerRealName = $1.MerRealName; //商户真实姓名",
+"	string MerIdcardNo = $1.MerIdcardNo; //商户身份证号",
+"	string BizEnterNo = $1.BizEnterNo; //业务员编号",
+"	string BizEnterName = $1.BizEnterName; //业务员名称",
+"	string ActVerifyFlag = $1.ActVerifyFlag; //激活验证标识",
+"	string Remark = $1.Remark; //注释",
+"	DateTime CreateTime = $1.CreateTime; //创建时间",
+"	DateTime UpdateTime = $1.UpdateTime; //更新时间",
+"	string SourceType = $1.SourceType; //来源类型",
+"	string ActNo = $1.ActNo; //押金活动ID",
+"	string ActName = $1.ActName; //押金活动名称",
+"}"
+]
+},
+"查询某个快钱MPOS激活抓取,并赋值": {
+"prefix": "ym-db-KqActivate-Update",
+"body": [
+"KqActivate $1 = db.KqActivate.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	$1.MerNo = $2; //商户编号",
+"	$1.MerName = $3; //商户名称",
+"	$1.MerMobile = $4; //商户手机号",
+"	$1.ProductType = $5; //产品类型",
+"	$1.MerSnNo = $6; //终端机身号",
+"	$1.MerRegDate = $7; //注册日期",
+"	$1.AssessMonth = $8; //考核月",
+"	$1.AssessMonthCount = $9; //考核第几月",
+"	$1.ActivateStatus = $10; //激活状态",
+"	$1.ActivateDate = $11; //激活日期",
+"	$1.MerRealName = $12; //商户真实姓名",
+"	$1.MerIdcardNo = $13; //商户身份证号",
+"	$1.BizEnterNo = $14; //业务员编号",
+"	$1.BizEnterName = $15; //业务员名称",
+"	$1.ActVerifyFlag = $16; //激活验证标识",
+"	$1.Remark = $17; //注释",
+"	$1.CreateTime = $18; //创建时间",
+"	$1.UpdateTime = $19; //更新时间",
+"	$1.SourceType = $20; //来源类型",
+"	$1.ActNo = $21; //押金活动ID",
+"	$1.ActName = $22; //押金活动名称",
+"}"
+]
+},
+"获取快钱MPOS激活抓取数量": {
+"prefix": "ym-db-KqActivate-FindAndCount",
+"body": [
+"int $1 = db.KqActivate.Count(m => $2);",
+]
+},
+"添加快钱MPOS激活抓取": {
+"prefix": "ym-db-KqActivate-Create",
+"body": [
+"db.KqActivate.Add(new KqActivate()",
+"{",
+"	CreateDate = DateTime.Now,",
+"	UpdateDate = DateTime.Now,",
+"	MerNo = $1, //商户编号",
+"	MerName = $2, //商户名称",
+"	MerMobile = $3, //商户手机号",
+"	ProductType = $4, //产品类型",
+"	MerSnNo = $5, //终端机身号",
+"	MerRegDate = $6, //注册日期",
+"	AssessMonth = $7, //考核月",
+"	AssessMonthCount = $8, //考核第几月",
+"	ActivateStatus = $9, //激活状态",
+"	ActivateDate = $10, //激活日期",
+"	MerRealName = $11, //商户真实姓名",
+"	MerIdcardNo = $12, //商户身份证号",
+"	BizEnterNo = $13, //业务员编号",
+"	BizEnterName = $14, //业务员名称",
+"	ActVerifyFlag = $15, //激活验证标识",
+"	Remark = $16, //注释",
+"	CreateTime = $17, //创建时间",
+"	UpdateTime = $18, //更新时间",
+"	SourceType = $19, //来源类型",
+"	ActNo = $20, //押金活动ID",
+"	ActName = $21, //押金活动名称",
+"});"
+]
+},"删除某个快钱MPOS激活抓取": {
+"prefix": "ym-db-KqActivate-Delete",
+"body": [
+"KqActivate $1 = db.KqActivate.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	db.KqActivate.Remove($1);",
+"}"
+]
+},
+"查询快钱MPOS激活推送列表": {
+"prefix": "ym-db-KqActivateCallBack-Find",
+"body": [
+"List<KqActivateCallBack> $1 = db.KqActivateCallBack.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (KqActivateCallBack $3 in $1)",
+"{",
+"}"
+]
+},
+"查询快钱MPOS激活推送列表,并取值": {
+"prefix": "ym-db-KqActivateCallBack-FindWithData",
+"body": [
+"List<KqActivateCallBack> $1 = db.KqActivateCallBack.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (KqActivateCallBack $3 in $1)",
+"{",
+"	string MerNo = $3.MerNo; //商户编号",
+"	string MerName = $3.MerName; //商户名称",
+"	string MerMobile = $3.MerMobile; //商户手机号",
+"	string ProductType = $3.ProductType; //产品类型",
+"	string MerSnNo = $3.MerSnNo; //终端机身号",
+"	DateTime MerRegDate = $3.MerRegDate; //注册日期",
+"	string AssessMonth = $3.AssessMonth; //考核月",
+"	string AssessMonthCount = $3.AssessMonthCount; //考核第几月",
+"	string ActivateStatus = $3.ActivateStatus; //激活状态",
+"	DateTime ActivateDate = $3.ActivateDate; //激活日期",
+"	string MerRealName = $3.MerRealName; //商户真实姓名",
+"	string MerIdcardNo = $3.MerIdcardNo; //商户身份证号",
+"	string BizEnterNo = $3.BizEnterNo; //业务员编号",
+"	string BizEnterName = $3.BizEnterName; //业务员名称",
+"	string ActVerifyFlag = $3.ActVerifyFlag; //激活验证标识",
+"	string Remark = $3.Remark; //注释",
+"	DateTime CreateTime = $3.CreateTime; //创建时间",
+"	DateTime UpdateTime = $3.UpdateTime; //更新时间",
+"}"
+]
+},
+"查询快钱MPOS激活推送": {
+"prefix": "ym-db-KqActivateCallBack-Exist",
+"body": [
+"bool $1 = db.KqActivateCallBack.Any(m => m.MerNo == $2);",
+]
+},
+"查询某个快钱MPOS激活推送,并取值": {
+"prefix": "ym-db-KqActivateCallBack-FindByPrimaryKey",
+"body": [
+"KqActivateCallBack $1 = db.KqActivateCallBack.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	string MerNo = $1.MerNo; //商户编号",
+"	string MerName = $1.MerName; //商户名称",
+"	string MerMobile = $1.MerMobile; //商户手机号",
+"	string ProductType = $1.ProductType; //产品类型",
+"	string MerSnNo = $1.MerSnNo; //终端机身号",
+"	DateTime MerRegDate = $1.MerRegDate; //注册日期",
+"	string AssessMonth = $1.AssessMonth; //考核月",
+"	string AssessMonthCount = $1.AssessMonthCount; //考核第几月",
+"	string ActivateStatus = $1.ActivateStatus; //激活状态",
+"	DateTime ActivateDate = $1.ActivateDate; //激活日期",
+"	string MerRealName = $1.MerRealName; //商户真实姓名",
+"	string MerIdcardNo = $1.MerIdcardNo; //商户身份证号",
+"	string BizEnterNo = $1.BizEnterNo; //业务员编号",
+"	string BizEnterName = $1.BizEnterName; //业务员名称",
+"	string ActVerifyFlag = $1.ActVerifyFlag; //激活验证标识",
+"	string Remark = $1.Remark; //注释",
+"	DateTime CreateTime = $1.CreateTime; //创建时间",
+"	DateTime UpdateTime = $1.UpdateTime; //更新时间",
+"}"
+]
+},
+"查询某个快钱MPOS激活推送,并赋值": {
+"prefix": "ym-db-KqActivateCallBack-Update",
+"body": [
+"KqActivateCallBack $1 = db.KqActivateCallBack.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	$1.MerNo = $2; //商户编号",
+"	$1.MerName = $3; //商户名称",
+"	$1.MerMobile = $4; //商户手机号",
+"	$1.ProductType = $5; //产品类型",
+"	$1.MerSnNo = $6; //终端机身号",
+"	$1.MerRegDate = $7; //注册日期",
+"	$1.AssessMonth = $8; //考核月",
+"	$1.AssessMonthCount = $9; //考核第几月",
+"	$1.ActivateStatus = $10; //激活状态",
+"	$1.ActivateDate = $11; //激活日期",
+"	$1.MerRealName = $12; //商户真实姓名",
+"	$1.MerIdcardNo = $13; //商户身份证号",
+"	$1.BizEnterNo = $14; //业务员编号",
+"	$1.BizEnterName = $15; //业务员名称",
+"	$1.ActVerifyFlag = $16; //激活验证标识",
+"	$1.Remark = $17; //注释",
+"	$1.CreateTime = $18; //创建时间",
+"	$1.UpdateTime = $19; //更新时间",
+"}"
+]
+},
+"获取快钱MPOS激活推送数量": {
+"prefix": "ym-db-KqActivateCallBack-FindAndCount",
+"body": [
+"int $1 = db.KqActivateCallBack.Count(m => $2);",
+]
+},
+"添加快钱MPOS激活推送": {
+"prefix": "ym-db-KqActivateCallBack-Create",
+"body": [
+"db.KqActivateCallBack.Add(new KqActivateCallBack()",
+"{",
+"	CreateDate = DateTime.Now,",
+"	UpdateDate = DateTime.Now,",
+"	MerNo = $1, //商户编号",
+"	MerName = $2, //商户名称",
+"	MerMobile = $3, //商户手机号",
+"	ProductType = $4, //产品类型",
+"	MerSnNo = $5, //终端机身号",
+"	MerRegDate = $6, //注册日期",
+"	AssessMonth = $7, //考核月",
+"	AssessMonthCount = $8, //考核第几月",
+"	ActivateStatus = $9, //激活状态",
+"	ActivateDate = $10, //激活日期",
+"	MerRealName = $11, //商户真实姓名",
+"	MerIdcardNo = $12, //商户身份证号",
+"	BizEnterNo = $13, //业务员编号",
+"	BizEnterName = $14, //业务员名称",
+"	ActVerifyFlag = $15, //激活验证标识",
+"	Remark = $16, //注释",
+"	CreateTime = $17, //创建时间",
+"	UpdateTime = $18, //更新时间",
+"});"
+]
+},"删除某个快钱MPOS激活推送": {
+"prefix": "ym-db-KqActivateCallBack-Delete",
+"body": [
+"KqActivateCallBack $1 = db.KqActivateCallBack.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	db.KqActivateCallBack.Remove($1);",
+"}"
+]
+},
+"查询快钱Mpos商户列表": {
+"prefix": "ym-db-KqMerchant-Find",
+"body": [
+"List<KqMerchant> $1 = db.KqMerchant.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (KqMerchant $3 in $1)",
+"{",
+"}"
+]
+},
+"查询快钱Mpos商户列表,并取值": {
+"prefix": "ym-db-KqMerchant-FindWithData",
+"body": [
+"List<KqMerchant> $1 = db.KqMerchant.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (KqMerchant $3 in $1)",
+"{",
+"	string MerNo = $3.MerNo; //商户编号",
+"	string MerName = $3.MerName; //商户名称",
+"	string MerMobile = $3.MerMobile; //商户手机号",
+"	string ProductType = $3.ProductType; //产品类型",
+"	string MerSnNo = $3.MerSnNo; //终端机身号",
+"	DateTime MerRegDate = $3.MerRegDate; //注册日期",
+"	DateTime MerBindDate = $3.MerBindDate; //商户绑定时间",
+"	string MerIdcardNo = $3.MerIdcardNo; //商户身份证号",
+"	string MerRealName = $3.MerRealName; //商户真实姓名",
+"	string BizEnterNo = $3.BizEnterNo; //业务员编号",
+"	string BizEnterName = $3.BizEnterName; //业务员名称",
+"	string SourceType = $3.SourceType; //来源类型",
+"	string Province = $3.Province; //省份",
+"	string City = $3.City; //城市",
+"	string Remark = $3.Remark; //注释",
+"	DateTime CreateTime = $3.CreateTime; //创建时间",
+"	DateTime UpdateTime = $3.UpdateTime; //更新时间",
+"}"
+]
+},
+"查询快钱Mpos商户": {
+"prefix": "ym-db-KqMerchant-Exist",
+"body": [
+"bool $1 = db.KqMerchant.Any(m => m.MerNo == $2);",
+]
+},
+"查询某个快钱Mpos商户,并取值": {
+"prefix": "ym-db-KqMerchant-FindByPrimaryKey",
+"body": [
+"KqMerchant $1 = db.KqMerchant.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	string MerNo = $1.MerNo; //商户编号",
+"	string MerName = $1.MerName; //商户名称",
+"	string MerMobile = $1.MerMobile; //商户手机号",
+"	string ProductType = $1.ProductType; //产品类型",
+"	string MerSnNo = $1.MerSnNo; //终端机身号",
+"	DateTime MerRegDate = $1.MerRegDate; //注册日期",
+"	DateTime MerBindDate = $1.MerBindDate; //商户绑定时间",
+"	string MerIdcardNo = $1.MerIdcardNo; //商户身份证号",
+"	string MerRealName = $1.MerRealName; //商户真实姓名",
+"	string BizEnterNo = $1.BizEnterNo; //业务员编号",
+"	string BizEnterName = $1.BizEnterName; //业务员名称",
+"	string SourceType = $1.SourceType; //来源类型",
+"	string Province = $1.Province; //省份",
+"	string City = $1.City; //城市",
+"	string Remark = $1.Remark; //注释",
+"	DateTime CreateTime = $1.CreateTime; //创建时间",
+"	DateTime UpdateTime = $1.UpdateTime; //更新时间",
+"}"
+]
+},
+"查询某个快钱Mpos商户,并赋值": {
+"prefix": "ym-db-KqMerchant-Update",
+"body": [
+"KqMerchant $1 = db.KqMerchant.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	$1.MerNo = $2; //商户编号",
+"	$1.MerName = $3; //商户名称",
+"	$1.MerMobile = $4; //商户手机号",
+"	$1.ProductType = $5; //产品类型",
+"	$1.MerSnNo = $6; //终端机身号",
+"	$1.MerRegDate = $7; //注册日期",
+"	$1.MerBindDate = $8; //商户绑定时间",
+"	$1.MerIdcardNo = $9; //商户身份证号",
+"	$1.MerRealName = $10; //商户真实姓名",
+"	$1.BizEnterNo = $11; //业务员编号",
+"	$1.BizEnterName = $12; //业务员名称",
+"	$1.SourceType = $13; //来源类型",
+"	$1.Province = $14; //省份",
+"	$1.City = $15; //城市",
+"	$1.Remark = $16; //注释",
+"	$1.CreateTime = $17; //创建时间",
+"	$1.UpdateTime = $18; //更新时间",
+"}"
+]
+},
+"获取快钱Mpos商户数量": {
+"prefix": "ym-db-KqMerchant-FindAndCount",
+"body": [
+"int $1 = db.KqMerchant.Count(m => $2);",
+]
+},
+"添加快钱Mpos商户": {
+"prefix": "ym-db-KqMerchant-Create",
+"body": [
+"db.KqMerchant.Add(new KqMerchant()",
+"{",
+"	CreateDate = DateTime.Now,",
+"	UpdateDate = DateTime.Now,",
+"	MerNo = $1, //商户编号",
+"	MerName = $2, //商户名称",
+"	MerMobile = $3, //商户手机号",
+"	ProductType = $4, //产品类型",
+"	MerSnNo = $5, //终端机身号",
+"	MerRegDate = $6, //注册日期",
+"	MerBindDate = $7, //商户绑定时间",
+"	MerIdcardNo = $8, //商户身份证号",
+"	MerRealName = $9, //商户真实姓名",
+"	BizEnterNo = $10, //业务员编号",
+"	BizEnterName = $11, //业务员名称",
+"	SourceType = $12, //来源类型",
+"	Province = $13, //省份",
+"	City = $14, //城市",
+"	Remark = $15, //注释",
+"	CreateTime = $16, //创建时间",
+"	UpdateTime = $17, //更新时间",
+"});"
+]
+},"删除某个快钱Mpos商户": {
+"prefix": "ym-db-KqMerchant-Delete",
+"body": [
+"KqMerchant $1 = db.KqMerchant.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	db.KqMerchant.Remove($1);",
+"}"
+]
+},
+"查询快钱Mpos交易抓取列表": {
+"prefix": "ym-db-KqTrade-Find",
+"body": [
+"List<KqTrade> $1 = db.KqTrade.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (KqTrade $3 in $1)",
+"{",
+"}"
+]
+},
+"查询快钱Mpos交易抓取列表,并取值": {
+"prefix": "ym-db-KqTrade-FindWithData",
+"body": [
+"List<KqTrade> $1 = db.KqTrade.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (KqTrade $3 in $1)",
+"{",
+"	string TradeSerialNo = $3.TradeSerialNo; //交易单号",
+"	string MerNo = $3.MerNo; //商户编号",
+"	string MerName = $3.MerName; //商户名称",
+"	decimal TradeAmount = $3.TradeAmount; //交易金额",
+"	string ProductType = $3.ProductType; //产品类型",
+"	string TradeStatus = $3.TradeStatus; //交易状态",
+"	string TradeDate = $3.TradeDate; //交易日期",
+"	string TradeTime = $3.TradeTime; //交易时间",
+"	string BankCardType = $3.BankCardType; //银行卡类型",
+"	string TradeSnNo = $3.TradeSnNo; //交易SN号",
+"	string DigAmtFlag = $3.DigAmtFlag; //挖款标识",
+"	decimal DigAmt = $3.DigAmt; //挖款金额",
+"	string Remark = $3.Remark; //注释",
+"	DateTime CreateTime = $3.CreateTime; //创建时间",
+"	DateTime UpdateTime = $3.UpdateTime; //更新时间",
+"	string BankCardNo = $3.BankCardNo; //交易卡号",
+"	decimal FeeAmount = $3.FeeAmount; //手续费",
+"	string SettleMethod = $3.SettleMethod; //出款方式",
+"	decimal SettleFee = $3.SettleFee; //出款手续费",
+"	string SmallDouble = $3.SmallDouble; //小额双免",
+"	string BizEnterNo = $3.BizEnterNo; //业务员编号",
+"	string BizEnterName = $3.BizEnterName; //业务员名称",
+"	string SourceType = $3.SourceType; //来源类型",
+"	decimal SettleTotalFee = $3.SettleTotalFee; //总手续费",
+"	string BillType = $3.BillType; //计费类型",
+"	decimal SettleFeeCostAmt = $3.SettleFeeCostAmt; //手续费成本金额",
+"	decimal SettleFeeRebateAmt = $3.SettleFeeRebateAmt; //手续费返佣金额",
+"	decimal SettleCostAmt = $3.SettleCostAmt; //出款成本金额",
+"	decimal SettleRebateAmt = $3.SettleRebateAmt; //出款返佣金额",
+"	decimal TotalCostAmt = $3.TotalCostAmt; //总成本",
+"	decimal TotalRebateAmt = $3.TotalRebateAmt; //总返佣额",
+"	string S0SettleStatus = $3.S0SettleStatus; //S0出款状态",
+"	string DigStatus = $3.DigStatus; //挖款状态",
+"	string KqTradeSeq = $3.KqTradeSeq; //快钱交易流水号",
+"	string InputModel = $3.InputModel; //输入模式",
+"}"
+]
+},
+"查询快钱Mpos交易抓取": {
+"prefix": "ym-db-KqTrade-Exist",
+"body": [
+"bool $1 = db.KqTrade.Any(m => m.MerNo == $2);",
+]
+},
+"查询某个快钱Mpos交易抓取,并取值": {
+"prefix": "ym-db-KqTrade-FindByPrimaryKey",
+"body": [
+"KqTrade $1 = db.KqTrade.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	string TradeSerialNo = $1.TradeSerialNo; //交易单号",
+"	string MerNo = $1.MerNo; //商户编号",
+"	string MerName = $1.MerName; //商户名称",
+"	decimal TradeAmount = $1.TradeAmount; //交易金额",
+"	string ProductType = $1.ProductType; //产品类型",
+"	string TradeStatus = $1.TradeStatus; //交易状态",
+"	string TradeDate = $1.TradeDate; //交易日期",
+"	string TradeTime = $1.TradeTime; //交易时间",
+"	string BankCardType = $1.BankCardType; //银行卡类型",
+"	string TradeSnNo = $1.TradeSnNo; //交易SN号",
+"	string DigAmtFlag = $1.DigAmtFlag; //挖款标识",
+"	decimal DigAmt = $1.DigAmt; //挖款金额",
+"	string Remark = $1.Remark; //注释",
+"	DateTime CreateTime = $1.CreateTime; //创建时间",
+"	DateTime UpdateTime = $1.UpdateTime; //更新时间",
+"	string BankCardNo = $1.BankCardNo; //交易卡号",
+"	decimal FeeAmount = $1.FeeAmount; //手续费",
+"	string SettleMethod = $1.SettleMethod; //出款方式",
+"	decimal SettleFee = $1.SettleFee; //出款手续费",
+"	string SmallDouble = $1.SmallDouble; //小额双免",
+"	string BizEnterNo = $1.BizEnterNo; //业务员编号",
+"	string BizEnterName = $1.BizEnterName; //业务员名称",
+"	string SourceType = $1.SourceType; //来源类型",
+"	decimal SettleTotalFee = $1.SettleTotalFee; //总手续费",
+"	string BillType = $1.BillType; //计费类型",
+"	decimal SettleFeeCostAmt = $1.SettleFeeCostAmt; //手续费成本金额",
+"	decimal SettleFeeRebateAmt = $1.SettleFeeRebateAmt; //手续费返佣金额",
+"	decimal SettleCostAmt = $1.SettleCostAmt; //出款成本金额",
+"	decimal SettleRebateAmt = $1.SettleRebateAmt; //出款返佣金额",
+"	decimal TotalCostAmt = $1.TotalCostAmt; //总成本",
+"	decimal TotalRebateAmt = $1.TotalRebateAmt; //总返佣额",
+"	string S0SettleStatus = $1.S0SettleStatus; //S0出款状态",
+"	string DigStatus = $1.DigStatus; //挖款状态",
+"	string KqTradeSeq = $1.KqTradeSeq; //快钱交易流水号",
+"	string InputModel = $1.InputModel; //输入模式",
+"}"
+]
+},
+"查询某个快钱Mpos交易抓取,并赋值": {
+"prefix": "ym-db-KqTrade-Update",
+"body": [
+"KqTrade $1 = db.KqTrade.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	$1.TradeSerialNo = $2; //交易单号",
+"	$1.MerNo = $3; //商户编号",
+"	$1.MerName = $4; //商户名称",
+"	$1.TradeAmount = $5; //交易金额",
+"	$1.ProductType = $6; //产品类型",
+"	$1.TradeStatus = $7; //交易状态",
+"	$1.TradeDate = $8; //交易日期",
+"	$1.TradeTime = $9; //交易时间",
+"	$1.BankCardType = $10; //银行卡类型",
+"	$1.TradeSnNo = $11; //交易SN号",
+"	$1.DigAmtFlag = $12; //挖款标识",
+"	$1.DigAmt = $13; //挖款金额",
+"	$1.Remark = $14; //注释",
+"	$1.CreateTime = $15; //创建时间",
+"	$1.UpdateTime = $16; //更新时间",
+"	$1.BankCardNo = $17; //交易卡号",
+"	$1.FeeAmount = $18; //手续费",
+"	$1.SettleMethod = $19; //出款方式",
+"	$1.SettleFee = $20; //出款手续费",
+"	$1.SmallDouble = $21; //小额双免",
+"	$1.BizEnterNo = $22; //业务员编号",
+"	$1.BizEnterName = $23; //业务员名称",
+"	$1.SourceType = $24; //来源类型",
+"	$1.SettleTotalFee = $25; //总手续费",
+"	$1.BillType = $26; //计费类型",
+"	$1.SettleFeeCostAmt = $27; //手续费成本金额",
+"	$1.SettleFeeRebateAmt = $28; //手续费返佣金额",
+"	$1.SettleCostAmt = $29; //出款成本金额",
+"	$1.SettleRebateAmt = $30; //出款返佣金额",
+"	$1.TotalCostAmt = $31; //总成本",
+"	$1.TotalRebateAmt = $32; //总返佣额",
+"	$1.S0SettleStatus = $33; //S0出款状态",
+"	$1.DigStatus = $34; //挖款状态",
+"	$1.KqTradeSeq = $35; //快钱交易流水号",
+"	$1.InputModel = $36; //输入模式",
+"}"
+]
+},
+"获取快钱Mpos交易抓取数量": {
+"prefix": "ym-db-KqTrade-FindAndCount",
+"body": [
+"int $1 = db.KqTrade.Count(m => $2);",
+]
+},
+"添加快钱Mpos交易抓取": {
+"prefix": "ym-db-KqTrade-Create",
+"body": [
+"db.KqTrade.Add(new KqTrade()",
+"{",
+"	CreateDate = DateTime.Now,",
+"	UpdateDate = DateTime.Now,",
+"	TradeSerialNo = $1, //交易单号",
+"	MerNo = $2, //商户编号",
+"	MerName = $3, //商户名称",
+"	TradeAmount = $4, //交易金额",
+"	ProductType = $5, //产品类型",
+"	TradeStatus = $6, //交易状态",
+"	TradeDate = $7, //交易日期",
+"	TradeTime = $8, //交易时间",
+"	BankCardType = $9, //银行卡类型",
+"	TradeSnNo = $10, //交易SN号",
+"	DigAmtFlag = $11, //挖款标识",
+"	DigAmt = $12, //挖款金额",
+"	Remark = $13, //注释",
+"	CreateTime = $14, //创建时间",
+"	UpdateTime = $15, //更新时间",
+"	BankCardNo = $16, //交易卡号",
+"	FeeAmount = $17, //手续费",
+"	SettleMethod = $18, //出款方式",
+"	SettleFee = $19, //出款手续费",
+"	SmallDouble = $20, //小额双免",
+"	BizEnterNo = $21, //业务员编号",
+"	BizEnterName = $22, //业务员名称",
+"	SourceType = $23, //来源类型",
+"	SettleTotalFee = $24, //总手续费",
+"	BillType = $25, //计费类型",
+"	SettleFeeCostAmt = $26, //手续费成本金额",
+"	SettleFeeRebateAmt = $27, //手续费返佣金额",
+"	SettleCostAmt = $28, //出款成本金额",
+"	SettleRebateAmt = $29, //出款返佣金额",
+"	TotalCostAmt = $30, //总成本",
+"	TotalRebateAmt = $31, //总返佣额",
+"	S0SettleStatus = $32, //S0出款状态",
+"	DigStatus = $33, //挖款状态",
+"	KqTradeSeq = $34, //快钱交易流水号",
+"	InputModel = $35, //输入模式",
+"});"
+]
+},"删除某个快钱Mpos交易抓取": {
+"prefix": "ym-db-KqTrade-Delete",
+"body": [
+"KqTrade $1 = db.KqTrade.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	db.KqTrade.Remove($1);",
+"}"
+]
+},
+"查询快钱Mpos交易推送列表": {
+"prefix": "ym-db-KqTradeCallBack-Find",
+"body": [
+"List<KqTradeCallBack> $1 = db.KqTradeCallBack.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (KqTradeCallBack $3 in $1)",
+"{",
+"}"
+]
+},
+"查询快钱Mpos交易推送列表,并取值": {
+"prefix": "ym-db-KqTradeCallBack-FindWithData",
+"body": [
+"List<KqTradeCallBack> $1 = db.KqTradeCallBack.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (KqTradeCallBack $3 in $1)",
+"{",
+"	string TradeSerialNo = $3.TradeSerialNo; //交易单号",
+"	string MerNo = $3.MerNo; //商户编号",
+"	string MerName = $3.MerName; //商户名称",
+"	decimal TradeAmount = $3.TradeAmount; //交易金额",
+"	string TradeReferNo = $3.TradeReferNo; //交易参考号",
+"	string BankAuthCode = $3.BankAuthCode; //银行授权码",
+"	string DiscountRateFlag = $3.DiscountRateFlag; //优惠费率标识",
+"	string ProductType = $3.ProductType; //产品类型",
+"	string Trade_status = $3.Trade_status; //交易状态",
+"	string ErrorCode = $3.ErrorCode; //错误码",
+"	string ErrorMsg = $3.ErrorMsg; //错误信息",
+"	string TradeDate = $3.TradeDate; //交易日期",
+"	string TradeTime = $3.TradeTime; //交易时间",
+"	string TradeType = $3.TradeType; //交易类型",
+"	string SerEntryMode = $3.SerEntryMode; //输入模式",
+"	string BankCardType = $3.BankCardType; //银行卡类型",
+"	string TradeSnNo = $3.TradeSnNo; //交易SN号",
+"	string DeviceType = $3.DeviceType; //设备类型",
+"	string MerMobile = $3.MerMobile; //商户手机号",
+"	string DigAmtFlag = $3.DigAmtFlag; //挖款标识",
+"	decimal DigAmt = $3.DigAmt; //挖款金额",
+"	string IsStoreCashier = $3.IsStoreCashier; //店面收银交易标识",
+"	string ReceiptType = $3.ReceiptType; //设备类型",
+"	string Remark = $3.Remark; //注释",
+"	DateTime CreateTime = $3.CreateTime; //创建时间",
+"	DateTime UpdateTime = $3.UpdateTime; //更新时间",
+"}"
+]
+},
+"查询快钱Mpos交易推送": {
+"prefix": "ym-db-KqTradeCallBack-Exist",
+"body": [
+"bool $1 = db.KqTradeCallBack.Any(m => m.MerNo == $2);",
+]
+},
+"查询某个快钱Mpos交易推送,并取值": {
+"prefix": "ym-db-KqTradeCallBack-FindByPrimaryKey",
+"body": [
+"KqTradeCallBack $1 = db.KqTradeCallBack.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	string TradeSerialNo = $1.TradeSerialNo; //交易单号",
+"	string MerNo = $1.MerNo; //商户编号",
+"	string MerName = $1.MerName; //商户名称",
+"	decimal TradeAmount = $1.TradeAmount; //交易金额",
+"	string TradeReferNo = $1.TradeReferNo; //交易参考号",
+"	string BankAuthCode = $1.BankAuthCode; //银行授权码",
+"	string DiscountRateFlag = $1.DiscountRateFlag; //优惠费率标识",
+"	string ProductType = $1.ProductType; //产品类型",
+"	string Trade_status = $1.Trade_status; //交易状态",
+"	string ErrorCode = $1.ErrorCode; //错误码",
+"	string ErrorMsg = $1.ErrorMsg; //错误信息",
+"	string TradeDate = $1.TradeDate; //交易日期",
+"	string TradeTime = $1.TradeTime; //交易时间",
+"	string TradeType = $1.TradeType; //交易类型",
+"	string SerEntryMode = $1.SerEntryMode; //输入模式",
+"	string BankCardType = $1.BankCardType; //银行卡类型",
+"	string TradeSnNo = $1.TradeSnNo; //交易SN号",
+"	string DeviceType = $1.DeviceType; //设备类型",
+"	string MerMobile = $1.MerMobile; //商户手机号",
+"	string DigAmtFlag = $1.DigAmtFlag; //挖款标识",
+"	decimal DigAmt = $1.DigAmt; //挖款金额",
+"	string IsStoreCashier = $1.IsStoreCashier; //店面收银交易标识",
+"	string ReceiptType = $1.ReceiptType; //设备类型",
+"	string Remark = $1.Remark; //注释",
+"	DateTime CreateTime = $1.CreateTime; //创建时间",
+"	DateTime UpdateTime = $1.UpdateTime; //更新时间",
+"}"
+]
+},
+"查询某个快钱Mpos交易推送,并赋值": {
+"prefix": "ym-db-KqTradeCallBack-Update",
+"body": [
+"KqTradeCallBack $1 = db.KqTradeCallBack.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	$1.TradeSerialNo = $2; //交易单号",
+"	$1.MerNo = $3; //商户编号",
+"	$1.MerName = $4; //商户名称",
+"	$1.TradeAmount = $5; //交易金额",
+"	$1.TradeReferNo = $6; //交易参考号",
+"	$1.BankAuthCode = $7; //银行授权码",
+"	$1.DiscountRateFlag = $8; //优惠费率标识",
+"	$1.ProductType = $9; //产品类型",
+"	$1.Trade_status = $10; //交易状态",
+"	$1.ErrorCode = $11; //错误码",
+"	$1.ErrorMsg = $12; //错误信息",
+"	$1.TradeDate = $13; //交易日期",
+"	$1.TradeTime = $14; //交易时间",
+"	$1.TradeType = $15; //交易类型",
+"	$1.SerEntryMode = $16; //输入模式",
+"	$1.BankCardType = $17; //银行卡类型",
+"	$1.TradeSnNo = $18; //交易SN号",
+"	$1.DeviceType = $19; //设备类型",
+"	$1.MerMobile = $20; //商户手机号",
+"	$1.DigAmtFlag = $21; //挖款标识",
+"	$1.DigAmt = $22; //挖款金额",
+"	$1.IsStoreCashier = $23; //店面收银交易标识",
+"	$1.ReceiptType = $24; //设备类型",
+"	$1.Remark = $25; //注释",
+"	$1.CreateTime = $26; //创建时间",
+"	$1.UpdateTime = $27; //更新时间",
+"}"
+]
+},
+"获取快钱Mpos交易推送数量": {
+"prefix": "ym-db-KqTradeCallBack-FindAndCount",
+"body": [
+"int $1 = db.KqTradeCallBack.Count(m => $2);",
+]
+},
+"添加快钱Mpos交易推送": {
+"prefix": "ym-db-KqTradeCallBack-Create",
+"body": [
+"db.KqTradeCallBack.Add(new KqTradeCallBack()",
+"{",
+"	CreateDate = DateTime.Now,",
+"	UpdateDate = DateTime.Now,",
+"	TradeSerialNo = $1, //交易单号",
+"	MerNo = $2, //商户编号",
+"	MerName = $3, //商户名称",
+"	TradeAmount = $4, //交易金额",
+"	TradeReferNo = $5, //交易参考号",
+"	BankAuthCode = $6, //银行授权码",
+"	DiscountRateFlag = $7, //优惠费率标识",
+"	ProductType = $8, //产品类型",
+"	Trade_status = $9, //交易状态",
+"	ErrorCode = $10, //错误码",
+"	ErrorMsg = $11, //错误信息",
+"	TradeDate = $12, //交易日期",
+"	TradeTime = $13, //交易时间",
+"	TradeType = $14, //交易类型",
+"	SerEntryMode = $15, //输入模式",
+"	BankCardType = $16, //银行卡类型",
+"	TradeSnNo = $17, //交易SN号",
+"	DeviceType = $18, //设备类型",
+"	MerMobile = $19, //商户手机号",
+"	DigAmtFlag = $20, //挖款标识",
+"	DigAmt = $21, //挖款金额",
+"	IsStoreCashier = $22, //店面收银交易标识",
+"	ReceiptType = $23, //设备类型",
+"	Remark = $24, //注释",
+"	CreateTime = $25, //创建时间",
+"	UpdateTime = $26, //更新时间",
+"});"
+]
+},"删除某个快钱Mpos交易推送": {
+"prefix": "ym-db-KqTradeCallBack-Delete",
+"body": [
+"KqTradeCallBack $1 = db.KqTradeCallBack.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	db.KqTradeCallBack.Remove($1);",
+"}"
+]
+},
+"查询快钱流量卡分佣交易列表": {
+"prefix": "ym-db-KqTradeFlux-Find",
+"body": [
+"List<KqTradeFlux> $1 = db.KqTradeFlux.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (KqTradeFlux $3 in $1)",
+"{",
+"}"
+]
+},
+"查询快钱流量卡分佣交易列表,并取值": {
+"prefix": "ym-db-KqTradeFlux-FindWithData",
+"body": [
+"List<KqTradeFlux> $1 = db.KqTradeFlux.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (KqTradeFlux $3 in $1)",
+"{",
+"	string TradeSerialNo = $3.TradeSerialNo; //交易单号",
+"	string MerNo = $3.MerNo; //商户编号",
+"	string MerName = $3.MerName; //商户名称",
+"	decimal TradeAmount = $3.TradeAmount; //交易金额",
+"	string ProductType = $3.ProductType; //产品类型",
+"	string TradeStatus = $3.TradeStatus; //交易状态",
+"	string TradeDate = $3.TradeDate; //交易日期",
+"	string TradeTime = $3.TradeTime; //交易时间",
+"	string BankCardType = $3.BankCardType; //银行卡类型",
+"	string TradeSnNo = $3.TradeSnNo; //交易SN号",
+"	string DigAmtFlag = $3.DigAmtFlag; //挖款标识",
+"	decimal DigAmt = $3.DigAmt; //挖款金额",
+"	string Remark = $3.Remark; //注释",
+"	DateTime CreateTime = $3.CreateTime; //创建时间",
+"	DateTime UpdateTime = $3.UpdateTime; //更新时间",
+"	string BankCardNo = $3.BankCardNo; //交易卡号",
+"	decimal FeeAmount = $3.FeeAmount; //手续费",
+"	string SettleMethod = $3.SettleMethod; //出款方式",
+"	decimal SettleFee = $3.SettleFee; //出款手续费",
+"	string SmallDouble = $3.SmallDouble; //小额双免",
+"	string BizEnterNo = $3.BizEnterNo; //业务员编号",
+"	string BizEnterName = $3.BizEnterName; //业务员名称",
+"	string SourceType = $3.SourceType; //来源类型",
+"	string BillType = $3.BillType; //计费类型",
+"	string KqTradeSeq = $3.KqTradeSeq; //快钱交易流水号",
+"	string InputModel = $3.InputModel; //输入模式",
+"	string TerminalNo = $3.TerminalNo; //终端号",
+"	string DeviceNetwork = $3.DeviceNetwork; //设备网络",
+"}"
+]
+},
+"查询快钱流量卡分佣交易": {
+"prefix": "ym-db-KqTradeFlux-Exist",
+"body": [
+"bool $1 = db.KqTradeFlux.Any(m => m.MerNo == $2);",
+]
+},
+"查询某个快钱流量卡分佣交易,并取值": {
+"prefix": "ym-db-KqTradeFlux-FindByPrimaryKey",
+"body": [
+"KqTradeFlux $1 = db.KqTradeFlux.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	string TradeSerialNo = $1.TradeSerialNo; //交易单号",
+"	string MerNo = $1.MerNo; //商户编号",
+"	string MerName = $1.MerName; //商户名称",
+"	decimal TradeAmount = $1.TradeAmount; //交易金额",
+"	string ProductType = $1.ProductType; //产品类型",
+"	string TradeStatus = $1.TradeStatus; //交易状态",
+"	string TradeDate = $1.TradeDate; //交易日期",
+"	string TradeTime = $1.TradeTime; //交易时间",
+"	string BankCardType = $1.BankCardType; //银行卡类型",
+"	string TradeSnNo = $1.TradeSnNo; //交易SN号",
+"	string DigAmtFlag = $1.DigAmtFlag; //挖款标识",
+"	decimal DigAmt = $1.DigAmt; //挖款金额",
+"	string Remark = $1.Remark; //注释",
+"	DateTime CreateTime = $1.CreateTime; //创建时间",
+"	DateTime UpdateTime = $1.UpdateTime; //更新时间",
+"	string BankCardNo = $1.BankCardNo; //交易卡号",
+"	decimal FeeAmount = $1.FeeAmount; //手续费",
+"	string SettleMethod = $1.SettleMethod; //出款方式",
+"	decimal SettleFee = $1.SettleFee; //出款手续费",
+"	string SmallDouble = $1.SmallDouble; //小额双免",
+"	string BizEnterNo = $1.BizEnterNo; //业务员编号",
+"	string BizEnterName = $1.BizEnterName; //业务员名称",
+"	string SourceType = $1.SourceType; //来源类型",
+"	string BillType = $1.BillType; //计费类型",
+"	string KqTradeSeq = $1.KqTradeSeq; //快钱交易流水号",
+"	string InputModel = $1.InputModel; //输入模式",
+"	string TerminalNo = $1.TerminalNo; //终端号",
+"	string DeviceNetwork = $1.DeviceNetwork; //设备网络",
+"}"
+]
+},
+"查询某个快钱流量卡分佣交易,并赋值": {
+"prefix": "ym-db-KqTradeFlux-Update",
+"body": [
+"KqTradeFlux $1 = db.KqTradeFlux.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	$1.TradeSerialNo = $2; //交易单号",
+"	$1.MerNo = $3; //商户编号",
+"	$1.MerName = $4; //商户名称",
+"	$1.TradeAmount = $5; //交易金额",
+"	$1.ProductType = $6; //产品类型",
+"	$1.TradeStatus = $7; //交易状态",
+"	$1.TradeDate = $8; //交易日期",
+"	$1.TradeTime = $9; //交易时间",
+"	$1.BankCardType = $10; //银行卡类型",
+"	$1.TradeSnNo = $11; //交易SN号",
+"	$1.DigAmtFlag = $12; //挖款标识",
+"	$1.DigAmt = $13; //挖款金额",
+"	$1.Remark = $14; //注释",
+"	$1.CreateTime = $15; //创建时间",
+"	$1.UpdateTime = $16; //更新时间",
+"	$1.BankCardNo = $17; //交易卡号",
+"	$1.FeeAmount = $18; //手续费",
+"	$1.SettleMethod = $19; //出款方式",
+"	$1.SettleFee = $20; //出款手续费",
+"	$1.SmallDouble = $21; //小额双免",
+"	$1.BizEnterNo = $22; //业务员编号",
+"	$1.BizEnterName = $23; //业务员名称",
+"	$1.SourceType = $24; //来源类型",
+"	$1.BillType = $25; //计费类型",
+"	$1.KqTradeSeq = $26; //快钱交易流水号",
+"	$1.InputModel = $27; //输入模式",
+"	$1.TerminalNo = $28; //终端号",
+"	$1.DeviceNetwork = $29; //设备网络",
+"}"
+]
+},
+"获取快钱流量卡分佣交易数量": {
+"prefix": "ym-db-KqTradeFlux-FindAndCount",
+"body": [
+"int $1 = db.KqTradeFlux.Count(m => $2);",
+]
+},
+"添加快钱流量卡分佣交易": {
+"prefix": "ym-db-KqTradeFlux-Create",
+"body": [
+"db.KqTradeFlux.Add(new KqTradeFlux()",
+"{",
+"	CreateDate = DateTime.Now,",
+"	UpdateDate = DateTime.Now,",
+"	TradeSerialNo = $1, //交易单号",
+"	MerNo = $2, //商户编号",
+"	MerName = $3, //商户名称",
+"	TradeAmount = $4, //交易金额",
+"	ProductType = $5, //产品类型",
+"	TradeStatus = $6, //交易状态",
+"	TradeDate = $7, //交易日期",
+"	TradeTime = $8, //交易时间",
+"	BankCardType = $9, //银行卡类型",
+"	TradeSnNo = $10, //交易SN号",
+"	DigAmtFlag = $11, //挖款标识",
+"	DigAmt = $12, //挖款金额",
+"	Remark = $13, //注释",
+"	CreateTime = $14, //创建时间",
+"	UpdateTime = $15, //更新时间",
+"	BankCardNo = $16, //交易卡号",
+"	FeeAmount = $17, //手续费",
+"	SettleMethod = $18, //出款方式",
+"	SettleFee = $19, //出款手续费",
+"	SmallDouble = $20, //小额双免",
+"	BizEnterNo = $21, //业务员编号",
+"	BizEnterName = $22, //业务员名称",
+"	SourceType = $23, //来源类型",
+"	BillType = $24, //计费类型",
+"	KqTradeSeq = $25, //快钱交易流水号",
+"	InputModel = $26, //输入模式",
+"	TerminalNo = $27, //终端号",
+"	DeviceNetwork = $28, //设备网络",
+"});"
+]
+},"删除某个快钱流量卡分佣交易": {
+"prefix": "ym-db-KqTradeFlux-Delete",
+"body": [
+"KqTradeFlux $1 = db.KqTradeFlux.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	db.KqTradeFlux.Remove($1);",
+"}"
+]
+},
+"查询快闪刷商户绑定列表": {
+"prefix": "ym-db-KssBind-Find",
+"body": [
+"List<KssBind> $1 = db.KssBind.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (KssBind $3 in $1)",
+"{",
+"}"
+]
+},
+"查询快闪刷商户绑定列表,并取值": {
+"prefix": "ym-db-KssBind-FindWithData",
+"body": [
+"List<KssBind> $1 = db.KssBind.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (KssBind $3 in $1)",
+"{",
+"	string AgentName = $3.AgentName; //机构名称",
+"	string MerNo = $3.MerNo; //商户编号",
+"	string MerName = $3.MerName; //商户名称",
+"	string MerSnNo = $3.MerSnNo; //终端机身号",
+"	DateTime MerOperateDate = $3.MerOperateDate; //操作时间",
+"	string MerOperateType = $3.MerOperateType; //操作类型",
+"	string MerStatus = $3.MerStatus; //商户状态",
+"	string ProductType = $3.ProductType; //产品类型",
+"	string MerNewSnNo = $3.MerNewSnNo; //新终端机身号",
+"	string Remark = $3.Remark; //注释",
+"	DateTime CreateTime = $3.CreateTime; //创建时间",
+"	DateTime UpdateTime = $3.UpdateTime; //更新时间",
+"}"
+]
+},
+"查询快闪刷商户绑定": {
+"prefix": "ym-db-KssBind-Exist",
+"body": [
+"bool $1 = db.KssBind.Any(m => m.MerNo == $2);",
+]
+},
+"查询某个快闪刷商户绑定,并取值": {
+"prefix": "ym-db-KssBind-FindByPrimaryKey",
+"body": [
+"KssBind $1 = db.KssBind.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	string AgentName = $1.AgentName; //机构名称",
+"	string MerNo = $1.MerNo; //商户编号",
+"	string MerName = $1.MerName; //商户名称",
+"	string MerSnNo = $1.MerSnNo; //终端机身号",
+"	DateTime MerOperateDate = $1.MerOperateDate; //操作时间",
+"	string MerOperateType = $1.MerOperateType; //操作类型",
+"	string MerStatus = $1.MerStatus; //商户状态",
+"	string ProductType = $1.ProductType; //产品类型",
+"	string MerNewSnNo = $1.MerNewSnNo; //新终端机身号",
+"	string Remark = $1.Remark; //注释",
+"	DateTime CreateTime = $1.CreateTime; //创建时间",
+"	DateTime UpdateTime = $1.UpdateTime; //更新时间",
+"}"
+]
+},
+"查询某个快闪刷商户绑定,并赋值": {
+"prefix": "ym-db-KssBind-Update",
+"body": [
+"KssBind $1 = db.KssBind.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	$1.AgentName = $2; //机构名称",
+"	$1.MerNo = $3; //商户编号",
+"	$1.MerName = $4; //商户名称",
+"	$1.MerSnNo = $5; //终端机身号",
+"	$1.MerOperateDate = $6; //操作时间",
+"	$1.MerOperateType = $7; //操作类型",
+"	$1.MerStatus = $8; //商户状态",
+"	$1.ProductType = $9; //产品类型",
+"	$1.MerNewSnNo = $10; //新终端机身号",
+"	$1.Remark = $11; //注释",
+"	$1.CreateTime = $12; //创建时间",
+"	$1.UpdateTime = $13; //更新时间",
+"}"
+]
+},
+"获取快闪刷商户绑定数量": {
+"prefix": "ym-db-KssBind-FindAndCount",
+"body": [
+"int $1 = db.KssBind.Count(m => $2);",
+]
+},
+"添加快闪刷商户绑定": {
+"prefix": "ym-db-KssBind-Create",
+"body": [
+"db.KssBind.Add(new KssBind()",
+"{",
+"	CreateDate = DateTime.Now,",
+"	UpdateDate = DateTime.Now,",
+"	AgentName = $1, //机构名称",
+"	MerNo = $2, //商户编号",
+"	MerName = $3, //商户名称",
+"	MerSnNo = $4, //终端机身号",
+"	MerOperateDate = $5, //操作时间",
+"	MerOperateType = $6, //操作类型",
+"	MerStatus = $7, //商户状态",
+"	ProductType = $8, //产品类型",
+"	MerNewSnNo = $9, //新终端机身号",
+"	Remark = $10, //注释",
+"	CreateTime = $11, //创建时间",
+"	UpdateTime = $12, //更新时间",
+"});"
+]
+},"删除某个快闪刷商户绑定": {
+"prefix": "ym-db-KssBind-Delete",
+"body": [
+"KssBind $1 = db.KssBind.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	db.KssBind.Remove($1);",
+"}"
+]
+},
+"查询快闪刷商户免押金列表": {
+"prefix": "ym-db-KssFreeDeposit-Find",
+"body": [
+"List<KssFreeDeposit> $1 = db.KssFreeDeposit.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (KssFreeDeposit $3 in $1)",
+"{",
+"}"
+]
+},
+"查询快闪刷商户免押金列表,并取值": {
+"prefix": "ym-db-KssFreeDeposit-FindWithData",
+"body": [
+"List<KssFreeDeposit> $1 = db.KssFreeDeposit.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (KssFreeDeposit $3 in $1)",
+"{",
+"	string AgentName = $3.AgentName; //机构名称",
+"	string MerNo = $3.MerNo; //商户编号",
+"	string MerName = $3.MerName; //商户名称",
+"	string ProductType = $3.ProductType; //产品类型",
+"	DateTime MerBindDate = $3.MerBindDate; //绑定日期",
+"	string MerSnNo = $3.MerSnNo; //终端机身号",
+"	string ActNo = $3.ActNo; //押金活动ID",
+"	string ActName = $3.ActName; //押金活动名称",
+"	string NewFlag = $3.NewFlag; //是否新增",
+"	string Remark = $3.Remark; //注释",
+"	DateTime CreateTime = $3.CreateTime; //创建时间",
+"	DateTime UpdateTime = $3.UpdateTime; //更新时间",
+"}"
+]
+},
+"查询快闪刷商户免押金": {
+"prefix": "ym-db-KssFreeDeposit-Exist",
+"body": [
+"bool $1 = db.KssFreeDeposit.Any(m => m.MerNo == $2);",
+]
+},
+"查询某个快闪刷商户免押金,并取值": {
+"prefix": "ym-db-KssFreeDeposit-FindByPrimaryKey",
+"body": [
+"KssFreeDeposit $1 = db.KssFreeDeposit.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	string AgentName = $1.AgentName; //机构名称",
+"	string MerNo = $1.MerNo; //商户编号",
+"	string MerName = $1.MerName; //商户名称",
+"	string ProductType = $1.ProductType; //产品类型",
+"	DateTime MerBindDate = $1.MerBindDate; //绑定日期",
+"	string MerSnNo = $1.MerSnNo; //终端机身号",
+"	string ActNo = $1.ActNo; //押金活动ID",
+"	string ActName = $1.ActName; //押金活动名称",
+"	string NewFlag = $1.NewFlag; //是否新增",
+"	string Remark = $1.Remark; //注释",
+"	DateTime CreateTime = $1.CreateTime; //创建时间",
+"	DateTime UpdateTime = $1.UpdateTime; //更新时间",
+"}"
+]
+},
+"查询某个快闪刷商户免押金,并赋值": {
+"prefix": "ym-db-KssFreeDeposit-Update",
+"body": [
+"KssFreeDeposit $1 = db.KssFreeDeposit.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	$1.AgentName = $2; //机构名称",
+"	$1.MerNo = $3; //商户编号",
+"	$1.MerName = $4; //商户名称",
+"	$1.ProductType = $5; //产品类型",
+"	$1.MerBindDate = $6; //绑定日期",
+"	$1.MerSnNo = $7; //终端机身号",
+"	$1.ActNo = $8; //押金活动ID",
+"	$1.ActName = $9; //押金活动名称",
+"	$1.NewFlag = $10; //是否新增",
+"	$1.Remark = $11; //注释",
+"	$1.CreateTime = $12; //创建时间",
+"	$1.UpdateTime = $13; //更新时间",
+"}"
+]
+},
+"获取快闪刷商户免押金数量": {
+"prefix": "ym-db-KssFreeDeposit-FindAndCount",
+"body": [
+"int $1 = db.KssFreeDeposit.Count(m => $2);",
+]
+},
+"添加快闪刷商户免押金": {
+"prefix": "ym-db-KssFreeDeposit-Create",
+"body": [
+"db.KssFreeDeposit.Add(new KssFreeDeposit()",
+"{",
+"	CreateDate = DateTime.Now,",
+"	UpdateDate = DateTime.Now,",
+"	AgentName = $1, //机构名称",
+"	MerNo = $2, //商户编号",
+"	MerName = $3, //商户名称",
+"	ProductType = $4, //产品类型",
+"	MerBindDate = $5, //绑定日期",
+"	MerSnNo = $6, //终端机身号",
+"	ActNo = $7, //押金活动ID",
+"	ActName = $8, //押金活动名称",
+"	NewFlag = $9, //是否新增",
+"	Remark = $10, //注释",
+"	CreateTime = $11, //创建时间",
+"	UpdateTime = $12, //更新时间",
+"});"
+]
+},"删除某个快闪刷商户免押金": {
+"prefix": "ym-db-KssFreeDeposit-Delete",
+"body": [
+"KssFreeDeposit $1 = db.KssFreeDeposit.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	db.KssFreeDeposit.Remove($1);",
+"}"
+]
+},
+"查询快闪刷商户列表": {
+"prefix": "ym-db-KssMerchant-Find",
+"body": [
+"List<KssMerchant> $1 = db.KssMerchant.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (KssMerchant $3 in $1)",
+"{",
+"}"
+]
+},
+"查询快闪刷商户列表,并取值": {
+"prefix": "ym-db-KssMerchant-FindWithData",
+"body": [
+"List<KssMerchant> $1 = db.KssMerchant.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (KssMerchant $3 in $1)",
+"{",
+"	string MerNo = $3.MerNo; //商户编号",
+"	string MerName = $3.MerName; //商户名称",
+"	string AgentName = $3.AgentName; //机构名称",
+"	string MerRealName = $3.MerRealName; //商户真实姓名",
+"	string MerMobile = $3.MerMobile; //商户手机号",
+"	string MerIdcardNo = $3.MerIdcardNo; //商户身份证号",
+"	DateTime MerRegDate = $3.MerRegDate; //注册日期",
+"	DateTime MerAuditDate = $3.MerAuditDate; //审核日期",
+"	string MerStatus = $3.MerStatus; //商户状态",
+"	string ProductType = $3.ProductType; //产品类型",
+"	string Province = $3.Province; //商户注册省份",
+"	string City = $3.City; //商户注册城市",
+"	string Remark = $3.Remark; //注释",
+"	DateTime CreateTime = $3.CreateTime; //创建时间",
+"	DateTime UpdateTime = $3.UpdateTime; //更新时间",
+"}"
+]
+},
+"查询快闪刷商户": {
+"prefix": "ym-db-KssMerchant-Exist",
+"body": [
+"bool $1 = db.KssMerchant.Any(m => m.MerNo == $2);",
+]
+},
+"查询某个快闪刷商户,并取值": {
+"prefix": "ym-db-KssMerchant-FindByPrimaryKey",
+"body": [
+"KssMerchant $1 = db.KssMerchant.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	string MerNo = $1.MerNo; //商户编号",
+"	string MerName = $1.MerName; //商户名称",
+"	string AgentName = $1.AgentName; //机构名称",
+"	string MerRealName = $1.MerRealName; //商户真实姓名",
+"	string MerMobile = $1.MerMobile; //商户手机号",
+"	string MerIdcardNo = $1.MerIdcardNo; //商户身份证号",
+"	DateTime MerRegDate = $1.MerRegDate; //注册日期",
+"	DateTime MerAuditDate = $1.MerAuditDate; //审核日期",
+"	string MerStatus = $1.MerStatus; //商户状态",
+"	string ProductType = $1.ProductType; //产品类型",
+"	string Province = $1.Province; //商户注册省份",
+"	string City = $1.City; //商户注册城市",
+"	string Remark = $1.Remark; //注释",
+"	DateTime CreateTime = $1.CreateTime; //创建时间",
+"	DateTime UpdateTime = $1.UpdateTime; //更新时间",
+"}"
+]
+},
+"查询某个快闪刷商户,并赋值": {
+"prefix": "ym-db-KssMerchant-Update",
+"body": [
+"KssMerchant $1 = db.KssMerchant.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	$1.MerNo = $2; //商户编号",
+"	$1.MerName = $3; //商户名称",
+"	$1.AgentName = $4; //机构名称",
+"	$1.MerRealName = $5; //商户真实姓名",
+"	$1.MerMobile = $6; //商户手机号",
+"	$1.MerIdcardNo = $7; //商户身份证号",
+"	$1.MerRegDate = $8; //注册日期",
+"	$1.MerAuditDate = $9; //审核日期",
+"	$1.MerStatus = $10; //商户状态",
+"	$1.ProductType = $11; //产品类型",
+"	$1.Province = $12; //商户注册省份",
+"	$1.City = $13; //商户注册城市",
+"	$1.Remark = $14; //注释",
+"	$1.CreateTime = $15; //创建时间",
+"	$1.UpdateTime = $16; //更新时间",
+"}"
+]
+},
+"获取快闪刷商户数量": {
+"prefix": "ym-db-KssMerchant-FindAndCount",
+"body": [
+"int $1 = db.KssMerchant.Count(m => $2);",
+]
+},
+"添加快闪刷商户": {
+"prefix": "ym-db-KssMerchant-Create",
+"body": [
+"db.KssMerchant.Add(new KssMerchant()",
+"{",
+"	CreateDate = DateTime.Now,",
+"	UpdateDate = DateTime.Now,",
+"	MerNo = $1, //商户编号",
+"	MerName = $2, //商户名称",
+"	AgentName = $3, //机构名称",
+"	MerRealName = $4, //商户真实姓名",
+"	MerMobile = $5, //商户手机号",
+"	MerIdcardNo = $6, //商户身份证号",
+"	MerRegDate = $7, //注册日期",
+"	MerAuditDate = $8, //审核日期",
+"	MerStatus = $9, //商户状态",
+"	ProductType = $10, //产品类型",
+"	Province = $11, //商户注册省份",
+"	City = $12, //商户注册城市",
+"	Remark = $13, //注释",
+"	CreateTime = $14, //创建时间",
+"	UpdateTime = $15, //更新时间",
+"});"
+]
+},"删除某个快闪刷商户": {
+"prefix": "ym-db-KssMerchant-Delete",
+"body": [
+"KssMerchant $1 = db.KssMerchant.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	db.KssMerchant.Remove($1);",
+"}"
+]
+},
+"查询快闪刷商户返押列表": {
+"prefix": "ym-db-KssReturnDeposit-Find",
+"body": [
+"List<KssReturnDeposit> $1 = db.KssReturnDeposit.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (KssReturnDeposit $3 in $1)",
+"{",
+"}"
+]
+},
+"查询快闪刷商户返押列表,并取值": {
+"prefix": "ym-db-KssReturnDeposit-FindWithData",
+"body": [
+"List<KssReturnDeposit> $1 = db.KssReturnDeposit.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (KssReturnDeposit $3 in $1)",
+"{",
+"	string AgentName = $3.AgentName; //机构名称",
+"	string MerNo = $3.MerNo; //商户编号",
+"	string MerName = $3.MerName; //商户名称",
+"	string ActNo = $3.ActNo; //押金活动ID",
+"	string ActName = $3.ActName; //押金活动名称",
+"	DateTime MerDisposeDate = $3.MerDisposeDate; //押金日期",
+"	DateTime MerStdDate = $3.MerStdDate; //达标日期",
+"	int IntervalDay = $3.IntervalDay; //间隔天数",
+"	string ProductType = $3.ProductType; //产品类型",
+"	string MerSnNo = $3.MerSnNo; //终端机身号",
+"	decimal RetAmount = $3.RetAmount; //返押金额",
+"	string RetFlag = $3.RetFlag; //是否返还",
+"	string RetOrderNo = $3.RetOrderNo; //返押订单ID",
+"	string Remark = $3.Remark; //注释",
+"	DateTime CreateTime = $3.CreateTime; //创建时间",
+"	DateTime UpdateTime = $3.UpdateTime; //更新时间",
+"}"
+]
+},
+"查询快闪刷商户返押": {
+"prefix": "ym-db-KssReturnDeposit-Exist",
+"body": [
+"bool $1 = db.KssReturnDeposit.Any(m => m.MerNo == $2);",
+]
+},
+"查询某个快闪刷商户返押,并取值": {
+"prefix": "ym-db-KssReturnDeposit-FindByPrimaryKey",
+"body": [
+"KssReturnDeposit $1 = db.KssReturnDeposit.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	string AgentName = $1.AgentName; //机构名称",
+"	string MerNo = $1.MerNo; //商户编号",
+"	string MerName = $1.MerName; //商户名称",
+"	string ActNo = $1.ActNo; //押金活动ID",
+"	string ActName = $1.ActName; //押金活动名称",
+"	DateTime MerDisposeDate = $1.MerDisposeDate; //押金日期",
+"	DateTime MerStdDate = $1.MerStdDate; //达标日期",
+"	int IntervalDay = $1.IntervalDay; //间隔天数",
+"	string ProductType = $1.ProductType; //产品类型",
+"	string MerSnNo = $1.MerSnNo; //终端机身号",
+"	decimal RetAmount = $1.RetAmount; //返押金额",
+"	string RetFlag = $1.RetFlag; //是否返还",
+"	string RetOrderNo = $1.RetOrderNo; //返押订单ID",
+"	string Remark = $1.Remark; //注释",
+"	DateTime CreateTime = $1.CreateTime; //创建时间",
+"	DateTime UpdateTime = $1.UpdateTime; //更新时间",
+"}"
+]
+},
+"查询某个快闪刷商户返押,并赋值": {
+"prefix": "ym-db-KssReturnDeposit-Update",
+"body": [
+"KssReturnDeposit $1 = db.KssReturnDeposit.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	$1.AgentName = $2; //机构名称",
+"	$1.MerNo = $3; //商户编号",
+"	$1.MerName = $4; //商户名称",
+"	$1.ActNo = $5; //押金活动ID",
+"	$1.ActName = $6; //押金活动名称",
+"	$1.MerDisposeDate = $7; //押金日期",
+"	$1.MerStdDate = $8; //达标日期",
+"	$1.IntervalDay = $9; //间隔天数",
+"	$1.ProductType = $10; //产品类型",
+"	$1.MerSnNo = $11; //终端机身号",
+"	$1.RetAmount = $12; //返押金额",
+"	$1.RetFlag = $13; //是否返还",
+"	$1.RetOrderNo = $14; //返押订单ID",
+"	$1.Remark = $15; //注释",
+"	$1.CreateTime = $16; //创建时间",
+"	$1.UpdateTime = $17; //更新时间",
+"}"
+]
+},
+"获取快闪刷商户返押数量": {
+"prefix": "ym-db-KssReturnDeposit-FindAndCount",
+"body": [
+"int $1 = db.KssReturnDeposit.Count(m => $2);",
+]
+},
+"添加快闪刷商户返押": {
+"prefix": "ym-db-KssReturnDeposit-Create",
+"body": [
+"db.KssReturnDeposit.Add(new KssReturnDeposit()",
+"{",
+"	CreateDate = DateTime.Now,",
+"	UpdateDate = DateTime.Now,",
+"	AgentName = $1, //机构名称",
+"	MerNo = $2, //商户编号",
+"	MerName = $3, //商户名称",
+"	ActNo = $4, //押金活动ID",
+"	ActName = $5, //押金活动名称",
+"	MerDisposeDate = $6, //押金日期",
+"	MerStdDate = $7, //达标日期",
+"	IntervalDay = $8, //间隔天数",
+"	ProductType = $9, //产品类型",
+"	MerSnNo = $10, //终端机身号",
+"	RetAmount = $11, //返押金额",
+"	RetFlag = $12, //是否返还",
+"	RetOrderNo = $13, //返押订单ID",
+"	Remark = $14, //注释",
+"	CreateTime = $15, //创建时间",
+"	UpdateTime = $16, //更新时间",
+"});"
+]
+},"删除某个快闪刷商户返押": {
+"prefix": "ym-db-KssReturnDeposit-Delete",
+"body": [
+"KssReturnDeposit $1 = db.KssReturnDeposit.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	db.KssReturnDeposit.Remove($1);",
+"}"
+]
+},
+"查询快闪刷商户在网达标列表": {
+"prefix": "ym-db-KssStageRwd-Find",
+"body": [
+"List<KssStageRwd> $1 = db.KssStageRwd.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (KssStageRwd $3 in $1)",
+"{",
+"}"
+]
+},
+"查询快闪刷商户在网达标列表,并取值": {
+"prefix": "ym-db-KssStageRwd-FindWithData",
+"body": [
+"List<KssStageRwd> $1 = db.KssStageRwd.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (KssStageRwd $3 in $1)",
+"{",
+"	string AgentName = $3.AgentName; //机构名称",
+"	string MerNo = $3.MerNo; //商户编号",
+"	string MerName = $3.MerName; //商户名称",
+"	string ProductType = $3.ProductType; //产品类型",
+"	DateTime MerBindDate = $3.MerBindDate; //绑定日期",
+"	string MerSnNo = $3.MerSnNo; //终端机身号",
+"	string ActNo = $3.ActNo; //押金活动ID",
+"	string ActName = $3.ActName; //押金活动名称",
+"	string MerStdStage = $3.MerStdStage; //达标阶段",
+"	DateTime MerStdDate = $3.MerStdDate; //达标日期",
+"	string MerStdStatus = $3.MerStdStatus; //达标状态",
+"	string NewFlag = $3.NewFlag; //是否新增",
+"	string Remark = $3.Remark; //注释",
+"	DateTime CreateTime = $3.CreateTime; //创建时间",
+"	DateTime UpdateTime = $3.UpdateTime; //更新时间",
+"}"
+]
+},
+"查询快闪刷商户在网达标": {
+"prefix": "ym-db-KssStageRwd-Exist",
+"body": [
+"bool $1 = db.KssStageRwd.Any(m => m.MerNo == $2);",
+]
+},
+"查询某个快闪刷商户在网达标,并取值": {
+"prefix": "ym-db-KssStageRwd-FindByPrimaryKey",
+"body": [
+"KssStageRwd $1 = db.KssStageRwd.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	string AgentName = $1.AgentName; //机构名称",
+"	string MerNo = $1.MerNo; //商户编号",
+"	string MerName = $1.MerName; //商户名称",
+"	string ProductType = $1.ProductType; //产品类型",
+"	DateTime MerBindDate = $1.MerBindDate; //绑定日期",
+"	string MerSnNo = $1.MerSnNo; //终端机身号",
+"	string ActNo = $1.ActNo; //押金活动ID",
+"	string ActName = $1.ActName; //押金活动名称",
+"	string MerStdStage = $1.MerStdStage; //达标阶段",
+"	DateTime MerStdDate = $1.MerStdDate; //达标日期",
+"	string MerStdStatus = $1.MerStdStatus; //达标状态",
+"	string NewFlag = $1.NewFlag; //是否新增",
+"	string Remark = $1.Remark; //注释",
+"	DateTime CreateTime = $1.CreateTime; //创建时间",
+"	DateTime UpdateTime = $1.UpdateTime; //更新时间",
+"}"
+]
+},
+"查询某个快闪刷商户在网达标,并赋值": {
+"prefix": "ym-db-KssStageRwd-Update",
+"body": [
+"KssStageRwd $1 = db.KssStageRwd.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	$1.AgentName = $2; //机构名称",
+"	$1.MerNo = $3; //商户编号",
+"	$1.MerName = $4; //商户名称",
+"	$1.ProductType = $5; //产品类型",
+"	$1.MerBindDate = $6; //绑定日期",
+"	$1.MerSnNo = $7; //终端机身号",
+"	$1.ActNo = $8; //押金活动ID",
+"	$1.ActName = $9; //押金活动名称",
+"	$1.MerStdStage = $10; //达标阶段",
+"	$1.MerStdDate = $11; //达标日期",
+"	$1.MerStdStatus = $12; //达标状态",
+"	$1.NewFlag = $13; //是否新增",
+"	$1.Remark = $14; //注释",
+"	$1.CreateTime = $15; //创建时间",
+"	$1.UpdateTime = $16; //更新时间",
+"}"
+]
+},
+"获取快闪刷商户在网达标数量": {
+"prefix": "ym-db-KssStageRwd-FindAndCount",
+"body": [
+"int $1 = db.KssStageRwd.Count(m => $2);",
+]
+},
+"添加快闪刷商户在网达标": {
+"prefix": "ym-db-KssStageRwd-Create",
+"body": [
+"db.KssStageRwd.Add(new KssStageRwd()",
+"{",
+"	CreateDate = DateTime.Now,",
+"	UpdateDate = DateTime.Now,",
+"	AgentName = $1, //机构名称",
+"	MerNo = $2, //商户编号",
+"	MerName = $3, //商户名称",
+"	ProductType = $4, //产品类型",
+"	MerBindDate = $5, //绑定日期",
+"	MerSnNo = $6, //终端机身号",
+"	ActNo = $7, //押金活动ID",
+"	ActName = $8, //押金活动名称",
+"	MerStdStage = $9, //达标阶段",
+"	MerStdDate = $10, //达标日期",
+"	MerStdStatus = $11, //达标状态",
+"	NewFlag = $12, //是否新增",
+"	Remark = $13, //注释",
+"	CreateTime = $14, //创建时间",
+"	UpdateTime = $15, //更新时间",
+"});"
+]
+},"删除某个快闪刷商户在网达标": {
+"prefix": "ym-db-KssStageRwd-Delete",
+"body": [
+"KssStageRwd $1 = db.KssStageRwd.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	db.KssStageRwd.Remove($1);",
+"}"
+]
+},
+"查询快闪刷商户首刷列表": {
+"prefix": "ym-db-KssTradeFirst-Find",
+"body": [
+"List<KssTradeFirst> $1 = db.KssTradeFirst.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (KssTradeFirst $3 in $1)",
+"{",
+"}"
+]
+},
+"查询快闪刷商户首刷列表,并取值": {
+"prefix": "ym-db-KssTradeFirst-FindWithData",
+"body": [
+"List<KssTradeFirst> $1 = db.KssTradeFirst.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (KssTradeFirst $3 in $1)",
+"{",
+"	string AgentName = $3.AgentName; //机构名称",
+"	string MerNo = $3.MerNo; //商户编号",
+"	string MerName = $3.MerName; //商户名称",
+"	string ProductType = $3.ProductType; //产品类型",
+"	DateTime MerBindDate = $3.MerBindDate; //绑定日期",
+"	string MerSnNo = $3.MerSnNo; //终端机身号",
+"	string ActNo = $3.ActNo; //押金活动ID",
+"	string ActName = $3.ActName; //押金活动名称",
+"	DateTime MerStdDate = $3.MerStdDate; //达标日期",
+"	string MerStdStatus = $3.MerStdStatus; //达标状态",
+"	string NewFlag = $3.NewFlag; //是否新增",
+"	string Remark = $3.Remark; //注释",
+"	DateTime CreateTime = $3.CreateTime; //创建时间",
+"	DateTime UpdateTime = $3.UpdateTime; //更新时间",
+"}"
+]
+},
+"查询快闪刷商户首刷": {
+"prefix": "ym-db-KssTradeFirst-Exist",
+"body": [
+"bool $1 = db.KssTradeFirst.Any(m => m.MerNo == $2);",
+]
+},
+"查询某个快闪刷商户首刷,并取值": {
+"prefix": "ym-db-KssTradeFirst-FindByPrimaryKey",
+"body": [
+"KssTradeFirst $1 = db.KssTradeFirst.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	string AgentName = $1.AgentName; //机构名称",
+"	string MerNo = $1.MerNo; //商户编号",
+"	string MerName = $1.MerName; //商户名称",
+"	string ProductType = $1.ProductType; //产品类型",
+"	DateTime MerBindDate = $1.MerBindDate; //绑定日期",
+"	string MerSnNo = $1.MerSnNo; //终端机身号",
+"	string ActNo = $1.ActNo; //押金活动ID",
+"	string ActName = $1.ActName; //押金活动名称",
+"	DateTime MerStdDate = $1.MerStdDate; //达标日期",
+"	string MerStdStatus = $1.MerStdStatus; //达标状态",
+"	string NewFlag = $1.NewFlag; //是否新增",
+"	string Remark = $1.Remark; //注释",
+"	DateTime CreateTime = $1.CreateTime; //创建时间",
+"	DateTime UpdateTime = $1.UpdateTime; //更新时间",
+"}"
+]
+},
+"查询某个快闪刷商户首刷,并赋值": {
+"prefix": "ym-db-KssTradeFirst-Update",
+"body": [
+"KssTradeFirst $1 = db.KssTradeFirst.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	$1.AgentName = $2; //机构名称",
+"	$1.MerNo = $3; //商户编号",
+"	$1.MerName = $4; //商户名称",
+"	$1.ProductType = $5; //产品类型",
+"	$1.MerBindDate = $6; //绑定日期",
+"	$1.MerSnNo = $7; //终端机身号",
+"	$1.ActNo = $8; //押金活动ID",
+"	$1.ActName = $9; //押金活动名称",
+"	$1.MerStdDate = $10; //达标日期",
+"	$1.MerStdStatus = $11; //达标状态",
+"	$1.NewFlag = $12; //是否新增",
+"	$1.Remark = $13; //注释",
+"	$1.CreateTime = $14; //创建时间",
+"	$1.UpdateTime = $15; //更新时间",
+"}"
+]
+},
+"获取快闪刷商户首刷数量": {
+"prefix": "ym-db-KssTradeFirst-FindAndCount",
+"body": [
+"int $1 = db.KssTradeFirst.Count(m => $2);",
+]
+},
+"添加快闪刷商户首刷": {
+"prefix": "ym-db-KssTradeFirst-Create",
+"body": [
+"db.KssTradeFirst.Add(new KssTradeFirst()",
+"{",
+"	CreateDate = DateTime.Now,",
+"	UpdateDate = DateTime.Now,",
+"	AgentName = $1, //机构名称",
+"	MerNo = $2, //商户编号",
+"	MerName = $3, //商户名称",
+"	ProductType = $4, //产品类型",
+"	MerBindDate = $5, //绑定日期",
+"	MerSnNo = $6, //终端机身号",
+"	ActNo = $7, //押金活动ID",
+"	ActName = $8, //押金活动名称",
+"	MerStdDate = $9, //达标日期",
+"	MerStdStatus = $10, //达标状态",
+"	NewFlag = $11, //是否新增",
+"	Remark = $12, //注释",
+"	CreateTime = $13, //创建时间",
+"	UpdateTime = $14, //更新时间",
+"});"
+]
+},"删除某个快闪刷商户首刷": {
+"prefix": "ym-db-KssTradeFirst-Delete",
+"body": [
+"KssTradeFirst $1 = db.KssTradeFirst.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	db.KssTradeFirst.Remove($1);",
+"}"
+]
+},
+"查询商户列表": {
+"prefix": "ym-db-Merchants-Find",
+"body": [
+"List<Merchants> $1 = db.Merchants.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (Merchants $3 in $1)",
+"{",
+"}"
+]
+},
+"查询商户列表,并取值": {
+"prefix": "ym-db-Merchants-FindWithData",
+"body": [
+"List<Merchants> $1 = db.Merchants.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (Merchants $3 in $1)",
+"{",
+"	string MerNo = $3.MerNo; //商户编号",
+"	string MerName = $3.MerName; //商户名称",
+"	string AgentName = $3.AgentName; //机构名称",
+"	string MerRealName = $3.MerRealName; //商户真实姓名",
+"	string MerMobile = $3.MerMobile; //商户手机号",
+"	string MerIdcardNo = $3.MerIdcardNo; //商户身份证号",
+"	DateTime MerRegDate = $3.MerRegDate; //注册日期",
+"	DateTime MerAuditDate = $3.MerAuditDate; //审核日期",
+"	string MerStatus = $3.MerStatus; //商户状态",
+"	string ProductType = $3.ProductType; //产品类型",
+"	string Province = $3.Province; //商户注册省份",
+"	string City = $3.City; //商户注册城市",
+"	string Remark = $3.Remark; //注释",
+"	DateTime CreateTime = $3.CreateTime; //创建时间",
+"	DateTime UpdateTime = $3.UpdateTime; //更新时间",
+"	string SnNo = $3.SnNo; //SN号",
+"	string AgentNo = $3.AgentNo; //代理商编号",
+"}"
+]
+},
+"查询商户": {
+"prefix": "ym-db-Merchants-Exist",
+"body": [
+"bool $1 = db.Merchants.Any(m => m.MerNo == $2);",
+]
+},
+"查询某个商户,并取值": {
+"prefix": "ym-db-Merchants-FindByPrimaryKey",
+"body": [
+"Merchants $1 = db.Merchants.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	string MerNo = $1.MerNo; //商户编号",
+"	string MerName = $1.MerName; //商户名称",
+"	string AgentName = $1.AgentName; //机构名称",
+"	string MerRealName = $1.MerRealName; //商户真实姓名",
+"	string MerMobile = $1.MerMobile; //商户手机号",
+"	string MerIdcardNo = $1.MerIdcardNo; //商户身份证号",
+"	DateTime MerRegDate = $1.MerRegDate; //注册日期",
+"	DateTime MerAuditDate = $1.MerAuditDate; //审核日期",
+"	string MerStatus = $1.MerStatus; //商户状态",
+"	string ProductType = $1.ProductType; //产品类型",
+"	string Province = $1.Province; //商户注册省份",
+"	string City = $1.City; //商户注册城市",
+"	string Remark = $1.Remark; //注释",
+"	DateTime CreateTime = $1.CreateTime; //创建时间",
+"	DateTime UpdateTime = $1.UpdateTime; //更新时间",
+"	string SnNo = $1.SnNo; //SN号",
+"	string AgentNo = $1.AgentNo; //代理商编号",
+"}"
+]
+},
+"查询某个商户,并赋值": {
+"prefix": "ym-db-Merchants-Update",
+"body": [
+"Merchants $1 = db.Merchants.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	$1.MerNo = $2; //商户编号",
+"	$1.MerName = $3; //商户名称",
+"	$1.AgentName = $4; //机构名称",
+"	$1.MerRealName = $5; //商户真实姓名",
+"	$1.MerMobile = $6; //商户手机号",
+"	$1.MerIdcardNo = $7; //商户身份证号",
+"	$1.MerRegDate = $8; //注册日期",
+"	$1.MerAuditDate = $9; //审核日期",
+"	$1.MerStatus = $10; //商户状态",
+"	$1.ProductType = $11; //产品类型",
+"	$1.Province = $12; //商户注册省份",
+"	$1.City = $13; //商户注册城市",
+"	$1.Remark = $14; //注释",
+"	$1.CreateTime = $15; //创建时间",
+"	$1.UpdateTime = $16; //更新时间",
+"	$1.SnNo = $17; //SN号",
+"	$1.AgentNo = $18; //代理商编号",
+"}"
+]
+},
+"获取商户数量": {
+"prefix": "ym-db-Merchants-FindAndCount",
+"body": [
+"int $1 = db.Merchants.Count(m => $2);",
+]
+},
+"添加商户": {
+"prefix": "ym-db-Merchants-Create",
+"body": [
+"db.Merchants.Add(new Merchants()",
+"{",
+"	CreateDate = DateTime.Now,",
+"	UpdateDate = DateTime.Now,",
+"	MerNo = $1, //商户编号",
+"	MerName = $2, //商户名称",
+"	AgentName = $3, //机构名称",
+"	MerRealName = $4, //商户真实姓名",
+"	MerMobile = $5, //商户手机号",
+"	MerIdcardNo = $6, //商户身份证号",
+"	MerRegDate = $7, //注册日期",
+"	MerAuditDate = $8, //审核日期",
+"	MerStatus = $9, //商户状态",
+"	ProductType = $10, //产品类型",
+"	Province = $11, //商户注册省份",
+"	City = $12, //商户注册城市",
+"	Remark = $13, //注释",
+"	CreateTime = $14, //创建时间",
+"	UpdateTime = $15, //更新时间",
+"	SnNo = $16, //SN号",
+"	AgentNo = $17, //代理商编号",
+"});"
+]
+},"删除某个商户": {
+"prefix": "ym-db-Merchants-Delete",
+"body": [
+"Merchants $1 = db.Merchants.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	db.Merchants.Remove($1);",
+"}"
+]
+},
+"查询商户在网达标列表": {
+"prefix": "ym-db-MerchantStageRwd-Find",
+"body": [
+"List<MerchantStageRwd> $1 = db.MerchantStageRwd.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (MerchantStageRwd $3 in $1)",
+"{",
+"}"
+]
+},
+"查询商户在网达标列表,并取值": {
+"prefix": "ym-db-MerchantStageRwd-FindWithData",
+"body": [
+"List<MerchantStageRwd> $1 = db.MerchantStageRwd.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (MerchantStageRwd $3 in $1)",
+"{",
+"	string AgentName = $3.AgentName; //机构名称",
+"	string MerName = $3.MerName; //商户名称",
+"	string ProductType = $3.ProductType; //产品类型",
+"	DateTime MerBindDate = $3.MerBindDate; //绑定日期",
+"	string MerSnNo = $3.MerSnNo; //终端机身号",
+"	string ActNo = $3.ActNo; //押金活动ID",
+"	string ActName = $3.ActName; //押金活动名称",
+"	string MerStdStage = $3.MerStdStage; //达标阶段",
+"	DateTime MerStdDate = $3.MerStdDate; //达标日期",
+"	string MerStdStatus = $3.MerStdStatus; //达标状态",
+"	string NewFlag = $3.NewFlag; //是否新增",
+"	string Remark = $3.Remark; //注释",
+"	DateTime CreateTime = $3.CreateTime; //创建时间",
+"	DateTime UpdateTime = $3.UpdateTime; //更新时间",
+"	string MerNo = $3.MerNo; //商户编号",
+"}"
+]
+},
+"查询商户在网达标": {
+"prefix": "ym-db-MerchantStageRwd-Exist",
+"body": [
+"bool $1 = db.MerchantStageRwd.Any(m => m.MerNo == $2);",
+]
+},
+"查询某个商户在网达标,并取值": {
+"prefix": "ym-db-MerchantStageRwd-FindByPrimaryKey",
+"body": [
+"MerchantStageRwd $1 = db.MerchantStageRwd.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	string AgentName = $1.AgentName; //机构名称",
+"	string MerName = $1.MerName; //商户名称",
+"	string ProductType = $1.ProductType; //产品类型",
+"	DateTime MerBindDate = $1.MerBindDate; //绑定日期",
+"	string MerSnNo = $1.MerSnNo; //终端机身号",
+"	string ActNo = $1.ActNo; //押金活动ID",
+"	string ActName = $1.ActName; //押金活动名称",
+"	string MerStdStage = $1.MerStdStage; //达标阶段",
+"	DateTime MerStdDate = $1.MerStdDate; //达标日期",
+"	string MerStdStatus = $1.MerStdStatus; //达标状态",
+"	string NewFlag = $1.NewFlag; //是否新增",
+"	string Remark = $1.Remark; //注释",
+"	DateTime CreateTime = $1.CreateTime; //创建时间",
+"	DateTime UpdateTime = $1.UpdateTime; //更新时间",
+"	string MerNo = $1.MerNo; //商户编号",
+"}"
+]
+},
+"查询某个商户在网达标,并赋值": {
+"prefix": "ym-db-MerchantStageRwd-Update",
+"body": [
+"MerchantStageRwd $1 = db.MerchantStageRwd.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	$1.AgentName = $2; //机构名称",
+"	$1.MerName = $3; //商户名称",
+"	$1.ProductType = $4; //产品类型",
+"	$1.MerBindDate = $5; //绑定日期",
+"	$1.MerSnNo = $6; //终端机身号",
+"	$1.ActNo = $7; //押金活动ID",
+"	$1.ActName = $8; //押金活动名称",
+"	$1.MerStdStage = $9; //达标阶段",
+"	$1.MerStdDate = $10; //达标日期",
+"	$1.MerStdStatus = $11; //达标状态",
+"	$1.NewFlag = $12; //是否新增",
+"	$1.Remark = $13; //注释",
+"	$1.CreateTime = $14; //创建时间",
+"	$1.UpdateTime = $15; //更新时间",
+"	$1.MerNo = $16; //商户编号",
+"}"
+]
+},
+"获取商户在网达标数量": {
+"prefix": "ym-db-MerchantStageRwd-FindAndCount",
+"body": [
+"int $1 = db.MerchantStageRwd.Count(m => $2);",
+]
+},
+"添加商户在网达标": {
+"prefix": "ym-db-MerchantStageRwd-Create",
+"body": [
+"db.MerchantStageRwd.Add(new MerchantStageRwd()",
+"{",
+"	CreateDate = DateTime.Now,",
+"	UpdateDate = DateTime.Now,",
+"	AgentName = $1, //机构名称",
+"	MerName = $2, //商户名称",
+"	ProductType = $3, //产品类型",
+"	MerBindDate = $4, //绑定日期",
+"	MerSnNo = $5, //终端机身号",
+"	ActNo = $6, //押金活动ID",
+"	ActName = $7, //押金活动名称",
+"	MerStdStage = $8, //达标阶段",
+"	MerStdDate = $9, //达标日期",
+"	MerStdStatus = $10, //达标状态",
+"	NewFlag = $11, //是否新增",
+"	Remark = $12, //注释",
+"	CreateTime = $13, //创建时间",
+"	UpdateTime = $14, //更新时间",
+"	MerNo = $15, //商户编号",
+"});"
+]
+},"删除某个商户在网达标": {
+"prefix": "ym-db-MerchantStageRwd-Delete",
+"body": [
+"MerchantStageRwd $1 = db.MerchantStageRwd.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	db.MerchantStageRwd.Remove($1);",
+"}"
+]
+},
+"查询分润记录列表": {
+"prefix": "ym-db-ProfitRecord-Find",
+"body": [
+"List<ProfitRecord> $1 = db.ProfitRecord.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (ProfitRecord $3 in $1)",
+"{",
+"}"
+]
+},
+"查询分润记录列表,并取值": {
+"prefix": "ym-db-ProfitRecord-FindWithData",
+"body": [
+"List<ProfitRecord> $1 = db.ProfitRecord.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (ProfitRecord $3 in $1)",
+"{",
+"	string requestId = $3.requestId; //请求号",
+"	string organizationNumber = $3.organizationNumber; //直属代理编号",
+"	string organizationName = $3.organizationName; //直属代理名称",
+"	string amount = $3.amount; //分润基础数据金额",
+"	string orderNo = $3.orderNo; //原交易/结算流水单号",
+"	string valueType = $3.valueType; //费率类型",
+"	string balanceDirection = $3.balanceDirection; //支出方向",
+"	string originalRate = $3.originalRate; //商户费率",
+"	string originalFee = $3.originalFee; //原手续费",
+"	string profitCost = $3.profitCost; //成本值",
+"	string couponAmt = $3.couponAmt; //优惠券金额",
+"	string actualCouponAmt = $3.actualCouponAmt; //分润使用优惠券金额",
+"	string profitRate = $3.profitRate; //分润税点",
+"	string rateFee = $3.rateFee; //分润税费",
+"	string incomeScale = $3.incomeScale; //入账比例",
+"	string actualIncomeAmt = $3.actualIncomeAmt; //实际结账户金额",
+"	string applyDay = $3.applyDay; //分润日期",
+"	string createTime = $3.createTime; //创建时间",
+"	string topOrgNo = $3.topOrgNo; //一级服务商编号",
+"}"
+]
+},
+"查询分润记录": {
+"prefix": "ym-db-ProfitRecord-Exist",
+"body": [
+"bool $1 = db.ProfitRecord.Any(m => m.Id == $2);",
+]
+},
+"查询某个分润记录,并取值": {
+"prefix": "ym-db-ProfitRecord-FindByPrimaryKey",
+"body": [
+"ProfitRecord $1 = db.ProfitRecord.FirstOrDefault(m => m.Id == $2);",
+"if ($1 != null)",
+"{",
+"	string requestId = $1.requestId; //请求号",
+"	string organizationNumber = $1.organizationNumber; //直属代理编号",
+"	string organizationName = $1.organizationName; //直属代理名称",
+"	string amount = $1.amount; //分润基础数据金额",
+"	string orderNo = $1.orderNo; //原交易/结算流水单号",
+"	string valueType = $1.valueType; //费率类型",
+"	string balanceDirection = $1.balanceDirection; //支出方向",
+"	string originalRate = $1.originalRate; //商户费率",
+"	string originalFee = $1.originalFee; //原手续费",
+"	string profitCost = $1.profitCost; //成本值",
+"	string couponAmt = $1.couponAmt; //优惠券金额",
+"	string actualCouponAmt = $1.actualCouponAmt; //分润使用优惠券金额",
+"	string profitRate = $1.profitRate; //分润税点",
+"	string rateFee = $1.rateFee; //分润税费",
+"	string incomeScale = $1.incomeScale; //入账比例",
+"	string actualIncomeAmt = $1.actualIncomeAmt; //实际结账户金额",
+"	string applyDay = $1.applyDay; //分润日期",
+"	string createTime = $1.createTime; //创建时间",
+"	string topOrgNo = $1.topOrgNo; //一级服务商编号",
+"}"
+]
+},
+"查询某个分润记录,并赋值": {
+"prefix": "ym-db-ProfitRecord-Update",
+"body": [
+"ProfitRecord $1 = db.ProfitRecord.FirstOrDefault(m => m.Id == $2);",
+"if ($1 != null)",
+"{",
+"	$1.requestId = $2; //请求号",
+"	$1.organizationNumber = $3; //直属代理编号",
+"	$1.organizationName = $4; //直属代理名称",
+"	$1.amount = $5; //分润基础数据金额",
+"	$1.orderNo = $6; //原交易/结算流水单号",
+"	$1.valueType = $7; //费率类型",
+"	$1.balanceDirection = $8; //支出方向",
+"	$1.originalRate = $9; //商户费率",
+"	$1.originalFee = $10; //原手续费",
+"	$1.profitCost = $11; //成本值",
+"	$1.couponAmt = $12; //优惠券金额",
+"	$1.actualCouponAmt = $13; //分润使用优惠券金额",
+"	$1.profitRate = $14; //分润税点",
+"	$1.rateFee = $15; //分润税费",
+"	$1.incomeScale = $16; //入账比例",
+"	$1.actualIncomeAmt = $17; //实际结账户金额",
+"	$1.applyDay = $18; //分润日期",
+"	$1.createTime = $19; //创建时间",
+"	$1.topOrgNo = $20; //一级服务商编号",
+"}"
+]
+},
+"获取分润记录数量": {
+"prefix": "ym-db-ProfitRecord-FindAndCount",
+"body": [
+"int $1 = db.ProfitRecord.Count(m => $2);",
+]
+},
+"添加分润记录": {
+"prefix": "ym-db-ProfitRecord-Create",
+"body": [
+"db.ProfitRecord.Add(new ProfitRecord()",
+"{",
+"	CreateDate = DateTime.Now,",
+"	UpdateDate = DateTime.Now,",
+"	requestId = $1, //请求号",
+"	organizationNumber = $2, //直属代理编号",
+"	organizationName = $3, //直属代理名称",
+"	amount = $4, //分润基础数据金额",
+"	orderNo = $5, //原交易/结算流水单号",
+"	valueType = $6, //费率类型",
+"	balanceDirection = $7, //支出方向",
+"	originalRate = $8, //商户费率",
+"	originalFee = $9, //原手续费",
+"	profitCost = $10, //成本值",
+"	couponAmt = $11, //优惠券金额",
+"	actualCouponAmt = $12, //分润使用优惠券金额",
+"	profitRate = $13, //分润税点",
+"	rateFee = $14, //分润税费",
+"	incomeScale = $15, //入账比例",
+"	actualIncomeAmt = $16, //实际结账户金额",
+"	applyDay = $17, //分润日期",
+"	createTime = $18, //创建时间",
+"	topOrgNo = $19, //一级服务商编号",
+"});"
+]
+},"删除某个分润记录": {
+"prefix": "ym-db-ProfitRecord-Delete",
+"body": [
+"ProfitRecord $1 = db.ProfitRecord.FirstOrDefault(m => m.Id == $2);",
+"if ($1 != null)",
+"{",
+"	db.ProfitRecord.Remove($1);",
+"}"
+]
+},
+"查询流量卡分佣交易列表": {
+"prefix": "ym-db-TradeFluxRecord-Find",
+"body": [
+"List<TradeFluxRecord> $1 = db.TradeFluxRecord.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (TradeFluxRecord $3 in $1)",
+"{",
+"}"
+]
+},
+"查询流量卡分佣交易列表,并取值": {
+"prefix": "ym-db-TradeFluxRecord-FindWithData",
+"body": [
+"List<TradeFluxRecord> $1 = db.TradeFluxRecord.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (TradeFluxRecord $3 in $1)",
+"{",
+"	string TradeSerialNo = $3.TradeSerialNo; //交易单号",
+"	string MerNo = $3.MerNo; //商户编号",
+"	string MerName = $3.MerName; //商户名称",
+"	decimal TradeAmount = $3.TradeAmount; //交易金额",
+"	string TradeStatus = $3.TradeStatus; //交易状态",
+"	string TradeDate = $3.TradeDate; //交易日期",
+"	string TradeTime = $3.TradeTime; //交易时间",
+"	string BankCardType = $3.BankCardType; //银行卡类型",
+"	string TradeSnNo = $3.TradeSnNo; //交易SN号",
+"	string DigAmtFlag = $3.DigAmtFlag; //挖款标识",
+"	decimal DigAmt = $3.DigAmt; //挖款金额",
+"	string BankCardNo = $3.BankCardNo; //交易卡号",
+"	decimal FeeAmount = $3.FeeAmount; //手续费",
+"	string SettleMethod = $3.SettleMethod; //出款方式",
+"	decimal SettleFee = $3.SettleFee; //出款手续费",
+"	string SmallDouble = $3.SmallDouble; //小额双免",
+"	string BizEnterNo = $3.BizEnterNo; //业务员编号",
+"	string BizEnterName = $3.BizEnterName; //业务员名称",
+"	string SourceType = $3.SourceType; //来源类型",
+"	string BillType = $3.BillType; //计费类型",
+"	string KqTradeSeq = $3.KqTradeSeq; //快钱交易流水号",
+"	string InputModel = $3.InputModel; //输入模式",
+"	string TerminalNo = $3.TerminalNo; //终端号",
+"	string DeviceNetwork = $3.DeviceNetwork; //设备网络",
+"	string ProductType = $3.ProductType; //产品类型",
+"	string AgentNo = $3.AgentNo; //代理商编号",
+"}"
+]
+},
+"查询流量卡分佣交易": {
+"prefix": "ym-db-TradeFluxRecord-Exist",
+"body": [
+"bool $1 = db.TradeFluxRecord.Any(m => m.MerNo == $2);",
+]
+},
+"查询某个流量卡分佣交易,并取值": {
+"prefix": "ym-db-TradeFluxRecord-FindByPrimaryKey",
+"body": [
+"TradeFluxRecord $1 = db.TradeFluxRecord.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	string TradeSerialNo = $1.TradeSerialNo; //交易单号",
+"	string MerNo = $1.MerNo; //商户编号",
+"	string MerName = $1.MerName; //商户名称",
+"	decimal TradeAmount = $1.TradeAmount; //交易金额",
+"	string TradeStatus = $1.TradeStatus; //交易状态",
+"	string TradeDate = $1.TradeDate; //交易日期",
+"	string TradeTime = $1.TradeTime; //交易时间",
+"	string BankCardType = $1.BankCardType; //银行卡类型",
+"	string TradeSnNo = $1.TradeSnNo; //交易SN号",
+"	string DigAmtFlag = $1.DigAmtFlag; //挖款标识",
+"	decimal DigAmt = $1.DigAmt; //挖款金额",
+"	string BankCardNo = $1.BankCardNo; //交易卡号",
+"	decimal FeeAmount = $1.FeeAmount; //手续费",
+"	string SettleMethod = $1.SettleMethod; //出款方式",
+"	decimal SettleFee = $1.SettleFee; //出款手续费",
+"	string SmallDouble = $1.SmallDouble; //小额双免",
+"	string BizEnterNo = $1.BizEnterNo; //业务员编号",
+"	string BizEnterName = $1.BizEnterName; //业务员名称",
+"	string SourceType = $1.SourceType; //来源类型",
+"	string BillType = $1.BillType; //计费类型",
+"	string KqTradeSeq = $1.KqTradeSeq; //快钱交易流水号",
+"	string InputModel = $1.InputModel; //输入模式",
+"	string TerminalNo = $1.TerminalNo; //终端号",
+"	string DeviceNetwork = $1.DeviceNetwork; //设备网络",
+"	string ProductType = $1.ProductType; //产品类型",
+"	string AgentNo = $1.AgentNo; //代理商编号",
+"}"
+]
+},
+"查询某个流量卡分佣交易,并赋值": {
+"prefix": "ym-db-TradeFluxRecord-Update",
+"body": [
+"TradeFluxRecord $1 = db.TradeFluxRecord.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	$1.TradeSerialNo = $2; //交易单号",
+"	$1.MerNo = $3; //商户编号",
+"	$1.MerName = $4; //商户名称",
+"	$1.TradeAmount = $5; //交易金额",
+"	$1.TradeStatus = $6; //交易状态",
+"	$1.TradeDate = $7; //交易日期",
+"	$1.TradeTime = $8; //交易时间",
+"	$1.BankCardType = $9; //银行卡类型",
+"	$1.TradeSnNo = $10; //交易SN号",
+"	$1.DigAmtFlag = $11; //挖款标识",
+"	$1.DigAmt = $12; //挖款金额",
+"	$1.BankCardNo = $13; //交易卡号",
+"	$1.FeeAmount = $14; //手续费",
+"	$1.SettleMethod = $15; //出款方式",
+"	$1.SettleFee = $16; //出款手续费",
+"	$1.SmallDouble = $17; //小额双免",
+"	$1.BizEnterNo = $18; //业务员编号",
+"	$1.BizEnterName = $19; //业务员名称",
+"	$1.SourceType = $20; //来源类型",
+"	$1.BillType = $21; //计费类型",
+"	$1.KqTradeSeq = $22; //快钱交易流水号",
+"	$1.InputModel = $23; //输入模式",
+"	$1.TerminalNo = $24; //终端号",
+"	$1.DeviceNetwork = $25; //设备网络",
+"	$1.ProductType = $26; //产品类型",
+"	$1.AgentNo = $27; //代理商编号",
+"}"
+]
+},
+"获取流量卡分佣交易数量": {
+"prefix": "ym-db-TradeFluxRecord-FindAndCount",
+"body": [
+"int $1 = db.TradeFluxRecord.Count(m => $2);",
+]
+},
+"添加流量卡分佣交易": {
+"prefix": "ym-db-TradeFluxRecord-Create",
+"body": [
+"db.TradeFluxRecord.Add(new TradeFluxRecord()",
+"{",
+"	CreateDate = DateTime.Now,",
+"	UpdateDate = DateTime.Now,",
+"	TradeSerialNo = $1, //交易单号",
+"	MerNo = $2, //商户编号",
+"	MerName = $3, //商户名称",
+"	TradeAmount = $4, //交易金额",
+"	TradeStatus = $5, //交易状态",
+"	TradeDate = $6, //交易日期",
+"	TradeTime = $7, //交易时间",
+"	BankCardType = $8, //银行卡类型",
+"	TradeSnNo = $9, //交易SN号",
+"	DigAmtFlag = $10, //挖款标识",
+"	DigAmt = $11, //挖款金额",
+"	BankCardNo = $12, //交易卡号",
+"	FeeAmount = $13, //手续费",
+"	SettleMethod = $14, //出款方式",
+"	SettleFee = $15, //出款手续费",
+"	SmallDouble = $16, //小额双免",
+"	BizEnterNo = $17, //业务员编号",
+"	BizEnterName = $18, //业务员名称",
+"	SourceType = $19, //来源类型",
+"	BillType = $20, //计费类型",
+"	KqTradeSeq = $21, //快钱交易流水号",
+"	InputModel = $22, //输入模式",
+"	TerminalNo = $23, //终端号",
+"	DeviceNetwork = $24, //设备网络",
+"	ProductType = $25, //产品类型",
+"	AgentNo = $26, //代理商编号",
+"});"
+]
+},"删除某个流量卡分佣交易": {
+"prefix": "ym-db-TradeFluxRecord-Delete",
+"body": [
+"TradeFluxRecord $1 = db.TradeFluxRecord.FirstOrDefault(m => m.MerNo == $2);",
+"if ($1 != null)",
+"{",
+"	db.TradeFluxRecord.Remove($1);",
+"}"
+]
+},
+"查询交易记录列表": {
+"prefix": "ym-db-TradeRecord-Find",
+"body": [
+"List<TradeRecord> $1 = db.TradeRecord.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (TradeRecord $3 in $1)",
+"{",
+"}"
+]
+},
+"查询交易记录列表,并取值": {
+"prefix": "ym-db-TradeRecord-FindWithData",
+"body": [
+"List<TradeRecord> $1 = db.TradeRecord.Where(m => $2).OrderByDescending(m => m.Id).ToList();",
+"foreach (TradeRecord $3 in $1)",
+"{",
+"	string TradeSerialNo = $3.TradeSerialNo; //交易单号",
+"	string MerNo = $3.MerNo; //商户编号",
+"	string MerName = $3.MerName; //商户名称",
+"	decimal TradeAmount = $3.TradeAmount; //交易金额",
+"	string TradeReferNo = $3.TradeReferNo; //交易参考号",
+"	string BankAuthCode = $3.BankAuthCode; //银行授权码",
+"	string DiscountRateFlag = $3.DiscountRateFlag; //优惠费率标识",
+"	string TradeStatus = $3.TradeStatus; //交易状态",
+"	string ErrorCode = $3.ErrorCode; //错误码",
+"	string ErrorMsg = $3.ErrorMsg; //错误信息",
+"	string TradeDate = $3.TradeDate; //交易日期",
+"	string TradeTime = $3.TradeTime; //交易时间",
+"	string TradeType = $3.TradeType; //交易类型",
+"	string SerEntryMode = $3.SerEntryMode; //输入模式",
+"	string BankCardType = $3.BankCardType; //银行卡类型",
+"	string TradeSnNo = $3.TradeSnNo; //交易SN号",
+"	string DeviceType = $3.DeviceType; //设备类型",
+"	string MerMobile = $3.MerMobile; //商户手机号",
+"	string DigAmtFlag = $3.DigAmtFlag; //挖款标识",
+"	decimal DigAmt = $3.DigAmt; //挖款金额",
+"	string IsStoreCashier = $3.IsStoreCashier; //店面收银交易标识",
+"	string ReceiptType = $3.ReceiptType; //设备类型",
+"	string BankCardNo = $3.BankCardNo; //交易卡号",
+"	decimal SettleFee = $3.SettleFee; //出款手续费",
+"	string SettleMethod = $3.SettleMethod; //出款方式",
+"	string Remark = $3.Remark; //备注",
+"	string ProductType = $3.ProductType; //产品类型",
+"	string AgentNo = $3.AgentNo; //代理商编号",
+"	string ChannelSerial = $3.ChannelSerial; //渠道流水号",
+"}"
+]
+},
+"查询交易记录": {
+"prefix": "ym-db-TradeRecord-Exist",
+"body": [
+"bool $1 = db.TradeRecord.Any(m => m.Id == $2);",
+]
+},
+"查询某个交易记录,并取值": {
+"prefix": "ym-db-TradeRecord-FindByPrimaryKey",
+"body": [
+"TradeRecord $1 = db.TradeRecord.FirstOrDefault(m => m.Id == $2);",
+"if ($1 != null)",
+"{",
+"	string TradeSerialNo = $1.TradeSerialNo; //交易单号",
+"	string MerNo = $1.MerNo; //商户编号",
+"	string MerName = $1.MerName; //商户名称",
+"	decimal TradeAmount = $1.TradeAmount; //交易金额",
+"	string TradeReferNo = $1.TradeReferNo; //交易参考号",
+"	string BankAuthCode = $1.BankAuthCode; //银行授权码",
+"	string DiscountRateFlag = $1.DiscountRateFlag; //优惠费率标识",
+"	string TradeStatus = $1.TradeStatus; //交易状态",
+"	string ErrorCode = $1.ErrorCode; //错误码",
+"	string ErrorMsg = $1.ErrorMsg; //错误信息",
+"	string TradeDate = $1.TradeDate; //交易日期",
+"	string TradeTime = $1.TradeTime; //交易时间",
+"	string TradeType = $1.TradeType; //交易类型",
+"	string SerEntryMode = $1.SerEntryMode; //输入模式",
+"	string BankCardType = $1.BankCardType; //银行卡类型",
+"	string TradeSnNo = $1.TradeSnNo; //交易SN号",
+"	string DeviceType = $1.DeviceType; //设备类型",
+"	string MerMobile = $1.MerMobile; //商户手机号",
+"	string DigAmtFlag = $1.DigAmtFlag; //挖款标识",
+"	decimal DigAmt = $1.DigAmt; //挖款金额",
+"	string IsStoreCashier = $1.IsStoreCashier; //店面收银交易标识",
+"	string ReceiptType = $1.ReceiptType; //设备类型",
+"	string BankCardNo = $1.BankCardNo; //交易卡号",
+"	decimal SettleFee = $1.SettleFee; //出款手续费",
+"	string SettleMethod = $1.SettleMethod; //出款方式",
+"	string Remark = $1.Remark; //备注",
+"	string ProductType = $1.ProductType; //产品类型",
+"	string AgentNo = $1.AgentNo; //代理商编号",
+"	string ChannelSerial = $1.ChannelSerial; //渠道流水号",
+"}"
+]
+},
+"查询某个交易记录,并赋值": {
+"prefix": "ym-db-TradeRecord-Update",
+"body": [
+"TradeRecord $1 = db.TradeRecord.FirstOrDefault(m => m.Id == $2);",
+"if ($1 != null)",
+"{",
+"	$1.TradeSerialNo = $2; //交易单号",
+"	$1.MerNo = $3; //商户编号",
+"	$1.MerName = $4; //商户名称",
+"	$1.TradeAmount = $5; //交易金额",
+"	$1.TradeReferNo = $6; //交易参考号",
+"	$1.BankAuthCode = $7; //银行授权码",
+"	$1.DiscountRateFlag = $8; //优惠费率标识",
+"	$1.TradeStatus = $9; //交易状态",
+"	$1.ErrorCode = $10; //错误码",
+"	$1.ErrorMsg = $11; //错误信息",
+"	$1.TradeDate = $12; //交易日期",
+"	$1.TradeTime = $13; //交易时间",
+"	$1.TradeType = $14; //交易类型",
+"	$1.SerEntryMode = $15; //输入模式",
+"	$1.BankCardType = $16; //银行卡类型",
+"	$1.TradeSnNo = $17; //交易SN号",
+"	$1.DeviceType = $18; //设备类型",
+"	$1.MerMobile = $19; //商户手机号",
+"	$1.DigAmtFlag = $20; //挖款标识",
+"	$1.DigAmt = $21; //挖款金额",
+"	$1.IsStoreCashier = $22; //店面收银交易标识",
+"	$1.ReceiptType = $23; //设备类型",
+"	$1.BankCardNo = $24; //交易卡号",
+"	$1.SettleFee = $25; //出款手续费",
+"	$1.SettleMethod = $26; //出款方式",
+"	$1.Remark = $27; //备注",
+"	$1.ProductType = $28; //产品类型",
+"	$1.AgentNo = $29; //代理商编号",
+"	$1.ChannelSerial = $30; //渠道流水号",
+"}"
+]
+},
+"获取交易记录数量": {
+"prefix": "ym-db-TradeRecord-FindAndCount",
+"body": [
+"int $1 = db.TradeRecord.Count(m => $2);",
+]
+},
+"添加交易记录": {
+"prefix": "ym-db-TradeRecord-Create",
+"body": [
+"db.TradeRecord.Add(new TradeRecord()",
+"{",
+"	CreateDate = DateTime.Now,",
+"	UpdateDate = DateTime.Now,",
+"	TradeSerialNo = $1, //交易单号",
+"	MerNo = $2, //商户编号",
+"	MerName = $3, //商户名称",
+"	TradeAmount = $4, //交易金额",
+"	TradeReferNo = $5, //交易参考号",
+"	BankAuthCode = $6, //银行授权码",
+"	DiscountRateFlag = $7, //优惠费率标识",
+"	TradeStatus = $8, //交易状态",
+"	ErrorCode = $9, //错误码",
+"	ErrorMsg = $10, //错误信息",
+"	TradeDate = $11, //交易日期",
+"	TradeTime = $12, //交易时间",
+"	TradeType = $13, //交易类型",
+"	SerEntryMode = $14, //输入模式",
+"	BankCardType = $15, //银行卡类型",
+"	TradeSnNo = $16, //交易SN号",
+"	DeviceType = $17, //设备类型",
+"	MerMobile = $18, //商户手机号",
+"	DigAmtFlag = $19, //挖款标识",
+"	DigAmt = $20, //挖款金额",
+"	IsStoreCashier = $21, //店面收银交易标识",
+"	ReceiptType = $22, //设备类型",
+"	BankCardNo = $23, //交易卡号",
+"	SettleFee = $24, //出款手续费",
+"	SettleMethod = $25, //出款方式",
+"	Remark = $26, //备注",
+"	ProductType = $27, //产品类型",
+"	AgentNo = $28, //代理商编号",
+"	ChannelSerial = $29, //渠道流水号",
+"});"
+]
+},"删除某个交易记录": {
+"prefix": "ym-db-TradeRecord-Delete",
+"body": [
+"TradeRecord $1 = db.TradeRecord.FirstOrDefault(m => m.Id == $2);",
+"if ($1 != null)",
+"{",
+"	db.TradeRecord.Remove($1);",
+"}"
+]
+},
+}

+ 53 - 0
.vscode/launch.json

@@ -0,0 +1,53 @@
+{
+    // 使用 IntelliSense 了解相关属性。 
+    // 悬停以查看现有属性的描述。
+    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
+    "version": "0.2.0",
+    "configurations": [{
+            "name": ".NET Core Launch (web)",
+            "type": "coreclr",
+            "request": "launch",
+            "preLaunchTask": "build",
+            "program": "${workspaceFolder}/bin/Debug/netcoreapp3.0/MySystem.dll",
+            "args": [],
+            "cwd": "${workspaceFolder}",
+            "stopAtEntry": false,
+            "serverReadyAction": {
+                "action": "openExternally",
+                "pattern": "^\\s*Now listening on:\\s+(https?://\\S+)"
+            },
+            "env": {
+                "ASPNETCORE_ENVIRONMENT": "Development"
+            },
+            "sourceFileMap": {
+                "/Views": "${workspaceFolder}/Views"
+            }
+        },
+        {
+            "name": ".NET Core Launch (pro)",
+            "type": "coreclr",
+            "request": "launch",
+            "preLaunchTask": "build",
+            "program": "${workspaceFolder}/bin/Debug/netcoreapp3.0/MySystem.dll",
+            "args": [],
+            "cwd": "${workspaceFolder}",
+            "stopAtEntry": false,
+            "serverReadyAction": {
+                "action": "openExternally",
+                "pattern": "^\\s*Now listening on:\\s+(https?://\\S+)"
+            },
+            "env": {
+                "ASPNETCORE_ENVIRONMENT": "Production"
+            },
+            "sourceFileMap": {
+                "/Views": "${workspaceFolder}/Views"
+            }
+        },
+        {
+            "name": ".NET Core Attach",
+            "type": "coreclr",
+            "request": "attach",
+            "processId": "${command:pickProcess}"
+        }
+    ]
+}

+ 42 - 0
.vscode/tasks.json

@@ -0,0 +1,42 @@
+{
+    "version": "2.0.0",
+    "tasks": [
+        {
+            "label": "build",
+            "command": "dotnet",
+            "type": "process",
+            "args": [
+                "build",
+                "${workspaceFolder}/MySystem.csproj",
+                "/property:GenerateFullPaths=true",
+                "/consoleloggerparameters:NoSummary"
+            ],
+            "problemMatcher": "$msCompile"
+        },
+        {
+            "label": "publish",
+            "command": "dotnet",
+            "type": "process",
+            "args": [
+                "publish",
+                "${workspaceFolder}/MySystem.csproj",
+                "/property:GenerateFullPaths=true",
+                "/consoleloggerparameters:NoSummary"
+            ],
+            "problemMatcher": "$msCompile"
+        },
+        {
+            "label": "watch",
+            "command": "dotnet",
+            "type": "process",
+            "args": [
+                "watch",
+                "run",
+                "${workspaceFolder}/MySystem.csproj",
+                "/property:GenerateFullPaths=true",
+                "/consoleloggerparameters:NoSummary"
+            ],
+            "problemMatcher": "$msCompile"
+        }
+    ]
+}

二進制
AppStart/.DS_Store


+ 12 - 0
AppStart/AppResultJson.cs

@@ -0,0 +1,12 @@
+using System;
+namespace MySystem
+{
+    public class AppResultJson
+    {
+        public string Info { get; set; }
+        public object Data { get; set; }
+        public object Other { get; set; }
+        public string Status { get; set; }
+        public int Timestamp { get; set; }
+    }
+}

+ 19 - 0
AppStart/Decrypt.cs

@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Data;
+using System.Text.RegularExpressions;
+using MySystem.Models;
+using Library;
+
+namespace MySystem
+{
+    public class Decrypt
+    {
+        public static string RSADecrypt(string content, string key)
+        {
+            
+            return "";
+        }
+    }
+}

二進制
AppStart/DictionaryClass/.DS_Store


+ 53 - 0
AppStart/DictionaryClass/DictionaryClass.cs

@@ -0,0 +1,53 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using Microsoft.AspNetCore.Mvc;
+using MySystem.Models;
+
+namespace MySystem
+{
+    public class DictionaryClass
+    {
+        WebCMSEntities db = new WebCMSEntities();
+
+
+        
+
+
+
+        #region 根据字典key获取字典值
+
+        public string getDictionaryNameByKey(Dictionary<string, string> data, string key)
+        {
+            if (data.ContainsKey(key))
+            {
+                return data[key];
+            }
+            return "";
+        }
+        public string getDictionaryNameById(Dictionary<int, string> data, int key)
+        {
+            if (data.ContainsKey(key))
+            {
+                return data[key];
+            }
+            return "";
+        }
+        public string getDictionaryNamesByKeys(Dictionary<string, string> data, string keys)
+        {
+            string result = "";
+            string[] keylist = keys.Split(',');
+            foreach (string subkey in keylist)
+            {
+                if (data.ContainsKey(subkey))
+                {
+                    result += data[subkey] + ",";
+                }
+            }
+            return result.TrimEnd(',');
+        }
+
+        #endregion
+    }
+}

+ 16 - 0
AppStart/GlobalExceptions.cs

@@ -0,0 +1,16 @@
+using System;
+using Library;
+using Microsoft.AspNetCore.Mvc.Filters;
+
+namespace MySystem
+{
+    public class GlobalExceptions : IExceptionFilter
+    {
+        public void OnException(ExceptionContext context)
+        {
+            string Message = context.Exception.Message;
+            string StackTrace = context.Exception.StackTrace;
+            LogHelper.Instance.WriteLog(DateTime.Now.ToString() + "\r\n" + Message + "\r\n" + StackTrace, "Global全局异常处理日志");
+        }
+    }
+}

二進制
AppStart/Helper/.DS_Store


+ 142 - 0
AppStart/Helper/AddTableService.cs

@@ -0,0 +1,142 @@
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Linq;
+using Microsoft.Extensions.Hosting;
+using MySystem;
+using MySystem.Models;
+using Library;
+using LitJson;
+
+public class AddTableService
+{
+    public readonly static AddTableService Instance = new AddTableService();
+    private AddTableService()
+    { }
+
+    //自动创建表
+    public void CreateTable(string data)
+    {
+        JsonData jsonObj = JsonMapper.ToObject(data);
+        string tbname = jsonObj["TableName"].ToString();
+        int tbType = int.Parse(jsonObj["TableType"].ToString());
+        WebCMSEntities db = new WebCMSEntities();
+        CustomerTableRecord check = db.CustomerTableRecord.FirstOrDefault(m => m.TableEnName == tbname);
+        if (check != null)
+        {
+            //创建主表
+            if(tbType == 1) CreateActiveTableForMonth(tbname);
+            if(tbType == 2) CreateTradeTableForMonth(tbname);
+            if(tbType == 3) CreateTradeFluxTableForMonth(tbname);
+            db.CustomerTableRecord.Add(new CustomerTableRecord()
+            {
+                TableEnName = tbname,
+                CreateDate = DateTime.Now,
+                AddTableDate = DateTime.Now,
+            });
+            db.SaveChanges();
+        }
+        else
+        {
+            //从主表中分离3个月前的数据,每个月创建一张表
+            DateTime AddTableDate = check.AddTableDate.Value.AddMonths(-3);
+            if (AddTableDate > check.CreateDate)
+            {
+                string addTableName = tbname + AddTableDate.ToString("yyMM");
+                bool checkAdd = db.CustomerTableRecord.Any(m => m.TableEnName == addTableName);
+                if (!checkAdd)
+                { 
+                    if(tbType == 1) CreateActiveTableForMonth(addTableName);
+                    if(tbType == 2) CreateTradeTableForMonth(addTableName);
+                    if(tbType == 3) CreateTradeFluxTableForMonth(addTableName);
+                    db.CustomerTableRecord.Add(new CustomerTableRecord()
+                    {
+                        TableEnName = addTableName,
+                        CreateDate = DateTime.Now
+                    });
+                    db.SaveChanges();
+                }
+            }
+        }
+        db.Dispose();
+    }
+
+    //创建激活记录表
+    private void CreateActiveTableForMonth(string tbname)
+    { 
+        string addTableSql = "CREATE table " + tbname + "(Id int NOT NULL AUTO_INCREMENT,Sort int not null default 0,QueryCount int not null default 0,Status int not null default 0,CreateDate datetime,UpdateDate datetime,SeoTitle varchar(100),SeoKeyword varchar(200),SeoDescription varchar(500),PRIMARY KEY(Id))ENGINE=InnoDB DEFAULT charset=utf8;";
+        addTableSql += "Alter table " + tbname + " add BizEnterName varchar(32);";
+        addTableSql += "Alter table " + tbname + " add BizEnterNo varchar(16);";
+        addTableSql += "Alter table " + tbname + " add MerIdcardNo varchar(18);";
+        addTableSql += "Alter table " + tbname + " add MerRealName varchar(16);";
+        addTableSql += "Alter table " + tbname + " add ActivateDate datetime;";
+        addTableSql += "Alter table " + tbname + " add ActivateStatus varchar(2);";
+        addTableSql += "Alter table " + tbname + " add AssessMonthCount varchar(8);";
+        addTableSql += "Alter table " + tbname + " add AssessMonth varchar(8);";
+        addTableSql += "Alter table " + tbname + " add MerRegDate datetime;";
+        addTableSql += "Alter table " + tbname + " add SnNo varchar(32);";
+        addTableSql += "Alter table " + tbname + " add BrandId int not null default 0;";
+        addTableSql += "Alter table " + tbname + " add MerMobile varchar(32);";
+        addTableSql += "Alter table " + tbname + " add MerName varchar(32);";
+        dbconn.op(addTableSql);
+    }
+
+    //自动创建交易记录表
+    public void CreateTradeTableForMonth(string tbname)
+    { 
+        string addTableSql = "CREATE table " + tbname + "(Id int NOT NULL AUTO_INCREMENT,Sort int not null default 0,QueryCount int not null default 0,Status int not null default 0,CreateDate datetime,UpdateDate datetime,SeoTitle varchar(100),SeoKeyword varchar(200),SeoDescription varchar(500),PRIMARY KEY(Id))ENGINE=InnoDB DEFAULT charset=utf8;";
+        addTableSql += "Alter table " + tbname + " add ReceiptType varchar(16);";
+        addTableSql += "Alter table " + tbname + " add IsStoreCashier varchar(16);";
+        addTableSql += "Alter table " + tbname + " add DigAmt numeric(18,2) not null default 0;";
+        addTableSql += "Alter table " + tbname + " add DigAmtFlag varchar(4);";
+        addTableSql += "Alter table " + tbname + " add MerMobile varchar(11);";
+        addTableSql += "Alter table " + tbname + " add DeviceType varchar(16);";
+        addTableSql += "Alter table " + tbname + " add TradeSnNo varchar(32);";
+        addTableSql += "Alter table " + tbname + " add BankCardType varchar(16);";
+        addTableSql += "Alter table " + tbname + " add SerEntryMode varchar(32);";
+        addTableSql += "Alter table " + tbname + " add TradeType varchar(32);";
+        addTableSql += "Alter table " + tbname + " add TradeTime varchar(8);";
+        addTableSql += "Alter table " + tbname + " add TradeDate varchar(8);";
+        addTableSql += "Alter table " + tbname + " add ErrorMsg varchar(32);";
+        addTableSql += "Alter table " + tbname + " add ErrorCode varchar(16);";
+        addTableSql += "Alter table " + tbname + " add Trade_status varchar(16);";
+        addTableSql += "Alter table " + tbname + " add BrandId int not null default 0;";
+        addTableSql += "Alter table " + tbname + " add DiscountRateFlag varchar(16);";
+        addTableSql += "Alter table " + tbname + " add BankAuthCode varchar(32);";
+        addTableSql += "Alter table " + tbname + " add TradeReferNo varchar(32);";
+        addTableSql += "Alter table " + tbname + " add TradeAmount numeric(18,2) not null default 0;";
+        addTableSql += "Alter table " + tbname + " add MerName varchar(32);";
+        dbconn.op(addTableSql);
+    }
+
+    //自动创建流量卡分佣交易记录表
+    public void CreateTradeFluxTableForMonth(string tbname)
+    { 
+        string addTableSql = "CREATE table " + tbname + "(Id int NOT NULL AUTO_INCREMENT,Sort int not null default 0,QueryCount int not null default 0,Status int not null default 0,CreateDate datetime,UpdateDate datetime,SeoTitle varchar(100),SeoKeyword varchar(200),SeoDescription varchar(500),PRIMARY KEY(Id))ENGINE=InnoDB DEFAULT charset=utf8;";
+        addTableSql += "Alter table " + tbname + " add DeviceNetwork varchar(32);";
+        addTableSql += "Alter table " + tbname + " add TerminalNo varchar(32);";
+        addTableSql += "Alter table " + tbname + " add InputModel varchar(32);";
+        addTableSql += "Alter table " + tbname + " add KqTradeSeq varchar(32);";
+        addTableSql += "Alter table " + tbname + " add BillType varchar(32);";
+        addTableSql += "Alter table " + tbname + " add SourceType varchar(16);";
+        addTableSql += "Alter table " + tbname + " add BizEnterName varchar(64);";
+        addTableSql += "Alter table " + tbname + " add BizEnterNo varchar(32);";
+        addTableSql += "Alter table " + tbname + " add SmallDouble varchar(4);";
+        addTableSql += "Alter table " + tbname + " add SettleFee numeric(18,2) not null default 0;";
+        addTableSql += "Alter table " + tbname + " add SettleMethod varchar(16);";
+        addTableSql += "Alter table " + tbname + " add FeeAmount numeric(18,2) not null default 0;";
+        addTableSql += "Alter table " + tbname + " add BankCardNo varchar(32);";
+        addTableSql += "Alter table " + tbname + " add DigAmt numeric(18,2) not null default 0;";
+        addTableSql += "Alter table " + tbname + " add DigAmtFlag varchar(4);";
+        addTableSql += "Alter table " + tbname + " add TradeSnNo varchar(32);";
+        addTableSql += "Alter table " + tbname + " add BankCardType varchar(16);";
+        addTableSql += "Alter table " + tbname + " add TradeTime varchar(8);";
+        addTableSql += "Alter table " + tbname + " add TradeDate varchar(8);";
+        addTableSql += "Alter table " + tbname + " add TradeStatus varchar(16);";
+        addTableSql += "Alter table " + tbname + " add BrandId int not null default 0;";
+        addTableSql += "Alter table " + tbname + " add TradeAmount numeric(18,2) not null default 0;";
+        addTableSql += "Alter table " + tbname + " add MerName varchar(32);";
+        dbconn.op(addTableSql);
+    }
+}

+ 389 - 0
AppStart/Helper/CheckWifiData.cs

@@ -0,0 +1,389 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Security.Cryptography;
+using System.Threading;
+using Library;
+using LitJson;
+using MySystem;
+using MySystem.Models;
+
+public class CheckWifiData
+{
+    public readonly static CheckWifiData Instance = new CheckWifiData();
+    private CheckWifiData()
+    { }
+
+    public void Start()
+    {
+        Thread th = new Thread(DoWorks);
+        th.IsBackground = true;
+        th.Start();
+
+
+        Thread th2 = new Thread(DoWorks2);
+        th2.IsBackground = true;
+        th2.Start();
+
+
+        Thread th3 = new Thread(NewWifi);
+        th3.IsBackground = true;
+        th3.Start();
+
+    }
+
+    public void DoWorks()
+    {
+        while (true)
+        {
+            string content = RedisDbconn.Instance.RPop<string>("yc_device");
+            if (!string.IsNullOrEmpty(content))
+            {
+                try
+                {
+                    string[] dataList = content.Replace("\r", "").Replace("\n", "").Split(new string[] { "#cut#" }, StringSplitOptions.None);
+                    string Kind = dataList[0];
+                    JsonData jsonObj = JsonMapper.ToObject(dataList[1]);
+                    string sign = jsonObj["sign"].ToString();
+                    string brhNo = jsonObj["brhNo"].ToString(); //机构号
+                    string timestamp = jsonObj["timestamp"].ToString(); //时间戳。签名用参数
+                    string dataString = jsonObj["data"].ToString();
+                    dataString = dataString.Replace("null", "\"\"");
+                    JsonData data = JsonMapper.ToObject(dataString);
+                    WebCMSEntities db = new WebCMSEntities();
+                    for (int i = 0; i < data.Count; i++)
+                    {
+                        JsonData dataItem = data[i];
+                        string status = dataItem["status"].ToString(); //状态 0:可用 1:待充值 2:待激活 3:冻结中
+                        string iccid = dataItem["iccid"].ToString(); //设备 id
+                        string sim = dataItem["sim"].ToString(); //设备号
+                        string activeTime = dataItem["activeTime"] != null ? dataItem["activeTime"].ToString() : ""; //激活时间,格式:yyyy-MM-dd HH:mm:ss
+                        string expiredTime = dataItem["expiredTime"] != null ? dataItem[prop_name: "expiredTime"].ToString() : ""; //生效日期,格式:yyyy-MM-dd HH:mm:ss
+                        string isRealName = dataItem["isRealName"].ToString(); //实名状态 0-否 1-是
+                        string mobile = dataItem["mobile"] != null ? dataItem["mobile"].ToString() : ""; //用户手机号
+                        // Dictionary<string, string> obj = new Dictionary<string, string>();
+                        // obj.Add("brhNo", brhNo);
+                        // obj.Add("iccid", iccid);
+                        // obj.Add("sim", sim);
+                        // obj.Add("status", status);
+                        // obj.Add("activeTime", activeTime);
+                        // obj.Add("expiredTime", expiredTime);
+                        // obj.Add("isRealName", isRealName);
+                        string model = "";
+                        if(Kind == "init")
+                        {
+                            model = dataItem["model"].ToString(); //设备型号
+                            // obj.Add("model", model);
+                        }
+                        // obj.Add("mobile", mobile);
+                        // string dataString = dataList[0] + "#cut#" + Newtonsoft.Json.JsonConvert.SerializeObject(obj);
+                        // RedisDbconn.Instance.AddList("kxs_bind_list_23", dataString);
+
+                        if(status == "0" && !db.BindRecord.Any(m => m.MerSnNo == sim))
+                        {
+                            db.BindRecord.Add(new BindRecord()
+                            {
+                                MerName = mobile,
+                                MerNewSnNo = mobile,
+                                MerNo = mobile,
+                                Field3 = model,
+                                Field2 = isRealName,
+                                CreateTime = DateTime.Now,
+                                UpdateTime = DateTime.Now,
+                                UpdateDate = DateTime.Parse(expiredTime),
+                                CreateDate = DateTime.Parse(activeTime),
+                                Field1 = iccid,
+                                MerSnNo = sim,
+                                ProductType = "23", //产品类型
+                                Status = 1,
+                            });
+                            db.Merchants.Add(new Merchants()
+                            {
+                                UpdateDate = DateTime.Parse(expiredTime),
+                                CreateDate = DateTime.Parse(activeTime),
+                                MerNo = mobile, //商户编号
+                                MerName = mobile, //商户名称
+                                AgentName = brhNo, //机构名称
+                                ProductType = "23", //产品类型
+                                Remark = "商户入库", //注释
+                                CreateTime = DateTime.Now, //创建时间
+                                UpdateTime = DateTime.Now, //更新时间
+                                SnNo = sim, //SN号
+                                MerMobile = mobile,
+                                Status = 1,
+                            });
+                            db.SaveChanges();
+                        }
+                    }
+                    db.Dispose();
+                }
+                catch(Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "接收云长WIFI设备绑定异常");
+                }
+            }
+            else
+            {
+                Thread.Sleep(5000);
+            }
+        }
+    }
+
+    public void DoWorks2()
+    {
+        while (true)
+        {
+            string content = RedisDbconn.Instance.RPop<string>("yc_order");
+            if (!string.IsNullOrEmpty(content))
+            {
+                try
+                {
+                    string[] dataList = content.Replace("\r", "").Replace("\n", "").Split(new string[] { "#cut#" }, StringSplitOptions.None);
+                    string Kind = dataList[0];
+                    string JsonString = dataList[1];
+                    JsonData jsonObj = JsonMapper.ToObject(JsonString);
+                    string sign = jsonObj["sign"].ToString();
+                    string brhNo = jsonObj["brhNo"].ToString(); //机构号
+                    string timestamp = jsonObj["timestamp"].ToString(); //时间戳。签名用参数
+                    string dataString = jsonObj["data"].ToString();
+                    dataString = dataString.Replace("null", "\"\"");
+                    JsonData data = JsonMapper.ToObject(dataString);
+                    WebCMSEntities db = new WebCMSEntities();
+                    for (int i = 0; i < data.Count; i++)
+                    {
+                        JsonData dataItem = data[i];
+                        string status = dataItem["status"].ToString(); //订单状态,未支付_1 完成_2 线上退款_3 线下退款_4 APP 退款_5 上 游失败_6 原路退回_7  标记打款_8 退款_9
+                        if(Kind == "init")
+                        {
+                            string orderNo = dataItem["orderNo"].ToString(); //订单编号
+                            string mobile = dataItem["mobile"].ToString(); //用户手机号
+                            string iccid = dataItem["iccid"].ToString(); //设备 id
+                            string sim = dataItem["sim"].ToString(); //设备号
+                            string userName = dataItem["userName"].ToString(); //所属客户
+                            string packageName = dataItem["packageName"].ToString(); //套餐名称
+                            string realTotalAmount = dataItem["realTotalAmount"] != null ? dataItem["realTotalAmount"].ToString() : "0"; //实付金额,单位分
+                            string orderAmount = dataItem["orderAmount"] != null ? dataItem["orderAmount"].ToString() : "0"; //订单金额,单位分
+                            string refundMoney = dataItem["refundMoney"] != null ? dataItem["refundMoney"].ToString() : "0"; //退款金额,单位分
+                            string orderType = dataItem["orderType"].ToString(); //订单类型"首次充值_1","续费_2","接口首次_3","接口续费_4","批量充值_5","自带套餐_6","赠送套餐_7","花呗充值_8"
+                            string payCategory = dataItem["payCategory"].ToString(); //充值类型"微信充值_1", "接口充值 _2"," 余 额 充 值_3", "批量充值_4","赠送套 餐 _5"," 支 付 宝 充 值_7","APP 兑换_8","APP 订购_9","自带套餐_10","自带套餐(激活前)_11","设备余额_12"
+                            string payAppid = dataItem["payAppid"].ToString(); //商户号
+                            string outTradeNo = dataItem["outTradeNo"].ToString(); //交易单号
+                            string createTime = dataItem["createTime"].ToString(); //充值时间,格式:yyyy-MM-dd HH:mm:ss
+                            string refundTime = dataItem["refundTime"] != null ? dataItem["refundTime"].ToString() : ""; //退款时间,格式:yyyy-MM-dd HH:mm:ss
+                            string beginTime = dataItem["beginTime"].ToString();
+                            string endTime = dataItem["endTime"].ToString();
+                            // Dictionary<string, string> obj = new Dictionary<string, string>();
+                            // obj.Add("brhNo", brhNo);
+                            // obj.Add("orderNo", orderNo);
+                            // obj.Add("mobile", mobile);
+                            // obj.Add("iccid", iccid);
+                            // obj.Add("sim", sim);
+                            // obj.Add("userName", userName);
+                            // obj.Add("packageName", packageName);
+                            // obj.Add("realTotalAmount", realTotalAmount);
+                            // obj.Add("orderAmount", orderAmount);
+                            // obj.Add("refundMoney", refundMoney);
+                            // obj.Add("orderType", orderType);
+                            // obj.Add("payCategory", payCategory);
+                            // obj.Add("payAppid", payAppid);
+                            // obj.Add("outTradeNo", outTradeNo);
+                            // obj.Add("createTime", createTime);
+                            // obj.Add("refundTime", refundTime);
+                            // obj.Add("status", status);
+                            // string dataString = dataList[0] + "#cut#" + Newtonsoft.Json.JsonConvert.SerializeObject(obj);
+                            // RedisDbconn.Instance.AddList("kxs_trade_list_23", dataString);
+                            int months = MonthDifference(DateTime.Parse(beginTime), DateTime.Parse(endTime).AddSeconds(1));
+                            db.TradeRecord.Add(new TradeRecord()
+                            {
+                                CreateDate = DateTime.Now,
+                                UpdateDate = DateTime.Now,
+                                Field3 = packageName,
+                                Field2 = refundMoney,
+                                Field1 = orderAmount,
+                                TradeType = orderType,
+                                Field4 = refundTime,
+                                BankCardNo = iccid,
+                                BankCardType = payCategory,
+                                TradeStatus = status,
+                                AgentNo = brhNo,
+                                TradeAmount = decimal.Parse(realTotalAmount),
+                                Field5 = createTime,
+                                TradeSerialNo = orderNo,
+                                MerNo = mobile,
+                                TradeSnNo = sim,
+                                ProductType = "23",
+                                Status = status == "2" ? 1 : 0,
+                                QueryCount = months,
+                            });
+                            db.SaveChanges();
+                        }
+                        else if(Kind == "change")
+                        {
+                            //change#cut#{"brhNo":"YCJG10010003","data":"[{\"orderNo\":\"695580\",\"status\":2,\"refundMoney\":null,\"operatorName\":null,\"refundTime\":null}]","sign":"e449LqlIeA2Lc2CBXi0ehsc6+P5y4TBwrxe6+Na8V7EwnUalFkOBDCevG9BaNntLqZrC9meuuWTFiEURQ9tJtcbC0mK0f2g2C8yx8ZwuURfP8MB6XshjLKIGstWRNZromstaOM4Mbz+1sc3i54SJ+x1Kr5Is7BqDjPRSUwEDlQI=","timestamp":1722240000}
+                            string orderNo = dataItem["orderNo"].ToString(); //订单编号
+                            if(status == "2")
+                            {
+                                TradeRecord edit = db.TradeRecord.FirstOrDefault(m => m.TradeSerialNo == orderNo && m.Status == 0);
+                                if(edit != null)
+                                {
+                                    edit.Status = 1;
+                                    db.SaveChanges();
+                                }
+                            }
+                            if(status == "3" || status == "4" || status == "5" || status == "7")
+                            {
+                                RedisDbconn.Instance.AddList("WifiRefundQueue", orderNo);
+                            }
+                            // Dictionary<string, string> obj = new Dictionary<string, string>();
+                            // obj.Add("brhNo", brhNo);
+                            // obj.Add("orderNo", orderNo);
+                            // obj.Add("status", status);
+                            // string dataString = dataList[0] + "#cut#" + Newtonsoft.Json.JsonConvert.SerializeObject(obj);
+                            // RedisDbconn.Instance.AddList("kxs_trade_list_23", dataString);
+                        }
+                    }
+                    db.Dispose();
+                }
+                catch(Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "接收云长WIFI设备交易异常");
+                }
+            }
+            else
+            {
+                Thread.Sleep(5000);
+            }
+        }
+    }
+
+    public void NewWifi()
+    {
+        while (true)
+        {
+            string data = RedisDbconn.Instance.RPop<string>("wifi_data_list");
+            if (!string.IsNullOrEmpty(data))
+            {
+                try
+                {
+                    string[] dataList = data.Split(new string[] { "#cut#" }, StringSplitOptions.None);
+                    string Kind = dataList[0];
+                    JsonData jsonObj = JsonMapper.ToObject(dataList[1]);
+                    string content = jsonObj["content"].ToString();
+                    content = Decrypt(content);
+                    jsonObj = JsonMapper.ToObject(content);
+                    WebCMSEntities db = new WebCMSEntities();
+                    if(Kind == "bind")
+                    {
+                        string sn = jsonObj["sn"].ToString(); //设备号
+                        string mchNo = jsonObj["mchNo"].ToString(); //商户号
+                        string bindTime = jsonObj["bindTime"].ToString(); //绑定时间
+                        string snType = jsonObj["snType"].ToString(); //设备类型 UFI=0 MIFI=1 CPE=2 能量塔=3
+                        string notifyType = jsonObj["notifyType"].ToString(); //通知类型 1绑定 0解绑
+                        db.BindRecord.Add(new BindRecord()
+                        {
+                            MerName = mchNo,
+                            MerNewSnNo = mchNo,
+                            MerNo = mchNo,
+                            Field3 = snType,
+                            CreateTime = DateTime.Now,
+                            UpdateTime = DateTime.Now,
+                            UpdateDate = DateTime.Parse(bindTime),
+                            CreateDate = DateTime.Parse(bindTime),
+                            Field1 = notifyType == "1" ? "绑定" : "解绑",
+                            MerSnNo = sn,
+                            ProductType = "23", //产品类型
+                            Status = 1,
+                            Field2 = "v2",
+                        });
+                        db.Merchants.Add(new Merchants()
+                        {
+                            UpdateDate = DateTime.Parse(bindTime),
+                            CreateDate = DateTime.Parse(bindTime),
+                            MerNo = mchNo, //商户编号
+                            MerName = mchNo, //商户名称
+                            ProductType = "23", //产品类型
+                            Remark = "商户入库", //注释
+                            CreateTime = DateTime.Now, //创建时间
+                            UpdateTime = DateTime.Now, //更新时间
+                            SnNo = sn, //SN号
+                            MerMobile = mchNo,
+                            Field1 = "v2",
+                            Field2 = notifyType == "1" ? "绑定" : "解绑",
+                            Status = 1,
+                        });
+                        db.SaveChanges();
+                    }
+                    else if(Kind == "trade")
+                    {
+                        //{"sn": "217F8972461", "mchNo": "19218587888", "snType": 1, "orderSn": "CA1838166424084348928", "cashFlag": 1, "tradeAmt": "120.00", "tradeTime": "2024-09-23 18:44:08", "isFirstRecharge": 0}
+                        string sn = jsonObj["sn"].ToString(); //设备号
+                        string orderSn = jsonObj["orderSn"].ToString(); //订单号
+                        string mchNo = jsonObj["mchNo"].ToString(); //商户号
+                        string snType = jsonObj["snType"].ToString(); //设备类型 UFI=0 MIFI=1 CPE=2 能量塔=3
+                        string tradeAmt = jsonObj["tradeAmt"].ToString(); //交易金额(元)
+                        string duration = content.Contains("\"duration\"") ? jsonObj[prop_name: "duration"].ToString() : "0"; //设备套餐时长
+                        string unit = content.Contains("\"unit\"") ? jsonObj["unit"].ToString() : "0"; //套餐单位 0:按天 1:按月
+                        string isFirstRecharge = content.Contains("\"isFirstRecharge\"") ? jsonObj["isFirstRecharge"].ToString() : "0"; //是否首充 0否 1是
+                        string cashFlag = jsonObj["cashFlag"].ToString(); //押金标识 0否 1是
+                        string tradeTime = jsonObj["tradeTime"].ToString(); //交易时间
+                        db.TradeRecord.Add(new TradeRecord()
+                        {
+                            CreateDate = DateTime.Now,
+                            UpdateDate = DateTime.Now,
+                            Field1 = snType,
+                            Field2 = duration,
+                            Field3 = unit,
+                            Field4 = isFirstRecharge,
+                            SerEntryMode = cashFlag,
+                            BankCardNo = sn,
+                            TradeStatus = "2",
+                            TradeAmount = decimal.Parse(tradeAmt),
+                            Field5 = tradeTime,
+                            TradeSerialNo = orderSn,
+                            MerNo = mchNo,
+                            TradeSnNo = sn,
+                            ProductType = "23",
+                            Status = 1,
+                            SeoTitle = "v2",
+                        });
+                        db.SaveChanges();
+                    }
+                    db.Dispose();
+                }
+                catch(Exception ex)
+                {
+                    function.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "接收来量吧WIFI设备交易异常");
+                }
+            }
+            else
+            {
+                Thread.Sleep(5000);
+            }
+        }
+    }
+
+    string prikey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCPs8Mn9EtUNqz9eg+Zv9Hu4gwjKgqma+Ud5A+LpiMQFK83fQX1zmg9oGtaXL11guQBJT9pui3vBn4cZXkadOd03x22lxDd18hBmEWBA8b2MTC4u2gZ7jKGjMBurDZ4Uit8yk2Ls8Qe6Jzf7f2cdTwzw6JrLGyZ6jx+Xl7zHcylvY6YHio8t1zW/ZuP2PuY6XWXL/1gbChhxUIs/LhZbHzPazvnjqxM7ioZkLU0Of3W0keO6AcJo01DGqUHZ/l9FsZU/8697o1W3IyhQ9PDTg9mVWS46hIMhd70nNpCTlDKn6iiv2H0GtZ1FbczX7uoTXI9oqP2uU1qahk10CdbeLW1AgMBAAECggEADnMnBpd8E6XD02E4vF8bfwff7JFHrOBgk5bhMUutbuqFi/DYbpUoyjmdUeLNckmNH8hdDgaYo9ZlS/mwKcbjl07wL/IU0hnmmyHyqzxz/0GHAqxllWXsUrdIilhqycKJeOzmy0tyRyFg1OubeuYW/aWIaXp4GSoClzpqFcxDTc8RE7rSn5JxwfBug9p1dNrv0/RfeXSecJ2puqWO3w6+sJxCyMt7/SmIa5sczc9ehSDYhWH0Zs5FBwfhfpyxECyQWeHoIM6I+AkJqjbNRBKT5TCho66Ie5H/PwHVJ0GxhEyc7xKn+/9ZA+5AAYCrlqDzZyqQQUDK8cDyjZfLFx6fAQKBgQDRpnAD+jRE6wJ1fSBEPUe8J3x7IxlFR2K4k6XXj+hNHdqDP/Oo1lssj64U4eeXHyvbe9bJVbVvJ28jM1cSsGHmcQMj3bHLWhWHlwOYqIc9FZgGB9T//NyMhVUsSUhZ4LPPA5eJOJeDCnKPPwevK2Iaj1iopeO2+DQPffPNYyRPlQKBgQCveN7tX3NFH9944iATS8RZX2C1reXjIf6wH3dLg5ttLJhH9Une//RvKPEjlnPL7sJnyt8jGiXQOma6Xr3cHztDjdCdaEC6lZmoiUL4aN1amUjz7cET2BeJjtv9fRG+bk5RSCemcHyuvALMmLeRwm8cAfdWnNsEv+ikshkUyZHFoQKBgQC8SmtYZyMCsr8mnhaYsyD2T9BxF3jey9pSQ+kyzUCp4iIatxkzjjGct/51Kt9AzvIo0fR6Jswo5JXgW3/cfSWwPdfAIqBILsQfXvYP6Wxs5DQBVo9qycObQTTZ7YdZkYJsbqFu0LDjNELnfIh+PsyBZjUOYs89yXWYZFrPIDfAcQKBgHZDVqxRapUqGCmW7dtTc3Bw0fNg0tG0db0qV/KzLqv0JGZLMZB0nb/VrkA4BK9rqebeWmmEE/w1gEsX04pqGj07dWDBhO68KSXn7RUTSCzppruQgFLpj2OMv0QnaTAZk/tAUEjjA4WY/aH7Q62fh9culA7yBMM8vIVT64eRGwhBAoGAc5vyY2in0OCwDVApi5IO+ilorfHMKWSVub1oG/9R85V21n9Ux6SWkLCs+tTY80VvQzfjrWS/vAkaOV9usfuJL7cotroyUgxFp8+I5bPdgThD0uP2078n92huoacVp49eKL+WGGmHBl1aSz9YJguQ0neaTxJUlEuAokfMO6dhHro=";
+    public string Decrypt(string data)
+    {
+        var toDecryptArray = Convert.FromBase64String(data);
+        var rsa2 = RSA.Create();
+        rsa2.ImportPkcs8PrivateKey(Convert.FromBase64String(prikey), out _);
+        var ContentArray = rsa2.Decrypt(toDecryptArray, RSAEncryptionPadding.Pkcs1);
+        string result = System.Text.Encoding.UTF8.GetString(ContentArray);
+        return result;
+    }
+
+    public int MonthDifference(DateTime start, DateTime end)
+    {
+        int yearsDifference = end.Year - start.Year;
+        int monthsDifference = end.Month - start.Month;
+ 
+        // 如果结束年份比开始年份大1,则月份差减去1
+        if (end.AddYears(-yearsDifference) < start)
+        {
+            monthsDifference--;
+        }
+ 
+        return yearsDifference * 12 + monthsDifference;
+    }
+}

+ 52 - 0
AppStart/Helper/CreateTableHelper.cs

@@ -0,0 +1,52 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Threading;
+using Library;
+using LitJson;
+using MySystem;
+
+public class CreateTableHelper
+{
+    public readonly static CreateTableHelper Instance = new CreateTableHelper();
+    private CreateTableHelper()
+    { }
+
+    public void Start()
+    {
+        Thread th = new Thread(DoWorks);
+        th.IsBackground = true;
+        th.Start();
+    }
+
+    public void DoWorks()
+    {
+        while (true)
+        {
+            if(DateTime.Now.Day > 25 && DateTime.Now.Hour > 0 && DateTime.Now.Hour < 3)
+            {
+                try
+                {
+                    string month = DateTime.Now.AddMonths(1).ToString("yyyyMM");
+                    if(string.IsNullOrEmpty(RedisDbconn.Instance.Get<string>("TradeRecord" + month)))
+                    {
+                        CustomerSqlConn.op(AppConfig.Base.CreateTradeRecord.Replace("#DateTime#", month), AppConfig.Base.RdsSqlConn);
+                        RedisDbconn.Instance.Set("TradeRecord" + month, "1");
+                        int sec = 3600 * 12 * 35;
+                        RedisDbconn.Instance.SetExpire("TradeRecord" + month, sec);
+                        Thread.Sleep(2000);
+                    }
+                }
+                catch (Exception ex)
+                {
+                    LogHelper.Instance.WriteLog(DateTime.Now.ToString() + "\n" + ex.ToString(), "创建分表异常");
+                }
+                Thread.Sleep(5000);
+            }
+            else
+            {
+                Thread.Sleep(3600000);
+            }
+        }
+    }
+}

+ 33 - 0
AppStart/Helper/GetSpTimer.cs

@@ -0,0 +1,33 @@
+using System.Collections.Generic;
+using System.Threading;
+using MySystem;
+
+public class GetSpTimer
+{
+    public readonly static GetSpTimer Instance = new GetSpTimer();
+    private GetSpTimer()
+    { }
+
+    public void Start()
+    {
+        List<JobMqMsg> list = RedisDbconn.Instance.GetList<JobMqMsg>("GetSpData", 1, 1000);
+        foreach(JobMqMsg sub in list)
+        {
+            Thread th = new Thread(DoWorks);
+            th.IsBackground = true;
+            th.Start(sub);
+        }
+    }
+
+    //核对执行结果,并保存数据
+    public void DoWorks(object sender)
+    {
+        // string content = sender.ToString();
+        // if (!string.IsNullOrEmpty(content))
+        // {
+            // JobMqMsg job = Newtonsoft.Json.JsonConvert.DeserializeObject<JobMqMsg>(content);
+            JobMqMsg job = (JobMqMsg)sender;
+            PublicImportDataService.Instance.Start(job);
+        // }
+    }
+}

+ 35 - 0
AppStart/Helper/GetSpTimerLocal.cs

@@ -0,0 +1,35 @@
+using System.Collections.Generic;
+using System.Threading;
+using MySystem;
+
+public class GetSpTimerLocal
+{
+    public readonly static GetSpTimerLocal Instance = new GetSpTimerLocal();
+    private GetSpTimerLocal()
+    { }
+
+    public void Start()
+    {
+        Thread th = new Thread(DoWorks);
+        th.IsBackground = true;
+        th.Start();
+    }
+
+    //核对执行结果,并保存数据
+    public void DoWorks()
+    {
+        List<int> ids = new List<int>();
+        // ids.Add(12);
+        // ids.Add(13);
+        ids.Add(14);
+        // ids.Add(29);
+        // ids.Add(18);
+        ids.Add(19);
+        ids.Add(32);
+        foreach (int id in ids)
+        {
+            JobMqMsg job = TaskService.Instance.GetJob(id);
+            PublicImportDataService.Instance.Start(job);
+        }
+    }
+}

+ 66 - 0
AppStart/Helper/LogHelper.cs

@@ -0,0 +1,66 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Threading;
+using Library;
+using LitJson;
+using MySystem;
+
+public class LogHelper
+{
+    public readonly static LogHelper Instance = new LogHelper();
+    private LogHelper()
+    { }
+
+    public void WriteLog(string Content, string FileName, string BrandId = "0")
+    {
+        // function.WriteLog(Content, FileName);
+        Dictionary<string, string> dic = new Dictionary<string, string>();
+        dic.Add("Topic", FileName);
+        dic.Add("Content", Content);
+        dic.Add("BrandId", BrandId);
+        RedisDbconn.Instance.AddList("LogQueue", Newtonsoft.Json.JsonConvert.SerializeObject(dic));
+    }
+
+    public void Start()
+    {
+        Thread th = new Thread(DoWorks);
+        th.IsBackground = true;
+        th.Start();
+    }
+
+    public void DoWorks()
+    {
+        while (true)
+        {
+            string content = RedisDbconn.Instance.RPop<string>("LogQueue");
+            if (!string.IsNullOrEmpty(content))
+            {
+                try
+                {
+                    DoQueue(content);
+                }
+                catch (Exception ex)
+                {
+                    LogHelper.Instance.WriteLog(DateTime.Now.ToString() + "\n" + content + "\n" + ex, "SLS日志异常");
+                }
+            }
+            else
+            {
+                Thread.Sleep(5000);
+            }
+        }
+    }
+
+    public void DoQueue(string content)
+    { 
+        JsonData JsonObj = JsonMapper.ToObject(content);
+        string Topic = JsonObj["Topic"].ToString();
+        string Cont = JsonObj["Content"].ToString();
+        string BrandId = JsonObj["BrandId"].ToString();
+        SLS.WriteLog(DateTime.Now, Topic, Cont, new Dictionary<string, string>()
+        {
+            {"BrandId", BrandId}
+        });
+    }
+}

+ 38 - 0
AppStart/Helper/PublicErrService.cs

@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.Extensions.Hosting;
+using MySystem;
+
+public class PublicErrService : BackgroundService
+{
+    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
+    {
+        while (!stoppingToken.IsCancellationRequested)
+        {
+            ProgressStart();
+            await Task.Delay(5000);
+        }
+    }
+
+    private void ProgressStart()
+    {
+        List<Brand> BrandList = RedisDbconn.Instance.GetList<Brand>("brand", 1, 1000);
+        Parallel.ForEach(BrandList, brand =>
+        {
+            Dictionary<string, string> data = new Dictionary<string, string>();
+            try
+            { 
+                data = RedisDbconn.Instance.RPop<Dictionary<string, string>>(brand.ReqType + "_err");
+                RedisDbconn.Instance.AddList(brand.ReqType, data);
+            }
+            catch (Exception ex)
+            {
+                data.Add("TransferErr", ex.ToString());
+                data.Add("TransferErrTime", DateTime.Now.ToString());
+                RedisDbconn.Instance.AddList(brand.ReqType + "_service_err", data);
+            }
+        });
+    }
+}

+ 284 - 0
AppStart/Helper/PublicGetService.cs

@@ -0,0 +1,284 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using Library;
+using LitJson;
+
+namespace MySystem
+{
+    public class PublicGetService
+    {
+        public readonly static PublicGetService Instance = new PublicGetService();
+        private PublicGetService()
+        { }
+
+        public void StartGet(JobMqMsg jobInfo)
+        {
+            string content = "";
+            string CheckDate = DateTime.Now.ToString("yyMMdd");
+            Brand brand = jobInfo.BrandInfo;
+            try
+            {
+                if (brand.IsCheck)
+                {
+                    //清除5天前的数据
+                    string clearDate = DateTime.Now.AddDays(-5).ToString("yyMMdd");
+                    RedisDbconn.Instance.Clear(brand.ReqType + "_data_" + clearDate + "_*");
+                    if (brand.ReqType == "api")
+                    {
+                        //请求第三方接口获取数据
+                        string result = function.PostWebRequest(brand.Url, brand.ReqParam);
+                        JsonData jsonObj = JsonMapper.ToObject(result);
+                        if (jsonObj.Count > 0)
+                        {
+                            for (int i = 0; i < jsonObj.Count; i++)
+                            {
+                                content = jsonObj[i].ToJson();
+                                RedisDbconn.Instance.Set(brand.ReqType + "_data_" + CheckDate + "_" + brand.CheckKey, content);
+                            }
+                            jobInfo.Status = 1;
+                            jobInfo.Msg = "抓取完成";
+                            RabbitMQClient.Instance.SendMsg(Newtonsoft.Json.JsonConvert.SerializeObject(jobInfo), "GetSourceDataBack");
+                        }
+                        else
+                        {
+                            jobInfo.Status = 3;
+                            jobInfo.Msg = "暂无数据";
+                            RabbitMQClient.Instance.SendMsg(Newtonsoft.Json.JsonConvert.SerializeObject(jobInfo), "GetSourceDataBack");
+                        }
+                    }
+                    else if (brand.ReqType == "ftp")
+                    {
+                        List<string> files = function.GetFtpFileList(brand.Url, brand.FtpUserName, brand.FtpPassword);
+                        if (files.Count > 0)
+                        {
+                            foreach (string filename in files)
+                            {
+                                string downloadFilePath = function.FtpDownload(brand.Url, filename, brand.FtpUserName, brand.FtpPassword);
+                                if (!string.IsNullOrEmpty(downloadFilePath))
+                                {
+                                    content = function.ReadInstance(downloadFilePath);
+                                    RedisDbconn.Instance.Set(brand.ReqType + "_data_" + CheckDate + "_" + brand.CheckKey, content);
+                                }
+                            }
+                            jobInfo.Status = 1;
+                            jobInfo.Msg = "抓取完成";
+                            RabbitMQClient.Instance.SendMsg(Newtonsoft.Json.JsonConvert.SerializeObject(jobInfo), "GetSourceDataBack");
+                        }
+                        else
+                        {
+                            jobInfo.Status = 3;
+                            jobInfo.Msg = "暂无数据";
+                            RabbitMQClient.Instance.SendMsg(Newtonsoft.Json.JsonConvert.SerializeObject(jobInfo), "GetSourceDataBack");
+                        }
+                    }
+                }
+                else
+                {
+                    string OrderString = jobInfo.OrderString;
+                    if (OrderString.StartsWith("Sp:") && OrderString.EndsWith(":Sycn"))
+                    {
+                        int doCount = 0; //执行数量
+                        string TableName = OrderString.Split(':')[1];
+                        bool op = true;
+                        while (op)
+                        {
+                            string requestMes = RedisDbconn.Instance.RPop<string>(TableName);
+                            if (!string.IsNullOrEmpty(requestMes))
+                            {
+                                JsonData jsonData = JsonMapper.ToObject(requestMes);
+                                string tableName = jobInfo.BrandInfo.TargetTableName;
+                                string checkKey = jobInfo.BrandInfo.CheckKey;
+                                string sql = "insert into " + tableName + " (";
+                                List<FieldRelationTable> fields = jobInfo.BrandInfo.FieldRelation;
+                                foreach (FieldRelationTable field in fields)
+                                {
+                                    sql += field.TargetFieldName + ",";
+                                }
+                                sql = sql.TrimEnd(',');
+                                sql += ") values ($val$);select @@IDENTITY";
+                                DataTable check = dbconn.dtable("select * from " + tableName + " where " + checkKey + " = '" + jsonData[checkKey].ToString() + "'");
+                                if (check.Rows.Count < 1)
+                                {
+                                    string vals = "";
+                                    foreach (FieldRelationTable field in fields)
+                                    {
+                                        string val = jsonData[field.SourceFieldName ].ToString();
+                                        if (field.TargetFieldType == "number")
+                                        {
+                                            vals += val + ",";
+                                        }
+                                        else if (field.TargetFieldType == "date")
+                                        {
+                                            vals += "'" + DateTime.Parse(val).ToString("yyyy-MM-dd HH:mm:ss") + "',";
+                                        }
+                                        else
+                                        {
+                                            vals += "'" + val + "',";
+                                        }
+                                    }
+                                    vals = vals.TrimEnd(',');
+                                    sql = sql.Replace("$val$", vals);
+                                    DataTable dt = dbconn.dtable(sql);
+                                    if (dt.Rows.Count > 0)
+                                    { 
+                                        string Id = dt.Rows[0][0].ToString();
+                                        dt = dbconn.dtable("select * from " + tableName + " where Id=" + Id);
+                                        if (dt.Rows.Count > 0)
+                                        {
+                                            Dictionary<string, object> tendisObj = new Dictionary<string, object>();
+                                            foreach (DataColumn dc in dt.Columns)
+                                            {
+                                                tendisObj.Add(dc.ColumnName, dt.Rows[0][dc.ColumnName].ToString());
+                                            }
+                                            RedisDbconn.Instance.AddList(TableName, Newtonsoft.Json.JsonConvert.SerializeObject(tendisObj));
+                                        }
+                                    }
+                                    doCount += 1;
+                                }
+                            }
+                            else
+                            {
+                                op = false;
+                            }
+                        }
+                        if (doCount > 0)
+                        { 
+                            jobInfo.Status = 1;
+                            jobInfo.Msg = "抓取完成";
+                            RabbitMQClient.Instance.SendMsg(Newtonsoft.Json.JsonConvert.SerializeObject(jobInfo), "GetSourceDataBack");
+                        }
+                        else
+                        {
+                            jobInfo.Status = 3;
+                            jobInfo.Msg = "暂无数据";
+                            RabbitMQClient.Instance.SendMsg(Newtonsoft.Json.JsonConvert.SerializeObject(jobInfo), "GetSourceDataBack");
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                if (!string.IsNullOrEmpty(content))
+                {
+                    Dictionary<string, string> data = new Dictionary<string, string>();
+                    data.Add("ErrTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+                    data.Add("ErrMsg", ex.ToString());
+                    data.Add("Content", content);
+                    data.Add("CheckKey", brand.CheckKey);
+                    data.Add("CheckDate", CheckDate);
+                    RedisDbconn.Instance.AddList(brand.ReqType + "_get_err", data);
+                }
+                else
+                {
+                    RedisDbconn.Instance.AddList(brand.ReqType + "_get_service", DateTime.Now.ToString() + ":" + ex.ToString());
+                }
+            }
+        }
+
+        //核对抓取过来的数据和推送过来的数据
+        public void StartCheck(JobMqMsg jobInfo)
+        {
+            try
+            {
+                Brand brand = jobInfo.BrandInfo;
+                DataTable dt = dbconn.dtable("select * from " + brand.TargetTableName + " where Id>" + jobInfo.StartId + " and Status=0 order by Id");
+                if (dt.Rows.Count > 0)
+                {
+                    string note = "";
+                    DataColumnCollection columns = dt.Columns;
+                    int checkedCount = 0;
+                    foreach (DataRow dr in dt.Rows)
+                    {
+                        string checkDate = dr["CreateDate"].ToString();
+                        string jsonString = RedisDbconn.Instance.Get<string>(brand.ReqType + "_data_" + DateTime.Parse(checkDate).ToString("yyMMdd") + "_" + brand.CheckKey);
+                        JsonData jsonObj = JsonMapper.ToObject(jsonString);
+                        bool isOk = true;
+                        foreach (FieldRelationTable field in brand.FieldRelation)
+                        {
+                            string fType = field.TargetFieldType;
+                            if (fType == "int")
+                            {
+                                if (int.Parse(function.CheckInt(dr[field.TargetFieldName].ToString())) != int.Parse(function.CheckInt(jsonObj[field.SourceFieldName].ToString())))
+                                {
+                                    isOk = false;
+                                    note = "目标字段" + field.TargetFieldName + "和原始字段" + field.SourceFieldName + "不一致";
+                                    break;
+                                }
+                            }
+                            else if (fType == "decimal")
+                            {
+                                if (decimal.Parse(function.CheckNum(dr[field.TargetFieldName].ToString())) != decimal.Parse(function.CheckNum(jsonObj[field.SourceFieldName].ToString())))
+                                {
+                                    isOk = false;
+                                    note = "目标字段" + field.TargetFieldName + "和原始字段" + field.SourceFieldName + "不一致";
+                                    break;
+                                }
+                            }
+                            else if (fType == "datetime")
+                            {
+                                if (DateTime.Parse(dr[field.TargetFieldName].ToString()) != DateTime.Parse(jsonObj[field.SourceFieldName].ToString()))
+                                {
+                                    isOk = false;
+                                    note = "目标字段" + field.TargetFieldName + "和原始字段" + field.SourceFieldName + "不一致";
+                                    break;
+                                }
+                            }
+                            else
+                            {
+                                if (dr[field.TargetFieldName].ToString() != jsonObj[field.SourceFieldName].ToString())
+                                {
+                                    isOk = false;
+                                    note = "目标字段" + field.TargetFieldName + "和原始字段" + field.SourceFieldName + "不一致";
+                                    break;
+                                }
+                            }
+                        }
+                        if (isOk)
+                        {
+                            dbconn.op("update " + brand.TargetTableName + " set Status=1 where Id=" + dr["Id"].ToString());
+                            Dictionary<string, string> item = new Dictionary<string, string>();
+                            foreach (DataColumn dc in columns)
+                            {
+                                item.Add(dc.ColumnName, dr[dc.ColumnName].ToString());
+                            }
+                            RedisDbconn.Instance.AddList(brand.TargetTableName, item);
+                            jobInfo.EndId = int.Parse(dr["Id"].ToString());
+                            checkedCount += 1;
+                        }
+                        else
+                        {
+                            dbconn.op("update " + brand.TargetTableName + " set Status=-1 where Id=" + dr["Id"].ToString());
+                            RedisDbconn.Instance.AddList(jobInfo.Id + "_check_fail", dr);
+                        }
+                    }
+                    if (checkedCount < dt.Rows.Count)
+                    {
+                        jobInfo.Status = 2;
+                        jobInfo.Note = note;
+                        jobInfo.Msg = "核对未完成";
+                    }
+                    else
+                    {
+                        jobInfo.Status = 1;
+                        jobInfo.Msg = "核对完成";
+                    }
+                    RabbitMQClient.Instance.SendMsg(Newtonsoft.Json.JsonConvert.SerializeObject(jobInfo), "CheckSourceDataBack");
+                }
+                else
+                {
+                    jobInfo.Status = 3;
+                    jobInfo.Msg = "暂无数据核对";
+                    RabbitMQClient.Instance.SendMsg(Newtonsoft.Json.JsonConvert.SerializeObject(jobInfo), "CheckSourceDataBack");
+                }
+            }
+            catch (Exception ex)
+            { 
+                jobInfo.Status = -1;
+                jobInfo.Msg = "执行异常,请排查";
+                jobInfo.Note = ex.ToString();
+                RabbitMQClient.Instance.SendMsg(Newtonsoft.Json.JsonConvert.SerializeObject(jobInfo), "CheckSourceDataBack");
+            }
+        }
+    }
+}

+ 1198 - 0
AppStart/Helper/PublicImportDataService.cs

@@ -0,0 +1,1198 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Security.Cryptography;
+using System.Web;
+using System.Linq;
+using System.Text.RegularExpressions;
+using MySystem.Models;
+using Library;
+using LitJson;
+using System.Security.Cryptography.X509Certificates;
+using Org.BouncyCastle.Security;
+using Org.BouncyCastle.Crypto.Parameters;
+using System.Text;
+using Org.BouncyCastle.Crypto;
+using Org.BouncyCastle.Math;
+using System.Net.Http;
+using System.Threading.Tasks;
+using System.Threading;
+
+namespace MySystem
+{
+    public class PublicImportDataService
+    {
+        public readonly static PublicImportDataService Instance = new PublicImportDataService();
+        private PublicImportDataService()
+        { }
+
+
+        public void Start(JobMqMsg jobInfo)
+        {
+            string data = "";
+            try
+            {
+                string orderString = jobInfo.OrderString;
+                if (!string.IsNullOrEmpty(orderString))
+                {
+                    string key = orderString.Split(':')[1];
+                    int BrandId = int.Parse(function.CheckInt(key.Split('_')[3]));
+                    bool op = true;
+                    while (op)
+                    {
+                        try
+                        {
+                            data = RedisDbconn.Instance.RPop<string>(key);
+                            if (data != null)
+                            {
+                                string content = "";
+                                if (data.Contains("#cut#"))
+                                {
+                                    string[] dataList = data.Replace("\r", "").Replace("\n", "").Split(new string[] { "#cut#" }, StringSplitOptions.None);
+                                    JsonData jsonData = JsonMapper.ToObject(dataList[1]);
+                                    if (BrandId == 1)
+                                    {
+                                        content = Decrypt(jsonData["param"].ToString());
+                                        AppendLog(dataList[0], content, BrandId);
+                                        InsertData(key, content, jobInfo, BrandId);
+                                    }
+                                    else if (BrandId == 27)
+                                    {
+                                        content = LkbDecrypt(jsonData["param"].ToString());
+                                        AppendLog(dataList[0], content, BrandId);
+                                        InsertData(key, content, jobInfo, BrandId);
+                                    }
+                                    else if (BrandId == 2)
+                                    {
+                                        content = KDBDecrypt(jsonData["content"].ToString());
+                                        AppendLog(dataList[0], content, BrandId);
+                                        if (content.StartsWith("[") && content.EndsWith("]"))
+                                        {
+                                            content = content.Replace("null", "\"\"");
+                                            content = content.Replace("NULL", "\"\"");
+                                            JsonData list = JsonMapper.ToObject(content);
+                                            for (int i = 0; i < list.Count; i++)
+                                            {
+                                                InsertData(key, list[i].ToJson(), jobInfo, BrandId);
+                                            }
+                                        }
+                                        else
+                                        {
+                                            InsertData(key, content, jobInfo, BrandId);
+                                        }
+                                    }
+                                    else if (BrandId == 4)
+                                    {
+                                        content = LSDecrypt(jsonData["data"].ToString(), jsonData["sign"].ToString());
+                                        AppendLog(dataList[0], content, BrandId);
+                                        InsertData(key, content, jobInfo, BrandId);
+                                    }
+                                    else if (BrandId == 8 || BrandId == 9)
+                                    {
+                                        content = HKDecrypt(jsonData["data"].ToString(), jsonData["sign"].ToString(), BrandId);
+                                        AppendLog(dataList[0], content, BrandId);
+                                        InsertData(key, content, jobInfo, BrandId);
+                                    }
+                                    else if (BrandId == 10)
+                                    {
+                                        content = LDDecrypt(jsonData["data"].ToString());
+                                        AppendLog(dataList[0], content, BrandId);
+                                        InsertData(key, content, jobInfo, BrandId);
+                                    }
+                                    else if (BrandId == 34)
+                                    {
+                                        string aesKey = jsonData["encryptKey"].ToString();
+                                        aesKey = LDZZBDecrypt(aesKey);
+                                        content = AesDecrypt(jsonData["data"].ToString(), aesKey);
+                                        AppendLog(dataList[0], content, BrandId);
+                                        InsertData(key, content, jobInfo, BrandId);
+                                    }
+                                    else if (BrandId == 12)
+                                    {
+                                        content = dataList[1];
+                                        JsonData header = JsonMapper.ToObject(dataList[0]);
+                                        string signstr = header["X-Sign"][0].ToString();
+                                        SortedList<string, string> dic = Newtonsoft.Json.JsonConvert.DeserializeObject<SortedList<string, string>>(content);
+                                        string sign = function.BuildQueryString(dic);
+                                        bool checkSign = BoxVerifySign(sign, signstr);
+                                        if(checkSign)
+                                        {
+                                            AppendLog(dataList[0], content, BrandId);
+                                            InsertData(key, content, jobInfo, BrandId);
+                                        }
+                                    }
+                                    else if (BrandId == 15 || BrandId == 17)
+                                    {
+                                        content = PosPDecrypt(jsonData["content"].ToString(), jsonData["sign"].ToString());
+                                        if(!string.IsNullOrEmpty(content))
+                                        {
+                                            AppendLog(dataList[0], content, BrandId);
+                                            InsertData(key, content, jobInfo, BrandId);
+                                        }
+                                    }
+                                    else if (BrandId == 30)
+                                    {
+                                        content = LklDecrypt(jsonData["data"].ToString());
+                                        if(!string.IsNullOrEmpty(content))
+                                        {
+                                            AppendLog(dataList[0], content, BrandId);
+                                            InsertData(key, content, jobInfo, BrandId);
+                                        }
+                                    }
+                                    else
+                                    {
+                                        content = dataList[1];
+                                        InsertData(key, content, jobInfo, BrandId);
+                                    }
+                                    if (dataList.Length > 2)
+                                    {
+                                        string fileName = dataList[2];
+                                        if (System.IO.File.Exists(function.getPath("/redis/" + key + "/" + fileName + ".txt")))
+                                        {
+                                            System.IO.File.Delete(function.getPath("/redis/" + key + "/" + fileName + ".txt"));
+                                        }
+                                    }
+                                }
+                            }
+                            else
+                            {
+                                // op = false;
+                                Thread.Sleep(function.get_Random(3000, 5000));
+                            }
+                        }
+                        catch (Exception ex)
+                        {
+                            function.WriteLog(DateTime.Now.ToString() + "\n" + data + "\n" + ex.ToString(), key + "队列异常");
+                            Start(jobInfo);
+                            Thread.Sleep(60000);
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                LogHelper.Instance.WriteLog(DateTime.Now.ToString() + "\n" + data + "\n" + ex.ToString(), "public_import_service");
+                Start(jobInfo);
+            }
+        }
+        private void AppendLog(string header, string content, int BrandId)
+        {
+            string BrandName = "";
+            if (BrandId == 1)
+            {
+                BrandName = "金控";
+            }
+            else if (BrandId == 2)
+            {
+                BrandName = "开店宝";
+            }
+            else if (BrandId == 4)
+            {
+                BrandName = "乐刷";
+            }
+            else if (BrandId == 6)
+            {
+                BrandName = "立刷";
+            }
+            else if (BrandId == 22)
+            {
+                BrandName = "立刷微电签";
+            }
+            else if (BrandId == 8)
+            {
+                BrandName = "海科电签";
+            }
+            else if (BrandId == 9)
+            {
+                BrandName = "海科大POS";
+            }
+            else if (BrandId == 10)
+            {
+                BrandName = "联动电签";
+            }
+            else if (BrandId == 12)
+            {
+                BrandName = "盒易付";
+            }
+            else if (BrandId == 15)
+            {
+                BrandName = "联客宝";
+            }
+            else if (BrandId == 30)
+            {
+                BrandName = "拉卡拉";
+            }
+            LogHelper.Instance.WriteLog(DateTime.Now.ToString() + "\r\n" + header + "\r\n" + content, BrandName + "推送消息");
+        }
+
+        private void InsertData(string key, string content, JobMqMsg jobInfo, int BrandId)
+        {
+            string Id = DoQueue(content, jobInfo.BrandInfo, BrandId);
+            // 商户入库
+            if (key.Contains("_changebind_"))
+            {
+                int IdNum = int.Parse(Id);
+                WebCMSEntities db = new WebCMSEntities();
+                BindRecord bind = db.BindRecord.FirstOrDefault(m => m.Id == IdNum);
+                if (bind != null)
+                {
+                    // string ProductType = BrandId.ToString();
+                    // bool check = db.Merchants.Any(m => m.MerNo == bind.MerNo && m.ProductType == ProductType);
+                    // if (!check)
+                    // {
+                    db.Merchants.Add(new Merchants()
+                    {
+                        CreateDate = DateTime.Now,
+                        UpdateDate = DateTime.Now,
+                        MerNo = bind.MerNo, //商户编号
+                        MerName = bind.MerName, //商户名称
+                        AgentName = bind.AgentName, //机构名称
+                        ProductType = BrandId.ToString(), //产品类型
+                        Remark = "商户入库", //注释
+                        CreateTime = DateTime.Now, //创建时间
+                        UpdateTime = DateTime.Now, //更新时间
+                        SnNo = bind.MerSnNo, //SN号
+                        MerMobile = bind.MerNewSnNo,
+                        MerIdcardNo = bind.SeoKeyword,
+                        SeoTitle = bind.SeoTitle,
+                        Field1 = bind.MerOperateType,
+                        Field2 = bind.Field1,
+                        Status = 1,
+                    });
+                    db.SaveChanges();
+                    // }
+                }
+                db.Dispose();
+            }
+            try
+            {
+                // PublicImportDataServiceRds.Instance.DoQueue(content, jobInfo.BrandInfo, BrandId);
+            }
+            catch{}
+        }
+
+        public void Test(JobMqMsg jobInfo, string date, int kind)
+        {
+            try
+            {
+                string orderString = jobInfo.OrderString;
+                if (!string.IsNullOrEmpty(orderString))
+                {
+                    string key = orderString.Split(':')[1];
+                    int BrandId = int.Parse(function.CheckInt(key.Split('_')[3]));
+                    string source = function.ReadInstance("/log/金控推送消息/" + date.Replace("-", "/") + "/content.log");
+                    string patten = "";
+                    if (kind == 1)
+                    {
+                        patten = "{.*?绑定.*?}]\"}";
+                    }
+                    else if (kind == 2)
+                    {
+                        patten = "{.*?2022年飞天系列-小宝电签.*?}";
+                    }
+                    else if (kind == 3)
+                    {
+                        patten = "{.*?otherFee.*?}";
+                    }
+                    if (!string.IsNullOrEmpty(patten))
+                    {
+                        MatchCollection mc = Regex.Matches(source, patten); //交易
+                        foreach (Match sub in mc)
+                        {
+                            string content = sub.Value;
+                            string Id = DoQueue(content, jobInfo.BrandInfo, BrandId);
+                            // 商户入库
+                            if (key.Contains("_bind_"))
+                            {
+                                int IdNum = int.Parse(Id);
+                                WebCMSEntities db = new WebCMSEntities();
+                                BindRecord bind = db.BindRecord.FirstOrDefault(m => m.Id == IdNum);
+                                if (bind != null)
+                                {
+                                    string ProductType = BrandId.ToString();
+                                    bool check = db.Merchants.Any(m => m.MerNo == bind.MerNo && m.ProductType == ProductType);
+                                    if (!check)
+                                    {
+                                        db.Merchants.Add(new Merchants()
+                                        {
+                                            CreateDate = DateTime.Now,
+                                            UpdateDate = DateTime.Now,
+                                            MerNo = bind.MerNo, //商户编号
+                                            MerName = bind.MerName, //商户名称
+                                            AgentName = bind.AgentName, //机构名称
+                                            ProductType = BrandId.ToString(), //产品类型
+                                            Remark = "商户入库", //注释
+                                            CreateTime = DateTime.Now, //创建时间
+                                            UpdateTime = DateTime.Now, //更新时间
+                                            SnNo = bind.MerSnNo, //SN号
+                                            MerMobile = bind.MerNewSnNo,
+                                            MerIdcardNo = bind.SeoKeyword,
+                                            Status = 1,
+                                        });
+                                        db.SaveChanges();
+                                    }
+                                }
+                                db.Dispose();
+                            }
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                LogHelper.Instance.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "public_import_service");
+            }
+        }
+
+        public string DoQueue(string data, Brand brand, int BrandId = 1)
+        {
+            if (string.IsNullOrEmpty(data))
+            {
+                return "0";
+            }
+            //数据开始入库
+            data = data.Replace("null", "\"\"");
+            JsonData jsonObj = JsonMapper.ToObject(data);
+            string fields = "ProductType,";
+            string fieldvals = BrandId + ",";
+            fields += "SeoDescription,";
+            fieldvals += "'" + HttpUtility.UrlEncode(data) + "',";
+            if (!brand.IsCheck)
+            {
+                fields += "Status,";
+                fieldvals += "1,";
+            }
+            string sourceCheckKey = "";
+            foreach (FieldRelationTable field in brand.FieldRelation)
+            {
+                string fType = field.TargetFieldType;
+                string fName = field.TargetFieldName;
+                string sName = field.SourceFieldName;
+                string val = "";
+                if(sName == "#{now}#")
+                {
+                    val = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+                }
+                else if (sName.Contains(","))
+                {
+                    string[] flist = sName.Split(',');
+                    if (flist.Length == 2)
+                    {
+                        if (data.Contains("\"" + flist[1] + "\""))
+                        {
+                            val = jsonObj[flist[0]][flist[1]].ToString();
+                        }
+                    }
+                    else if (flist.Length == 3)
+                    {
+                        if (data.Contains("\"" + flist[2] + "\""))
+                        {
+                            val = jsonObj[flist[0]][flist[1]][flist[2]].ToString();
+                        }
+                    }
+                }
+                else
+                {
+                    if (data.Contains("\"" + sName + "\""))
+                    {
+                        val = jsonObj[sName].ToString();
+                    }
+                }
+                string checkFields = "," + brand.CheckKey + ",";
+                // if (fName == brand.CheckKey)
+                if (checkFields.Contains("," + fName + ","))
+                {
+                    if (fType == "number")
+                    {
+                        sourceCheckKey += " and " + fName + "=" + decimal.Parse(function.CheckNum(val)) + "";
+                    }
+                    else if (fType == "date")
+                    {
+                        sourceCheckKey += " and " + fName + "='" + DateTime.Parse(val).ToString("yyyy-MM-dd HH:mm:ss") + "'";
+                    }
+                    else if (fType == "timestempms")
+                    {
+                        sourceCheckKey += " and " + fName + "='" + function.ConvertIntDateTimeMini(long.Parse(val)).ToString("yyyy-MM-dd HH:mm:ss") + "'";
+                    }
+                    else if (fType == "timestemps")
+                    {
+                        sourceCheckKey += " and " + fName + "='" + function.ConvertIntDateTime(double.Parse(val)).ToString("yyyy-MM-dd HH:mm:ss") + "'";
+                    }
+                    else if (fType == "timestring")
+                    {
+                        string datetime = val.Substring(0, 4) + "-" + val.Substring(4, 2) + "-" + val.Substring(6, 2) + " " + val.Substring(8, 2) + ":" + val.Substring(10, 2) + ":" + val.Substring(12, 2);
+                        sourceCheckKey += " and " + fName + "='" + datetime + "'";
+                    }
+                    else
+                    {
+                        sourceCheckKey += " and " + fName + "='" + val + "'";
+                    }
+                }
+                fields += fName + ",";
+                if (fType == "number")
+                {
+                    fieldvals += decimal.Parse(function.CheckNum(val)) + ",";
+                }
+                else if (fType == "date")
+                {
+                    fieldvals += "'" + DateTime.Parse(val).ToString("yyyy-MM-dd HH:mm:ss") + "',";
+                }
+                else if (fType == "timestempms")
+                {
+                    fieldvals += "'" + function.ConvertIntDateTimeMini(long.Parse(val)).ToString("yyyy-MM-dd HH:mm:ss") + "',";
+                }
+                else if (fType == "timestemps")
+                {
+                    fieldvals += "'" + function.ConvertIntDateTime(double.Parse(val)).ToString("yyyy-MM-dd HH:mm:ss") + "',";
+                }
+                else if (fType == "timestring")
+                {
+                    string datetime = val.Substring(0, 4) + "-" + val.Substring(4, 2) + "-" + val.Substring(6, 2) + " " + val.Substring(8, 2) + ":" + val.Substring(10, 2) + ":" + val.Substring(12, 2);
+                    fieldvals += "'" + datetime + "',";
+                }
+                else
+                {
+                    fieldvals += "'" + val + "',";
+                }
+            }
+            string checksql = "select Id from " + brand.TargetTableName + " where ProductType='" + BrandId + "'" + sourceCheckKey;
+            if(brand.TargetTableName == "BindRecord")
+            {
+                string Id = RedisDbconn.Instance.Get<string>("BindRecordIdLimit");
+                if(string.IsNullOrEmpty(Id)) Id = "700000";
+                checksql += " and Id>" + Id;
+            }
+            else if(brand.TargetTableName == "ActivateRecord")
+            {
+                string Id = RedisDbconn.Instance.Get<string>("ActivateRecordIdLimit");
+                if(string.IsNullOrEmpty(Id)) Id = "500000";
+                checksql += " and Id>" + Id;
+            }
+            else if(brand.TargetTableName == "TradeFluxRecord")
+            {
+                string Id = RedisDbconn.Instance.Get<string>("TradeFluxRecordIdLimit");
+                if(string.IsNullOrEmpty(Id)) Id = "400000";
+                checksql += " and Id>" + Id;
+            }
+            if(brand.TargetTableName == "TradeRecord")
+            {
+                // checksql = "select Id from " + brand.TargetTableName + " where Id>1520000 and ProductType='" + BrandId + "'" + sourceCheckKey;
+                checksql = "select Id from TradeRecord where Id=0";
+            }
+            DataTable dt = dbconn.dtable(checksql);
+            if (dt.Rows.Count < 1)
+            {
+                fields = fields.TrimEnd(',');
+                fieldvals = fieldvals.TrimEnd(',');
+                if(!fields.Contains("CreateDate"))
+                {
+                    fields += ",CreateDate";
+                    fieldvals += ",'" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "'";
+                }
+                string sql = "insert into " + brand.TargetTableName + " (" + fields + ") values (" + fieldvals + ");select @@IDENTITY";
+                dbconn.op(sql);
+                if(brand.TargetTableName == "BindRecord")
+                {
+                    string[] fieldList = fields.Split(',');
+                    string[] fieldValList = fieldvals.Split(',');
+                    string mer_field = "CreateDate,UpdateDate,Remark,CreateTime,UpdateTime,Status";
+                    string mer_val = "'" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "','" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "','商户入库','" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "','" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "',1";
+                    int index = 0;
+                    foreach(string field in fieldList)
+                    {
+                        if(field == "MerNo")
+                        {
+                            mer_field += ",MerNo";
+                            mer_val += "," + fieldValList[index];
+                        }
+                        if(field == "MerName")
+                        {
+                            mer_field += ",MerName";
+                            mer_val += "," + fieldValList[index];
+                        }
+                        if(field == "AgentName")
+                        {
+                            mer_field += ",AgentName";
+                            mer_val += "," + fieldValList[index];
+                        }
+                        if(field == "ProductType")
+                        {
+                            mer_field += ",ProductType";
+                            mer_val += "," + fieldValList[index];
+                        }
+                        if(field == "MerSnNo")
+                        {
+                            mer_field += ",SnNo";
+                            mer_val += "," + fieldValList[index];
+                        }
+                        if(field == "MerNewSnNo")
+                        {
+                            mer_field += ",MerMobile";
+                            mer_val += "," + fieldValList[index];
+                        }
+                        if(field == "SeoKeyword")
+                        {
+                            mer_field += ",MerIdcardNo";
+                            mer_val += "," + fieldValList[index];
+                        }
+                        if(field == "SeoTitle")
+                        {
+                            mer_field += ",SeoTitle";
+                            mer_val += "," + fieldValList[index];
+                        }
+                        if(field == "MerOperateType")
+                        {
+                            mer_field += ",Field1";
+                            mer_val += "," + fieldValList[index];
+                        }
+                        if(field == "Field1")
+                        {
+                            mer_field += ",Field2";
+                            mer_val += "," + fieldValList[index];
+                        }
+                        index += 1;
+                    }
+                    sql = "insert into Merchants (" + mer_field + ") values (" + mer_val + ");";
+                    dbconn.op(sql);
+                }
+                DataTable result = dbconn.dtable("select Id from " + brand.TargetTableName + " order by Id desc limit 1");
+                if (result.Rows.Count > 0)
+                {
+                    return result.Rows[0][0].ToString();
+                }
+            }
+            return "0";
+        }
+
+
+
+
+
+        #region 金控
+        // 开发环境
+        // string clientId = "1243966544896";
+        // string mfe88PublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCy8cg6/tXbSj2i1tyi7VztwJw7uNmqc3bS6sVIZkDYhTmcXhpV17jq4j2zz/tURwX8b3MdK1A1HTR1XRd7hl0w2UF9iFk6UezByJ5tdNDoffMCGJtVSThq+MCV+WQI26tJ/ub6bm7GPrzTR79fntN+nTniRM4trjONN2WzEhHEcwIDAQAB";
+        // string mfe88PrivateKey = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBALLxyDr+1dtKPaLW3KLtXO3AnDu42apzdtLqxUhmQNiFOZxeGlXXuOriPbPP+1RHBfxvcx0rUDUdNHVdF3uGXTDZQX2IWTpR7MHInm100Oh98wIYm1VJOGr4wJX5ZAjbq0n+5vpubsY+vNNHv1+e036dOeJEzi2uM403ZbMSEcRzAgMBAAECgYAeRbb4/AmTypB4zt6OlZdGBXKoy9HO+y+b6OmtINdRieBAKs9LvG3lFpcXp1S+YjGKDhSsV5p/EczBGhmR5R44j52886h6OoU0HskifeEJs152gMXLEFya/1QWnf1Ev+ugzuto+CxuHlGHE0T43uFkuATZp4sfXX/03um99FIKmQJBAOrYJX+VmKdNbmwNKMXkFBAw6FM4wrtr6vT3ne0pBWgbUDIH8cs83wq/SQHuvy/Cafqr8qWC9fFX2m+hllzxzA0CQQDDEIDNXdRxEmRVQ90lnn6ppnERvLhTY3RyuyOj3aqM1lxWEU2vvylimCpccTEqgY/PqMwfqChSf2v3S2CFjzJ/AkAPw2ho8vKnMDRcPlnhRpjuKUo+4812ZR0FSmWoWJuLTGIKqavaN4DFKOfOoGbm3sbcU5Ra9bpqc7ouygrcvEI1AkB8uqbBqsfW7X2+j8Bu96Picw1F3Di5CZVCb6tgcrNFjyRH3JSiVkfuRYKAzdg0Z9g/Xp33eB0gc13kKQy1GlWdAkB6Emn94YesoHda26HWbrgBy18KSfcLH57EuXquX/pOma1TXjaXw1E7kkFz1EPde9WzuSWUmGN2AdJT0ruTOb4C";
+        // string clientPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCb861uuey1252WdS8KPeBB+vm5AIBEKclsfBzVLY1cZXiiEbInCmsqT6fSO+A6wjWyJixGCzZICmUxhdBzuo3Du2YTbuo+fRlV6DW1mbguBV8/l2+LJvht0jl87J8N4skFUzvAeYKpWDX6dC6cLzjm5nyI1OrCQq0lsWPEMDCNAwIDAQAB";
+        // string clientPrivateKey = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAJvzrW657LXbnZZ1Lwo94EH6+bkAgEQpyWx8HNUtjVxleKIRsicKaypPp9I74DrCNbImLEYLNkgKZTGF0HO6jcO7ZhNu6j59GVXoNbWZuC4FXz+Xb4sm+G3SOXzsnw3iyQVTO8B5gqlYNfp0LpwvOObmfIjU6sJCrSWxY8QwMI0DAgMBAAECgYAjE0dqo/6NWHu1H14ZG5mYvW31Ihu3OP7Im5GQkNI+ecQMD5bWGQ3JUmkYa8ce8BdLnjJO/q6SvWPNI5+ip87CYPH1SMXKUiSLzaCrw4xMySW9PSnudTzJwhrmlmyjYTAg70tHf2YQC4YkNvtkR+PJ2yf6JEKGFVgP5p2KyeKXgQJBANjGryxyu95QC3jIaggcYmGD36sVO/ns8Uyu8PkAHYOscuXRcV0L8LghIzPolcehj9bTbDLjiuNgeuyjNs2YBvMCQQC4K4uIXt0kVDLYzlJfhN1CsV90vQitcKdD8wTO0JRKfMCQ6UDSumU7lq+z4TxTlRYxmZjpgIqH+N0WohmEiwWxAkBEfuMzBD3gjSJS0+DNF0ruzSCLinYdDoVgWZbC1wp8ZK0ZeQh9AhzZ0X6yFDffkGlG1B9IJSXpmr68rwXOCM+JAkBkrKEUxc6bGk/FRluvDWEqIO2uUdtZfBhjQ4ggSdKWOUXGsUsXJn9KKKAZc4lXo0rDiFQXaIXRuE+bHLdYReqxAkAj0Kol0LkJgdl2PoBAeyQHTpt9nxaeNX56W7CN/srBA1O2wr+aoQiJaKsu9I0EeW3zaMJlLi3VyjU4wnF+yAsB";
+
+        // 生产环境
+        string clientId = "4487378308096";
+        string mfe88PublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2HxPVZ5ZIxIWfr24qB45PAz9WfjN9CiF1x9Lz3P/tVvIXFdBaUw+9zxCAPRDGQxJId7anjEjCOuAIKpFOiTPhVqHTHd3075FFsW5fL7lFCOFJELTj+mVamAIbKalAuRzIX0m0VQUXd+madB+yRQSBjkOIboAMYQ9amf99SqI9KwIDAQAB";
+        string clientPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrSrNKkBt/X8Fkd7viGpTMk+GdJgE+SvoA4PSjccpZoLWnwxXsC8K/7pfm9uGxPjte9e4RznXE5nuhSrcfls4lDWhTrGd/lj3Id8OCM+yEG+xilJs1lvXJjHDhL6/wa+TE5NSzWoKgXnyeHF3TSHMbUefLLtoKqL3j4h4lPqrjiQIDAQAB";
+        string clientPrivateKey = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKtKs0qQG39fwWR3u+IalMyT4Z0mAT5K+gDg9KNxylmgtafDFewLwr/ul+b24bE+O1717hHOdcTme6FKtx+WziUNaFOsZ3+WPch3w4Iz7IQb7GKUmzWW9cmMcOEvr/Br5MTk1LNagqBefJ4cXdNIcxtR58su2gqovePiHiU+quOJAgMBAAECgYBQIIyIR6slRWTRG5V/KlIK9O5oNbwFKMuUF6c4weUXUi9Hv+GEXugGIpVaTIi9AdCCFmb8W2kJ54tTowDQvRnGxVpr7repYwJv2jHh5ug3oreBghfbfbaOaRMXisp2x1CLi+8Q5BNjpe9KdurRtg7jt8bqgWels5aV2PbjPHHwBQJBANjqYXbapz6xUPdI0kyEQhdxHt7jOmysTY3vT+/UcgU2sf37hWh8JlTtVlFZns3JBocc9rMtBEAh0Cy5faMQXKMCQQDKJ9eYWQvb1GyB5IdDlkOuByyuwFfosZ0Qp+QNtnz1VAHHgQRM7RGNv3nYDJNEJ+qIhIzZppG5yDbAN7PYyTXjAkEAq8a4VkIDbZ9HyfxOJbAbEqtPUhzJ+KNea0cXm4o2nTBaNhLH7B1c0aZ908BQBRDr7XWfW/cLRapBTBm8h7R+VwJBAJAKrZMPN+TuSlaPaFYfNqBE2nC1+q2CCQE6L8QZmJYRwqbN5iuN7CkNGxt3cmNo8bNOhzH6fvFamLCDwDEixbMCQEgaxfAxpJdMoR6LrklSkigHiKfA6SaRWxxShFtBfjk5XcakmLkU/U5lgD/Blu7h4x6bRf4VPTYWdbxtiOK11rY=";
+        string reqUrl = "https://push.mfe88.com/push-service/api/SETSERVICEFEE";
+        string reqUrl2 = "https://push.mfe88.com/push-service/api/MODIFYPERPOSFEE";
+        
+        public bool Verify()
+        {
+            string data = "ZV0BBQ2hNgeZKKAPZ3XXEJGhp/h3+Mq5ejxuCI9SRbrDRls0XtfJRWboT5+J1sfHkb/J3eI4ThkTI/DjRNLK4x7fFYD62coClL7zDXeES42RXrpBik7VHHllUIS5nZFT23QME8kxRdo/6FH7Sv0J7IP5Qtqe70b3syv1jXmv8JozoP6DQjqHnlggpRM+4Ppks5PXorvHW7yI3uOgJL06t0GWDZIh7FRQ6UU41ayDsY0Z8j9o5quD8DSGJ1po6YPdmr2FpbFL5hs+buYhfEwsOwbvU5Aawbt+XuNXlU21wjeyC/8h2/yiPJSpCGjNXzzY4BBIhWDIbyxrbV+7SGIC+gNK2oQV0Ldtq9dXmljqA8e2dWsa8IaGaXmfo/85Ef2W5qIByrn42K+rA1nzhbR+L0WPGd4ugyzx6eiUl6T0oXVMaTIIoM6fndrm7RubsfNRZizrkQ+ocnAraMnGPZq84NpRp0Qs+pg8mlAIrqQ0avDutY1jGkzFXAljYGhiPvN7ntydmn2P2jgiPfh65VWumcXU+cp8d/nTD8eT/HmVbXUNMp/1ckP+VoK2wdowvgmgAruD3Fjfo8EghAfWEfuAVIsErxGxKCF17AUI8ZIqa+JYxxaA9vjxklavLmB9MAovx3JQSGXqXNNTy3LBljb1dZr3yk0ER9Qv8K4Bqc7Ti6gHHBFc7uu+wnqD7kTieMn++TpNo44MR8tGSmN6lzZKrio1czTyLLANLzzH4lBipTalGjgFnKcaNdVloW63DKkpz3qugCeBotRDdkH3T7DtYVz41lmJyLlxToeyFxXzqV0yqopR62QIghRO/vI9DpMDJclQMKEaCs9Py4qgMz2BmTqnESU42XDyNCMY5JVGpClZJgXNPmWLU0xrOu7B/tMEfThj9pNPBqNkbWQkLZ1MaSiMrfoHfQ7krt6TV6B2rhyfwrjKysXex4IHUX0nRTT55HcqQc38FlpeC4+kaTTSRs0HGMteiq+3BfDY0vHxH84x22WeN7oE7JbD/Ttd6Tn4";
+            string signString = "cuo8Rp0Hhc1pzEkzvx3tlGV6aBhZoD3F+b1FM07IkCTQwTVzz0EzgO0auQt+Wqf9ndWERa7P9jTqHS4JKYQH+LGLXjVgQPekzrePNnIcVVFqjf3VC+xImxSxJLaChHxiF+ufDpU9symoesub51QRCPSUB3xuQ2uP2lSbVmgcjvw=";
+            // var signer = SignerUtilities.GetSigner("SHA256withRSA");
+            // var pubkey = Convert.FromBase64String(mfe88PublicKey);
+            // // var pubkey = StrToToHexByte(mfe88PublicKey);
+            // var publicKeyParam = (RsaKeyParameters)PublicKeyFactory.CreateKey(pubkey);
+            // signer.Init(false, publicKeyParam);
+            // var signBytes = Convert.FromBase64String(signString);
+            // var plainBytes = Convert.FromBase64String(data);
+            // signer.BlockUpdate(plainBytes, 0, plainBytes.Length);
+            // return signer.VerifySignature(signBytes);
+            var toDecryptArray = Convert.FromBase64String(data);
+            var toSignArray = Convert.FromBase64String(signString);
+            // var pubkey = Encoding.UTF8.GetBytes(mfe88PublicKey);
+            // using (var x509 = new X509Certificate2(pubkey))
+            // {
+            //     using (var rsa = x509.GetRSAPublicKey())
+            //     {
+            //         return rsa.VerifyData(toDecryptArray, toSignArray, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
+            //     }
+            // }
+            var rsa = RSA.Create();
+            rsa.ImportRSAPublicKey(Convert.FromBase64String(mfe88PublicKey), out _);
+            return rsa.VerifyData(toDecryptArray, toSignArray, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
+        }
+        private byte[] StrToToHexByte(string hexString)
+        {
+            hexString = hexString.Replace(" ", "");
+            if ((hexString.Length % 2) != 0)
+                hexString += " ";
+            byte[] returnBytes = new byte[hexString.Length / 2];
+            for (int i = 0; i < returnBytes.Length; i++)
+                returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
+            return returnBytes;
+        }
+
+        public string Decrypt(string data)
+        {
+            var toDecryptArray = Convert.FromBase64String(data);
+            var rsa2 = RSA.Create();
+            rsa2.ImportPkcs8PrivateKey(Convert.FromBase64String(clientPrivateKey), out _);
+            string result = "";
+            List<byte> cache = new List<byte>();
+            for (int i = 0; i < toDecryptArray.Length; i++)
+            {
+                cache.Add(toDecryptArray[i]);
+                if ((i + 1) % 128 == 0 || i + 1 == toDecryptArray.Length)
+                {
+                    var ContentArray = rsa2.Decrypt(cache.ToArray(), RSAEncryptionPadding.Pkcs1);
+                    result += System.Text.Encoding.UTF8.GetString(ContentArray);
+                    cache.Clear();
+                }
+            }
+            return result;
+        }
+        public string SetDeposit(string sn, decimal serviceFee)
+        {
+            serviceFee = serviceFee * 100;
+            Dictionary<string, string> headers = new Dictionary<string, string>();
+            headers.Add("X-Client-ID", clientId);
+            headers.Add("X-Security", "RSA");
+            string content = "{\"sn\":\"" + sn + "\",\"serviceFee\":\"" + serviceFee.ToString("f0") + "\"}";
+            content = Encrypt(content);
+            string signstr = Sign(content);
+            headers.Add("X-Sign", signstr);
+            string req = "{\"param\":\"" + content + "\"}";
+            string result = function.PostWebRequest(reqUrl, req, headers, "application/json");
+            return result;
+        }
+        public string SetFee(string merNo, string sn, decimal fee = 0.6M)
+        {
+            List<SetDepositList> rateDOs = new List<SetDepositList>();
+            rateDOs.Add(new SetDepositList()
+            {
+                productSubType = "2020032007vz7Ux6",
+                updateValue = fee,
+                updateType = 0
+            });
+            Dictionary<string, string> headers = new Dictionary<string, string>();
+            headers.Add("X-Client-ID", clientId);
+            headers.Add("X-Security", "RSA");
+            Dictionary<string, object> obj = new Dictionary<string, object>();
+            obj.Add("merNo", merNo);
+            obj.Add("sn", sn);
+            obj.Add("batchUpdateType", 2);
+            obj.Add("rateDOs", rateDOs);
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(obj);
+            LogHelper.Instance.WriteLog(DateTime.Now.ToString(), "设置金控机具费率");
+            LogHelper.Instance.WriteLog(content, "设置金控机具费率");
+            content = Encrypt2(content);
+            string signstr = Sign(content);
+            headers.Add("X-Sign", signstr);
+            string req = "{\"param\":\"" + content + "\"}";
+            string result = function.PostWebRequest(reqUrl2, req, headers, "application/json");
+            LogHelper.Instance.WriteLog(result, "设置金控机具费率");
+            return result;
+        }
+        public Dictionary<string, object> CallBack()
+        {
+            string trace = function.MD5_32(Guid.NewGuid().ToString()) + function.get_Random(8);
+            Dictionary<string, object> obj = new Dictionary<string, object>();
+            // Dictionary<string, string> headers = new Dictionary<string, string>();
+            // headers.Add("X-Client-ID", clientId);
+            // headers.Add("X-Security", "RSA");
+            string content = "{\"code\":\"0000\",\"msg\":\"OK\"}";
+            content = Encrypt(content);
+            // string signstr = Sign(content);
+            // headers.Add("X-Sign", signstr);
+            obj.Add("code", "000000");
+            obj.Add("message", "OK");
+            obj.Add("trace", "");
+            obj.Add("data", content);
+            return obj;
+        }
+        public string Encrypt(string data)
+        {
+            return new RSAHelper(RSAType.RSA, System.Text.Encoding.UTF8, "", mfe88PublicKey).Encrypt(data);
+        }
+
+        public string Encrypt2(string data)
+        {
+            return new RSAHelper(RSAType.RSA, System.Text.Encoding.UTF8, "", mfe88PublicKey).Encrypt2(data);
+        }
+        public string Sign(string data)
+        {
+            var toEncryptArray = System.Text.Encoding.UTF8.GetBytes(data);
+            var rsa = RSA.Create();
+            rsa.ImportPkcs8PrivateKey(Convert.FromBase64String(clientPrivateKey), out _);
+            string result = "";
+            var buffer = rsa.SignData(toEncryptArray, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
+            result = Convert.ToBase64String(buffer);
+            return result;
+            // return new RSAHelper(RSAType.RSA, System.Text.Encoding.UTF8, clientPrivateKey, "").Sign(data);
+        }
+        #endregion
+
+        #region 开店宝
+
+        string KdbApiUrl = "https://kzy.kdb-tj.com:5055/api";
+        string KDBAESKEY = "gvB%UOF3eBqKf!$k";
+        // string Kdb_Rsa_PinlicKey = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJzLZwTVqTU10mnPaxhTCQa89uR9hk/1MGJcKS6lpNDZaJFrXI48tTsk46jJgkXnDMqJoNIk+iLWXhKK/n8azQMCAwEAAQ==";
+        string Kdb_Rsa_PrivateKey = "MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEAl2x9dSSCfNDik6VM2dn/SK1ONSbb7AKyXM1gHw8PMbzWN1pK7YGaPqHlIRbAeFeIvLKVeMxrji+63W6LpB0yDQIDAQABAkAfpHUnCIUYDhJ65f0EPTDCgCyqoL8uN3YMPIKMmvoC22/i7AC6zf/bWk4JdratN+gvvnjGgHQff6HH5dOQ6sbFAiEAxPYSLADzIv374J8O+LluXIcgI5zXm4r4dMtKbCmmWSsCIQDE0BRKsBcBZ9NvJ9Km+m/d1hN9v5hFT842zrkUFJmVpwIgBdYc17z3d3P7QL613NzxzkAazbNaGDvX/O4BOI9LZJ0CICrZElHgXGHV9NYyWU45H7mwLbYmzEPqx/5uqySQB4/pAiBgKYv3RGnsZ8Zm1EKAJjUX7ehdteBgPSA/UgIDZQ4oyw==";
+
+        // 查询机构政策列表
+        public string GetPolicyList()
+        {
+            string url = KdbApiUrl + "/marketing/plan/query/list";
+            //[{"id":100014,"name":"韩测试营销方案(韩测试营销方案)"}]
+            return PostKDB(url, "");
+        }
+
+        // 查询政策下的押金
+        public string GetDepositList(string planId)
+        {
+            string url = KdbApiUrl + "/marketing/deposit/query/planId";
+            string content = "{\"planId\":\"" + planId + "\"}";
+            //[{"depositId":26,"depositName":"押0返0","amount":0.00},{"depositId":28,"depositName":"押199返199","amount":199.00},{"depositId":29,"depositName":"押299返299","amount":299.00},{"depositId":27,"depositName":"押99返99","amount":99.00}]
+            return PostKDB(url, content);
+        }
+
+        // 修改押金接口
+        public string ModifyDeposit(string PosSn, string depositId)
+        {
+            string url = KdbApiUrl + "/marketing/deposit/query/planId";
+            string content = "{\"posSnStart\":\"" + PosSn + "\",\"posSnEnd\":\"" + PosSn + "\",\"depositId\":" + depositId + "}";
+            return PostKDB(url, content);
+        }
+
+        public string KDBDecrypt(string data)
+        {
+            string result = AesDecrypt(data, KDBAESKEY);
+            return result;
+        }
+
+        public string AesDecrypt(string str, string key)
+        {
+            if (string.IsNullOrEmpty(str)) return null;
+            byte[] toEncryptArray = Convert.FromBase64String(str);
+
+            System.Security.Cryptography.RijndaelManaged rm = new System.Security.Cryptography.RijndaelManaged
+            {
+                Key = Encoding.UTF8.GetBytes(key),
+                Mode = System.Security.Cryptography.CipherMode.ECB,
+                Padding = System.Security.Cryptography.PaddingMode.PKCS7,
+            };
+
+            System.Security.Cryptography.ICryptoTransform cTransform = rm.CreateDecryptor();
+            byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
+            return Encoding.UTF8.GetString(resultArray);
+        }
+
+        public string AesEncrypt(string str)
+        {
+            // if (string.IsNullOrEmpty(str)) return null;
+            Byte[] toEncryptArray = Encoding.UTF8.GetBytes(str);
+
+            System.Security.Cryptography.RijndaelManaged rm = new System.Security.Cryptography.RijndaelManaged
+            {
+                Key = Encoding.UTF8.GetBytes(KDBAESKEY),
+                Mode = System.Security.Cryptography.CipherMode.ECB,
+                Padding = System.Security.Cryptography.PaddingMode.PKCS7
+            };
+            System.Security.Cryptography.ICryptoTransform cTransform = rm.CreateEncryptor();
+            Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
+            return Convert.ToBase64String(resultArray);
+        }
+
+        public string PostKDB(string path, string content)
+        {
+            string url = KdbApiUrl + path;
+            content = PublicImportDataService.Instance.AesEncrypt(content);
+            string timestamp = function.GetCurTimestamp().ToString();
+            string sign = PublicImportDataService.Instance.KDBSign(content + timestamp);
+            string req = "{\"agencyId\":\"3013890129\",\"content\":\"" + content + "\",\"timestamp\":\"" + timestamp + "\",\"sign\":\"" + sign + "\"}";
+            string result = PostWebRequest(url, req, new Dictionary<string, string>());
+            return result;
+        }
+
+        private string PostWebRequest(string postUrl, string paramData, Dictionary<string, string> headers)
+        {
+            string ret = string.Empty;
+            try
+            {
+                byte[] postData = System.Text.Encoding.UTF8.GetBytes(paramData);
+                // 设置提交的相关参数 
+                System.Net.HttpWebRequest request = System.Net.WebRequest.Create(postUrl) as System.Net.HttpWebRequest;
+                System.Text.Encoding myEncoding = System.Text.Encoding.UTF8;
+                request.Method = "POST";
+                request.KeepAlive = false;
+                request.AllowAutoRedirect = true;
+                request.ContentType = "application/json";
+                foreach (string key in headers.Keys)
+                {
+                    request.Headers.Add(key, headers[key]);
+                }
+                request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR  3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";
+
+                request.ContentLength = postData.Length;
+
+                // 提交请求数据 
+                System.IO.Stream outputStream = request.GetRequestStream();
+                outputStream.Write(postData, 0, postData.Length);
+                outputStream.Close();
+                System.Net.HttpWebResponse response;
+                System.IO.Stream responseStream;
+                System.IO.StreamReader reader;
+                string srcString;
+                response = request.GetResponse() as System.Net.HttpWebResponse;
+                responseStream = response.GetResponseStream();
+                reader = new System.IO.StreamReader(responseStream, System.Text.Encoding.UTF8);
+                srcString = reader.ReadToEnd();
+                ret = srcString;   //返回值赋值
+                reader.Close();
+            }
+            // catch (System.Net.WebException ex)
+            // {
+            //     System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)ex.Response;
+            //     System.IO.Stream myResponseStream = response.GetResponseStream();
+            //     //获取响应内容
+            //     System.IO.StreamReader myStreamReader = new System.IO.StreamReader(myResponseStream);
+            //     ret = myStreamReader.ReadToEnd();
+            //     myResponseStream.Close();
+            // }
+            catch (Exception ex)
+            {
+                ret = "fail";
+                LogHelper.Instance.WriteLog(DateTime.Now.ToString() + "\r\n" + ex.ToString(), "请求开店宝API异常");
+            }
+            return ret;
+        }
+
+        public string KDBSign(string data)
+        {
+            var rsa = RSA.Create();
+            var key = Convert.FromBase64String(Kdb_Rsa_PrivateKey);
+            var content = Encoding.UTF8.GetBytes(data);
+            rsa.ImportPkcs8PrivateKey(key, out _);
+            var result = rsa.SignData(content, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
+            return Convert.ToBase64String(result);
+
+            // return CSRSAHelper.Sign(data, Kdb_Rsa_PrivateKey, "utf-8");
+        }
+
+        #endregion
+
+        #region 乐刷
+
+        string LSPrivateKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMjld3flY+R+9WTR2MvcR9qWISdmpayL3GNGg9gvzwkXkhDI/E7rX6ndLvVuaBbLWXB+UOh+8Pfw3Gvfv3D2GHZCTzPHOKrs2tyzqC8EmMUDQaoVOI2BY4vtB7IjNe9FlLGZx62JEJrMkHKnOSQxsi+flCoexKc2t1q7kQsO2F+3AgMBAAECgYBmQ7EB/mpQOXSPYucaN0L4eW3dEbqKUBPbEV0yInwgo7f+BWGyhsyGuooZ857W46Leyd5Dy8K8ZAbAfwCD7zJZsSzWsuvWQE991f+n0V7AAnKc3h4OsHa4oITUNo2nD3PvOpWfQx8vSuQuSFQgx0ExdnywS3So16mG2X6J2k87wQJBAPTfV10MNpA1e5oRdX4D4lQ2tVyg5GW72NMhUGWct/FvgcEW3V7xZ0z/gSLfFcGI8c4LGYWRVPIsBnWFx0LSZ6ECQQDSBoqXuF/LobfFFT3D47ixL8d+qDbOJ+ro3p4+iCkdxxJ/ncaqouxsr3fBbkSWh4t+UkbbihO/isPdBwLPZihXAkAc2jwHAKtlLogTzT7UzExcs92GvoZq3klcBy7b6i1aS1M0lycaSsNrNSfYHgUIOsSTDIfDTy59ImbYbhzeaMBBAkEAyfz6i4IJt3jXmZadKWk4NkhiT6CN3OUtGjsH69Hd4UKUuuFNsMwyHzD+NqzLEA5aDOoqNXftGDjnuAnHHRn9zwJAHqPHR5ZOKDN/ujeAIUTwmFFJh8vx6ujv7UTesBbtTsFYW6bZln+X6aS2G3Kdvz3e2cxQyH8ncc0yIh64a1fqyg==";
+
+        public string LSDecrypt(string data, string sign)
+        {
+            var toDecryptArray = Convert.FromBase64String(sign);
+            var rsa2 = RSA.Create();
+            rsa2.ImportPkcs8PrivateKey(Convert.FromBase64String(LSPrivateKey), out _);
+            var ContentArray = rsa2.Decrypt(toDecryptArray, RSAEncryptionPadding.Pkcs1);
+            string aeskey = System.Text.Encoding.UTF8.GetString(ContentArray);
+            return AesDecrypt(data, aeskey);
+        }
+
+        #endregion
+
+        #region 海科
+
+        string HKPrivateKey1 = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAK5iJ2q2nF+9jEnof9VYhMdbAgI0ZS4cYmgWTMW2JR61lJhR0GH+A/m6mjN9FsTS6Bq03u/+e6BKdE6VqMGk0q7asi2VZIgD59zj4HubS8EFrcb5ZprwmGLnG71cBga7V5EWnHxSB9BlbFt6rGeQiit8NSbv62NxGh1U+rAVE/a3AgMBAAECgYEApQGxpJNowls8bQ74LytUcMMX0ng7qXcoUq+PM6IX28gb9EmuMZtHrb05fjEGI3YiNGsjbNpTpqftCBMrHRjWVRgb0PDf/zD9YYrxmcP9DWKQjG5f1ygYtQBlnOPEX963Y2SXrsTKr4+szTpI8r6YqFfVbbooKVMesCBtshgg16kCQQDYHGDuCuOzULP84QvGi8z+wHNv0arFpYYxvwitntD7K3iolAh8gTDWeaC03MHruGM43ybCUi9EHhCrcVKjgpK1AkEAzpIUajdmAAwtwGg4G0v7tP/ulmpGhnALVN84gSMAc5f8D6aCnoUyle+GylwRBw9WblHBLxsOtARQIvvdphDrOwJBAIFvXc60zvQTHfoTf84G5VyfP4R1e2atYNZiqHv0Zw5IVxgAsaSAbBPI/SvWHH9mDGd/n+M6/fw6VZmZYfl0txECQQCQB3yifpPpDpTL5h7QsY8EKbqyN9GKpQ7Rk35zU/NZpawDQYcrfhXCQytJZx4cPQ53hxtae9QpoiQ58EEgLAXHAkABzJ/QDS1QfYrkP9t9X+Pny2iEuWGeIHyfsfSKQKr5pv16k1WqiIvlFRyDPl+aw5IOedkYb0vSkcU1KzjMW+Ra";
+        string HKPrivateKey2 = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAIyARvyTYvGledv+4E3D8FxsS07pmzZYJkIdWxov/xApB6Mb2BVP6BkhsRyoySWbEyiYlZpx1A3b7D4yc7vD3WfB0i0cGPwMdJP/vGuzWfF2mLY0v4mJrxdXuGeWpfWnl4DP0aQS6qkUlei6f0vWS76wdpHvKUGb17Nz/f9ezr5tAgMBAAECgYBoLhn04Qil67BvKw+BOj+5GGfC7L81TamYrpHF2j8D6ZiLHnNcYjLUp8HfYVw9MT7EhFex/KNjX2ZOPDTKzpIVXofs9or1fqPYwUewBFHD9rwTrThKySdwbKrRAFNw7YXaJvMEdpPaxBBsMvfC5EdvrFejZ80TpGGfXyIXaxuC1QJBAP/6XsinJ4ZgoJj2PRPc5pWRqUssERV2w07LCPEGxxyECoyEzrTIoj7KcwSXYTSx2GGeEiSpijye9rFCHoHUNF8CQQCMg14KaLi3RjddGYatmO4SHr/IFlwpjL16rw+poOHN1WwMmex1qd3JfNab0vi5GEkFg1fAbIMRiwksvXS0ReCzAkB5/dcoJ0lV6D0BSPDIw5D8nQOieKjXotbneSmUvJctxtvEJhLg43E3HYJ9IKvJ0iv+MbgR0t63j0agKZOiagBfAkAuU3ViyynzStQf/rV3cI81LCwgpLaYAE3MMAFi9KbdvPqVoP3jwTBdKKp8z26vX8FbbvU0fNItq4BH3uKmOM+fAkAnBwxmorni7Y6Zs24pevDVqMpcF9SkOigRKsO9Lc1HuAJuxHEoPW5KeascBVe3HfYqgt4HWIxNy/d2MvpvNaWo";
+
+        public string HKDecrypt(string data, string sign, int BrandId)
+        {
+            var toDecryptArray = Convert.FromBase64String(sign);
+            var rsa2 = RSA.Create();
+            string HKPrivateKey = "";
+            if(BrandId == 8)
+            {
+                HKPrivateKey = HKPrivateKey1;
+            }
+            else if(BrandId == 9)
+            {
+                HKPrivateKey = HKPrivateKey2;
+            }
+            rsa2.ImportPkcs8PrivateKey(Convert.FromBase64String(HKPrivateKey), out _);
+            var ContentArray = rsa2.Decrypt(toDecryptArray, RSAEncryptionPadding.Pkcs1);
+            string aeskey = System.Text.Encoding.UTF8.GetString(ContentArray);
+            return AesDecrypt(data, aeskey);
+        }
+
+        #endregion
+
+        #region 联动
+
+        //测试环境
+        // string LDRequestUrl = "http://111.14.221.188:18066/CloudTerminalServiceAction/";
+        // string AgentNo = "LD110014";
+        // string LDPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3WG04QXTzWBg2rj4BbSmnXVTqQiCk2lZ7yi2vur2LxsSc+KN0o1W9y2AkCHcFIAk2aAfMEMQYTO3HQ+F/Vcb27BNBSjnaOLfGv0PXNHKyVzC4EQLe4M5Pqd1wMl6NaZK+HnyrPBTnfsGeywhGJc1Ke96ANrydhk7UbwezydC7nQIDAQAB";
+        // string LDPrivateKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJwUiLkXb6zTpvNmB+zTZtuJi97/XCdGBWgiMn/2ayVEtRuarPOvMUQo0aX4Pb/JrfdFyQccXiXFGtmh/m5Mhfuj03t0pOTC4bniQAy2veytDhnRImL1xY9YjSMX+YRXI44VRcNUSefyNmBjL7V1HgbJOfnq/PmVkcBClTf1gtefAgMBAAECgYBRbYkS/34crWNJUq7JyFS+LllRounh9270r/qmtdmaXOkbmKuoinrqc11E+GjGuSJQghDp68vWaqmiZxhFVRkEqPzaesYyMJr73GB/efXhIRWWGCqQvARs3QgOFmCL2YsC/Vq7niI72mmNLC9jOUFN30vCnJH7xI2PljfQKBLwkQJBAN1/JRJmt+2ms/eeGsI/tgClciCAfHzTtAhPHRs7XL98mzk8IDGFjysKsiSacAym5e0xV1uB6ijsuAm61go4b8cCQQC0ZLVyKdUPadhzXSjyOqtk4HVzorHW6OkDCnMazL0CYLxdJOQzrpicPhww0TB397rqLC+FuGEOEcjrDnYyGQlpAkEAq4OU9VbM/h2kJg4rslcbXAzA/yH/Q7m7IuQAKeIhw7V9jShd1XsSjcXOhEGCmolyaeVXO+ixpdcH+6DNtURWaQJACh5L/ydRiBfLyEzFazDXREVC0UWi7AcMats/MZWiVGvQpPjYw/1bGghx1FsneNMwbMolsD5zUzK0LlsVTiIRYQJAZT0p0Mg3kqSaYO2JlC6fTkI9aHMJ50iDr8qLJ2JnrNFylDxxoHwKfA7GxA2KGotguGTKhw7xCp+IyrXtXiuNrQ==";
+
+        //生产环境
+        string LDRequestUrl = "http://ldys.umpay.com/service_exter/CloudTerminalServiceAction/";
+        string AgentNo = "LD112692";
+        string LDPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCGtWShTeFEgSSFx3PJXcjCOmS+OgtcUvPOHhpALY3Orm6t7rl1E0n3j7XlM049YwwtGRJI4OWhgrtR4/AnOMBXdyMBoKxF23uay1WQiNekzfUrTwil7/CRrQ+VlGgPe6dr3WQT2/HLbzMnJHeoIZ4KSIj/7pgAwTF4ciL1UC3awwIDAQAB";
+        string LDPrivateKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJwUiLkXb6zTpvNmB+zTZtuJi97/XCdGBWgiMn/2ayVEtRuarPOvMUQo0aX4Pb/JrfdFyQccXiXFGtmh/m5Mhfuj03t0pOTC4bniQAy2veytDhnRImL1xY9YjSMX+YRXI44VRcNUSefyNmBjL7V1HgbJOfnq/PmVkcBClTf1gtefAgMBAAECgYBRbYkS/34crWNJUq7JyFS+LllRounh9270r/qmtdmaXOkbmKuoinrqc11E+GjGuSJQghDp68vWaqmiZxhFVRkEqPzaesYyMJr73GB/efXhIRWWGCqQvARs3QgOFmCL2YsC/Vq7niI72mmNLC9jOUFN30vCnJH7xI2PljfQKBLwkQJBAN1/JRJmt+2ms/eeGsI/tgClciCAfHzTtAhPHRs7XL98mzk8IDGFjysKsiSacAym5e0xV1uB6ijsuAm61go4b8cCQQC0ZLVyKdUPadhzXSjyOqtk4HVzorHW6OkDCnMazL0CYLxdJOQzrpicPhww0TB397rqLC+FuGEOEcjrDnYyGQlpAkEAq4OU9VbM/h2kJg4rslcbXAzA/yH/Q7m7IuQAKeIhw7V9jShd1XsSjcXOhEGCmolyaeVXO+ixpdcH+6DNtURWaQJACh5L/ydRiBfLyEzFazDXREVC0UWi7AcMats/MZWiVGvQpPjYw/1bGghx1FsneNMwbMolsD5zUzK0LlsVTiIRYQJAZT0p0Mg3kqSaYO2JlC6fTkI9aHMJ50iDr8qLJ2JnrNFylDxxoHwKfA7GxA2KGotguGTKhw7xCp+IyrXtXiuNrQ==";
+
+        public string LDEncrypt(string data)
+        {
+            return new RSAHelper(RSAType.RSA, System.Text.Encoding.UTF8, "", LDPublicKey).Encrypt(data);
+        }
+
+        public string LDDecrypt(string data)
+        {
+            var toDecryptArray = Convert.FromBase64String(data);
+            var toKey = Convert.FromBase64String(LDPrivateKey);
+            var rsa = RSA.Create();
+            rsa.ImportPkcs8PrivateKey(toKey, out _);
+            string result = "";
+            List<byte> cache = new List<byte>();
+            for (int i = 0; i < toDecryptArray.Length; i++)
+            {
+                cache.Add(toDecryptArray[i]);
+                if ((i + 1) % 128 == 0 || i + 1 == toDecryptArray.Length)
+                {
+                    var ContentArray = rsa.Decrypt(cache.ToArray(), RSAEncryptionPadding.Pkcs1);
+                    result += System.Text.Encoding.UTF8.GetString(ContentArray);
+                    cache.Clear();
+                }
+            }
+            return result;
+        }
+
+        #endregion
+        
+        #region 联动掌中宝
+
+        //测试环境
+        // string LDZZBPrivateKey = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCtINYRcRSTpDwvG3rpSTwqqGXAz6/KGXNckoHQthooeie7If3vq2Ec/qdndAQu6p0V2LOwRrVhoznJ0Z+xCkf6CgpYflUQY8GJHedDoCgZEe3gKeMAdbNqcyJDb4FQWRJuy9W9vlnTQaKAGYDwNFsO3s4R0vmJvGl8Nix8s1Sd1SJy5IJioY+Vb2JTG9Ke2ZoDDl3rJl6FKdoIDnad28g/xAzioc84wNACLkeA/6pZfqsoqvjR7nr7FADypX3s9hxwGt6Zf4hxwb5RNYBLsy+EBOF13QsfoBetnYAghH6ppFm8GC9CRgnHOnOa1DnicXLn1Aah6L4zx94rAo8k6A9FAgMBAAECggEBAIk7pxRKS6JApEg/Ay3alGvH8mhk+JY9mFk/9NDpGFEPi2Dlr/GEKsWeAjqaFxrNdFk13jGTywErLoqQtIHUgXts7Ah7k5gbSvUSlBfh4wcEVEfFTCA4LFDsFLPZtmpnQJo8zx/JvFAeDd522OMOzUM7T6OHVbBdfkwscRUj3aYBUaK4XqhbWFP1otLEQqINUpYKa7BhxJ8JyLmxyEVa2kQqAomGnrD2So17F/lVeTtj8gL/cpShknUwhVb7aZiMbJPO77dR6s1aFlIKZYq8jMO88u60P7HhHnDQECRWmST4c/jecWkYTrKk3tsZ1DzGox15vuFOeQtcOSWhu0tAT+ECgYEA/s5KWNjUB7PI+7ul0JuLwtkbMkU2U+RLryE64YaE9syKJo66FLSQCKgJ07Au1O5BNdu4hySf54ePCT4+UUuvVahG2FedFlMdvFF6V5w/jtcDO1AhXFHgNwnNNoCdX8dqIWNvt2oHqCFbJsPevYysG0893Q/o3mk8hL1ko3+j8akCgYEArfCNFi7Mk4oUyrwR64e96vASUPQVC5DOR/qZhZynPRSb40PPUxJdoovzVWxUGwBtP0GnqkOHUgeMi0sKZMsnXEXDa3NjILCIL7q1DihjFkx10jlt2XWFaUQ7/L9LfWxAFGVIBcuhLp/llzO1a9LU/SOGVkz6OuEm+ubYFH476j0CgYEArvBtBPDhKeSacZKUtlOEsiMi0/HG6fQMrlFvPpV/xn4Jv40wXrTVSswr6wXEMXbemJ6g41AW5PwiDSOJ34DKAVJGSZRlioVIHhoGmA3zaRtf4aITNXIVMVRuayQEaFTeHcxKUC/gz+MO1N+XlqX1J87Q12xr4f94iF4LsWEZ6vkCgYA9n/Msf8olH4+8QCONMdt8iC/FFKT8IwKih8uqhdTOlCWiwByNDv2zoCfHBQlLQ7xw4972ONSRoHEPzLdS/JLmYyUYRZpCM6kcV+bbrD1m4hIAOC6OE8//ephSNKgXOKn/T97ThtCFR0s9ZamKGPky8koe+0jQYYLA89ZsdEjf9QKBgQCp6kM6yZCGknLbg8+iRCmum3iuav0Dm4Bnemvv9rawqwodmOgxReQtRQo596Yc+nkAPVOmNKYK9hetvLau29JJELKvWngZcASVs8QEMcaNRoKtqOx2Wb10Sp41G+FoCaNGY+aIWp7jvbP4AhbTuKii+e0j9OthrSAOyZFDVCzvUQ==";
+
+        //生产环境
+        string LDZZBPrivateKey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDWEttbrR7VQ+07SRl1HlbWMfW2ao52Ycu4CVcJZdC5HwRDPJpTyJulf8CaaJ5hv2UCx218uj5Yo2WKiHGxPwU+Hj03VQX3Hn5K8TKIYyhD197QE+LHEdHcdIwB+GHyLR1U62HkEIcYyC0PdCLPkKkWsYhbJsCx5NbDzQPJnARg4g02Q/qP04VrnDSmY5piaKLXlGUXRhYcaKBw/PMYOt+4NCyMwM1VltgEQSKsN6Ta7PjhsQfj7TRStIBnpKbsolkp47acEEwEGK1w8ZyXND9vPVwkF4TzDQoSgk3+/4EydO3e8Afn8yseCy47GAdNZRQJeHF0FqyxMJbvHrKNfyabAgMBAAECggEAYVz8Nar8XgTh7dfmYzUkS5E3bvrxxnfePtrIojaTgs7PkoEKs9aGq/P5toCkoFJ7b5Migdr3JjtSoHpEM1g1WzZHo1XhO667w/wFfrCSjKCu7zZMKzw4larQTskYSxwnvgq8YA0AVM4eaGvqtTrXHMIsAUET3RT2dOFWuqhh+WmhM8nNthuKnfBoMi7mKd41OJcaoRUXoziEFyEMAd9AMWt285o7TvOFHDnBmhYYsBeTn3RSGEdG62khpteW4KW1aQi+nxHlMao9HdHxCsumPecmM+zF5DE3m1y8WlNaYi8aQrLkHbY8CwxGQ9tGxb+4CTGq4s3dy+RSNrWkcrRdIQKBgQD5pH+bvTJV8xph1PdWuNY5cM+fbqkmt+SGqeXaVRh3hOm7bPmpaTrcdQvm3gS0pYGHF93mgb1PsUBOBANT2Wd6uaIc1gBKjSwEG3Nd0cgQLyMQd4fNP/ET6jcfzg1qYBpLx0iKpyhCwmP1Or4Hy2no35hM2fbxv4WY2sVN7zweCwKBgQDbhnkYgj8zW3OkgNpBXwl3SEa/+K2gCj109zyVsUj8hP0FbDTGPvlx/VctXF5SOoTgs3x+G/96Px04PPzw/c4Tp9ToD2v6h1v64dAfEq35CwfNr/0LE/QEjAEUn1iLfjdQJoCroocYIkdaquHC1EOfr4if5U+A3rzY5jQ2MaTDsQKBgQDMaJNMVEiI8/ugK58y1Toj4mk+5H+AgoaOdUMN2SulgaFYpExxGQbnSLesHBLCT9qVYUeC3KzEOiCrQMHwwEzowmMpNVkbsiheXJPEOGeWSOJvM1BxEXA2nEryseduOK6PaefOEDz5HO5399dtznM0CRFNrBN1sxqTJF72B3O0LQKBgGHIXFhWa+Bsc+5qls1Xj9faEemg03XeGdHn7sye02vnsOyhbkB//IyR1CsYYcsu1dFhIarqvbmuM03BnMmbxBdtQqC7fdVyRb5Sp2mv4F52U1uDcKtmj+MWmcSd1csMxYamH9pT4ukVG8N/KmCmPBj9D1ZpxigZDvVuVQNuyX2BAoGBAI53c4yoq3M4zlIEmaWlEspfi13QmHqGJnzDM6glzj/WXybhfHDJprXXvzFdip6XTNEHeI1B5rpgQ1OfpBbPpwEzuUc7HIsgeLbMpHERXoYmuF0SG3lzQR0EnGrlWFDTpbXcCbANWx0i90e9Y47cuvGcpB4ZZSIKrjixpY8CMH2S";
+
+        public string LDZZBDecrypt(string data)
+        {
+            var toDecryptArray = Convert.FromBase64String(data);
+            var toKey = Convert.FromBase64String(LDZZBPrivateKey);
+            var rsa = RSA.Create();
+            rsa.ImportPkcs8PrivateKey(toKey, out _);
+            var ContentArray = rsa.Decrypt(toDecryptArray, RSAEncryptionPadding.Pkcs1);
+            string result = System.Text.Encoding.UTF8.GetString(ContentArray);
+            // List<byte> cache = new List<byte>();
+            // for (int i = 0; i < toDecryptArray.Length; i++)
+            // {
+            //     cache.Add(toDecryptArray[i]);
+            //     if ((i + 1) % 128 == 0 || i + 1 == toDecryptArray.Length)
+            //     {
+            //         var ContentArray = rsa.Decrypt(cache.ToArray(), RSAEncryptionPadding.Pkcs1);
+            //         result += System.Text.Encoding.UTF8.GetString(ContentArray);
+            //         cache.Clear();
+            //     }
+            // }
+            return result;
+        }
+
+        #endregion        
+
+        #region 盒易付
+
+        //测试环境
+        // string BoxPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjMQxp24mjxDTr13uPW0y+tiO1yXFGw7P/pPQ0oZKK7F6KstEaus7pLEywBZ5XRXE5jgkhR2TS7Ne7djJfbpn5yFc6pPlz3ZsOfBVeB88NEwhx6xzCGX2eqSSkO33n8w2G0xc2ss5HpYBarT00NBZWhrwOXpdRPYLOYHKVU3Rl+FA9xDw/wYfoWvrr+JSfHRGn/ENMmQFEdckAbPauKaQMrZD2kz+PRrhq56eWnCuVQPcaz/jroVT8qQEgkg2IsNy+DwfLOIqm8IySEpxnQ5wN/KvsQJc2wXDQNf9F5kvWwjoqSSP0qJS+oPRXET+zJb+WTk2y5M6AYoC9NodwsC4NwIDAQAB";
+
+        //生产环境
+        string BoxPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjmjoQirIYZBD9Qon2HkF4j/NAINXtJ7Lzq/WXxTF7t7mg7LNARt0+ZZaeWx8caq2fv5zdsGyyoInL23cBtDI5KmFfK69iA0ygQMK0WbiKqsUB1OpPbT3+9zLuadIJAznjA223lY6CIjTpdLZhaRjImNVqc60bdkx6YsQcA+xW+3r1JH4PPHb7yBEbkKIX8OhyX7U4p0TkbDkAobbjHr5YB9gmYLoSFJMOPfTtSExkv7/Y7IVR9poZAHcr3teFoAiXW3RzxelRtnXxIkl/6AUOKoL5fhr/UTUN+Q18uzNljYWr6SwnTI3EmtzgykaewWtZvV85Xdhe/BjiQ5Xor7YbwIDAQAB";
+        
+        public bool BoxVerifySign(string toSignStr, string signStr)
+        {
+            byte[] toSignByte = Encoding.Default.GetBytes(toSignStr);
+            byte[] signByte = Convert.FromBase64String(signStr);
+            var toKey = Convert.FromBase64String(BoxPublicKey);
+            var rsaroot = RSA.Create();
+            rsaroot.ImportSubjectPublicKeyInfo(toKey, out _);
+            var publicKeyParameters = rsaroot.ExportParameters(false);
+            using (var rsa = RSA.Create())
+            {
+                rsa.ImportParameters(publicKeyParameters);
+                var sha256 = SHA256.Create();
+                var hash = sha256.ComputeHash(toSignByte);
+                return rsa.VerifyHash(hash, signByte, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
+            }
+        }
+
+        #endregion
+
+        #region POSP
+
+        //测试环境
+        string PosPKey = "6v8cr0uyhtwtawda";
+
+        //生产环境
+        // string PosPKey = "6v8cr0uyhtwtawda";
+        
+        public string PosPDecrypt(string toSignStr, string signStr)
+        {
+            string result = AesDecrypt(toSignStr, PosPKey);
+            SortedList<string, string> res = Newtonsoft.Json.JsonConvert.DeserializeObject<SortedList<string, string>>(result);
+            if(result.Contains("\"sign\""))
+            {
+                res.Remove("sign");
+            }
+            SortedList<string, string> newres = new SortedList<string, string>();
+            foreach(string key in res.Keys)
+            {
+                if(!string.IsNullOrEmpty(res[key]))
+                {
+                    newres.Add(key, res[key]);
+                }
+            }
+            string signstr = function.BuildQueryString(newres) + PosPKey;
+            string sign = function.MD532(signstr).ToUpper();
+            if(signStr == sign)
+            {
+                return result;
+            }
+            return "";
+        }
+
+        #endregion
+        
+        #region 来客吧L版
+        // 开发环境
+        // string clientId = "1243966544896";
+        // string mfe88PublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCy8cg6/tXbSj2i1tyi7VztwJw7uNmqc3bS6sVIZkDYhTmcXhpV17jq4j2zz/tURwX8b3MdK1A1HTR1XRd7hl0w2UF9iFk6UezByJ5tdNDoffMCGJtVSThq+MCV+WQI26tJ/ub6bm7GPrzTR79fntN+nTniRM4trjONN2WzEhHEcwIDAQAB";
+        // string mfe88PrivateKey = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBALLxyDr+1dtKPaLW3KLtXO3AnDu42apzdtLqxUhmQNiFOZxeGlXXuOriPbPP+1RHBfxvcx0rUDUdNHVdF3uGXTDZQX2IWTpR7MHInm100Oh98wIYm1VJOGr4wJX5ZAjbq0n+5vpubsY+vNNHv1+e036dOeJEzi2uM403ZbMSEcRzAgMBAAECgYAeRbb4/AmTypB4zt6OlZdGBXKoy9HO+y+b6OmtINdRieBAKs9LvG3lFpcXp1S+YjGKDhSsV5p/EczBGhmR5R44j52886h6OoU0HskifeEJs152gMXLEFya/1QWnf1Ev+ugzuto+CxuHlGHE0T43uFkuATZp4sfXX/03um99FIKmQJBAOrYJX+VmKdNbmwNKMXkFBAw6FM4wrtr6vT3ne0pBWgbUDIH8cs83wq/SQHuvy/Cafqr8qWC9fFX2m+hllzxzA0CQQDDEIDNXdRxEmRVQ90lnn6ppnERvLhTY3RyuyOj3aqM1lxWEU2vvylimCpccTEqgY/PqMwfqChSf2v3S2CFjzJ/AkAPw2ho8vKnMDRcPlnhRpjuKUo+4812ZR0FSmWoWJuLTGIKqavaN4DFKOfOoGbm3sbcU5Ra9bpqc7ouygrcvEI1AkB8uqbBqsfW7X2+j8Bu96Picw1F3Di5CZVCb6tgcrNFjyRH3JSiVkfuRYKAzdg0Z9g/Xp33eB0gc13kKQy1GlWdAkB6Emn94YesoHda26HWbrgBy18KSfcLH57EuXquX/pOma1TXjaXw1E7kkFz1EPde9WzuSWUmGN2AdJT0ruTOb4C";
+        // string clientPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCb861uuey1252WdS8KPeBB+vm5AIBEKclsfBzVLY1cZXiiEbInCmsqT6fSO+A6wjWyJixGCzZICmUxhdBzuo3Du2YTbuo+fRlV6DW1mbguBV8/l2+LJvht0jl87J8N4skFUzvAeYKpWDX6dC6cLzjm5nyI1OrCQq0lsWPEMDCNAwIDAQAB";
+        // string clientPrivateKey = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAJvzrW657LXbnZZ1Lwo94EH6+bkAgEQpyWx8HNUtjVxleKIRsicKaypPp9I74DrCNbImLEYLNkgKZTGF0HO6jcO7ZhNu6j59GVXoNbWZuC4FXz+Xb4sm+G3SOXzsnw3iyQVTO8B5gqlYNfp0LpwvOObmfIjU6sJCrSWxY8QwMI0DAgMBAAECgYAjE0dqo/6NWHu1H14ZG5mYvW31Ihu3OP7Im5GQkNI+ecQMD5bWGQ3JUmkYa8ce8BdLnjJO/q6SvWPNI5+ip87CYPH1SMXKUiSLzaCrw4xMySW9PSnudTzJwhrmlmyjYTAg70tHf2YQC4YkNvtkR+PJ2yf6JEKGFVgP5p2KyeKXgQJBANjGryxyu95QC3jIaggcYmGD36sVO/ns8Uyu8PkAHYOscuXRcV0L8LghIzPolcehj9bTbDLjiuNgeuyjNs2YBvMCQQC4K4uIXt0kVDLYzlJfhN1CsV90vQitcKdD8wTO0JRKfMCQ6UDSumU7lq+z4TxTlRYxmZjpgIqH+N0WohmEiwWxAkBEfuMzBD3gjSJS0+DNF0ruzSCLinYdDoVgWZbC1wp8ZK0ZeQh9AhzZ0X6yFDffkGlG1B9IJSXpmr68rwXOCM+JAkBkrKEUxc6bGk/FRluvDWEqIO2uUdtZfBhjQ4ggSdKWOUXGsUsXJn9KKKAZc4lXo0rDiFQXaIXRuE+bHLdYReqxAkAj0Kol0LkJgdl2PoBAeyQHTpt9nxaeNX56W7CN/srBA1O2wr+aoQiJaKsu9I0EeW3zaMJlLi3VyjU4wnF+yAsB";
+
+        // 生产环境
+        string lkbClientId = "4487378308096";
+        string lkbMfe88PublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9w73juFDZe2n+D4Izav/B3VmkjP1b4wkc/4rv72DeK8uwGx1qWuEm+S5leG7v1YeyNXkTm/DW2I+iAJhvn+ILMErJCc8TK7hZlrzirhMTZtGB52Ai9IIi/SmpZtF9e2BV3S0feEvT83bi3ShnJDvsFsy6f0f/My63aNfjFcdaXwIDAQAB";
+        string lkbClientPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3YYYwaQyl+poYl+CQEFiLjQi7R0LEG73360Wup4frAy0zPZYlch3MwUChA7gPXVND/bUY+6vzJ3mkeoFvFtOkhrV0Wm8PWWnBVzanq3P91rFqMljMQlNxz4nBNeH2yHX9lCf6HQCYfjsYtadrGyUQw3ZMs+b0sMI2nZe/oKZo1wIDAQAB";
+        string lkbClientPrivateKey = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBALdhhjBpDKX6mhiX4JAQWIuNCLtHQsQbvffrRa6nh+sDLTM9liVyHczBQKEDuA9dU0P9tRj7q/MneaR6gW8W06SGtXRabw9ZacFXNqerc/3WsWoyWMxCU3HPicE14fbIdf2UJ/odAJh+Oxi1p2sbJRDDdkyz5vSwwjadl7+gpmjXAgMBAAECgYA4+QKgvbJhSsdfRqhM+dcYnBuPW6dhmCDgCmdeyMvQdu8vET45qgeaGpxCqg4gL+VzpToDZgVZCPWg5TKbWeMsnjHJ4o3e/SYywRufHGDougTjYQcc4jZLjbefbGAbRIoSdZcYoJS9SOlFsSTyk5zkNmvFvxDH1mlw7ooYFmEi8QJBAO5vs6+wxuEwrYxm/y7tRuOUuIRuHv/HfRRPwTZUJMwR7YeQJ8HqWPZr8QukiE2YL+j7pEy/zscgW6tmAZzbNskCQQDE455wVPoWxFADaQvzrksWGF0qEce1ppnqf8DoHHQYQtUF3z8art/Kg8wJ/GbZxytR2REZzzaeqw3uGFyn21KfAkB44QZelqds+OmzGXBbkQ10SSx2bwGmOLNvvbM9YNE66AfcxzdwtucdHsIYXfSAKhx36EN2aXNiPkRbE57Tr8sJAkACPPgrHLwvEBI8x6/sGDogSSyd8s/LX9Z2FPeza8diEzhqtav4+K3wlmj2YBknNp1mc8o++d0MFrO01jAPdG3PAkBvAD3lZvd4m10Q92ikomH79IeQRh5mEBxfUsDXk+khHzjONmYgpo46TQBZ1okNW0amIemQhBbs/bEZZUGukPdn";
+        string lkbReqUrl = "https://push.mfe88.com/push-service/api/SETSERVICEFEE";
+        string lkbReqUrl2 = "https://push.mfe88.com/push-service/api/MODIFYPERPOSFEE";
+        
+        public bool LkbVerify()
+        {
+            string data = "ZV0BBQ2hNgeZKKAPZ3XXEJGhp/h3+Mq5ejxuCI9SRbrDRls0XtfJRWboT5+J1sfHkb/J3eI4ThkTI/DjRNLK4x7fFYD62coClL7zDXeES42RXrpBik7VHHllUIS5nZFT23QME8kxRdo/6FH7Sv0J7IP5Qtqe70b3syv1jXmv8JozoP6DQjqHnlggpRM+4Ppks5PXorvHW7yI3uOgJL06t0GWDZIh7FRQ6UU41ayDsY0Z8j9o5quD8DSGJ1po6YPdmr2FpbFL5hs+buYhfEwsOwbvU5Aawbt+XuNXlU21wjeyC/8h2/yiPJSpCGjNXzzY4BBIhWDIbyxrbV+7SGIC+gNK2oQV0Ldtq9dXmljqA8e2dWsa8IaGaXmfo/85Ef2W5qIByrn42K+rA1nzhbR+L0WPGd4ugyzx6eiUl6T0oXVMaTIIoM6fndrm7RubsfNRZizrkQ+ocnAraMnGPZq84NpRp0Qs+pg8mlAIrqQ0avDutY1jGkzFXAljYGhiPvN7ntydmn2P2jgiPfh65VWumcXU+cp8d/nTD8eT/HmVbXUNMp/1ckP+VoK2wdowvgmgAruD3Fjfo8EghAfWEfuAVIsErxGxKCF17AUI8ZIqa+JYxxaA9vjxklavLmB9MAovx3JQSGXqXNNTy3LBljb1dZr3yk0ER9Qv8K4Bqc7Ti6gHHBFc7uu+wnqD7kTieMn++TpNo44MR8tGSmN6lzZKrio1czTyLLANLzzH4lBipTalGjgFnKcaNdVloW63DKkpz3qugCeBotRDdkH3T7DtYVz41lmJyLlxToeyFxXzqV0yqopR62QIghRO/vI9DpMDJclQMKEaCs9Py4qgMz2BmTqnESU42XDyNCMY5JVGpClZJgXNPmWLU0xrOu7B/tMEfThj9pNPBqNkbWQkLZ1MaSiMrfoHfQ7krt6TV6B2rhyfwrjKysXex4IHUX0nRTT55HcqQc38FlpeC4+kaTTSRs0HGMteiq+3BfDY0vHxH84x22WeN7oE7JbD/Ttd6Tn4";
+            string signString = "cuo8Rp0Hhc1pzEkzvx3tlGV6aBhZoD3F+b1FM07IkCTQwTVzz0EzgO0auQt+Wqf9ndWERa7P9jTqHS4JKYQH+LGLXjVgQPekzrePNnIcVVFqjf3VC+xImxSxJLaChHxiF+ufDpU9symoesub51QRCPSUB3xuQ2uP2lSbVmgcjvw=";
+            var toDecryptArray = Convert.FromBase64String(data);
+            var toSignArray = Convert.FromBase64String(signString);
+            var rsa = RSA.Create();
+            rsa.ImportRSAPublicKey(Convert.FromBase64String(lkbMfe88PublicKey), out _);
+            return rsa.VerifyData(toDecryptArray, toSignArray, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
+        }
+        private byte[] LkbStrToToHexByte(string hexString)
+        {
+            hexString = hexString.Replace(" ", "");
+            if ((hexString.Length % 2) != 0)
+                hexString += " ";
+            byte[] returnBytes = new byte[hexString.Length / 2];
+            for (int i = 0; i < returnBytes.Length; i++)
+                returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
+            return returnBytes;
+        }
+
+        public string LkbDecrypt(string data)
+        {
+            var toDecryptArray = Convert.FromBase64String(data);
+            var rsa2 = RSA.Create();
+            rsa2.ImportPkcs8PrivateKey(Convert.FromBase64String(lkbClientPrivateKey), out _);
+            string result = "";
+            List<byte> cache = new List<byte>();
+            for (int i = 0; i < toDecryptArray.Length; i++)
+            {
+                cache.Add(toDecryptArray[i]);
+                if ((i + 1) % 128 == 0 || i + 1 == toDecryptArray.Length)
+                {
+                    var ContentArray = rsa2.Decrypt(cache.ToArray(), RSAEncryptionPadding.Pkcs1);
+                    result += System.Text.Encoding.UTF8.GetString(ContentArray);
+                    cache.Clear();
+                }
+            }
+            return result;
+        }
+        public string LkbSetDeposit(string sn, decimal serviceFee)
+        {
+            serviceFee = serviceFee * 100;
+            Dictionary<string, string> headers = new Dictionary<string, string>();
+            headers.Add("X-Client-ID", lkbClientId);
+            headers.Add("X-Security", "RSA");
+            string content = "{\"sn\":\"" + sn + "\",\"serviceFee\":\"" + serviceFee.ToString("f0") + "\"}";
+            content = LkbEncrypt(content);
+            string signstr = LkbSign(content);
+            headers.Add("X-Sign", signstr);
+            string req = "{\"param\":\"" + content + "\"}";
+            string result = function.PostWebRequest(reqUrl, req, headers, "application/json");
+            return result;
+        }
+        public string LkbSetFee(string merNo, string sn, decimal fee = 0.6M)
+        {
+            List<SetDepositList> rateDOs = new List<SetDepositList>();
+            rateDOs.Add(new SetDepositList()
+            {
+                productSubType = "2020032007vz7Ux6",
+                updateValue = fee,
+                updateType = 0
+            });
+            Dictionary<string, string> headers = new Dictionary<string, string>();
+            headers.Add("X-Client-ID", lkbClientId);
+            headers.Add("X-Security", "RSA");
+            Dictionary<string, object> obj = new Dictionary<string, object>();
+            obj.Add("merNo", merNo);
+            obj.Add("sn", sn);
+            obj.Add("batchUpdateType", 2);
+            obj.Add("rateDOs", rateDOs);
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(obj);
+            LogHelper.Instance.WriteLog(DateTime.Now.ToString(), "设置金控机具费率");
+            LogHelper.Instance.WriteLog(content, "设置金控机具费率");
+            content = LkbEncrypt2(content);
+            string signstr = LkbSign(content);
+            headers.Add("X-Sign", signstr);
+            string req = "{\"param\":\"" + content + "\"}";
+            string result = function.PostWebRequest(reqUrl2, req, headers, "application/json");
+            LogHelper.Instance.WriteLog(result, "设置金控机具费率");
+            return result;
+        }
+        public Dictionary<string, object> LkbCallBack(out string sign)
+        {
+            Dictionary<string, object> obj = new Dictionary<string, object>();
+            string content = "{\"code\":\"0000\",\"msg\":\"OK\"}";
+            content = LkbEncrypt(content);
+            sign = LkbSign(content);
+            obj.Add("code", "000000");
+            obj.Add("message", "OK");
+            obj.Add("data", content);
+            return obj;
+        }
+        public string LkbEncrypt(string data)
+        {
+            return new RSAHelper(RSAType.RSA, System.Text.Encoding.UTF8, "", lkbMfe88PublicKey).Encrypt(data);
+        }
+
+        public string LkbEncrypt2(string data)
+        {
+            return new RSAHelper(RSAType.RSA, System.Text.Encoding.UTF8, "", lkbMfe88PublicKey).Encrypt2(data);
+        }
+        public string LkbSign(string data)
+        {
+            var toEncryptArray = System.Text.Encoding.UTF8.GetBytes(data);
+            var rsa = RSA.Create();
+            rsa.ImportPkcs8PrivateKey(Convert.FromBase64String(lkbClientPrivateKey), out _);
+            string result = "";
+            var buffer = rsa.SignData(toEncryptArray, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
+            result = Convert.ToBase64String(buffer);
+            return result;
+            // return new RSAHelper(RSAType.RSA, System.Text.Encoding.UTF8, clientPrivateKey, "").Sign(data);
+        }
+        #endregion
+        
+        #region 拉卡拉
+        
+        string lklPubKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCskXFaaOCWaQpAhh2SjBLVQ4y1FHCNXAM/lF9yIfwG+2Qg6ggNwWBkmqa0DF8mWYAIxab0Z5fKSXautkt3rFoLMhwX6udSxo9A70As08oko+3i9DvnsqneQ769iVqgfPc9p47X9WFykgPt4tQQBdXH+fkkYEz4g7xWu7yrHGd1AwIDAQAB"; //解密推送消息
+        string lklPriKey = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKyRcVpo4JZpCkCGHZKMEtVDjLUUcI1cAz+UX3Ih/Ab7ZCDqCA3BYGSaprQMXyZZgAjFpvRnl8pJdq62S3esWgsyHBfq51LGj0DvQCzTyiSj7eL0O+eyqd5Dvr2JWqB89z2njtf1YXKSA+3i1BAF1cf5+SRgTPiDvFa7vKscZ3UDAgMBAAECgYBB1Rxqsq7XAoxsMB3Q/cnjfOkNXZZQfyUoGKjOyCM24KmCmvVmlfp5drwY3M1humwLLKfz/h8chykVHqsspN4WXGFsW2DmRaySCfFX+xz/CD9hzpRXp2lhgEbsU853GWr6khqmCjOzhwRNUKp/cXmpYTU7AwdLlq1ED8KfKdDD9QJBAPGpwMMNOYPlSxfCx8Pw7BvuKwo7QWJH4XtfK4Y5OBf4FsN14J+cAwHQseSGU3BQPoGNfshQqEeyyINZDbY7jzUCQQC2zlA0hUOJv1FHgoklXJiEkx/B15ZbwiQquTCD/CxYymDUaJYNWxehXPOKMOGF3qGhrdEOpt1Sw9/EN18JaeJXAkEA4b6VFp+v7omu0A9f1KWlqaGeCvy3YzuKYljQq52fzKQvf38JyY9PL87nnnXsU6ph+VtX53+Q8wkLTcdOi8CvUQJAS3RvQK59CR9yAi1MRKKqxZYgtpcxFeDVotjbwK7W8zNdsm8U+KBP6af/UlwIyoPxfVXMg9q2YhI9i7U7Qhx1cwJBAOxZA4Zt9ye70/sv9w/KAYK/mXxUrJ6LFTDNOs7So1i6Fz5nyuOKHl8MWQi/5CXU7Baq10XZNkprFuRinG0exs0=";
+
+        public string LklDecrypt(string data)
+        {
+            return new RSAForJava().DecryptByPublicKey(data, lklPubKey);
+        }
+        
+        #endregion
+
+
+
+    }
+}

+ 847 - 0
AppStart/Helper/PublicImportDataServiceRds.cs

@@ -0,0 +1,847 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Security.Cryptography;
+using System.Web;
+using System.Linq;
+using System.Text.RegularExpressions;
+using MySystem.Models;
+using Library;
+using LitJson;
+using System.Security.Cryptography.X509Certificates;
+using Org.BouncyCastle.Security;
+using Org.BouncyCastle.Crypto.Parameters;
+using System.Text;
+using Org.BouncyCastle.Crypto;
+using Org.BouncyCastle.Math;
+using System.Net.Http;
+using System.Threading.Tasks;
+
+namespace MySystem
+{
+    public class PublicImportDataServiceRds
+    {
+        public readonly static PublicImportDataServiceRds Instance = new PublicImportDataServiceRds();
+        private PublicImportDataServiceRds()
+        { }
+
+
+        public void Start(JobMqMsg jobInfo)
+        {
+            string data = "";
+            try
+            {
+                string orderString = jobInfo.OrderString;
+                if (!string.IsNullOrEmpty(orderString))
+                {
+
+                    string key = orderString.Split(':')[1];
+                    int BrandId = int.Parse(function.CheckInt(key.Split('_')[3]));
+                    bool op = true;
+                    while (op)
+                    {
+                        data = RedisDbconn.Instance.RPop<string>(key);
+                        if (data != null)
+                        {
+                            string content = "";
+                            if (data.Contains("#cut#"))
+                            {
+                                string[] dataList = data.Replace("\r", "").Replace("\n", "").Split(new string[] { "#cut#" }, StringSplitOptions.None);
+                                JsonData jsonData = JsonMapper.ToObject(dataList[1]);
+                                if (BrandId == 1)
+                                {
+                                    content = Decrypt(jsonData["param"].ToString());
+                                    AppendLog(dataList[0], content, BrandId);
+                                    InsertData(key, content, jobInfo, BrandId);
+                                }
+                                else if (BrandId == 2)
+                                {
+                                    content = KDBDecrypt(jsonData["content"].ToString());
+                                    AppendLog(dataList[0], content, BrandId);
+                                    if (content.StartsWith("[") && content.EndsWith("]"))
+                                    {
+                                        content = content.Replace("null", "\"\"");
+                                        content = content.Replace("NULL", "\"\"");
+                                        JsonData list = JsonMapper.ToObject(content);
+                                        for (int i = 0; i < list.Count; i++)
+                                        {
+                                            InsertData(key, list[i].ToJson(), jobInfo, BrandId);
+                                        }
+                                    }
+                                    else
+                                    {
+                                        InsertData(key, content, jobInfo, BrandId);
+                                    }
+                                }
+                                else if (BrandId == 4)
+                                {
+                                    content = LSDecrypt(jsonData["data"].ToString(), jsonData["sign"].ToString());
+                                    AppendLog(dataList[0], content, BrandId);
+                                    InsertData(key, content, jobInfo, BrandId);
+                                }
+                                else if (BrandId == 8 || BrandId == 9)
+                                {
+                                    content = HKDecrypt(jsonData["data"].ToString(), jsonData["sign"].ToString(), BrandId);
+                                    AppendLog(dataList[0], content, BrandId);
+                                    InsertData(key, content, jobInfo, BrandId);
+                                }
+                                else if (BrandId == 10)
+                                {
+                                    content = LDDecrypt(jsonData["data"].ToString());
+                                    AppendLog(dataList[0], content, BrandId);
+                                    InsertData(key, content, jobInfo, BrandId);
+                                }
+                                else if (BrandId == 12)
+                                {
+                                    content = dataList[1];
+                                    JsonData header = JsonMapper.ToObject(dataList[0]);
+                                    string signstr = header["X-Sign"][0].ToString();
+                                    SortedList<string, string> dic = Newtonsoft.Json.JsonConvert.DeserializeObject<SortedList<string, string>>(content);
+                                    string sign = function.BuildQueryString(dic);
+                                    bool checkSign = BoxVerifySign(sign, signstr);
+                                    if(checkSign)
+                                    {
+                                        AppendLog(dataList[0], content, BrandId);
+                                        InsertData(key, content, jobInfo, BrandId);
+                                    }
+                                }
+                                else
+                                {
+                                    content = dataList[1];
+                                    InsertData(key, content, jobInfo, BrandId);
+                                }
+                                if (dataList.Length > 2)
+                                {
+                                    string fileName = dataList[2];
+                                    if (System.IO.File.Exists(function.getPath("/redis/" + key + "/" + fileName + ".txt")))
+                                    {
+                                        System.IO.File.Delete(function.getPath("/redis/" + key + "/" + fileName + ".txt"));
+                                    }
+                                }
+                            }
+                        }
+                        else
+                        {
+                            op = false;
+                        }
+                    }
+                }
+                // string Msg = "success";
+                // jobInfo.Status = Msg == "success" ? 1 : 0;
+                // jobInfo.Msg = Msg == "success" ? "执行完成" : Msg;
+                // RabbitMQClient.Instance.SendMsg(Newtonsoft.Json.JsonConvert.SerializeObject(jobInfo), "PublicBack");
+            }
+            catch (Exception ex)
+            {
+                LogHelper.Instance.WriteLog(DateTime.Now.ToString() + "\n" + data + "\n" + ex.ToString(), "public_import_service");
+                Start(jobInfo);
+            }
+        }
+        private void AppendLog(string header, string content, int BrandId)
+        {
+            string BrandName = "";
+            if (BrandId == 1)
+            {
+                BrandName = "金控";
+            }
+            else if (BrandId == 2)
+            {
+                BrandName = "开店宝";
+            }
+            else if (BrandId == 4)
+            {
+                BrandName = "乐刷";
+            }
+            else if (BrandId == 6)
+            {
+                BrandName = "立刷";
+            }
+            else if (BrandId == 8)
+            {
+                BrandName = "海科电签";
+            }
+            else if (BrandId == 9)
+            {
+                BrandName = "海科大POS";
+            }
+            else if (BrandId == 10)
+            {
+                BrandName = "联动电签";
+            }
+            else if (BrandId == 12)
+            {
+                BrandName = "盒易付";
+            }
+            LogHelper.Instance.WriteLog(DateTime.Now.ToString() + "\r\n" + header + "\r\n" + content, BrandName + "推送消息");
+        }
+
+        private void InsertData(string key, string content, JobMqMsg jobInfo, int BrandId)
+        {
+            string Id = DoQueue(content, jobInfo.BrandInfo, BrandId);
+            // 商户入库
+            if (key.Contains("_bind_") || key.Contains("_changebind_"))
+            {
+                int IdNum = int.Parse(Id);
+                WebCMSEntities db = new WebCMSEntities();
+                BindRecord bind = db.BindRecord.FirstOrDefault(m => m.Id == IdNum);
+                if (bind != null)
+                {
+                    // string ProductType = BrandId.ToString();
+                    // bool check = db.Merchants.Any(m => m.MerNo == bind.MerNo && m.ProductType == ProductType);
+                    // if (!check)
+                    // {
+                    db.Merchants.Add(new Merchants()
+                    {
+                        CreateDate = DateTime.Now,
+                        UpdateDate = DateTime.Now,
+                        MerNo = bind.MerNo, //商户编号
+                        MerName = bind.MerName, //商户名称
+                        AgentName = bind.AgentName, //机构名称
+                        ProductType = BrandId.ToString(), //产品类型
+                        Remark = "商户入库", //注释
+                        CreateTime = DateTime.Now, //创建时间
+                        UpdateTime = DateTime.Now, //更新时间
+                        SnNo = bind.MerSnNo, //SN号
+                        MerMobile = bind.MerNewSnNo,
+                        MerIdcardNo = bind.SeoKeyword,
+                        SeoTitle = bind.SeoTitle,
+                        Field1 = bind.MerOperateType,
+                        Field2 = bind.Field1,
+                        Status = 1,
+                    });
+                    db.SaveChanges();
+                    // }
+                }
+                db.Dispose();
+            }
+        }
+
+        public void Test(JobMqMsg jobInfo, string date, int kind)
+        {
+            try
+            {
+                string orderString = jobInfo.OrderString;
+                if (!string.IsNullOrEmpty(orderString))
+                {
+                    string key = orderString.Split(':')[1];
+                    int BrandId = int.Parse(function.CheckInt(key.Split('_')[3]));
+                    string source = function.ReadInstance("/log/金控推送消息/" + date.Replace("-", "/") + "/content.log");
+                    string patten = "";
+                    if (kind == 1)
+                    {
+                        patten = "{.*?绑定.*?}]\"}";
+                    }
+                    else if (kind == 2)
+                    {
+                        patten = "{.*?2022年飞天系列-小宝电签.*?}";
+                    }
+                    else if (kind == 3)
+                    {
+                        patten = "{.*?otherFee.*?}";
+                    }
+                    if (!string.IsNullOrEmpty(patten))
+                    {
+                        MatchCollection mc = Regex.Matches(source, patten); //交易
+                        foreach (Match sub in mc)
+                        {
+                            string content = sub.Value;
+                            string Id = DoQueue(content, jobInfo.BrandInfo, BrandId);
+                            // 商户入库
+                            if (key.Contains("_bind_"))
+                            {
+                                int IdNum = int.Parse(Id);
+                                WebCMSEntities db = new WebCMSEntities();
+                                BindRecord bind = db.BindRecord.FirstOrDefault(m => m.Id == IdNum);
+                                if (bind != null)
+                                {
+                                    string ProductType = BrandId.ToString();
+                                    bool check = db.Merchants.Any(m => m.MerNo == bind.MerNo && m.ProductType == ProductType);
+                                    if (!check)
+                                    {
+                                        db.Merchants.Add(new Merchants()
+                                        {
+                                            CreateDate = DateTime.Now,
+                                            UpdateDate = DateTime.Now,
+                                            MerNo = bind.MerNo, //商户编号
+                                            MerName = bind.MerName, //商户名称
+                                            AgentName = bind.AgentName, //机构名称
+                                            ProductType = BrandId.ToString(), //产品类型
+                                            Remark = "商户入库", //注释
+                                            CreateTime = DateTime.Now, //创建时间
+                                            UpdateTime = DateTime.Now, //更新时间
+                                            SnNo = bind.MerSnNo, //SN号
+                                            MerMobile = bind.MerNewSnNo,
+                                            MerIdcardNo = bind.SeoKeyword,
+                                            Status = 1,
+                                        });
+                                        db.SaveChanges();
+                                    }
+                                }
+                                db.Dispose();
+                            }
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                LogHelper.Instance.WriteLog(DateTime.Now.ToString() + ":" + ex.ToString(), "public_import_service");
+            }
+        }
+
+        public string DoQueue(string data, Brand brand, int BrandId = 1)
+        {
+            if (string.IsNullOrEmpty(data))
+            {
+                return "0";
+            }
+            //数据开始入库
+            data = data.Replace("null", "\"\"");
+            JsonData jsonObj = JsonMapper.ToObject(data);
+            string fields = "ProductType,";
+            string fieldvals = BrandId + ",";
+            fields += "SeoDescription,";
+            fieldvals += "'" + HttpUtility.UrlEncode(data) + "',";
+            if (!brand.IsCheck)
+            {
+                fields += "Status,";
+                fieldvals += "1,";
+            }
+            string sourceCheckKey = "";
+            foreach (FieldRelationTable field in brand.FieldRelation)
+            {
+                string fType = field.TargetFieldType;
+                string fName = field.TargetFieldName;
+                string sName = field.SourceFieldName;
+                string val = "";
+                if (sName.Contains(","))
+                {
+                    string[] flist = sName.Split(',');
+                    if (flist.Length == 2)
+                    {
+                        if (data.Contains("\"" + flist[1] + "\""))
+                        {
+                            val = jsonObj[flist[0]][flist[1]].ToString();
+                        }
+                    }
+                    else if (flist.Length == 3)
+                    {
+                        if (data.Contains("\"" + flist[2] + "\""))
+                        {
+                            val = jsonObj[flist[0]][flist[1]][flist[2]].ToString();
+                        }
+                    }
+                }
+                else
+                {
+                    if (data.Contains("\"" + sName + "\""))
+                    {
+                        val = jsonObj[sName].ToString();
+                    }
+                }
+                string checkFields = "," + brand.CheckKey + ",";
+                // if (fName == brand.CheckKey)
+                if (checkFields.Contains("," + fName + ","))
+                {
+                    if (fType == "number")
+                    {
+                        sourceCheckKey += " and " + fName + "=" + decimal.Parse(function.CheckNum(val)) + "";
+                    }
+                    else if (fType == "date")
+                    {
+                        sourceCheckKey += " and " + fName + "='" + DateTime.Parse(val).ToString("yyyy-MM-dd HH:mm:ss") + "'";
+                    }
+                    else if (fType == "timestempms")
+                    {
+                        sourceCheckKey += " and " + fName + "='" + function.ConvertIntDateTimeMini(long.Parse(val)).ToString("yyyy-MM-dd HH:mm:ss") + "'";
+                    }
+                    else if (fType == "timestemps")
+                    {
+                        sourceCheckKey += " and " + fName + "='" + function.ConvertIntDateTime(double.Parse(val)).ToString("yyyy-MM-dd HH:mm:ss") + "'";
+                    }
+                    else if (fType == "timestring")
+                    {
+                        string datetime = val.Substring(0, 4) + "-" + val.Substring(4, 2) + "-" + val.Substring(6, 2) + " " + val.Substring(8, 2) + ":" + val.Substring(10, 2) + ":" + val.Substring(12, 2);
+                        sourceCheckKey += " and " + fName + "='" + datetime + "'";
+                    }
+                    else
+                    {
+                        sourceCheckKey += " and " + fName + "='" + val + "'";
+                    }
+                }
+                fields += fName + ",";
+                if (fType == "number")
+                {
+                    fieldvals += decimal.Parse(function.CheckNum(val)) + ",";
+                }
+                else if (fType == "date")
+                {
+                    fieldvals += "'" + DateTime.Parse(val).ToString("yyyy-MM-dd HH:mm:ss") + "',";
+                }
+                else if (fType == "timestempms")
+                {
+                    fieldvals += "'" + function.ConvertIntDateTimeMini(long.Parse(val)).ToString("yyyy-MM-dd HH:mm:ss") + "',";
+                }
+                else if (fType == "timestemps")
+                {
+                    fieldvals += "'" + function.ConvertIntDateTime(double.Parse(val)).ToString("yyyy-MM-dd HH:mm:ss") + "',";
+                }
+                else if (fType == "timestring")
+                {
+                    string datetime = val.Substring(0, 4) + "-" + val.Substring(4, 2) + "-" + val.Substring(6, 2) + " " + val.Substring(8, 2) + ":" + val.Substring(10, 2) + ":" + val.Substring(12, 2);
+                    fieldvals += "'" + datetime + "',";
+                }
+                else
+                {
+                    fieldvals += "'" + val + "',";
+                }
+            }
+            string checksql = "select Id from " + brand.TargetTableName + DateTime.Now.ToString("yyyyMM") + " where ProductType='" + BrandId + "'" + sourceCheckKey;
+            if(brand.TargetTableName == "TradeRecord")
+            {
+                // checksql = "select Id from " + brand.TargetTableName + " where Id>1520000 and ProductType='" + BrandId + "'" + sourceCheckKey;
+                checksql = "select Id from TradeRecord" + DateTime.Now.ToString("yyyyMM") + " where Id=0";
+            }
+            DataTable dt = CustomerSqlConn.dtable(checksql, AppConfig.Base.RdsSqlConn);
+            if (dt.Rows.Count < 1)
+            {
+                fields = fields.TrimEnd(',');
+                fieldvals = fieldvals.TrimEnd(',');
+                if(!fields.Contains("CreateDate"))
+                {
+                    fields += ",CreateDate";
+                    fieldvals += ",'" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "'";
+                }
+                string sql = "insert into " + brand.TargetTableName + DateTime.Now.ToString("yyyyMM") + " (" + fields + ") values (" + fieldvals + ");select @@IDENTITY";
+                CustomerSqlConn.op(sql, AppConfig.Base.RdsSqlConn);
+                DataTable result = CustomerSqlConn.dtable("select Id from " + brand.TargetTableName + DateTime.Now.ToString("yyyyMM") + " order by Id desc limit 1", AppConfig.Base.RdsSqlConn);
+                if (result.Rows.Count > 0)
+                {
+                    return result.Rows[0][0].ToString();
+                }
+            }
+            return "0";
+        }
+
+
+
+
+
+        #region 金控
+        // 开发环境
+        // string clientId = "1243966544896";
+        // string mfe88PublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCy8cg6/tXbSj2i1tyi7VztwJw7uNmqc3bS6sVIZkDYhTmcXhpV17jq4j2zz/tURwX8b3MdK1A1HTR1XRd7hl0w2UF9iFk6UezByJ5tdNDoffMCGJtVSThq+MCV+WQI26tJ/ub6bm7GPrzTR79fntN+nTniRM4trjONN2WzEhHEcwIDAQAB";
+        // string mfe88PrivateKey = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBALLxyDr+1dtKPaLW3KLtXO3AnDu42apzdtLqxUhmQNiFOZxeGlXXuOriPbPP+1RHBfxvcx0rUDUdNHVdF3uGXTDZQX2IWTpR7MHInm100Oh98wIYm1VJOGr4wJX5ZAjbq0n+5vpubsY+vNNHv1+e036dOeJEzi2uM403ZbMSEcRzAgMBAAECgYAeRbb4/AmTypB4zt6OlZdGBXKoy9HO+y+b6OmtINdRieBAKs9LvG3lFpcXp1S+YjGKDhSsV5p/EczBGhmR5R44j52886h6OoU0HskifeEJs152gMXLEFya/1QWnf1Ev+ugzuto+CxuHlGHE0T43uFkuATZp4sfXX/03um99FIKmQJBAOrYJX+VmKdNbmwNKMXkFBAw6FM4wrtr6vT3ne0pBWgbUDIH8cs83wq/SQHuvy/Cafqr8qWC9fFX2m+hllzxzA0CQQDDEIDNXdRxEmRVQ90lnn6ppnERvLhTY3RyuyOj3aqM1lxWEU2vvylimCpccTEqgY/PqMwfqChSf2v3S2CFjzJ/AkAPw2ho8vKnMDRcPlnhRpjuKUo+4812ZR0FSmWoWJuLTGIKqavaN4DFKOfOoGbm3sbcU5Ra9bpqc7ouygrcvEI1AkB8uqbBqsfW7X2+j8Bu96Picw1F3Di5CZVCb6tgcrNFjyRH3JSiVkfuRYKAzdg0Z9g/Xp33eB0gc13kKQy1GlWdAkB6Emn94YesoHda26HWbrgBy18KSfcLH57EuXquX/pOma1TXjaXw1E7kkFz1EPde9WzuSWUmGN2AdJT0ruTOb4C";
+        // string clientPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCb861uuey1252WdS8KPeBB+vm5AIBEKclsfBzVLY1cZXiiEbInCmsqT6fSO+A6wjWyJixGCzZICmUxhdBzuo3Du2YTbuo+fRlV6DW1mbguBV8/l2+LJvht0jl87J8N4skFUzvAeYKpWDX6dC6cLzjm5nyI1OrCQq0lsWPEMDCNAwIDAQAB";
+        // string clientPrivateKey = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAJvzrW657LXbnZZ1Lwo94EH6+bkAgEQpyWx8HNUtjVxleKIRsicKaypPp9I74DrCNbImLEYLNkgKZTGF0HO6jcO7ZhNu6j59GVXoNbWZuC4FXz+Xb4sm+G3SOXzsnw3iyQVTO8B5gqlYNfp0LpwvOObmfIjU6sJCrSWxY8QwMI0DAgMBAAECgYAjE0dqo/6NWHu1H14ZG5mYvW31Ihu3OP7Im5GQkNI+ecQMD5bWGQ3JUmkYa8ce8BdLnjJO/q6SvWPNI5+ip87CYPH1SMXKUiSLzaCrw4xMySW9PSnudTzJwhrmlmyjYTAg70tHf2YQC4YkNvtkR+PJ2yf6JEKGFVgP5p2KyeKXgQJBANjGryxyu95QC3jIaggcYmGD36sVO/ns8Uyu8PkAHYOscuXRcV0L8LghIzPolcehj9bTbDLjiuNgeuyjNs2YBvMCQQC4K4uIXt0kVDLYzlJfhN1CsV90vQitcKdD8wTO0JRKfMCQ6UDSumU7lq+z4TxTlRYxmZjpgIqH+N0WohmEiwWxAkBEfuMzBD3gjSJS0+DNF0ruzSCLinYdDoVgWZbC1wp8ZK0ZeQh9AhzZ0X6yFDffkGlG1B9IJSXpmr68rwXOCM+JAkBkrKEUxc6bGk/FRluvDWEqIO2uUdtZfBhjQ4ggSdKWOUXGsUsXJn9KKKAZc4lXo0rDiFQXaIXRuE+bHLdYReqxAkAj0Kol0LkJgdl2PoBAeyQHTpt9nxaeNX56W7CN/srBA1O2wr+aoQiJaKsu9I0EeW3zaMJlLi3VyjU4wnF+yAsB";
+
+        // 生产环境
+        string clientId = "4487378308096";
+        string mfe88PublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2HxPVZ5ZIxIWfr24qB45PAz9WfjN9CiF1x9Lz3P/tVvIXFdBaUw+9zxCAPRDGQxJId7anjEjCOuAIKpFOiTPhVqHTHd3075FFsW5fL7lFCOFJELTj+mVamAIbKalAuRzIX0m0VQUXd+madB+yRQSBjkOIboAMYQ9amf99SqI9KwIDAQAB";
+        string clientPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrSrNKkBt/X8Fkd7viGpTMk+GdJgE+SvoA4PSjccpZoLWnwxXsC8K/7pfm9uGxPjte9e4RznXE5nuhSrcfls4lDWhTrGd/lj3Id8OCM+yEG+xilJs1lvXJjHDhL6/wa+TE5NSzWoKgXnyeHF3TSHMbUefLLtoKqL3j4h4lPqrjiQIDAQAB";
+        string clientPrivateKey = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKtKs0qQG39fwWR3u+IalMyT4Z0mAT5K+gDg9KNxylmgtafDFewLwr/ul+b24bE+O1717hHOdcTme6FKtx+WziUNaFOsZ3+WPch3w4Iz7IQb7GKUmzWW9cmMcOEvr/Br5MTk1LNagqBefJ4cXdNIcxtR58su2gqovePiHiU+quOJAgMBAAECgYBQIIyIR6slRWTRG5V/KlIK9O5oNbwFKMuUF6c4weUXUi9Hv+GEXugGIpVaTIi9AdCCFmb8W2kJ54tTowDQvRnGxVpr7repYwJv2jHh5ug3oreBghfbfbaOaRMXisp2x1CLi+8Q5BNjpe9KdurRtg7jt8bqgWels5aV2PbjPHHwBQJBANjqYXbapz6xUPdI0kyEQhdxHt7jOmysTY3vT+/UcgU2sf37hWh8JlTtVlFZns3JBocc9rMtBEAh0Cy5faMQXKMCQQDKJ9eYWQvb1GyB5IdDlkOuByyuwFfosZ0Qp+QNtnz1VAHHgQRM7RGNv3nYDJNEJ+qIhIzZppG5yDbAN7PYyTXjAkEAq8a4VkIDbZ9HyfxOJbAbEqtPUhzJ+KNea0cXm4o2nTBaNhLH7B1c0aZ908BQBRDr7XWfW/cLRapBTBm8h7R+VwJBAJAKrZMPN+TuSlaPaFYfNqBE2nC1+q2CCQE6L8QZmJYRwqbN5iuN7CkNGxt3cmNo8bNOhzH6fvFamLCDwDEixbMCQEgaxfAxpJdMoR6LrklSkigHiKfA6SaRWxxShFtBfjk5XcakmLkU/U5lgD/Blu7h4x6bRf4VPTYWdbxtiOK11rY=";
+        string reqUrl = "https://push.mfe88.com/push-service/api/SETSERVICEFEE";
+        string reqUrl2 = "https://push.mfe88.com/push-service/api/MODIFYPERPOSFEE";
+        
+        public bool Verify()
+        {
+            string data = "ZV0BBQ2hNgeZKKAPZ3XXEJGhp/h3+Mq5ejxuCI9SRbrDRls0XtfJRWboT5+J1sfHkb/J3eI4ThkTI/DjRNLK4x7fFYD62coClL7zDXeES42RXrpBik7VHHllUIS5nZFT23QME8kxRdo/6FH7Sv0J7IP5Qtqe70b3syv1jXmv8JozoP6DQjqHnlggpRM+4Ppks5PXorvHW7yI3uOgJL06t0GWDZIh7FRQ6UU41ayDsY0Z8j9o5quD8DSGJ1po6YPdmr2FpbFL5hs+buYhfEwsOwbvU5Aawbt+XuNXlU21wjeyC/8h2/yiPJSpCGjNXzzY4BBIhWDIbyxrbV+7SGIC+gNK2oQV0Ldtq9dXmljqA8e2dWsa8IaGaXmfo/85Ef2W5qIByrn42K+rA1nzhbR+L0WPGd4ugyzx6eiUl6T0oXVMaTIIoM6fndrm7RubsfNRZizrkQ+ocnAraMnGPZq84NpRp0Qs+pg8mlAIrqQ0avDutY1jGkzFXAljYGhiPvN7ntydmn2P2jgiPfh65VWumcXU+cp8d/nTD8eT/HmVbXUNMp/1ckP+VoK2wdowvgmgAruD3Fjfo8EghAfWEfuAVIsErxGxKCF17AUI8ZIqa+JYxxaA9vjxklavLmB9MAovx3JQSGXqXNNTy3LBljb1dZr3yk0ER9Qv8K4Bqc7Ti6gHHBFc7uu+wnqD7kTieMn++TpNo44MR8tGSmN6lzZKrio1czTyLLANLzzH4lBipTalGjgFnKcaNdVloW63DKkpz3qugCeBotRDdkH3T7DtYVz41lmJyLlxToeyFxXzqV0yqopR62QIghRO/vI9DpMDJclQMKEaCs9Py4qgMz2BmTqnESU42XDyNCMY5JVGpClZJgXNPmWLU0xrOu7B/tMEfThj9pNPBqNkbWQkLZ1MaSiMrfoHfQ7krt6TV6B2rhyfwrjKysXex4IHUX0nRTT55HcqQc38FlpeC4+kaTTSRs0HGMteiq+3BfDY0vHxH84x22WeN7oE7JbD/Ttd6Tn4";
+            string signString = "cuo8Rp0Hhc1pzEkzvx3tlGV6aBhZoD3F+b1FM07IkCTQwTVzz0EzgO0auQt+Wqf9ndWERa7P9jTqHS4JKYQH+LGLXjVgQPekzrePNnIcVVFqjf3VC+xImxSxJLaChHxiF+ufDpU9symoesub51QRCPSUB3xuQ2uP2lSbVmgcjvw=";
+            // var signer = SignerUtilities.GetSigner("SHA256withRSA");
+            // var pubkey = Convert.FromBase64String(mfe88PublicKey);
+            // // var pubkey = StrToToHexByte(mfe88PublicKey);
+            // var publicKeyParam = (RsaKeyParameters)PublicKeyFactory.CreateKey(pubkey);
+            // signer.Init(false, publicKeyParam);
+            // var signBytes = Convert.FromBase64String(signString);
+            // var plainBytes = Convert.FromBase64String(data);
+            // signer.BlockUpdate(plainBytes, 0, plainBytes.Length);
+            // return signer.VerifySignature(signBytes);
+            var toDecryptArray = Convert.FromBase64String(data);
+            var toSignArray = Convert.FromBase64String(signString);
+            // var pubkey = Encoding.UTF8.GetBytes(mfe88PublicKey);
+            // using (var x509 = new X509Certificate2(pubkey))
+            // {
+            //     using (var rsa = x509.GetRSAPublicKey())
+            //     {
+            //         return rsa.VerifyData(toDecryptArray, toSignArray, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
+            //     }
+            // }
+            var rsa = RSA.Create();
+            rsa.ImportRSAPublicKey(Convert.FromBase64String(mfe88PublicKey), out _);
+            return rsa.VerifyData(toDecryptArray, toSignArray, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
+        }
+        private byte[] StrToToHexByte(string hexString)
+        {
+            hexString = hexString.Replace(" ", "");
+            if ((hexString.Length % 2) != 0)
+                hexString += " ";
+            byte[] returnBytes = new byte[hexString.Length / 2];
+            for (int i = 0; i < returnBytes.Length; i++)
+                returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
+            return returnBytes;
+        }
+
+        public string Decrypt(string data)
+        {
+            var toDecryptArray = Convert.FromBase64String(data);
+            var rsa2 = RSA.Create();
+            rsa2.ImportPkcs8PrivateKey(Convert.FromBase64String(clientPrivateKey), out _);
+            string result = "";
+            List<byte> cache = new List<byte>();
+            for (int i = 0; i < toDecryptArray.Length; i++)
+            {
+                cache.Add(toDecryptArray[i]);
+                if ((i + 1) % 128 == 0 || i + 1 == toDecryptArray.Length)
+                {
+                    var ContentArray = rsa2.Decrypt(cache.ToArray(), RSAEncryptionPadding.Pkcs1);
+                    result += System.Text.Encoding.UTF8.GetString(ContentArray);
+                    cache.Clear();
+                }
+            }
+            return result;
+        }
+        public string SetDeposit(string sn, decimal serviceFee)
+        {
+            serviceFee = serviceFee * 100;
+            Dictionary<string, string> headers = new Dictionary<string, string>();
+            headers.Add("X-Client-ID", clientId);
+            headers.Add("X-Security", "RSA");
+            string content = "{\"sn\":\"" + sn + "\",\"serviceFee\":\"" + serviceFee.ToString("f0") + "\"}";
+            content = Encrypt(content);
+            string signstr = Sign(content);
+            headers.Add("X-Sign", signstr);
+            string req = "{\"param\":\"" + content + "\"}";
+            string result = function.PostWebRequest(reqUrl, req, headers, "application/json");
+            return result;
+        }
+        public string SetFee(string merNo, string sn, decimal fee = 0.6M)
+        {
+            List<SetDepositList> rateDOs = new List<SetDepositList>();
+            rateDOs.Add(new SetDepositList()
+            {
+                productSubType = "2020032007vz7Ux6",
+                updateValue = fee,
+                updateType = 0
+            });
+            Dictionary<string, string> headers = new Dictionary<string, string>();
+            headers.Add("X-Client-ID", clientId);
+            headers.Add("X-Security", "RSA");
+            Dictionary<string, object> obj = new Dictionary<string, object>();
+            obj.Add("merNo", merNo);
+            obj.Add("sn", sn);
+            obj.Add("batchUpdateType", 2);
+            obj.Add("rateDOs", rateDOs);
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(obj);
+            LogHelper.Instance.WriteLog(DateTime.Now.ToString(), "设置金控机具费率");
+            LogHelper.Instance.WriteLog(content, "设置金控机具费率");
+            content = Encrypt2(content);
+            string signstr = Sign(content);
+            headers.Add("X-Sign", signstr);
+            string req = "{\"param\":\"" + content + "\"}";
+            string result = function.PostWebRequest(reqUrl2, req, headers, "application/json");
+            LogHelper.Instance.WriteLog(result, "设置金控机具费率");
+            return result;
+        }
+        public Dictionary<string, object> CallBack()
+        {
+            string trace = function.MD5_32(Guid.NewGuid().ToString()) + function.get_Random(8);
+            Dictionary<string, object> obj = new Dictionary<string, object>();
+            // Dictionary<string, string> headers = new Dictionary<string, string>();
+            // headers.Add("X-Client-ID", clientId);
+            // headers.Add("X-Security", "RSA");
+            string content = "{\"code\":\"0000\",\"msg\":\"OK\"}";
+            content = Encrypt(content);
+            // string signstr = Sign(content);
+            // headers.Add("X-Sign", signstr);
+            obj.Add("code", "000000");
+            obj.Add("message", "OK");
+            obj.Add("trace", "");
+            obj.Add("data", content);
+            return obj;
+        }
+        public string Encrypt(string data)
+        {
+            return new RSAHelper(RSAType.RSA, System.Text.Encoding.UTF8, "", mfe88PublicKey).Encrypt(data);
+        }
+
+        public string Encrypt2(string data)
+        {
+            return new RSAHelper(RSAType.RSA, System.Text.Encoding.UTF8, "", mfe88PublicKey).Encrypt2(data);
+        }
+        public string Sign(string data)
+        {
+            var toEncryptArray = System.Text.Encoding.UTF8.GetBytes(data);
+            var rsa = RSA.Create();
+            rsa.ImportPkcs8PrivateKey(Convert.FromBase64String(clientPrivateKey), out _);
+            string result = "";
+            var buffer = rsa.SignData(toEncryptArray, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
+            result = Convert.ToBase64String(buffer);
+            return result;
+            // return new RSAHelper(RSAType.RSA, System.Text.Encoding.UTF8, clientPrivateKey, "").Sign(data);
+        }
+        #endregion
+
+        #region 开店宝
+
+        string KdbApiUrl = "https://kzy.kdb-tj.com:5055/api";
+        string KDBAESKEY = "gvB%UOF3eBqKf!$k";
+        // string Kdb_Rsa_PinlicKey = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJzLZwTVqTU10mnPaxhTCQa89uR9hk/1MGJcKS6lpNDZaJFrXI48tTsk46jJgkXnDMqJoNIk+iLWXhKK/n8azQMCAwEAAQ==";
+        string Kdb_Rsa_PrivateKey = "MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEAl2x9dSSCfNDik6VM2dn/SK1ONSbb7AKyXM1gHw8PMbzWN1pK7YGaPqHlIRbAeFeIvLKVeMxrji+63W6LpB0yDQIDAQABAkAfpHUnCIUYDhJ65f0EPTDCgCyqoL8uN3YMPIKMmvoC22/i7AC6zf/bWk4JdratN+gvvnjGgHQff6HH5dOQ6sbFAiEAxPYSLADzIv374J8O+LluXIcgI5zXm4r4dMtKbCmmWSsCIQDE0BRKsBcBZ9NvJ9Km+m/d1hN9v5hFT842zrkUFJmVpwIgBdYc17z3d3P7QL613NzxzkAazbNaGDvX/O4BOI9LZJ0CICrZElHgXGHV9NYyWU45H7mwLbYmzEPqx/5uqySQB4/pAiBgKYv3RGnsZ8Zm1EKAJjUX7ehdteBgPSA/UgIDZQ4oyw==";
+
+        // 查询机构政策列表
+        public string GetPolicyList()
+        {
+            string url = KdbApiUrl + "/marketing/plan/query/list";
+            //[{"id":100014,"name":"韩测试营销方案(韩测试营销方案)"}]
+            return PostKDB(url, "");
+        }
+
+        // 查询政策下的押金
+        public string GetDepositList(string planId)
+        {
+            string url = KdbApiUrl + "/marketing/deposit/query/planId";
+            string content = "{\"planId\":\"" + planId + "\"}";
+            //[{"depositId":26,"depositName":"押0返0","amount":0.00},{"depositId":28,"depositName":"押199返199","amount":199.00},{"depositId":29,"depositName":"押299返299","amount":299.00},{"depositId":27,"depositName":"押99返99","amount":99.00}]
+            return PostKDB(url, content);
+        }
+
+        // 修改押金接口
+        public string ModifyDeposit(string PosSn, string depositId)
+        {
+            string url = KdbApiUrl + "/marketing/deposit/query/planId";
+            string content = "{\"posSnStart\":\"" + PosSn + "\",\"posSnEnd\":\"" + PosSn + "\",\"depositId\":" + depositId + "}";
+            return PostKDB(url, content);
+        }
+
+        public string KDBDecrypt(string data)
+        {
+            string result = AesDecrypt(data, KDBAESKEY);
+            return result;
+        }
+
+        public string AesDecrypt(string str, string key)
+        {
+            if (string.IsNullOrEmpty(str)) return null;
+            byte[] toEncryptArray = Convert.FromBase64String(str);
+
+            System.Security.Cryptography.RijndaelManaged rm = new System.Security.Cryptography.RijndaelManaged
+            {
+                Key = Encoding.UTF8.GetBytes(key),
+                Mode = System.Security.Cryptography.CipherMode.ECB,
+                Padding = System.Security.Cryptography.PaddingMode.PKCS7,
+            };
+
+            System.Security.Cryptography.ICryptoTransform cTransform = rm.CreateDecryptor();
+            byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
+            return Encoding.UTF8.GetString(resultArray);
+        }
+
+        public string AesEncrypt(string str)
+        {
+            // if (string.IsNullOrEmpty(str)) return null;
+            Byte[] toEncryptArray = Encoding.UTF8.GetBytes(str);
+
+            System.Security.Cryptography.RijndaelManaged rm = new System.Security.Cryptography.RijndaelManaged
+            {
+                Key = Encoding.UTF8.GetBytes(KDBAESKEY),
+                Mode = System.Security.Cryptography.CipherMode.ECB,
+                Padding = System.Security.Cryptography.PaddingMode.PKCS7
+            };
+            System.Security.Cryptography.ICryptoTransform cTransform = rm.CreateEncryptor();
+            Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
+            return Convert.ToBase64String(resultArray);
+        }
+
+        public string PostKDB(string path, string content)
+        {
+            string url = KdbApiUrl + path;
+            content = PublicImportDataService.Instance.AesEncrypt(content);
+            string timestamp = function.GetCurTimestamp().ToString();
+            string sign = PublicImportDataService.Instance.KDBSign(content + timestamp);
+            string req = "{\"agencyId\":\"3013890129\",\"content\":\"" + content + "\",\"timestamp\":\"" + timestamp + "\",\"sign\":\"" + sign + "\"}";
+            string result = PostWebRequest(url, req, new Dictionary<string, string>());
+            return result;
+        }
+
+        private string PostWebRequest(string postUrl, string paramData, Dictionary<string, string> headers)
+        {
+            string ret = string.Empty;
+            try
+            {
+                byte[] postData = System.Text.Encoding.UTF8.GetBytes(paramData);
+                // 设置提交的相关参数 
+                System.Net.HttpWebRequest request = System.Net.WebRequest.Create(postUrl) as System.Net.HttpWebRequest;
+                System.Text.Encoding myEncoding = System.Text.Encoding.UTF8;
+                request.Method = "POST";
+                request.KeepAlive = false;
+                request.AllowAutoRedirect = true;
+                request.ContentType = "application/json";
+                foreach (string key in headers.Keys)
+                {
+                    request.Headers.Add(key, headers[key]);
+                }
+                request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR  3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";
+
+                request.ContentLength = postData.Length;
+
+                // 提交请求数据 
+                System.IO.Stream outputStream = request.GetRequestStream();
+                outputStream.Write(postData, 0, postData.Length);
+                outputStream.Close();
+                System.Net.HttpWebResponse response;
+                System.IO.Stream responseStream;
+                System.IO.StreamReader reader;
+                string srcString;
+                response = request.GetResponse() as System.Net.HttpWebResponse;
+                responseStream = response.GetResponseStream();
+                reader = new System.IO.StreamReader(responseStream, System.Text.Encoding.UTF8);
+                srcString = reader.ReadToEnd();
+                ret = srcString;   //返回值赋值
+                reader.Close();
+            }
+            // catch (System.Net.WebException ex)
+            // {
+            //     System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)ex.Response;
+            //     System.IO.Stream myResponseStream = response.GetResponseStream();
+            //     //获取响应内容
+            //     System.IO.StreamReader myStreamReader = new System.IO.StreamReader(myResponseStream);
+            //     ret = myStreamReader.ReadToEnd();
+            //     myResponseStream.Close();
+            // }
+            catch (Exception ex)
+            {
+                ret = "fail";
+                LogHelper.Instance.WriteLog(DateTime.Now.ToString() + "\r\n" + ex.ToString(), "请求开店宝API异常");
+            }
+            return ret;
+        }
+
+        public string KDBSign(string data)
+        {
+            var rsa = RSA.Create();
+            var key = Convert.FromBase64String(Kdb_Rsa_PrivateKey);
+            var content = Encoding.UTF8.GetBytes(data);
+            rsa.ImportPkcs8PrivateKey(key, out _);
+            var result = rsa.SignData(content, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
+            return Convert.ToBase64String(result);
+
+            // return CSRSAHelper.Sign(data, Kdb_Rsa_PrivateKey, "utf-8");
+        }
+
+        #endregion
+
+        #region 乐刷
+
+        string LSPrivateKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMjld3flY+R+9WTR2MvcR9qWISdmpayL3GNGg9gvzwkXkhDI/E7rX6ndLvVuaBbLWXB+UOh+8Pfw3Gvfv3D2GHZCTzPHOKrs2tyzqC8EmMUDQaoVOI2BY4vtB7IjNe9FlLGZx62JEJrMkHKnOSQxsi+flCoexKc2t1q7kQsO2F+3AgMBAAECgYBmQ7EB/mpQOXSPYucaN0L4eW3dEbqKUBPbEV0yInwgo7f+BWGyhsyGuooZ857W46Leyd5Dy8K8ZAbAfwCD7zJZsSzWsuvWQE991f+n0V7AAnKc3h4OsHa4oITUNo2nD3PvOpWfQx8vSuQuSFQgx0ExdnywS3So16mG2X6J2k87wQJBAPTfV10MNpA1e5oRdX4D4lQ2tVyg5GW72NMhUGWct/FvgcEW3V7xZ0z/gSLfFcGI8c4LGYWRVPIsBnWFx0LSZ6ECQQDSBoqXuF/LobfFFT3D47ixL8d+qDbOJ+ro3p4+iCkdxxJ/ncaqouxsr3fBbkSWh4t+UkbbihO/isPdBwLPZihXAkAc2jwHAKtlLogTzT7UzExcs92GvoZq3klcBy7b6i1aS1M0lycaSsNrNSfYHgUIOsSTDIfDTy59ImbYbhzeaMBBAkEAyfz6i4IJt3jXmZadKWk4NkhiT6CN3OUtGjsH69Hd4UKUuuFNsMwyHzD+NqzLEA5aDOoqNXftGDjnuAnHHRn9zwJAHqPHR5ZOKDN/ujeAIUTwmFFJh8vx6ujv7UTesBbtTsFYW6bZln+X6aS2G3Kdvz3e2cxQyH8ncc0yIh64a1fqyg==";
+
+        public string LSDecrypt(string data, string sign)
+        {
+            var toDecryptArray = Convert.FromBase64String(sign);
+            var rsa2 = RSA.Create();
+            rsa2.ImportPkcs8PrivateKey(Convert.FromBase64String(LSPrivateKey), out _);
+            var ContentArray = rsa2.Decrypt(toDecryptArray, RSAEncryptionPadding.Pkcs1);
+            string aeskey = System.Text.Encoding.UTF8.GetString(ContentArray);
+            return AesDecrypt(data, aeskey);
+        }
+
+        #endregion
+
+        #region 海科
+
+        string HKPrivateKey1 = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAK5iJ2q2nF+9jEnof9VYhMdbAgI0ZS4cYmgWTMW2JR61lJhR0GH+A/m6mjN9FsTS6Bq03u/+e6BKdE6VqMGk0q7asi2VZIgD59zj4HubS8EFrcb5ZprwmGLnG71cBga7V5EWnHxSB9BlbFt6rGeQiit8NSbv62NxGh1U+rAVE/a3AgMBAAECgYEApQGxpJNowls8bQ74LytUcMMX0ng7qXcoUq+PM6IX28gb9EmuMZtHrb05fjEGI3YiNGsjbNpTpqftCBMrHRjWVRgb0PDf/zD9YYrxmcP9DWKQjG5f1ygYtQBlnOPEX963Y2SXrsTKr4+szTpI8r6YqFfVbbooKVMesCBtshgg16kCQQDYHGDuCuOzULP84QvGi8z+wHNv0arFpYYxvwitntD7K3iolAh8gTDWeaC03MHruGM43ybCUi9EHhCrcVKjgpK1AkEAzpIUajdmAAwtwGg4G0v7tP/ulmpGhnALVN84gSMAc5f8D6aCnoUyle+GylwRBw9WblHBLxsOtARQIvvdphDrOwJBAIFvXc60zvQTHfoTf84G5VyfP4R1e2atYNZiqHv0Zw5IVxgAsaSAbBPI/SvWHH9mDGd/n+M6/fw6VZmZYfl0txECQQCQB3yifpPpDpTL5h7QsY8EKbqyN9GKpQ7Rk35zU/NZpawDQYcrfhXCQytJZx4cPQ53hxtae9QpoiQ58EEgLAXHAkABzJ/QDS1QfYrkP9t9X+Pny2iEuWGeIHyfsfSKQKr5pv16k1WqiIvlFRyDPl+aw5IOedkYb0vSkcU1KzjMW+Ra";
+        string HKPrivateKey2 = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAIyARvyTYvGledv+4E3D8FxsS07pmzZYJkIdWxov/xApB6Mb2BVP6BkhsRyoySWbEyiYlZpx1A3b7D4yc7vD3WfB0i0cGPwMdJP/vGuzWfF2mLY0v4mJrxdXuGeWpfWnl4DP0aQS6qkUlei6f0vWS76wdpHvKUGb17Nz/f9ezr5tAgMBAAECgYBoLhn04Qil67BvKw+BOj+5GGfC7L81TamYrpHF2j8D6ZiLHnNcYjLUp8HfYVw9MT7EhFex/KNjX2ZOPDTKzpIVXofs9or1fqPYwUewBFHD9rwTrThKySdwbKrRAFNw7YXaJvMEdpPaxBBsMvfC5EdvrFejZ80TpGGfXyIXaxuC1QJBAP/6XsinJ4ZgoJj2PRPc5pWRqUssERV2w07LCPEGxxyECoyEzrTIoj7KcwSXYTSx2GGeEiSpijye9rFCHoHUNF8CQQCMg14KaLi3RjddGYatmO4SHr/IFlwpjL16rw+poOHN1WwMmex1qd3JfNab0vi5GEkFg1fAbIMRiwksvXS0ReCzAkB5/dcoJ0lV6D0BSPDIw5D8nQOieKjXotbneSmUvJctxtvEJhLg43E3HYJ9IKvJ0iv+MbgR0t63j0agKZOiagBfAkAuU3ViyynzStQf/rV3cI81LCwgpLaYAE3MMAFi9KbdvPqVoP3jwTBdKKp8z26vX8FbbvU0fNItq4BH3uKmOM+fAkAnBwxmorni7Y6Zs24pevDVqMpcF9SkOigRKsO9Lc1HuAJuxHEoPW5KeascBVe3HfYqgt4HWIxNy/d2MvpvNaWo";
+
+        public string HKDecrypt(string data, string sign, int BrandId)
+        {
+            var toDecryptArray = Convert.FromBase64String(sign);
+            var rsa2 = RSA.Create();
+            string HKPrivateKey = "";
+            if(BrandId == 8)
+            {
+                HKPrivateKey = HKPrivateKey1;
+            }
+            else if(BrandId == 9)
+            {
+                HKPrivateKey = HKPrivateKey2;
+            }
+            rsa2.ImportPkcs8PrivateKey(Convert.FromBase64String(HKPrivateKey), out _);
+            var ContentArray = rsa2.Decrypt(toDecryptArray, RSAEncryptionPadding.Pkcs1);
+            string aeskey = System.Text.Encoding.UTF8.GetString(ContentArray);
+            return AesDecrypt(data, aeskey);
+        }
+
+        #endregion
+
+        #region 联动
+
+        //测试环境
+        // string LDRequestUrl = "http://111.14.221.188:18066/CloudTerminalServiceAction/";
+        // string AgentNo = "LD110014";
+        // string LDPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3WG04QXTzWBg2rj4BbSmnXVTqQiCk2lZ7yi2vur2LxsSc+KN0o1W9y2AkCHcFIAk2aAfMEMQYTO3HQ+F/Vcb27BNBSjnaOLfGv0PXNHKyVzC4EQLe4M5Pqd1wMl6NaZK+HnyrPBTnfsGeywhGJc1Ke96ANrydhk7UbwezydC7nQIDAQAB";
+        // string LDPrivateKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJwUiLkXb6zTpvNmB+zTZtuJi97/XCdGBWgiMn/2ayVEtRuarPOvMUQo0aX4Pb/JrfdFyQccXiXFGtmh/m5Mhfuj03t0pOTC4bniQAy2veytDhnRImL1xY9YjSMX+YRXI44VRcNUSefyNmBjL7V1HgbJOfnq/PmVkcBClTf1gtefAgMBAAECgYBRbYkS/34crWNJUq7JyFS+LllRounh9270r/qmtdmaXOkbmKuoinrqc11E+GjGuSJQghDp68vWaqmiZxhFVRkEqPzaesYyMJr73GB/efXhIRWWGCqQvARs3QgOFmCL2YsC/Vq7niI72mmNLC9jOUFN30vCnJH7xI2PljfQKBLwkQJBAN1/JRJmt+2ms/eeGsI/tgClciCAfHzTtAhPHRs7XL98mzk8IDGFjysKsiSacAym5e0xV1uB6ijsuAm61go4b8cCQQC0ZLVyKdUPadhzXSjyOqtk4HVzorHW6OkDCnMazL0CYLxdJOQzrpicPhww0TB397rqLC+FuGEOEcjrDnYyGQlpAkEAq4OU9VbM/h2kJg4rslcbXAzA/yH/Q7m7IuQAKeIhw7V9jShd1XsSjcXOhEGCmolyaeVXO+ixpdcH+6DNtURWaQJACh5L/ydRiBfLyEzFazDXREVC0UWi7AcMats/MZWiVGvQpPjYw/1bGghx1FsneNMwbMolsD5zUzK0LlsVTiIRYQJAZT0p0Mg3kqSaYO2JlC6fTkI9aHMJ50iDr8qLJ2JnrNFylDxxoHwKfA7GxA2KGotguGTKhw7xCp+IyrXtXiuNrQ==";
+
+        //生产环境
+        string LDRequestUrl = "http://ldys.umpay.com/service_exter/CloudTerminalServiceAction/";
+        string AgentNo = "LD112692";
+        string LDPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCGtWShTeFEgSSFx3PJXcjCOmS+OgtcUvPOHhpALY3Orm6t7rl1E0n3j7XlM049YwwtGRJI4OWhgrtR4/AnOMBXdyMBoKxF23uay1WQiNekzfUrTwil7/CRrQ+VlGgPe6dr3WQT2/HLbzMnJHeoIZ4KSIj/7pgAwTF4ciL1UC3awwIDAQAB";
+        string LDPrivateKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJwUiLkXb6zTpvNmB+zTZtuJi97/XCdGBWgiMn/2ayVEtRuarPOvMUQo0aX4Pb/JrfdFyQccXiXFGtmh/m5Mhfuj03t0pOTC4bniQAy2veytDhnRImL1xY9YjSMX+YRXI44VRcNUSefyNmBjL7V1HgbJOfnq/PmVkcBClTf1gtefAgMBAAECgYBRbYkS/34crWNJUq7JyFS+LllRounh9270r/qmtdmaXOkbmKuoinrqc11E+GjGuSJQghDp68vWaqmiZxhFVRkEqPzaesYyMJr73GB/efXhIRWWGCqQvARs3QgOFmCL2YsC/Vq7niI72mmNLC9jOUFN30vCnJH7xI2PljfQKBLwkQJBAN1/JRJmt+2ms/eeGsI/tgClciCAfHzTtAhPHRs7XL98mzk8IDGFjysKsiSacAym5e0xV1uB6ijsuAm61go4b8cCQQC0ZLVyKdUPadhzXSjyOqtk4HVzorHW6OkDCnMazL0CYLxdJOQzrpicPhww0TB397rqLC+FuGEOEcjrDnYyGQlpAkEAq4OU9VbM/h2kJg4rslcbXAzA/yH/Q7m7IuQAKeIhw7V9jShd1XsSjcXOhEGCmolyaeVXO+ixpdcH+6DNtURWaQJACh5L/ydRiBfLyEzFazDXREVC0UWi7AcMats/MZWiVGvQpPjYw/1bGghx1FsneNMwbMolsD5zUzK0LlsVTiIRYQJAZT0p0Mg3kqSaYO2JlC6fTkI9aHMJ50iDr8qLJ2JnrNFylDxxoHwKfA7GxA2KGotguGTKhw7xCp+IyrXtXiuNrQ==";
+
+        public string LDEncrypt(string data)
+        {
+            return new RSAHelper(RSAType.RSA, System.Text.Encoding.UTF8, "", LDPublicKey).Encrypt(data);
+        }
+
+        public string LDDecrypt(string data)
+        {
+            var toDecryptArray = Convert.FromBase64String(data);
+            var toKey = Convert.FromBase64String(LDPrivateKey);
+            var rsa = RSA.Create();
+            rsa.ImportPkcs8PrivateKey(toKey, out _);
+            string result = "";
+            List<byte> cache = new List<byte>();
+            for (int i = 0; i < toDecryptArray.Length; i++)
+            {
+                cache.Add(toDecryptArray[i]);
+                if ((i + 1) % 128 == 0 || i + 1 == toDecryptArray.Length)
+                {
+                    var ContentArray = rsa.Decrypt(cache.ToArray(), RSAEncryptionPadding.Pkcs1);
+                    result += System.Text.Encoding.UTF8.GetString(ContentArray);
+                    cache.Clear();
+                }
+            }
+            return result;
+        }
+
+        #endregion
+
+        
+        #region 盒易付
+
+        //测试环境
+        // string BoxPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjMQxp24mjxDTr13uPW0y+tiO1yXFGw7P/pPQ0oZKK7F6KstEaus7pLEywBZ5XRXE5jgkhR2TS7Ne7djJfbpn5yFc6pPlz3ZsOfBVeB88NEwhx6xzCGX2eqSSkO33n8w2G0xc2ss5HpYBarT00NBZWhrwOXpdRPYLOYHKVU3Rl+FA9xDw/wYfoWvrr+JSfHRGn/ENMmQFEdckAbPauKaQMrZD2kz+PRrhq56eWnCuVQPcaz/jroVT8qQEgkg2IsNy+DwfLOIqm8IySEpxnQ5wN/KvsQJc2wXDQNf9F5kvWwjoqSSP0qJS+oPRXET+zJb+WTk2y5M6AYoC9NodwsC4NwIDAQAB";
+
+        //生产环境
+        string BoxPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjmjoQirIYZBD9Qon2HkF4j/NAINXtJ7Lzq/WXxTF7t7mg7LNARt0+ZZaeWx8caq2fv5zdsGyyoInL23cBtDI5KmFfK69iA0ygQMK0WbiKqsUB1OpPbT3+9zLuadIJAznjA223lY6CIjTpdLZhaRjImNVqc60bdkx6YsQcA+xW+3r1JH4PPHb7yBEbkKIX8OhyX7U4p0TkbDkAobbjHr5YB9gmYLoSFJMOPfTtSExkv7/Y7IVR9poZAHcr3teFoAiXW3RzxelRtnXxIkl/6AUOKoL5fhr/UTUN+Q18uzNljYWr6SwnTI3EmtzgykaewWtZvV85Xdhe/BjiQ5Xor7YbwIDAQAB";
+        
+        public bool BoxVerifySign(string toSignStr, string signStr)
+        {
+            byte[] toSignByte = Encoding.Default.GetBytes(toSignStr);
+            byte[] signByte = Convert.FromBase64String(signStr);
+            var toKey = Convert.FromBase64String(BoxPublicKey);
+            var rsaroot = RSA.Create();
+            rsaroot.ImportSubjectPublicKeyInfo(toKey, out _);
+            var publicKeyParameters = rsaroot.ExportParameters(false);
+            using (var rsa = RSA.Create())
+            {
+                rsa.ImportParameters(publicKeyParameters);
+                var sha256 = SHA256.Create();
+                var hash = sha256.ComputeHash(toSignByte);
+                return rsa.VerifyHash(hash, signByte, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
+            }
+        }
+
+        #endregion
+
+
+    }
+}

+ 143 - 0
AppStart/Helper/PublicService.cs

@@ -0,0 +1,143 @@
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Linq;
+using Microsoft.Extensions.Hosting;
+using MySystem;
+using MySystem.Models;
+using Library;
+using LitJson;
+
+public class PublicService : BackgroundService
+{
+    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
+    {
+        while (!stoppingToken.IsCancellationRequested)
+        {
+            ProgressStart();
+            int timespan = 1;
+            await Task.Delay(timespan);
+        }
+    }
+
+    private void ProgressStart()
+    {
+        List<Brand> BrandList = RedisDbconn.Instance.GetList<Brand>("brands", 1, 100);
+        foreach(Brand brand in BrandList)
+        {
+            Dictionary<string, string> data = new Dictionary<string, string>();
+            try
+            {
+                data = RedisDbconn.Instance.RPop<Dictionary<string, string>>(brand.QueueName);
+                if (data != null)
+                {
+                    DoQueue(data["Content"], brand);
+                }
+            }
+            catch (Exception ex)
+            {
+                if (!data.ContainsKey("ErrNum"))
+                {
+                    data.Add("ErrTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+                    data.Add("ErrMsg", ex.ToString());
+                    data.Add("ErrNum", "1");
+                    RedisDbconn.Instance.AddList(brand.QueueName + "_err", data);
+                }
+                else
+                {
+                    int ErrNum = int.Parse(data["ErrNum"]) + 1;
+                    data["ErrTime"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+                    data["ErrMsg"] = ex.ToString();
+                    data["ErrNum"] = ErrNum.ToString();
+                    if (ErrNum > 2)
+                    {
+                        RedisDbconn.Instance.AddList(brand.QueueName + "_dead", data);
+                    }
+                    else
+                    {
+                        RedisDbconn.Instance.AddList(brand.QueueName + "_err", data);
+                    }
+                }
+            }
+        }
+    }
+
+    // private void ProgressStart()
+    // {
+    //     List<Brand> BrandList = RedisDbconn.Instance.GetList<Brand>("brands", 1, 100);
+    //     Parallel.ForEach(BrandList, brand =>
+    //     {
+    //         Dictionary<string, string> data = new Dictionary<string, string>();
+    //         try
+    //         {
+    //             data = RedisDbconn.Instance.RPop<Dictionary<string, string>>(brand.QueueName);
+    //             if (data != null)
+    //             {
+    //                 DoQueue(data["Content"], brand);
+    //             }
+    //         }
+    //         catch (Exception ex)
+    //         {
+    //             if (!data.ContainsKey("ErrNum"))
+    //             {
+    //                 data.Add("ErrTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+    //                 data.Add("ErrMsg", ex.ToString());
+    //                 data.Add("ErrNum", "1");
+    //                 RedisDbconn.Instance.AddList(brand.QueueName + "_err", data);
+    //             }
+    //             else
+    //             {
+    //                 int ErrNum = int.Parse(data["ErrNum"]) + 1;
+    //                 data["ErrTime"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+    //                 data["ErrMsg"] = ex.ToString();
+    //                 data["ErrNum"] = ErrNum.ToString();
+    //                 if (ErrNum > 2)
+    //                 {
+    //                     RedisDbconn.Instance.AddList(brand.QueueName + "_dead", data);
+    //                 }
+    //                 else
+    //                 {
+    //                     RedisDbconn.Instance.AddList(brand.QueueName + "_err", data);
+    //                 }
+    //             }
+    //         }
+    //     });
+    // }
+
+    //要执行的方法
+    public void DoQueue(string data, Brand brand)
+    {
+        //数据开始入库
+        JsonData jsonObj = JsonMapper.ToObject(data);
+        string fields = "";
+        string fieldvals = "";
+        foreach (FieldRelationTable field in brand.FieldRelation)
+        {
+            string fType = field.TargetFieldType;
+            string val = jsonObj[field.SourceFieldName].ToString();
+            fields += field.TargetFieldName + ",";
+            if (fType == "int")
+            {
+                fieldvals += int.Parse(function.CheckInt(val)) + ",";
+            }
+            else if (fType == "decimal")
+            {
+                fieldvals += decimal.Parse(function.CheckNum(val)) + ",";
+            }
+            else if (fType == "datetime")
+            {
+                fieldvals += "'" + DateTime.Parse(val) + "',";
+            }
+            else
+            { 
+                fieldvals += "'" + val + "',";
+            }
+        }
+        fields = fields.TrimEnd(',');
+        fieldvals = fieldvals.TrimEnd(',');
+        string sql = "insert into " + brand.TargetTableName + " (" + fields + ") values (" + fieldvals + ")";
+        dbconn.op(sql);
+        
+    }
+}

+ 208 - 0
AppStart/Helper/RSAForJava.cs

@@ -0,0 +1,208 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using Org.BouncyCastle.Asn1.Pkcs;
+using Org.BouncyCastle.Asn1.X509;
+using Org.BouncyCastle.Crypto.Generators;
+using Org.BouncyCastle.Crypto.Parameters;
+using Org.BouncyCastle.Math;
+using Org.BouncyCastle.Pkcs;
+using Org.BouncyCastle.Security;
+using Org.BouncyCastle.Crypto.Engines;
+using Org.BouncyCastle.X509;
+using Org.BouncyCastle.Crypto;
+using Org.BouncyCastle.Asn1;
+using Org.BouncyCastle.Crypto.Encodings;
+
+namespace MySystem
+{
+    public class RSAForJava
+    {
+
+        public RSAForJava()
+        {
+
+        }
+        /// <summary>
+        /// KEY 结构体
+        /// </summary>
+        public struct RSAKEY
+        {
+            /// <summary>
+            /// 公钥
+            /// </summary>
+            public string PublicKey
+            {
+                get;
+                set;
+            }
+            /// <summary>
+            /// 私钥
+            /// </summary>
+            public string PrivateKey
+            {
+                get;
+                set;
+            }
+        }
+        public RSAKEY GetKey()
+        {
+            //RSA密钥对的构造器  
+            RsaKeyPairGenerator keyGenerator = new RsaKeyPairGenerator();
+
+            //RSA密钥构造器的参数  
+            RsaKeyGenerationParameters param = new RsaKeyGenerationParameters(
+                Org.BouncyCastle.Math.BigInteger.ValueOf(3),
+                new Org.BouncyCastle.Security.SecureRandom(),
+                1024,   //密钥长度  
+                25);
+            //用参数初始化密钥构造器  
+            keyGenerator.Init(param);
+            //产生密钥对  
+            AsymmetricCipherKeyPair keyPair = keyGenerator.GenerateKeyPair();
+            //获取公钥和密钥  
+            AsymmetricKeyParameter publicKey = keyPair.Public;
+            AsymmetricKeyParameter privateKey = keyPair.Private;
+
+            SubjectPublicKeyInfo subjectPublicKeyInfo = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(publicKey);
+            PrivateKeyInfo privateKeyInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(privateKey);
+
+
+            Asn1Object asn1ObjectPublic = subjectPublicKeyInfo.ToAsn1Object();
+
+            byte[] publicInfoByte = asn1ObjectPublic.GetEncoded("UTF-8");
+            Asn1Object asn1ObjectPrivate = privateKeyInfo.ToAsn1Object();
+            byte[] privateInfoByte = asn1ObjectPrivate.GetEncoded("UTF-8");
+
+            RSAKEY item = new RSAKEY()
+            {
+                PublicKey = Convert.ToBase64String(publicInfoByte),
+                PrivateKey = Convert.ToBase64String(privateInfoByte)
+            };
+            return item;
+        }
+        private AsymmetricKeyParameter GetPublicKeyParameter(string s)
+        {
+            s = s.Replace("\r", "").Replace("\n", "").Replace(" ", "");
+            byte[] publicInfoByte = Convert.FromBase64String(s);
+            Asn1Object pubKeyObj = Asn1Object.FromByteArray(publicInfoByte);//这里也可以从流中读取,从本地导入   
+            AsymmetricKeyParameter pubKey = PublicKeyFactory.CreateKey(publicInfoByte);
+            return pubKey;
+        }
+        private AsymmetricKeyParameter GetPublicKeyParameter2(string s)
+        {
+            s = s.Replace("\r", "").Replace("\n", "").Replace(" ", "");
+            byte[] publicInfoByte = System.Text.Encoding.UTF8.GetBytes(s);
+            Asn1Object pubKeyObj = Asn1Object.FromByteArray(publicInfoByte);//这里也可以从流中读取,从本地导入   
+            AsymmetricKeyParameter pubKey = PublicKeyFactory.CreateKey(publicInfoByte);
+            return pubKey;
+        }
+        private AsymmetricKeyParameter GetPrivateKeyParameter(string s)
+        {
+            s = s.Replace("\r", "").Replace("\n", "").Replace(" ", "");
+            byte[] privateInfoByte = Convert.FromBase64String(s);
+            // Asn1Object priKeyObj = Asn1Object.FromByteArray(privateInfoByte);//这里也可以从流中读取,从本地导入   
+            // PrivateKeyInfo privateKeyInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(privateKey);
+            AsymmetricKeyParameter priKey = PrivateKeyFactory.CreateKey(privateInfoByte);
+            return priKey;
+        }
+        private AsymmetricKeyParameter GetPrivateKeyParameter2(string s)
+        {
+            s = s.Replace("\r", "").Replace("\n", "").Replace(" ", "");
+            byte[] privateInfoByte = System.Text.Encoding.UTF8.GetBytes(s);
+            // Asn1Object priKeyObj = Asn1Object.FromByteArray(privateInfoByte);//这里也可以从流中读取,从本地导入   
+            // PrivateKeyInfo privateKeyInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(privateKey);
+            AsymmetricKeyParameter priKey = PrivateKeyFactory.CreateKey(privateInfoByte);
+            return priKey;
+        }
+        public string EncryptByPrivateKey(string s, string key)
+        {
+            //非对称加密算法,加解密用  
+            IAsymmetricBlockCipher engine = new Pkcs1Encoding(new RsaEngine());
+
+
+            //加密  
+
+            try
+            {
+                engine.Init(true, GetPrivateKeyParameter(key));
+                byte[] byteData = System.Text.Encoding.UTF8.GetBytes(s);
+                var ResultData = engine.ProcessBlock(byteData, 0, byteData.Length);
+                return Convert.ToBase64String(ResultData);
+                //Console.WriteLine("密文(base64编码):" + Convert.ToBase64String(testData) + Environment.NewLine);
+            }
+            catch (Exception ex)
+            {
+                return ex.Message;
+
+            }
+        }
+        public string DecryptByPublicKey(string s, string key)
+        {
+            s = s.Replace("\r", "").Replace("\n", "").Replace(" ", "");
+            //非对称加密算法,加解密用  
+            IAsymmetricBlockCipher engine = new Pkcs1Encoding(new RsaEngine());
+
+
+            //解密
+
+            try
+            {
+                engine.Init(false, GetPublicKeyParameter(key));
+                byte[] byteData = Convert.FromBase64String(s);
+                string result = "";
+                List<byte> cache = new List<byte>();
+                for (int i = 0; i < byteData.Length; i++)
+                {
+                    cache.Add(byteData[i]);
+                    if ((i + 1) % 128 == 0 || i + 1 == byteData.Length)
+                    {
+                        var ResultData = engine.ProcessBlock(cache.ToArray(), 0, cache.ToArray().Length);
+                        result += System.Text.Encoding.UTF8.GetString(ResultData);
+                        cache.Clear();
+                    }
+                }
+                return result;
+            }
+            catch (Exception ex)
+            {
+                return ex.Message;
+            }
+        }
+
+        public string DecryptByPrivateKey(string s, string key)
+        {
+            s = s.Replace("\r", "").Replace("\n", "").Replace(" ", "");
+            //非对称加密算法,加解密用  
+            IAsymmetricBlockCipher engine = new Pkcs1Encoding(new RsaEngine());
+
+
+            //解密
+
+            try
+            {
+                engine.Init(false, GetPrivateKeyParameter2(key));
+                byte[] byteData = Convert.FromBase64String(s);
+                string result = "";
+                List<byte> cache = new List<byte>();
+                for (int i = 0; i < byteData.Length; i++)
+                {
+                    cache.Add(byteData[i]);
+                    if ((i + 1) % 256 == 0 || i + 1 == byteData.Length)
+                    {
+                        var ResultData = engine.ProcessBlock(cache.ToArray(), 0, cache.ToArray().Length);
+                        result += System.Text.Encoding.UTF8.GetString(ResultData);
+                        cache.Clear();
+                    }
+                }
+                return result;
+            }
+            catch (Exception ex)
+            {
+                return ex.Message;
+            }
+        }
+    }
+}

+ 343 - 0
AppStart/Helper/RSAHelper.cs

@@ -0,0 +1,343 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Security.Cryptography;
+using System.Text;
+
+namespace MySystem
+{
+    /// <summary>
+    /// RSA加解密 使用OpenSSL的公钥加密/私钥解密
+    /// 作者:李志强
+    /// 创建时间:2017年10月30日15:50:14
+    /// QQ:501232752
+    /// </summary>
+    public class RSAHelper
+	{
+		private readonly RSA _privateKeyRsaProvider;
+		private readonly RSA _publicKeyRsaProvider;
+		private readonly HashAlgorithmName _hashAlgorithmName;
+		private readonly Encoding _encoding;
+
+		/// <summary>
+		/// 实例化RSAHelper
+		/// </summary>
+		/// <param name="rsaType">加密算法类型 RSA SHA1;RSA2 SHA256 密钥长度至少为2048</param>
+		/// <param name="encoding">编码类型</param>
+		/// <param name="privateKey">私钥</param>
+		/// <param name="publicKey">公钥</param>
+		public RSAHelper(RSAType rsaType, Encoding encoding, string privateKey, string publicKey = null)
+		{
+			_encoding = encoding;
+			if (!string.IsNullOrEmpty(privateKey))
+			{
+				_privateKeyRsaProvider = CreateRsaProviderFromPrivateKey(privateKey);
+			}
+
+			if (!string.IsNullOrEmpty(publicKey))
+			{
+				_publicKeyRsaProvider = CreateRsaProviderFromPublicKey(publicKey);
+			}
+
+			_hashAlgorithmName = rsaType == RSAType.RSA ? HashAlgorithmName.SHA1 : HashAlgorithmName.SHA256;
+		}
+
+		#region 使用私钥签名
+
+		/// <summary>
+		/// 使用私钥签名
+		/// </summary>
+		/// <param name="data">原始数据</param>
+		/// <returns></returns>
+		public string Sign(string data)
+		{
+			byte[] dataBytes = _encoding.GetBytes(data);
+
+			var signatureBytes = _privateKeyRsaProvider.SignData(dataBytes, _hashAlgorithmName, RSASignaturePadding.Pkcs1);
+
+			return Convert.ToBase64String(signatureBytes);
+		}
+
+		#endregion
+
+		#region 使用公钥验证签名
+
+		/// <summary>
+		/// 使用公钥验证签名
+		/// </summary>
+		/// <param name="data">原始数据</param>
+		/// <param name="sign">签名</param>
+		/// <returns></returns>
+		public bool Verify(string data, string sign)
+		{
+			byte[] dataBytes = _encoding.GetBytes(data);
+			byte[] signBytes = Convert.FromBase64String(sign);
+
+			var verify = _publicKeyRsaProvider.VerifyData(dataBytes, signBytes, _hashAlgorithmName, RSASignaturePadding.Pkcs1);
+
+			return verify;
+		}
+
+		#endregion
+
+		#region 解密
+
+		public string Decrypt(string cipherText)
+		{
+			if (_privateKeyRsaProvider == null)
+			{
+				throw new Exception("_privateKeyRsaProvider is null");
+			}
+			return Encoding.UTF8.GetString(_privateKeyRsaProvider.Decrypt(Convert.FromBase64String(cipherText), RSAEncryptionPadding.Pkcs1));
+		}
+
+		#endregion
+
+		#region 加密
+
+		public string Encrypt(string text)
+		{
+			if (_publicKeyRsaProvider == null)
+			{
+				throw new Exception("_publicKeyRsaProvider is null");
+			}
+			return Convert.ToBase64String(_publicKeyRsaProvider.Encrypt(Encoding.UTF8.GetBytes(text), RSAEncryptionPadding.Pkcs1));
+		}
+
+		public string Encrypt2(string text)
+		{
+			if (_publicKeyRsaProvider == null)
+			{
+				throw new Exception("_publicKeyRsaProvider is null");
+			}
+			byte[] textByte = Encoding.UTF8.GetBytes(text);
+			if(textByte.Length > 64)
+			{
+				List<byte> contentTmp = new List<byte>();
+				List<byte> buffer = new List<byte>();
+				for (int i = 0; i < textByte.Length; i++)
+				{
+					buffer.Add(textByte[i]);
+                    if ((i + 1) % 64 == 0 || i == textByte.Length - 1)
+                    {
+						contentTmp.AddRange(_publicKeyRsaProvider.Encrypt(buffer.ToArray(), RSAEncryptionPadding.Pkcs1));
+						buffer = new List<byte>();
+                    }
+				}
+				return Convert.ToBase64String(contentTmp.ToArray());
+			}
+			return Convert.ToBase64String(_publicKeyRsaProvider.Encrypt(Encoding.UTF8.GetBytes(text), RSAEncryptionPadding.Pkcs1));
+		}
+
+		#endregion
+
+		#region 使用私钥创建RSA实例
+
+		public RSA CreateRsaProviderFromPrivateKey(string privateKey)
+		{
+			var privateKeyBits = Convert.FromBase64String(privateKey);
+
+			var rsa = RSA.Create();
+			var rsaParameters = new RSAParameters();
+
+			using (BinaryReader binr = new BinaryReader(new MemoryStream(privateKeyBits)))
+			{
+				byte bt = 0;
+				ushort twobytes = 0;
+				twobytes = binr.ReadUInt16();
+				if (twobytes == 0x8130)
+					binr.ReadByte();
+				else if (twobytes == 0x8230)
+					binr.ReadInt16();
+				else
+					throw new Exception("Unexpected value read binr.ReadUInt16()");
+
+				twobytes = binr.ReadUInt16();
+				if (twobytes != 0x0102)
+					throw new Exception("Unexpected version");
+
+				bt = binr.ReadByte();
+				if (bt != 0x00)
+					throw new Exception("Unexpected value read binr.ReadByte()");
+
+				rsaParameters.Modulus = binr.ReadBytes(GetIntegerSize(binr));
+				rsaParameters.Exponent = binr.ReadBytes(GetIntegerSize(binr));
+				rsaParameters.D = binr.ReadBytes(GetIntegerSize(binr));
+				rsaParameters.P = binr.ReadBytes(GetIntegerSize(binr));
+				rsaParameters.Q = binr.ReadBytes(GetIntegerSize(binr));
+				rsaParameters.DP = binr.ReadBytes(GetIntegerSize(binr));
+				rsaParameters.DQ = binr.ReadBytes(GetIntegerSize(binr));
+				rsaParameters.InverseQ = binr.ReadBytes(GetIntegerSize(binr));
+			}
+
+			rsa.ImportParameters(rsaParameters);
+			return rsa;
+		}
+
+		#endregion
+
+		#region 使用公钥创建RSA实例
+
+		public RSA CreateRsaProviderFromPublicKey(string publicKeyString)
+		{
+			// encoded OID sequence for  PKCS #1 rsaEncryption szOID_RSA_RSA = "1.2.840.113549.1.1.1"
+			byte[] seqOid = { 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00 };
+			byte[] seq = new byte[15];
+
+			var x509Key = Convert.FromBase64String(publicKeyString);
+
+			// ---------  Set up stream to read the asn.1 encoded SubjectPublicKeyInfo blob  ------
+			using (MemoryStream mem = new MemoryStream(x509Key))
+			{
+				using (BinaryReader binr = new BinaryReader(mem))  //wrap Memory Stream with BinaryReader for easy reading
+				{
+					byte bt = 0;
+					ushort twobytes = 0;
+
+					twobytes = binr.ReadUInt16();
+					if (twobytes == 0x8130) //data read as little endian order (actual data order for Sequence is 30 81)
+						binr.ReadByte();    //advance 1 byte
+					else if (twobytes == 0x8230)
+						binr.ReadInt16();   //advance 2 bytes
+					else
+						return null;
+
+					seq = binr.ReadBytes(15);       //read the Sequence OID
+					if (!CompareBytearrays(seq, seqOid))    //make sure Sequence for OID is correct
+						return null;
+
+					twobytes = binr.ReadUInt16();
+					if (twobytes == 0x8103) //data read as little endian order (actual data order for Bit String is 03 81)
+						binr.ReadByte();    //advance 1 byte
+					else if (twobytes == 0x8203)
+						binr.ReadInt16();   //advance 2 bytes
+					else
+						return null;
+
+					bt = binr.ReadByte();
+					if (bt != 0x00)     //expect null byte next
+						return null;
+
+					twobytes = binr.ReadUInt16();
+					if (twobytes == 0x8130) //data read as little endian order (actual data order for Sequence is 30 81)
+						binr.ReadByte();    //advance 1 byte
+					else if (twobytes == 0x8230)
+						binr.ReadInt16();   //advance 2 bytes
+					else
+						return null;
+
+					twobytes = binr.ReadUInt16();
+					byte lowbyte = 0x00;
+					byte highbyte = 0x00;
+
+					if (twobytes == 0x8102) //data read as little endian order (actual data order for Integer is 02 81)
+						lowbyte = binr.ReadByte();  // read next bytes which is bytes in modulus
+					else if (twobytes == 0x8202)
+					{
+						highbyte = binr.ReadByte(); //advance 2 bytes
+						lowbyte = binr.ReadByte();
+					}
+					else
+						return null;
+					byte[] modint = { lowbyte, highbyte, 0x00, 0x00 };   //reverse byte order since asn.1 key uses big endian order
+					int modsize = BitConverter.ToInt32(modint, 0);
+
+					int firstbyte = binr.PeekChar();
+					if (firstbyte == 0x00)
+					{   //if first byte (highest order) of modulus is zero, don't include it
+						binr.ReadByte();    //skip this null byte
+						modsize -= 1;   //reduce modulus buffer size by 1
+					}
+
+					byte[] modulus = binr.ReadBytes(modsize);   //read the modulus bytes
+
+					if (binr.ReadByte() != 0x02)            //expect an Integer for the exponent data
+						return null;
+					int expbytes = (int)binr.ReadByte();        // should only need one byte for actual exponent data (for all useful values)
+					byte[] exponent = binr.ReadBytes(expbytes);
+
+					// ------- create RSACryptoServiceProvider instance and initialize with public key -----
+					var rsa = RSA.Create();
+					RSAParameters rsaKeyInfo = new RSAParameters
+					{
+						Modulus = modulus,
+						Exponent = exponent
+					};
+					rsa.ImportParameters(rsaKeyInfo);
+
+					return rsa;
+				}
+
+			}
+		}
+
+		#endregion
+
+		#region 导入密钥算法
+
+		private int GetIntegerSize(BinaryReader binr)
+		{
+			byte bt = 0;
+			int count = 0;
+			bt = binr.ReadByte();
+			if (bt != 0x02)
+				return 0;
+			bt = binr.ReadByte();
+
+			if (bt == 0x81)
+				count = binr.ReadByte();
+			else
+			if (bt == 0x82)
+			{
+				var highbyte = binr.ReadByte();
+				var lowbyte = binr.ReadByte();
+				byte[] modint = { lowbyte, highbyte, 0x00, 0x00 };
+				count = BitConverter.ToInt32(modint, 0);
+			}
+			else
+			{
+				count = bt;
+			}
+
+			while (binr.ReadByte() == 0x00)
+			{
+				count -= 1;
+			}
+			binr.BaseStream.Seek(-1, SeekOrigin.Current);
+			return count;
+		}
+
+		private bool CompareBytearrays(byte[] a, byte[] b)
+		{
+			if (a.Length != b.Length)
+				return false;
+			int i = 0;
+			foreach (byte c in a)
+			{
+				if (c != b[i])
+					return false;
+				i++;
+			}
+			return true;
+		}
+
+		#endregion
+
+	}
+
+	/// <summary>
+	/// RSA算法类型
+	/// </summary>
+	public enum RSAType
+	{
+		/// <summary>
+		/// SHA1
+		/// </summary>
+		RSA = 0,
+		/// <summary>
+		/// RSA2 密钥长度至少为2048
+		/// SHA256
+		/// </summary>
+		RSA2
+	}
+}

+ 408 - 0
AppStart/Helper/SpNoticeHelper.cs

@@ -0,0 +1,408 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Threading;
+using Library;
+using LitJson;
+using MySystem;
+
+public class SpNoticeHelper
+{
+    public readonly static SpNoticeHelper Instance = new SpNoticeHelper();
+    private SpNoticeHelper()
+    { }
+
+    public void Start()
+    {
+        Thread th = new Thread(DoWorks);
+        th.IsBackground = true;
+        th.Start();
+    }
+
+    public void DoWorks()
+    {
+        while (true)
+        {
+            string content = RedisDbconn.Instance.RPop<string>("SpSingleNotice");
+            if (!string.IsNullOrEmpty(content))
+            {
+                try
+                {
+                    DoQueue(content);
+                }
+                catch (Exception ex)
+                {
+                    LogHelper.Instance.WriteLog(DateTime.Now.ToString() + "\n" + content + "\n" + ex, "统一URL地址接收消息异常");
+                }
+            }
+            else
+            {
+                Thread.Sleep(5000);
+            }
+        }
+    }
+
+    public void DoQueue(string content)
+    { 
+        string[] contents = content.Split(new string[] { "#cut#" }, StringSplitOptions.None);
+        string Headers = contents[0];
+        string Body = contents[1];
+        int BrandId = int.Parse(contents[2]);
+        if (BrandId == 7)
+        {
+            JsonData JsonObj = JsonMapper.ToObject(Body);
+            if (Body.Contains("\"businessType\""))
+            {
+                string businessType = JsonObj["businessType"].ToString();
+                Body = JsonObj["dataJson"].ToJson();
+                if (businessType == "1")
+                {
+                    Bind(Headers, Body, BrandId);
+                }
+                else if (businessType == "2")
+                {
+                    Active(Headers, Body, BrandId);
+                }
+                else if (businessType == "4")
+                {
+                    Settle(Headers, Body, BrandId);
+                }
+                else if (businessType == "5")
+                {
+                    Cash(Headers, Body, BrandId);
+                }
+                else if (businessType == "6")
+                {
+                    Flux(Headers, Body, BrandId);
+                }
+            }
+            else
+            {
+                Trade(Headers, Body, BrandId);
+            }
+        }
+    }
+
+    #region 接收绑定记录
+    public string Bind(string Headers, string Body, int BrandId = 1)
+    {
+        if (string.IsNullOrEmpty(Body))
+        {
+            return "fail";
+        }
+        string content = Newtonsoft.Json.JsonConvert.SerializeObject(Headers) + "#cut#" + Body;
+        SaveLog(BrandId, "绑定", content);
+        string fileName = function.MD5_16(Guid.NewGuid().ToString());
+        RedisDbconn.Instance.AddList("kxs_bind_list_" + BrandId, content + "#cut#" + fileName);
+        // function.WritePage("/redis/kxs_bind_list_" + BrandId + "/", fileName + ".txt", content);
+        return BackInfo(BrandId);
+    }
+    #endregion
+
+
+
+    #region 接收激活记录
+    public string Active(string Headers, string Body, int BrandId = 1)
+    {
+        if (string.IsNullOrEmpty(Body))
+        {
+            return "fail";
+        }
+        string content = Newtonsoft.Json.JsonConvert.SerializeObject(Headers) + "#cut#" + Body;
+        SaveLog(BrandId, "激活", content);
+        string fileName = function.MD5_16(Guid.NewGuid().ToString());
+        RedisDbconn.Instance.AddList("kxs_active_list_" + BrandId, content + "#cut#" + fileName);
+        // function.WritePage("/redis/kxs_active_list_" + BrandId + "/", fileName + ".txt", content);
+        return BackInfo(BrandId);
+    }
+    #endregion
+
+
+
+    #region 接收商户记录
+    public string Merchant(string Headers, string Body, int BrandId = 1)
+    {
+        if (string.IsNullOrEmpty(Body))
+        {
+            return "fail";
+        }
+        RedisDbconn.Instance.AddList("kxs_merchant_list_" + BrandId, Body);
+        return BackInfo(BrandId);
+    }
+    #endregion
+
+
+
+    #region 接收交易记录
+    public string Trade(string Headers, string Body, int BrandId = 1)
+    {
+        if (string.IsNullOrEmpty(Body))
+        {
+            return "fail";
+        }
+        string content = Newtonsoft.Json.JsonConvert.SerializeObject(Headers) + "#cut#" + Body;
+        SaveLog(BrandId, "交易", content);
+        string fileName = function.MD5_16(Guid.NewGuid().ToString());
+        RedisDbconn.Instance.AddList("kxs_trade_list_" + BrandId, content + "#cut#" + fileName);
+        // function.WritePage("/redis/kxs_trade_list_" + BrandId + "/", fileName + ".txt", content);
+        Dictionary<string, object> obj = new Dictionary<string, object>();
+        return BackInfo(BrandId);
+    }
+    #endregion
+
+
+
+    #region 接收分润记录
+    public string Profit(string Headers, string Body, int BrandId = 1)
+    {
+        if (string.IsNullOrEmpty(Body))
+        {
+            return "fail";
+        }
+        string content = Newtonsoft.Json.JsonConvert.SerializeObject(Headers) + "#cut#" + Body;
+        SaveLog(BrandId, "分润", content);
+        RedisDbconn.Instance.AddList("kxs_profit_list_" + BrandId, Body);
+        return BackInfo(BrandId);
+    }
+    #endregion
+
+
+
+    #region 接收流量卡分佣交易记录
+    public string Flux(string Headers, string Body, int BrandId = 1)
+    {
+        if (string.IsNullOrEmpty(Body))
+        {
+            return "fail";
+        }
+        string content = Newtonsoft.Json.JsonConvert.SerializeObject(Headers) + "#cut#" + Body;
+        SaveLog(BrandId, "流量卡交易", content);
+        string fileName = function.MD5_16(Guid.NewGuid().ToString());
+        RedisDbconn.Instance.AddList("kxs_flux_list_" + BrandId, content + "#cut#" + fileName);
+        // function.WritePage("/redis/kxs_flux_list_" + BrandId + "/", fileName + ".txt", content);
+        return BackInfo(BrandId);
+    }
+    #endregion
+
+
+
+    #region 接收商终关系变更通知
+    public string ChangeBind(string Headers, string Body, int BrandId = 1)
+    {
+        if (string.IsNullOrEmpty(Body))
+        {
+            return "fail";
+        }
+        string content = Newtonsoft.Json.JsonConvert.SerializeObject(Headers) + "#cut#" + Body;
+        SaveLog(BrandId, "商终关系变更", content);
+        string fileName = function.MD5_16(Guid.NewGuid().ToString());
+        RedisDbconn.Instance.AddList("kxs_changebind_list_" + BrandId, content + "#cut#" + fileName);
+        // function.WritePage("/redis/kxs_changebind_list_" + BrandId + "/", fileName + ".txt", content);
+        return BackInfo(BrandId);
+    }
+    #endregion
+
+
+
+    #region 终端费率模板变更记录
+    public string TempChange(string Headers, string Body, int BrandId = 1)
+    {
+        if (string.IsNullOrEmpty(Body))
+        {
+            return "fail";
+        }
+        string content = Newtonsoft.Json.JsonConvert.SerializeObject(Headers) + "#cut#" + Body;
+        SaveLog(BrandId, "终端费率模板变更", content);
+        string fileName = function.MD5_16(Guid.NewGuid().ToString());
+        RedisDbconn.Instance.AddList("kxs_tempchange_list_" + BrandId, content + "#cut#" + fileName);
+        // function.WritePage("/redis/kxs_tempchange_list_" + BrandId + "/", fileName + ".txt", content);
+        return BackInfo(BrandId);
+    }
+    #endregion
+
+
+
+    #region 首刷达标数据
+    public string First(string Headers, string Body, int BrandId = 1)
+    {
+        if (string.IsNullOrEmpty(Body))
+        {
+            return "fail";
+        }
+        string content = Newtonsoft.Json.JsonConvert.SerializeObject(Headers) + "#cut#" + Body;
+        SaveLog(BrandId, "首刷达标", content);
+        string fileName = function.MD5_16(Guid.NewGuid().ToString());
+        RedisDbconn.Instance.AddList("kxs_first_list_" + BrandId, content + "#cut#" + fileName);
+        // function.WritePage("/redis/kxs_first_list_" + BrandId + "/", fileName + ".txt", content);
+        return BackInfo(BrandId);
+    }
+    #endregion
+
+
+
+    #region 换绑数据
+    public string ChangeBindData(string Headers, string Body, int BrandId = 1)
+    {
+        if (string.IsNullOrEmpty(Body))
+        {
+            return "fail";
+        }
+        string content = Newtonsoft.Json.JsonConvert.SerializeObject(Headers) + "#cut#" + Body;
+        SaveLog(BrandId, "换绑", content);
+        string fileName = function.MD5_16(Guid.NewGuid().ToString());
+        RedisDbconn.Instance.AddList("kxs_changebinddata_list_" + BrandId, content + "#cut#" + fileName);
+        // function.WritePage("/redis/kxs_changebinddata_list_" + BrandId + "/", fileName + ".txt", content);
+        return BackInfo(BrandId);
+    }
+    #endregion
+
+
+
+    #region 商户SVIP会员开通和续费数据
+    public string SVip(string Headers, string Body, int BrandId = 1)
+    {
+        if (string.IsNullOrEmpty(Body))
+        {
+            return "fail";
+        }
+        string content = Newtonsoft.Json.JsonConvert.SerializeObject(Headers) + "#cut#" + Body;
+        SaveLog(BrandId, "商户SVIP会员开通和续费", content);
+        string fileName = function.MD5_16(Guid.NewGuid().ToString());
+        RedisDbconn.Instance.AddList("kxs_svip_list_" + BrandId, content + "#cut#" + fileName);
+        // function.WritePage("/redis/kxs_svip_list_" + BrandId + "/", fileName + ".txt", content);
+        return BackInfo(BrandId);
+    }
+    #endregion
+
+
+
+    #region 解绑数据
+    public string UnBind(string Headers, string Body, int BrandId = 1)
+    {
+        if (string.IsNullOrEmpty(Body))
+        {
+            return "fail";
+        }
+        string content = Newtonsoft.Json.JsonConvert.SerializeObject(Headers) + "#cut#" + Body;
+        SaveLog(BrandId, "解绑", content);
+        string fileName = function.MD5_16(Guid.NewGuid().ToString());
+        RedisDbconn.Instance.AddList("kxs_unbind_list_" + BrandId, content + "#cut#" + fileName);
+        // function.WritePage("/redis/kxs_unbind_list_" + BrandId + "/", fileName + ".txt", content);
+        return BackInfo(BrandId);
+    }
+    #endregion
+
+
+
+    #region 修改结算卡数据
+    public string ModifyBankCard(string Headers, string Body, int BrandId = 1)
+    {
+        if (string.IsNullOrEmpty(Body))
+        {
+            return "fail";
+        }
+        string content = Newtonsoft.Json.JsonConvert.SerializeObject(Headers) + "#cut#" + Body;
+        SaveLog(BrandId, "修改结算卡", content);
+        string fileName = function.MD5_16(Guid.NewGuid().ToString());
+        RedisDbconn.Instance.AddList("kxs_modifybankcard_list_" + BrandId, content + "#cut#" + fileName);
+        // function.WritePage("/redis/kxs_modifybankcard_list_" + BrandId + "/", fileName + ".txt", content);
+        return BackInfo(BrandId);
+    }
+    #endregion
+
+
+
+    #region 提现通知
+    public string Cash(string Headers, string Body, int BrandId = 1)
+    {
+        if (string.IsNullOrEmpty(Body))
+        {
+            return "fail";
+        }
+        string content = Newtonsoft.Json.JsonConvert.SerializeObject(Headers) + "#cut#" + Body;
+        SaveLog(BrandId, "提现", content);
+        string fileName = function.MD5_16(Guid.NewGuid().ToString());
+        RedisDbconn.Instance.AddList("kxs_cash_list_" + BrandId, content + "#cut#" + fileName);
+        // function.WritePage("/redis/kxs_cash_list_" + BrandId + "/", fileName + ".txt", content);
+        return BackInfo(BrandId);
+    }
+    #endregion
+
+
+
+    #region 结算通知业务
+    public string Settle(string Headers, string Body, int BrandId = 1)
+    {
+        if (string.IsNullOrEmpty(Body))
+        {
+            return "fail";
+        }
+        string content = Newtonsoft.Json.JsonConvert.SerializeObject(Headers) + "#cut#" + Body;
+        SaveLog(BrandId, "结算业务", content);
+        string fileName = function.MD5_16(Guid.NewGuid().ToString());
+        RedisDbconn.Instance.AddList("kxs_settle_list_" + BrandId, content + "#cut#" + fileName);
+        // function.WritePage("/redis/kxs_settle_list_" + BrandId + "/", fileName + ".txt", content);
+        return BackInfo(BrandId);
+    }
+    #endregion
+
+
+
+
+
+
+    #region 接收参数日志
+    private void SaveLog(int BrandId, string KindName, string content)
+    {
+        if (BrandId == 2)
+        {
+            LogHelper.Instance.WriteLog(DateTime.Now.ToString() + content, "开店宝" + KindName + "推送消息");
+        }
+        else if (BrandId == 4)
+        {
+            LogHelper.Instance.WriteLog(DateTime.Now.ToString() + content, "乐刷" + KindName + "推送消息");
+        }
+        else if (BrandId == 6)
+        {
+            LogHelper.Instance.WriteLog(DateTime.Now.ToString() + content, "立刷" + KindName + "推送消息");
+        }
+        else if (BrandId == 7)
+        {
+            LogHelper.Instance.WriteLog(DateTime.Now.ToString() + content, "盛付通" + KindName + "推送消息");
+        }
+        else if (BrandId == 8)
+        {
+            LogHelper.Instance.WriteLog(DateTime.Now.ToString() + content, "海科电签" + KindName + "推送消息");
+        }
+        else if (BrandId == 9)
+        {
+            LogHelper.Instance.WriteLog(DateTime.Now.ToString() + content, "海科大POS" + KindName + "推送消息");
+        }
+        else
+        {
+            LogHelper.Instance.WriteLog(DateTime.Now.ToString() + content, "金控" + KindName + "推送消息");
+        }
+    }
+    #endregion
+
+    #region 返回报文
+    private string BackInfo(int BrandId)
+    {
+        return "SUCCESS";
+    }
+    #endregion
+
+    #region 解析get请求键值对
+    private Dictionary<string, string> GetParams(string data)
+    {
+        Dictionary<string, string> result = new Dictionary<string, string>();
+        string[] datalist = data.Split('&');
+        foreach (string sub in datalist)
+        {
+            string[] subdatalist = sub.Split('=');
+            result.Add(subdatalist[0], subdatalist[1]);
+        }
+        return result;
+    }
+    #endregion
+}

+ 151 - 0
AppStart/Helper/TaskService.cs

@@ -0,0 +1,151 @@
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Linq;
+using Microsoft.Extensions.Hosting;
+using MySystem;
+using MySystem.JobModels;
+using Library;
+using LitJson;
+
+public class TaskService
+{
+    public readonly static TaskService Instance = new TaskService();
+    private TaskService()
+    { }
+
+    //要执行的方法
+    public void DoQueue(int taskid, string date, int kind)
+    {
+        TimedTasks task = RedisDbconn.Instance.Get<TimedTasks>("TimedTasks:" + taskid) ?? new TimedTasks();
+        WebCMSEntities db = new WebCMSEntities();
+        TaskFinish finish = db.TaskFinish.Add(new TaskFinish()
+        {
+            CreateDate = DateTime.Now,
+            TaskId = task.Id,
+        }).Entity;
+        db.SaveChanges();
+
+        JobMqMsg job = new JobMqMsg();
+        job.OrderString = task.OrderJson;
+        job.Id = task.Id;
+        job.Note = task.Note;
+        job.FinishId = finish.Id;
+
+        string jobJson = PublicFunction.ObjectToJsonString(job);
+        finish.TargetData = jobJson;
+        db.SaveChanges();
+        db.Dispose();
+        if (task.OrderJson.StartsWith("Ap:") && task.OrderJson.EndsWith(":Sycn"))
+        {
+        }
+        else if (task.OrderJson.StartsWith("Sp:"))
+        {
+            Brand brand = new Brand();
+            brand.Id = task.BrandId;
+            TaskSpGetData data = RedisDbconn.Instance.Get<TaskSpGetData>("TaskSpGet:" + task.Id);
+            List<FieldRelationTable> fields = RedisDbconn.Instance.GetList<FieldRelationTable>("TaskSpGet:Fields:" + task.Id, 1, 1000);
+            brand.FieldRelation = fields;
+            brand.TargetTableName = data.TargetTableName;
+            brand.ReqType = data.ReqType;
+            brand.Url = data.ReqUrl;
+            brand.ReqParam = data.ReqParam;
+            brand.FtpUserName = data.FtpUserName;
+            brand.FtpPassword = data.FtpPassword;
+            brand.CheckKey = data.CheckKey;
+            brand.IsCheck = data.IsCheck == 1 ? true : false;
+            job.BrandInfo = brand;
+            job.FinishId = finish.Id;
+            if (task.OrderJson.EndsWith(":Sycn"))
+            {
+                PublicImportDataService.Instance.Test(job, date, kind);
+            }
+            else if (task.OrderJson.EndsWith(":SpServer"))
+            {
+            }
+        }
+        else
+        {
+            if (task.OrderJson == "PosTradeStat" || task.OrderJson == "TimerStat" || task.OrderJson == "AlipayPayBack2")
+            {
+                
+            }
+            else
+            {
+            }
+        }
+    }
+
+
+
+
+
+
+
+    public string SycnRedis()
+    {
+        WebCMSEntities db = new WebCMSEntities();
+        List<TimedTasks> tasks = db.TimedTasks.Where(m => m.Status == 1).ToList();
+        RedisDbconn.Instance.Clear("TimedTasks*");
+        foreach (TimedTasks task in tasks)
+        {
+            RedisDbconn.Instance.AddList("TimedTasks", task.Id);
+            task.Status = 0;
+            RedisDbconn.Instance.Set("TimedTasks:" + task.Id, task);
+        }
+        List<TimedTasks> sptasks = db.TimedTasks.Where(m => m.SeoTitle == "customize" && m.ServerName == "SpServer" && m.Status == 1).ToList();
+        RedisDbconn.Instance.Clear("TaskSpGet");
+        foreach (TimedTasks task in sptasks)
+        {
+            task.Status = 0;
+            RedisDbconn.Instance.Set("TimedTasks:" + task.Id, task);
+            RedisDbconn.Instance.AddList("TaskSpGet", task.Id);
+            TaskSpGetData spget = db.TaskSpGetData.FirstOrDefault(m => m.TaskId == task.Id) ?? new TaskSpGetData();
+            RedisDbconn.Instance.Set("TaskSpGet:" + task.Id, spget);
+            List<TaskSpFieldRelation> fields = db.TaskSpFieldRelation.Where(m => m.TaskId == task.Id).ToList();
+            RedisDbconn.Instance.Clear("TaskSpGet:Fields:" + task.Id);
+            foreach (TaskSpFieldRelation field in fields)
+            {
+                RedisDbconn.Instance.AddList("TaskSpGet:Fields:" + task.Id, new FieldRelationTable()
+                {
+                    SourceFieldName = field.SourceFieldName,
+                    TargetFieldName = field.TargetFieldName,
+                    TargetFieldType = field.TargetFieldType,
+                });
+            }
+        }
+        db.Dispose();
+        return "success";
+    }
+
+    public JobMqMsg GetJob(int taskid)
+    {
+        TimedTasks task = RedisDbconn.Instance.Get<TimedTasks>("TimedTasks:" + taskid) ?? new TimedTasks();
+        WebCMSEntities db = new WebCMSEntities();
+        
+        JobMqMsg job = new JobMqMsg();
+        job.OrderString = task.OrderJson;
+        job.Id = task.Id;
+        job.Note = task.Note;
+
+        string jobJson = PublicFunction.ObjectToJsonString(job);
+        db.SaveChanges();
+        db.Dispose();
+        Brand brand = new Brand();
+        brand.Id = task.BrandId;
+        TaskSpGetData data = RedisDbconn.Instance.Get<TaskSpGetData>("TaskSpGet:" + task.Id);
+        List<FieldRelationTable> fields = RedisDbconn.Instance.GetList<FieldRelationTable>("TaskSpGet:Fields:" + task.Id, 1, 1000);
+        brand.FieldRelation = fields;
+        brand.TargetTableName = data.TargetTableName;
+        brand.ReqType = data.ReqType;
+        brand.Url = data.ReqUrl;
+        brand.ReqParam = data.ReqParam;
+        brand.FtpUserName = data.FtpUserName;
+        brand.FtpPassword = data.FtpPassword;
+        brand.CheckKey = data.CheckKey;
+        brand.IsCheck = data.IsCheck == 1 ? true : false;
+        job.BrandInfo = brand;
+        return job;
+    }
+}

+ 177 - 0
AppStart/PublicFunction.cs

@@ -0,0 +1,177 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Data;
+using System.Text.RegularExpressions;
+using MySystem.Models;
+using Library;
+
+namespace MySystem
+{
+    public class PublicFunction
+    {
+        public WebCMSEntities db = new WebCMSEntities();
+
+        #region 中译英
+
+        public string TranslateZHToEn(string Source)
+        {
+            string result = function.GetWebRequest("http://fanyi.youdao.com/translate?&doctype=json&type=ZH_CN2EN&i=" + Source);
+            //{"type":"ZH_CN2EN","errorCode":0,"elapsedTime":2,"translateResult":[[{"src":"大事件","tgt":"The big event"}]]}
+            Match match = Regex.Match(result, "\"tgt\":\".*?\"");
+            if (match.Success)
+            {
+                return match.Value.Replace("\"tgt\":", "").Trim('"');
+            }
+            return "";
+        }
+
+        #endregion
+
+        #region 解析编辑器里的视频代码
+        public string CheckMediaFromHtml(string content)
+        {
+            if (string.IsNullOrEmpty(content))
+            {
+                return "";
+            }
+            string result = content;
+            MatchCollection mc = Regex.Matches(content, "<embed.*?/>");
+            foreach (Match submc in mc)
+            {
+                string info = submc.Value;
+                Match match = Regex.Match(info, "src=\".*?\"");
+                if (match.Success)
+                {
+                    string path = match.Value;
+                    path = path.Replace("src=\"", "");
+                    path = path.TrimEnd(new char[] { '"' });
+                    string html = "";
+                    string width = "600";
+                    string height = "300";
+                    Match width_match = Regex.Match(info, "width=\".*?\"");
+                    if (width_match.Success)
+                    {
+                        width = width_match.Value.Replace("width=", "").Trim('"');
+                    }
+                    Match height_match = Regex.Match(info, "height=\".*?\"");
+                    if (height_match.Success)
+                    {
+                        height = height_match.Value.Replace("height=", "").Trim('"');
+                    }
+                    if (path.EndsWith(".mp4"))
+                    {
+                        if (string.IsNullOrEmpty(html))
+                        {
+                            html = "<video controls=\"controls\" autoplay=\"autoplay\" poster=\"\" onplay=\"true\" width=\"" + width + "\" height=\"" + height + "\" onclick=\"this.play();\">" +
+                                                "<source src=\"" + path + "\">" +
+                                                "<source src=\"" + path + "\" type=\"video/mp4\">" +
+                                                "<source src=\"" + path + "\" type=\"video/webm\">" +
+                                                "<source src=\"" + path + "\" type=\"video/ogg\">" +
+                                            "</video>";
+                        }
+                    }
+                    else if (path.EndsWith(".mp3"))
+                    {
+                        html = "<audio controls=\"controls\" width=\"" + width + "\" height=\"" + height + "\" onclick=\"this.play();\">" +
+                                        "<source src=\"" + path + "\" type=\"audio/mp3\" />" +
+                                        "<embed src=\"" + path + "\" height=\"100\" width=\"100\" />" +
+                                    "</audio>";
+                    }
+                    result = result.Replace(info, html);
+                }
+            }
+            return result;
+        }
+        #endregion
+
+        #region 对象转Json字符串
+
+        public static string ObjectToJsonString(object obj)
+        {
+            return Newtonsoft.Json.JsonConvert.SerializeObject(obj);
+        }
+
+        #endregion
+
+        #region Json字符串转对象
+
+        public static T DeserializeJSON<T>(string json)
+        {
+            return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(json);
+        }
+
+        #endregion
+
+        #region 删除文件
+
+        public static bool DeleteFile(string VirtualPath)
+        {
+            string FilePath = function.getPath(VirtualPath);
+            if (System.IO.File.Exists(FilePath))
+            {
+                System.IO.File.Delete(FilePath);
+                return true;
+            }
+            return false;
+        }
+
+        #endregion
+
+        #region 两点距离
+
+        public static double GetDistanceNumber(string start, string end)
+        {
+            if (!string.IsNullOrEmpty(start) && !string.IsNullOrEmpty(end))
+            {
+                string[] startpos = start.Split(',');
+                string[] endpos = end.Split(',');
+                double lng1 = double.Parse(startpos[0]);
+                double lat1 = double.Parse(startpos[1]);
+                double lng2 = double.Parse(endpos[0]);
+                double lat2 = double.Parse(endpos[1]);
+                double radLat1 = rad(lat1);
+                double radLat2 = rad(lat2);
+                double a = radLat1 - radLat2;
+                double b = rad(lng1) - rad(lng2);
+                double s = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a / 2), 2) + Math.Cos(radLat1) * Math.Cos(radLat2) * Math.Pow(Math.Sin(b / 2), 2)));
+                s = s * EARTH_RADIUS;
+                s = Math.Round(s * 10000) / 10000;
+                return s;
+            }
+            return 10000000;
+        }
+        private static double rad(double d)
+        {
+            return d * Math.PI / 180.0;
+        }
+        private static double EARTH_RADIUS = 6378.137;
+
+        #endregion
+
+        #region 通过表名、文本、值获得字典数据
+
+        public Dictionary<string, string> GetDictionaryByTableName(string tableEnName, string Text, string Value)
+        {
+            Text = Text.Split('_')[0];
+            Value = Value.Split('_')[0];
+            Dictionary<string, string> dic = new Dictionary<string, string>();
+            DataTable dt = dbconn.dtable("select " + Text + "," + Value + " from " + tableEnName + " order by Sort desc,Id asc");
+            foreach (DataRow dr in dt.Rows)
+            {
+                dic.Add(dr[1].ToString(), dr[0].ToString());
+            }
+            return dic;
+        }
+
+        #endregion
+
+
+
+        #region 测试会员Id
+
+        public static int[] testids = { };
+
+        #endregion
+    }
+}

+ 94 - 0
AppStart/RSASignHelper.cs

@@ -0,0 +1,94 @@
+
+using System;
+using System.Text;
+using Org.BouncyCastle.Crypto.Parameters;
+using Org.BouncyCastle.Security;
+
+namespace MySystem
+{
+    public class RSASignHelper
+    {
+        public readonly static RSASignHelper Instance = new RSASignHelper();
+        private RSASignHelper()
+        {
+        }
+
+        /// <summary>
+        /// RSA签名
+        /// </summary>
+        /// <param name="content">数据</param>
+        /// <param name="privateKey">RSA密钥</param>
+        /// <returns></returns>
+        public string RsaSign(string content, string privateKey)
+        {
+            var signer = SignerUtilities.GetSigner("SHA1withRSA");
+            //将java格式的rsa密钥转换成.net格式
+            var privateKeyParam = (RsaPrivateCrtKeyParameters)PrivateKeyFactory.CreateKey(Convert.FromBase64String(privateKey));
+            signer.Init(true, privateKeyParam);
+            var plainBytes = Encoding.UTF8.GetBytes(content);
+            signer.BlockUpdate(plainBytes, 0, plainBytes.Length);
+            var signBytes = signer.GenerateSignature();
+            return ByteToHexStr(signBytes);
+        }
+
+        /// <summary>
+        /// RSA验签
+        /// </summary>
+        /// <param name="content">内容</param>
+        /// <param name="publicKey">RSA公钥</param>
+        /// <param name="signData">签名字段</param>
+        /// <returns></returns>
+        public bool VerifySign(string content, string publicKey, string signData)
+        {
+            try
+            {
+                var signer = SignerUtilities.GetSigner("SHA1withRSA");
+                var publicKeyParam = (RsaKeyParameters)PublicKeyFactory.CreateKey(StrToToHexByte(publicKey));
+                signer.Init(false, publicKeyParam);
+                var signBytes = StrToToHexByte(signData);
+                var plainBytes = Encoding.UTF8.GetBytes(content);
+                signer.BlockUpdate(plainBytes, 0, plainBytes.Length);
+                var ret = signer.VerifySignature(signBytes);
+                return ret;
+            }
+            catch (Exception ex)
+            {
+                return false;
+            }
+        }
+
+        /// <summary>
+        /// 字符串转16进制字节数组
+        /// </summary>
+        /// <param name="hexString"></param>
+        /// <returns></returns>
+        private byte[] StrToToHexByte(string hexString)
+        {
+            hexString = hexString.Replace(" ", "");
+            if ((hexString.Length % 2) != 0)
+                hexString += " ";
+            byte[] returnBytes = new byte[hexString.Length / 2];
+            for (int i = 0; i < returnBytes.Length; i++)
+                returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
+            return returnBytes;
+        }
+
+        /// <summary>
+        /// 字节数组转16进制字符串
+        /// </summary>
+        /// <param name="bytes"></param>
+        /// <returns></returns>
+        public string ByteToHexStr(byte[] bytes)
+        {
+            string returnStr = "";
+            if (bytes != null)
+            {
+                for (int i = 0; i < bytes.Length; i++)
+                {
+                    returnStr += bytes[i].ToString("X2");
+                }
+            }
+            return returnStr;
+        }
+    }
+}

+ 232 - 0
AppStart/RabbitMQClient.cs

@@ -0,0 +1,232 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using RabbitMQ.Client;
+using RabbitMQ.Client.Events;
+using Library;
+using System.Threading;
+
+namespace MySystem
+{
+    public class RabbitMQClient
+    {
+        public readonly static RabbitMQClient Instance = new RabbitMQClient();
+        string UserName,Password,HostName;
+        private RabbitMQClient()
+        {
+            UserName = ConfigurationManager.AppSettings["MqUserName"].ToString();
+            Password = ConfigurationManager.AppSettings["MqPassword"].ToString();
+            HostName = ConfigurationManager.AppSettings["MqHostName"].ToString();
+        }
+
+        #region 单对单发送
+        public void SendMsg(string content, string QueueName = "")
+        {
+            RedisDbconn.Instance.AddList(QueueName, content);
+            //创建连接对象工厂
+            // var factory = new ConnectionFactory()
+            // {
+            //     UserName = UserName,
+            //     Password = Password,
+            //     AutomaticRecoveryEnabled = true,  //如果connection挂掉是否重新连接
+            //     TopologyRecoveryEnabled = true  //连接恢复后,连接的交换机,队列等是否一同恢复
+            // };
+            // List<AmqpTcpEndpoint> p = new List<AmqpTcpEndpoint>();
+            // string[] HostNames = HostName.Split(',');
+            // foreach (string subHostName in HostNames)
+            // {
+            //     string[] subHostNameData = subHostName.Split(':');
+            //     p.Add(new AmqpTcpEndpoint(subHostNameData[0], int.Parse(subHostNameData[1])));
+            // }
+            // var conn = factory.CreateConnection(p);
+            // var channel = conn.CreateModel();
+            // channel.QueueDeclare(QueueName, true, false, false);
+            // channel.BasicPublish("", QueueName, null, Encoding.Default.GetBytes(content));
+            // channel.Dispose();
+            // conn.Dispose();
+        }
+        #endregion
+
+        #region 单对单发送
+        public void ListenSendMsg()
+        {
+            Thread th = new Thread(ListenSendMsgDo);
+            th.IsBackground = true;
+            th.Start();
+        }
+        Dictionary<string, IModel> channels = new Dictionary<string, IModel>();
+        public void ListenSendMsgDo()
+        {
+            while (true)
+            {
+                //创建连接对象工厂
+                var factory = new ConnectionFactory()
+                {
+                    UserName = UserName,
+                    Password = Password,
+                    AutomaticRecoveryEnabled = true,  //如果connection挂掉是否重新连接
+                    TopologyRecoveryEnabled = true  //连接恢复后,连接的交换机,队列等是否一同恢复
+                };
+                List<AmqpTcpEndpoint> p = new List<AmqpTcpEndpoint>();
+                string[] HostNames = HostName.Split(',');
+                foreach (string subHostName in HostNames)
+                {
+                    string[] subHostNameData = subHostName.Split(':');
+                    p.Add(new AmqpTcpEndpoint(subHostNameData[0], int.Parse(subHostNameData[1])));
+                }
+                var conn = factory.CreateConnection(p);
+                bool op = true;
+                while (op)
+                {
+                    string data = RedisDbconn.Instance.RPop<string>("SpServerMq");
+                    if (!string.IsNullOrEmpty(data))
+                    {
+                        try
+                        {
+                            string[] dataList = data.Split("#cut#");
+                            string QueueName = dataList[0];
+                            if (!channels.ContainsKey(QueueName))
+                            { 
+                                var channelCreate = conn.CreateModel();
+                                channels.Add(QueueName, channelCreate);
+                            }
+                            var channel = channels[QueueName];
+                            channel.QueueDeclare(QueueName, false, false, false);
+                            channel.BasicPublish("", QueueName, null, Encoding.Default.GetBytes(dataList[1]));
+                        }
+                        catch (Exception ex)
+                        {
+                            op = false;
+                            LogHelper.Instance.WriteLog(DateTime.Now.ToString() + "\r\n" + ex.ToString(), "MQ消息队列单对单发送监听异常");
+                        }
+                    }
+                }
+                // channel.Dispose();
+                conn.Dispose();
+                LogHelper.Instance.WriteLog(DateTime.Now.ToString(), "MQ测试");
+            }
+        }
+        #endregion
+
+        #region 单对单接收
+        public void StartReceive(string QueueName)
+        {
+            var factory = new ConnectionFactory()
+            {
+                UserName = UserName,
+                Password = Password,
+                AutomaticRecoveryEnabled = true,  //如果connection挂掉是否重新连接
+                TopologyRecoveryEnabled = true  //连接恢复后,连接的交换机,队列等是否一同恢复
+            };
+            List<AmqpTcpEndpoint> p = new List<AmqpTcpEndpoint>();
+            string[] HostNames = HostName.Split(',');
+            foreach (string subHostName in HostNames)
+            {
+                string[] subHostNameData = subHostName.Split(':');
+                p.Add(new AmqpTcpEndpoint(subHostNameData[0], int.Parse(subHostNameData[1])));
+            }
+            var conn = factory.CreateConnection(p);
+            var channel = conn.CreateModel();
+            channel.QueueDeclare(QueueName, true, false, false);
+            EventingBasicConsumer consumer = new EventingBasicConsumer(channel);
+            consumer.Received += (a, e) =>
+            {
+                try
+                {
+                    string MsgContent = Encoding.Default.GetString(e.Body.ToArray());
+                    if (QueueName == "AddTable")
+                    { 
+                        AddTableService.Instance.CreateTable(MsgContent);
+                    }
+                    else
+                    {
+                        JobMqMsg job = Newtonsoft.Json.JsonConvert.DeserializeObject<JobMqMsg>(MsgContent);
+                        if (QueueName == "GetSourceData")
+                        {
+                            PublicGetService.Instance.StartGet(job);
+                        }
+                        else if (QueueName == "CheckSourceData")
+                        {
+                            PublicGetService.Instance.StartCheck(job);
+                        }
+                        else if (QueueName == "GetSpData")
+                        {
+                            PublicImportDataService.Instance.Start(job);
+                        }
+                    }
+                    channel.BasicAck(e.DeliveryTag, true); //收到回复后,RabbitMQ会直接在队列中删除这条消息
+                }
+                catch (Exception ex)
+                {
+                    channel.BasicAck(e.DeliveryTag, true);
+                }
+            };
+            channel.BasicConsume(QueueName, false, consumer);
+        }
+        #endregion
+
+
+
+        #region 单对多发送
+        public void SendMsgToExchange(string content, string Exchange = "")
+        {
+            //创建连接对象工厂
+            var factory = new ConnectionFactory()
+            {
+                UserName = UserName,
+                Password = Password,
+                AutomaticRecoveryEnabled = true,  //如果connection挂掉是否重新连接
+                TopologyRecoveryEnabled = true  //连接恢复后,连接的交换机,队列等是否一同恢复
+            };
+            List<AmqpTcpEndpoint> p = new List<AmqpTcpEndpoint>();
+            string[] HostNames = HostName.Split(',');
+            foreach (string subHostName in HostNames)
+            {
+                string[] subHostNameData = subHostName.Split(':');
+                p.Add(new AmqpTcpEndpoint(subHostNameData[0], int.Parse(subHostNameData[1])));
+            }
+            var conn = factory.CreateConnection(p);
+            var channel = conn.CreateModel();
+            channel.ExchangeDeclare(Exchange, ExchangeType.Fanout, true, false);
+            channel.BasicPublish(Exchange, "", null, Encoding.Default.GetBytes(content));
+            channel.Dispose();
+            conn.Dispose();
+        }
+        #endregion
+
+        #region 单对多接收
+        public void StartReceiveFromExchange(string QueueName = "", string Exchange = "")
+        {
+            var factory = new ConnectionFactory()
+            {
+                UserName = UserName,
+                Password = Password,
+                AutomaticRecoveryEnabled = true,  //如果connection挂掉是否重新连接
+                TopologyRecoveryEnabled = true  //连接恢复后,连接的交换机,队列等是否一同恢复
+            };
+            List<AmqpTcpEndpoint> p = new List<AmqpTcpEndpoint>();
+            string[] HostNames = HostName.Split(',');
+            foreach (string subHostName in HostNames)
+            {
+                string[] subHostNameData = subHostName.Split(':');
+                p.Add(new AmqpTcpEndpoint(subHostNameData[0], int.Parse(subHostNameData[1])));
+            }
+            var conn = factory.CreateConnection(p);
+            var channel = conn.CreateModel();
+            //定义队列
+            channel.QueueDeclare(QueueName, true, false, false);
+            //定义交换机
+            channel.ExchangeDeclare(Exchange, ExchangeType.Fanout, true, false);
+            //绑定队列到交换机
+            channel.QueueBind(QueueName, Exchange, "");
+            var consumer = new EventingBasicConsumer(channel);
+            consumer.Received += (a, e) =>
+            {
+                LogHelper.Instance.WriteLog(Encoding.Default.GetString(e.Body.ToArray()), "接收到的MQ消息");
+                channel.BasicAck(e.DeliveryTag, true); //收到回复后,RabbitMQ会直接在队列中删除这条消息
+            };
+            channel.BasicConsume(QueueName, false, consumer);
+        }
+        #endregion
+    }
+}

+ 211 - 0
AppStart/RedisDbconn.cs

@@ -0,0 +1,211 @@
+using System.Collections.Generic;
+using Library;
+
+namespace MySystem
+{
+    public class RedisDbconn
+    {
+        public readonly static RedisDbconn Instance = new RedisDbconn();
+        public static CSRedis.CSRedisClient csredis;
+        private RedisDbconn()
+        {
+        }
+
+        #region 设置单个字段
+        public bool Set(string key, object value)
+        {
+            return csredis.Set(key, value);
+            // return false;
+        }
+        #endregion
+
+        #region 整数累加
+        public long AddInt(string key, long value = 1)
+        {
+            return csredis.IncrBy(key, value);
+            // return 0;
+        }
+        #endregion
+
+        #region 数字累加
+        public decimal AddNumber(string key, decimal value = 1)
+        {
+            return csredis.IncrByFloat(key, value);
+            // return 0;
+        }
+        #endregion
+
+        #region 获取单个字段
+        public T Get<T>(string key)
+        {
+            return csredis.Get<T>(key);
+        }
+        #endregion
+
+        #region 设置散列字段
+        public bool HSet(string key, string field, object value)
+        {
+            return csredis.HSet(key, field, value);
+            // return false;
+        }
+        #endregion
+
+        #region 散列整数累加
+        public long HAddInt(string key, string field, long value = 1)
+        {
+            return csredis.HIncrBy(key, field, value);
+            // return 0;
+        }
+        #endregion
+
+        #region 散列数字累加
+        public decimal HAddNumber(string key, string field, decimal value = 1)
+        {
+            return csredis.HIncrByFloat(key, field, value);
+            // return 0;
+        }
+        #endregion
+
+        #region 获取散列元素
+        public T HGet<T>(string key, string field)
+        {
+            return csredis.HGet<T>(key, field);
+        }
+        #endregion
+
+        #region 获取散列所有元素
+        public Dictionary<string, T> HGetAll<T>(string key)
+        {
+            return csredis.HGetAll<T>(key);
+        }
+        #endregion
+
+        #region 添加列表对象
+        public long AddList(string key, object value)
+        {
+            return csredis.LPush(key, value);
+            // return 0;
+        }
+        public long AddList(string key, object[] value)
+        {
+            return csredis.LPush(key, value);
+            // return 0;
+        }
+        public T RPop<T>(string key)
+        {
+            return csredis.RPop<T>(key);
+        }
+        #endregion
+
+        #region 添加集合对象
+        public long SAdd(string key, object value)
+        {
+            return csredis.SAdd(key, value);
+            // return 0;
+        }
+        public long SAdd(string key, object[] value)
+        {
+            return csredis.SAdd(key, value);
+            // return 0;
+        }
+        #endregion
+
+        #region 获取集合对象
+        public T[] SGetList<T>(string key)
+        {
+            return csredis.SMembers<T>(key);
+        }
+        #endregion
+
+        #region 修改列表对象
+        public bool SetList(string key, int index, object value)
+        {
+            long itemindex = csredis.LLen(key) - index - 1;
+            return csredis.LSet(key, itemindex, value);
+            // return false;
+        }
+        #endregion
+
+        #region 获取列表
+        public List<T> GetList<T>(string key, int pageNum = 1, int pageSize = 10)
+        {
+            int start = (pageNum - 1) * pageSize;
+            int end = start + pageSize - 1;
+            string[] list = csredis.LRange(key, start, end);
+            List<T> lists = new List<T>();
+            foreach (string record in list)
+            { 
+                lists.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<T>(record));
+            }
+            return lists;
+        }
+        #endregion
+
+        #region 添加排序列表对象
+        public long AddSort(string key, object value, decimal score)
+        {
+            return csredis.ZAdd(key, (score, value));
+            // return 0;
+        }
+        #endregion
+
+        #region 获取排序列表
+        public List<T> GetSort<T>(string key, int pageNum = 1, int pageSize = 10)
+        {
+            int start = (pageNum - 1) * pageSize;
+            int end = start + pageSize;
+            string[] list = csredis.ZRangeByScore(key, start, end);
+            List<T> lists = new List<T>();
+            foreach (string record in list)
+            { 
+                lists.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<T>(record));
+            }
+            return lists;
+        }
+        public List<T> GetSortDesc<T>(string key, int pageNum = 1, int pageSize = 10)
+        {
+            int start = (pageNum - 1) * pageSize;
+            int end = start + pageSize;
+            string[] list = csredis.ZRevRangeByScore(key, start, end);
+            List<T> lists = new List<T>();
+            foreach (string record in list)
+            { 
+                lists.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<T>(record));
+            }
+            return lists;
+        }
+        #endregion
+
+        public bool Remove(string key, long start, long end)
+        {
+            return csredis.LTrim(key, start, end);
+        }
+
+        public bool RemoveTop(string key, long count)
+        {
+            return RedisDbconn.Instance.Remove(key, count, RedisDbconn.Instance.Count(key) - 1);;
+        }
+
+        public long Count(string key)
+        {
+            return csredis.LLen(key);
+        }
+
+        public void Clear(string pattern)
+        {
+            string[] keys = csredis.Keys(pattern);
+            csredis.Del(keys);
+        }
+
+        public string[] GetKeys(string pattern)
+        { 
+            string[] keys = csredis.Keys(pattern);
+            return keys;
+        }
+
+        public void SetExpire(string key, int expire)
+        { 
+            csredis.Expire(key, expire); //秒为单位
+        }
+    }
+}

+ 12 - 0
AppStart/RedisTables/AccountTable.cs

@@ -0,0 +1,12 @@
+using System;
+namespace MySystem
+{
+    public class AccountTable
+    {
+        public int Id { get; set; }
+        public string Detail { get; set; }
+        public DateTime CreateDate { get; set; }
+        public decimal DoMoney { get; set; }
+        public int BrandKind { get; set; }
+    }
+}

+ 9 - 0
AppStart/RedisTables/AdminIpList.cs

@@ -0,0 +1,9 @@
+using System;
+namespace MySystem
+{
+    public class AdminIpList
+    {
+        public string Province { get; set; } //省份
+        public int IpCount { get; set; } //ip数
+    }
+}

+ 18 - 0
AppStart/RedisTables/UData.cs

@@ -0,0 +1,18 @@
+using System;
+namespace MySystem
+{
+    public class UData
+    {
+        public int TeamActiveCount { get; set; } //团队激活数
+        public int TeamTransactionCount { get; set; } //团队交易笔数
+        public decimal TeamTransactionMoney { get; set; } //团队交易额
+
+
+
+
+        public decimal ProfitMoney { get; set; } //交易分润/分润
+        public decimal ReturnMoney { get; set; } //激活奖励/返现
+        public decimal OtherMoney { get; set; } //活动奖励/其他
+        public decimal TotalMoney { get; set; } //累计分润/累计
+    }
+}

+ 159 - 0
AppStart/SLS.cs

@@ -0,0 +1,159 @@
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+using Aliyun.Api.LogService;
+using Aliyun.Api.LogService.Domain.Log;
+using Aliyun.Api.LogService.Domain.LogStore.Index;
+using Aliyun.Api.LogService.Infrastructure.Protocol;
+
+namespace MySystem
+{
+    public class SLS
+    {
+        //配置AccessKey、服务入口、Project名称、Logstore名称等相关信息。
+        //日志服务的服务入口。更多信息,请参见服务入口。
+        //此处以杭州为例,其它地域请根据实际情况填写。
+        private static string endpoint = "cn-chengdu.log.aliyuncs.com";
+        //阿里云访问密钥AccessKey。更多信息,请参见访问密钥。阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维。
+        private static string accessKeyId = "LTAI5t9L1WAyzPaQzX57kSxG";
+        private static string accessKeySecret = "BqdskHlgU402kHhlpvdTOLsQZ63xKw";
+        //Project名称。
+        private static string project = "kexiaoshuang";
+        //Logstore名称。
+        private static string logstore = "aliyun-test-logstore";
+        //创建日志服务Client。
+        private static ILogServiceClient client = BuildSimpleClient();
+
+        static async Task Main()
+        {
+            //创建Project。
+            var proRes = await client.CreateProjectAsync(project, "des");
+            check(proRes);
+            Console.WriteLine("Create project success");
+            Thread.Sleep(120 * 1000);
+            
+            //创建Logstore。
+            var storeRes = await client.CreateLogStoreAsync(logstore, 3, 2);
+            check(storeRes);
+            Console.WriteLine("Create logstore success");
+            Thread.Sleep(10 * 1000);
+            
+            //为Logstore创建索引。
+            var indRes = await client.CreateIndexAsync(logstore, new IndexLineInfo(new[] {' ', ','}));
+            check(indRes);
+            Console.WriteLine("Create Index success");
+            Thread.Sleep(60 * 1000);
+
+            //向Logstore写入数据。
+            // await PostLogs();
+            Console.WriteLine("Post logs success");
+            Thread.Sleep(3000);
+            //查询日志。
+            await GetLogs();
+        }
+
+        public static async void CreateProject(string name, string detail)
+        {
+            var proRes = await client.CreateProjectAsync(name, detail);
+            check(proRes);
+        }
+
+        public static async void CreateLogStore(string logstore)
+        {
+            var storeRes = await client.CreateLogStoreAsync(logstore, 3, 2, project);
+            check(storeRes);
+        }
+
+        public static async void CreateIndex(string logstore)
+        {
+            var indRes = await client.CreateIndexAsync(logstore, new IndexLineInfo(new[] {' ', ','}), project);
+            check(indRes);
+        }
+
+        public static async Task GetLogs()
+        {
+            var logsRes = await client.GetLogsAsync(logstore, DateTimeOffset.UtcNow.AddMinutes(-1),
+                DateTimeOffset.UtcNow,
+                "test", "", 100, 0);
+            check(logsRes);
+            foreach (var log in logsRes.Result.Logs)
+            {
+                foreach (var key in log.Keys)
+                {
+                    log.TryGetValue(key, out var value);
+                    Console.WriteLine(key + " : " + value);
+                }
+
+                Console.WriteLine("======");
+            }
+        }
+
+        public static async void PostLogs(string logstore, string Topic, string Source, Dictionary<String, String> Contents, Dictionary<String, String> LogTags)
+        {
+            var response = await client.PostLogStoreLogsAsync(logstore, new LogGroupInfo
+            {
+                Topic = Topic,
+                Source = Source,
+                LogTags = LogTags,
+                Logs = new List<LogInfo>
+                {
+                    new LogInfo
+                    {
+                        Time = DateTimeOffset.Now,
+                        Contents = Contents
+                        // new Dictionary<String, String>
+                        // {
+                        //     {"name", "zs"},
+                        //     {"age", "18"},
+                        //     {"address", String.Empty}
+                        // }
+                    }
+                }
+            });
+            check(response);
+        }
+
+        public static ILogServiceClient BuildSimpleClient()
+            => LogServiceClientBuilders.HttpBuilder
+                .Endpoint(endpoint, project)
+                .Credential(accessKeyId, accessKeySecret)
+                .Build();
+
+        public static void check(IResponse res)
+        {
+            if (!res.IsSuccess)
+            {
+                throw new ApplicationException(res.Error.ErrorMessage);
+            }
+        }
+
+
+
+
+        /// <summary>
+        /// SLS日志基础方法
+        /// </summary>
+        /// <param name="createDate"></param>
+        /// <param name="topic"></param>
+        /// <param name="content"></param>
+        /// <param name="otherTags"></param>
+        /// <returns></returns>
+        public static string WriteLog(DateTime createDate, string topic, string content, Dictionary<string, string> otherTags)
+        {
+            Dictionary<string, string> tags = new Dictionary<string, string>();
+            tags.Add("datetime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+            tags.Add("date", DateTime.Now.ToString("yyyy-MM-dd"));
+            tags.Add("month", DateTime.Now.ToString("yyyy-MM"));
+            tags.Add("year", DateTime.Now.ToString("yyyy"));
+            foreach(string key in otherTags.Keys)
+            {
+                tags.Add(key, otherTags[key]);
+            }
+            SLS.PostLogs("spserver", topic, "47.108.229.115", new Dictionary<string, string>{
+                {"content", content}
+            }, tags);
+            return "ok";
+        }
+    }
+}

+ 18 - 0
AppStart/Setting.cs

@@ -0,0 +1,18 @@
+using System;
+namespace MySystem
+{
+    public class Setting
+    {
+        public string AppKey { get; set; }
+        public string AppId { get; set; }
+        public string CheckUrl { get; set; }
+        public string WebServiceUrl { get; set; }
+        public string ConnectionStrings { get; set; }
+        public string Host { get; set; }
+        public string Database { get; set; }
+        public string OSSKey { get; set; }
+        public string OSSSecret { get; set; }
+        public string OSSEndpoint { get; set; }
+        public string OSSBucketName { get; set; }
+    }
+}

二進制
AppStart/Tables/.DS_Store


+ 29 - 0
AppStart/Tables/Brand.cs

@@ -0,0 +1,29 @@
+using System;
+using System.Collections.Generic;
+namespace MySystem
+{
+    public class Brand
+    {
+        public int Id { get; set; } //品牌ID
+        public string QueueName { get; set; } //队列名称
+        public List<FieldRelationTable> FieldRelation { get; set; } //字段对应关系
+        public string TargetTableName { get; set; } //目标表
+        public int DataType { get; set; } //数据类型,通过此属性判断操作相应的表,如:激活记录、交易记录、流量卡分佣交易记录等
+        public string ReqType { get; set; } //请求方式,api、ftp
+        public string Url { get; set; } //请求地址
+        public string ReqParam { get; set; } //请求参数
+
+        public string FtpUserName { get; set; } //ftp账号
+        public string FtpPassword { get; set; } //ftp密码
+        public string CheckKey { get; set; } //要匹配的字段
+        public bool IsCheck { get; set; } //是否验证
+    }
+
+
+    public class FieldRelationTable
+    { 
+        public string SourceFieldName { get; set; } //来源字段名(第三方字段)
+        public string TargetFieldName { get; set; } //目标字段名
+        public string TargetFieldType { get; set; } //目标字段类型
+    }
+}

+ 41 - 0
AppStart/Tables/DbScheme.cs

@@ -0,0 +1,41 @@
+using System;
+using System.Collections.Generic;
+namespace MySystem
+{
+    public class DbScheme
+    {
+        public int TableId { get; set; }
+        public string TableEnName { get; set; }
+        public string TableName { get; set; }
+        public ulong IsTask { get; set; }
+        public List<DbColumn> Columns { get; set; }
+    }
+
+    public class DbColumn
+    {
+        public int Id { get; set; }
+        public int DatabaseId { get; set; }
+        public int TableId { get; set; }
+        public string ColumnName { get; set; }
+        public string ColumnEnName { get; set; }
+        public string ColumnType { get; set; }
+        public string ColumnLength { get; set; }
+        public string Control { get; set; }
+        public string Col { get; set; }
+        public string ColList { get; set; }
+        public ulong ShowTitle { get; set; }
+        public ulong ShowQuery { get; set; }
+        public ulong ShowEdit { get; set; }
+        public string DataRule { get; set; }
+        public string TabName { get; set; }
+        public string PicRuleNote { get; set; }
+        public ulong IsPrimaryKey { get; set; }
+        public ulong IsExcel { get; set; }
+        public ulong CheckRepeat { get; set; }
+        public string RelationData { get; set; }
+        public int Status { get; set; }
+        public int LinkTableId { get; set; }
+        public int LinkColumnId { get; set; }
+        public ulong IsTask { get; set; }
+    }
+}

+ 18 - 0
AppStart/Tables/JobMqMsg.cs

@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+namespace MySystem
+{
+    public class JobMqMsg
+    {
+        public int Id { get; set; }  //任务ID
+        public int Status { get; set; }  //任务状态,0:待执行,1:核对完成,2:核对未完成,3:暂无数据核对
+        public string Msg { get; set; }  //任务响应消息
+        public string Note { get; set; }  //任务说明
+        public string OrderString { get; set; }  //消息指令
+        public Brand BrandInfo { get; set; }  //品牌数据
+        public int StartId { get; set; } //开始ID
+        public int EndId { get; set; } //结束ID
+        public int FinishId { get; set; } //执行完毕的ID
+        public int TableType { get; set; } //目标表类型 激活=1,交易=2,流量卡分佣交易=3,绑定=4,首刷=5,免押=6,返押=7,商户注册=8,商户在网达标=9
+    }
+}

+ 11 - 0
AppStart/Tables/SetDepositList.cs

@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+namespace MySystem
+{
+    public class SetDepositList
+    {
+        public string productSubType { get; set; }
+        public decimal updateValue { get; set; }
+        public int updateType { get; set; }
+    }
+}

+ 251 - 0
AppStart/VerifyCodeHelper.cs

@@ -0,0 +1,251 @@
+using System;
+using System.DrawingCore;
+using System.DrawingCore.Drawing2D;
+using System.DrawingCore.Imaging;
+using System.IO;
+namespace MySystem
+{
+    public class VerifyCodeHelper
+    {
+        #region 单例模式
+        //创建私有化静态obj锁  
+        private static readonly object _ObjLock = new object();
+        //创建私有静态字段,接收类的实例化对象  
+        private static VerifyCodeHelper _VerifyCodeHelper = null;
+        //构造函数私有化  
+        private VerifyCodeHelper() { }
+        //创建单利对象资源并返回  
+        public static VerifyCodeHelper GetSingleObj()
+        {
+            if (_VerifyCodeHelper == null)
+            {
+                lock (_ObjLock)
+                {
+                    if (_VerifyCodeHelper == null)
+                        _VerifyCodeHelper = new VerifyCodeHelper();
+                }
+            }
+            return _VerifyCodeHelper;
+        }
+        #endregion
+
+        #region 生产验证码
+        public enum VerifyCodeType { NumberVerifyCode, AbcVerifyCode, MixVerifyCode };
+
+        /// <summary>
+        /// 1.数字验证码
+        /// </summary>
+        /// <param name="length"></param>
+        /// <returns></returns>
+        private string CreateNumberVerifyCode(int length)
+        {
+            int[] randMembers = new int[length];
+            int[] validateNums = new int[length];
+            string validateNumberStr = "";
+            //生成起始序列值  
+            int seekSeek = unchecked((int)DateTime.Now.Ticks);
+            Random seekRand = new Random(seekSeek);
+            int beginSeek = seekRand.Next(0, Int32.MaxValue - length * 10000);
+            int[] seeks = new int[length];
+            for (int i = 0; i < length; i++)
+            {
+                beginSeek += 10000;
+                seeks[i] = beginSeek;
+            }
+            //生成随机数字  
+            for (int i = 0; i < length; i++)
+            {
+                Random rand = new Random(seeks[i]);
+                int pownum = 1 * (int)Math.Pow(10, length);
+                randMembers[i] = rand.Next(pownum, Int32.MaxValue);
+            }
+            //抽取随机数字  
+            for (int i = 0; i < length; i++)
+            {
+                string numStr = randMembers[i].ToString();
+                int numLength = numStr.Length;
+                Random rand = new Random();
+                int numPosition = rand.Next(0, numLength - 1);
+                validateNums[i] = Int32.Parse(numStr.Substring(numPosition, 1));
+            }
+            //生成验证码  
+            for (int i = 0; i < length; i++)
+            {
+                validateNumberStr += validateNums[i].ToString();
+            }
+            return validateNumberStr;
+        }
+
+        /// <summary>
+        /// 2.字母验证码
+        /// </summary>
+        /// <param name="length">字符长度</param>
+        /// <returns>验证码字符</returns>
+        private string CreateAbcVerifyCode(int length)
+        {
+            char[] verification = new char[length];
+            char[] dictionary = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
+                'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
+            };
+            Random random = new Random();
+            for (int i = 0; i < length; i++)
+            {
+                verification[i] = dictionary[random.Next(dictionary.Length - 1)];
+            }
+            return new string(verification);
+        }
+
+        /// <summary>
+        /// 3.混合验证码
+        /// </summary>
+        /// <param name="length">字符长度</param>
+        /// <returns>验证码字符</returns>
+        private string CreateMixVerifyCode(int length)
+        {
+            char[] verification = new char[length];
+            char[] dictionary = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
+                '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+                'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
+            };
+            Random random = new Random();
+            for (int i = 0; i < length; i++)
+            {
+                verification[i] = dictionary[random.Next(dictionary.Length - 1)];
+            }
+            return new string(verification);
+        }
+
+        /// <summary>
+        /// 产生验证码(随机产生4-6位)
+        /// </summary>
+        /// <param name="type">验证码类型:数字,字符,符合</param>
+        /// <returns></returns>
+        public string CreateVerifyCode(VerifyCodeType type)
+        {
+            string verifyCode = string.Empty;
+            Random random = new Random();
+            int length = random.Next(4, 6);
+            switch (type)
+            {
+                case VerifyCodeType.NumberVerifyCode:
+                    verifyCode = GetSingleObj().CreateNumberVerifyCode(length);
+                    break;
+                case VerifyCodeType.AbcVerifyCode:
+                    verifyCode = GetSingleObj().CreateAbcVerifyCode(length);
+                    break;
+                case VerifyCodeType.MixVerifyCode:
+                    verifyCode = GetSingleObj().CreateMixVerifyCode(length);
+                    break;
+            }
+            return verifyCode;
+        }
+        #endregion
+
+        #region 验证码图片
+        /// <summary>
+        /// 验证码图片 => Bitmap
+        /// </summary>
+        /// <param name="verifyCode">验证码</param>
+        /// <param name="width">宽</param>
+        /// <param name="height">高</param>
+        /// <returns>Bitmap</returns>
+        public Bitmap CreateBitmapByImgVerifyCode(string verifyCode, int width, int height)
+        {
+            Font font = new Font("Arial", 18, (FontStyle.Bold | FontStyle.Italic));
+            Brush brush;
+            Bitmap bitmap = new Bitmap(width, height);
+            Graphics g = Graphics.FromImage(bitmap);
+            SizeF totalSizeF = g.MeasureString(verifyCode, font);
+            SizeF curCharSizeF;
+            PointF startPointF = new PointF(0, (height - totalSizeF.Height) / 2);
+            Random random = new Random(); //随机数产生器
+            g.Clear(Color.White); //清空图片背景色  
+            for (int i = 0; i < verifyCode.Length; i++)
+            {
+                brush = new LinearGradientBrush(new Point(0, 0), new Point(1, 1), Color.FromArgb(random.Next(255), random.Next(255), random.Next(255)), Color.FromArgb(random.Next(255), random.Next(255), random.Next(255)));
+                g.DrawString(verifyCode[i].ToString(), font, brush, startPointF);
+                curCharSizeF = g.MeasureString(verifyCode[i].ToString(), font);
+                startPointF.X += curCharSizeF.Width*1.5f;
+            }
+
+            //画图片的干扰线  
+            for (int i = 0; i < 10; i++)
+            {
+                int x1 = random.Next(bitmap.Width);
+                int x2 = random.Next(bitmap.Width);
+                int y1 = random.Next(bitmap.Height);
+                int y2 = random.Next(bitmap.Height);
+                g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
+            }
+
+            //画图片的前景干扰点  
+            for (int i = 0; i < 100; i++)
+            {
+                int x = random.Next(bitmap.Width);
+                int y = random.Next(bitmap.Height);
+                bitmap.SetPixel(x, y, Color.FromArgb(random.Next()));
+            }
+
+            g.DrawRectangle(new Pen(Color.Silver), 0, 0, bitmap.Width - 1, bitmap.Height - 1); //画图片的边框线  
+            g.Dispose();
+            return bitmap;
+        }
+
+        /// <summary>
+        /// 验证码图片 => byte[]
+        /// </summary>
+        /// <param name="verifyCode">验证码</param>
+        /// <param name="width">宽</param>
+        /// <param name="height">高</param>
+        /// <returns>byte[]</returns>
+        public byte[] CreateByteByImgVerifyCode(string verifyCode, int width, int height)
+        {
+            Font font = new Font("Arial", 14, (FontStyle.Bold | FontStyle.Italic));
+            Brush brush;
+            Bitmap bitmap = new Bitmap(width, height);
+            Graphics g = Graphics.FromImage(bitmap);
+            SizeF totalSizeF = g.MeasureString(verifyCode, font);
+            SizeF curCharSizeF;
+            PointF startPointF = new PointF(0, (height - totalSizeF.Height) / 2);
+            Random random = new Random(); //随机数产生器
+            g.Clear(Color.White); //清空图片背景色  
+            for (int i = 0; i < verifyCode.Length; i++)
+            {
+                brush = new LinearGradientBrush(new Point(0, 0), new Point(1, 1), Color.FromArgb(random.Next(255), random.Next(255), random.Next(255)), Color.FromArgb(random.Next(255), random.Next(255), random.Next(255)));
+                g.DrawString(verifyCode[i].ToString(), font, brush, startPointF);
+                curCharSizeF = g.MeasureString(verifyCode[i].ToString(), font);
+                startPointF.X += curCharSizeF.Width;
+            }
+
+            //画图片的干扰线  
+            for (int i = 0; i < 10; i++)
+            {
+                int x1 = random.Next(bitmap.Width);
+                int x2 = random.Next(bitmap.Width);
+                int y1 = random.Next(bitmap.Height);
+                int y2 = random.Next(bitmap.Height);
+                g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
+            }
+
+            //画图片的前景干扰点  
+            for (int i = 0; i < 100; i++)
+            {
+                int x = random.Next(bitmap.Width);
+                int y = random.Next(bitmap.Height);
+                bitmap.SetPixel(x, y, Color.FromArgb(random.Next()));
+            }
+
+            g.DrawRectangle(new Pen(Color.Silver), 0, 0, bitmap.Width - 1, bitmap.Height - 1); //画图片的边框线  
+            g.Dispose();
+
+            //保存图片数据  
+            MemoryStream stream = new MemoryStream();
+            bitmap.Save(stream, ImageFormat.Jpeg);
+            //输出图片流  
+            return stream.ToArray();
+
+        }
+        #endregion
+
+    }
+}

二進制
Areas/.DS_Store


二進制
Areas/Admin/.DS_Store


二進制
Areas/Admin/Controllers/.DS_Store


+ 58 - 0
Areas/Admin/Controllers/BaseController.cs

@@ -0,0 +1,58 @@
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Linq;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Web;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
+using MySystem.Models;
+using Library;
+
+namespace MySystem.Areas.Admin.Controllers
+{
+    public class BaseController : Controller
+    {
+        public WebCMSEntities db = new WebCMSEntities();
+        public string Host = Library.ConfigurationManager.AppSettings["Host"].ToString();
+
+        public BaseController(IHttpContextAccessor accessor, ILogger<BaseController> logger, IOptions<Setting> setting)
+        {
+        }
+
+        #region 两点距离
+
+        public double GetDistanceNumber(string start, string end)
+        {
+            if (!string.IsNullOrEmpty(start) && !string.IsNullOrEmpty(end))
+            {
+                string[] startpos = start.Split(',');
+                string[] endpos = end.Split(',');
+                double lng1 = double.Parse(startpos[0]);
+                double lat1 = double.Parse(startpos[1]);
+                double lng2 = double.Parse(endpos[0]);
+                double lat2 = double.Parse(endpos[1]);
+                double radLat1 = rad(lat1);
+                double radLat2 = rad(lat2);
+                double a = radLat1 - radLat2;
+                double b = rad(lng1) - rad(lng2);
+                double s = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a / 2), 2) + Math.Cos(radLat1) * Math.Cos(radLat2) * Math.Pow(Math.Sin(b / 2), 2)));
+                s = s * EARTH_RADIUS;
+                s = Math.Round(s * 10000) / 10000;
+                return s;
+            }
+            return 10000000;
+        }
+        private double rad(double d)
+        {
+            return d * Math.PI / 180.0;
+        }
+        private double EARTH_RADIUS = 6378.137;
+
+        #endregion
+        
+    }
+}

二進制
Areas/Admin/Views/.DS_Store


+ 0 - 0
Areas/Admin/Views/Home/Index.cshtml


二進制
Areas/Api/.DS_Store


二進制
Areas/Api/Controllers/.DS_Store


+ 100 - 0
Areas/Api/Controllers/v1/HaoDaController.cs

@@ -0,0 +1,100 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Http;
+using System.IO;
+using Library;
+using LitJson;
+
+namespace MySystem.Areas.Api.Controllers
+{
+    public class HaoDaController : Admin.Controllers.BaseController
+    {
+        public HaoDaController(IHttpContextAccessor accessor, ILogger<Admin.Controllers.BaseController> logger, IOptions<Setting> setting) : base(accessor, logger, setting)
+        {
+        }
+
+
+
+        #region 接收好哒订单通知
+        [Route("/hd/notice/order")]
+        public Dictionary<string, object> order()
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return new Dictionary<string, object>();
+            }
+            LogHelper.Instance.WriteLog(DateTime.Now.ToString() + "\n" + Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes, "接收好哒好哒订单通知");
+            RedisDbconn.Instance.AddList("cache:hd:notice:order", Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes);
+            Dictionary<string, object> obj = new Dictionary<string, object>();
+            JsonData jsonObj = JsonMapper.ToObject(requestMes);
+            obj.Add("recvOrdId", "RECV_ORD_ID_" + jsonObj["ordId"].ToString());
+            obj.Add("resultCode", "0");
+            return obj;
+        }
+        #endregion
+
+        #region 接收好哒终端绑定商户通知
+        [Route("/hd/notice/bind")]
+        public Dictionary<string, object> bind()
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return new Dictionary<string, object>();
+            }
+            LogHelper.Instance.WriteLog(DateTime.Now.ToString() + "\n" + Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes, "接收好哒终端绑定商户通知");
+            RedisDbconn.Instance.AddList("cache:hd:notice:bind", Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes);
+            Dictionary<string, object> obj = new Dictionary<string, object>();
+            // JsonData jsonObj = JsonMapper.ToObject(requestMes);
+            obj.Add("resultCode", "0");
+            return obj;
+        }
+        #endregion
+
+        #region 接收好哒解绑终端通知
+        [Route("/hd/notice/unbind")]
+        public Dictionary<string, object> unbind()
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return new Dictionary<string, object>();
+            }
+            LogHelper.Instance.WriteLog(DateTime.Now.ToString() + "\n" + Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes, "接收好哒解绑终端通知");
+            RedisDbconn.Instance.AddList("cache:hd:notice:unbind", Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes);
+            Dictionary<string, object> obj = new Dictionary<string, object>();
+            // JsonData jsonObj = JsonMapper.ToObject(requestMes);
+            obj.Add("resultCode", "0");
+            return obj;
+        }
+        #endregion
+
+        #region 接收好哒替换终端通知接口
+        [Route("/hd/notice/change")]
+        public Dictionary<string, object> change()
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return new Dictionary<string, object>();
+            }
+            LogHelper.Instance.WriteLog(DateTime.Now.ToString() + "\n" + Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes, "接收好哒替换终端通知接口");
+            RedisDbconn.Instance.AddList("cache:hd:notice:change", Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes);
+            Dictionary<string, object> obj = new Dictionary<string, object>();
+            // JsonData jsonObj = JsonMapper.ToObject(requestMes);
+            obj.Add("resultCode", "0");
+            return obj;
+        }
+        #endregion
+    }
+}

+ 463 - 0
Areas/Api/Controllers/v1/Kq2Controller.cs

@@ -0,0 +1,463 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Http;
+using System.IO;
+using Library;
+using LitJson;
+using System.Threading.Tasks;
+
+namespace MySystem.Areas.Api.Controllers
+{
+    [Area("Api")]
+    [Route("Api/v1/[controller]/[action]")]
+    public class Kq2Controller : Admin.Controllers.BaseController
+    {
+        public Kq2Controller(IHttpContextAccessor accessor, ILogger<Admin.Controllers.BaseController> logger, IOptions<Setting> setting) : base(accessor, logger, setting)
+        {
+        }
+
+
+        #region 接收绑定记录
+        [HttpPost]
+        [Route("/kxs2/bind/{BrandId:int}")]
+        public string Bind(int BrandId = 1)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return "fail";
+            }
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+            SaveLog(BrandId, "绑定", content);
+            string fileName = function.MD5_16(Guid.NewGuid().ToString());
+            RedisDbconn.Instance.AddList("kxs_bind_list_" + BrandId, content + "#cut#" + fileName);
+            // function.WritePage("/redis/kxs_bind_list_" + BrandId + "/", fileName + ".txt", content);
+            return BackInfo(BrandId);
+        }
+        #endregion
+
+
+
+        #region 接收激活记录
+        [HttpPost]
+        [Route("/kxs2/active/{BrandId:int}")]
+        public string Active(int BrandId = 1)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return "fail";
+            }
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+            SaveLog(BrandId, "激活", content);
+            string fileName = function.MD5_16(Guid.NewGuid().ToString());
+            RedisDbconn.Instance.AddList("kxs_active_list_" + BrandId, content + "#cut#" + fileName);
+            // function.WritePage("/redis/kxs_active_list_" + BrandId + "/", fileName + ".txt", content);
+            return BackInfo(BrandId);
+        }
+        #endregion
+
+
+
+        #region 接收商户记录
+        [HttpPost]
+        [Route("/kxs2/merchant/{BrandId:int}")]
+        public string Merchant(int BrandId = 1)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return "fail";
+            }
+            RedisDbconn.Instance.AddList("kxs_merchant_list_" + BrandId, requestMes);
+            return BackInfo(BrandId);
+        }
+        #endregion
+
+
+
+        #region 接收交易记录
+        [HttpPost]
+        [Route("/kxs2/trade/{BrandId:int}")]
+        public string Trade(int BrandId = 1)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return "fail";
+            }
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+            SaveLog(BrandId, "交易", content);
+            string fileName = function.MD5_16(Guid.NewGuid().ToString());
+            RedisDbconn.Instance.AddList("kxs_trade_list_" + BrandId, content + "#cut#" + fileName);
+            // function.WritePage("/redis/kxs_trade_list_" + BrandId + "/", fileName + ".txt", content);
+            Dictionary<string, object> obj = new Dictionary<string, object>();
+            return BackInfo(BrandId);
+        }
+        #endregion
+
+
+
+        #region 接收分润记录
+        [HttpPost]
+        [Route("/kxs2/profit/{BrandId:int}")]
+        public string Profit(int BrandId = 1)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return "fail";
+            }
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+            SaveLog(BrandId, "分润", content);
+            RedisDbconn.Instance.AddList("kxs_profit_list_" + BrandId, requestMes);
+            return BackInfo(BrandId);
+        }
+        #endregion
+
+
+
+        #region 接收流量卡分佣交易记录
+        [HttpPost]
+        [Route("/kxs2/flux/{BrandId:int}")]
+        public string Flux(int BrandId = 1)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return "fail";
+            }
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+            SaveLog(BrandId, "流量卡交易", content);
+            string fileName = function.MD5_16(Guid.NewGuid().ToString());
+            RedisDbconn.Instance.AddList("kxs_flux_list_" + BrandId, content + "#cut#" + fileName);
+            // function.WritePage("/redis/kxs_flux_list_" + BrandId + "/", fileName + ".txt", content);
+            return BackInfo(BrandId);
+        }
+        #endregion
+
+
+
+        #region 接收商终关系变更通知
+        [HttpPost]
+        [Route("/kxs2/changebind/{BrandId:int}")]
+        public string ChangeBind(int BrandId = 1)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return "fail";
+            }
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+            SaveLog(BrandId, "商终关系变更", content);
+            string fileName = function.MD5_16(Guid.NewGuid().ToString());
+            RedisDbconn.Instance.AddList("kxs_changebind_list_" + BrandId, content + "#cut#" + fileName);
+            // function.WritePage("/redis/kxs_changebind_list_" + BrandId + "/", fileName + ".txt", content);
+            return BackInfo(BrandId);
+        }
+        #endregion
+
+
+
+        #region 终端费率模板变更记录
+        [HttpPost]
+        [Route("/kxs2/tempchange/{BrandId:int}")]
+        public string TempChange(int BrandId = 1)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return "fail";
+            }
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+            SaveLog(BrandId, "终端费率模板变更", content);
+            string fileName = function.MD5_16(Guid.NewGuid().ToString());
+            RedisDbconn.Instance.AddList("kxs_tempchange_list_" + BrandId, content + "#cut#" + fileName);
+            // function.WritePage("/redis/kxs_tempchange_list_" + BrandId + "/", fileName + ".txt", content);
+            return BackInfo(BrandId);
+        }
+        #endregion
+
+
+
+        #region 首刷达标数据
+        [HttpPost]
+        [Route("/kxs2/first/{BrandId:int}")]
+        public string First(int BrandId = 1)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return "fail";
+            }
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+            SaveLog(BrandId, "首刷达标", content);
+            string fileName = function.MD5_16(Guid.NewGuid().ToString());
+            RedisDbconn.Instance.AddList("kxs_first_list_" + BrandId, content + "#cut#" + fileName);
+            // function.WritePage("/redis/kxs_first_list_" + BrandId + "/", fileName + ".txt", content);
+            return BackInfo(BrandId);
+        }
+        #endregion
+
+
+
+        #region 换绑数据
+        [HttpPost]
+        [Route("/kxs2/changebinddata/{BrandId:int}")]
+        public string ChangeBindData(int BrandId = 1)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return "fail";
+            }
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+            SaveLog(BrandId, "换绑", content);
+            string fileName = function.MD5_16(Guid.NewGuid().ToString());
+            RedisDbconn.Instance.AddList("kxs_changebinddata_list_" + BrandId, content + "#cut#" + fileName);
+            // function.WritePage("/redis/kxs_changebinddata_list_" + BrandId + "/", fileName + ".txt", content);
+            return BackInfo(BrandId);
+        }
+        #endregion
+
+
+
+        #region 商户SVIP会员开通和续费数据
+        [HttpPost]
+        [Route("/kxs2/svip/{BrandId:int}")]
+        public string SVip(int BrandId = 1)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return "fail";
+            }
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+            SaveLog(BrandId, "商户SVIP会员开通和续费", content);
+            string fileName = function.MD5_16(Guid.NewGuid().ToString());
+            RedisDbconn.Instance.AddList("kxs_svip_list_" + BrandId, content + "#cut#" + fileName);
+            // function.WritePage("/redis/kxs_svip_list_" + BrandId + "/", fileName + ".txt", content);
+            return BackInfo(BrandId);
+        }
+        #endregion
+
+
+
+        #region 解绑数据
+        [HttpPost]
+        [Route("/kxs2/unbind/{BrandId:int}")]
+        public string UnBind(int BrandId = 1)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return "fail";
+            }
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+            SaveLog(BrandId, "解绑", content);
+            string fileName = function.MD5_16(Guid.NewGuid().ToString());
+            RedisDbconn.Instance.AddList("kxs_unbind_list_" + BrandId, content + "#cut#" + fileName);
+            // function.WritePage("/redis/kxs_unbind_list_" + BrandId + "/", fileName + ".txt", content);
+            return BackInfo(BrandId);
+        }
+        #endregion
+
+
+
+        #region 修改结算卡数据
+        [HttpPost]
+        [Route("/kxs2/modifybankcard/{BrandId:int}")]
+        public string ModifyBankCard(int BrandId = 1)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return "fail";
+            }
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+            SaveLog(BrandId, "修改结算卡", content);
+            string fileName = function.MD5_16(Guid.NewGuid().ToString());
+            RedisDbconn.Instance.AddList("kxs_modifybankcard_list_" + BrandId, content + "#cut#" + fileName);
+            // function.WritePage("/redis/kxs_modifybankcard_list_" + BrandId + "/", fileName + ".txt", content);
+            return BackInfo(BrandId);
+        }
+        #endregion
+
+
+
+        #region 提现通知
+        [HttpPost]
+        [Route("/kxs2/cash/{BrandId:int}")]
+        public string Cash(int BrandId = 1)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return "fail";
+            }
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+            SaveLog(BrandId, "提现", content);
+            string fileName = function.MD5_16(Guid.NewGuid().ToString());
+            RedisDbconn.Instance.AddList("kxs_cash_list_" + BrandId, content + "#cut#" + fileName);
+            // function.WritePage("/redis/kxs_cash_list_" + BrandId + "/", fileName + ".txt", content);
+            return BackInfo(BrandId);
+        }
+        #endregion
+
+
+
+        #region 结算通知业务
+        [HttpPost]
+        [Route("/kxs2/settle/{BrandId:int}")]
+        public string Settle(int BrandId = 1)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return "fail";
+            }
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+            SaveLog(BrandId, "结算业务", content);
+            string fileName = function.MD5_16(Guid.NewGuid().ToString());
+            RedisDbconn.Instance.AddList("kxs_settle_list_" + BrandId, content + "#cut#" + fileName);
+            // function.WritePage("/redis/kxs_settle_list_" + BrandId + "/", fileName + ".txt", content);
+            return BackInfo(BrandId);
+        }
+        #endregion
+
+
+
+        #region 手续费和秒到费
+        [HttpPost]
+        [Route("/kxs2/rate/{BrandId:int}")]
+        public string Rate(int BrandId = 1)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return "fail";
+            }
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+            SaveLog(BrandId, "手续费和秒到费", content);
+            string fileName = function.MD5_16(Guid.NewGuid().ToString());
+            RedisDbconn.Instance.AddList("kxs_rate_list_" + BrandId, content + "#cut#" + fileName);
+            // function.WritePage("/redis/kxs_rate_list_" + BrandId + "/", fileName+".txt", content);
+            return BackInfo(BrandId);
+        }
+        #endregion
+
+
+
+
+
+
+
+
+
+        #region 接收参数日志
+        private void SaveLog(int BrandId, string KindName, string content)
+        {
+            if (BrandId == 2)
+            {
+                LogHelper.Instance.WriteLog(DateTime.Now.ToString() + content, "开店宝" + KindName + "推送消息");
+            }
+            else if (BrandId == 4)
+            {
+                LogHelper.Instance.WriteLog(DateTime.Now.ToString() + content, "乐刷" + KindName + "推送消息");
+            }
+            else if (BrandId == 6)
+            {
+                LogHelper.Instance.WriteLog(DateTime.Now.ToString() + content, "立刷" + KindName + "推送消息");
+            }
+            else if (BrandId == 22)
+            {
+                LogHelper.Instance.WriteLog(DateTime.Now.ToString() + content, "立刷微电签" + KindName + "推送消息");
+            }
+            else if (BrandId == 7)
+            {
+                LogHelper.Instance.WriteLog(DateTime.Now.ToString() + content, "盛付通" + KindName + "推送消息");
+            }
+            else if (BrandId == 8)
+            {
+                LogHelper.Instance.WriteLog(DateTime.Now.ToString() + content, "海科电签" + KindName + "推送消息");
+            }
+            else if (BrandId == 9)
+            {
+                LogHelper.Instance.WriteLog(DateTime.Now.ToString() + content, "海科大POS" + KindName + "推送消息");
+            }
+            else if (BrandId == 10 || BrandId == 11)
+            {
+                LogHelper.Instance.WriteLog(DateTime.Now.ToString() + content, "联动" + KindName + "推送消息");
+            }
+            else if (BrandId == 12)
+            {
+                LogHelper.Instance.WriteLog(DateTime.Now.ToString() + content, "盒易付电签" + KindName + "推送消息");
+            }
+            else if (BrandId == 15)
+            {
+                LogHelper.Instance.WriteLog(DateTime.Now.ToString() + content, "联客宝" + KindName + "推送消息");
+            }
+            else if (BrandId == 23)
+            {
+                LogHelper.Instance.WriteLog(DateTime.Now.ToString() + content, "WIFI" + KindName + "推送消息");
+            }
+            else if (BrandId == 34)
+            {
+                LogHelper.Instance.WriteLog(DateTime.Now.ToString() + content, "联动掌中宝" + KindName + "推送消息");
+            }
+            else
+            {
+                LogHelper.Instance.WriteLog(DateTime.Now.ToString() + content, "金控" + KindName + "推送消息");
+            }
+        }
+        #endregion
+
+        #region 返回报文
+        private string BackInfo(int BrandId)
+        {
+            if(BrandId == 34)
+            {
+                return "OK";
+            }
+            return "SUCCESS";
+        }
+        #endregion
+
+        #region 解析get请求键值对
+        private Dictionary<string, string> GetParams(string data)
+        {
+            Dictionary<string, string> result = new Dictionary<string, string>();
+            string[] datalist = data.Split('&');
+            foreach (string sub in datalist)
+            {
+                string[] subdatalist = sub.Split('=');
+                result.Add(subdatalist[0], subdatalist[1]);
+            }
+            return result;
+        }
+        #endregion
+
+
+    }
+}

+ 142 - 0
Areas/Api/Controllers/v1/Kq3Controller.cs

@@ -0,0 +1,142 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Http;
+using System.IO;
+using Library;
+using LitJson;
+using System.Threading.Tasks;
+using System.Reflection.Metadata.Ecma335;
+
+namespace MySystem.Areas.Api.Controllers
+{
+    [Area("Api")]
+    [Route("Api/v1/[controller]/[action]")]
+    public class Kq3Controller : Admin.Controllers.BaseController
+    {
+        public Kq3Controller(IHttpContextAccessor accessor, ILogger<Admin.Controllers.BaseController> logger, IOptions<Setting> setting) : base(accessor, logger, setting)
+        {
+        }
+
+
+        #region 接收统一地址通知
+        [HttpPost]
+        [Route("/kxs3/notice/{BrandId:int}")]
+        public string Notice(IFormCollection form, int BrandId = 1)
+        {
+            string requestMes = "{";
+            LogHelper.Instance.WriteLog(DateTime.Now.ToString(), "接收统一地址通知");
+            foreach (string key in form.Keys)
+            {
+                LogHelper.Instance.WriteLog(key + ":" + form[key].ToString(), "接收统一地址通知");
+                if (key == "dataJson" || key == "extData")
+                {
+                    requestMes += "\"" + key + "\":" + form[key].ToString() + ",";
+                }
+                else
+                {
+                    requestMes += "\"" + key + "\":\"" + form[key].ToString() + "\",";
+                }
+            }
+            requestMes = requestMes.TrimEnd(',');
+            LogHelper.Instance.WriteLog("\n\n", "接收统一地址通知");
+            requestMes += "}";
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes + "#cut#" + BrandId;
+            RedisDbconn.Instance.AddList("SpSingleNotice", content);
+            return "SUCCESS";
+        }
+        #endregion
+
+        #region 接收统一地址通知
+        [HttpPost]
+        [Route("/kxs/lkb/{Path}")]
+        public Dictionary<string, object> publicnotice(string Path)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return new Dictionary<string, object>();
+            }
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+            LogHelper.Instance.WriteLog(content, "接收来客吧L版-" + Path + "通知");
+            string fileName = function.MD5_16(Guid.NewGuid().ToString());
+            if(Path == "terminal-bind")
+            {
+                RedisDbconn.Instance.AddList("kxs_bind_list_27", content + "#cut#" + fileName);
+                // function.WritePage("/redis/kxs_bind_list_27/", fileName + ".txt", content);
+            }
+            else if(Path == "trade")
+            {
+                RedisDbconn.Instance.AddList("kxs_trade_list_27", content + "#cut#" + fileName);
+                // function.WritePage("/redis/kxs_trade_list_27/", fileName + ".txt", content);
+            }
+            else if(Path == "rebate")
+            {
+                RedisDbconn.Instance.AddList("kxs_rebate_list_27", content + "#cut#" + fileName);
+                // function.WritePage("/redis/kxs_rebate_list_27/", fileName + ".txt", content);
+            }
+            string sign = "";
+            Dictionary<string, object> back = PublicImportDataService.Instance.LkbCallBack(out sign);
+            Response.Headers.Add("Content-Type", "application/json");
+            Response.Headers.Add("X-Sign", sign);
+            return back;
+        }
+        #endregion
+
+        #region 接收统一地址通知
+        [HttpPost]
+        [Route("/wifi/{Path}")]
+        public Dictionary<string, object> wifinotice(string Path)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return new Dictionary<string, object>();
+            }
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+            // LogHelper.Instance.WriteLog(content, "接收WIFI数据-" + Path + "通知");
+            function.WriteLog(content, "接收WIFI数据-" + Path + "通知");
+            RedisDbconn.Instance.AddList("wifi_data_list", Path + "#cut#" + requestMes);
+            Dictionary<string, object> dic = new Dictionary<string, object>();
+            dic.Add("code", 200);
+            dic.Add("msg", "ok");
+            return dic;
+        }
+        #endregion
+
+
+        #region 接收联动掌中宝推送数据
+        [HttpPost]
+        [Route("/kxs3/notice/ld")]
+        public string NoticeLd()
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return "FAIL";
+            }
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+            LogHelper.Instance.WriteLog(DateTime.Now.ToString() + content, "联动掌中宝推送数据", "34");
+            // function.WriteLog(DateTime.Now.ToString() + content, "联动掌中宝推送数据");
+            JsonData jsonObj = JsonMapper.ToObject(requestMes);
+            string serviceType = jsonObj["serviceType"].ToString();
+            if(serviceType == "MATERIAL_BIND_STATUS_NOTIFY") RedisDbconn.Instance.AddList("kxs_bind_list_34", content);
+            else if(serviceType == "PAY_ORDER_NOTIFY") RedisDbconn.Instance.AddList("kxs_trade_list_34", content);
+            else if(serviceType == "CUSTOMER_INFO_REGISTER_NOTIFY") RedisDbconn.Instance.AddList("kxs_merchant_list_34", content);
+            else if(serviceType == "MATERIALS_ACTIVATION_NOTIFY") RedisDbconn.Instance.AddList("kxs_active_list_34", content);
+            else if(serviceType == "CUSTOMER_LAST_RATE_NOTIFY") RedisDbconn.Instance.AddList("kxs_rate_list_34", content);
+            else RedisDbconn.Instance.AddList("kxs_ld_zzb_list", content);
+            return "OK";
+        }
+
+        #endregion
+
+    }
+}

+ 550 - 0
Areas/Api/Controllers/v1/KqController.cs

@@ -0,0 +1,550 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Http;
+using System.IO;
+using Library;
+using LitJson;
+using System.Threading.Tasks;
+
+namespace MySystem.Areas.Api.Controllers
+{
+    [Area("Api")]
+    [Route("Api/v1/[controller]/[action]")]
+    public class KqController : Admin.Controllers.BaseController
+    {
+        public KqController(IHttpContextAccessor accessor, ILogger<Admin.Controllers.BaseController> logger, IOptions<Setting> setting) : base(accessor, logger, setting)
+        {
+        }
+
+
+        #region 接收绑定记录
+        [HttpPost]
+        [Route("/posNofity")]
+        [Route("/kxs/bind/{BrandId:int}")]
+        public Dictionary<string, object> Bind(int BrandId = 1)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return new Dictionary<string, object>();
+            }
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+            SaveLog(BrandId, "绑定", content);
+            string fileName = function.MD5_16(Guid.NewGuid().ToString());
+            RedisDbconn.Instance.AddList("kxs_bind_list_" + BrandId, content + "#cut#" + fileName);
+            // function.WritePage("/redis/kxs_bind_list_" + BrandId + "/", fileName+".txt", content);
+            return BackInfo(BrandId, requestMes);
+        }
+        #endregion
+
+
+
+        #region 接收激活记录
+        [HttpPost]
+        [Route("/rebateNofity")]
+        [Route("/kxs/active/{BrandId:int}")]
+        public Dictionary<string, object> Active(int BrandId = 1)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return new Dictionary<string, object>();
+            }
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+            SaveLog(BrandId, "激活", content);
+            string fileName = function.MD5_16(Guid.NewGuid().ToString());
+            RedisDbconn.Instance.AddList("kxs_active_list_" + BrandId, content + "#cut#" + fileName);
+            // function.WritePage("/redis/kxs_active_list_" + BrandId + "/", fileName+".txt", content);
+            return BackInfo(BrandId, requestMes);
+        }
+        #endregion
+
+
+
+        #region 接收商户记录
+        [HttpPost]
+        [Route("/kxs/merchant/{BrandId:int}")]
+        public Dictionary<string, object> Merchant(int BrandId = 1)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return new Dictionary<string, object>();
+            }
+            RedisDbconn.Instance.AddList("kxs_merchant_list_" + BrandId, requestMes);
+            return BackInfo(BrandId, requestMes);
+        }
+        #endregion
+
+
+
+        #region 接收交易记录
+        [HttpPost]
+        [Route("/transOrderNofity")]
+        [Route("/kxs/trade/{BrandId:int}")]
+        public Dictionary<string, object> Trade(int BrandId = 1)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return new Dictionary<string, object>();
+            }
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+            SaveLog(BrandId, "交易", content);
+            string fileName = function.MD5_16(Guid.NewGuid().ToString());
+            RedisDbconn.Instance.AddList("kxs_trade_list_" + BrandId, content + "#cut#" + fileName);
+            // function.WritePage("/redis/kxs_trade_list_" + BrandId + "/", fileName+".txt", content);
+            Dictionary<string, object> obj = new Dictionary<string, object>();
+            return BackInfo(BrandId, requestMes);
+        }
+        #endregion
+
+
+
+        #region 接收分润记录
+        [HttpPost]
+        [Route("/kxs/profit/{BrandId:int}")]
+        public Dictionary<string, object> Profit(int BrandId = 1)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return new Dictionary<string, object>();
+            }
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+            SaveLog(BrandId, "分润", content);
+            RedisDbconn.Instance.AddList("kxs_profit_list_" + BrandId, requestMes);
+            return BackInfo(BrandId, requestMes);
+        }
+        #endregion
+
+
+
+        #region 接收流量卡分佣交易记录
+        [HttpPost]
+        [Route("/kxs/flux/{BrandId:int}")]
+        public Dictionary<string, object> Flux(int BrandId = 1)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return new Dictionary<string, object>();
+            }
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+            SaveLog(BrandId, "流量卡交易", content);
+            string fileName = function.MD5_16(Guid.NewGuid().ToString());
+            RedisDbconn.Instance.AddList("kxs_flux_list_" + BrandId, content + "#cut#" + fileName);
+            // function.WritePage("/redis/kxs_flux_list_" + BrandId + "/", fileName+".txt", content);
+            return BackInfo(BrandId, requestMes);
+        }
+        #endregion
+
+
+
+        #region 接收商终关系变更通知
+        [HttpPost]
+        [Route("/kxs/changebind/{BrandId:int}")]
+        public Dictionary<string, object> ChangeBind(int BrandId = 1)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return new Dictionary<string, object>();
+            }
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+            SaveLog(BrandId, "商终关系变更", content);
+            string fileName = function.MD5_16(Guid.NewGuid().ToString());
+            RedisDbconn.Instance.AddList("kxs_changebind_list_" + BrandId, content + "#cut#" + fileName);
+            // function.WritePage("/redis/kxs_changebind_list_" + BrandId + "/", fileName+".txt", content);
+            return BackInfo(BrandId, requestMes);
+        }
+        #endregion
+
+
+
+        #region 接收商户信息通知
+        [HttpPost]
+        [Route("/kxs/merchantinfo/{BrandId:int}")]
+        public Dictionary<string, object> MerchantInfo(int BrandId = 1)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return new Dictionary<string, object>();
+            }
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+            SaveLog(BrandId, "商户信息通知", content);
+            string fileName = function.MD5_16(Guid.NewGuid().ToString());
+            RedisDbconn.Instance.AddList("kxs_merchantinfo_list_" + BrandId, content + "#cut#" + fileName);
+            // function.WritePage("/redis/kxs_merchantinfo_list_" + BrandId + "/", fileName+".txt", content);
+            return BackInfo(BrandId, requestMes);
+        }
+        #endregion
+
+
+
+        #region 终端费率模板变更记录
+        [HttpPost]
+        [Route("/kxs/tempchange/{BrandId:int}")]
+        public Dictionary<string, object> TempChange(int BrandId = 1)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return new Dictionary<string, object>();
+            }
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+            SaveLog(BrandId, "终端费率模板变更", content);
+            string fileName = function.MD5_16(Guid.NewGuid().ToString());
+            RedisDbconn.Instance.AddList("kxs_tempchange_list_" + BrandId, content + "#cut#" + fileName);
+            // function.WritePage("/redis/kxs_tempchange_list_" + BrandId + "/", fileName+".txt", content);
+            return BackInfo(BrandId, requestMes);
+        }
+        #endregion
+
+
+
+        #region 首刷达标数据
+        [HttpPost]
+        [Route("/kxs/first/{BrandId:int}")]
+        public Dictionary<string, object> First(int BrandId = 1)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return new Dictionary<string, object>();
+            }
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+            SaveLog(BrandId, "首刷达标", content);
+            string fileName = function.MD5_16(Guid.NewGuid().ToString());
+            RedisDbconn.Instance.AddList("kxs_first_list_" + BrandId, content + "#cut#" + fileName);
+            // function.WritePage("/redis/kxs_first_list_" + BrandId + "/", fileName+".txt", content);
+            return BackInfo(BrandId, requestMes);
+        }
+        #endregion
+
+
+
+        #region 换绑数据
+        [HttpPost]
+        [Route("/kxs/changebinddata/{BrandId:int}")]
+        public Dictionary<string, object> ChangeBindData(int BrandId = 1)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return new Dictionary<string, object>();
+            }
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+            SaveLog(BrandId, "换绑", content);
+            string fileName = function.MD5_16(Guid.NewGuid().ToString());
+            RedisDbconn.Instance.AddList("kxs_changebinddata_list_" + BrandId, content + "#cut#" + fileName);
+            // function.WritePage("/redis/kxs_changebinddata_list_" + BrandId + "/", fileName+".txt", content);
+            return BackInfo(BrandId, requestMes);
+        }
+        #endregion
+
+
+
+        #region 商户SVIP会员开通和续费数据
+        [HttpPost]
+        [Route("/kxs/svip/{BrandId:int}")]
+        public Dictionary<string, object> SVip(int BrandId = 1)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return new Dictionary<string, object>();
+            }
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+            SaveLog(BrandId, "商户SVIP会员开通和续费", content);
+            string fileName = function.MD5_16(Guid.NewGuid().ToString());
+            RedisDbconn.Instance.AddList("kxs_svip_list_" + BrandId, content + "#cut#" + fileName);
+            // function.WritePage("/redis/kxs_svip_list_" + BrandId + "/", fileName+".txt", content);
+            return BackInfo(BrandId, requestMes);
+        }
+        #endregion
+
+
+
+        #region 解绑数据
+        [HttpPost]
+        [Route("/kxs/unbind/{BrandId:int}")]
+        public Dictionary<string, object> UnBind(int BrandId = 1)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return new Dictionary<string, object>();
+            }
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+            SaveLog(BrandId, "解绑", content);
+            string fileName = function.MD5_16(Guid.NewGuid().ToString());
+            RedisDbconn.Instance.AddList("kxs_unbind_list_" + BrandId, content + "#cut#" + fileName);
+            // function.WritePage("/redis/kxs_unbind_list_" + BrandId + "/", fileName+".txt", content);
+            return BackInfo(BrandId, requestMes);
+        }
+        #endregion
+
+
+
+        #region 修改结算卡数据
+        [HttpPost]
+        [Route("/kxs/modifybankcard/{BrandId:int}")]
+        public Dictionary<string, object> ModifyBankCard(int BrandId = 1)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return new Dictionary<string, object>();
+            }
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+            SaveLog(BrandId, "修改结算卡", content);
+            string fileName = function.MD5_16(Guid.NewGuid().ToString());
+            RedisDbconn.Instance.AddList("kxs_modifybankcard_list_" + BrandId, content + "#cut#" + fileName);
+            // function.WritePage("/redis/kxs_modifybankcard_list_" + BrandId + "/", fileName+".txt", content);
+            return BackInfo(BrandId, requestMes);
+        }
+        #endregion
+
+
+
+        #region 提现通知
+        [HttpPost]
+        [Route("/kxs/cash/{BrandId:int}")]
+        public Dictionary<string, object> Cash(int BrandId = 1)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return new Dictionary<string, object>();
+            }
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+            SaveLog(BrandId, "提现", content);
+            string fileName = function.MD5_16(Guid.NewGuid().ToString());
+            RedisDbconn.Instance.AddList("kxs_cash_list_" + BrandId, content + "#cut#" + fileName);
+            // function.WritePage("/redis/kxs_cash_list_" + BrandId + "/", fileName+".txt", content);
+            return BackInfo(BrandId, requestMes);
+        }
+        #endregion
+
+
+
+        #region 结算通知业务
+        [HttpPost]
+        [Route("/kxs/settle/{BrandId:int}")]
+        public Dictionary<string, object> Settle(int BrandId = 1)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return new Dictionary<string, object>();
+            }
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+            SaveLog(BrandId, "结算业务", content);
+            string fileName = function.MD5_16(Guid.NewGuid().ToString());
+            RedisDbconn.Instance.AddList("kxs_settle_list_" + BrandId, content + "#cut#" + fileName);
+            // function.WritePage("/redis/kxs_settle_list_" + BrandId + "/", fileName+".txt", content);
+            return BackInfo(BrandId, requestMes);
+        }
+        #endregion
+
+
+
+        #region 手续费和秒到费
+        [HttpPost]
+        [Route("/kxs/rate/{BrandId:int}")]
+        public Dictionary<string, object> Rate(int BrandId = 1)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return new Dictionary<string, object>();
+            }
+            string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+            SaveLog(BrandId, "手续费和秒到费", content);
+            string fileName = function.MD5_16(Guid.NewGuid().ToString());
+            RedisDbconn.Instance.AddList("kxs_rate_list_" + BrandId, content + "#cut#" + fileName);
+            // function.WritePage("/redis/kxs_rate_list_" + BrandId + "/", fileName+".txt", content);
+            return BackInfo(BrandId, requestMes);
+        }
+        #endregion
+
+
+
+        // #region WIFI解绑
+        // [HttpPost]
+        // [Route("/kxs/unbind/wifi")]
+        // public Dictionary<string, object> UnBindWifi()
+        // {
+        //     StreamReader sr = new StreamReader(Request.Body);
+        //     string requestMes = sr.ReadToEnd();
+        //     if (string.IsNullOrEmpty(requestMes))
+        //     {
+        //         return new Dictionary<string, object>();
+        //     }
+        //     string content = Newtonsoft.Json.JsonConvert.SerializeObject(Request.Headers) + "#cut#" + requestMes;
+        //     SaveLog(23, "解绑", content);
+        //     string fileName = function.MD5_16(Guid.NewGuid().ToString());
+        //     RedisDbconn.Instance.AddList("kxs_unbindwifi_list", content + "#cut#" + fileName);
+        //     Dictionary<string, object> obj = new Dictionary<string, object>();
+        //     obj.Add("resCode", 200);
+        //     obj.Add("resMsg", "success");
+        //     return obj;
+        // }
+        // #endregion
+
+
+
+
+
+
+
+
+        #region 接收参数日志
+        private void SaveLog(int BrandId, string KindName, string content)
+        {
+            if (BrandId == 2)
+            {
+                LogHelper.Instance.WriteLog(DateTime.Now.ToString() + content, "开店宝" + KindName + "推送消息");
+            }
+            else if (BrandId == 4)
+            {
+                LogHelper.Instance.WriteLog(DateTime.Now.ToString() + content, "乐刷" + KindName + "推送消息");
+            }
+            else if (BrandId == 6)
+            {
+                LogHelper.Instance.WriteLog(DateTime.Now.ToString() + content, "立刷" + KindName + "推送消息");
+            }
+            else if (BrandId == 22)
+            {
+                LogHelper.Instance.WriteLog(DateTime.Now.ToString() + content, "立刷微电签" + KindName + "推送消息");
+            }
+            else if (BrandId == 7)
+            {
+                LogHelper.Instance.WriteLog(DateTime.Now.ToString() + content, "盛付通" + KindName + "推送消息");
+            }
+            else if (BrandId == 8)
+            {
+                LogHelper.Instance.WriteLog(DateTime.Now.ToString() + content, "海科电签" + KindName + "推送消息");
+            }
+            else if (BrandId == 9)
+            {
+                LogHelper.Instance.WriteLog(DateTime.Now.ToString() + content, "海科大POS" + KindName + "推送消息");
+            }
+            else if (BrandId == 10 || BrandId == 11)
+            {
+                LogHelper.Instance.WriteLog(DateTime.Now.ToString() + content, "联动" + KindName + "推送消息");
+            }
+            else if (BrandId == 12)
+            {
+                LogHelper.Instance.WriteLog(DateTime.Now.ToString() + content, "盒易付电签" + KindName + "推送消息");
+            }
+            else if (BrandId == 15)
+            {
+                LogHelper.Instance.WriteLog(DateTime.Now.ToString() + content, "联客宝" + KindName + "推送消息");
+            }
+            else if (BrandId == 23)
+            {
+                LogHelper.Instance.WriteLog(DateTime.Now.ToString() + content, "WIFI" + KindName + "推送消息");
+            }
+            else if (BrandId == 34)
+            {
+                LogHelper.Instance.WriteLog(DateTime.Now.ToString() + content, "联动掌中宝" + KindName + "推送消息");
+            }
+            else
+            {
+                LogHelper.Instance.WriteLog(DateTime.Now.ToString() + content, "金控" + KindName + "推送消息");
+            }
+        }
+        #endregion
+
+        #region 返回报文
+        private Dictionary<string, object> BackInfo(int BrandId, string RequestMes = "")
+        {
+            Dictionary<string, object> obj = new Dictionary<string, object>();
+            if (BrandId == 2)
+            {
+                obj.Add("code", "200");
+            }
+            else if (BrandId == 4)
+            {
+                obj.Add("code", "0");
+                obj.Add("message", "成功");
+            }
+            else if (BrandId == 6 || BrandId == 22)
+            {
+                obj.Add("ret_code", "00");
+                obj.Add("ret_msg", "SUCCESS");
+            }
+            else if (BrandId == 10 || BrandId == 11)
+            {
+                obj.Add("retCode", "SUCCESS");
+                obj.Add("retMessage", "OK");
+            }
+            else if (BrandId == 12)
+            {
+                if(RequestMes.Contains("\"ordId\""))
+                {
+                    JsonData jsonObj = JsonMapper.ToObject(RequestMes);
+                    obj.Add("recvOrdId", "RECV_ORD_ID_" + jsonObj["ordId"].ToString());
+                }
+                obj.Add("resultCode", "0");
+            }
+            else if (BrandId == 15 || BrandId == 17)
+            {
+                obj.Add("code", "200");
+                obj.Add("status", "success");
+            }
+            else if (BrandId == 30)
+            {
+                obj.Add("code", "200");
+                obj.Add("msg", "success");
+            }
+            else
+            {
+                obj = PublicImportDataService.Instance.CallBack();
+            }
+            return obj;
+        }
+        #endregion
+
+        #region 解析get请求键值对
+        private Dictionary<string, string> GetParams(string data)
+        {
+            Dictionary<string, string> result = new Dictionary<string, string>();
+            string[] datalist = data.Split('&');
+            foreach (string sub in datalist)
+            {
+                string[] subdatalist = sub.Split('=');
+                result.Add(subdatalist[0], subdatalist[1]);
+            }
+            return result;
+        }
+        #endregion
+
+
+    }
+}

+ 169 - 0
Areas/Api/Controllers/v1/KssController.cs

@@ -0,0 +1,169 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Http;
+using System.IO;
+using Library;
+using LitJson;
+
+namespace MySystem.Areas.Api.Controllers
+{
+    [Area("Api")]
+    [Route("Api/v1/[controller]/[action]")]
+    public class KssController : Admin.Controllers.BaseController
+    {
+        public KssController(IHttpContextAccessor accessor, ILogger<Admin.Controllers.BaseController> logger, IOptions<Setting> setting) : base(accessor, logger, setting)
+        {
+        }
+
+
+
+        #region 接收绑定记录
+        [HttpPost]
+        [Route("/kss/flux/{BrandId:int}")]
+        public Dictionary<string, object> Bind(int BrandId)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return new Dictionary<string, object>();
+            }
+            RedisDbconn.Instance.AddList("kss_bind_list_" + BrandId, requestMes);
+            Dictionary<string, object> obj = new Dictionary<string, object>();
+            obj.Add("code", 200);
+            obj.Add("message", "");
+            return obj;
+        }
+        #endregion
+
+
+
+        #region 接收首刷记录
+        [HttpPost]
+        [Route("/kss/first/{BrandId:int}")]
+        public Dictionary<string, object> First(int BrandId)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return new Dictionary<string, object>();
+            }
+            RedisDbconn.Instance.AddList("kss_first_list_" + BrandId, requestMes);
+            Dictionary<string, object> obj = new Dictionary<string, object>();
+            obj.Add("code", 200);
+            obj.Add("message", "");
+            return obj;
+        }
+        #endregion
+
+
+
+        #region 接收免押记录
+        [HttpPost]
+        [Route("/kss/freedeposit/{BrandId:int}")]
+        public Dictionary<string, object> FreeDeposit(int BrandId)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return new Dictionary<string, object>();
+            }
+            RedisDbconn.Instance.AddList("kss_free_deposit_list_" + BrandId, requestMes);
+            Dictionary<string, object> obj = new Dictionary<string, object>();
+            obj.Add("code", 200);
+            obj.Add("message", "");
+            return obj;
+        }
+        #endregion
+
+
+
+        #region 接收返押记录
+        [HttpPost]
+        [Route("/kss/returndeposit/{BrandId:int}")]
+        public Dictionary<string, object> ReturnDeposit(int BrandId)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return new Dictionary<string, object>();
+            }
+            RedisDbconn.Instance.AddList("kss_return_deposit_list_" + BrandId, requestMes);
+            Dictionary<string, object> obj = new Dictionary<string, object>();
+            obj.Add("code", 200);
+            obj.Add("message", "");
+            return obj;
+        }
+        #endregion
+
+
+
+        #region 接收商户在网达标记录
+        [HttpPost]
+        [Route("/kss/stagerwd/{BrandId:int}")]
+        public Dictionary<string, object> StageRwd(int BrandId)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return new Dictionary<string, object>();
+            }
+            RedisDbconn.Instance.AddList("kss_stage_rwd_list_" + BrandId, requestMes);
+            Dictionary<string, object> obj = new Dictionary<string, object>();
+            obj.Add("code", 200);
+            obj.Add("message", "");
+            return obj;
+        }
+        #endregion
+
+
+
+        #region 接收商户注册记录
+        [HttpPost]
+        [Route("/kss/merchant/{BrandId:int}")]
+        public Dictionary<string, object> Merchant(int BrandId)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return new Dictionary<string, object>();
+            }
+            RedisDbconn.Instance.AddList("kss_merchant_list_" + BrandId, requestMes);
+            Dictionary<string, object> obj = new Dictionary<string, object>();
+            obj.Add("code", 200);
+            obj.Add("message", "");
+            return obj;
+        }
+        #endregion
+
+
+
+
+
+        #region 解析get请求键值对
+        private Dictionary<string, string> GetParams(string data)
+        {
+            Dictionary<string, string> result = new Dictionary<string, string>();
+            string[] datalist = data.Split('&');
+            foreach (string sub in datalist)
+            {
+                string[] subdatalist = sub.Split('=');
+                result.Add(subdatalist[0], subdatalist[1]);
+            }
+            return result;
+        }
+        #endregion
+
+
+    }
+}

+ 216 - 0
Areas/Api/Controllers/v1/TestController.cs

@@ -0,0 +1,216 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Http;
+using System.IO;
+using Library;
+using LitJson;
+using System.Security.Cryptography;
+using System.Security.Cryptography.X509Certificates;
+
+namespace MySystem.Areas.Api.Controllers
+{
+    [Area("Api")]
+    [Route("Api/[controller]/[action]")]
+    public class TestController : Admin.Controllers.BaseController
+    {
+        public TestController(IHttpContextAccessor accessor, ILogger<Admin.Controllers.BaseController> logger, IOptions<Setting> setting) : base(accessor, logger, setting)
+        {
+        }
+
+
+
+        public string test()
+        {
+            Dictionary<string, object> data = new Dictionary<string, object>();
+            //商户
+            // data.Add("MerNo", "5678679878");
+            // data.Add("MerName", "测试商户");
+            // data.Add("MerMobile", "13584849565");
+            // data.Add("ProductType", "6");
+            // data.Add("MerSnNo", "00005702830310395949");
+            // data.Add("MerRegDate", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+            // data.Add("MerBindDate", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+            // data.Add("MerIdcardNo", "624369198812120369");
+            // data.Add("MerRealName", "唐明皇");
+            // data.Add("BizEnterNo", "");
+            // data.Add("BizEnterName", "");
+            // data.Add("SourceType", "");
+            // data.Add("Province", "四川省");
+            // data.Add("City", "成都市");
+            // data.Add("Remark", "商户入驻");
+            // data.Add("CreateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+            // data.Add("UpdateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+            //激活
+            // data.Add("MerNo", "5678679878");
+            // data.Add("MerName", "测试商户");
+            // data.Add("MerMobile", "13584849565");
+            // data.Add("ProductType", "6");
+            // data.Add("MerSnNo", "00005702830310395949");
+            // data.Add("MerRegDate", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+            // data.Add("AssessMonth", "202201");
+            // data.Add("AssessMonthCount", "1");
+            // data.Add("ActivateStatus", "1");
+            // data.Add("ActivateDate", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+            // data.Add("MerRealName", "唐明皇");
+            // data.Add("MerIdcardNo", "624369198812120369");
+            // data.Add("BizEnterNo", "");
+            // data.Add("BizEnterName", "");
+            // data.Add("ActVerifyFlag", "1");
+            // data.Add("Remark", "机具激活");
+            // data.Add("CreateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+            // data.Add("UpdateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+            //交易
+            // data.Add("TradeSerialNo", "T0000002343445654656");
+            // data.Add("MerNo", "5678679878");
+            // data.Add("MerName", "测试商户");
+            // data.Add("TradeAmount", "8000.00");
+            // data.Add("TradeReferNo", "T0000002343445654656");
+            // data.Add("BankAuthCode", "46498763614");
+            // data.Add("DiscountRateFlag", "1");
+            // data.Add("ProductType", "6");
+            // data.Add("Trade_status", "1");
+            // data.Add("ErrorCode", "00");
+            // data.Add("ErrorMsg", "");
+            // data.Add("TradeDate", DateTime.Now.ToString("yyyyMMdd"));
+            // data.Add("TradeTime", DateTime.Now.ToString("HHmmss"));
+            // data.Add("TradeType", "1");
+            // data.Add("SerEntryMode", "021");
+            // data.Add("BankCardType", "0001");
+            // data.Add("TradeSnNo", "00005702830310395949");
+            // data.Add("DeviceType", "1");
+            // data.Add("MerMobile", "13584849565");
+            // data.Add("DigAmtFlag", "1");
+            // data.Add("DigAmt", "298");
+            // data.Add("IsStoreCashier", "2");
+            // data.Add("ReceiptType", "KuaiPOS");
+            // data.Add("Remark", "刷卡交易");
+            // data.Add("CreateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+            // data.Add("UpdateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+            // 流量卡交易
+            // data.Add("TradeSerialNo", "T0000002343445654656");
+            // data.Add("MerNo", "5678679878");
+            // data.Add("MerName", "测试商户");
+            // data.Add("TradeAmount", "8000.00");
+            // data.Add("ProductType", "6");
+            // data.Add("TradeStatus", "1");
+            // data.Add("TradeDate", DateTime.Now.ToString("yyyyMMdd"));
+            // data.Add("TradeTime", DateTime.Now.ToString("HHmmss"));
+            // data.Add("BankCardType", "0001");
+            // data.Add("TradeSnNo", "00005702830310395949");
+            // data.Add("DigAmtFlag", "1");
+            // data.Add("DigAmt", "298");
+            // data.Add("Remark", "流量卡交易");
+            // data.Add("CreateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+            // data.Add("UpdateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+            // data.Add("BankCardNo", "3565978645364");
+            // data.Add("FeeAmount", "10.00");
+            // data.Add("SettleMethod", "1");
+            // data.Add("SettleFee", "1");
+            // data.Add("SmallDouble", "1");
+            // data.Add("BizEnterNo", "");
+            // data.Add("BizEnterName", "");
+            // data.Add("SourceType", "1");
+            // data.Add("BillType", "1");
+            // data.Add("KqTradeSeq", "");
+            // data.Add("InputModel", "");
+            // data.Add("TerminalNo", "554569879797");
+            // data.Add("DeviceNetwork", "4G");
+            // 商户在网达标
+            data.Add("AgentName", "快闪刷");
+            data.Add("MerNo", "5678679878");
+            data.Add("MerName", "测试商户");
+            data.Add("ProductType", "6");
+            data.Add("MerBindDate", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+            data.Add("MerSnNo", "00005702830310395949");
+            data.Add("ActNo", "1");
+            data.Add("ActName", "测试活动");
+            data.Add("MerStdStage", "1");
+            data.Add("MerStdDate", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+            data.Add("MerStdStatus", "1");
+            data.Add("NewFlag", "1");
+            data.Add("Remark", "商户在网达标");
+            data.Add("CreateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+            data.Add("UpdateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
+            string req = Newtonsoft.Json.JsonConvert.SerializeObject(data);
+            string result = function.PostWebRequest(Host + "kss/stagerwd/6", req, "application/json");
+            return result;
+        }
+        public string GetLog(string date, string filename = "金控推送消息")
+        {
+            string[] datelist = date.Split('-');
+            return function.ReadInstance("/log/" + filename + "/" + datelist[0] + "/" + datelist[1] + "/" + datelist[2] + "/content.log");
+        }
+
+
+
+        public string test2()
+        {
+            //{"Cache-Control":["max-age=259200"],"Connection":["keep-alive"],"Via":["1.1 T-IntPay3-squid01 (squid/3.1.23)"],"Content-Type":["application/json"],"Accept":["application/json, application/*+json"],"Accept-Encoding":["gzip,deflate"],"Host":["sp.kexiaoshuang.com"],"User-Agent":["Apache-HttpClient/4.5.13 (Java/11.0.11)"],"Content-Length":["1050"],"X-Forwarded-For":["10.84.1.137, 110.43.212.253"],"X-Forwarded-Proto":["http"],"paas-sw8":["1-OGQ2YzBiMGQ2NDYwNDViOWIyNWM1NmU5NDQ3NGFiYmMuMTMyLjE2NDY2NDE0NjYyNjIwMTU5-OGQ2YzBiMGQ2NDYwNDViOWIyNWM1NmU5NDQ3NGFiYmMuMTMyLjE2NDY2NDE0NjYyNjIwMTU4-0-cGFhcy1wdXNoLXNlcnZpY2U=-NzM5ZTJhZGVlOWUyNDdkNDg5ZmQxYWU2MzA1ZGM1ZmZAMTcyLjE2OC43LjE4MA==-L3RyYW5zT3JkZXJOb2ZpdHk=-c3Aua2V4aWFvc2h1YW5nLmNvbTo4MA=="],"paas-sw8-correlation":[""],"paas-sw8-x":["0-"],"X-Security":["RSA"],"X-Client-ID":["mfe88"],"X-TopOrgNum":["1243966544896"],"X-Sign":["pCgL/g5DWTz1oRVvUeVy17fEfSJe2NdaJV6Eyx0IYNrWvNSX5J6k1Fz9Bp2TtISOk7YzADNYdrNMqKVQGAJjLQRDpPWsdCbJH2OZ1t3MddFQSYv1NEiuyMK67mLZhr0G07Y/kZZbIrUlKnybcBnmg1UX1vWppmsusBSpF3JlH+k="]}
+
+            //{"trace":"N/A","param":"cMhBkf3eK5E0KXQQjSlbWaM0HZFeYEjh1vB0WFa4WerjYWu3hmQCpZuicojVy9hewRZq8rlCZBB3asKLjRZpEWfJI/C6cSnTd4uk2d3epQ6AcEx6dG8PA/N8RMPimniMYx0gWVkq36PDlkwYmcMNl7wY3lnAtTCiivJTDzSnzjhNTWfcaR85WTx1wYjY/1rgoo89gpLFxpJP2xO4+RPLYdfzF7ZTHg98lzkg+BNcC6R7urBYk1KAQFTDcdAWxno579wSUOqwPM1VAAv6Dq8Q14ZL/MqavngBhvHpD8rgH4dsZfIlCPIdhKPmKKptJATG3qEwt20+cWHKwad0YOGzvE0hVGYEaR0niY9l+13CoSQN//750bZ0b0ygl+ZGsTbXl41qfArPZdwMzIarJq4l1owhaGkgo+oX2oPfUeJNQe0SREiosvLc9l/ow+QOxmn4D/lgwjBgveEH9O22IO62meviqUN+xmMB3uS4Svol8K4Yjgkt9zyrVFnA1jA+0YlKe9hn5pouFSGOqvmfyWqjaMe7ra3j/OGPYFhUj1IuK0BPiv9koU6kS9fOoWkc5P4BXKMWZSGYjizHhe3PQJwPKBVVgj9HwHQRrSxfbcGLBjyMWcTSIhStN3akI0jdD20DXwCX0ZUX4QhQyabxi8+CY95/fSGVuemlqnO3n1a8+yIwNyTnTxmr7OdbmiquqjKZAuXwGBaAIMQR81VVaxzOGiyxHWaT2qdbQIywt5IyybgKn2afPaZVckw21YoleXjmsXTbxpOfx4IcQXw3hJ99Fy2EOb1tRUd9+hcksfpAbmQ+PcV49MoGBL94rMHrHpBHlHQd3+ddW7YtQPECxcqCNFNS9hdOFcf9QO55QQn6fDbxFw7FWvgPY7ixeiK24MzI0lxRSMFtQQkcrfImpkP0oA18Pp72NSvI6FsHb40k2lgM7LdawnluVvTc+g/WkrK61M98wqviWnazr7KR/ZBgIavjVkP1DtjxhSsIlpDdTBrv5QukWpMUqUWhvvuEPMI+"}
+
+            string signStr = "pCgL/g5DWTz1oRVvUeVy17fEfSJe2NdaJV6Eyx0IYNrWvNSX5J6k1Fz9Bp2TtISOk7YzADNYdrNMqKVQGAJjLQRDpPWsdCbJH2OZ1t3MddFQSYv1NEiuyMK67mLZhr0G07Y/kZZbIrUlKnybcBnmg1UX1vWppmsusBSpF3JlH+k=";
+            string param = "cMhBkf3eK5E0KXQQjSlbWaM0HZFeYEjh1vB0WFa4WerjYWu3hmQCpZuicojVy9hewRZq8rlCZBB3asKLjRZpEWfJI/C6cSnTd4uk2d3epQ6AcEx6dG8PA/N8RMPimniMYx0gWVkq36PDlkwYmcMNl7wY3lnAtTCiivJTDzSnzjhNTWfcaR85WTx1wYjY/1rgoo89gpLFxpJP2xO4+RPLYdfzF7ZTHg98lzkg+BNcC6R7urBYk1KAQFTDcdAWxno579wSUOqwPM1VAAv6Dq8Q14ZL/MqavngBhvHpD8rgH4dsZfIlCPIdhKPmKKptJATG3qEwt20+cWHKwad0YOGzvE0hVGYEaR0niY9l+13CoSQN//750bZ0b0ygl+ZGsTbXl41qfArPZdwMzIarJq4l1owhaGkgo+oX2oPfUeJNQe0SREiosvLc9l/ow+QOxmn4D/lgwjBgveEH9O22IO62meviqUN+xmMB3uS4Svol8K4Yjgkt9zyrVFnA1jA+0YlKe9hn5pouFSGOqvmfyWqjaMe7ra3j/OGPYFhUj1IuK0BPiv9koU6kS9fOoWkc5P4BXKMWZSGYjizHhe3PQJwPKBVVgj9HwHQRrSxfbcGLBjyMWcTSIhStN3akI0jdD20DXwCX0ZUX4QhQyabxi8+CY95/fSGVuemlqnO3n1a8+yIwNyTnTxmr7OdbmiquqjKZAuXwGBaAIMQR81VVaxzOGiyxHWaT2qdbQIywt5IyybgKn2afPaZVckw21YoleXjmsXTbxpOfx4IcQXw3hJ99Fy2EOb1tRUd9+hcksfpAbmQ+PcV49MoGBL94rMHrHpBHlHQd3+ddW7YtQPECxcqCNFNS9hdOFcf9QO55QQn6fDbxFw7FWvgPY7ixeiK24MzI0lxRSMFtQQkcrfImpkP0oA18Pp72NSvI6FsHb40k2lgM7LdawnluVvTc+g/WkrK61M98wqviWnazr7KR/ZBgIavjVkP1DtjxhSsIlpDdTBrv5QukWpMUqUWhvvuEPMI+";
+            string prikey = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAJvzrW657LXbnZZ1Lwo94EH6+bkAgEQpyWx8HNUtjVxleKIRsicKaypPp9I74DrCNbImLEYLNkgKZTGF0HO6jcO7ZhNu6j59GVXoNbWZuC4FXz+Xb4sm+G3SOXzsnw3iyQVTO8B5gqlYNfp0LpwvOObmfIjU6sJCrSWxY8QwMI0DAgMBAAECgYAjE0dqo/6NWHu1H14ZG5mYvW31Ihu3OP7Im5GQkNI+ecQMD5bWGQ3JUmkYa8ce8BdLnjJO/q6SvWPNI5+ip87CYPH1SMXKUiSLzaCrw4xMySW9PSnudTzJwhrmlmyjYTAg70tHf2YQC4YkNvtkR+PJ2yf6JEKGFVgP5p2KyeKXgQJBANjGryxyu95QC3jIaggcYmGD36sVO/ns8Uyu8PkAHYOscuXRcV0L8LghIzPolcehj9bTbDLjiuNgeuyjNs2YBvMCQQC4K4uIXt0kVDLYzlJfhN1CsV90vQitcKdD8wTO0JRKfMCQ6UDSumU7lq+z4TxTlRYxmZjpgIqH+N0WohmEiwWxAkBEfuMzBD3gjSJS0+DNF0ruzSCLinYdDoVgWZbC1wp8ZK0ZeQh9AhzZ0X6yFDffkGlG1B9IJSXpmr68rwXOCM+JAkBkrKEUxc6bGk/FRluvDWEqIO2uUdtZfBhjQ4ggSdKWOUXGsUsXJn9KKKAZc4lXo0rDiFQXaIXRuE+bHLdYReqxAkAj0Kol0LkJgdl2PoBAeyQHTpt9nxaeNX56W7CN/srBA1O2wr+aoQiJaKsu9I0EeW3zaMJlLi3VyjU4wnF+yAsB";
+            string pubkey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCy8cg6/tXbSj2i1tyi7VztwJw7uNmqc3bS6sVIZkDYhTmcXhpV17jq4j2zz/tURwX8b3MdK1A1HTR1XRd7hl0w2UF9iFk6UezByJ5tdNDoffMCGJtVSThq+MCV+WQI26tJ/ub6bm7GPrzTR79fntN+nTniRM4trjONN2WzEhHEcwIDAQAB";
+            return sign(param, signStr, prikey, pubkey);
+        }
+
+        //设置押金
+        public string SetDeposit(string sn, decimal num)
+        {
+            string content = PublicImportDataService.Instance.SetDeposit(sn, num);
+            JsonData obj = JsonMapper.ToObject(content);
+            if (obj["code"].ToString() == "000000")
+            {
+                content += "\n" + PublicImportDataService.Instance.Decrypt(obj["data"].ToString());
+            }
+            return content;
+        }
+        //设置费率
+        public string SetFee(string merNo, string sn, decimal fee = 0.6M)
+        {
+            string content = PublicImportDataService.Instance.SetFee(merNo, sn, fee);
+            // JsonData obj = JsonMapper.ToObject(content);
+            // if (obj["code"].ToString() == "000000")
+            // {
+            //     content += "\n" + PublicImportDataService.Instance.Decrypt(obj["data"].ToString());
+            // }
+            return content;
+        }
+
+        public string sign(string data, string signStr, string privateKey, string publicKey)
+        { 
+            using (var x509 = new X509Certificate2(Convert.FromBase64String(publicKey)))
+            {
+                using (var rsa = x509.GetRSAPublicKey())
+                {
+                    var signstr = rsa.VerifyData(System.Text.Encoding.UTF8.GetBytes(data), System.Text.Encoding.UTF8.GetBytes(signStr), HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); //签名
+                    return signstr.ToString();
+                }
+            }
+
+            // var toDecryptArray = Convert.FromBase64String(data);
+            // var rsa2 = RSA.Create();
+            // rsa2.ImportPkcs8PrivateKey(Convert.FromBase64String(privateKey), out _);
+            // string result = "";
+            // List<byte> cache = new List<byte>();
+            // for (int i = 0; i < toDecryptArray.Length; i++)
+            // {
+            //     cache.Add(toDecryptArray[i]);
+            //     if ((i + 1) % 128 == 0 || i + 1 == toDecryptArray.Length)
+            //     {
+            //         var ContentArray = rsa2.Decrypt(cache.ToArray(), RSAEncryptionPadding.Pkcs1);
+            //         result += System.Text.Encoding.UTF8.GetString(ContentArray);
+            //         cache.Clear();
+            //     }
+            // }
+            // return result;
+        }
+    }
+}

+ 120 - 0
Areas/Api/Controllers/v1/YcCardOnlineController.cs

@@ -0,0 +1,120 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Http;
+using System.IO;
+using Library;
+using LitJson;
+
+namespace MySystem.Areas.Api.Controllers
+{
+    public class YcCardOnlineController : Admin.Controllers.BaseController
+    {
+        public YcCardOnlineController(IHttpContextAccessor accessor, ILogger<Admin.Controllers.BaseController> logger, IOptions<Setting> setting) : base(accessor, logger, setting)
+        {
+        }
+
+
+
+        #region 接收订单通知
+        [Route("/yc/order/notice")]
+        public Dictionary<string, object> Bind(int BrandId)
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return new Dictionary<string, object>();
+            }
+            RedisDbconn.Instance.AddList("yc_order_list", requestMes);
+            Dictionary<string, object> obj = new Dictionary<string, object>();
+            obj.Add("resultCode", 1);
+            return obj;
+        }
+        #endregion
+
+        #region 设备信息初始化回传接口
+        [Route("/yc/device/init")]
+        public Dictionary<string, object> Init()
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return new Dictionary<string, object>();
+            }
+            LogHelper.Instance.WriteLog(DateTime.Now.ToString() + "\n" + requestMes, "WIFI设备信息初始化回传接口推送消息");
+            RedisDbconn.Instance.AddList("yc_device", "init#cut#" + requestMes);
+            Dictionary<string, object> obj = new Dictionary<string, object>();
+            obj.Add("resultCode", 1);
+            obj.Add("errorCode", null);
+            obj.Add("errorDesc", null);
+            return obj;
+        }
+        #endregion
+
+        #region 设备信息变更回传接口
+        [Route("/yc/device/change")]
+        public Dictionary<string, object> Change()
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return new Dictionary<string, object>();
+            }
+            LogHelper.Instance.WriteLog(DateTime.Now.ToString() + "\n" + requestMes, "WIFI设备信息变更回传接口推送消息");
+            RedisDbconn.Instance.AddList("yc_device", "change#cut#" + requestMes);
+            Dictionary<string, object> obj = new Dictionary<string, object>();
+            obj.Add("resultCode", 1);
+            obj.Add("errorCode", null);
+            obj.Add("errorDesc", null);
+            return obj;
+        }
+        #endregion
+
+        #region 订单信息初始化回传接口
+        [Route("/yc/order/init")]
+        public Dictionary<string, object> OrderInit()
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return new Dictionary<string, object>();
+            }
+            LogHelper.Instance.WriteLog(DateTime.Now.ToString() + "\n" + requestMes, "WIFI订单信息初始化回传接口推送消息");
+            RedisDbconn.Instance.AddList("yc_order", "init#cut#" + requestMes);
+            Dictionary<string, object> obj = new Dictionary<string, object>();
+            obj.Add("resultCode", 1);
+            obj.Add("errorCode", null);
+            obj.Add("errorDesc", null);
+            return obj;
+        }
+        #endregion
+
+        #region 订单状态变更回传接口
+        [Route("/yc/order/change")]
+        public Dictionary<string, object> OrderChange()
+        {
+            StreamReader sr = new StreamReader(Request.Body);
+            string requestMes = sr.ReadToEnd();
+            if (string.IsNullOrEmpty(requestMes))
+            {
+                return new Dictionary<string, object>();
+            }
+            LogHelper.Instance.WriteLog(DateTime.Now.ToString() + "\n" + requestMes, "WIFI订单状态变更回传接口推送消息");
+            RedisDbconn.Instance.AddList("yc_order", "change#cut#" + requestMes);
+            Dictionary<string, object> obj = new Dictionary<string, object>();
+            obj.Add("resultCode", 1);
+            obj.Add("errorCode", null);
+            obj.Add("errorDesc", null);
+            return obj;
+        }
+        #endregion
+    }
+}

二進制
Areas/Web/.DS_Store


二進制
Areas/Web/Controllers/.DS_Store


二進制
Areas/Web/Views/.DS_Store


二進制
BLL/Aliyun.OSS.dll


二進制
BLL/AopSdk.dll


二進制
BLL/LitJSON.dll


二進制
BLL/MySystemLib.dll


二進制
BLL/Newtonsoft.Json.dll


二進制
BLL/ThoughtWorks.QRCode.dll


二進制
BLL/aliyun-net-sdk-core.dll


+ 61 - 0
Config/Base.cs

@@ -0,0 +1,61 @@
+using System.Collections.Generic;
+using Library;
+
+namespace AppConfig
+{
+    public class Base
+    {
+        public static string RdsSqlConn = Library.ConfigurationManager.AppSettings["RdsSqlConnStr"].ToString();
+
+        public static string CreateTradeRecord = "SET NAMES utf8mb4;" +
+                                                "SET FOREIGN_KEY_CHECKS = 0;" +
+                                                "CREATE TABLE `TradeRecord#DateTime#` (" +
+                                                "`Id` int(11) NOT NULL AUTO_INCREMENT," +
+                                                "`Sort` int(11) NOT NULL DEFAULT '0'," +
+                                                "`QueryCount` int(11) NOT NULL DEFAULT '0'," +
+                                                "`Status` int(11) NOT NULL DEFAULT '0'," +
+                                                "`CreateDate` datetime DEFAULT NULL," +
+                                                "`UpdateDate` datetime DEFAULT NULL," +
+                                                "`SeoTitle` varchar(100) DEFAULT NULL," +
+                                                "`SeoKeyword` varchar(200) DEFAULT NULL," +
+                                                "`SeoDescription` mediumtext," +
+                                                "`ChannelSerial` varchar(50) DEFAULT NULL," +
+                                                "`AgentNo` varchar(32) DEFAULT NULL," +
+                                                "`ProductType` varchar(32) DEFAULT NULL," +
+                                                "`Remark` varchar(64) DEFAULT NULL," +
+                                                "`SettleMethod` varchar(16) DEFAULT NULL," +
+                                                "`SettleFee` decimal(18,2) NOT NULL DEFAULT '0.00'," +
+                                                "`BankCardNo` varchar(32) DEFAULT NULL," +
+                                                "`ReceiptType` varchar(16) DEFAULT NULL," +
+                                                "`IsStoreCashier` varchar(16) DEFAULT NULL," +
+                                                "`DigAmt` decimal(18,2) NOT NULL DEFAULT '0.00'," +
+                                                "`DigAmtFlag` varchar(4) DEFAULT NULL," +
+                                                "`MerMobile` varchar(11) DEFAULT NULL," +
+                                                "`DeviceType` varchar(16) DEFAULT NULL," +
+                                                "`TradeSnNo` varchar(50) DEFAULT NULL," +
+                                                "`BankCardType` varchar(16) DEFAULT NULL," +
+                                                "`SerEntryMode` varchar(32) DEFAULT NULL," +
+                                                "`TradeType` varchar(32) DEFAULT NULL," +
+                                                "`TradeTime` varchar(8) DEFAULT NULL," +
+                                                "`TradeDate` varchar(8) DEFAULT NULL," +
+                                                "`ErrorMsg` varchar(32) DEFAULT NULL," +
+                                                "`ErrorCode` varchar(16) DEFAULT NULL," +
+                                                "`TradeStatus` varchar(16) DEFAULT NULL," +
+                                                "`DiscountRateFlag` varchar(16) DEFAULT NULL," +
+                                                "`BankAuthCode` varchar(32) DEFAULT NULL," +
+                                                "`TradeReferNo` varchar(32) DEFAULT NULL," +
+                                                "`TradeAmount` decimal(18,2) NOT NULL DEFAULT '0.00'," +
+                                                "`MerName` varchar(50) DEFAULT NULL," +
+                                                "`MerNo` varchar(50) DEFAULT NULL," +
+                                                "`TradeSerialNo` varchar(100) DEFAULT NULL," +
+                                                "`Field5` varchar(50) DEFAULT NULL," +
+                                                "`Field4` varchar(50) DEFAULT NULL," +
+                                                "`Field3` varchar(50) DEFAULT NULL," +
+                                                "`Field2` varchar(50) DEFAULT NULL," +
+                                                "`Field1` varchar(50) DEFAULT NULL," +
+                                                "PRIMARY KEY (`Id`)," +
+                                                "KEY `TradeRecordIndex` (`CreateDate`,`TradeSnNo`,`ProductType`,`MerNo`)" +
+                                                ") ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;" +
+                                                "SET FOREIGN_KEY_CHECKS = 1;";
+    }
+}

+ 63 - 0
Controllers/HomeController.cs

@@ -0,0 +1,63 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Logging;
+using MySystem.Models;
+using Library;
+using LitJson;
+using System.Web;
+using System.Text;
+
+namespace MySystem.Controllers
+{
+    public class HomeController : Controller
+    {
+        private readonly ILogger<HomeController> _logger;
+
+        public HomeController(ILogger<HomeController> logger)
+        {
+            _logger = logger;
+        }
+
+        public IActionResult Index()
+        {
+            return View();
+        }
+
+        public IActionResult Error()
+        {
+            string isapi = Request.Headers["Api"].ToString();
+            if (isapi != "1")
+            {
+                if (Response.StatusCode == 500)
+                {
+                    return Redirect("/public/errpage/pc/500.html");
+                }
+                else if (Response.StatusCode == 502)
+                {
+                    return Redirect("/public/errpage/pc/502.html");
+                }
+                else if (Response.StatusCode == 404)
+                {
+                    return Redirect("/public/errpage/pc/404.html");
+                }
+            }
+            return View();
+        }
+    
+
+        public string test()
+        {
+            //{"Cache-Control":["no-cache"],"Connection":["keep-alive"],"Pragma":["no-cache"],"Content-Type":["application/json;charset=UTF-8"],"Accept":["text/html,application/json,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"],"Accept-Encoding":["gzip, deflate"],"Accept-Language":["zh-CN,zh;q=0.8"],"Host":["test.sp.kexiaoshuang.com"],"User-Agent":["Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36 Hutool"],"Content-Length":["1040"],"X-Forwarded-For":["8.147.104.137, 100.127.128.61"],"X-Forwarded-Proto":["http"],"RemoteIp":["8.147.104.137"]}#cut#{"serviceType":"MATERIAL_BIND_STATUS_NOTIFY","data":"BgKSwUe/rs76m+xvJ39FYRFP+jAd/9eIuDgLWtPEh+Qgf+RqfMG8C4KP1X09a+4nc0U7N8Xlb9fit/CI8i5j+3Hti0vFSGQwO6OAzKqIxpYitV8/aftiCxyo8N0LnaiF6xmVJSY1x3riwXkjzqyiIVP8kl3wg+3oR37QUdaHbDPyu19VVItSUnBW+NV0fcXI","appId":"61261954","sign":"JEnj3hH7YaQDqFA4vSx90yTJeN0vNjLQSl+0dcV9UJYSKafydQAR3CXy+dN6kID6QOwPauELfYg3lUO4XDnKLoLrLzZbBAixJilDPP32KTqgy47UjkbRinVqpgYIAUt30Y6mLEdDYPtbQOL+POniwtYyfFvCVkW48HfBE/CSbaKL0vvND2fBUeSzVGe2zBfXPzZIKyMHsOZbwB7zWT6NHI5u3K3hMikf8F7Rxu37ODL8qrkmWn1c9jQQiYdKrRH2pDniKDZp3ihlVMC1DCgpE/bFJh8qvt1hBOXjG14zA5eWhDb/AevGrOaZtGoVVQfOosGO0a0XCSsQekmsIaeClw==","encryptKey":"cm1j5FtavDTiNpS1tPWWUNenyfijhBNHY2GU5cQ1yfFD6HwfWFCx5YhUKXGQAdbNrmNxmkS1ePy5Cy6mqmxNp3P1uZSOQVoi0jLq1ijegP/h7nBl4XG3sn7vJsaT05HWQfacMLOKW+8lfFlsYyjA3uBmwphmrLDpUX2FEAMY1WCe6nqY7iRfICL7tY5wf66HsOG+WNy71D+It5/I6LAkLE50QRpH7nmLp0u1fmARkVEh7cP6KY/XzOkCh92O7QJ2KjmzlAcEruOdp9EnhvJ1+8GafjS1cahlW0Sljv6KmUEfbbzuf/L7WedeemPA9XWDHGVHG9W6fuDf2o5ueqTU5g==","timestamp":"1747894164769","responseId":"JZY2214323198465"}
+            string aesKey = "cm1j5FtavDTiNpS1tPWWUNenyfijhBNHY2GU5cQ1yfFD6HwfWFCx5YhUKXGQAdbNrmNxmkS1ePy5Cy6mqmxNp3P1uZSOQVoi0jLq1ijegP/h7nBl4XG3sn7vJsaT05HWQfacMLOKW+8lfFlsYyjA3uBmwphmrLDpUX2FEAMY1WCe6nqY7iRfICL7tY5wf66HsOG+WNy71D+It5/I6LAkLE50QRpH7nmLp0u1fmARkVEh7cP6KY/XzOkCh92O7QJ2KjmzlAcEruOdp9EnhvJ1+8GafjS1cahlW0Sljv6KmUEfbbzuf/L7WedeemPA9XWDHGVHG9W6fuDf2o5ueqTU5g==";
+            aesKey = PublicImportDataService.Instance.LDZZBDecrypt(aesKey);
+            string content = PublicImportDataService.Instance.AesDecrypt("BgKSwUe/rs76m+xvJ39FYRFP+jAd/9eIuDgLWtPEh+Qgf+RqfMG8C4KP1X09a+4nc0U7N8Xlb9fit/CI8i5j+3Hti0vFSGQwO6OAzKqIxpYitV8/aftiCxyo8N0LnaiF6xmVJSY1x3riwXkjzqyiIVP8kl3wg+3oR37QUdaHbDPyu19VVItSUnBW+NV0fcXI", aesKey);
+            return content;
+            // return "ok";
+        }
+    
+    }
+}

+ 18 - 0
JobModels/RightDic.cs

@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.JobModels
+{
+    public partial class RightDic
+    {
+        public string Id { get; set; }
+        public string Icon { get; set; }
+        public string Name { get; set; }
+        public string Url { get; set; }
+        public int RightLevel { get; set; }
+        public int Sort { get; set; }
+        public ulong MainMenu { get; set; }
+        public ulong MainStat { get; set; }
+        public ulong MainDataList { get; set; }
+    }
+}

+ 13 - 0
JobModels/SysLog.cs

@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.JobModels
+{
+    public partial class SysLog
+    {
+        public int Id { get; set; }
+        public string Contents { get; set; }
+        public DateTime? CreateDate { get; set; }
+        public string CreateMan { get; set; }
+    }
+}

+ 24 - 0
JobModels/TaskFinish.cs

@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.JobModels
+{
+    public partial class TaskFinish
+    {
+        public int Id { get; set; }
+        public int Sort { get; set; }
+        public int QueryCount { get; set; }
+        public int Status { get; set; }
+        public int Version { get; set; }
+        public DateTime? CreateDate { get; set; }
+        public DateTime? UpdateDate { get; set; }
+        public string CreateMan { get; set; }
+        public string UpdateMan { get; set; }
+        public string SeoTitle { get; set; }
+        public string SeoKeyword { get; set; }
+        public string SeoDescription { get; set; }
+        public string TargetData { get; set; }
+        public string GetData { get; set; }
+        public int TaskId { get; set; }
+    }
+}

+ 30 - 0
JobModels/TaskSpCheckData.cs

@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.JobModels
+{
+    public partial class TaskSpCheckData
+    {
+        public int Id { get; set; }
+        public int Sort { get; set; }
+        public int QueryCount { get; set; }
+        public int Status { get; set; }
+        public int Version { get; set; }
+        public DateTime? CreateDate { get; set; }
+        public DateTime? UpdateDate { get; set; }
+        public string CreateMan { get; set; }
+        public string UpdateMan { get; set; }
+        public string SeoTitle { get; set; }
+        public string SeoKeyword { get; set; }
+        public string SeoDescription { get; set; }
+        public int TargetTableType { get; set; }
+        public int CheckTable { get; set; }
+        public int MaxId { get; set; }
+        public string CheckKey { get; set; }
+        public string ReqType { get; set; }
+        public string TargetTableName { get; set; }
+        public DateTime? EndDate { get; set; }
+        public DateTime? StartDate { get; set; }
+        public int TaskId { get; set; }
+    }
+}

+ 26 - 0
JobModels/TaskSpFieldRelation.cs

@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.JobModels
+{
+    public partial class TaskSpFieldRelation
+    {
+        public int Id { get; set; }
+        public int Sort { get; set; }
+        public int QueryCount { get; set; }
+        public int Status { get; set; }
+        public int Version { get; set; }
+        public DateTime? CreateDate { get; set; }
+        public DateTime? UpdateDate { get; set; }
+        public string CreateMan { get; set; }
+        public string UpdateMan { get; set; }
+        public string SeoTitle { get; set; }
+        public string SeoKeyword { get; set; }
+        public string SeoDescription { get; set; }
+        public int TaskId { get; set; }
+        public string TargetFieldType { get; set; }
+        public string TargetFieldName { get; set; }
+        public string SourceFieldName { get; set; }
+        public string SourceFieldTitle { get; set; }
+    }
+}

+ 31 - 0
JobModels/TaskSpGetData.cs

@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.JobModels
+{
+    public partial class TaskSpGetData
+    {
+        public int Id { get; set; }
+        public int Sort { get; set; }
+        public int QueryCount { get; set; }
+        public int Status { get; set; }
+        public int Version { get; set; }
+        public DateTime? CreateDate { get; set; }
+        public DateTime? UpdateDate { get; set; }
+        public string CreateMan { get; set; }
+        public string UpdateMan { get; set; }
+        public string SeoTitle { get; set; }
+        public string SeoKeyword { get; set; }
+        public string SeoDescription { get; set; }
+        public ulong IsCheck { get; set; }
+        public int TargetTableType { get; set; }
+        public string TargetTableName { get; set; }
+        public string CheckKey { get; set; }
+        public string FtpPassword { get; set; }
+        public string FtpUserName { get; set; }
+        public string ReqParam { get; set; }
+        public string ReqUrl { get; set; }
+        public string ReqType { get; set; }
+        public int TaskId { get; set; }
+    }
+}

+ 24 - 0
JobModels/TaskStepRecord.cs

@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.JobModels
+{
+    public partial class TaskStepRecord
+    {
+        public int Id { get; set; }
+        public int Sort { get; set; }
+        public int QueryCount { get; set; }
+        public int Status { get; set; }
+        public int Version { get; set; }
+        public DateTime? CreateDate { get; set; }
+        public DateTime? UpdateDate { get; set; }
+        public string CreateMan { get; set; }
+        public string UpdateMan { get; set; }
+        public string SeoTitle { get; set; }
+        public string SeoKeyword { get; set; }
+        public string SeoDescription { get; set; }
+        public string StepRemark { get; set; }
+        public int Step { get; set; }
+        public int TaskId { get; set; }
+    }
+}

+ 32 - 0
JobModels/TimedTasks.cs

@@ -0,0 +1,32 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.JobModels
+{
+    public partial class TimedTasks
+    {
+        public int Id { get; set; }
+        public int Sort { get; set; }
+        public int QueryCount { get; set; }
+        public int Status { get; set; }
+        public int Version { get; set; }
+        public DateTime? CreateDate { get; set; }
+        public DateTime? UpdateDate { get; set; }
+        public string CreateMan { get; set; }
+        public string UpdateMan { get; set; }
+        public string SeoTitle { get; set; }
+        public string SeoKeyword { get; set; }
+        public string SeoDescription { get; set; }
+        public string ServerName { get; set; }
+        public string OrderJson { get; set; }
+        public int TargetPort { get; set; }
+        public string TargetIp { get; set; }
+        public int BrandId { get; set; }
+        public string TimeStep { get; set; }
+        public DateTime? EndDate { get; set; }
+        public DateTime? StartDate { get; set; }
+        public int DoTime { get; set; }
+        public string Note { get; set; }
+        public string Name { get; set; }
+    }
+}

+ 504 - 0
JobModels/WebCMSEntities.cs

@@ -0,0 +1,504 @@
+using System;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Metadata;
+
+namespace MySystem.JobModels
+{
+    public partial class WebCMSEntities : DbContext
+    {
+        public WebCMSEntities()
+        {
+        }
+
+        public WebCMSEntities(DbContextOptions<WebCMSEntities> options)
+            : base(options)
+        {
+        }
+
+        public virtual DbSet<RightDic> RightDic { get; set; }
+        public virtual DbSet<SysLog> SysLog { get; set; }
+        public virtual DbSet<TaskFinish> TaskFinish { get; set; }
+        public virtual DbSet<TaskSpCheckData> TaskSpCheckData { get; set; }
+        public virtual DbSet<TaskSpFieldRelation> TaskSpFieldRelation { get; set; }
+        public virtual DbSet<TaskSpGetData> TaskSpGetData { get; set; }
+        public virtual DbSet<TaskStepRecord> TaskStepRecord { get; set; }
+        public virtual DbSet<TimedTasks> TimedTasks { get; set; }
+
+        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
+        {
+            if (!optionsBuilder.IsConfigured)
+            {
+                optionsBuilder.UseMySql(Library.ConfigurationManager.AppSettings["JobSqlConnStr"].ToString(), x => x.ServerVersion("5.7.17-mysql"));
+            }
+        }
+
+        protected override void OnModelCreating(ModelBuilder modelBuilder)
+        {
+            modelBuilder.Entity<RightDic>(entity =>
+            {
+                entity.Property(e => e.Id)
+                    .HasColumnName("ID")
+                    .HasColumnType("varchar(50)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.Icon)
+                    .HasColumnType("varchar(50)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.MainDataList)
+                    .HasColumnType("bit(1)")
+                    .HasDefaultValueSql("b'0'");
+
+                entity.Property(e => e.MainMenu)
+                    .HasColumnType("bit(1)")
+                    .HasDefaultValueSql("b'0'");
+
+                entity.Property(e => e.MainStat)
+                    .HasColumnType("bit(1)")
+                    .HasDefaultValueSql("b'0'");
+
+                entity.Property(e => e.Name)
+                    .HasColumnType("varchar(50)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.RightLevel).HasColumnType("int(11)");
+
+                entity.Property(e => e.Sort).HasColumnType("int(11)");
+
+                entity.Property(e => e.Url)
+                    .HasColumnType("varchar(200)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+            });
+
+            modelBuilder.Entity<SysLog>(entity =>
+            {
+                entity.Property(e => e.Id).HasColumnType("int(11)");
+
+                entity.Property(e => e.Contents)
+                    .HasColumnType("varchar(200)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.CreateDate).HasColumnType("datetime");
+
+                entity.Property(e => e.CreateMan)
+                    .HasColumnType("varchar(50)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+            });
+
+            modelBuilder.Entity<TaskFinish>(entity =>
+            {
+                entity.Property(e => e.Id).HasColumnType("int(11)");
+
+                entity.Property(e => e.CreateDate).HasColumnType("datetime");
+
+                entity.Property(e => e.CreateMan)
+                    .HasColumnType("varchar(50)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.GetData)
+                    .HasColumnType("mediumtext")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.QueryCount).HasColumnType("int(11)");
+
+                entity.Property(e => e.SeoDescription)
+                    .HasColumnType("varchar(500)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.SeoKeyword)
+                    .HasColumnType("varchar(200)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.SeoTitle)
+                    .HasColumnType("varchar(100)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.Sort).HasColumnType("int(11)");
+
+                entity.Property(e => e.Status).HasColumnType("int(11)");
+
+                entity.Property(e => e.TargetData)
+                    .HasColumnType("mediumtext")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.TaskId).HasColumnType("int(11)");
+
+                entity.Property(e => e.UpdateDate).HasColumnType("datetime");
+
+                entity.Property(e => e.UpdateMan)
+                    .HasColumnType("varchar(50)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.Version).HasColumnType("int(11)");
+            });
+
+            modelBuilder.Entity<TaskSpCheckData>(entity =>
+            {
+                entity.Property(e => e.Id).HasColumnType("int(11)");
+
+                entity.Property(e => e.CheckKey)
+                    .HasColumnType("varchar(50)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.CheckTable).HasColumnType("int(11)");
+
+                entity.Property(e => e.CreateDate).HasColumnType("datetime");
+
+                entity.Property(e => e.CreateMan)
+                    .HasColumnType("varchar(50)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.EndDate).HasColumnType("datetime");
+
+                entity.Property(e => e.MaxId).HasColumnType("int(11)");
+
+                entity.Property(e => e.QueryCount).HasColumnType("int(11)");
+
+                entity.Property(e => e.ReqType)
+                    .HasColumnType("varchar(10)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.SeoDescription)
+                    .HasColumnType("varchar(500)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.SeoKeyword)
+                    .HasColumnType("varchar(200)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.SeoTitle)
+                    .HasColumnType("varchar(100)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.Sort).HasColumnType("int(11)");
+
+                entity.Property(e => e.StartDate).HasColumnType("datetime");
+
+                entity.Property(e => e.Status).HasColumnType("int(11)");
+
+                entity.Property(e => e.TargetTableName)
+                    .HasColumnType("varchar(50)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.TargetTableType).HasColumnType("int(11)");
+
+                entity.Property(e => e.TaskId).HasColumnType("int(11)");
+
+                entity.Property(e => e.UpdateDate).HasColumnType("datetime");
+
+                entity.Property(e => e.UpdateMan)
+                    .HasColumnType("varchar(50)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.Version).HasColumnType("int(11)");
+            });
+
+            modelBuilder.Entity<TaskSpFieldRelation>(entity =>
+            {
+                entity.Property(e => e.Id).HasColumnType("int(11)");
+
+                entity.Property(e => e.CreateDate).HasColumnType("datetime");
+
+                entity.Property(e => e.CreateMan)
+                    .HasColumnType("varchar(50)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.QueryCount).HasColumnType("int(11)");
+
+                entity.Property(e => e.SeoDescription)
+                    .HasColumnType("varchar(500)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.SeoKeyword)
+                    .HasColumnType("varchar(200)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.SeoTitle)
+                    .HasColumnType("varchar(100)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.Sort).HasColumnType("int(11)");
+
+                entity.Property(e => e.SourceFieldName)
+                    .HasColumnType("varchar(50)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.SourceFieldTitle)
+                    .HasColumnType("varchar(50)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.Status).HasColumnType("int(11)");
+
+                entity.Property(e => e.TargetFieldName)
+                    .HasColumnType("varchar(50)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.TargetFieldType)
+                    .HasColumnType("varchar(20)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.TaskId).HasColumnType("int(11)");
+
+                entity.Property(e => e.UpdateDate).HasColumnType("datetime");
+
+                entity.Property(e => e.UpdateMan)
+                    .HasColumnType("varchar(50)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.Version).HasColumnType("int(11)");
+            });
+
+            modelBuilder.Entity<TaskSpGetData>(entity =>
+            {
+                entity.Property(e => e.Id).HasColumnType("int(11)");
+
+                entity.Property(e => e.CheckKey)
+                    .HasColumnType("varchar(50)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.CreateDate).HasColumnType("datetime");
+
+                entity.Property(e => e.CreateMan)
+                    .HasColumnType("varchar(50)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.FtpPassword)
+                    .HasColumnType("varchar(50)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.FtpUserName)
+                    .HasColumnType("varchar(50)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.IsCheck)
+                    .HasColumnType("bit(1)")
+                    .HasDefaultValueSql("b'0'");
+
+                entity.Property(e => e.QueryCount).HasColumnType("int(11)");
+
+                entity.Property(e => e.ReqParam)
+                    .HasColumnType("varchar(200)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.ReqType)
+                    .HasColumnType("varchar(10)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.ReqUrl)
+                    .HasColumnType("varchar(200)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.SeoDescription)
+                    .HasColumnType("varchar(500)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.SeoKeyword)
+                    .HasColumnType("varchar(200)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.SeoTitle)
+                    .HasColumnType("varchar(100)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.Sort).HasColumnType("int(11)");
+
+                entity.Property(e => e.Status).HasColumnType("int(11)");
+
+                entity.Property(e => e.TargetTableName)
+                    .HasColumnType("varchar(50)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.TargetTableType).HasColumnType("int(11)");
+
+                entity.Property(e => e.TaskId).HasColumnType("int(11)");
+
+                entity.Property(e => e.UpdateDate).HasColumnType("datetime");
+
+                entity.Property(e => e.UpdateMan)
+                    .HasColumnType("varchar(50)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.Version).HasColumnType("int(11)");
+            });
+
+            modelBuilder.Entity<TaskStepRecord>(entity =>
+            {
+                entity.Property(e => e.Id).HasColumnType("int(11)");
+
+                entity.Property(e => e.CreateDate).HasColumnType("datetime");
+
+                entity.Property(e => e.CreateMan)
+                    .HasColumnType("varchar(50)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.QueryCount).HasColumnType("int(11)");
+
+                entity.Property(e => e.SeoDescription)
+                    .HasColumnType("varchar(500)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.SeoKeyword)
+                    .HasColumnType("varchar(200)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.SeoTitle)
+                    .HasColumnType("varchar(100)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.Sort).HasColumnType("int(11)");
+
+                entity.Property(e => e.Status).HasColumnType("int(11)");
+
+                entity.Property(e => e.Step).HasColumnType("int(11)");
+
+                entity.Property(e => e.StepRemark)
+                    .HasColumnType("varchar(200)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.TaskId).HasColumnType("int(11)");
+
+                entity.Property(e => e.UpdateDate).HasColumnType("datetime");
+
+                entity.Property(e => e.UpdateMan)
+                    .HasColumnType("varchar(50)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.Version).HasColumnType("int(11)");
+            });
+
+            modelBuilder.Entity<TimedTasks>(entity =>
+            {
+                entity.Property(e => e.Id).HasColumnType("int(11)");
+
+                entity.Property(e => e.BrandId).HasColumnType("int(11)");
+
+                entity.Property(e => e.CreateDate).HasColumnType("datetime");
+
+                entity.Property(e => e.CreateMan)
+                    .HasColumnType("varchar(50)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.DoTime).HasColumnType("int(11)");
+
+                entity.Property(e => e.EndDate).HasColumnType("datetime");
+
+                entity.Property(e => e.Name)
+                    .HasColumnType("varchar(50)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.Note)
+                    .HasColumnType("varchar(200)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.OrderJson)
+                    .HasColumnType("varchar(500)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.QueryCount).HasColumnType("int(11)");
+
+                entity.Property(e => e.SeoDescription)
+                    .HasColumnType("varchar(500)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.SeoKeyword)
+                    .HasColumnType("varchar(200)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.SeoTitle)
+                    .HasColumnType("varchar(100)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.ServerName)
+                    .HasColumnType("varchar(50)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.Sort).HasColumnType("int(11)");
+
+                entity.Property(e => e.StartDate).HasColumnType("datetime");
+
+                entity.Property(e => e.Status).HasColumnType("int(11)");
+
+                entity.Property(e => e.TargetIp)
+                    .HasColumnType("varchar(15)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.TargetPort).HasColumnType("int(11)");
+
+                entity.Property(e => e.TimeStep)
+                    .HasColumnType("varchar(500)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.UpdateDate).HasColumnType("datetime");
+
+                entity.Property(e => e.UpdateMan)
+                    .HasColumnType("varchar(50)")
+                    .HasCharSet("utf8")
+                    .HasCollation("utf8_general_ci");
+
+                entity.Property(e => e.Version).HasColumnType("int(11)");
+            });
+
+            OnModelCreatingPartial(modelBuilder);
+        }
+
+        partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
+    }
+}

二進制
Models/.DS_Store


+ 40 - 0
Models/ActivateRecord.cs

@@ -0,0 +1,40 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.Models
+{
+    public partial class ActivateRecord
+    {
+        public int Id { get; set; }
+        public int Sort { get; set; }
+        public int QueryCount { get; set; }
+        public int Status { get; set; }
+        public DateTime? CreateDate { get; set; }
+        public DateTime? UpdateDate { get; set; }
+        public string SeoTitle { get; set; }
+        public string SeoKeyword { get; set; }
+        public string SeoDescription { get; set; }
+        public string ProductType { get; set; }
+        public string AgentNo { get; set; }
+        public string Remark { get; set; }
+        public string BizEnterName { get; set; }
+        public string BizEnterNo { get; set; }
+        public string MerIdcardNo { get; set; }
+        public string MerRealName { get; set; }
+        public DateTime? ActivateDate { get; set; }
+        public string ActivateStatus { get; set; }
+        public string AssessMonthCount { get; set; }
+        public string AssessMonth { get; set; }
+        public DateTime? MerRegDate { get; set; }
+        public string SnNo { get; set; }
+        public string MerMobile { get; set; }
+        public string MerName { get; set; }
+        public string MerNo { get; set; }
+        public string ChannelSerial { get; set; }
+        public string Field5 { get; set; }
+        public string Field4 { get; set; }
+        public string Field3 { get; set; }
+        public string Field2 { get; set; }
+        public string Field1 { get; set; }
+    }
+}

+ 11 - 0
Models/ApiVersion.cs

@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.Models
+{
+    public partial class ApiVersion
+    {
+        public string ApiKey { get; set; }
+        public int Timestamp { get; set; }
+    }
+}

+ 36 - 0
Models/BindRecord.cs

@@ -0,0 +1,36 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.Models
+{
+    public partial class BindRecord
+    {
+        public int Id { get; set; }
+        public int Sort { get; set; }
+        public int QueryCount { get; set; }
+        public int Status { get; set; }
+        public DateTime? CreateDate { get; set; }
+        public DateTime? UpdateDate { get; set; }
+        public string SeoTitle { get; set; }
+        public string SeoKeyword { get; set; }
+        public string SeoDescription { get; set; }
+        public string ChannelSerial { get; set; }
+        public DateTime? UpdateTime { get; set; }
+        public DateTime? CreateTime { get; set; }
+        public string Remark { get; set; }
+        public string MerNewSnNo { get; set; }
+        public string ProductType { get; set; }
+        public string MerStatus { get; set; }
+        public string MerOperateType { get; set; }
+        public DateTime? MerOperateDate { get; set; }
+        public string MerSnNo { get; set; }
+        public string MerName { get; set; }
+        public string AgentName { get; set; }
+        public string MerNo { get; set; }
+        public string Field5 { get; set; }
+        public string Field4 { get; set; }
+        public string Field3 { get; set; }
+        public string Field2 { get; set; }
+        public string Field1 { get; set; }
+    }
+}

+ 36 - 0
Models/ChangeBindRecord.cs

@@ -0,0 +1,36 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.Models
+{
+    public partial class ChangeBindRecord
+    {
+        public int Id { get; set; }
+        public int Sort { get; set; }
+        public int QueryCount { get; set; }
+        public int Status { get; set; }
+        public int Version { get; set; }
+        public DateTime? CreateDate { get; set; }
+        public DateTime? UpdateDate { get; set; }
+        public string CreateMan { get; set; }
+        public string UpdateMan { get; set; }
+        public string SeoTitle { get; set; }
+        public string SeoKeyword { get; set; }
+        public string SeoDescription { get; set; }
+        public string AgentNo { get; set; }
+        public string Field5 { get; set; }
+        public string Field4 { get; set; }
+        public string Field3 { get; set; }
+        public string Field2 { get; set; }
+        public string Field1 { get; set; }
+        public string ChannelSerial { get; set; }
+        public DateTime? ReBindTime { get; set; }
+        public DateTime? ConfirmTime { get; set; }
+        public string Remark { get; set; }
+        public string MerNewSnNo { get; set; }
+        public string ProductType { get; set; }
+        public string MerSnNo { get; set; }
+        public string MerName { get; set; }
+        public string AgentName { get; set; }
+    }
+}

+ 34 - 0
Models/Col.cs

@@ -0,0 +1,34 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.Models
+{
+    public partial class Col
+    {
+        public int Id { get; set; }
+        public int Sort { get; set; }
+        public int QueryCount { get; set; }
+        public int Status { get; set; }
+        public DateTime? CreateDate { get; set; }
+        public DateTime? UpdateDate { get; set; }
+        public string SeoTitle { get; set; }
+        public string SeoKeyword { get; set; }
+        public string SeoDescription { get; set; }
+        public string Url { get; set; }
+        public string Contents { get; set; }
+        public string ColEnName { get; set; }
+        public ulong Recommend { get; set; }
+        public string ColDetail { get; set; }
+        public string ColPicPath { get; set; }
+        public string ColName { get; set; }
+        public string ColId { get; set; }
+        public string DetailTempM { get; set; }
+        public string ListTempM { get; set; }
+        public string DetailTemp { get; set; }
+        public string ListTemp { get; set; }
+        public int ListPageCount { get; set; }
+        public int ParentId { get; set; }
+        public string ColEnNav { get; set; }
+        public string ClassName { get; set; }
+    }
+}

+ 11 - 0
Models/ColForEnName.cs

@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.Models
+{
+    public partial class ColForEnName
+    {
+        public string EnName { get; set; }
+        public int ColId { get; set; }
+    }
+}

+ 21 - 0
Models/CustomTagSet.cs

@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.Models
+{
+    public partial class CustomTagSet
+    {
+        public int Id { get; set; }
+        public int Sort { get; set; }
+        public int QueryCount { get; set; }
+        public int Status { get; set; }
+        public DateTime? CreateDate { get; set; }
+        public DateTime? UpdateDate { get; set; }
+        public string SeoTitle { get; set; }
+        public string SeoKeyword { get; set; }
+        public string SeoDescription { get; set; }
+        public string Contents { get; set; }
+        public string Title { get; set; }
+        public string Tags { get; set; }
+    }
+}

+ 12 - 0
Models/CustomerTableRecord.cs

@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.Models
+{
+    public partial class CustomerTableRecord
+    {
+        public string TableEnName { get; set; }
+        public DateTime? CreateDate { get; set; }
+        public DateTime? AddTableDate { get; set; }
+    }
+}

+ 30 - 0
Models/KqActivate.cs

@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.Models
+{
+    public partial class KqActivate
+    {
+        public string MerNo { get; set; }
+        public string ActName { get; set; }
+        public string ActNo { get; set; }
+        public string SourceType { get; set; }
+        public DateTime? UpdateTime { get; set; }
+        public DateTime? CreateTime { get; set; }
+        public string Remark { get; set; }
+        public string ActVerifyFlag { get; set; }
+        public string BizEnterName { get; set; }
+        public string BizEnterNo { get; set; }
+        public string MerIdcardNo { get; set; }
+        public string MerRealName { get; set; }
+        public DateTime? ActivateDate { get; set; }
+        public string ActivateStatus { get; set; }
+        public string AssessMonthCount { get; set; }
+        public string AssessMonth { get; set; }
+        public DateTime? MerRegDate { get; set; }
+        public string MerSnNo { get; set; }
+        public string ProductType { get; set; }
+        public string MerMobile { get; set; }
+        public string MerName { get; set; }
+    }
+}

+ 27 - 0
Models/KqActivateCallBack.cs

@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.Models
+{
+    public partial class KqActivateCallBack
+    {
+        public string MerNo { get; set; }
+        public DateTime? UpdateTime { get; set; }
+        public DateTime? CreateTime { get; set; }
+        public string Remark { get; set; }
+        public string ActVerifyFlag { get; set; }
+        public string BizEnterName { get; set; }
+        public string BizEnterNo { get; set; }
+        public string MerIdcardNo { get; set; }
+        public string MerRealName { get; set; }
+        public DateTime? ActivateDate { get; set; }
+        public string ActivateStatus { get; set; }
+        public string AssessMonthCount { get; set; }
+        public string AssessMonth { get; set; }
+        public DateTime? MerRegDate { get; set; }
+        public string MerSnNo { get; set; }
+        public string ProductType { get; set; }
+        public string MerMobile { get; set; }
+        public string MerName { get; set; }
+    }
+}

+ 26 - 0
Models/KqMerchant.cs

@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.Models
+{
+    public partial class KqMerchant
+    {
+        public string MerNo { get; set; }
+        public DateTime? UpdateTime { get; set; }
+        public DateTime? CreateTime { get; set; }
+        public string Remark { get; set; }
+        public string City { get; set; }
+        public string Province { get; set; }
+        public string SourceType { get; set; }
+        public string BizEnterName { get; set; }
+        public string BizEnterNo { get; set; }
+        public string MerRealName { get; set; }
+        public string MerIdcardNo { get; set; }
+        public DateTime? MerBindDate { get; set; }
+        public DateTime? MerRegDate { get; set; }
+        public string MerSnNo { get; set; }
+        public string ProductType { get; set; }
+        public string MerMobile { get; set; }
+        public string MerName { get; set; }
+    }
+}

+ 43 - 0
Models/KqTrade.cs

@@ -0,0 +1,43 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.Models
+{
+    public partial class KqTrade
+    {
+        public string MerNo { get; set; }
+        public string InputModel { get; set; }
+        public string KqTradeSeq { get; set; }
+        public string DigStatus { get; set; }
+        public string S0settleStatus { get; set; }
+        public decimal TotalRebateAmt { get; set; }
+        public decimal TotalCostAmt { get; set; }
+        public decimal SettleRebateAmt { get; set; }
+        public decimal SettleCostAmt { get; set; }
+        public decimal SettleFeeRebateAmt { get; set; }
+        public decimal SettleFeeCostAmt { get; set; }
+        public string BillType { get; set; }
+        public decimal SettleTotalFee { get; set; }
+        public string SourceType { get; set; }
+        public string BizEnterName { get; set; }
+        public string BizEnterNo { get; set; }
+        public string SmallDouble { get; set; }
+        public decimal SettleFee { get; set; }
+        public string SettleMethod { get; set; }
+        public decimal FeeAmount { get; set; }
+        public string BankCardNo { get; set; }
+        public DateTime? UpdateTime { get; set; }
+        public DateTime? CreateTime { get; set; }
+        public string Remark { get; set; }
+        public decimal DigAmt { get; set; }
+        public string DigAmtFlag { get; set; }
+        public string TradeSnNo { get; set; }
+        public string BankCardType { get; set; }
+        public string TradeTime { get; set; }
+        public string TradeDate { get; set; }
+        public string TradeStatus { get; set; }
+        public string ProductType { get; set; }
+        public decimal TradeAmount { get; set; }
+        public string MerName { get; set; }
+    }
+}

+ 34 - 0
Models/KqTradeCallBack.cs

@@ -0,0 +1,34 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.Models
+{
+    public partial class KqTradeCallBack
+    {
+        public string MerNo { get; set; }
+        public DateTime? UpdateTime { get; set; }
+        public DateTime? CreateTime { get; set; }
+        public string Remark { get; set; }
+        public string ReceiptType { get; set; }
+        public string IsStoreCashier { get; set; }
+        public decimal DigAmt { get; set; }
+        public string DigAmtFlag { get; set; }
+        public string MerMobile { get; set; }
+        public string DeviceType { get; set; }
+        public string TradeSnNo { get; set; }
+        public string BankCardType { get; set; }
+        public string SerEntryMode { get; set; }
+        public string TradeType { get; set; }
+        public string TradeTime { get; set; }
+        public string TradeDate { get; set; }
+        public string ErrorMsg { get; set; }
+        public string ErrorCode { get; set; }
+        public string TradeStatus { get; set; }
+        public string ProductType { get; set; }
+        public string DiscountRateFlag { get; set; }
+        public string BankAuthCode { get; set; }
+        public string TradeReferNo { get; set; }
+        public decimal TradeAmount { get; set; }
+        public string MerName { get; set; }
+    }
+}

+ 36 - 0
Models/KqTradeFlux.cs

@@ -0,0 +1,36 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.Models
+{
+    public partial class KqTradeFlux
+    {
+        public string MerNo { get; set; }
+        public string DeviceNetwork { get; set; }
+        public string TerminalNo { get; set; }
+        public string InputModel { get; set; }
+        public string KqTradeSeq { get; set; }
+        public string BillType { get; set; }
+        public string SourceType { get; set; }
+        public string BizEnterName { get; set; }
+        public string BizEnterNo { get; set; }
+        public string SmallDouble { get; set; }
+        public decimal SettleFee { get; set; }
+        public string SettleMethod { get; set; }
+        public decimal FeeAmount { get; set; }
+        public string BankCardNo { get; set; }
+        public DateTime? UpdateTime { get; set; }
+        public DateTime? CreateTime { get; set; }
+        public string Remark { get; set; }
+        public decimal DigAmt { get; set; }
+        public string DigAmtFlag { get; set; }
+        public string TradeSnNo { get; set; }
+        public string BankCardType { get; set; }
+        public string TradeTime { get; set; }
+        public string TradeDate { get; set; }
+        public string TradeStatus { get; set; }
+        public string ProductType { get; set; }
+        public decimal TradeAmount { get; set; }
+        public string MerName { get; set; }
+    }
+}

+ 21 - 0
Models/KssBind.cs

@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.Models
+{
+    public partial class KssBind
+    {
+        public string MerNo { get; set; }
+        public DateTime? UpdateTime { get; set; }
+        public DateTime? CreateTime { get; set; }
+        public string Remark { get; set; }
+        public string MerNewSnNo { get; set; }
+        public string ProductType { get; set; }
+        public string MerStatus { get; set; }
+        public string MerOperateType { get; set; }
+        public DateTime? MerOperateDate { get; set; }
+        public string MerSnNo { get; set; }
+        public string MerName { get; set; }
+        public string AgentName { get; set; }
+    }
+}

+ 21 - 0
Models/KssFreeDeposit.cs

@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.Models
+{
+    public partial class KssFreeDeposit
+    {
+        public string MerNo { get; set; }
+        public DateTime? UpdateTime { get; set; }
+        public DateTime? CreateTime { get; set; }
+        public string Remark { get; set; }
+        public string NewFlag { get; set; }
+        public string ActName { get; set; }
+        public string ActNo { get; set; }
+        public string MerSnNo { get; set; }
+        public DateTime? MerBindDate { get; set; }
+        public string ProductType { get; set; }
+        public string MerName { get; set; }
+        public string AgentName { get; set; }
+    }
+}

+ 24 - 0
Models/KssMerchant.cs

@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.Models
+{
+    public partial class KssMerchant
+    {
+        public string MerNo { get; set; }
+        public DateTime? UpdateTime { get; set; }
+        public DateTime? CreateTime { get; set; }
+        public string Remark { get; set; }
+        public string City { get; set; }
+        public string Province { get; set; }
+        public string ProductType { get; set; }
+        public string MerStatus { get; set; }
+        public DateTime? MerAuditDate { get; set; }
+        public DateTime? MerRegDate { get; set; }
+        public string MerIdcardNo { get; set; }
+        public string MerMobile { get; set; }
+        public string MerRealName { get; set; }
+        public string AgentName { get; set; }
+        public string MerName { get; set; }
+    }
+}

+ 25 - 0
Models/KssReturnDeposit.cs

@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.Models
+{
+    public partial class KssReturnDeposit
+    {
+        public string MerNo { get; set; }
+        public DateTime? UpdateTime { get; set; }
+        public DateTime? CreateTime { get; set; }
+        public string Remark { get; set; }
+        public string RetOrderNo { get; set; }
+        public string RetFlag { get; set; }
+        public decimal RetAmount { get; set; }
+        public string MerSnNo { get; set; }
+        public string ProductType { get; set; }
+        public int IntervalDay { get; set; }
+        public DateTime? MerStdDate { get; set; }
+        public DateTime? MerDisposeDate { get; set; }
+        public string ActName { get; set; }
+        public string ActNo { get; set; }
+        public string MerName { get; set; }
+        public string AgentName { get; set; }
+    }
+}

+ 24 - 0
Models/KssStageRwd.cs

@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+
+namespace MySystem.Models
+{
+    public partial class KssStageRwd
+    {
+        public string MerNo { get; set; }
+        public DateTime? UpdateTime { get; set; }
+        public DateTime? CreateTime { get; set; }
+        public string Remark { get; set; }
+        public string NewFlag { get; set; }
+        public string MerStdStatus { get; set; }
+        public DateTime? MerStdDate { get; set; }
+        public string MerStdStage { get; set; }
+        public string ActName { get; set; }
+        public string ActNo { get; set; }
+        public string MerSnNo { get; set; }
+        public DateTime? MerBindDate { get; set; }
+        public string ProductType { get; set; }
+        public string MerName { get; set; }
+        public string AgentName { get; set; }
+    }
+}

部分文件因文件數量過多而無法顯示